Electron-app om PTZ-camerapresets te bedienen naast een Blackmagic ATEM-switcher. Per camera een rij preset-knoppen met een live miniatuur, en de switcher schakelt mee.
src/main/ Electron main process: alle communicatie met apparatuur
atem.ts één verbinding met de switcher, publiceert een kleine snapshot
cameras.ts PTZ-commando's (preset oproepen/opslaan) via HTTP
streamServer.ts lokale websocket voor de RTSP-videostreams
config.ts config in userData/config.json, met validatie
ipc.ts alle IPC-handlers op één plek
src/preload/ contextBridge: het enige raakvlak tussen renderer en main
src/shared/ types en IPC-kanaalnamen die beide kanten gebruiken
src/renderer/ React + Tailwind
De renderer praat niet zelf met het netwerk. Camera-IP's en het ATEM-adres staan
alleen in het main process; de renderer kent camera's enkel via hun id. Daardoor
kan het venster met contextIsolation, sandbox en normale webSecurity draaien.
De enige uitzondering is video: rtsp-relay levert jsmpeg-frames over een
websocket, en die passen niet door IPC. Daarvoor start main een server op de
loopback met een dynamische poort, die de renderer via IPC opvraagt.
pnpm install
pnpm startWijzigingen in src/renderer/ zijn direct zichtbaar (HMR, zonder herladen).
Wijzigingen in src/main/ of src/preload/ worden herbouwd en herstarten het
Electron-proces automatisch. Typen controleren: pnpm typecheck.
pnpm heeft hier twee instellingen nodig (staan in pnpm-workspace.yaml):
nodeLinker: hoisted, omdat Forge node_modules kopieert en niet met symlinks
overweg kan, en een allowBuilds-lijst voor de pakketten die bij installatie een
binary ophalen (Electron zelf, en de ffmpeg-binary voor de streams).
pnpm make # huidig platform
pnpm make:mac # macOS, arm64 + x64 (DMG + zip)
pnpm make:mac-arm # alleen Apple Silicon
pnpm make:win # Windows (Squirrel-installer + zip)Het resultaat staat in out/. Een push naar main verhoogt de patch-versie en
publiceert via GitHub Actions een release voor Windows en macOS.
Twee dingen om te weten over de macOS-build: hij is niet gesigneerd, dus Gatekeeper
waarschuwt bij de eerste start (openen via rechtermuisknop → Openen). En
update-electron-app leunt op Squirrel.Mac, dat een gesigneerde app vereist —
automatische updates werken op macOS dus pas met een Apple Developer-certificaat.
Op Windows werkt de auto-update wel.
Weergave-instellingen (aantal presets, miniatuurgrootte, live-vergrendeling)
staan per computer in localStorage. Camera's, het ATEM-adres en het RTSP-pad zijn
in de app aan te passen onder "Camera's en switcher" en worden opgeslagen in
config.json in de userData-map van de app.