The control surface uses HttpListener (http.sys), which denies prefix registration to standard users -- on every non-Administrator install the REST/WebSocket surface died at startup with Access is denied (5), taking the /ui phone panel and Companion integration with it. The MSI runs elevated, so it now reserves http://127.0.0.1:9755/ on install and deletes the reservation on uninstall. Deliberately NOT the strong wildcard: verified empirically that an idle http://+:9755/ RESERVATION makes http.sys answer 503 for every request to the loopback-bound listener without the request ever reaching the app. The in-app failure guidance suggested exactly that reservation; corrected to recommend the bound prefix and warn about the stale-wildcard trap. Verified on a clean install: urlacl present, GET / and /ui and /participants all 200 as a standard user; reservation removed on uninstall. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
5.8 KiB
5.8 KiB
Changelog
All notable changes to Dragon-ISO are documented here. The format follows Keep a Changelog and this project adheres to Semantic Versioning.
1.2.0-beta.1 — 2026-07-06
Beta pre-release for the framerate and reliability work since 1.1.0.
Engine
- Exact rational framerate end-to-end — the configured target framerate now flows from settings to every NDI sender as an exact rational (e.g. 59.94 = 60000/1001), and each outgoing video frame is stamped with it. Previously every output advertised 59.94 regardless of configuration; advertising the wrong rational causes drift and A/V desync downstream.
- Audio FourCC fix — corrected the PCMs16 FourCC constant; audio FourCCs are now pinned by tests to their ASCII packing.
- Finder rebuild hardening — a failed NDI finder rebuild no longer leaves a disposed finder behind (the self-heal path can retry cleanly).
- Scaler zero-dimension guard — a source frame with a zero dimension is dropped instead of crashing the pipeline.
Installer
- MSI ProductVersion now tracks the build version — it was hardcoded to 1.0.0.0, so in-place upgrades (MajorUpgrade) never saw a newer version. Upgrading from an earlier install may require a manual uninstall once.
- Control surface works out of the box for standard users — the installer
now reserves the http.sys URL namespace for
http://127.0.0.1:9755/(removed again on uninstall). Previously the REST/WebSocket control surface failed with "Access is denied" on every non-Administrator launch. Note for LAN-reachable mode: it still needs its ownhttp://+:9755/reservation (the app logs the exact command), and that reservation must be deleted when reverting to loopback-only — while idle it makes http.sys 503 every request. - CAB embedded in the MSI — the installer is a single self-contained file again; distributing only the MSI no longer fails with error 1302.
1.1.0 — 2026-05-31
Rebrand release: TeamsISO becomes Dragon-ISO across source paths, installer metadata, and documentation. No functional engine changes.
1.0.0 — 2026-05-17
First general release. Windows-only, .NET 8 WPF, NDI 6.
Engine
- Participant discovery over NDI with name cleanup — strips the "MS Teams - " / "(Teams) " prefixes and surfaces the operator-friendly display name.
- Per-participant ISO outputs with normalized framerate, resolution, aspect mode, and audio routing. Each ISO is an individually-addressable NDI source.
- NDI Groups support — discovery and sender. One-click "Apply
transcoder topology" pins Teams' raw broadcasts to a private
Dragon-ISO-inputgroup while Dragon-ISO re-emits onPublic. - Self-healing finder — if the NDI runtime stalls (zero discovered sources past a startup grace period, or sources go from present to empty and stay that way), the engine rebuilds the finder automatically.
- Real-time recording — per-output raw BGRA stream +
manifest.json- an FFmpeg
convert.cmdscript for post-production conversion to H.264 MKV. Recording is opt-in globally and per-participant.
- an FFmpeg
UI — "Studio Terminal"
- Dark and light themes with a runtime swap and a system-follow mode. The Wild Dragon mark, the participants-grid watermark, and every accent brush respond to the active theme.
- Header: brand mark, theme toggle, settings gear.
- Transport strip: session timer, participant count, live ISO count, control-surface URL — at-a-glance status.
- Participants table: 24px state LED, 106px live thumbnail preview, name + caption, 5-bar audio meter, inline-editable output name, CFG button (per-row override editor), ISO enable pill.
- Settings drawer — slide-over from the right with OUTPUT / NETWORK / APP tabs.
- Ctrl+K command palette — fuzzy search across Quick / Teams / Presets / Output / Network / App categories.
- Live preview thumbnails in the participants table; right-click → Open preview… spawns a non-modal floating window suitable for a secondary monitor.
Output name template
- New default: the speaker's display name (
{name}). Per-participant overrides are inline-editable in the table. Empty-name fallback toDragon-ISO_{guid}keeps the NDI sender uniquely identifiable while a participant's display name resolves upstream. - Available tokens:
{name},{guid},{machine},{timestamp}.
Operator presets
- Save current per-participant ISO assignments + custom output names to
%LOCALAPPDATA%\Dragon-ISO\presets.json. Optional auto-apply on next launch.
Teams orchestration
- Launch / stop Teams from the app.
- Hide Teams' UI windows during a show.
- Drive in-call controls (mute, camera, share, leave, raise hand) via UIAutomation.
External control surface
- REST + WebSocket on
127.0.0.1:9755for Bitfocus Companion / Stream Deck / custom controllers. - OSC on UDP
127.0.0.1:9000for TouchOSC. - Self-contained HTML control panel at
/ui— open from any phone on the LAN.
Diagnostics & installer
- Rolling daily Serilog logs under
%LOCALAPPDATA%\Dragon-ISO\logs\. - Diagnostic bundle export — zips logs + config + presets for bug reports.
- Forgejo-backed update check (manual or silent-on-launch, throttled to 24h).
- WiX MSI installer with proper Add/Remove Programs metadata, Start Menu
- Desktop shortcuts, and in-place upgrade.