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-22 13:51:49 +01:00
.voidbot Record Mimir voidbot state 2026-05-21 23:00:04 +01:00
assets/branding Carry Mimir branding through repo 2026-05-21 10:27:09 +01:00
calibration/targets Add spatial calibration research and harness 2026-05-18 13:47:27 +01:00
config Add loopback chirplet audio alignment 2026-05-22 11:40:56 +01:00
docs Decode chirplet timeline symbols 2026-05-22 13:51:49 +01:00
faust Carry Mimir branding through repo 2026-05-21 10:27:09 +01:00
native Port audio sync delay measurement 2026-05-22 01:22:36 +01:00
notes Decode chirplet timeline symbols 2026-05-22 13:51:49 +01:00
research Restore research archive as reference memory 2026-05-21 18:50:11 +01:00
scripts Remove script-era Python stack 2026-05-21 18:48:47 +01:00
src Decode chirplet timeline symbols 2026-05-22 13:51:49 +01:00
state Decode chirplet timeline symbols 2026-05-22 13:51:49 +01:00
.gitignore Route probe frame events into runtime buffers 2026-05-22 00:37:24 +01:00
AGENTS.md Remove script-era Python stack 2026-05-21 18:48:47 +01:00
Mimir.png Give Mimir mythic Face memory 2026-05-19 14:24:06 +01:00
Mimir.slnx Prove probe feeds reach runtime buffers 2026-05-22 00:52:43 +01:00
NuGet.config Add Mimir Aquarium app scaffold 2026-05-21 13:17:02 +01:00
README.md Remove script-era Python stack 2026-05-21 18:48:47 +01:00

Mimir

Mimir turns a roomful of local cameras, microphones, speakers, and timing signals into one realtime coherent volumetric field.

The public job is simple: make the physical room available as a synchronized OBS-facing program surface. The actual machine stays disciplined. Mimir owns configuration, calibration, launch, status, and typed contracts; Aquarium owns GPU fusion and Spout publication; Faust owns hot audio DSP; OBS owns broadcast composition. The SRT bridge is compatibility scaffolding over the same boring truth: stable endpoints beat theatrical plumbing.

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

Branding

Working display name: Mimir.

Short pitch:

Local sensors, coherent field.

Icon exploration lives in assets/branding/. The current contact sheet pairs four pixel-art Imagegen outputs with the prompts used to make them:

Mimir avatar

Mimir icon exploration

Mimir is also the repo Face: a persistent agent identity that uses the VoidBot layer for communication and heartbeats. Its birth memory, jurisdiction, voice, and heartbeat contract live in docs/mimir-face.md; its VoidBot-facing identity and typed Face state live under .voidbot/voice/ and .voidbot/state/.

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 first LAN bridge is:

flowchart LR
    A["sensor / sender 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 now has a C# app/runtime surface plus the first native reservoir crate. src/Mimir.Runtime owns the rolling synchronization buffers and direct driver ingest seams; src/Mimir.App hosts the Aquarium Engine window/render bridge. The Windows scripts remain a plain LAN bridge into OBS while the native field machine grows teeth.

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.
  2. Before expanding the receiver path, run the bounded OBS smoke ledger in docs/obs-v1-smoke-test.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 map, handoff, and git. No helper runtime is required:

git status --short --branch
git log --oneline -5
Get-Content .\state\map.yaml
Get-Content .\notes\fresh-workspace-handoff.md
Get-Content .\notes\current-system-map.md
Get-Content .\state\evidence.jsonl -Tail 8