Windows Build 4
Pre-release
Pre-release
Make the Confidence Monitor a real composited NDI output Presenter notes already flowed end-to-end to the server (via the existing slide-state WebSocket sync), but only ever fed a static text box in the operator's own Control Deck panel. This makes the "Confidence Monitor" stage-display output — seeded as mock data since day one but never backed by a real signal — actually broadcast a real NDI feed: live video layers plus a new "Presenter Notes" text layer, merged into one 1920x1080 frame and sent out via a new native ndi-send addon (mirrors the client's, copied verbatim). - native/ndi-send: copied from the client repo, generic NDI SDK send wrapper, no app-specific code. - ndiOutputSender.ts: mirrors the client's ndiSender.ts coalescing queue pattern; new ndi-output:* IPC surface mirrors the client's ndi:* pattern. - shared/types.ts: new NotesSource kind referencing a connected Client Node's live notes/slide-state; SceneLayer already generically references any sourceId, so no layer-shape change needed. - StageDisplayCompositor.tsx: always-mounted, invisible. Resolves the stage-display output's routed scene/source, draws live NDI layers (reusing the packFrame repack helper extracted from Viewer.tsx) and notes-layer text onto one offscreen canvas, pushes frames when the output is toggled on. - ndiPreview.ts: added reference counting — the Viewer's edit-time preview and the always-on compositor can now watch the same NDI source independently, so one stopping must not kill the shared receiver out from under the other. - SourcePool/MatrixInspector: "Presenter Notes" as a third addable source kind (pick a connected client instead of typing a name), and an NDI Output toggle next to the Confidence Monitor row. Verified end-to-end with a real receiver connected to the outgoing stream: composited video positioned correctly, live note text overlaid (2695 bright/text pixels sampled), toggle-off genuinely stops the broadcast, and swapping the routed scene updates the live output. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>