Skip to content

feat(scene): reusable zab-transition Canvas scene (white + centered Zab logo) + A→transition→B playout#95

Open
ClodoCapeo wants to merge 1 commit into
mainfrom
forge/pulsar-m10-zab-transition-scene
Open

feat(scene): reusable zab-transition Canvas scene (white + centered Zab logo) + A→transition→B playout#95
ClodoCapeo wants to merge 1 commit into
mainfrom
forge/pulsar-m10-zab-transition-scene

Conversation

@ClodoCapeo

Copy link
Copy Markdown
Contributor

What

The M10 transition built as a reusable static Canvas/LSML scene (data), not transition code — and a franc-cut A→transition→B playout. No lower_wipe_cover, no compiler change, no fade. Refs #79.

The scene — scripts/fixtures/zab-transition.lsml.json

  • A franc full-screen white frame (background:#FFFFFF, 100%×100%) with a centred image child (the Zab logo) inside a stack (align/justify: center).
  • Logo = LogoZab---BW.jpg (128×128, B&W on white) embedded as a base64 data:image/jpeg data-URI in image.src — no asset hosting, no Solar rebuild (the fast-track). B&W-on-white blends into the white frame.
  • STATIC: no keyframes, no wipe-cover element, no scene_control leaf, no operator_inputs — the dormant lower_wipe_cover path is genuinely unused. Round-trips as plain LSML 1.1; props are spread at the node top level (the Orion lsmlNode form the @lumencast/runtime frame/stack/image primitives read flat off resolved.*).

The playout — scripts/probe-m10-canvas-live.py --transition-scene

  • 3 OBS scenes: scene-screen-1 / scene-screen-2 (WGC monitor_capture, reused feat(harness): force WGC capture method + migrate Orion scene default to overlay shape (#78) #84 setup) + scene-transition (a browser_source rendering the active Orion zab-transition scene).
  • Cuts A → transition → B in two bare SetCurrentProgramScene with a hold (--hold-ms, default 700ms). No SetCurrentSceneTransition ever (C-MECH). MID frame checked near-white+logo (not magenta, not black).
  • --no-broadcast (dry) / --broadcast and C-SEC token redaction preserved.

Verified (no VPS / no desktop)

  • 28 offline tests green (test_zab_transition.py new + test_m10_setup.py + test_probe_m10_real_orion.py); full offline set 87 green.
  • Fixture is valid LSML 1.1, round-trips, the logo data-URI decodes to the exact complete image.
  • Live smoke on a built pulsar.exe: the 3 scenes + 2 franc cuts fire, C-MECH holds (['SetCurrentProgramScene','SetCurrentProgramScene'], zero native-transition requests), C-CUT flips through all three, C-SEC clean.
  • detect-secrets: the embedded logo data-URI introduces zero new findings (compliance gate clear).

Not done here (by design)

  • The real CEF-of-Solar render of the white+logo scene (the MID stays black on a headless box — CEF doesn't paint a browser_source without an interactive desktop; --allow-blank defers it). That is Keeper's antenna run.
  • The push+activate of zab-transition on the real Orion (the m8/m9 toolkit author leg is still gated/absent on main).

Surface sensitivity

Not a sensitive surface (no auth/secrets/network/deps changes). The only entropy concern — the embedded base64 logo — was checked against detect-secrets and is clean.

Note for Eleven

  • The branch was cut from origin/main, which does not carry the two prior-branch commits (--real-orion nested ?token= URL + string-JSON leaf decode) from forge/pulsar-m10-real-orion-url-fix. My diff is purely additive and self-contained; offline tests + live smoke pass on the main base. If those url-fix commits land first, no conflict is expected (disjoint code).

🤖 Generated with Claude Code

…ab logo) + A→transition→B playout

The M10 transition as a reusable STATIC Canvas/LSML scene (data), not
transition code: scripts/fixtures/zab-transition.lsml.json is a franc
full-screen white frame with the centred Zab logo embedded as a base64
data-URI in image.src. No keyframes, no wipe-cover element, no
scene_control leaf — the dormant lower_wipe_cover path is unused; the
scene round-trips as plain LSML 1.1 (props spread at the node top level,
the Orion lsmlNode form the @lumencast/runtime frame/stack/image
primitives read). No asset hosting, no Solar rebuild (the fast-track).

probe-m10-canvas-live.py gains --transition-scene: a third OBS program
scene (scene-transition) renders the active Orion zab-transition scene in
a browser_source, and the playout cuts A (screen-1) → transition →
B (screen-2) in two BARE SetCurrentProgramScene cuts with a hold between
them — franc passage, no fade, NO OBS-native transition (C-MECH). The MID
frame is checked near-white+logo (not magenta, not black). --no-broadcast
(dry) / --broadcast and C-SEC token redaction are preserved.

Verified offline (no VPS / no desktop): the fixture is valid LSML 1.1,
round-trips, the logo data-URI decodes to the exact complete image; the
playout parses, the 3 scenes + 2 franc cuts fire, C-MECH holds (zero
native-transition requests), C-SEC clean. The real CEF-of-Solar render of
the white+logo scene is Keeper's antenna run.

Refs #79

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant