5504b8983e
flow_id is now optional (config().contains). When absent: skip the MXL reader, active-wait, and NDI video path entirely. Video buffers and NDI video frames are heap-allocated only when has_video. Loop pacing: video branch sleeps 1ms on TOO_EARLY as before; audio-only path sleeps 1ms when no chunk was available (audio_advanced == false) to avoid busy-spinning. NDI sender name changed from the video flow UUID to node_id(), which is stable and human-readable for both video and audio-only modes. To use audio-only: wire only audio_flow_id in build_graph, omit flow_id. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>