Skip to content

OBS quick launch (EB / EB + VOD) from the System tab#36

Merged
Soulhackzlol merged 4 commits into
mainfrom
feat/system-obs-quick-launch
Jul 5, 2026
Merged

OBS quick launch (EB / EB + VOD) from the System tab#36
Soulhackzlol merged 4 commits into
mainfrom
feat/system-obs-quick-launch

Conversation

@Soulhackzlol

Copy link
Copy Markdown
Owner

Stacked on #35 - merge order: #33#34#35 → this. GitHub retargets automatically as each base merges.

What

The Enhanced Broadcasting launchers no longer hide inside the Twitch destination editor behind the VOD-audio toggle. System → Behavior → OBS quick launch offers three buttons that work without opening any destination's settings:

  • Launch OBS · Enhanced Broadcasting - starts OBS with --config-url pointed at InstantClone. Session-only; reopening OBS normally streams plain again.
  • Launch OBS · EB + VOD audio track - same, plus it enables VOD audio mode on the enabled Twitch destination and writes OBS's VOD-track unlock flag, reporting each step in the same red-to-green checklist as the form flow.
  • Make a desktop shortcut - the existing VOD+EB cold-start .lnk, now reachable from here.

The one subtle bit

The EB+VOD button persists vod_audio=true on the Twitch destination before touching OBS's flag, and that is required for correctness, not convenience: reconcile_obs_vod_files derives OBS's on-disk VOD flag from the destination set on every destination save. A quick-launch that only wrote the OBS flag would be silently reverted the next time any destination is saved. The pre-step closes that hole and shows up as its own checklist line.

Guard rails

  • Inline warning when no enabled Twitch destination with a stream key exists (OBS still launches, but EB has nothing to engage - the warning says where to fix it).
  • Both launch buttons disable with a reason when OBS isn't found at the standard install path (probe cached per session, warning refreshed on every destination change via loadDestinations).
  • The checklist renderer is extracted and shared with the destination-form flow instead of duplicated.

Verification

  • No backend changes - composes the existing /obs/launch-with-eb, /obs/setup-vod-eb, /shortcut/create-eb, and /destinations endpoints.
  • cargo test --release: 235 passed; fmt clean.
  • Decompressed the embedded index.html.gz and confirmed all new functions and ids survive build.rs minification.

@Soulhackzlol Soulhackzlol added the enhancement New feature or request label Jul 5, 2026
@Soulhackzlol
Soulhackzlol force-pushed the feat/system-obs-quick-launch branch from b052926 to 5a0794b Compare July 5, 2026 10:05
@Soulhackzlol
Soulhackzlol force-pushed the feat/system-obs-quick-launch branch from 5a0794b to 68a83ac Compare July 5, 2026 10:13
The Enhanced Broadcasting launchers only existed inside the Twitch
destination editor, behind the VOD-audio toggle - starting OBS
pre-wired meant opening a destination's settings every time. System ->
Behavior now has an "OBS quick launch" card with:

- Launch OBS - Enhanced Broadcasting (session-only --config-url launch)
- Launch OBS - EB + VOD audio track
- Make a desktop shortcut (the existing VOD+EB cold-start .lnk)

The EB+VOD button does one thing the old flow got for free from the
form: it persists vod_audio=true on the enabled Twitch destination
before writing OBS's flag. That's required for durability, not
cosmetics - reconcile_obs_vod_files derives OBS's on-disk flag from
the destinations on every save, so a launch that skipped the
destination flag would be silently reverted by the next save. Each
step reports into the same red-to-green checklist as the form flow
(renderer extracted and shared).

The card warns inline when no enabled Twitch destination with a key
exists (OBS launches, but EB has nothing to engage) and the buttons
disable with a reason when OBS isn't installed (probe cached per
session, refreshed via loadDestinations so destination changes update
the warning live).

No backend changes - reuses /obs/launch-with-eb, /obs/setup-vod-eb,
/shortcut/create-eb, and /destinations. 235 tests green; verified the
new functions survive build.rs minification in the embedded output.
@Soulhackzlol
Soulhackzlol force-pushed the feat/system-obs-quick-launch branch from 68a83ac to 41b7880 Compare July 5, 2026 10:40
Proven with a simulation: animateNumber() has been a direct-set its
entire life. It only stored per-element state on the animate path, but a
fresh id can never reach that path - the throwaway object it builds
always has `to === target`, so it hits the no-change branch and returns
without seeding numState. The map stays empty forever, every call
rebuilds a fresh matching object, and the number snaps to each value.
This is why my earlier ease/linear/snap tweaks did nothing (dead code on
a function that can't animate) and why the user still saw the arming
"jump" and the disarm instant-zero.

Two fixes:

1. animateNumber now seeds numState on first sight of an id (show the
   value, store state), so subsequent changes reach the animate path.
   The stat readouts ease properly now too - also never animated before.

2. The hero delay figure gets a dedicated critically-damped spring
   (Unity SmoothDamp) on a single persistent rAF that chases the latest
   target. It tracks the buffer fill at smooth, near-constant velocity
   while arming (no jerk from tweening a varying gap over a fixed
   duration) and eases the big jumps - especially the roll-down to 0 on
   cut/disarm - to rest with no overshoot, no snap, no freeze, immune to
   the state-update cadence. Verified the roll-down and count-up
   numerically before wiring it in.

235 tests green; verified the new code in the actual built exe over HTTP.
The OBS dock rendered its big number from current_delay_ms, which
includes the pipeline's natural transit latency (encoder -> ingest ->
ring -> egress) even when no delay is armed - so passthrough read as
"1.0s". It now mirrors the dashboard: armed target when a delay is
engaged (fill while arming), 0 in passthrough.

Review pass over the whole merge set: clippy clean (no Rust dead code),
no dead JS functions, no leftover references from the animation
iterations, dashboard animations are read-only (never POST, cannot
desync the stream state), and the dock is a standalone file unaffected
by the dashboard changes.
Base automatically changed from ui/aurora-state-transitions to main July 5, 2026 12:46
@Soulhackzlol
Soulhackzlol merged commit e7ab99d into main Jul 5, 2026
4 checks passed
@Soulhackzlol
Soulhackzlol deleted the feat/system-obs-quick-launch branch July 5, 2026 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant