Installation
Choose the installation method that fits your setup.
Raspberry Pi
Dedicated device next to your telescope. Recommended for permanent setups.
Docker
Run on any machine with Docker. Great for existing servers or NAS devices.
OrbStackOrbStack
Recommended on macOS. Drop-in replacement for Docker Desktop with the networking that remote access needs.
Kubernetes
One-shot manifest for any cluster. Ideal for home-lab k3s or shared infrastructure.
Raspberry Pi
Requirements
- Raspberry Pi 4 or 5 (4GB+ RAM recommended)
- Raspberry Pi OS 64-bit (Bookworm)
- Same network as your AsiAir
Step 1: Download and install
Run this single command on your Raspberry Pi. It downloads AstroMate, installs all dependencies, and sets it up as a system service.
curl -sSL https://releases.astro-mate.net/astromate/setup-pi.sh | sudo bashStep 2: Open AstroMate
Once installed, open a browser and navigate to your Raspberry Pi's IP address. AstroMate runs on port 80 by default. You'll see the license activation screen on first launch.
Step 3: Activate your license
Enter the license key you received by email after subscribing. AstroMate will automatically discover your AsiAir and start monitoring for new photos.
Updating
AstroMate checks for updates automatically. When a new version is available, you'll see a notification in the app. Click Update and AstroMate will download and install the latest version, then restart automatically.
Docker
docker CLI, drop-in replacement, and everything works out of the box.Requirements
- Docker installed on your machine
- Same network as your AsiAir
- Available on amd64 and arm64 architectures
Option A: Docker Run
The simplest way to get started:
docker run -d \
--name astromate \
-p 80:80 \
--cap-add=NET_ADMIN \
--device=/dev/net/tun:/dev/net/tun \
-v astromate-data:/data \
--restart unless-stopped \
astromate/astromate:latest--cap-add=NET_ADMIN and the /dev/net/tun device mount are required for the bundled Tailscale remote-access feature so it can bring up its tailscale0interface and advertise LAN routes. You can drop both flags if you are certain you won't enable Tailscale.
Option B: Docker Compose
Create a docker-compose.yml:
volumes:
astromate-data:
services:
astromate:
image: astromate/astromate:latest
ports:
- "80:80"
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- astromate-data:/data
restart: unless-stopped
environment:
ASPNETCORE_ENVIRONMENT: ProductionThen run:
docker compose up -dcap_add: NET_ADMIN and the /dev/net/tundevice are required for the bundled Tailscale client. Remove both if you don't plan to use the Tailscale remote-access feature.
Optional: separate volume for the database
By default the SQLite database lives inside the container and is preserved as long as you don't docker rm the container. If you want to put the database on a dedicated volume — for backups, moving between hosts, or pinning it to a fast disk — mount one at /db:
docker run -d \
--name astromate \
-p 80:80 \
--cap-add=NET_ADMIN \
--device=/dev/net/tun:/dev/net/tun \
-v astromate-data:/data \
-v astromate-db:/db \
--restart unless-stopped \
astromate/astromate:latestMount the directory, not the .db file alone — SQLite runs in WAL mode and writes -wal/-shm sidecar files next to the database that need to live alongside it.
Updating
Pull the latest image and recreate the container:
docker pull astromate/astromate:latest
docker compose up -dYour data is stored in the astromate-data volume and is preserved across updates.
OrbStack — recommended on macOS
Requirements
- macOS 13+ on Apple Silicon or Intel
- OrbStack installed (free for personal use)
- Same network as your AsiAir
Step 1: Install OrbStack
Download and install OrbStack from orbstack.dev. It replaces Docker Desktop's daemon while keeping the standard dockerCLI, so the rest of these instructions are identical to a regular Docker install — just on a daemon that can actually route AstroMate's remote-access traffic onto your LAN.
If Docker Desktop is already running, quit it before launching OrbStack so the two don't fight over the docker command.
Step 2: Run AstroMate
docker run -d \
--name astromate \
-p 80:80 \
--cap-add=NET_ADMIN \
--device=/dev/net/tun:/dev/net/tun \
-v astromate-data:/data \
-v astromate-db:/db \
--restart unless-stopped \
astromate/astromate:latestSame flags as the Docker install. The /db volume is included so your license and Tailscale settings persist across image upgrades.
Step 3: Open AstroMate
Open a browser and go to http://localhost. You'll see the license activation screen on first launch.
Updating
Pull the latest image and recreate the container — your data in the named volumes survives the recreate:
docker pull astromate/astromate:latest
docker stop astromate && docker rm astromate
# then re-run the docker run command from Step 2Kubernetes
Requirements
- A Kubernetes cluster with
kubectlaccess - A default StorageClass (or edit the manifest to set one)
- At least one node on the same network as your AsiAir
Step 1: Apply the manifest
One command deploys the namespace, persistent volumes, deployment, and service:
kubectl apply -f https://releases.astro-mate.net/astromate/astromate.yamlThe above URL always points at the latest release. To pin to a specific version, use the per-release URL instead:
kubectl apply -f https://releases.astro-mate.net/astromate/versions/astromate-v1.8.1.yamlStep 2: Reach the UI
The manifest creates a ClusterIP Service. Port-forward from your workstation to try it out:
kubectl -n astromate port-forward svc/astromate 8080:80Then open http://localhost:8080. For permanent access, uncomment the Ingress block at the bottom of the manifest and set a host name (the manifest has a worked example).
Auto-discovering your AsiAir / StellaVita
Pods on the default bridge network can't see L2 broadcasts on your LAN, so AsiAir / StellaVita auto-discovery (mDNS, ARP probes) won't work out-of-the-box. To enable it, edit the manifest and uncomment the hostNetwork: trueblock on the pod spec — the pod then uses the node's network stack directly. The trade-off is that port 80 on the node has to be free. If you can't free port 80, add the telescope manually by IP from the Telescopes page; the SMB scan and Live telemetry both work fine over routed traffic.
Pod capabilities
The shipped manifest grants the container NET_ADMIN so the bundled Tailscale client can create its tailscale0 interface and write the iptables rules needed to advertise LAN routes — without it tailscale up fails with 503 no backend. If your cluster enforces a PodSecurityPolicy / Pod Security Admission profile that bans this capability you'll need to grant an exception, or strip the securityContext block from the manifest if you don't intend to use Tailscale.
Updating
The default image tag is :latest. Pull the newest image and bounce the deployment:
kubectl -n astromate rollout restart deployment/astromateThe Deployment uses the Recreate strategy because SQLite runs in single-writer WAL mode — two pods cannot share the database at once. The PVCs preserve your data across restarts and image upgrades.
Connecting a Telescope
AstroMate connects to AsiAir devices over your local network via SMB.
Auto-discovery
AstroMate automatically scans your network for AsiAir devices using mDNS. When a device is found, it appears on the Telescopes page with its hostname, IP address, and online status. No manual configuration is needed in most cases.
Adding a telescope manually
If auto-discovery doesn't find your device (e.g., different subnet), you can add it manually:
- 01Go to the Telescopes page and click Add Telescope
- 02Enter a display name, the AsiAir's IP address, and the SMB share name (default:
EMMC Images) - 03Click the folder icon to browse available SMB shares and verify the connection
Telescope settings
Each telescope card shows its online status, IP address, MAC address, and last seen time. You can edit the display name, folder alias (used for organizing downloaded files), and SMB share name directly on the card. The folder alias determines the directory structure where your photos are saved locally.
Remote Access
Reach your AstroMate dashboard — and the AsiAir / StellaVita controller it’s monitoring — from anywhere, over a private VPN.
How it works
AstroMate joins your VPN tailnet as a subnet router and publishes a small route for each of your telescopes (typically the AsiAir or StellaVita IP on your home network). Once your phone or laptop is on the same VPN, the AsiAir / StellaVita app reaches the controller as if you were sitting next to it. Your data stays inside your VPN — AstroMate doesn't proxy traffic through any third-party service.
Choose a provider
AstroMate supports two VPN providers. Pick whichever you already use; if you're starting fresh, Tailscale has the simplest setup.
- Tailscale — hosted, free for personal use up to 100 devices. Sign up at tailscale.com and pick this if you don't already run a VPN.
- NetBird — open-source, can be self-hosted or used via netbird.io. Pick this if you already run NetBird or prefer a self-hosted control plane.
Step 1: Set up Tailscale
Skip to Step 2 if you're using NetBird.
- 01Sign up at tailscale.com and finish onboarding so you have a tailnet.
- 02In the Tailscale admin console, go to Settings → OAuth clients and create a new client with the all scope. Copy the client secret (starts with
tskey-client-) — Tailscale only shows it once. - 03In AstroMate, open Remote Access in the sidebar. Pick Tailscaleas the provider and paste the OAuth client secret. AstroMate reads your tailnet's ACL, declares the
tag:astromatetag if it's not already there, and mints its own pre-tagged auth key — you don't have to. - 04Wait a few seconds. The status pill switches to Connected and each of your telescopes appears with a green dot and its tailnet-routable IP.
Step 1 (alternative): Set up NetBird
- 01Sign up at netbird.io or use your self-hosted NetBird management URL.
- 02In the NetBird dashboard, create a setup key (for the AstroMate peer to register with) and a personal access token (so AstroMate can manage routes for you).
- 03In AstroMate, open Remote Access, pick NetBird as the provider, and paste the management URL, setup key, and API token.
Step 2: Choose a connection level
Once the provider is connected, pick one of two modes:
- Lightweight— only the telescope's IP is reachable through the VPN. You'll need to enter that IP manually in the AsiAir / StellaVita app on your phone (it shows on the Remote Access page next to each telescope). Recommended if you only run AstroMate's remote access occasionally.
- Deep — in addition to per-telescope routes, AstroMate proxies LAN broadcast / mDNS discovery so the AsiAir or StellaVita app auto-discovers your controller through the VPN, exactly as it would on the home Wi-Fi. Pick this for the best experience; the trade-off is that the AstroMate node briefly forwards more discovery traffic.
Step 3: Connect from your phone or laptop
- 01Install the Tailscale or NetBird client on your phone (App Store / Play Store) and sign in with the same account you used in Step 1.
- 02Turn the VPN on. The phone now sees your AstroMate as a peer and can reach any of the routes it advertises.
- 03Open the AsiAir / StellaVita app. In Deep mode it auto-discovers; in Lightweight mode, enter the controller's IP from AstroMate's Remote Access page.
Sessions & Images
AstroMate automatically organizes your captures into sessions and photo buckets.
How sessions work
When AstroMate detects new FITS files on your AsiAir, it automatically groups them into sessions based on the target object and a configurable time window. Photos captured within the same window for the same object are grouped together. Calibration frames (darks, flats, biases) are grouped into separate calibration sessions.
The sessions page
The sessions list shows all your observation sessions with their status (Shooting or Completed), the target object name, telescope used, photo count, and download progress. Active sessions show a Finish button to mark them as complete when your imaging run is done.
Photo buckets
Inside each session, photos are organized into buckets — groups of frames with the same type (Light, Dark, Flat, Bias), filter, exposure time, and sensor temperature. Each bucket shows:
- Photo type, filter name, and exposure duration
- Sensor temperature (auto-detected from filenames)
- Download progress bar and individual photo status
- Actions: download as ZIP, delete local files, queue pending downloads
Auto-download
Photos captured within the configured auto-download window (default: 14 days) are queued for download automatically. Older photos can be queued manually from the session or bucket view. Downloads happen sequentially to avoid overwhelming the AsiAir or Raspberry Pi.
Calibration Bookmarks
Assign dark, flat, and bias frames to your light sessions for streamlined stacking.
What are calibration bookmarks?
Calibration bookmarks let you pre-assign which dark, flat, and bias frames should be used with your light frames. When you create a stack later, these assignments are automatically applied — saving you from manually pairing calibration frames every time.
Setting bookmarks
Bookmarks are set from the session detail page:
- Bias bookmark is set at the session level — it applies to all buckets in the session
- Dark bookmarks are set per exposure group — AstroMate matches darks by exposure time and sensor temperature (within the configured tolerance)
- Flat bookmarks are set per light bucket — matched by filter
The calibration picker
When you click to assign a calibration frame, a picker opens showing all available calibration buckets filtered by the correct type. Buckets are sorted by relevance: darks are matched by exposure and temperature, flats are sorted by capture time proximity to your lights, and the picker highlights the recommended choice. Already-bookmarked frames appear at the top with a badge.
The calibration page
The dedicated Calibration page gives you an overview of all your calibration frames organized by type. Dark frames are grouped by exposure time and temperature, flat frames by filter, and bias frames together. Each group shows the frame count and download progress, and you can ingest, download, or delete frames in bulk.
Creating Stacks
Combine your light frames with calibration data and process them with Siril for a final stacked image.
Creating a new stack
The stack creation wizard guides you through selecting your frames:
- 01Choose an object — select the space object you imaged (e.g., M42, IC1805)
- 02Pick a telescope — select which telescope captured the frames
- 03Select a session — choose the imaging session
- 04Choose light buckets — select which light frame groups to include (by filter and exposure)
- 05Name your stack — auto-generated from the object name, or customize it
Configuring calibration
On the stack detail page, AstroMate automatically applies your calibration bookmarks. You can review and change the assigned darks, flats, and bias for each light entry. A warning banner alerts you if any calibration frames are missing. Light frames are grouped by exposure and temperature, making it easy to assign the correct darks for each group.
Processing settings
Before processing, you can configure:
- Stacking method — Winsorized Sigma Clipping (recommended), Average, Median, Sum, or Linear Fit
- Sigma values — Low and high rejection thresholds (for clipping methods)
- Normalization — Additive+Scale (recommended), Linear, or None
Running a stack
Click Run Stack to start processing. AstroMate generates a Siril script, calibrates your frames (bias, dark, flat), registers (aligns) them, and stacks the result. You can watch the Siril log in real-time as it processes. When complete, download the resulting FITS file for further processing in your favorite editor (PixInsight, Siril GUI, etc.).
Re-running and resetting
If a stack fails or you want to try different settings, use the Reset button to clear the previous result, then Re-run Stack with adjusted parameters. The reset also cleans up the working directory on disk.
Need a hand?
We answer every ticket personally.
Stuck on installation or want to validate your stacking settings? Reach out.
Contact support