Skip to main content

Arcsecond Service: Platesolver (astrometry)

This repository provides a FastAPI plate-solving service for Arcsecond, based on astrometry.net indexes and Neuromorphics Systems' astrometry Python package.

Astrometry index files (~10 GB) are baked into the Docker image at build time under /opt/astrometry. No downloads occur at container startup.

Run with Docker

docker run --rm \
  -p 127.0.0.1:8900:8900 \
  arcsecond-service-platesolver-astrometry:latest

Run Natively (Linux/macOS)

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install .
python -m arcsecond_service_platesolver.main

Run Natively (Windows)

  1. Install Python 3.12+.
  2. Install Microsoft C++ Build Tools (Desktop development with C++).
  3. Install Rust (rustup), because astrometry may need a local native build when no matching wheel is available.
  4. This project pins Windows installs to a Windows-compatible astrometry fork commit from arcsecond-io/astrometry.
py -3.12 -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install .
python -m arcsecond_service_platesolver.main

Tests

uv sync --group dev
uv run pytest

The suite stubs the solver out entirely, so it needs no index files and runs in ~10s. It covers the deadline machinery (breach, worker kill, respawn, repeated breaches, serialisation) and the /platesolve response contract.

Configuration

  • HOST: bind host (default 0.0.0.0).
  • PORT: bind port (default 8900).
  • LOG_LEVEL: Uvicorn log level (default info).
  • ARCSECOND_PLATESOLVER_SCALES_5200: comma-separated scale numbers for the 5200 series (default 2,3,4,5,6).
  • ARCSECOND_PLATESOLVER_SCALES_4100: comma-separated scale numbers for the 4100 series (default 7,8,9,10,11).
  • ARCSECOND_PLATESOLVER_SCALES_4200: comma-separated scale numbers for the 4200 series (default 6,7,8). Set to empty string to disable a series entirely.
  • ARCSECOND_PLATESOLVER_SOLVE_DEADLINE_SECONDS: wall-clock ceiling on a single solve (default 50). Set to 0 or an empty string to disable. Keep it below the calling client's HTTP timeout (the Arcsecond backend uses 60s) so a hopeless field returns a clean no_match instead of timing out the connection.

Why solves are fast

The solver stops at the first accepted match. By default astrometry keeps combing the search cone after it already has a solution and SIP-fits every further match it accepts, which makes a rich, well-exposed frame slower than a poor one — measured on a clean 50-star field, 169 matches in 40.0s versus 0.23s to stop at the first, for the same centre and scale to five decimals. That, not pointing error, is what made real solves take 37-47s; a 2 deg pointing offset only moved a 39.9s solve to 39.1s. Stopping early is safe because a match is only accepted above odds of 1e9 to 1, and it is what astrometry.net's own solve-field does.

Solve deadline

A blind or badly-hinted solve can run indefinitely: astrometry has no timeout parameter, and its only early-exit hook (logodds_callback) fires when a match is found — a hopeless 50-star field was measured running 70s while calling it zero times. The service therefore runs solves in a dedicated worker process and kills it when the deadline passes, which is the only mechanism that actually bounds the C solver. The request then returns {"status": "no_match"} and logs reason=deadline. The worker is respawned on the next request (~0.7s cold start against the full index set, since indexes are mmapped rather than read).

One consequence: solves are serialised. A solve is CPU-bound, and single-flight keeps the kill unambiguous — it can never destroy a concurrent request's in-flight solve.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file arcsecond_service_platesolver_astrometry-1.4.0.tar.gz.

File metadata

File hashes

Hashes for arcsecond_service_platesolver_astrometry-1.4.0.tar.gz
Algorithm Hash digest
SHA256 9034f23ced58a315eed5ce3aa3f4c0195ad474fda24e4ab0fc74f647c83c5378
MD5 6009caa23312d3029b9cfa7ffc99f0a1
BLAKE2b-256 c3b31e8e84fd2a3d53f254e088b5cd52113cf4e7c39837cb3ead77fbe618301f

See more details on using hashes here.

Provenance

The following attestation bundles were made for arcsecond_service_platesolver_astrometry-1.4.0.tar.gz:

Publisher: publish-pypi.yml on arcsecond-io/arcsecond-service-platesolver-astrometry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arcsecond_service_platesolver_astrometry-1.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for arcsecond_service_platesolver_astrometry-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 683b51cfd3f356fb407c277c24618b2f775e7c19b5b8042ad298bd8fd23c12e0
MD5 7a466935455318ff48159467688789a9
BLAKE2b-256 8ebf4268204add7209cf8ee8ff6b5753bc4f66f505acde298ed2b89e995b37ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for arcsecond_service_platesolver_astrometry-1.4.0-py3-none-any.whl:

Publisher: publish-pypi.yml on arcsecond-io/arcsecond-service-platesolver-astrometry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page