Node v1 is configured entirely through a singleDocumentation 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.
config.yaml file located in the project root directory. Every feature — from ALPACA device connections and the photometry pipeline to safety timeouts and cloud registration — is controlled by the keys in this file. No environment setup or command-line flags are required for normal operation. The dashboard also includes a live in-browser config editor so you can adjust settings without leaving your browser.
Full Annotated config.yaml
The block below is the completeconfig.yaml with every key shown at its default value. Copy this as a starting point and edit the values relevant to your setup.
config.yaml
Editing the Config
There are two ways to updateconfig.yaml:
-
Edit the file directly — open
config.yamlin any text editor, save your changes, and restartdashboard.py. The server readsconfig.yamlonce at startup and again whenever it needs to re-load settings (such as when the photometry pipeline processes a new file). -
Use the in-browser editor — open the dashboard at
http://localhost:5173and click the Config button in the top-right corner. The editor supports both a structured form view (organised by section) and a raw YAML view. Changes written through the editor are saved to disk immediately; they take full effect after the server is restarted.
The in-browser config editor validates your YAML before saving — if there is a syntax error, the save will be rejected and the error will be shown inline. Changes to
photometry, safety, cloud, and image_watcher require a server restart to take effect because those subsystems are initialised once at launch.Top-Level Sections
The table below summarises every top-level section. Click the links for the sections that have dedicated reference pages.alpaca
ALPACA protocol settings: UDP discovery port and timeout, API version, and the default server address. See ALPACA Discovery below.
devices
Which ALPACA devices (telescope, camera, focuser, filter wheel, cover calibrator) to connect on startup, and their device index numbers. See the Devices page.
photometry + aavso
The differential photometry pipeline and AAVSO WebObs submission credentials. See the Photometry page.
safety
The SafetyManager watchdog: heartbeat interval, reconnect logic, dawn parking, and observer coordinates. See the Safety page.
observatory
Site metadata written into FITS headers: site name, latitude, longitude, elevation, instrument name, and observer identifier.
logging
Python logging level (
DEBUG, INFO, WARNING, ERROR) and the log record format string.image_watcher
File-system watcher that detects new FITS files on the Seestar SMB share and triggers the photometry pipeline. Set
watch_path to the SMB mount point.pier_cam
Optional live video preview from a ZWO ASI guide camera at the pier, streamed as MJPEG to the dashboard. Requires the
zwoasi Python package.stacking
Live stacking settings: how many sub-frames to capture, the exposure time per frame, and how often to re-render the stacked preview in the dashboard.
cloud
Connection to the Boundless Skies cloud coordinator: endpoint URL, node credentials, heartbeat cadence, observation-plan polling, and whether to auto-execute plans.
alpaca
These keys control how Node v1 discovers and communicates with ALPACA servers on your local network.UDP broadcast port used during LAN discovery. The ALPACA specification defines port 32227. Only change this if your server uses a non-standard port.
Seconds to wait for ALPACA servers to respond during a discovery scan. Increase on slow or congested networks.
ALPACA API version to use in all HTTP request paths. Almost always
1. Only change this if your server explicitly requires a different version.IP address of the default ALPACA server. When the dashboard runs a discovery scan and finds this address, it auto-connects without showing the server-selection dialog. Set automatically when you tick Set as default in the connect dialog.
Port of the default ALPACA server. Paired with
default_server.address for auto-connect.observatory
Observatory metadata embedded in every exported FITS file viafits_export.py. These values are written as standard FITS keywords (TELESCOP, INSTRUME, OBSERVER, SITELAT, SITELONG, SITEELEV).
Human-readable name for the observing site. Example:
"Boundless Skies Node 001".Site latitude in decimal degrees north of the equator. South is negative. Example:
51.5074 for London, -33.8688 for Sydney.Site longitude in decimal degrees east of Greenwich. West is negative. Example:
-0.1278 for London, 151.2093 for Sydney.Site elevation above sea level in metres. Used in FITS header metadata.
Telescope name written to the
TELESCOP FITS keyword.Detector or instrument name written to the
INSTRUME FITS keyword.Observer name or AAVSO observer code written to the
OBSERVER FITS keyword.logging
Controls Python’s standard logging system for the entire Node v1 process, including the dashboard, safety manager, photometry pipeline, and all sub-modules.Minimum log severity to emit. Options:
DEBUG, INFO, WARNING, ERROR. Use DEBUG when diagnosing problems; INFO is recommended for normal operation.Python
logging format string. The default includes a timestamp, severity level, logger name, and message. Refer to the Python logging docs for available fields.image_watcher
TheImageWatcher daemon monitors a directory for newly written FITS files, typically the SMB share mount point of a Seestar S50 on the local network. When a new file appears it is displayed in the dashboard and, if photometry.enabled is true, automatically fed into the photometry pipeline.
Set to
true to start the file-system watcher on launch. Requires watch_path to be set correctly.Absolute path to the directory to monitor. For a Seestar on your network, mount its SMB share first (e.g.
sudo mount -t cifs //192.168.1.x/seestar /mnt/seestar) and point this key at the mount point.Seconds to wait after a file-system event before reading the new file. Prevents reading a FITS file that is still being written. 2.0 seconds is safe for most SMB shares; increase on slow network connections.
pier_cam
Configures an optional ZWO ASI guide or pier camera whose live video feed is streamed as MJPEG to the dashboard. Requires thezwoasi Python package (pip install zwoasi) and the ZWO ASI SDK shared library.
Set to
true to start the pier camera loop on launch. The live view panel appears automatically in the dashboard when streaming begins.ZWO SDK camera index. Usually
0 for the first connected ASI camera. This is a ZWO SDK index, not an ALPACA device number.Full path to the ZWO ASI SDK shared library (e.g.
/usr/lib/libASICamera2.so on Linux, /usr/local/lib/libASICamera2.dylib on macOS). Leave blank to let zwoasi auto-detect the library.Exposure time per preview frame in milliseconds. Shorter exposures give a higher frame rate but may be noisier in low light.
Camera gain (0–600 for most ZWO cameras). Higher gain increases sensitivity at the cost of more noise.
Binning factor for preview frames.
2 means 2×2 binning — half the linear resolution, four times faster readout. Recommended for most setups.Target preview frame rate in frames per second. The actual rate is capped by
exposure_ms and USB bandwidth.JPEG compression quality for streamed frames (10–100). Lower values produce smaller frames and smoother streaming; higher values give sharper images.
stacking
Controls the live stacking feature, which captures multiple sub-frames, aligns them via cross-correlation, and renders a running stack preview in the dashboard.Total number of sub-frames to capture during a live stacking run.
Exposure duration in seconds for each individual sub-frame.
Re-render and update the live preview after every N stacked frames. Set to
1 to update after every frame; set higher to reduce rendering overhead during long runs.camera
Default camera parameters pre-filled in the dashboard exposure controls. These can be overridden per-exposure in the UI.Default single-frame exposure duration in seconds.
Default binning factor.
1 = full resolution; 2 = 2×2 binning.autofocus
Parameters for the autofocus sweep, which steps the focuser through a range of positions, measures stellar FWHM at each stop, and drives to the best focus position.Exposure duration per focus sample. Short enough to iterate quickly, long enough to measure stars reliably.
Focuser steps between adjacent sample positions in the sweep.
Number of positions sampled on each side of the starting position. The full sweep visits
2 × steps_per_side + 1 positions.Seconds to wait after each focuser move before taking the measurement exposure, allowing vibrations to damp out.
Number of frames to capture and median-combine at each focus position. Values greater than
1 reduce the effect of atmospheric scintillation on FWHM measurements.Hard lower limit on focuser travel during the sweep. Set to prevent the focuser from moving below a safe mechanical position.
null means no limit.Hard upper limit on focuser travel during the sweep.
null means no limit.centering
Parameters for the auto-centering (plate-solve goto refinement) routine, which iteratively slews, plate-solves an exposure, and corrects until the target is within the specified tolerance of the frame centre.Exposure duration per plate-solve frame during centering iterations.
Success criterion: the routine stops when the angular distance between the solved frame centre and the target is within this many arcminutes.
Maximum number of solve-and-correct iterations before giving up. Prevents infinite loops if the plate solver repeatedly fails or the mount cannot converge.
Seconds to wait after each corrective slew before taking the next plate-solve exposure.
cloud
Connects Node v1 to the Boundless Skies cloud coordinator, which schedules variable-star observations across all nodes in the network, aggregates measurements, and batch-submits validated results to AAVSO.Set to
true to start the CloudCommunicator daemon on launch. When enabled, the node auto-registers with the cloud on first start and persists its credentials in data/cloud_state.json.Base URL of the Boundless Skies cloud endpoint. Example:
https://cloud.boundless-skies.org.Unique node identifier assigned by the cloud. Leave blank on first start — the node auto-registers and saves its assigned ID to
data/cloud_state.json.API key assigned by the cloud during registration. Leave blank on first start — auto-populated after registration.
Seconds between heartbeat pings sent to the cloud with local conditions (safety status, schedule state, photometry enabled flag).
Seconds between polls for new observation plans from the cloud scheduler.
When
true, observation plans received from the cloud are automatically executed by the schedule runner without any manual confirmation in the dashboard.When
true, raw FITS files are uploaded to the cloud after each successful photometry run, in addition to the measurement data.