Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

CitraScope

Pytest Publish Python Package PyPI version PyPI - Downloads License

Documentation | Citra.space | PyPI | CitraScope-Pi

Photograph satellites from your backyard telescope.

CitraScope turns your astrophotography rig into an autonomous satellite observation station. It connects to Citra.space, picks up tasks for specific satellites, slews your telescope, captures images, and processes everything on the edge — plate solving, source extraction, photometry, and satellite matching — before delivering calibrated results back to the platform.

CitraScope Web UI

Use Citra.space to search for satellites, schedule observation windows, and task your telescope — CitraScope handles the rest. If you already have a mount, a camera, and software like N.I.N.A. or KStars/Ekos, CitraScope plugs right in. Install it, select your hardware adapter, and you're one click away from photographing the ISS.

Supported Hardware

Adapter Platform Connects to
Direct Any Composable device adapters (USB cameras, Ximea, Raspberry Pi Camera)
NINA Windows N.I.N.A. via Advanced HTTP API
KStars Linux, macOS KStars/Ekos via D-Bus
INDI Linux Any INDI-compatible device

Quick Start

Requires Python 3.10+. We recommend uv for installation.

# Install and run
uv tool install citrascope
citrascope

Or with pip:

pip install citrascope
citrascope

Open http://localhost:24872 in your browser to configure your hardware adapter, connect to Citra.space, and start accepting tasks.

Raspberry Pi? Check out citrascope-pi for a ready-to-flash SD card image with CitraScope pre-installed.

Optional Extras

uv tool install citrascope --with citrascope[indi]        # INDI protocol support
uv tool install citrascope --with citrascope[kstars]      # KStars/Ekos via D-Bus
uv tool install citrascope --with citrascope[usb-camera]  # USB cameras via OpenCV
uv tool install citrascope --with citrascope[rpi]         # Raspberry Pi Camera Module
uv tool install citrascope --with citrascope[all]         # INDI + KStars
pip equivalents
pip install citrascope[indi]
pip install citrascope[kstars]
pip install citrascope[usb-camera]
pip install citrascope[rpi]
pip install citrascope[all]

CLI Options

citrascope --help
citrascope --web-port 8080    # Custom web UI port (default: 24872)

Documentation

Full documentation is available at docs.citra.space/citrascope. Documentation source is maintained in the citra-space/docs repository.

Developer Setup

uv sync --extra dev
uv run pre-commit install

Dev Container (INDI on macOS/Windows)

If you need to work with the INDI adapter on a non-Linux host, the project includes a VS Code Dev Container that provides a Linux environment with pyindi-client and its system dependencies pre-installed. Open the project in VS Code and choose Reopen in Container.

Running Tests

uv run pytest                          # Unit tests (fast, skips slow tests)
uv run pytest -m "not integration"     # Same as above, explicit
uv run pytest --override-ini="addopts=" -m "not integration"  # Include slow tests locally

Tests use pytest markers to separate fast unit tests from expensive ones:

Marker What it covers Runs locally Runs in CI
(none) Unit tests Yes Yes
@pytest.mark.slow Real FITS processing, plate solving No Yes
@pytest.mark.integration Live hardware or services No Opt-in

Pre-commit Hooks

The project uses pre-commit with Ruff (linting + import sorting), Black (formatting), and Pyright (type checking).

uv run pre-commit run --all-files    # Run all checks manually

VS Code Launch Configs

The .vscode/launch.json includes pre-configured debug configurations:

  • Python: citrascope — Runs the daemon with default settings
  • Python: citrascope (custom port) — Runs with web interface on port 8080

Releasing

bump-my-version bump patch    # 0.1.3 → 0.1.4
bump-my-version bump minor    # 0.1.3 → 0.2.0
bump-my-version bump major    # 0.1.3 → 1.0.0
git push && git push --tags

Tagging triggers create-release.yml which creates a GitHub release, which in turn triggers pypi-publish.yml.

License

MIT

Metadata

Release files for citrascope 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for citrascope 1.0.0
File Size Uploaded Provenance Actions
citrascope-1.0.0.tar.gz 32.7 MB Without provenance Details for citrascope-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for citrascope 1.0.0
File Interpreter ABI Platform Actions
citrascope-1.0.0-py3-none-any.whl Python 3 none any Details for citrascope-1.0.0-py3-none-any.whl

Total release size: 33.3 MB

Release files / citrascope-1.0.0.tar.gz

Download URL citrascope-1.0.0.tar.gz
Size 32.7 MB
Tags Source
SHA-256 checksum
How to use checksums
a27b9e60b6ce0cbb2535782d840d2e72daff5bf814dbae741d39689d88ba81a9
BLAKE2b-256 checksum
How to use checksums
617283df07e17c7a5738072aa50b1217618fd2d61b53222ccc9bbc0d5c266370
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / citrascope-1.0.0-py3-none-any.whl

Download URL citrascope-1.0.0-py3-none-any.whl
Size 572.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8011a52f5389e45ffa7a3ef62021f290b833312287c85b4ce99b489dd89dceab
BLAKE2b-256 checksum
How to use checksums
224dee966df6a9f7fcbab909ef66ae3695abd9eaa97114b4d5072bba2939fcd4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for citrascope 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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