No description
Phase 0/1: SwiftUI app (XcodeGen), PlumTVCore framework, player MVP. - PlayerTarget protocol + VLCTarget (HTTP) and BlackTVTarget (ssh black-tv) - config-driven hosts (~/.config/plumtv/hosts.json), seeded plum-vlc + black - reliability: SSH ControlMaster (5s->~1s/poll), endpoint pinning (LAN->overlay), single-flight polling, keep-last-known on transient failure, debounced volume - Hosts pane shows live connection state; Player has target picker + transport - unit tests for status decoding Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| Sources | ||
| Tests/PlumTVCoreTests | ||
| .gitignore | ||
| project.yml | ||
| README.md | ||
PlumTV
Native macOS app (SwiftUI) for the home media stack on plum. Unifies what was previously CLI/MCP-only: pick a playback target (plum's VLC or the HDMI TV on black) and drive transport; later phases add a cached library browser, a download searcher/manager, and a local (MLX) filename→metadata pipeline.
Hybrid architecture: the control plane is native Swift (SSH shell-outs to the
deployed black-tv script; HTTP to VLC's Lua interface — zero new runtime deps);
the data-heavy plane reuses existing projects (plum-control-mcp, media-recommender)
as helper subprocesses. See the build plan for phases.
Build
brew install xcodegen # if not already present
xcodegen generate # project.yml -> PlumTV.xcodeproj
xcodebuild -scheme PlumTV -destination 'platform=macOS' build
# or open PlumTV.xcodeproj in Xcode and Run
PlumTV.xcodeproj is generated and git-ignored — project.yml is the source of truth.
Layout
Sources/PlumTVCore/— framework: models,PlayerTargetprotocol + impls, target selector.Sources/PlumTV/— SwiftUI app (App, RootView, feature views).Tests/PlumTVCoreTests/— unit tests for the core (status decoders, mappings).
Targets
- Plum VLC — HTTP to
http://127.0.0.1:8080/requests/…(password from~/.config/portable-net-tv/config.jsonor$VLC_HTTP_PASSWORD). - Black TV —
ssh lilith@10.9.0.4 /usr/local/bin/black-tv <verb>(the overlay IP; the LAN address flaps). All playback intelligence lives inblack-tvon black.