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>
126 lines
5.8 KiB
Markdown
126 lines
5.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to Dragon-ISO are documented here. The format follows
|
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project
|
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [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 own `http://+: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-input` group while Dragon-ISO re-emits on `Public`.
|
|
- **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.cmd` script for post-production conversion to
|
|
H.264 MKV. Recording is opt-in globally and per-participant.
|
|
|
|
### 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 to
|
|
`Dragon-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:9755` for Bitfocus Companion / Stream
|
|
Deck / custom controllers.
|
|
- OSC on UDP `127.0.0.1:9000` for 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.
|
|
|
|
[1.2.0-beta.1]: https://forge.wilddragon.net/WildDragonLLC/dragon-iso/releases/tag/v1.2.0-beta.1
|
|
[1.1.0]: https://forge.wilddragon.net/WildDragonLLC/dragon-iso/releases/tag/v1.1.0
|
|
[1.0.0]: https://forge.wilddragon.net/WildDragonLLC/dragon-iso/releases/tag/v1.0.0
|