fix: bound transcoded prefetch concurrency - #57
Merged
Conversation
added 15 commits
July 27, 2026 00:36
Adds a 'Preview' display role alongside the existing 'Wall' role. Each monitor can be assigned a role in the setup wizard: - Wall: the public grid (e.g. 2x2 on the external display) - Preview: a larger operator grid (default 3x4 = 12 cells) on a laptop Double-clicking any cell in a Preview display fills that laptop screen with the selected video. Escape (or another double-click) returns to the preview grid. The wall grid keeps playing independently. Also persists preview grid size and per-display roles in config.ini. Version bumped to 10.15.0.
Implements the core changes for preview displays: - constants.DisplayRole with WALL/PREVIEW values - HyperwallConfig gains last_preview_rows/cols and last_display_roles - SetupWizard lets users assign Wall/Preview role per monitor and set preview grid size - WallController builds wall vs preview windows with different grid sizes - VideoCell emits request_solo on double-click - WallController enters/exits solo fullscreen on preview displays; Escape exits solo - app.py wires new settings through and persists them - version bumped to 10.15.0
Adds a TCP/JSON sync mesh so multiple Hyperwall instances can cooperate. - New hyperwall/sync.py: SyncServer + SyncClient, newline-delimited JSON protocol with hello/full_state/cell_update/solo/exit_solo/filter/remote_solo. - Config options: sync_enabled, sync_server, sync_host, sync_port, sync_display_name (defaults: off, port 9876). - WallController gains per-cell and per-display UUIDs, sync adapter hooks, and applies remote state changes on the GUI thread. - Local state changes (next/prev/filter/solo/exit solo) are broadcast to peers. - Remote solo: Ctrl+double-click a preview cell asks the server to fullscreen that item on every other peer's first display. - App starts server or client based on config and attaches the adapter. - Adds tests/test_sync.py covering framing, hello, broadcast, filter, and remote-solo routing. All portable tests pass; Qt-dependent tests still run on Windows build job.
Integrates the sync layer added in the previous commit: - cell.py: request_remote_solo signal + Ctrl+double-click handler. - wall.py: cell/display UUIDs, sync_broadcast_* helpers, sync_apply, _remote_solo, and adapter lifecycle in _cleanup. - config.py: persists sync_enabled/server/host/port/display_name. - app.py: starts SyncServer/SyncClient and attaches adapter to controller. - tests/run_all.py: register test_sync.py suite.
- Add RelayController and run_sync_relay() for running the sync server headlessly on a LAN host (no Qt/mpv needed). - Fix SyncServer._build_full_state to read relay-stored state. - Add --sync-relay/--sync-host/--sync-port CLI flags to hyperwall.py. - Add scripts/run-hyperwall-relay.sh for mb.perseus.observer. - Add scripts/run-hyperwall-client-macos.sh and scripts/config.client.ini.template for Mark's macOS client. - Add RelayController tests. Full suite green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
Soak follow-up
The target macOS/Emby soak must be rerun after pulling this PR. The original report showed an upstream HLS/Emby HTTP-500 burst; this change prevents the client from adding transcoded prefetch load while the server transcode budget is exhausted.