Run it locally¶
The fast path to a running app from source — no Docker, just uv. Good for development and poking around.
Prerequisites¶
- Python 3.12+
- uv (the package/venv manager this project uses)
Clone and install¶
git clone https://github.com/kbennett2000/backscatter.git
cd backscatter
uv sync # creates a venv and installs everything (incl. dev tools)
uv sync reads pyproject.toml + uv.lock, so you get the exact pinned dependency set
(including Py-ART and the rest of the scientific stack).
Configure your location¶
Same env vars as the Docker setup — set them in your shell (or a .env that your shell
sources). The simplest:
export BACKSCATTER_LOCATIONS='[{"name":"Home","lat":39.3603,"lon":-104.5969,"default":true}]'
Everything is read in one place (config.py);
no module reads the environment directly.
Run the pieces¶
backscatter is one CLI with a few subcommands:
uv run backscatter serve # the web UI + API at http://localhost:8085
uv run backscatter collect # the continuous collector (pull → render → index)
In real use you run both (that's what the container does). For a quick look, run serve
in one terminal and collect in another.
It starts empty — give it data fast
A fresh checkout has no radar yet. Either let collect run for a while, or pull a
chunk of history immediately with a backfill:
uv run backscatter backfill --start 2026-06-01T00:00:00Z --end 2026-06-01T03:00:00Z --dry-run
Drop --dry-run (and add --yes) once the preview looks right.
Handy one-offs¶
uv run backscatter site --near "39.36,-104.60" # which radar covers a point?
uv run backscatter pull KFTG # fetch the latest volume for one site
uv run backscatter render path/to/VOLUME_V06 # render a single frame to a PNG
uv run backscatter prune --dry-run # preview retention cleanup
Where things live on disk: raw radar volumes and rendered PNGs go under data/, with a
small SQLite index (data/backscatter.db). All of it is git-ignored.
Next: see how it fits together, or run the tests.