Releases: DjangoAILab/CastFabric
Release list
CastFabric v0.11.0-alpha.5
CastFabric v0.11.0-alpha.5
This alpha hardens multi-device and multi-protocol ownership at the physical-output boundary.
- Serialize physical playback commands per output while keeping different speakers independent.
- Fence DLNA, AirPlay, MiPlay and MCP callbacks by the current session owner so stale stop, resume,
seek or volume callbacks cannot disrupt a newer session. - Delay MiPlay session creation until a valid
Open, preventing idle TCP probes from appearing as
active casting sessions or blocking a real sender; incomplete handshakes now expire after 15 seconds. - Give each MiPlay receiver a stable, target-specific discovery identity and advertise the observed
commonDatafield. - Isolate AirPlay stateful clients with connection tokens and reject a competing stateful client with
RTSP 453 instead of sharing decoder state. - Keep playlist-run preemption and media-session preemption atomic, and improve partial-start,
shutdown and Zeroconf cleanup.
Upgrade and verification notes
The audio data plane is unchanged: this release does not alter FFmpeg arguments, PCM format, WAV
headers, HTTP stream mode, queue sizing, physical renderer play type or the existing five-second DMR
pull-confirmation boundary. On one output, concurrent control commands are intentionally ordered; a
takeover can therefore wait for an in-flight renderer confirmation. Different outputs do not share a
playback lock.
Automated verification covers same-output serialization, cross-output concurrency, stale callback
fencing, idle MiPlay probes, AirPlay client ownership, DLNA ownership, playlist/session consistency,
the full Python suite, direct audio seek and the offline MiPlay WFD/RTP/MPEG-TS/PCM path. Xiaomi-phone
discovery and audible real-device behavior remain separate deployment gates and must not be inferred
from self-discovery or simulation.
Use the existing persistent /app/conf mount and retain the previous container or immutable image for
rollback. Restarting CastFabric interrupts active routes but does not automatically start playback.
CastFabric v0.11.0-alpha.4
CastFabric v0.11.0-alpha.4
This alpha brings reusable audio and server-run playlists into the console and MCP.
- Upload audio or save external URLs as persistent resources with editable display names, notes and tags.
- Organize playlists, reorder items and start all items or a selected item on a chosen speaker.
- Keep playback running on the server after the client or Agent exits; preserve factual history and progress without automatic playback after restart.
- Unify the console mark with the project's GitHub/README SVG, add an open-source link, and make language and connection controls clearer on desktop and mobile.
- Center content dialogs, keep actions reachable on short screens, improve keyboard focus and preserve form entries on errors.
- Extract MP3 and other supported local audio durations using the existing PyAV dependency; backfill missing local-file durations without changing resource IDs, titles, playlist order or history. Unknown totals remain unknown instead of showing zero.
- Include the real-device fixes for DLNA position/EOF observation and re-upload of previously deleted audio.
Upgrade and verification notes
Use the existing persistent /app/conf mount. Upgrades from alpha.3 create the six-table content store;
upgrades from the server-playlist candidate retain its schema and stored audio. Restart interrupts old
active session records and never starts sound automatically. Retain the previous image/container for rollback.
The two curated Home Server playlists are user data, not bundled examples or downloads added to the image.
MCP remains a trusted-LAN service without public-Internet authentication. Physical-speaker chain tests from
the preceding candidate are recorded separately; this UI/metadata release uses silent validation and does
not claim a new listening test or simultaneous two-speaker acceptance.