IPC Channels
Bridge: window.lightbridge (see preload.ts for full typed API).
Menu → Renderer (one-way send)
menu: prefix, sent from application menu to renderer via webContents.send().
Show: menu:new-show, menu:open-show, menu:save-show, menu:save-show-as
Edit: menu:undo, menu:redo
Audio: menu:audio-source, menu:audio-refresh-devices
MIDI: menu:midi-pick-device, menu:midi-toggle-clock-in, menu:midi-toggle-clock-out, menu:midi-set-clock-out-device, menu:midi-toggle-pickup, menu:midi-refresh, menu:midi-panic, menu:midi-test
View: menu:toggle-stats, menu:toggle-panel
Layout: menu:save-layout, menu:load-layout, menu:reset-layout
Defaults: menu:save-custom-default, menu:reset-custom-default, menu:reset-all-custom-defaults, menu:export-custom-defaults
Renderer → Main (invoke, promise-based)
Show files: show:save, show:load, show:ensure-sessions-dir, show:list-sessions, show:delete-session, show:request-save-dialog
Presets: presets:load, presets:save, modPresets:load, modPresets:save
Custom defaults: customDefaults:load, customDefaults:save
Source folders: sourceFolders:load, sourceFolders:save
Thumbnails: thumbnails:save, thumbnails:load, thumbnails:list, thumbnails:bake
Media: media:pick-image, media:pick-video
Preferences: prefs:get-audio-source, prefs:get-panel-sizes, prefs:set-panel-sizes, prefs:get-panel-layout, prefs:set-panel-layout
Layout: layout:save, layout:load, layout:list, layout:delete
Panels: panel:create, panel:get-drag-data
Window: window:get-bounds
Ableton Link
Renderer → Main (one-way send): link:enable, link:disable, link:set-bpm, link:resync
Renderer → Main (invoke): link:available
Main → Renderer (one-way send): link:state (bpm, beat, phase, numPeers at ~60Hz), link:peers (numPeers on change)
Renderer → Main (one-way send)
open-output-window, close-output-window, audio-devices-list, audio-inputs-list, midi-menu-state, set-window-title, add-recent-file, show:save-sync
Panels: panel:close, panel:ready, panel:state-sync, panel:states-update, panel:dispatch
Main → Renderer (one-way send, panel system)
panel:dock-zone, panel:dock, panel:request-sync, panel:drag-active, panel:drag-end, panel:dispatch
Main → Renderer (one-way send, render quality)
oxide:governor-state— payload{ governorLevel, userSupersample, effectiveSupersample, effectivePreviewSupersample }. Pushed when the adaptive supersample governor’s state changes (tier switch or governor step; delta-gated in main, so it is near-silent in steady state). Drives the quality dropdown’s “reduced” badge. Replaces the deadoutput:perf-dataconsumer (its sender was removed with the Three.js output server).
Renderer incident recorder (dev-only)
Diagnostic recorder for renderer crashes / hangs / black-frame incidents. All three channels are registered only when is.dev is true; production builds never wire them up.
Renderer → Main (invoke):
renderer-incident:save— payloadmetadata?: unknown(any JSON-serializable value attached to the snapshot). Captures a status sample and writes a JSON snapshot underuserData/renderer-incidents/. Resolves to the absolute snapshot path.renderer-incident:event— payload{ source?: string; type?: string; level?: 'info' | 'warn' | 'error'; detail?: unknown }. Records an event from the renderer (e.g., WebGL context lost, unhandled rejection) without mirroring back overrenderer-health:event. No return value.
Main → Renderer (one-way send):
renderer-health:event— payload{ source, type, level, detail? }. Pushes recorder events to the renderer UI for live display in the dev health panel.
Related
- Output Visuals — how the main window feeds the output window at 60 Hz.