You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Musubi/CLAUDE.md

53 lines
4.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# CLAUDE.md – Musubi
Du arbeitest an **Musubi**, einer nativen macOS-App von Zielke Studio für kleine Live-Übertragungen. Lies vor jeder Aufgabe die relevanten Dateien in `docs/`. Der Fahrplan in `docs/04-fahrplan.md` ist verbindlich: Ein Meilenstein gilt erst als fertig, wenn sein Abnahmetest bestanden ist.
## Kontext in drei Sätzen
Ein ATEM steht im OP, die Regie sitzt im Saal, dazwischen liegt eine einzige Netzwerkleitung. Zwei ZowieBoxen schicken Multiview und PGM als NDI|HX3 ins Netz. Musubi läuft auf dem MacBook (Regie) und dem Mac mini (Bühne), zeigt die NDI-Bilder auf Bildschirmen, legt Ton auf Kanäle des MOTU M2 und stellt später ein Intercom fürs Handy bereit.
## Technische Leitplanken
- **Plattform:** macOS, Deployment Target **macOS 14**, **Universal Build** (arm64 + x86_64). Der Mac mini 2018 (Intel, macOS 15 Sequoia) ist Zielgerät und muss jede Version flüssig ausführen.
- **Sprache:** Swift 6, SwiftUI für die Oberfläche, AppKit wo nötig (Vollbildfenster auf bestimmten `NSScreen`, Anzeigemodi).
- **Abhängigkeiten:** Keine Drittanbieter-Pakete ohne Rückfrage. Erlaubt ohne Rückfrage: Apple-Frameworks, das NDI SDK (C-Bibliothek, via Modulemap/Bridging), später das Blackmagic ATEM SDK.
- **NDI SDK:** liegt lokal in `Vendor/NDI/` und wird nie eingecheckt. Fehlt es, brich nicht ab, sondern erkläre, was zu tun ist (`Vendor/README.md`).
- **Module** (lokale Swift Packages oder Gruppen, siehe `docs/02-architektur.md`):
- `MusubiCore` – Modelle, Szenen, Einstellungen (reine Logik, testbar)
- `NDIKit` – dünner Swift-Wrapper ums NDI SDK (Finder, Receiver, Audio-only)
- `VideoOutput` – Darstellung per Metal bzw. `AVSampleBufferDisplayLayer`, Vollbild je Bildschirm, 50 Hz
- `AudioMatrix` – Core Audio / `AVAudioEngine`, Quelle → Ausgangskanal
- `Remote` – Regie steuert Knoten per Bonjour (ab Meilenstein 3)
- `Intercom` – HTTPS + WebRTC, nur an die Klinik-Schnittstelle gebunden (ab Meilenstein 4)
- `Tally` – ATEM-Status (ab Meilenstein 6)
- **Echtzeit:** Nie Video- oder Audioarbeit auf dem Main Thread. Keine Allokationen im Audio-Render-Callback.
- **Betriebssicherheit:** Ruhezustand per `IOPMAssertion` verhindern, solange eine Szene läuft. Bei Verbindungsabbruch automatisch neu verbinden. Beim Start letzte Szene laden.
- **Netze trennen:** Technik-Netz und Klinik-Netz werden nie verbunden. Dienste binden explizit an eine Schnittstelle. Keine Internetfreigabe.
## Design
Halte dich an `docs/03-design.md` und `design/Theme.swift`. Kurz: dunkle Regie-Oberfläche, Indigo als einzige Markenfarbe, Rot/Grün ausschließlich für Tally (PGM/Vorschau), SF Pro in der App, SF Mono für Zahlen. Texte auf Deutsch, in Du-Form, kurz, im Stil von apps.zielke.studio („NDI rein. Bild, Ton und Stimme raus.“).
## Arbeitsweise
1. Vor Code: kurzer Plan in 3–6 Punkten, dann umsetzen.
2. Kleine Schritte, nach jedem lauffähigen Stand committen (Conventional Commits auf Englisch).
3. Reine Logik (Szenen, Kanalzuordnung, Parser) bekommt Unit-Tests mit Swift Testing.
4. Was sich nur mit Hardware prüfen lässt, beschreibst du als Schritt in `docs/05-testplan-hardware.md`, statt es zu behaupten.
5. Nach jedem Meilenstein: Checkbox in `docs/04-fahrplan.md` abhaken, kurze Notiz unter „Erkenntnisse“ ergänzen.
6. Code und Kommentare auf Englisch, UI-Texte auf Deutsch über einen String Catalog.
7. Wenn etwas unklar ist (Lizenz, Netz der Klinik, Hardware-Verhalten): fragen, nicht raten.
## Testen ohne Hardware
- **NDI-Quellen:** NDI Tools (Test Patterns, Screen Capture) auf einem zweiten Mac oder OBS mit DistroAV als NDI-Ausgang.
- **Audio:** MOTU M2 ist vorhanden; ohne M2 das eingebaute Ausgabegerät mit zwei Kanälen nutzen.
- **ATEM:** vorhanden, für Tally ab Meilenstein 6.
- **Hardware im Zulauf:** 2× ZowieBox, 2× TP-Link TL-SG2008P, MT-VIKI Dante-Adapter, Soundcraft Ui12.
## Nicht tun
- Kein Senden/Encoding von NDI, keine Aufnahme, keine Bildmischung (macht der ATEM).
- Keine Cloud-Dienste. Ein Relay (TURN) ist nur Plan B und läuft auf dem eigenen Server.
- Keine Funktionen eines späteren Meilensteins vorziehen.

Powered by TurnKey Linux.