Clean AAVSO-first reducer for SeeVar.
Scope:
- build a nightly AAVSO plan from object/weather/dark-window JSON
- ingest FITS frames
- stack by target
- require WCS proof
- perform aperture photometry from JSON catalogs
- write state/proof JSON
- stage AAVSO Extended report rows
Not in scope:
- telescope steering
- dashboard
- direct Alpaca exposure loops
- pretty-picture processing
python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
seevar-lite-postflight \
--frames /path/to/fits \
--targets examples/targets.json \
--comparisons examples/comparisons.json \
--out runs/testPreflight:
seevar-lite-preflight \
--objects catalogs/campaign_targets.json \
--site examples/site.json \
--weather examples/weather.json \
--out runs/preflight \
--start-utc 2026-06-04T20:00:00Z \
--end-utc 2026-06-05T03:00:00ZObserving dry-run:
seevar-lite-observe-dryrun \
--plan runs/preflight/nightly_plan.json \
--out runs/observe-dryrun \
--max-targets 3 \
--frames 3Export for seestar_alp:
seevar-lite-export-seestar-alp \
--plan runs/preflight/nightly_plan.json \
--out runs/seestar-alp \
--host 192.168.178.57 \
--device 1 \
--max-targets 3Outputs:
runs/preflight/nightly_plan.jsonruns/observe-dryrun/proof.jsonlruns/seestar-alp/seestar_alp_schedule.jsonruns/seestar-alp/ssalp_commands.shruns/test/state.jsonruns/test/proof.jsonlruns/test/stacks/*.fitsruns/test/reports/aavso_extended.txt
Targets use the existing SeeVar campaign catalog shape:
{
"targets": [
{
"name": "ST Boo",
"ra": 224.44,
"dec": 40.73,
"recommended_cadence_days": 1,
"duration": 600
}
]
}Comparison stars:
{
"ST Boo": [
{"id": "C1", "ra_deg": 224.41, "dec_deg": 40.71, "mag": 12.3},
{"id": "C2", "ra_deg": 224.48, "dec_deg": 40.76, "mag": 12.8}
]
}The first rule is simple: no WCS, no photometry, no AAVSO row.