Anleitung LED Show — Bedienung, Ausspielung (Capture → Resolume) & Companion-Fernsteuerung (Live, 4608 × 1152). Für die Technik-/Programmierer-Crew.
Weg: Die Output-Seite läuft im Vollbild auf einem Bildschirm/GPU-Ausgang des Playback-Rechners. Eine Capture-Karte am Resolume-Rechner nimmt dieses Bild auf, Resolume schiebt es auf die 4608×1152-Fläche der drei Wände zurecht. Unkomprimiert, robust, kein NDI / OBS / Bridge.
Steuerung ↔ Ausgabe
- Control-Fenster (Bedienung) und Output-Fenster laufen im selben Chrome-Profil → sie synchronisieren sich automatisch über BroadcastChannel. Kein Server / keine Bridge nötig.
- Control auf dem Operator-Monitor öffnen; „⧉ Output-Fenster" klicken; das Output-Fenster auf den Capture-Ausgang ziehen und mit F11 in den Vollbild setzen.
- Output-URL direkt:
file:///…/LED_Show_Output.html?view=output (optional &mute=1, &crop=…).
Auflösung / Split — final mit der Hardware entscheiden
- 1 Signal 4608×1152 wenn GPU-Ausgang + Capture-Karte das mitmachen (viele Karten machen bei 4096 px Breite dicht → dann splitten).
- Runterskaliert: ein kleineres 4:1-Signal aufnehmen, Resolume zieht wieder hoch (leichte Qualitätseinbuße).
- Split pro Wand über den
?crop=-Parameter (1:1-Pixel-Ausschnitt statt Skalierung):
- 3 Ausgänge à 1536×1152:
&crop=0 · &crop=1536 · &crop=3072
- 2 Ausgänge à 2304×1152:
&crop=0 · &crop=2304
- Alle Output-Fenster im selben Chrome-Profil öffnen → BroadcastChannel synct sie alle mit dem Control-Fenster.
In Resolume
- Composition 4608×1152 @ 50. Capture-Input(s) als Clip/Layer, Native/Fill, keine Skalierung (Pixel 1:1). Bei Split links auf x=0, ggf. Mitte x=1536/2304, rechts x=3072.
- Advanced Output: Slices bei x=0 / 1536 / 3072 auf die drei Wände mappen.
- Nähte prüfen: im Output G drücken — Guides liegen exakt bei x=1536 / 3072.
Szenen (alle in EINEM Output)
| Szene | Wand 1 (links) | Wand 2 (Mitte) | Wand 3 (rechts) |
| Keyvisual | „PERFECT" (Lavender) | „MATCH" (Violet) | „Galaxy Z8" (Pink) |
| Perfect Match · Offer | Titel (2 Zeilen) | Pre-Order Offer | Live-Chat |
| Match or Pass | Titel „Match or Pass" | Statement + PASS/MATCH (statisch) | Live-Chat |
| Speed Dating | Titel „Speed Dating" | Statement (editierbar) | Live-Chat |
| Wer würde eher | Titel „Wer würde eher …" | Statement (editierbar) | Live-Chat |
| Match Bar | Balken Creator 1 | Balken Creator 2 | Balken Creator 3 |
| Frei / Bilder | frei: leer / Text / Bild | frei: leer / Text / Bild | frei: leer / Text / Bild |
Links immer der Titel, rechts immer der Chat. Jede Wand ist in sich abgeschlossen (Safe-Area 110 px) — nichts läuft über die Naht.
Steuerung im Control-Fenster
- Szenen: Buttons oben.
- Titel links: Zwei-Zeilen-Eingabefeld je Spiel-Szene.
- Statements (Match or Pass · Speed Dating · Wer würde eher): editierbare Liste (hinzufügen/löschen, ▶ ausspielen) + Überschrift, ←/→ durchblättern, Regler „Anim" für die Einblende-Dauer.
- PASS/MATCH-Buttons (nur Match or Pass): Größe und Position (X/Y) im Statement-Panel verstellbar — mit ↺ Reset.
- Match Bar: 1 2 3 Creator umschalten (bleibt stehen) · S Sequenz · E Endbild · 0 Reset; Namen/Werte im Panel. Wand-Header editierbar: Überschrift („Perfect Match") + Unterzeile („Dein Match Bar") — gilt für alle drei Wände, live.
- Match-Bar-Sound: Auswahlmenü im Panel (R1–R5 Rise 01–05 (Datei) [R1 = Standard] · X1 Arcade Jackpot · H5 Drumroll · H3/V3 Minimal Tech · H2/V2 Club · V0 Aktuell) + ▶ Preview (spielt nur lokal im Control, nicht auf dem Output). R1–R5 sind die Dateien
sounds/rise_01.mp3–rise_05.mp3 (je ein kompletter Sound, kein separater Hit); die übrigen sieben sind Web-Audio-Synthese (Riser + separater Hit). Auswahl synct automatisch mit — die rise_*.mp3 müssen im Ordner sounds/ neben der HTML liegen.
- Frei / Bilder: pro Wand Leer / Text / Bild (Upload 1536×1152), Animationsart Fade/Float, Einblenden/Ausblenden. Mehrzeiliger Text (Enter = Umbruch).
- Typo & Position: je Text Schrift (Head/Body), Schnitt, Größe, X/Y — mit ↺ Reset.
- Safe/Nähte: G · Sound: X (bzw.
?mute=1).
- Auto-Save: Jede Änderung im Control (Titel, Statements, Prozente, Typo, Bilder, Szene …) wird automatisch gespeichert (localStorage/IndexedDB — pro Rechner + Chrome-Profil) und beim Neuladen wiederhergestellt; offene Outputs werden nach einem Control-Neuladen sofort resynct. Oben im Control: „⬇ Sichern" / „⬆ Laden" = kompletter Zustand inkl. Bilder als Datei (z. B. Vorbereitungs-Mac → Show-Rechner) · „⟲ Standard" = Gespeichertes löschen, Standardwerte laden.
Companion-Fernsteuerung (Bitfocus, separater Rechner)
Weg: Companion → LAN → Relay (winziger Node-Prozess auf dem Playback-Rechner, companion/relay.js) → Control-Fenster. Das Control bleibt der Chef — Prozente, Statements, Typo, Bilder werden weiter dort bedient; Companion drückt nur „virtuelle Tasten" (Szenen, Reveals, Sequenz …). Die Outputs folgen wie immer dem Control. Fällt Relay oder Netz aus, laufen Control + Hotkeys lokal normal weiter.
Playback-Rechner einrichten
- Node installieren (einmalig):
- macOS (Terminal):
brew install node
- Windows (PowerShell):
winget install OpenJS.NodeJS.LTS
- ohne Paketmanager: nodejs.org → LTS-Installer
- Relay starten: Doppelklick auf
companion/start_relay.command (macOS) bzw. companion/start_relay.bat (Windows). Das Fenster zeigt direkt die IP, auf die Companion verbinden muss. Firewall-Nachfrage beim ersten Start erlauben (Port 8899 eingehend).
- Show-Seite öffnen wie immer — das Control-Fenster dockt automatisch an (
localhost:8899) und zeigt oben „· Companion verbunden". Optional: ?relay=host:port (anderer Relay-Ort) oder ?relay=off.
- Testen ohne Companion:
http://localhost:8899 im Browser — Status-Seite mit Verbindungen, Show-Zustand, Log und klickbaren Test-Befehlen.
Companion-Rechner einrichten
- Beiden Rechnern feste IPs geben (oder DHCP-Reservierung) — sonst zeigt Companion nach Router-Neustart ins Leere.
- Companion → Connections → „Generic: WebSocket", Ziel
ws://<IP-des-Playback-Rechners>:8899, Reconnect an. Button-Aktion: „Send generic message" mit dem JSON aus der Tabelle.
- Alternativ (simpel, ohne Feedback): „Generic: HTTP Requests", Aktion GET auf
http://<IP>:8899/api/….
Befehle
| Wirkung | WS-JSON (Generic WebSocket) | HTTP (Generic HTTP) |
| Szene Keyvisual | {"cmd":"scene","value":"keyvisual"} | /api/scene/keyvisual |
| Szene Perfect Match · Offer | {"cmd":"scene","value":"split"} | /api/scene/split |
| Szene Match or Pass | {"cmd":"scene","value":"matchpass"} | /api/scene/matchpass |
| Szene Speed Dating | {"cmd":"scene","value":"speeddating"} | /api/scene/speeddating |
| Szene Wer würde eher | {"cmd":"scene","value":"whowould"} | /api/scene/whowould |
| Szene Match Bar | {"cmd":"scene","value":"matchbar"} | /api/scene/matchbar |
| Szene Frei / Bilder | {"cmd":"scene","value":"custom"} | /api/scene/custom |
| Reveal Wand 1/2/3 (Hotkey 1/2/3) | {"cmd":"reveal","value":1} | /api/reveal/1 |
| Sequenz (S) | {"cmd":"seq"} | /api/seq |
| Endbild (E) | {"cmd":"end"} | /api/end |
| Reset (0) | {"cmd":"reset"} | /api/reset |
| Statement vor / zurück (→ / ←) | {"cmd":"stmt","value":"next"} / "prev" | /api/stmt/next |
| Safe/Nähte (G) | {"cmd":"safe","value":"toggle"} (auch on/off) | /api/safe/toggle |
| Sound (X) | {"cmd":"sound","value":"toggle"} | /api/sound/toggle |
| Frei/Bilder: Wand ein-/ausblenden | {"cmd":"custom","value":"1:in"} … "3:out" | /api/custom/1:in |
| Balkenwert setzen (Preset, Kür) | {"cmd":"bar","value":"2:flip:87"} (Wand:Gerät:%) | /api/bar/2:flip:87 |
Szenen gehen auch per Nummer 1–7 in Button-Reihenfolge ("6" = Match Bar) und über Aliasse wie offer, matchorpass, werwuerde, frei.
Feedback (Buttons zeigen die aktive Szene)
Die Seite meldet jede Änderung als State an alle WS-Clients — egal ob sie per Maus, Hotkey oder Companion passierte:
{"type":"state","scene":"matchbar","safe":false,"sound":true,"sfx":"rise01","stmtIdx":2,"reveals":[true,false,false]}
In Companion (Generic WebSocket): Nachrichten abonnieren, Wert per JSON-Pfad (z. B. $.scene) in eine Variable legen, Feedback „Variable = matchbar" färbt den Button. stmtIdx = aktuelles Statement (1-basiert, 0 = Szene ohne Statements), reveals = Wand 1–3 aufgedeckt.
Capture-Hardware — worauf es ankommt
- Die Karte muss Custom-/PC-Timings + EDID annehmen: Datapath (Vision-Serie) oder Magewell Pro Capture.
- Blackmagic DeckLink kann i. d. R. nur Broadcast-Formate (1080p/2160p …) — für ein 1152-Zeilen-Custom-Signal ungeeignet. Falls nur DeckLink verfügbar: melden, dann baue ich einen UHD-Modus (Wände in ein 3840×2160p50-Signal gepackt, Resolume setzt zurück).
- Billige USB-HDMI-Grabber (max. 1920×1080) passen die 1152 Zeilen nicht — ungeeignet.
Checkliste vor Ort
- Windows-Skalierung 100 % auf den LED-Ausgängen (sonst rendert Chrome nicht 1:1 → unscharf)
- Chrome-Zoom 100 % (Strg+0)
- Ausgänge laufen wirklich @ 60 Hz (Browser rendert vsynced → saubere 60 fps)
- G: Nähte exakt bei 1536 / 3072 auf dem LED?
- Energieoptionen: Bildschirm nie aus, kein Standby/Screensaver
- Sound: ein Weg reicht — HDMI-Audio eines Outputs mit in die Capture (dann dort
mute weglassen) oder lokal vom Control-Fenster
- Fallback-Clips (4608×1152 @ 50) in Resolume bereit
- Vorbereitete Inhalte per „⬆ Laden" auf dem Playback-Rechner eingespielt (Export „⬇ Sichern" vom Vorbereitungs-Rechner)
- Companion: Relay läuft (Doppelklick
companion/start_relay.…), Firewall-Freigabe erteilt
- Control zeigt „· Companion verbunden" · Buttons durchgetestet (Log:
http://localhost:8899)
Offene Punkte
- Fonts: Samsung SS Head/Body lokal in
fonts/ — beim Verschieben der HTML den Ordner mitnehmen.
- Farben: Pink
#EFC2E1 (B8 / Flip8) · Violet #564C5C (Q8 / Fold8) · Lavender #BCB7CA (H8 / Fold8 Ultra); MATCH (grün) / PASS (violett) / Gold sind funktionale Akzente.
- Wand-Hintergründe links→rechts: 1. H8 (Lavender) · 2. Q8 (Violet) · 3. B8 (Pink).
- Auflösung & Split: wird mit der finalen Hardware festgelegt (1 Signal 4608 / runterskaliert / 3× pro Wand via
crop).