4plexvid
4plexvid · utilities · schema v14PLEXVID 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
inputs
| id | cable | what it does |
|---|---|---|
in1 | video | Video input 1. A source you can route to any output by setting that output's selector (sel1..sel4) to IN1. RGB video stream |
in2 | video | Video input 2. A source you can route to any output by setting that output's selector to IN2. RGB video stream |
in3 | video | Video input 3. A source you can route to any output by setting that output's selector to IN3. RGB video stream |
in4 | video | Video input 4. A source you can route to any output by setting that output's selector to IN4. RGB video stream |
gate1 | cv | Gate 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)) |
gate2 | cv | Gate 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)) |
gate3 | cv | Gate 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)) |
gate4 | cv | Gate 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
| id | cable | what it does |
|---|---|---|
out1 | video | Video 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 |
out2 | video | Video output 2 — a discrete tap carrying exactly the input chosen by the sel2 selector (black if that input is unpatched). RGB video stream |
out3 | video | Video output 3 — a discrete tap carrying exactly the input chosen by the sel3 selector (black if that input is unpatched). RGB video stream |
out4 | video | Video output 4 — a discrete tap carrying exactly the input chosen by the sel4 selector (black if that input is unpatched). RGB video stream |
params
| id | label | range | default | curve |
|---|---|---|---|---|
sel1 | OUT 1 | 0..? | — | discrete |
sel2 | OUT 2 | 0..? | — | discrete |
sel3 | OUT 3 | 0..? | — | discrete |
sel4 | OUT 4 | 0..? | — | discrete |
gate1 | G1 | 0..1 | — | linear |
gate2 | G2 | 0..1 | — | linear |
gate3 | G3 | 0..1 | — | linear |
gate4 | G4 | 0..1 | — | linear |
controls
| control | what it does |
|---|---|
| G1 | Hidden synthetic param (linear 0..1) caching the gate1 CV level for output 1's rising-edge detector; driven by the gate1 jack via the CV bridge, not a knob on the card. |
| G2 | Hidden synthetic param (linear 0..1) caching the gate2 CV level for output 2's rising-edge detector; driven by the gate2 jack via the CV bridge, not a knob on the card. |
| G3 | Hidden synthetic param (linear 0..1) caching the gate3 CV level for output 3's rising-edge detector; driven by the gate3 jack via the CV bridge, not a knob on the card. |
| G4 | Hidden synthetic param (linear 0..1) caching the gate4 CV level for output 4's rising-edge detector; driven by the gate4 jack via the CV bridge, not a knob on the card. |
| OUT 1 | OUT 1 selector — a discrete fader choosing which input (IN1..IN4, raw index 0..3) output 1 carries. Snaps to integer indices and displays as IN1..IN4; gate1 rotates it on each rising edge. |
| OUT 2 | OUT 2 selector — a discrete fader choosing which input (IN1..IN4, raw index 0..3) output 2 carries. Snaps to integer indices and displays as IN1..IN4; gate2 rotates it on each rising edge. |
| OUT 3 | OUT 3 selector — a discrete fader choosing which input (IN1..IN4, raw index 0..3) output 3 carries. Snaps to integer indices and displays as IN1..IN4; gate3 rotates it on each rising edge. |
| OUT 4 | OUT 4 selector — a discrete fader choosing which input (IN1..IN4, raw index 0..3) output 4 carries. Snaps to integer indices and displays as IN1..IN4; gate4 rotates it on each rising edge. |
source
4plexvid.ts on GitHub.