Drops the second ZMQ leg — the viewer→server reply path — in favor of Redis BLPOP keyed by a UUID correlation ID. Same channel layer that PR1 moved the command bus onto, so the entire viewer messaging path now runs on Redis. Wire format extends the existing 'command¶meter' encoding: the 'current_asset_id' command (currently the only request-reply command) now carries the correlation ID in the parameter slot, and the viewer LPUSHes its JSON reply onto 'anthias.reply.<corr-id>' (with a 30s EXPIRE so unread replies don't accumulate). The server BLPOPs that key. This also fixes a latent correctness bug: ZmqCollector had no correlation, so concurrent /v1 ViewerCurrentAsset callers could mismatch replies. That hazard was masked today by uvicorn running single-worker; with Redis + correlation IDs, the reply path is now safe across concurrent callers. - settings.ZmqConsumer / ZmqCollector → settings.ReplySender / ReplyCollector (BLPOP). 'import zmq' drops out — pyzmq itself is removed in the next commit. - lib.errors.ZmqCollectorTimeoutError → ReplyTimeoutError (the only catch site is implicit — it bubbles to a 500 — so the rename is mechanical). - viewer/__init__.py: send_current_asset_id_to_server takes a correlation ID and uses ReplySender. The 'current_asset_id' command handler in the dispatch table threads the parameter (now the corr ID) into the function call. - api/views/v1.py ViewerCurrentAssetViewV1: generates a UUID, sends it with the command, BLPOPs on it. - api/tests/test_v1_endpoints.py: ZmqCollector mock → ReplyCollector; side_effect signature relaxed to '*_' since recv_json now takes two positional args (corr, timeout_ms). - stubs/redis-stubs/client.pyi: add rpush() and blpop() narrowed to decode_responses=True return shapes (the rest of the stub follows the same convention). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Anthias · Open Source Digital Signage Solution for Raspberry Pi and PC
✨ About Anthias
Anthias is a digital signage platform for Raspberry Pi devices and PCs. Formerly known as Screenly OSE, it was rebranded to clear up the confusion between Screenly (the paid version) and Anthias. More details can be found in this blog post.
Want to help Anthias thrive? Support us using GitHub Sponsor.
🚀 Getting Started
See this page for options on how to install Anthias.
✅ Compatibility
balenaOS
Note
See this page for instructions on how to install Anthias on balenaOS. You can either use the images from balenaHub or download the images from the releases.
Raspberry Pi OS
- Raspberry Pi 5 Model B - 64-bit Trixie, 64-bit Bookworm
- Raspberry Pi 4 Model B - 64-bit Trixie, 64-bit Bookworm
- Raspberry Pi 3 Model B+ - 64-bit Trixie, 64-bit Bookworm
- Raspberry Pi 3 Model B - 64-bit Trixie, 64-bit Bookworm
- Raspberry Pi 2 Model B - 32-bit Trixie, 32-bit Bookworm
- PC (x86 Devices) - 64-bit Trixie, 64-bit Bookworm
- These devices can be something similar to a NUC.
- See this page for instructions on how to install Debian in a specific way before running the installation script.
Note
We're still fixing the Raspberry Pi OS installer so that it'll work with Raspberry Pi Zero and Raspberry Pi 1. Should you encounter any issues, please file an issue either in this repository or in the forums.
⭐ Star History
🐞 Issues and Bugs
Note
We are still in the process of knocking out some bugs. You can track the known issues here. You can also check the discussions in the Anthias forums.
⚡ Quick Links
- Forum
- Website (hosted on GitHub and the source is available here)
- General documentation
- Developer documentation
- Migrating assets from Anthias to Screenly
- WebView