Publish birdcage-tui to PyPI, document TUI extras

Bumped version to 2026.02.17, added classifiers/keywords/URLs.
Documented camera extra (Pillow + astropy) in CLAUDE.md.
Added TUI section with uvx usage and extras table.
This commit is contained in:
Ryan Malloy 2026-02-17 18:42:28 -07:00
parent 5a26dce075
commit 3ccec3be10
3 changed files with 56 additions and 5 deletions

View File

@ -768,6 +768,42 @@ This captures 8 SVG + 8 PNG screenshots plus a 2×3 collage:
or screen content. The script populates Craft search results and tracking state
directly via widget API for deterministic screenshots.
## TUI
| Property | Value |
|----------|-------|
| PyPI | [`birdcage-tui`](https://pypi.org/project/birdcage-tui/) |
| Source | `tui/src/birdcage_tui/` |
| Entry point | `birdcage_tui.app:main` |
| Framework | [Textual](https://textual.textualize.io/) |
| Screens | Dashboard (F1), Control (F2), Signal (F3), System (F4), Console (F5), Camera (F6) |
### Running
```bash
# Published package (from PyPI) — no clone needed
uvx birdcage-tui --demo # demo mode, base install
uvx birdcage-tui # hardware mode (needs serial port)
# With camera capture support (Pillow + astropy)
uvx --with 'birdcage-tui[camera]' birdcage-tui --demo
# Local development
uv run --directory tui birdcage-tui --demo
```
### Extras
| Extra | Install | Packages | Purpose |
|-------|---------|----------|---------|
| *(base)* | `uvx birdcage-tui` | `winegard-birdcage`, `textual` | Full TUI, all screens, demo mode |
| `camera` | `uvx --with 'birdcage-tui[camera]' birdcage-tui` | `Pillow>=10.0`, `astropy>=6.0` | F6 camera overlay: JPEG capture frames with annotated demo images (Pillow), FITS export for radio astronomy pipelines (astropy) |
**Graceful degradation:** The camera screen (F6) works without the `camera` extra — it
falls back to writing minimal JPEG headers directly. Pillow adds annotated demo frames
and proper image processing; astropy adds FITS file export for integration with DS9,
CASA, and other radio astronomy tools.
## MCP Server
| Property | Value |

View File

@ -4,18 +4,33 @@ build-backend = "hatchling.build"
[project]
name = "birdcage-tui"
version = "2026.02.13"
description = "Textual TUI for Winegard Carryout G2 satellite dish control"
version = "2026.02.17"
description = "Textual TUI for Winegard satellite dish control and amateur radio sky tracking"
license = "MIT"
requires-python = ">=3.11"
authors = [{name = "Ryan Malloy", email = "ryan@supported.systems"}]
keywords = ["satellite", "antenna", "winegard", "amateur-radio", "ham", "tui", "textual"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Science/Research",
"Topic :: Scientific/Engineering",
"Topic :: Communications :: Ham Radio",
]
dependencies = [
"winegard-birdcage",
"winegard-birdcage>=2026.2.17",
"textual>=1.0.0",
]
[project.optional-dependencies]
camera = ["Pillow>=10.0", "astropy>=6.0"]
camera = [
"Pillow>=10.0", # JPEG capture frames, annotated demo images
"astropy>=6.0", # FITS file export for radio astronomy pipelines
]
[project.urls]
Repository = "https://git.supported.systems/warehack.ing/birdcage"
Documentation = "https://birdcage.warehack.ing"
[project.scripts]
birdcage-tui = "birdcage_tui.app:main"

2
tui/uv.lock generated
View File

@ -36,7 +36,7 @@ wheels = [
[[package]]
name = "birdcage-tui"
version = "2026.2.13"
version = "2026.2.17"
source = { editable = "." }
dependencies = [
{ name = "textual" },