b3ntb0x

b3ntb0x · output

A circuit-level NTSC/composite video destroyer. Where the original BENTBOX does one symbolic RGB/YIQ pass, B3NTB0X runs a real four-stage analog pipeline: it ENCODES the incoming picture into a per-column composite VOLTAGE on a 3.58 MHz subcarrier (with sync tip, blanking, colour burst, and active video), runs that voltage through an analog BEND CIRCUIT (AC/DC coupling, gain, bias, soft-clip + diode clamp, plus four circuit-bend taps), DECODES it back to RGB with a quadrature demodulator and recovered sync, then renders it on a curved CRT (beam blur, phosphor grille, scanlines/interlace, bloom, persistence, overscan, barrel). Sync crush, dot-crawl, rainbow swim and rolling all EMERGE from the signal path — they are not cosmetic filters. Patch a video source into IN and it is the chainable, CRT-rendered OUT. Crank Sync Crush + Bias to tear and roll the picture, starve the Burst to kill colour and bring on herringbone, push Drift for swimming rainbow, and use Bend A–D for wavefold/comb/crush/bleed mangling. The preview is a resizable CRT screen (drag the bottom-right handle; default 540x540, min 360x540) that letterboxes at the live engine aspect with the 4:3 active area, overscan and barrel applied inside the shader; right-click for fullscreen / full-frame / present-on-second-display, and a "reduced precision" badge appears if the GPU cannot allocate the float buffers the composite voltage needs.

A circuit-level NTSC/composite video destroyer. Where the original BENTBOX does one symbolic RGB/YIQ pass, B3NTB0X runs a real four-stage analog pipeline: it ENCODES the incoming picture into a per-column composite VOLTAGE on a 3.58 MHz subcarrier (with sync tip, blanking, colour burst, and active video), runs that voltage through an analog BEND CIRCUIT (AC/DC coupling, gain, bias, soft-clip + diode clamp, plus four circuit-bend taps), DECODES it back to RGB with a quadrature demodulator and recovered sync, then renders it on a curved CRT (beam blur, phosphor grille, scanlines/interlace, bloom, persistence, overscan, barrel). Sync crush, dot-crawl, rainbow swim and rolling all EMERGE from the signal path — they are not cosmetic filters. Patch a video source into IN and it is the chainable, CRT-rendered OUT. Crank Sync Crush + Bias to tear and roll the picture, starve the Burst to kill colour and bring on herringbone, push Drift for swimming rainbow, and use Bend A–D for wavefold/comb/crush/bleed mangling. The preview is a resizable CRT screen (drag the bottom-right handle; default 540x540, min 360x540) that letterboxes at the live engine aspect with the 4:3 active area, overscan and barrel applied inside the shader; right-click for fullscreen / full-frame / present-on-second-display, and a "reduced precision" badge appears if the GPU cannot allocate the float buffers the composite voltage needs.

the faceplate

b3ntb0xinvideoenhance_cvcvbias_cvcvac_dc_cvcvsync_crush_cvcvburst_starve_cvcvchroma_leak_cvcvluma_peak_cvcvbend_a_cvcvbend_b_cvcvbend_c_cvcvbend_d_cvcvfeedback_cvcvtbc_cvcvtube_bloom_cvcvoverscan_cvcvbarrel_cvcvmirror_x_gatecvmirror_y_gatecvoutvideoaudiocvgatepitch
19 inputs · 1 outputs · 23 params

inputs

idcablewhat it does
invideoVideo input — the upstream RGB picture that becomes the active-video region of the synthesized NTSC line. With nothing patched the encoder feeds black (a clean blanked raster you can still bend).
RGB video stream
enhance_cvcvModulates Enhance (HF peaking / edge over-ring in the bend circuit).
control voltage (CV); modulates enhance (additive offset — ±1 CV sweeps the full range, centered on the knob)
bias_cvcvModulates Bias (the DC offset added before the soft-clip/diode-clamp; drives sync crush and tearing).
control voltage (CV); modulates bias (additive offset — ±1 CV sweeps the full range, centered on the knob)
ac_dc_cvcvModulates AC/DC (input-coupling blend, DC passthrough to leaky AC-coupled so flat areas droop toward grey).
control voltage (CV); modulates ac_dc (additive offset — ±1 CV sweeps the full range, centered on the knob)
sync_crush_cvcvModulates Sync Crush (master transistor gain into the clip; high gain drags the sync tip through the clamp so the decoder loses lock).
control voltage (CV); modulates sync_crush (additive offset — ±1 CV sweeps the full range, centered on the knob)
burst_starve_cvcvModulates Burst Starve (attenuates the colour-burst reference: desaturation toward mono plus subcarrier dot-crawl into luma).
control voltage (CV); modulates burst_starve (additive offset — ±1 CV sweeps the full range, centered on the knob)
chroma_leak_cvcvModulates Chroma Leak (how much chroma energy bleeds into luma in the decoder, i.e. dot-crawl amount).
control voltage (CV); modulates chroma_leak (additive offset — ±1 CV sweeps the full range, centered on the knob)
luma_peak_cvcvModulates Luma Peak (decode-side unsharp sharpening on the recovered luma).
control voltage (CV); modulates luma_peak (additive offset — ±1 CV sweeps the full range, centered on the knob)
bend_a_cvcvModulates Bend A (WAVEFOLD — reflect the composite voltage past a shrinking threshold for solarised creases).
control voltage (CV); modulates bend_a (additive offset — ±1 CV sweeps the full range, centered on the knob)
bend_b_cvcvModulates Bend B (COMB RIPPLE — mix a horizontally-delayed copy back in for ringing/ghost edges).
control voltage (CV); modulates bend_b (additive offset — ±1 CV sweeps the full range, centered on the knob)
bend_c_cvcvModulates Bend C (CRUSH — quantise/posterise the picture into hard contour bands).
control voltage (CV); modulates bend_c (additive offset — ±1 CV sweeps the full range, centered on the knob)
bend_d_cvcvModulates Bend D (CHROMA→SYNC BLEED — cross-couple HF ripple onto the DC path for luma buzz/rolling).
control voltage (CV); modulates bend_d (additive offset — ±1 CV sweeps the full range, centered on the knob)
feedback_cvcvModulates Feedback (CRT phosphor persistence / motion-trail amount).
control voltage (CV); modulates feedback (additive offset — ±1 CV sweeps the full range, centered on the knob)
tbc_cvcvModulates TBC/Lock (time-base correction; 1 is rock-steady, 0 lets sync offset + timebase wobble shimmy the lines).
control voltage (CV); modulates tbc (additive offset — ±1 CV sweeps the full range, centered on the knob)
tube_bloom_cvcvModulates Tube Bloom (highlight halation/glow spilling into neighbours).
control voltage (CV); modulates tube_bloom (additive offset — ±1 CV sweeps the full range, centered on the knob)
overscan_cvcvModulates Overscan (how far the image is pushed past the visible CRT edge).
control voltage (CV); modulates overscan (additive offset — ±1 CV sweeps the full range, centered on the knob)
barrel_cvcvModulates Barrel (CRT glass bulge / barrel distortion and corner vignette).
control voltage (CV); modulates barrel (additive offset — ±1 CV sweeps the full range, centered on the knob)
mirror_x_gatecvGate input on the CV cable (edge-detected): a RISING edge TOGGLES the Mirror X kaleidoscope fold — it fires on the rising edge, not on the held level. Feeds the mirrorXGate param.
control voltage (CV); modulates mirrorXGate (summed directly (the destination DSP scales it))
mirror_y_gatecvGate input on the CV cable (edge-detected): a RISING edge TOGGLES the Mirror Y kaleidoscope fold — it fires on the rising edge, not on the held level. Feeds the mirrorYGate param.
control voltage (CV); modulates mirrorYGate (summed directly (the destination DSP scales it))

outputs

idcablewhat it does
outvideoVideo output — the final CRT-rendered frame (decoded RGB after the full encode→bend→decode→CRT chain, with overscan, barrel, scanlines, phosphor and persistence baked in). Chainable into any video input.
RGB video stream

params

idlabelrangedefaultcurve
enhanceEnhance0..1linear
biasBias-1..1linear
ac_dcAC/DC0..1linear
sync_crushSync Crush0..2linear
burst_starveBurst Starve0..1linear
chroma_leakChroma Leak0..1linear
luma_peakLuma Peak0..1linear
bend_aBend A-1..1linear
bend_bBend B-1..1linear
bend_cBend C-1..1linear
bend_dBend D-1..1linear
feedbackFeedback0..1linear
tbcTBC/Lock0..1linear
tube_bloomTube Bloom0..1linear
overscanOverscan0..1linear
barrelBarrel0..1linear
hueHue-1..1linear
sub_driftDrift0..1linear
mirrorXMirror X0..1discrete
mirrorYMirror Y0..1discrete
mirrorXGateMir X Gate0..1linear
mirrorYGateMir Y Gate0..1linear
freezeFreeze0..1linear

controls

controlwhat it does
AC/DCAC/DC (0–1): input-coupling blend. 0 = DC passthrough; 1 = leaky AC coupling that loses the DC pedestal so big flat bright/dark areas droop back toward mid-grey.
BarrelBarrel (0–1, default 0.25): CRT glass barrel distortion (outward bulge about center) plus the matching corner vignette.
Bend ABend A — Wavefold (-1–1): reflects the composite voltage back on itself past a shrinking threshold for solarised banding/creases. Identity at 0; sign picks fold polarity.
Bend BBend B — Comb Ripple (-1–1): mixes a horizontally-delayed copy of the voltage back in (one-tap comb) for ringing, ghost edges and colour beating. Identity at 0.
Bend CBend C — Crush (-1–1): quantises/posterises the picture into a few hard steps (bit-crush banding); the visible crush is applied on the recovered RGB, stepping from ~256 levels down toward 3 as magnitude approaches 1. Identity at 0.
Bend DBend D — Chroma→Sync Bleed (-1–1): cross-couples the HF/chroma ripple onto the DC/baseline path, so the picture modulates the baseline as luma buzz / rolling contamination. Identity at 0.
BiasBias (-1–1): DC offset added before the nonlinear clip. Pushes the signal asymmetrically into the soft-clip/diode-clamp; with Sync Crush it drags the sync tip up and crushes it (tearing/rolling).
Burst StarveBurst Starve (0–1): starves the colour-burst phase reference. Desaturates the picture toward monochrome (colour killer) AND leaks raw subcarrier energy into luma as dot-crawl/herringbone.
Chroma LeakChroma Leak (0–1, default 0.15): amount of under-filtered chroma energy that bleeds into the recovered luma in the decoder — visible dot-crawl on the picture.
EnhanceEnhance (0–1): high-frequency peaking on the composite voltage; sharpens edges and adds over-ringing. 0 is flat.
FeedbackFeedback (0–1): CRT phosphor persistence; blends a decayed copy of the previous frame for motion trails. 0 is no trails.
FreezeFreeze (0/1, default 0): a hidden determinism toggle with NO control anywhere — not on the card, not on the faceplate, not on the patch surface. At 0.5 or above the draw step is a no-op, so every surface holds its last frame instead of going black. It exists because this module animates by construction: the subcarrier phase and the sync wobble both advance with elapsed time, and the CRT persistence path feeds the previous frame back on top of that, so two captures of the same settings are never the same pixels. The visual-regression harness writes it before comparing a screenshot; nothing else ever does.
HueHue (-1–1): receiver TINT — rotates the synchronous-demodulator reference axis (the recovered I/Q chroma vector) up to ±0.9π. Shifts colour angle while preserving saturation. 0 is no shift.
Luma PeakLuma Peak (0–1): decode-side unsharp masking on the recovered luma; sharpens detail using the bent neighbours. 0 is off.
Mirror XMirror X (0/1): kaleidoscope toggle that folds the left half over the right. Driven by the card's MIRROR X button and by a rising edge on the Mir X Gate input.
Mir X GateMir X Gate (0–1): the synthetic gate level fed by the mirror_x_gate input; a rising edge on it toggles Mirror X. Read for edge detection, not as a continuous control.
Mirror YMirror Y (0/1): kaleidoscope toggle that folds the top half over the bottom. Driven by the card's MIRROR Y button and by a rising edge on the Mir Y Gate input.
Mir Y GateMir Y Gate (0–1): the synthetic gate level fed by the mirror_y_gate input; a rising edge on it toggles Mirror Y. Read for edge detection, not as a continuous control.
OverscanOverscan (0–1, default 0.2): scales the image slightly past the visible CRT edge so borders fall outside the active area, like a real TV.
DriftDrift (0–1): subcarrier instability. Injects an uncorrected carrier phase error that grows across each line and wanders in time, so chroma swims as a rainbow over the picture. 0 is stable.
Sync CrushSync Crush (0–2, default 1): master transistor gain into the clip. At 1 it is unity; above 1 it overdrives and can crush the sync tip so the decoder fails to lock; below 1 it underdrives.
TBC/LockTBC/Lock (0–1, default 1): time-base correction. 1 corrects the recovered sync offset and analog timebase wobble to rock-steady; 0 lets both through so lines shimmy left/right and the picture breathes.
Tube BloomTube Bloom (0–1, default 0.35): highlight halation — bright phosphors spill warm glow into neighbours and blow out toward white. 0 is off.

source

b3ntb0x.ts on GitHub.

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