Node v1 is a pure-Python 3.10+ application with no platform-specific code. It has been tested on macOS and runs equally well on Linux and Windows. Installation takes around five minutes: clone the repository, create a virtual environment, install dependencies fromDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/skyrobot804/node_v1/llms.txt
Use this file to discover all available pages before exploring further.
requirements.txt, and edit config.yaml for your site. There is nothing to compile and no system-level packages to install beyond Python itself.
Prerequisites
Before installing, make sure you have the following:- Python 3.10 or later — check with
python3 --version - ZWO Seestar S50 (or any ALPACA-compatible telescope) connected to the same LAN as your computer — the node communicates with it over HTTP, so no USB cables are required
- ASTAP plate solver (optional) — only needed if your FITS files lack WCS (World Coordinate System) headers; the Seestar S50 typically solves onboard, so most users can skip this initially
- macOS, Linux, or Windows — no platform-specific code paths exist in Node v1
The Seestar ALPACA server must be reachable via UDP broadcast on port
32227 (for discovery) and HTTP on the device’s IP address (default port 32323). Some routers block UDP broadcast between subnets — if Discover times out, confirm the node computer and the Seestar are on the same subnet.Install
Clone or download the repository
If you have Git installed, clone the repo into a local directory:If you don’t use Git, download and extract the ZIP from the repository page, then open a terminal in the extracted folder.
Create a virtual environment
A virtual environment keeps Node v1’s dependencies isolated from the rest of your Python installation:
Activate the virtual environment
- macOS / Linux
- Windows
(venv) when the environment is active.Install dependencies
With the virtual environment active, install all required packages:This installs eleven packages. See the Dependencies section below for a full list with descriptions.
Copy and edit config.yaml
config.yaml ships with safe defaults — everything disabled except the SafetyManager. Before running a live session, edit at minimum:Dependencies
All dependencies are declared inrequirements.txt and installed automatically by pip install -r requirements.txt. The table below explains the role of each package inside Node v1:
| Package | Version | Role in Node v1 |
|---|---|---|
requests | ≥ 2.31.0 | HTTP client used by the ALPACA layer to talk to the telescope, camera, focuser, and filter wheel; also used by the AAVSO WebObs submission client |
pyyaml | ≥ 6.0 | Loads and saves config.yaml; powers the live config editor in the dashboard |
flask | ≥ 3.0 | The web framework behind the dashboard — serves the control panel on port 5173 and streams Server-Sent Events for the live log panel |
numpy | ≥ 1.24 | Array operations throughout the photometry pipeline — pixel data, background estimation, aperture sums, and uncertainty propagation |
Pillow | ≥ 10.0 | FITS-to-JPEG thumbnail generation for the observation history gallery; also used by the pier-cam stream |
watchdog | ≥ 4.0 | Cross-platform filesystem events (FSEvents on macOS, inotify on Linux, kqueue on BSD/Windows) for ImageWatcher |
astropy | ≥ 6.0 | FITS I/O, WCS transformations, Barycentric Julian Date (BJD_TCB) calculation, airmass from Alt/Az, and coordinate handling throughout the pipeline |
photutils | ≥ 1.9 | DAOStarFinder for source detection and FWHM estimation; CircularAperture and sigma-clipped annulus background for aperture photometry |
astroquery | ≥ 0.4.6 | Queries the AAVSO VSP API for comparison stars; falls back to the Gaia DR3 catalogue when VSP coverage is absent |
zwoasi | ≥ 0.0.22 | SDK wrapper for ZWO ASI cameras — used by the optional pier-cam (guide camera) live video stream |
pyongc | ≥ 1.2 | Messier and NGC object catalogue powering the /api/catalog endpoint and the scheduling modal’s object browser |
ASTAP Plate Solver (Optional)
ASTAP is an offline plate-solver that reads a FITS file and writes WCS (World Coordinate System) keywords back into the header. Node v1’s photometry pipeline calls it only when a FITS file arrives without an existing WCS solution. When you need it: The Seestar S50 normally solves its own images onboard, so ASTAP is rarely required. You will need it if:- You are feeding Node v1 FITS files from a different camera that does not plate-solve
- The Seestar’s onboard solver fails on a particular field
- Download ASTAP from hnsky.org/astap.htm and install it for your platform.
- Download at least one star catalogue — the D50 (down to mag 15) or H18 (down to mag 18) catalogue covers most Seestar targets.
- Either place the
astapbinary in yourPATH, or set the full path inconfig.yaml:
Running Node v1
There are two ways to start Node v1. In both cases, the dashboard will be available at http://localhost:5173 once the server starts. Recommended —main.py (with watchdog):
main.py wraps dashboard.py in a watchdog loop. If dashboard.py exits with a non-zero code it is restarted automatically after a 2-second delay. If dashboard.py itself changes on disk the watchdog detects the new modification time and restarts immediately — useful during development.
Single run — dashboard.py (no auto-restart):
systemd or launchd.
After either command, open http://localhost:5173 in a browser. The dashboard opens automatically in some environments.
The repository ships a convenience script Use it as
run.sh that activates the virtual environment and forwards all arguments to python3. Its contents are:./run.sh main.py or ./run.sh dashboard.py — handy if you switch between virtual environments frequently, or when launching from a cron job or shell alias.