# Musubi **NDI rein. Bild, Ton und Stimme raus.** Musubi (結び, japanisch: das Knüpfen, Verbinden) ist eine macOS-App von Zielke Studio für kleine Live-Übertragungen. Sie macht MacBook und Mac mini zu den fehlenden Bausteinen einer Regie: - NDI-Quellen im Vollbild auf beliebige Bildschirme - NDI-Ton (auch ohne Bild) gezielt auf einzelne Kanäle eines Audio-Interfaces - Talkback per Sprechtaste - Intercom, PGM-Vorschau und Tally fürs Handy im Browser - Szenen, die Regie-Mac und Bühnen-Mac auf einen Klick einrichten Erster Einsatz: OP-Liveübertragung (ATEM im OP, Regie im Saal, eine Netzwerkleitung dazwischen). ## Status M0 abgenommen. M1 (Bild), M2 (Ton-Matrix) und M3 (Szenen und Fernsteuerung) umgesetzt, Langzeittests und Teile der Abnahmen offen. Siehe [docs/04-fahrplan.md](docs/04-fahrplan.md). ## Dokumente | Datei | Inhalt | |---|---| | [CLAUDE.md](CLAUDE.md) | Arbeitsanweisungen für Claude Code | | [START.md](START.md) | Startbefehl für Claude Code | | [docs/01-konzept.md](docs/01-konzept.md) | Idee, Rollen, Funktionsumfang | | [docs/02-architektur.md](docs/02-architektur.md) | Module, Frameworks, Datenflüsse | | [docs/03-design.md](docs/03-design.md) | Designsystem, Farben, Typografie, Texte | | [docs/04-fahrplan.md](docs/04-fahrplan.md) | Meilensteine mit Abnahmetests | | [docs/05-testplan-hardware.md](docs/05-testplan-hardware.md) | Tests, sobald die Hardware da ist | | [docs/06-netzwerk.md](docs/06-netzwerk.md) | IP-Plan, Schnittstellen, Relay als Plan B | ## Bauen ```bash brew install xcodegen # einmalig xcodegen # erzeugt Musubi.xcodeproj aus project.yml open Musubi.xcodeproj ``` Das `.xcodeproj` ist generiert und nicht im Repo. Nach Änderungen an `project.yml` erneut `xcodegen` ausführen. Signiert wird mit **Developer ID Application** (Team `XY4C2RG3L5`), Hardened Runtime an. Ohne dieses Zertifikat im Schlüsselbund `CODE_SIGN_IDENTITY`/`DEVELOPMENT_TEAM` in `project.yml` anpassen. **Installieren immer nach `/Applications`** – in privaten Ordnern blockiert macOS Bonjour (Fernsteuerung). ### Startargumente (für Tests und Knoten ohne Bildschirm) | Argument | Wirkung | |---|---| | `--route "="` | Quelle im Vollbild auf Bildschirm (0 = Hauptbildschirm) | | `--audio-route "ndi:=:"` | NDI-Ton auf Ausgangskanal (Gerätename als Teilstring, Kanal ab 1) | | `--audio-route "input:=:"` | Mikrofon (über die Sprechtaste) auf Ausgangskanal | | `--load-scene ""` | gespeicherte Szene laden | | `--login-item on\|off` | Beim Anmelden starten | Rolle und Schnittstelle ohne Bildschirm: `defaults write studio.zielke.musubi role node` bzw. `interfaceName en7`. Protokolle: Console.app, Subsystem `studio.zielke.musubi`. Minuten-Statistik: `~/Library/Logs/Musubi/stats-*.csv` (Bild), `audio-*.csv` (Ton). Ohne NDI SDK in `Vendor/NDI/` bricht der Build mit einem Hinweis ab. Tests (Swift Testing, 44 Stück): im Schema `Musubi` (⌘U) oder `cd Packages/MusubiKit && swift test` – beides braucht das SDK, weil alle Module mitgebaut werden. ## Struktur | Pfad | Inhalt | |---|---| | `App/` | App-Target: Einstieg, Koordinator (Rolle, Szenen, Live-Stand), Oberfläche, String Catalog | | `Packages/MusubiKit/` | Module `MusubiCore`, `NDIKit` (+ `CNDI`-Modulemap), `VideoOutput`, `AudioMatrix` (+ `CAudioRing`), `Remote`, `DesignSystem` | | `design/Theme.swift` | Design-Tokens; im Package als Symlink eingebunden | | `project.yml` | XcodeGen-Projektdefinition | ## Voraussetzungen - Xcode (aktuell), macOS auf Apple Silicon zum Entwickeln - NDI SDK für macOS (nicht im Repo, siehe [Vendor/README.md](Vendor/README.md)) - Zielgeräte: MacBook (Apple Silicon) und Mac mini 2018 (Intel, macOS 15) → Universal Build © Zielke Studio