- hub.py: commune relay — {commune:{room,...}} messages are broadcast verbatim
to other clients in the same room (allowed even on the read-only public hub;
peer state never touches hub state). Room tag per ws, cleaned on disconnect.
- viz commune: join a room by word (panel via sky menu), claim voices and the
godtime from right-click menus or the panel picker; owned sections (mute/
level/trim, groove steps+on, arranger lane, bpm) diff-sync every 600ms;
claims/take-overs announced in the ticker; late joiners get re-claims.
Verified two-way through the live hub: peer state applied (level 1.70x),
page claims relayed to peers. Bluetooth deliberately not used — a web page
cannot be a BT peer; the hub is the meeting place, LAN or planet-wide.
- viz stage: window.open + canvas.captureStream(30) mirror window for
projectors/AirPlay displays; double-click fullscreen; camera modes: whole
view / follow one node / frame a station+satellites (smoothed glide),
switchable live from the right-click menus.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>