Diagnosis: individual tiles flickered when their stream died and mpv
relaunched (confirmed via status: a PID dropping to 0 and coming back).
The restarted window mapped at the video's native size wherever sway
dropped it, and the corrective loop only snapped it into its cell on the
next tick — up to 2s later on the relaxed cadence.
Fix, at the source instead of racing the map:
- Pre-install a per-slot for_window rule (matched on each mpv's unique
window title, anchored so slot-1 never matches slot-10) so sway
positions and sizes the window synchronously the moment it maps.
- Pass --geometry=WxH per tile so mpv opens at the tile size rather
than resizing itself to the video's native size on load.
The placeLoop remains as a corrective backstop for mid-life drift.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Skip stream restarts when a reload resolves to the identical wall
(same URLs, tile geometry, player settings) — saving an unrelated
config edit no longer blanks the screen.
- Replace per-tile placement polling (a swaymsg fork per tile per second,
plus 150ms get_tree polling per tile at startup) with one shared loop:
a single get_tree snapshot per tick, re-placing only drifted windows,
relaxing to a 2s tick once settled.
- Mute streams by default (--no-audio) to skip an audio decoder per
stream; opt back in with player.audio: true.
- Graceful, parallel mpv teardown via cmd.Cancel/WaitDelay, fixing the
double-Wait race between Stop and Supervise and cutting worst-case
layout switches from ~2s x N streams to ~2s total.
- status: probe mpv IPC outside the daemon mutex so a slow probe can't
block layout switches.
- View sync: reuse the Protect session across ticks (re-login only on
expiry) and pick up view_refresh_seconds changes without a restart.
- Health strikes keyed by player, not slot, so they never carry across
layout switches; prune stale entries.
- New `rtsp-streamer reload` CLI; fix dead sort in `layout ls`; back off
on persistent control-socket accept errors; fsync config before the
atomic rename (SD-card power-cut safety); bump IPC client deadline;
gofmt stragglers.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>