Pult: Handy als Stream Deck mit Soundboard und Szenenwechsel
Paket bauen und veroeffentlichen / paket (push) Failing after 1m21s

- /pult als installierbare Web-App (Manifest, Service Worker, Symbole)
- Soundboard: Sounds vom Handy hochladen, bearbeiten, im Stream spielen
  ueber die neue Browser-Source /sounds
- Szenen, Clip und Stummschalter: der Stream-PC waehlt sich mit eigenem
  Schluessel beim Hub ein (fern:verbinden), Befehle warten auf OBS
- Browser-Sources melden, welche Seite sie sind

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZeasyAlexandClaude Opus 5.5 committed 2026-10-26 11:51:48 +01:00
1 parent 70448967f5
commit 8be195d938
29 files changed
+2935 -28

No files matched your search

+10 -3
View File
@@ -11,9 +11,13 @@ import { forever } from '#core/retry.ts';
const log = logger('obs');
/** Ereignisgruppen als Bitmaske. Wir brauchen General, Scenes und Outputs. */
export const SUBSCRIPTIONS = { general: 1, config: 2, scenes: 4, outputs: 64 } as const;
const DEFAULT_SUBS = SUBSCRIPTIONS.general | SUBSCRIPTIONS.scenes | SUBSCRIPTIONS.outputs;
/**
* Ereignisgruppen als Bitmaske. Wir brauchen General, Scenes und Outputs,
* dazu Inputs fuer die Stummschalter auf dem Pult.
*/
export const SUBSCRIPTIONS = { general: 1, config: 2, scenes: 4, inputs: 8, outputs: 64 } as const;
const DEFAULT_SUBS = SUBSCRIPTIONS.general | SUBSCRIPTIONS.scenes |
SUBSCRIPTIONS.inputs | SUBSCRIPTIONS.outputs;
/**
* Antwort auf die Authentifizierungsaufforderung.
@@ -31,6 +35,8 @@ export type ObsEventHandlers = {
onSceneChanged?: (scene: string) => void;
onIdentified?: () => void;
onClosed?: () => void;
/** Jedes Ereignis, auch die oben schon einzeln gemeldeten. */
onEvent?: (type: string, data: Record<string, unknown>) => void;
};
export type ObsClient = {
@@ -105,6 +111,7 @@ export function createObs(
} else if (type === 'CurrentProgramSceneChanged') {
handlers.onSceneChanged?.(String(data['sceneName'] ?? ''));
}
handlers.onEvent?.(type, data);
break;
}
case 7: { // RequestResponse
+8
View File
@@ -59,7 +59,15 @@ export type SecretStore = {
* Ausrollen neu.
*/
sessionKey?: string;
/**
* Mit diesem Schluessel waehlt sich der Stream-PC beim Hub ein und
* nimmt Befehle fuer OBS entgegen. Anders als overlayKey schaltet er
* etwas, steht deshalb nie in einer Adresse.
*/
fernKey?: string;
};
/** Auf dem Stream-PC: wo der Hub steht und womit man sich dort meldet. */
fern?: { url: string; key: string };
bluesky?: { handle: string; appPassword: string };
/** Nur noetig, wenn die Pakete hinter einer Anmeldung liegen. */
update?: { token: string };