Lumi/companion
2026-07-22 20:35:45 +02:00
..
docs Add experimental Companion and OBS bridge boundaries 2026-07-22 11:02:04 +02:00
native/obs-bridge Add transcription accuracy and latency tests 2026-07-22 18:27:05 +02:00
plugins/Lumi.Companion.Transcription Add transcription accuracy and latency tests 2026-07-22 18:27:05 +02:00
scripts Make transcription readiness reusable 2026-07-22 20:35:45 +02:00
src Make transcription readiness reusable 2026-07-22 20:35:45 +02:00
Lumi.Companion.sln Build Lumi Companion shell and whisper worker 2026-07-22 11:39:05 +02:00
README.md Add Companion updates and managed OBS bridge 2026-07-22 15:47:56 +02:00

Lumi Companion (experimental transcription milestone)

This directory is the single Lumi Companion product boundary. The current milestone supplies the versioned protocol client, Windows credential protection, bounded outbound transport, plugin-process supervision, same-user OBS bridge IPC, native selected-source capture, and an Avalonia tray shell. The shell is single-instance, closes to the tray, confirms quit during OBS streaming/recording, supports explicit pairing, and reports real setup/test blockers without presenting simulated success.

Build prerequisites: the current .NET SDK with the .NET 8 targeting pack on Windows x64. The app targets .NET 8; .NET SDK 10 is recommended for Avalonia 12 source-generator compatibility. The native bridge additionally requires CMake, Visual Studio C++ tools, and the OBS 31+ SDK.

The app accepts a .lumi-pairing.json bootstrap package. A paired ZIP downloaded from Lumi includes one beside the executable; the app detects it automatically, exchanges the embedded token once, stores the returned device credential with Windows DPAPI, and removes the pairing file after success. Do not commit bootstrap packages, credentials, generated installers, build output, or logs.

The companion never performs ASR in this MVP. Audio is normalized to 16 kHz mono signed 16-bit PCM, held in bounded memory, and sent to the paired Lumi host over TLS WebSockets. HTTP/WS works only for a package generated from the exact matching loopback Lumi origin. The OBS bridge talks only to the companion over a same-user named pipe.

Build all managed projects from the repository root:

dotnet build companion/Lumi.Companion.sln -p:EnableWindowsTargeting=true

Build the pinned OBS 31.1.1 bridge and a self-contained Windows package from PowerShell:

companion/scripts/publish-companion.ps1

This verifies both official OBS archives by SHA-256, builds the native module with Visual Studio 2022/CMake, and places the bridge beside the published app as a managed component. In Companion, Install/Repair requests Windows administrator approval only to copy that verified component into OBS's shared ProgramData plugin directory. OBS must be closed; Companion refuses plugin maintenance while obs64.exe is running.

Experimental.3 checks for updates after connecting and every six hours. Updates remain user-approved, are checksum-verified, refuse to run while OBS is streaming or recording, replace the app and bundled components, then restart Companion. Pairing credentials and settings remain in the per-user data directory. Experimental.2 requires one final manual download to bootstrap this updater. A signed installer, rollback policy, and target-machine OBS/Twitch acceptance run are still required.

The Admin Download Companion action distributes a checksum-pinned, self-contained Windows x64 ZIP. It is intentionally marked experimental and is not code-signed yet.