- NDIReceiver captures audio (audio-only bandwidth for sound routes)
- AUHAL output per device, mic input via AUHAL, fan-out to routes
- Drift-compensated, allocation-free render path; backlog trimmed on start
- Global talk key (Ctrl-Option-Space, hold or toggle) gates mic routes
- Sound tab with channel strips, meters, gain, mute, L/R/L+R
- --audio-route launch argument, per-minute audio CSV, 10 s diagnostics log
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Senders like NDI Test Patterns send a still image once; a held NDI connection
now counts as alive so the receiver does not reconnect in a loop.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- NDIReceiver: per-source receive thread, IOSurface pixel buffers, watchdog reconnect
- VideoOutput: borderless output window above menu bar, AVSampleBufferVideoRenderer,
50 Hz display mode for app lifetime, display sleep assertion
- Screen cards with drag and drop, live fps and frame loss
- Per-minute stats CSV in ~/Library/Logs/Musubi for long-run tests
- --route launch argument for scripted tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- XcodeGen project: macOS 14, universal (arm64 + x86_64), studio.zielke.musubi
- MusubiKit package: MusubiCore, NDIKit (+ CNDI module map), VideoOutput,
AudioMatrix, DesignSystem (symlink to design/Theme.swift)
- Main window with NDI source list, NDI version logged at launch
- Swift Testing suite for MusubiCore models
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>