Remotely control a telescope while it polls for tasks, collects and edge processes data, and delivers results and data for further processing.
Project description
CitraSense
Documentation | Citra.space | PyPI | CitraSense-Pi
Photograph satellites from your backyard telescope.
CitraSense 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.
Use Citra.space to search for satellites, schedule observation windows, and task your telescope — CitraSense handles the rest. If you already have a mount, a camera, and software like N.I.N.A. or KStars/Ekos, CitraSense 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 citrasense
citrasense
Or with pip:
pip install citrasense
citrasense
Open http://localhost:24872 in your browser to configure your hardware adapter, connect to Citra.space, and start accepting tasks.
Raspberry Pi? Check out citrasense-pi for a ready-to-flash SD card image with CitraSense pre-installed.
Optional Extras
uv tool install citrasense --with citrasense[indi] # INDI protocol support
uv tool install citrasense --with citrasense[kstars] # KStars/Ekos via D-Bus
uv tool install citrasense --with citrasense[usb-camera] # USB cameras via OpenCV
uv tool install citrasense --with citrasense[rpi] # Raspberry Pi Camera Module
uv tool install citrasense --with citrasense[all] # INDI + KStars
pip equivalents
pip install citrasense[indi]
pip install citrasense[kstars]
pip install citrasense[usb-camera]
pip install citrasense[rpi]
pip install citrasense[all]
CLI Options
citrasense --help
citrasense --web-port 8080 # Custom web UI port (default: 24872)
Documentation
Full documentation is available at docs.citra.space/citrasense. 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: citrasense — Runs the daemon with default settings
- Python: citrasense (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
Project details
Release history Release notifications | RSS feed
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file citrasense-1.0.1.tar.gz.
File metadata
- Download URL: citrasense-1.0.1.tar.gz
- Upload date:
- Size: 33.1 MB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4c41aae730609e2976ee97832208c45f92b0c65708c92a939ce44dc874460e1
|
|
| MD5 |
4db7a39d9bd1468201e9bd5ad02c8a1c
|
|
| BLAKE2b-256 |
55117c518ab2e957fedb7a2ec9c792898baaf1164cb770b3f0e3e89da3091198
|
File details
Details for the file citrasense-1.0.1-py3-none-any.whl.
File metadata
- Download URL: citrasense-1.0.1-py3-none-any.whl
- Upload date:
- Size: 580.2 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6715fb994ed57ea314c1a192cef6da453f26a5b0230cd1697ba545bd366f94f1
|
|
| MD5 |
ff30c72f93889d160b6a68206cb3ec5e
|
|
| BLAKE2b-256 |
e83aae680dee898535dbfb2b786128b4aed6c4dff0c2f6fd804f31d398dcb3f8
|