Per-Participant NDI ISO Controller for Microsoft Teams. Receives Teams NDI streams, normalizes framerate/resolution, and re-emits clean ISO outputs for live production switchers (vMix, OBS, Ross). Wild Dragon LLC.
Find a file
Zac Gaetano 778e5163e9
Some checks failed
CI / build-and-test (push) Failing after 28s
feat(engine): surface Teams Active Speaker as a routable participant
ParticipantTracker now accepts NdiSourceKind.ActiveSpeaker (Teams' auto-mix output — legacy 'MACHINE (Teams)' or current 'MACHINE (MS Teams - Active Speaker)') and surfaces it as a synthetic row in the participant list with the display name 'Active Speaker'. The operator can route it to its own normalized ISO via the same toggle every other participant uses, so vMix / OBS / Ross can subscribe to a single clean active-speaker feed.

Stable Id: derived from SHA1 of 'auto-mix:<machine>' formatted as a v5 GUID, so a discovery cycle that re-adds the source doesn't duplicate the row and the operator's ISO assignment stays bound across the rename window.

Tests: 78/78 unit (was 76) — added ParticipantTrackerTests.ActiveSpeaker_AppearsAsSyntheticAutoMixParticipant + ActiveSpeaker_ReAddOnSameMachine_PreservesId. Existing NonParticipantSources_AreIgnored still passes (only ActiveSpeaker is opted in; ScreenShare and Audio are still ignored).
2026-05-09 09:25:45 -04:00
.forgejo/workflows ci(forgejo): release workflow on tag push -> MSI artifact + release asset 2026-05-08 00:48:57 -04:00
docs feat(ui): Launch Teams rail button + spec for embedded-Teams roadmap 2026-05-08 01:05:26 -04:00
installer feat: app icon, FPS, drops counter, --version, About dialog, Stop Teams toggle 2026-05-08 13:50:19 -04:00
src feat(engine): surface Teams Active Speaker as a routable participant 2026-05-09 09:25:45 -04:00
.editorconfig chore: scaffold repo conventions and global build props 2026-05-07 15:07:53 +00:00
.gitignore chore: scaffold repo conventions and global build props 2026-05-07 15:07:53 +00:00
coverlet.runsettings ci: enforce 80% line coverage gate on TeamsISO.Engine 2026-05-07 15:16:11 +00:00
Directory.Build.props chore: scaffold repo conventions and global build props 2026-05-07 15:07:53 +00:00
README.md chore: scaffold repo conventions and global build props 2026-05-07 15:07:53 +00:00
TeamsISO.Linux.slnf feat(console): add TeamsISO.Console headless smoke runner 2026-05-07 15:37:44 +00:00
TeamsISO.sln fix(build): use forward-slash paths in TeamsISO.sln so Windows .slnf resolves 2026-05-07 15:14:42 -04:00
TeamsISO.Windows.slnf feat(ui): wire DI bootstrap in App.xaml.cs and add Windows solution filter 2026-05-07 15:41:58 +00:00

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 and resolution per a configured target, and re-emits clean, individually-addressable NDI sources for ingestion into a switcher (vMix, OBS, Ross, hardware capture).

Status

Pre-1.0. See docs/superpowers/specs/ for the active spec and docs/superpowers/plans/ for in-flight implementation plans.

Build

Requires .NET 8 SDK.

dotnet build
dotnet test

License

Proprietary, © Wild Dragon LLC 2026.