Mimir/docs/eve-program-output.md
2026-05-25 22:45:46 +01:00

3 KiB

EVE Program Output

Authority Map

  • Owner: Fensalir owns the visible D3D12 program pixels.
  • Inputs: Fensalir reads the current AquariumFrame, render plan, GPU resources, and overlay state.
  • Outputs: a named shared D3D12 B8G8R8A8_UNorm texture containing the completed backbuffer for the current frame.
  • Derived state: Mimir publication profiles describe the stream contract; they do not render pixels. EVE receives decoded pixels and composites them.
  • Forbidden writers: WebKit, DOM layout, browser dashboards, OBS capture, and desktop/window capture do not own this path.
  • Shared paths: local display and EVE streaming both use the same completed Fensalir backbuffer copy.
  • Deletion line: diagnostic Sunshine/Moonlight or desktop-duplication probes may prove network/decode budget, but they are not production authority.

Current Mechanism

Set these before launching the Mimir app:

$env:FENSALIR_PROGRAM_OUTPUT_D3D12 = "1"
$env:FENSALIR_PROGRAM_OUTPUT_NAME = "Global\MimirFensalirProgramTexture"
dotnet run --project .\src\Mimir.App\Mimir.App.csproj

Fensalir creates a shareable D3D12 texture with that name and copies the finished backbuffer into it during the present pass. Mimir.EveRelay opens that named texture, reads the completed program frame, feeds a low-latency H.264 encoder, and sends complete Annex-B access units to EveCanvas over the existing /stream WebSocket. EveCanvas treats JPEG frames as the old VoidBot dashboard fallback only; Mimir dashboard streaming is h264-annexb and displays through a native AVSampleBufferDisplayLayer so the iPad owns hardware decode/composite.

scripts/start-eve-dashboard-stream.ps1 starts the Mimir/Fensalir app with the shared-texture output enabled, starts the H.264 relay, verifies the eve SSH target, opens a reverse SSH tunnel from Eve's 127.0.0.1:8792 back to the local relay when direct inbound TCP is blocked, and launches EveCanvas:

powershell -ExecutionPolicy Bypass -File .\scripts\start-eve-dashboard-stream.ps1

The relay defaults to h264_nvenc. Use -Encoder libx264 only as a diagnostic fallback when no NVENC-capable FFmpeg is installed.

EveCanvas tries ws://127.0.0.1:8792/stream first, then falls back to ws://192.168.1.66:8792/stream. The localhost path is not JPEG tunneling; it is the same H.264 Annex-B stream carried through SSH port forwarding so a Windows firewall rule cannot silently turn the dashboard into a wall.

Receiver Contract

EVE owns:

  • network receive;
  • hardware decode of H.264 access units;
  • texture upload/import;
  • final fullscreen composite;
  • touch/Pencil/sensor uplink later.

EVE does not own:

  • dashboard DOM;
  • Chromium/WebKit compatibility;
  • layout parity;
  • Mimir timing authority;
  • OBS composition authority.

Smoke

dotnet run --project .\src\Mimir.BufferSmoke\Mimir.BufferSmoke.csproj -- --eve-program-output-contract-smoke
dotnet build .\src\Mimir.EveRelay\Mimir.EveRelay.csproj --no-restore --disable-build-servers