Lumi/companion
2026-07-22 21:41:03 +02:00
..
docs Add experimental Companion and OBS bridge boundaries 2026-07-22 11:02:04 +02:00
installer Deduplicate OBS source state traffic 2026-07-22 21:41:03 +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 Deduplicate OBS source state traffic 2026-07-22 21:41:03 +02:00
src Deduplicate OBS source state traffic 2026-07-22 21:41:03 +02:00
Lumi.Companion.sln Build Lumi Companion shell and whisper worker 2026-07-22 11:39:05 +02:00
README.md Fix installed OBS integration discovery 2026-07-22 21:18:19 +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 contains the per-user Windows setup executable and one bootstrap file. Setup installs Companion under %LocalAppData%\Programs\Lumi Companion, imports the adjacent package when this Windows user is not already paired, and launches the installed app. Existing portable installs retain the same current-user DPAPI credential instead of creating a duplicate device. Companion exchanges a newly imported token once 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 installed app and bundled components, then restart Companion. Pairing credentials and settings remain in the per-user data directory. Experimental.7 adds the durable per-user installer; existing portable users install it once, after which updates stay in the stable install directory. Experimental.8 fixes packaged OBS integration discovery and exposes a standalone payload diagnostic. Code signing, rollback policy, and target-machine OBS/Twitch acceptance are still required.

The Admin Download Companion action distributes a private ZIP containing a checksum-pinned Windows x64 installer plus the one-time pairing package. It is intentionally marked experimental and is not code-signed yet.