4plexvid

4plexvid · utilities

4PLEXVID is a 4-in / 4-out video router — the video sibling of the audio 4Plexer. It is NOT a blend or mixer: each of the four outputs carries exactly ONE of the four video inputs, a discrete cross-point switch. Every output has its own selector (sel1..sel4 picking IN1..IN4) and its own gate CV input that advances that selector by one on each rising edge (IN1→IN2→IN3→IN4→IN1, wrapping). The fragment shader is a pure passthrough copy of the selected input texture (it writes the input's RGB straight through, or solid black when that input is unpatched), so there is no color processing — pixels pass straight through. All four outputs render their own FBO every frame regardless of patch state, so downstream modules always sample a fresh texture; OUT1 is also exposed as the canonical single-texture surface. Use it to fan one set of sources out to four destinations, to swap which feed reaches a screen, or to drive rhythmic cuts by clocking the gate inputs from an LFO or sequencer.

4PLEXVID is a 4-in / 4-out video router — the video sibling of the audio 4Plexer. It is NOT a blend or mixer: each of the four outputs carries exactly ONE of the four video inputs, a discrete cross-point switch. Every output has its own selector (sel1..sel4 picking IN1..IN4) and its own gate CV input that advances that selector by one on each rising edge (IN1→IN2→IN3→IN4→IN1, wrapping). The fragment shader is a pure passthrough copy of the selected input texture (it writes the input's RGB straight through, or solid black when that input is unpatched), so there is no color processing — pixels pass straight through. All four outputs render their own FBO every frame regardless of patch state, so downstream modules always sample a fresh texture; OUT1 is also exposed as the canonical single-texture surface. Use it to fan one set of sources out to four destinations, to swap which feed reaches a screen, or to drive rhythmic cuts by clocking the gate inputs from an LFO or sequencer.

the faceplate

4plexvidin1videoin2videoin3videoin4videogate1cvgate2cvgate3cvgate4cvout1videoout2videoout3videoout4videoaudiocvgatepitch
8 inputs · 4 outputs · 8 params

inputs

idcablewhat it does
in1videoVideo input 1. A source you can route to any output by setting that output's selector (sel1..sel4) to IN1.
RGB video stream
in2videoVideo input 2. A source you can route to any output by setting that output's selector to IN2.
RGB video stream
in3videoVideo input 3. A source you can route to any output by setting that output's selector to IN3.
RGB video stream
in4videoVideo input 4. A source you can route to any output by setting that output's selector to IN4.
RGB video stream
gate1cvGate CV for output 1, edge-triggered (paramTarget gate1). On each rising edge it advances the sel1 selector to the next input, wrapping IN1→IN2→IN3→IN4→IN1. Held-high advances exactly once; hysteresis (rise>0.6, fall<0.4) absorbs LFO/ADSR dead-band chatter.
control voltage (CV); modulates gate1 (summed directly (the destination DSP scales it))
gate2cvGate CV for output 2, edge-triggered (paramTarget gate2). Each rising edge rotates the sel2 selector to the next input, wrapping; held-high fires once via the same hysteresis edge detector.
control voltage (CV); modulates gate2 (summed directly (the destination DSP scales it))
gate3cvGate CV for output 3, edge-triggered (paramTarget gate3). Each rising edge rotates the sel3 selector to the next input, wrapping; held-high fires once via the same hysteresis edge detector.
control voltage (CV); modulates gate3 (summed directly (the destination DSP scales it))
gate4cvGate CV for output 4, edge-triggered (paramTarget gate4). Each rising edge rotates the sel4 selector to the next input, wrapping; held-high fires once via the same hysteresis edge detector.
control voltage (CV); modulates gate4 (summed directly (the destination DSP scales it))

outputs

idcablewhat it does
out1videoVideo output 1 — a discrete tap carrying exactly the input chosen by the sel1 selector (black if that input is unpatched). Also the canonical single-texture surface and the card's live OUT 1 preview.
RGB video stream
out2videoVideo output 2 — a discrete tap carrying exactly the input chosen by the sel2 selector (black if that input is unpatched).
RGB video stream
out3videoVideo output 3 — a discrete tap carrying exactly the input chosen by the sel3 selector (black if that input is unpatched).
RGB video stream
out4videoVideo output 4 — a discrete tap carrying exactly the input chosen by the sel4 selector (black if that input is unpatched).
RGB video stream

params

idlabelrangedefaultcurve
sel1OUT 10..?discrete
sel2OUT 20..?discrete
sel3OUT 30..?discrete
sel4OUT 40..?discrete
gate1G10..1linear
gate2G20..1linear
gate3G30..1linear
gate4G40..1linear

controls

controlwhat it does
G1NOT A CONTROL — a synthetic param (linear 0..1) holding the gate1 rising-edge detector's last level. The gate1 CV jack writes it through the cross-domain bridge; nothing in the UI offers it, because setting it by hand past the 0.6 rise threshold would rotate the router. Declared noUserControl (writer: cv-port).
G2NOT A CONTROL — a synthetic param (linear 0..1) holding the gate2 rising-edge detector's last level, written by the gate2 CV jack through the cross-domain bridge. Declared noUserControl (writer: cv-port), so no knob, encoder or group instrument bar offers it.
G3NOT A CONTROL — a synthetic param (linear 0..1) holding the gate3 rising-edge detector's last level, written by the gate3 CV jack through the cross-domain bridge. Declared noUserControl (writer: cv-port), so no knob, encoder or group instrument bar offers it.
G4NOT A CONTROL — a synthetic param (linear 0..1) holding the gate4 rising-edge detector's last level, written by the gate4 CV jack through the cross-domain bridge. Declared noUserControl (writer: cv-port), so no knob, encoder or group instrument bar offers it.
OUT 1OUT 1 selector — a discrete control choosing which input (IN1..IN4, raw index 0..3) output 1 carries. It has four named detents rather than a scale: the faceplate renders them as a row of IN1..IN4 buttons, and gate1 rotates the selection on each rising edge. A non-finite value resolves to IN1.
OUT 2OUT 2 selector — a discrete control choosing which input (IN1..IN4, raw index 0..3) output 2 carries. Four named detents rendered as an IN1..IN4 button row on the faceplate; gate2 rotates the selection on each rising edge. A non-finite value resolves to IN1.
OUT 3OUT 3 selector — a discrete control choosing which input (IN1..IN4, raw index 0..3) output 3 carries. Four named detents rendered as an IN1..IN4 button row on the faceplate; gate3 rotates the selection on each rising edge. A non-finite value resolves to IN1.
OUT 4OUT 4 selector — a discrete control choosing which input (IN1..IN4, raw index 0..3) output 4 carries. Four named detents rendered as an IN1..IN4 button row on the faceplate; gate4 rotates the selection on each rising edge. A non-finite value resolves to IN1.

source

4plexvid.ts on GitHub.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo