No description
  • HTML 74%
  • C# 15.1%
  • C++ 8.1%
  • Python 0.9%
  • Rust 0.8%
  • Other 0.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-05-19 07:36:00 +01:00
audio_field Keep active probes on live sources 2026-05-19 02:10:08 +01:00
calibration/targets Add spatial calibration research and harness 2026-05-18 13:47:27 +01:00
config Define Perfect Machine native reservoir contract 2026-05-19 07:32:38 +01:00
docs Start native reservoir runtime 2026-05-19 07:36:00 +01:00
faust Publish aligned mic field for Faust separation 2026-05-18 22:09:10 +01:00
localcast Move camera capture off fusion hot loop 2026-05-19 02:06:08 +01:00
native Start native reservoir runtime 2026-05-19 07:36:00 +01:00
notes Start native reservoir runtime 2026-05-19 07:36:00 +01:00
research Add OBS Spout render packet bridge 2026-05-18 16:08:14 +01:00
scripts Keep active probes on live sources 2026-05-19 02:10:08 +01:00
state Start native reservoir runtime 2026-05-19 07:36:00 +01:00
tests Define Perfect Machine native reservoir contract 2026-05-19 07:32:38 +01:00
tools Scaffold local OBS streaming bridge 2026-05-18 10:56:01 +01:00
.gitignore Start native reservoir runtime 2026-05-19 07:36:00 +01:00
AGENTS.md Scaffold local OBS streaming bridge 2026-05-18 10:56:01 +01:00
README.md Define Perfect Machine native reservoir contract 2026-05-19 07:32:38 +01:00
requirements-calibration.txt Add active illumination pulse control 2026-05-18 20:34:27 +01:00

LocalCastBridge

LocalCastBridge turns the local streaming rig into synchronized OBS-facing program output. The old SRT bridge is compatibility scaffolding; the target machine is Aquarium GPU fusion plus Faust DSP over one five-second reservoir.

Start with docs/perfect-machine.md for the live architecture.

V1 does not fork OBS. OBS already accepts SRT Media Sources, and FFmpeg can capture Windows desktop/audio while encoding video with h264_nvenc. The sane first machine is:

flowchart LR
    A["Husband's PC"] --> B["FFmpeg capture scripts"]
    B --> C["NVENC H.264 video over SRT"]
    B --> D["Opus audio source 1 over SRT"]
    B --> E["Opus audio source 2 over SRT"]
    C --> F["OBS Media Source: video"]
    D --> G["OBS Media Source: audio source 1"]
    E --> H["OBS Media Source: audio source 2"]

The video stream is encoded on the sender. Audio sources are separate endpoints so OBS can mix, mute, filter, and monitor them independently.

Audio Field

The expanded rig has a separate audio-field spine for six microphones and two calibration speakers. Start with docs/audio-field.md and config/audio-field.example.json.

That path is stricter than the OBS endpoint path: microphones feeding the Ambisonic field need one synchronized capture device, explicit geometry, and calibration before they become an AmbiX FOA bus. Separate USB microphones can still be investigated, but they do not get waved through as a coherent field just because the JSON is feeling brave.

Current Status

This repo is the first coherent scaffold: architecture docs, persistence machinery, and Windows scripts for device discovery, config validation, and FFmpeg command generation. It is ready for a real two-PC smoke test once FFmpeg with SRT/NVENC support is installed on the sender.

Quick Start

  1. Install OBS on the receiver.
  2. Install FFmpeg on the sender, with srt protocol and h264_nvenc encoder enabled.
  3. Copy config/localcast.example.json to config/localcast.json.
  4. On the sender, list capture devices:
.\scripts\sender-discover.ps1
  1. Edit config/localcast.json with the receiver IP and chosen DirectShow audio device names.
  2. Dry-run the generated FFmpeg commands:
.\scripts\sender-start.ps1 -Config .\config\localcast.json -DryRun
  1. Start the sender:
.\scripts\sender-start.ps1 -Config .\config\localcast.json
  1. In OBS on the receiver, add one Media Source per URL from docs/obs-receiver-setup.md.

Why SRT Media Sources First

OBS documents SRT playback through VLC Source or Media Source, and Media Source can listen on srt://0.0.0.0:PORT?mode=listener&timeout=5000000 with mpegts input format. FFmpeg also documents SRT protocol support and Windows capture devices through dshow/gdigrab. That gives us a standard, inspectable path before native OBS code starts making expensive promises.

Repo State

Rehydrate with the bundled Python from this Codex workstation, or any normal Python 3:

& 'C:\Users\Meta\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' .\tools\localcast_state.py status
Get-Content .\state\map.yaml
Get-Content .\notes\fresh-workspace-handoff.md
Get-Content .\notes\current-system-map.md