# TeamsISO **Per-Participant NDI ISO Controller for Microsoft Teams.** TeamsISO sits between Microsoft Teams' raw NDI broadcast output and a live-production environment. It receives each participant's NDI stream, normalizes framerate / resolution / aspect / audio per a configured target, and re-emits clean, individually-addressable NDI sources for ingestion into a switcher (vMix, OBS, Ross, hardware capture). ## What it does - **Discovers participants** as Teams broadcasts each one over NDI, surfacing the operator-friendly display name (handles current "MS Teams - Name" format and the legacy "(Teams) Name" format). - **Normalizes feeds** to a consistent framerate, resolution, aspect mode, and audio routing — so the downstream switcher gets predictable inputs regardless of what each participant's webcam is doing. - **Routes per-participant** as separate NDI sources with a configurable output-name template (`TEAMSISO_{name}`, `{guid}`, `{machine}`, `{timestamp}` tokens). - **Records each ISO to disk** simultaneously — raw BGRA + sidecar manifest.json + ffmpeg convert.cmd — so post-production gets a clean per-guest archive. - **Embeds Teams orchestration**: launch and stop Teams from the rail, hide Teams' UI windows during a show, drive in-call controls (mute, camera, share, leave, raise hand) via UIAutomation. - **Operator presets** save the current per-participant ISO assignment and custom output names, applicable on next launch automatically. - **Live preview thumbnails** per participant in the participants table, plus pop-out floating preview windows (right-click → Open preview…) for multi-monitor monitoring. - **External control surface** — REST + WebSocket on `127.0.0.1:9755` and OSC on UDP `127.0.0.1:9000` for Bitfocus Companion / Stream Deck / TouchOSC integration. Self-contained HTML control panel at [`/ui`](docs/CONTROL-SURFACE.md) for phone-as-controller. - **Crash diagnostics** wired to a rolling daily Serilog file sink under `%LOCALAPPDATA%\TeamsISO\Logs\`. - **Update check** against `forge.wilddragon.net`'s release API — manual or silent on launch (throttled to 24h). - **Diagnostic bundle export** zips logs + config + presets for bug reports. ## Status Pre-1.0. The May 2026 batch is feature-complete; v1.0 cut is gated on code-signing the MSI and a smoke pass against a real Teams meeting. See `CHANGELOG.md` for the [Unreleased] entry. A ground-up GUI redesign is in flight on `main` (see `docs/superpowers/plans/2026-05-12-winui3-migration.md`). The WPF host (`src/TeamsISO.App/`) remains the shipping build; a parallel WinUI 3 host (`src/TeamsISO.App.WinUI/`) is scaffolded with the redesigned MainWindow, theme system (dark + light), and secondary surfaces. Activation of the unpackaged WinUI 3 .exe is the current blocker — diagnostics in the migration plan's Phase 3. ## Build Requires .NET 8 SDK on Windows. The repo has two hosts: - `src/TeamsISO.App` — WPF, `net8.0-windows`, current shipping build - `src/TeamsISO.App.WinUI` — WinUI 3, `net8.0-windows10.0.19041.0`, in-flight Both build together from the solution filter: dotnet restore TeamsISO.Windows.slnf dotnet build TeamsISO.Windows.slnf -c Release dotnet test TeamsISO.Windows.slnf --filter "Category!=ndi&requires!=ndi" The shipped helper scripts in the repo root automate this: pwsh -File .\build-and-test.ps1 pwsh -File .\commit-and-push.ps1 ## Documentation - [Control surface API](docs/CONTROL-SURFACE.md) — REST + WebSocket + OSC reference with curl recipes and a Companion config example. - [Releasing](docs/RELEASING.md) — tag-push workflow, MSI signing path. - [Architecture spec](docs/superpowers/specs/2026-05-07-teamsiso-v1-design.md) — design overview. - [Embedded Teams orchestration spec](docs/superpowers/specs/2026-05-08-embedded-teams-orchestration.md) — Phase E roadmap. - [Redesign brief](PRODUCT.md) + [design system](DESIGN.md) — token-level spec for the in-flight WinUI 3 redesign. - [WinUI 3 migration plan](docs/superpowers/plans/2026-05-12-winui3-migration.md) — nine-phase plan covering scaffold through retiring the WPF host. - [Interactive redesign preview](docs/preview/redesigned-mainwindow.html) — open in any browser to see and toggle the redesigned MainWindow before the WinUI 3 binary lands. ## Keyboard shortcuts | Key | Action | | --- | --- | | `F1` | Open help / cheat sheet | | `Ctrl + M` | Drop a timestamped marker into every active recording | | `Ctrl + Shift + S` | Stop every running ISO (emergency) | | `Ctrl + R` | Refresh NDI discovery (rebuild finder) | ## File locations | Path | Contents | | --- | --- | | `%APPDATA%\TeamsISO\config.json` | Engine settings (framerate, NDI groups, etc.) | | `%LOCALAPPDATA%\TeamsISO\presets.json` | Saved operator presets + auto-apply preference | | `%LOCALAPPDATA%\TeamsISO\Logs\` | Rolling daily diagnostic logs | | `%LOCALAPPDATA%\TeamsISO\Notes\` | Per-day show-notes markdown files | | `%USERPROFILE%\Videos\TeamsISO\\` | Default recording output | | `%APPDATA%\NDI\ndi-config.v1.json` | NDI Access Manager group routing | ## License Proprietary, © Wild Dragon LLC 2026.