Repository navigation
Conversation
cefsrc paints premultiplied alpha and the vision mixer blends straight alpha, so HTML graphics composite too dark wherever they are partly transparent. Set dsk_N_alpha_mode = premultiplied on the mixer for every DSK input fed by a graphic assignment. The property comes from Eyevinn/strom#809; Strom without it stores and ignores the key. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
wagenet
force-pushed
the
wagenet/open-live-dsk-alpha-mode
branch
from
September 30, 2026 14:19
634e764 to
6d73ebc
Compare
wagenet
added a commit
to wagenet/open-live
that referenced
this pull request
Oct 1, 2026
Contributor
|
Holding off on automated review/merge here: this is a draft, gated on upstream Eyevinn/strom#809 (the |
wagenet
added a commit
to wagenet/open-live
that referenced
this pull request
Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Written by Claude (AI). Not yet reviewed by a human.
Depends on Eyevinn/strom#809. Do not merge before it lands.
Summary
cefsrcpaints premultiplied alpha. Both vision mixer backends blend straight alpha, so every HTML graphic on a DSK input composites too dark wherever it is partly transparent: 50% white over grey 64 reads 96 instead of 160. Eyevinn/strom#809 adds a per-DSK block property,dsk_N_alpha_mode(straightby default, orpremultiplied), read when the flow is built. Set it topremultipliedfor every DSK input fed by a graphic assignment; leave DSK inputs with no graphic unset.Changes
src/lib/flow-generator.ts: the graphic-assignment loop records each DSK index it wires acefsrcinto. The block that setsnum_dsk_inputsthen setsdsk_N_alpha_modefor those indexes. An assignment whose graphic doc no longer exists builds nocefsrc, so its input is left unset (it still counts towardnum_dsk_inputs).builtin.videoformatblock in front of each DSK input stays. It resizes the graphic to program resolution before the mixer converts it; without it the CPU mixer puts a dark edge on graphics when program is not 1080p (Vision mixer: dark edges on resized premultiplied DSK inputs (CPU mixer) strom#822).cefsrc'sunpremultiply(cefsrc: Add unpremultiply property centricular/gstcefsrc#113) is not set. With the mixer also set topremultiplied, the graphic would be converted twice and composite too bright.docs/strom-block-config.md: documents the property.Paths that wire
cefsrcinto the mixerflow-generator.tsflow-generator.tscefsrcor Video Format block wired todsk_in_Nbefore graphic assignments are built, so no template DSK graphic reaches Strom.src/lib/default-flow.tscefsrcand no DSK links.src/db/optional-overlays.tsOPTIONAL_OVERLAYSis not imported anywhere, so no flow is built from it. If it is ever wired in, its two DSK entries need the property too.streamType: 'html') inflow-generator.tscefsrc→cefdemuxintovideo_in_N, not a DSK pad, and #809 only adds the property for DSK inputs.Compatibility with Strom without #809
Checked on Eyevinn/strom
mainat 9b7bc1f. An undefined block property is stored and ignored at flow creation, not rejected: harmless on an older Strom, and no effect there. No gating is needed; until #809 is deployed, graphics stay too dark.Code citations
types/src/block.rs:268:BlockInstance.propertiesis aHashMap<String, PropertyValue>, andPropertyValueis an untagged enum that accepts any string (types/src/element.rs:146-153).backend/src/api/flows.rs:305-468(prepare_flow, called fromcreate_flowat:489): trims endpoint ids, migrates WHEPmode, computes pads and resolves links. It does not check property names.backend/src/state.rs:398-414(strip_transient_properties, run on create and update): removes only properties the definition markspersist: false. Unknown keys are kept and persisted with the flow.backend/src/gst/block_expansion.rs:105-121: the builder receives the full property map. The vision mixer builder reads properties by name throughvision_mixer/properties.rs, so it never looks atdsk_N_alpha_mode./api/flows/{id}/blocks/{bid}/properties(backend/src/state.rs:1774-1781,"unknown exposed property"). Open Live sets this property only in the create body and never PATCHes the vision mixer's block properties (theupdateBlockPropertiescalls insrc/ws/controller.tsall target the audio mixer).Test plan
src/__tests__/flow-generator.test.ts: new tests check that the property is set for each assigned DSK input, absent for an input with no graphic, absent for an assignment whose graphic doc is missing, and absent when there are no graphics. With the property assignment removed, three of the four new tests fail.pnpm exec vitest run: 69 files, 752 tests passpnpm typecheckpassespnpm buildpassescefsrcDSK graphic.🤖 Generated with Claude Code