Ready when you are.
Nothing connected yet. Pick a starting point below and the rest of the tabs come alive once your equipment is online.
Equipment is up. Plan the whole night, run a sequence, or jump into live stacking.
Get Started
| ? | ||
| ? |
⚡ Auto dither / re-focus / re-center
💾
⚙ Per-frame pre-processing
No suitable targets above 30° in the high-Dec zone right now. The mount can still TPPA from wherever it's pointing, just click Start above.
Adjust the mount's alt/az bolts to walk the dot to the centre, then hit Refresh (or enable Auto) to re-measure. If an error grows after a nudge, reverse that knob. Once the dot reads near zero, re-run the 3-point sweep to confirm: the sweep is the ground-truth measurement.
How TPPA works: point the telescope at any patch of sky with a few stars (Dec ~60°+ recommended), enable tracking, then click Start. Polaris will slew the mount in RA by two times and plate-solve at each position. The three solved points constrain the mount's mechanical polar axis, and the difference vs. the true celestial pole gives your alignment error.
After TPPA, a bullseye shows the pole at the centre and your mount's RA axis as a dot. Adjust the tripod knobs, then click Refresh to re-measure: or enable Auto for a continuous capture/solve loop.
How rudimentary alignment works: you align the mount roughly with a compass + tilt app, then pick a bright visible target above. Polaris slews (or you point manually), captures one frame, plate-solves, and reports the pointing error. Walk to the mount, nudge the azimuth or altitude knob a little, then click Re-capture + solve to see the new error. Repeat until you're satisfied.
Unlike TPPA, this works when the polar region is blocked (e.g. balcony with view to the south only). It also works on manual mounts when you pick Use current mount position.
Focus motor 0 MOVING
Install a physical Bahtinov mask over the scope aperture and point at a bright star (magnitude < 3, e.g. Vega, Sirius, Polaris).
Advanced
| ? |
Focus 0 MOVING
Focus motor 0 MOVING
·
Not sure of the path? Browse to it on the Studio tab and copy the folder path here.
For older clips that open with a bright colour cast in ZWO ASIVideoStack or FireCapture. Writes a corrected full-range copy named -fixed16.ser beside the original and selects it. New recordings are already correct.
Advanced, individual algorithm knobs
| RA steps | Dec steps | ||
| Camera angle | Orthogonality err | ||
| RA rate | Dec rate | ||
| Dec backlash | Side of pier | ||
| Binning | Created |
| Image scale | Focal length | ||
| Declination | Expected RA |
PHD2 GUI session not running
Starting takes ~5-10 seconds (spins up an Xorg-dummy display + launches PHD2 inside).
TightVNC service is stopped
The TightVNC desktop server (tvnserver)
is installed but not running. Start it to enable
the embedded view.
Polaris needs administrator privileges to control
Windows services. If the button fails, start
tvnserver manually via
services.msc.
·
devices
Discover Alpaca / ASCOM Remote devices on this LAN. Polaris auto-connects every discovered device, then you select them in each card below (Camera, Mount, Focuser, Filter Wheel) under the "Alpaca" driver. On Windows, install ASCOM Platform 6.6+ and the ASCOM Remote Server, pick your ASCOM drivers, click "Start Server", then hit Discover here.
| Device | Type | # | |
|---|---|---|---|
|
🎥 Colour / debayer quirks
Change these only if the preview / stack comes out grey, with swapped colours, or as a red/green checkerboard.
🛡 Security and Protection Features
Stops tracking + aborts the session if the mount tracks past the meridian without a flip, or the guider loses the star repeatedly. The altitude floor aborts a slew whose OTA drops below it (an anti-crash backstop for a wrong-way slew toward the tripod; 0 disables). 0 disables a guard. Global: applies to every rig.
A SKY "Go To" whose swing is at least this many degrees, or whose target sits below the floor, asks you to confirm before the mount moves (a big swing can make the mount un-flip and take the long way toward the tripod). Blank ⇒ defaults (60° / 5°); 0 disables that check. The altitude floor also arms the live anti-crash abort (needs the global guard above on).
Pushes the correct clock + observatory location to the mount before it slews, so a stale mount clock/site can't send the scope the wrong way into the tripod. If the mount can't accept the push, the GoTo asks you to confirm. On by default; remote observatories rely on it to self-heal.
Use after manually moving the drawtube or when the step counter has drifted. Does not move the motor.
Enable when the focuser is mounted backwards relative to the optical train and "inward" actually moves the drawtube out.
Driver overshoots the target then returns by this many steps to take the slack out of the gear train. Typical value 20-50 for stock Crayfords.
Names are saved on this rig and applied to every image and filter menu, whatever the driver reports. When the driver accepts names (INDI) they are written into it too.
▸ Accessories
pip install indiwebmanager
Build floating control panels for the active rig: group live equipment readouts, switches and inputs into cards you can move, resize and watch on any tab. Layout and widgets are saved with the rig.
Widgets
No widgets yet. Pick from the catalog on the right.
Add widget
Loading…
Nothing available from this source (device not connected?).
Create a panel to start, then add widgets to it.
| Magnitude | |
| Distance | |
| Radius | |
| Size | |
| Ra/Dec | |
| Type | |
| Meridian | |
| Horizon |
Click any object on the map, or use Search above.
Export
Output:
Polaris will hand the Pi to your home WiFi and stop broadcasting
the hotspot.
If the connection fails (wrong password / out of range), the
hotspot auto-reverts after 30 s.
Polaris will leave
and join the one you pick, so the page you are reading this on
will lose contact for a moment. If the new network cannot be
joined, the hotspot comes back after 30 s and you can reach the
rig there.
Switching… the Pi is dropping the hotspot and trying the new
connection. This can take up to 30 s. If your browser is
currently connected to the Pi via the hotspot you will lose
the link as soon as the switch starts; reconnect to your home
WiFi and reopen .
📈 Sensor analysis
Measures gain (e/ADU), read noise, full well and dynamic range across the gain range using the photon-transfer curve. Point the camera at a uniform, constant light source (flat panel or evenly lit wall) and keep it steady for the whole run.
| Gain | e/ADU | Read noise (e) | Full well (e) | Rel. gain (dB) | DR (stops) |
|---|---|---|---|---|---|
Edit hotspot credentials
Changes apply immediately. Any device connected to the old hotspot SSID will be kicked off; reconnect with the new credentials.
- : · · score
| Target | Mode | Window (local) | Frames | Est. | Max alt | ||
|---|---|---|---|---|---|---|---|
⚠ Mount not connected, meridian time unavailable.
⚠ Observatory longitude is 0, set it in Settings for correct LST.
🛡 Cable-wrap + guide safety stop (global) lives on the Mount card in RIGS.
⚠ PHD2 not connected, dither will be silently skipped during the run.
⚠ PHD2 connected but not guiding, start guiding before launching the sequence.
Park supersedes stop-tracking. End events always run on natural completion;
tick the box above to also run them when you press Stop.
Auto-GraXpert is fire-and-forget, the next exposure does not wait for it.
Output lands next to each light with the _bge suffix.
No sequence loaded: click + Add in the controls panel or pick a target in Sky Explorer.
Pre-flight
Connect camera + filter wheel in the RIGS tab first.
Filters to capture
Filters are captured in the order picked. Trained exposures (when available) seed the binary search so converging takes 1-2 frames instead of 5-8.
Settings
The binary search halves the bracket each iteration; 10 covers ~3 decades of dynamic range. Drop tolerance to ±1-2% if your pipeline is sensitive to flat-field normalization.
Trained exposures
| Filter | Binning | Exposure |
|---|---|---|
✓ WCS written to the FITS headers
Solver output
| Name | Size | Modified | Type | IMAGETYP | Filter | Target | Exp (s) | |
|---|---|---|---|---|---|---|---|---|
| Up one level | ||||||||
| (empty folder) | ||||||||
HTTPS Certificate
Polaris uses a self-signed certificate so the connection is encrypted on your LAN. Install the root certificate on each device once and the browser stops warning about it.
Install on this client device
Estimated time: min
Remote access relay
Reach Polaris from anywhere through a relay server, with no port-forwarding on your router. Paste the tunnel URL and access token issued by your relay operator, or run your own relay: the server ships in the Polaris repository.
Auto-push to network storage
Copy every saved image to a NAS, network share or SSH box as it's written, mirroring the capture folder tree. The local copy stays put.
Appearance
Translations are community-assisted and may be partial; untranslated text falls back to English. Changing the language reloads the page.
Drag the slider, then click Apply to scale the whole interface. Smaller values fit more onto a phone; larger values make the night-mode UI legible across the observatory. Persists per browser.
Atkinson Hyperlegible was designed by the Braille
Institute for maximum legibility, letters with unique shapes so
B, 8, l, 1,
I, 0, O never blur together.
Try it if you (or your stargazing companions) prefer a more readable
typeface. Persists per browser; no restart needed.
Pixels of empty space around the navigation rail, for when it lands under a notch, a rounded corner or the home indicator. The rail grows by what you set instead of squeezing its buttons. Left/right apply to the vertical rail, top/bottom to the portrait strip. Persists per browser.
Turns off panel fade-ins, modal zoom and spinners. Helps on older phones/tablets and respects motion sensitivity. Your device's system "reduce motion" setting is always honoured too.
Tightens the spacing of buttons, inputs and toolbars so more fits on screen, lower it on a phone to free room for the image / sky views. Doesn't change text size. Persists per browser.
Shows a compact numeric or full keyboard on the right edge when you tap a field, so the native tablet keyboard never covers the live view or Sky map. Dismisses on OK, on ✕, or when you tap away. Persists per browser.
How sharp the on-screen preview can get when you zoom in. Higher uses more graphics memory on the client device showing the view (your phone / tablet / PC). For colour live-stacking it also sets the resolution the host renders the stacked preview at, so on a low-RAM host (Raspberry Pi / SBC) Standard noticeably cuts host memory use during a live stack. Your saved images are always full quality regardless.
For one-shot-colour cameras, reconstruct colour at the full sensor resolution instead of the lighter half-resolution preview. Sharper, but heavier: it only takes effect when the frame fits within the Preview quality limit above (so pair it with Native for the full effect). Mono cameras are unaffected.
The SKY map ships with real deep-sky imagery (DSS Color) at a low resolution that works fully offline. Download a higher detail level here for ASIAIR-grade zoom, it's stored on this host and used automatically, no internet needed afterwards. Each level includes the lower ones and resumes where it left off.
Source: DSS Color, STScI/NASA, HEALPixed by CDS Strasbourg. Reload the SKY tab after a download to see the new detail.
Object cards on the SKY map show a real photo of the target. The bundled build includes the showpieces (all Messier plus named nebulae/galaxies) so common targets work offline out of the box. Download the full set here for a photo of every catalogued object, stored on this host, used automatically, no internet needed afterwards.
Thumbnails: DSS2 Color cutouts, STScI/NASA via CDS hips2fits.
Remote terminal
SSH into the Polaris host (or any other Linux box on your LAN) from the browser. Credentials are sent per-session and never saved.
Optimize this SBC: opens the terminal to localhost
and runs the config tool. Enter your SBC login; sudo
will prompt for your password once (Polaris never gets
passwordless root). Needs the SSH server running.
The remote terminal is currently disabled.
Authentication
Password gate for this Polaris server. Loopback (127.0.0.1) always bypasses, so SSH tunnels and local scripts work unchanged.
Display name
What to call this host in the browser tab and in the phone apps. Pick something you will recognise, like Telescope on the balcony. Leave it blank to use the automatic name.
This is a label only. The address on your network stays
, which is
fixed per device and is what the certificate covers.
Plate solving
Choose which installed solver to use and how aggressively to downsample. On slower hardware (Pi-class), a higher downsample solves a big sensor much faster (ASIAIR-style).
✓ ready
⚠ needs an API key (set below)
⚠ not detected: enable "Run via WSL" (in advanced below) or set the solve-field path, then click Save
⚠ not detected on this system
·
Free key from nova.astrometry.net (Profile → API Key). The online solver is a web service, nothing to install; it just needs this key. Without it it stays disabled. Blind solve over the internet: slower, but a solid fallback when ASTAP can't solve.
Solver paths, solve-field & WSL (advanced)
Leave blank to auto-detect. Set these only if Polaris can't find your install.
Astrometry.net (local solve-field): pick "Astrometry.net (local solve-field)" above as the primary/blind solver to use it.
Polaris invokes wsl.exe solve-field and translates Windows paths to
/mnt/<drive>/… automatically. Install solve-field + index files in
the distro (e.g. sudo apt install astrometry.net astrometry-data-tycho2).
Star databases
This rig images across, at arcsec per pixel.
Set the camera pixel size and the focal length on the rig to get a recommendation for your field of view.
Every band listed can solve this field. They roughly double in size for each step finer, and the coarsest ones solve fastest, so the ticked pair is the cheapest that works. Add finer bands only if a sparse field fails.
No index bands to suggest until this rig knows its optics.
Unpacking on the host. This part cannot be cancelled: a half-written database would load and then fail to solve.
Colour calibration data
What PCC and SPCC use to match your stars to a reference. It all ships with Polaris: nothing to download on the device.
The bundled sensor/filter curves are idealised generic archetypes, not
measured manufacturer data. To calibrate against your exact gear, drop your
real QE / transmission curves into
(each curve is { wl:[nm…], v:[0..1…] }) and re-run SPCC.
Clock
Sync the host's wall clock from this client device when the host is offline (no NTP) and has no RTC battery. Action is explicit so the wall clock never jumps during a running sequence.
⚠ Clock sync is Linux-only (uses
timedatectl). On Windows /
macOS use the OS clock settings or NTP.
Scheduled shutdown
At the chosen time Polaris stops the capture and guiding, parks the mount, gently warms the camera and turns cooling off, and optionally powers off the host. For when you doze off and forget the rig is running.
Power
Restart the Polaris server or reboot the whole device without an SSH session. Handy on a headless SBC at the scope, or a mini-PC you reach only through the browser.
⚠ Device reboot is not available on this platform.
Registers a Scheduled Task that launches Polaris at startup as
SYSTEM, so the server is reachable after a reboot
even before anyone logs in. Enabling this needs Polaris to be
running as Administrator.
✓ Auto-start at boot is enabled (systemd
polaris.service).
⚠ Auto-start at boot is disabled. Enable with
sudo systemctl enable polaris.service.
Not running under systemd, so boot auto-start is not managed here.
Software update
Check for a newer Polaris release and install it, or roll back to a previous version, all without an SSH session.
Running v. ⬆ Update available: v: view & install
Scripts (beta)
Run Python scripts against Polaris's processing engine (polarispy). Bundled
examples plus your own in ~/.config/NINA.Polaris/scripts, or from
the STUDIO Files toolbar ("Ported Siril Scripts").
Only scripts that read image pixels (e.g. Statistical Stretch) need this. Downloads once (needs internet), then works offline. Requires a matching release pack for this device's architecture and Python version.
Progress and log appear in the floating panel while a script runs. You can also run these from the STUDIO Files toolbar ("Ported Siril Scripts").
Network (WiFi)
nmcli not detected. Install with
sudo apt install network-manager
and reboot, then the WiFi panel will appear here.
No WiFi interface detected on this host. Ethernet-only mini-PCs are managed via the OS settings.
,
then switch to Station mode to join the WiFi here.
Default hotspot: Polaris-Hotspot / polaris1234.
Switching to Station mode hands the Pi to your home WiFi
so it stops broadcasting its own network. Auto-reverts
to Hotspot after 30 s if the new connection cannot get a DHCP lease.
If you take the rig somewhere your saved WiFi is out of
range, the hotspot comes back up on its own after about a minute
so you never need an ethernet cable to reach it.
Observatory
Custom horizon
Click to add a point, drag to move it, right-click to delete. Azimuth runs left→right (0° N, 90° E, 180° S, 270° W); the red band is blocked sky.
Image Output
Current root:
Pick or change the capture root from the
Studio tab:
navigate to the folder, then click Set as Studio root.
Files are organised under
{rig}/{target}/lights · stacked · aux/... and {rig}/calibration/...
automatically.
Tokens: {target} {filter} {exposure} {gain} {binning} {bitdepth}
{date} {time} {datetime} {framenr} {seq} {camera} {temp} {imagetype}.
Leave blank for the default
({target}_{filter}_{exposure}s_g{gain}_{temp}C_{datetime}_{seq}).
Image cache
Polaris keeps rendered previews + thumbnails on disk so re-opening a file is instant and doesn't re-render on the Pi. Safe to clear any time: entries are regenerated on demand the next time you view a file.
Hardware
Tries INDI at , then runs Alpaca local-network discovery, then connects every device saved on the active rig. Each result fires a toast on every connected browser. Default off so a fresh install never dials hardware that isn't powered up yet.
Debug logging
Default ON (ASIAIR-style). Every action is written to a
per-session file logs/polaris_<date>_<time>.jsonl (one per Polaris run) so you can inspect a session later; files older than 7 days are cleaned up.
Native guiding writes a PHD2-compatible guide log (opens in PHD2 Log Viewer);
external PHD2 copies its own log from ~/Documents/PHD2. Saved under logs/guide/.
External tools
Polaris can drive Siril (preprocessing + stacking) and GraXpert (background extraction, deconvolution, denoising) as external binaries when installed on this machine.
+ scripts ·
Install Siril from siril.org and reload this page (or click Re-detect).
Install GraXpert v3.0+ from graxpert.com , Deconvolution + Denoising require v3.0+, BGE works on v2.x too.
Default tuning
HTTPS endpoints (for WebGPU + multi-thread WASM)
Plain HTTP is what you're on right now, Chrome blocks
WebGPU (client-side AI inference) and
SharedArrayBuffer (multi-thread WASM
fallback) until the origin is a "secure context"
(localhost or any https://).
Polaris ships a self-signed cert covering every
hostname / LAN IP it can resolve. Click an HTTPS URL
below from the client device; Chrome will warn that
the cert is untrusted; click Advanced → Proceed
once per device. After that, WebGPU lights up.
Certificate fingerprint, compare against what
your browser shows in cert details:
SHA-256 (what modern browsers display):
SHA-1 (legacy):
Want the green padlock? Install this cert as a trusted root on each device: ⬇ Download certificate
Assistant
Choose where the Canopus AI co-pilot runs, the hosted cloud, or a local model on this Polaris host, and manage the on-host model.
Cloud runs on the hosted Canopus service (paid). On this host runs a local model on this Polaris host. On this device runs the agent in your browser against a local LLM (Ollama / LM Studio / llama.cpp) on the computer you're using, fast on a powerful PC/Mac, free and offline, no account needed.
On a phone or tablet browser, On this device has no local model to run; use On this host, or install the Polaris app to run it on this device.
Canopus runs the model right here on this device, fully offline. Download it once, then start it, no server or account needed.
The model source isn't configured on the connected Polaris host yet.
⚠ On a phone or tablet browser there is no local LLM here to run the model.
Choose On this host to run the model on the Polaris host (works from any browser), or install the Polaris app to run it natively on this device.
Run a local LLM on this computer with Ollama, LM Studio or llama.cpp, then point Canopus at its OpenAI-compatible endpoint. The agent runs in your browser; inference runs on this machine's GPU, nothing leaves it.
★ recommended
✓ installed
Polaris and your LLM are on different machines, so the LLM server must allow
this page's origin (CORS). For Ollama, run it with
OLLAMA_ORIGINS= (or *);
LM Studio / llama.cpp have a CORS toggle.
Polaris reaches your LLM through the host, so no CORS setup is needed.
After connecting, pick a model above, Canopus downloads it into Ollama for you. Only tool-capable models are listed.
AI models
In-browser AI ops: star removal (nox / starrem2k13 / StarNet++) and GraXpert (BGE / Denoise / Deconvolution). Server hosts the model files, your browser fetches them once and runs inference locally, works on any device with WebGPU or WASM SIMD (laptops, phones, tablets).
⚠ You're on plain HTTP, WebGPU is disabled. Reopen Polaris via the HTTPS link above for GPU-accelerated in-browser inference, or tick "Prefer CLI subprocess" below to run on the server's GraXpert install.
Point at a directory containing the GraXpert layout
{family}-ai-models/{version}/model.onnx.
Models are not bundled with Polaris, clone the
GraXpert repo
and point at its models/ dir, or copy the
.onnx files into a folder of your own.
| Model | Family | Version | Size | Hash |
|---|---|---|---|---|
Download models
Pull star-removal / GraXpert models onto the host from the public Polaris Astro Controller model repository. Useful for OS images and phones/tablets that don't ship the large model files. Downloads land in your writable models directory and the registry rescans automatically, no browser cache needed.
Advanced: use a custom model bucket instead
Overrides the default repository. Base URL must
serve models-index.json plus
{family}-ai-models/{version}/model.onnx.
Leave blank to use the bundled catalogue.
| Model | Version | Size | Action |
|---|---|---|---|
| ✓ Installed |
Bucket reachable but no models listed in
models-index.json.
Run BGE and Denoise on a Vulkan GPU (Adreno, Mali, …) instead of the CPU. These converted models are not shipped in the package to keep it slim, download them here, once, and they're used automatically. The CPU / ONNX path works without them; this only adds GPU speed. Needs the corresponding ONNX model downloaded above.
- nox & starrem2k13 (star removal): MIT, code and weights.
- StarNet++ (star removal): CC BY-NC-SA 4.0 (non-commercial), © Nikita Misiura.
- GraXpert (BGE / Denoise / Deconvolution): CC BY-NC-SA 4.0 (non-commercial), © GraXpert Development Team.
Advanced, use GraXpert CLI subprocess instead
When enabled, the FILES-tab GraXpert modal opens
with Run in browser unchecked. Useful
if your browser can't load the models (very old
device, no WebGPU or WASM SIMD) and you want
the host's graxpert binary to do
the work instead. The in-browser toggle is still
available per-run, this is just the default.
GPU acceleration (OpenCL)
Offloads classic image math (debayer, alignment warp, stretch, editor blur, live-stack integration) to the SBC GPU when the board exposes OpenCL (e.g. Mali on RK3588, Adreno on QCS6490). Falls back to the CPU automatically per operation. This is for classic math only, GraXpert AI inference uses a separate accelerator path (an NPU, or the GPU via Vulkan/ncnn), shown in the AI models section above.
Device: · active · disabled (CPU)
No OpenCL device on this machine, running on CPU.
Hardware benchmark
Measures how fast this machine runs the Polaris image pipeline (stacking, capture/video encode) plus a raw CPU/memory test, so you can compare different boards (Raspberry Pi, Orange Pi, mini-PC, etc.). The synthetic test runs the same fixed workload everywhere, so the scores are directly comparable. No camera needed.
| Stacking ( MP frames) | ||
| Throughput | fps · Mpx/s | |
| Detect / align / resample / stats (ms) | / / / | |
| Capture / video encode | ||
| Throughput | fps · Mpx/s | |
| Debayer / JPEG / LZ4 (ms) | / / ( MB/s) | |
| CPU / memory | ||
| Single / multi-thread (MFLOPS) | / (× scaling) | |
| Memory bandwidth | GB/s | |
| Thermal & clock | ||
| SoC temp (start / max) | → °C | |
| CPU clock (min / avg / max) | / / GHz | |
| Throttling | None, clock held at the rated ceiling. | Throttled, likely thermal (SoC ran hot; better cooling helps), likely power / undervoltage (clock held down while cool; check the PSU / cable). |
| GPU vs CPU (OpenCL) | ||
| Warp (CPU / GPU / speedup) | / Mpx/s · | |
| Debayer (CPU / GPU / speedup) | / Mpx/s · | |
| Blur (CPU / GPU / speedup) | / Mpx/s · | |
| Overall GPU speedup (geo-mean) | ||
| NPU (AI denoise) | ||
| GraXpert denoise ( · ) | ms/tile · tiles/s | |
| Camera (camera-dependent) | ||
| Capture | ms · fps · | |
| Camera | ||
| Camera video stream (camera-dependent) | ||
| Stream () | fps capture · fps sent · ( MB/s) | |
| Recording (SER) | fps written · dropped · ms/write | |
| Video stream | ||
| 🔥 |
Diagnostics
Checks that everything Polaris needs is present, enabled and permitted: services, star catalogues, udev and PolicyKit rules, the capture folder, whether the card was ever expanded, and whether this device has an identity of its own. Nothing is changed. The same report is written to the boot partition on every boot, so a host that comes up wrong can be diagnosed by reading a text file from the card on any computer.
Backup & restore
Save every setting and rig to a file you keep, then restore it any time. Use this so a rig or your network-share login is never lost for good, and to copy your setup to another Polaris.
The backup file holds your saved passwords (including the network-share credentials), so keep it somewhere safe.
Reset everything to factory defaults
This wipes all of your saved settings: every rig, equipment profile, the app password and login sessions, observer location, and UI preferences. Polaris goes back to how it was the very first time you opened it. Use this before sharing or distributing a clean SD card image so none of your own (or test) config is included.
Your captured images and FITS files are kept, only settings are cleared. This cannot be undone. After it finishes, the page reloads and the first-run setup starts fresh.
Polaris has many tabs and pieces. These tutorials walk you through the most common workflows step by step, with screenshots and direct links into the relevant tabs. Pick up where you left off, your position is saved in this browser.
Common problems and their fixes. Click any item to expand. For deeper coverage follow the doc links inside.
Didn't find what you need? The full user guide on GitHub covers every tab in depth.
Last updated: June 2026. Click any item to expand.
The short version
Polaris runs entirely on your own device (your Raspberry Pi, mini PC, or computer). It does not track you, has no ads, and sends no usage data, analytics, or crash reports to anyone.
It works fully offline. Your photos and settings stay on your device unless you choose to turn on one of the optional internet features listed further down.
You do not need to create an account to use Polaris on your own network?.
What is stored on your device
Your equipment profiles (rigs), your observing location, and your preferences.
Your app password, if you set one, is stored scrambled (hashed). The real password is never written down anywhere, not even on your own device.
The photos and FITS files you capture, saved to the folder you picked in the FILES tab.
A debug log to help fix problems. It lives only in memory and disappears when you restart, unless you turn on "save log to disk" in Settings.
Small display preferences (theme, font, last-used tabs) are kept by your web browser on the device you are viewing from.
Optional features that use the internet
All of these are switched OFF until you turn them on yourself. Until then, nothing leaves your device.
Online plate solving (astrometry.net). Polaris solves your images on your own device by default. Only if you choose the online solver and enter an API key does Polaris upload the picture being solved to the astrometry.net service so it can identify the star field.
Remote access (relay server). If you turn on remote access so you can reach Polaris from outside your home, your session is tunnelled through the relay server you signed up for. Only then does your traffic pass through it.
Automatic HTTPS certificate (DuckDNS + Let's Encrypt). If you enable the automatic security certificate for remote access, Polaris sends your chosen domain name and DuckDNS token to DuckDNS, and your email address to Let's Encrypt, so the certificate can be issued and renewed.
Your local network
To find your camera, mount, and other gear, Polaris talks to devices on your own home or observatory network (INDI, Alpaca, and nina.local discovery). This stays on your network and never goes out to the internet.
Your control
Every internet feature above is opt-in and can be turned back off at any time in Settings.
To remove everything Polaris has stored, delete the app (or wipe the SD card). There is no cloud copy to clean up.
Questions
Polaris is free, open-source software. You can read the code, raise a question, or report a concern on the project page:
Polaris Astro Controller stands on the shoulders of a large community of astronomy and open-source projects. Some we derive code from, some we studied as a reference, and many ship inside the capture and processing stack. Thank you to every author below. Full license texts are bundled with the app and in the source repository. Click any group to expand.
Built on N.I.N.A.
N.I.N.A. - Nighttime Imaging 'N' Astronomy - Stefan Berg and the N.I.N.A. contributors. Polaris is derived from N.I.N.A.; large parts of the imaging, astrometry, sequencer and equipment model originate here (MPL-2.0).
Guiding & gear simulation
PHD2 - Open PHD Guiding - Andy Galasso, Bret McKee, Craig Stark and the PHD2 contributors. Used both as the managed external guider and as the reference for the built-in native autoguider and the gear simulator (BSD-3-Clause).
Image processing & AI
GraXpert - the GraXpert development team. Background extraction, denoising and deconvolution ONNX models, and the auto-stretch algorithm Polaris uses by default.
nox - charvey2718. StarNet-like star-removal model (native colour + gray), the default behind FILES → Remove stars. Code and weights MIT.
starrem2k13 - code2k13. pix2pix-style U-Net star-removal model, an alternative in FILES → Remove stars. Code and weights MIT.
StarNet++ - Nikita Misiura (nekitmm). The original star-removal neural network, available in FILES → Remove stars. Code MIT; pre-trained weights © Nikita Misiura, CC BY-NC-SA 4.0 (NonCommercial).
Siril - the Free-Astro / Siril team. Optional external pre-processing and stacking integration.
Assistant (local AI)
Qwen3 - the Alibaba Qwen team. The local language model (Qwen3-4B) behind the Canopus assistant's "On this host / device" backends, running fully offline on your hardware (Apache-2.0).
llama.cpp - Georgi Gerganov and the llama.cpp contributors. The efficient CPU inference runtime (llama-server) that serves the local model (MIT).
Plate solving
ASTAP - Han Kleijn. The default fast offline plate solver and star database.
Astrometry.net - Dustin Lang, David W. Hogg and collaborators. Local and online blind plate solving.
PlateSolve3 - PlaneWave Instruments. Alternative plate solver.
Equipment, protocols & camera SDKs
INDI Library - Jasem Mutlaq and the INDI community. The primary equipment-control protocol (400+ Linux drivers).
ASCOM Initiative & Alpaca - the ASCOM Initiative. Windows COM drivers and the cross-platform Alpaca protocol.
ZWO ASI SDK - Suzhou ZWO Co., Ltd. Native ZWO camera support.
SVBony SDK - SVBONY. Native SVBony camera support.
Player One SDK - Player One Astronomy. Native Player One camera support.
ToupTek SDK - ToupTek Astro. Native ToupTek (and OEM-alike) camera support.
Altair SDK - Altair Astro (altaircam, a ToupTek OEM SDK). Native Altair camera support.
Nikon SDK - Nikon Corporation. Nikon DSLR / mirrorless support.
Canon EDSDK - Canon Inc. Canon EOS DSLR / mirrorless support on Windows.
Sony Camera Remote SDK - Sony Corporation. Sony Alpha camera support on Windows.
libgphoto2 / gPhoto2 - the gPhoto team. DSLR / mirrorless support on Linux, via the INDI gphoto driver.
Sky data, catalogs & astrometry
OpenNGC - Mattia Verga. The bundled NGC/IC/Messier/Caldwell deep-sky catalog (CC BY-SA 4.0).
APASS - AAVSO Photometric All-Sky Survey - the AAVSO. Reference photometry for color calibration.
Aladin Lite - CDS, Université de Strasbourg / CNRS. The interactive sky atlas viewer.
Stellarium Web Engine - Stellarium Labs / Guillaume Chéreau and contributors. The WebGL planetarium sky view (AGPL-3.0).
Astronomy Engine - Don Cross. High-precision ephemeris and coordinate math.
In-browser UI libraries
Alpine.js - Caleb Porzio and contributors. The reactive framework behind the web UI.
Chart.js - the Chart.js contributors. Focus / guiding / statistics charts.
OpenSeadragon - the OpenSeadragon contributors. Deep-zoom image viewer.
noVNC - the noVNC authors. The embedded PHD2 GUI on Windows (MPL-2.0).
xterm.js - the xterm.js authors. In-browser terminal.
SunCalc - Vladimir Agafonkin. Sun / twilight calculations for the sky view.
SortableJS - the SortableJS contributors. Drag-and-drop in the sequencer.
Server & .NET libraries
Silk.NET - the .NET Foundation. OpenCL bindings for the optional SBC GPU compute backend.
SkiaSharp - Microsoft, wrapping Google's Skia. Server-side image encoding and rendering.
ONNX Runtime (Web) - Microsoft. Runs the GraXpert AI models in the browser.
YARP - Microsoft. Reverse proxy for the embedded device web UIs.
.NET Community Toolkit (MVVM) - the .NET Foundation.
K4os.Compression.LZ4 - Milosz Krajewski. Fast frame compression for the live preview.
LettuceEncrypt - Nate McMaster. Automatic Let's Encrypt certificates.
Serilog - the Serilog contributors. Structured logging.
Json.NET - James Newton-King. JSON serialization.
SSH.NET - the SSH.NET contributors.
SMBLibrary - Tal Aloni. Pure-managed SMB1/SMB2 client for the "auto-push images to network storage" backend.
net-mdns (Makaretu.Dns) - Richard Schneider. nina.local mDNS discovery.
SQLite - D. Richard Hipp and the SQLite team. On-device databases.
Rockchip RKNN runtime - Rockchip. Optional NPU acceleration for AI models on RK35xx boards.
And everyone else
Plus the wider amateur astronomy and free-software communities whose tools, drivers, documentation and feedback make a project like this possible. If your work is used here and not listed, it is an oversight, not an intent, please let us know.
Polaris Astro Controller is a self-hosted, browser-based astrophotography control, capture and processing suite. It runs entirely on your own device (a Raspberry Pi, mini PC or computer) and is reached from any browser on your network, no app to install on the viewing device. It controls your equipment (INDI / ASCOM / Alpaca / native camera SDKs), runs live stacking, guiding, focusing, plate solving and sequencing, and includes a full editor with AI background extraction, denoise and deconvolution.
Version
You are running . The current code and release notes are on the project page.
Report a problem
Open a pre-filled GitHub report with your client + server details (versions, host, browser, recent warnings) already attached, so it's easier to diagnose. Nothing is sent automatically: it opens GitHub in a new tab for you to review and post.
Author & contact
Created and maintained by Daniel Wagner Oliveira de Medeiros.
Contact: danielwag@gmail.com
Links: GitHub · LinkedIn · AstroBin
For bugs and feature requests, opening an issue on GitHub is usually the fastest path.
License
Polaris Astro Controller is free, open-source software licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). It is derived from N.I.N.A. - Nighttime Imaging 'N' Astronomy by Stefan Berg and contributors (MPL-2.0).
Full credits for every project, library and dataset used are under Credits & acknowledgements.
Support the project
Polaris stays free and open-source. If it has saved you an evening of fiddling and you would like to chip in, donations are welcome but entirely optional: