Complete list of all mappable parameter IDs for use in MIDI and OSC map files. The param field in any map entry must match an ID in this table exactly.
Complete list of all mappable parameter IDs for use in MIDI and OSC map files. The param field in any map entry must match an ID in this table exactly.
| ID | Label | Min | Max | Notes |
|---|---|---|---|---|
| baseMix | Base Mix | 0 | 1 | |
| seed | Seed | 1 | 99999 | Randomisation seed. Same seed = same output |
| historyFrames | History | 4 | dynamic ≤120 | Requested decoded-frame history depth. Runtime clamps to the 192 MiB FrameRing budget; 1080p max is 24 RGBA frames. |
| quality | Legacy History Alias | 0 | 3 | Hidden compatibility ID for old presets/MIDI/OSC maps. Mirrors HISTORY only; no longer changes preview JPEG quality or FPS. |
| feedback | FEEDBACK · RETURN | 0 | 3 | Original performance parameter preserved; renderer clamps redraw alpha to 1. The semantic suffix explains the visible action without replacing the ID/range. |
| persistence | PERSISTENCE · MEMORY | 0 | 10 | Original persistent-buffer decay parameter; independent of Feedback Enable/Strobe. |
| feedbackEnabled | Feedback Enable | off/on | — | Bypasses only the Feedback transform and Restore layer; does not rewrite or gate PERSISTENCE. |
| feedbackStrobe | FB STROBE | off/on | — | Optional: gates only the established Feedback transform; does not gate PERSISTENCE. |
| feedbackStrobeEvery | INTERVAL | 1 | 30 | Decoded source frames between Feedback-transform updates while FB STROBE is on. |
| feedbackRestore | RESTORE | 0 | 1 | Optional clean-source catch-up overlay; 0 preserves legacy behavior. |
| fbX | FB X · Drift | -1 classic / -8 wide | 1 classic / 8 wide | Same original parameter. RANGE only changes UI limits; CLASSIC is the default. |
| fbY | FB Y · Drift | -1 classic / -8 wide | 1 classic / 8 wide | Same original parameter. RANGE only changes UI limits; CLASSIC is the default. |
| fbZ | FB Z · Zoom | 0.98 classic / 0.95 wide | 1.03 classic / 1.05 wide | Same original parameter; 1.0 = neutral zoom. |
| fbTheta | FB θ · Rotate | -2 classic / -5 wide | 2 classic / 5 wide | Same original parameter; degrees per Feedback update. |
| depth | Corrupt Age | 0 | 0.5 | How far back into the bounded FrameRing Corrupt may borrow patches. |
| depthScatter | Age Spread | 0 | 1 | Variation in borrowed-frame age between patches. |
| corrupt | Amount | 0 | 7 | Relative number of corruption targets. |
| corruptDrift | Amount Drift | 0 | 1 | Slowly varies the active target count. |
| block | Grid | 150 | 2000 | Candidate-region spacing in pixels. |
| glitchSize | Patch Size | 1 | 60 | Displayed as a multiplier of the Grid cell. |
| spatialGap | Gap | 0 | 200 | Minimum spacing between accepted target centers. |
| glitchJitter | Jitter | 0 | 1 | Random positional displacement of patches. |
| glitchAlpha | Mix | 0 | 1 | Strength of Corrupt material. |
| glitchSmear | Repeats | 0 | 200 | Additional copies drawn along Direction. |
| glitchSmearAngle | Direction | 0 | 360 | 0 is displayed as AUTO and uses the existing noise-driven direction. |
| glitchStrobeEvery | Strobe Interval | 1 | 30 | Decoded source frames; used only in STROBE mode. |
| corruptHoldFrames | MultiGrab Hold | 1 | 60 | Decoded frames held before the live-update window. |
| corruptLiveFrames | MultiGrab Live | 1 | 30 | Decoded frames during which Corrupt updates before the next hold. |
| corruptMaskThreshold | Stencil Level | 0 | 255 | Threshold for the already-captured Luma Stencil when Corrupt Mask is STENCIL. |
| corruptSpeed | Random Speed | 0 | 4 | Overall RANDOM Corrupt evolution speed. In CONTINUOUS mode the Corrupt layer remains composited every render: 0 locks patch placement and historical-age choice while delayed video remains live inside the patches; low values evolve slowly. STROBE/MULTIGRAB remain the explicit temporal hold modes. Independent of Cluster Speed. |
| glitchBaseX | Position X | -1000 | 1000 | Static horizontal destination offset in pixels. |
| glitchBaseY | Position Y | -1000 | 1000 | Static vertical destination offset in pixels. |
| glitchBaseZ | Position Z | -1 | 1 | Canvas2D 2.5D depth: negative recedes toward frame center; positive enlarges and projects outward. |
| corruptMoveX | Move X | -1200 | 1200 | Continuous horizontal Corrupt travel in pixels/second, scaled by master Speed. |
| corruptMoveY | Move Y | -1200 | 1200 | Continuous vertical Corrupt travel in pixels/second, scaled by master Speed. |
| corruptMoveZ | Move Z | -1.5 | 1.5 | Continuous near/far 2.5D travel; bounces at the depth limits and is scaled by master Speed. |
| clusterMasterSpeed | Cluster Speed | 0 | 4 | Overall CLUSTER Corrupt evolution speed. In CONTINUOUS mode the Corrupt layer remains composited every render: 0 locks cluster bodies, shape evolution and historical-age choice while delayed video remains live inside patches; higher values accelerate Group XYZ and organic evolution. STROBE/MULTIGRAB remain the explicit temporal hold modes. Independent of Random Speed. |
| cluCenters | Groups | 1 | 20 | Number of moving Corrupt groups in CLUSTER layout. |
| cluBias | Group Amount | 0 | 1 | Share of total targets assigned to groups. |
| cluSpread | Group Size | 1 | 300 | Maximum group radius in pixels. |
| cluMinSpread | Hollow | 0 | 150 | Empty inner radius around each group center. |
| cluCohere | Shape Hold | 0 | 1 | 0 boils/re-rolls patch positions; 1 locks the internal constellation. |
| cluBreathe | Pulse Size | 0 | 0.9 | Expands/contracts group radius using the independent Cluster Speed clock. |
| cluDepth | Z Spread | 0 | 1 | Amount of per-group Z separation. Zero keeps groups flat; higher values spread group bodies through simulated depth. |
| cluMoveX | Group Move X | -600 | 600 | Direct horizontal group-center travel in pixels/second. |
| cluMoveY | Group Move Y | -600 | 600 | Direct vertical group-center travel in pixels/second. |
| cluMoveZ | Group Move Z | -1.5 | 1.5 | Direct near/far group-center travel in normalized depth units/second. |
| cluSpeed | Organic Speed | 0 | 10 | Additional noise-steered travel of group centers; distinct from direct Group XYZ movement. |
| cluSteer | Turn Rate | 0 | 10 | Rate at which group heading changes. |
| cluDrift | Wander | 0 | 5 | Noise-driven extra movement. |
| cluSpeedVar | Speed Variation | 0 | 2 | Difference in travel speed between groups. |
| cluPulse | Kick | 0 | 10 | Periodic random velocity impulse. |
| cluInertia | Momentum | 0.01 | 0.99 | Persistence of group velocity. |
| glitchSpeed | Legacy Corrupt Speed | 0 | 5 | Compatibility parameter. The UI presents FIELD RATE over SPEED × FINE × MULT²; the separate master Corrupt SPEED scales autonomous motion without rewriting this legacy contract. |
| glitchSpeedFine | Legacy Fine Speed | 0 | 10 | Compatibility parameter for old presets/MIDI/OSC maps. |
| glitchSpeedMul | Legacy Speed Mult | 0 | 10 | Compatibility parameter; old runtime uses the multiplier squared. |
| abMix | A/B Mix | 0 | 1 | 0 = Corrupt priority, 1 = Scanlines priority. Recessive side floors at 0.35 |
| lumaKeyAB | Luma Key Clip | 0 | 1 | Threshold for the luminance matte. With TARGET=SCAN/CORRUPT it gates those effect objects directly; COMPOSITE preserves the legacy clean-key overlay. |
| lumaKeyMix | Luma Key Mix | 0 | 1 | Overall key strength. Targeted SCAN/CORRUPT modes use object-level opacity/eligibility rather than a full-resolution intermediate key layer. |
| lumaKeyGain | Luma Key Gain | 0.25 | 4 | 1.00 preserves the established 64-level rolloff; higher values harden the edge, lower values soften it. |
| lumaKeyCleanup | Luma Cleanup | 0 | 1 | INDIGO-inspired low-end key cleanup; removes low-level leakage and slight shadows. |
| lumaKeyDensity | Luma Density | 0 | 1 | INDIGO-inspired high-end key density; pushes strong foreground toward full opacity. |
| trailLayers | Trail Layers | 0 | 4 | |
| trailDepth | Trail Depth | 0 | 1 | |
| trailLumaKey | Trail Luma Key | 0 | 1 | 0 = off |
| symPos | Sym Position | 0 | 1 | 0.5 = centre |
| scanAngle | Scan Angle | -180 | 180 | degrees, step 0.5. 0 = horizontal, ±90 = vertical |
| scanFocus | Scan Focus | 0 | 1 | Biases band distribution along the rotated span. 0.5 = even |
| scanRoll | Scan Roll | -2 | 2 | Continuous scroll of bands, independent of Drift |
| scanSpinSpeed | Scan Spin Speed | 0.1 | 10 | Only active when Spin L or Spin R is on |
| scanShift | Scan Shift | 0 | 0.5 | |
| scanDrift | Scan Drift | 0 | 3 | Dual-frequency: slow wander + fast jitter |
| scanSpeed | Scan Speed | 0 | 5 | Single overall Scanlines motion speed. 0 holds band geometry, roll, spin and XYZ motion while live video can continue inside the held slices; 1 preserves the Pass 39N cadence. |
| scanPlaceX | Scan Pos X | -1000 | 1000 | Pixels; translates the complete existing effect without changing its band generator. |
| scanPlaceY | Scan Pos Y | -1000 | 1000 | Pixels; translates the complete existing effect without changing its band generator. |
| scanZoom | Scan Zoom | 0.25 | 4 | Panel-aware zoom. 1× is exact flat Scanlines geometry; away from 1× each band can open into a free source-aspect video panel and scale around its own center for collage/depth use. |
| scanPanelLayout | Panel Layout | bands / field | BANDS preserves the existing band lanes. FIELD distributes those same panels independently in X/Y/apparent Z without changing source or temporal behavior. | |
| scanFieldSpreadX | Field Spread X | 0 | 1 | Horizontal per-panel distribution amount. |
| scanFieldSpreadY | Field Spread Y | 0 | 1 | Vertical per-panel distribution amount. |
| scanFieldSpreadZ | Field Spread Z | 0 | 1 | Per-panel apparent-depth/local-zoom spread around the general Scan Zoom. |
| scanFieldSizeVar | Field Size Variation | 0 | 1 | Independent panel-size variation. |
| scanFieldDrift | Field Drift | 0 | 1 | Per-panel X/Y drift amount; rate is owned by the single Scan Speed control. |
| scanFieldDepthDrift | Field Depth Drift | 0 | 1 | Per-panel apparent-Z drift amount; rate is owned by the single Scan Speed control. |
| scanMoveX | Scan Move X | -1000 | 1000 | Pixels/second, scaled by Scan Speed. |
| scanMoveY | Scan Move Y | -1000 | 1000 | Pixels/second, scaled by Scan Speed. |
| scanMoveZ | Scan Move Z | -2 | 2 | Panel-depth zoom motion per second, scaled by Scan Speed; crossing 1× returns to flat 2D bands and moving away from 1× opens free panels; reflects at 0.25× and 4×. |
| scanGap | Scan Gap | 0 | 200 | |
| scanSkew | Scan Skew | -1 | 1 | |
| scanAlpha | Scan Opacity | 0 | 1 | |
| clusterCount | Scan Bands | 1 | 50 | Displaces current frame — no ring sampling |
| clusterRadius | Band Size | 1 | 120 | |
| globalMixAmt | Global Mix Amount | 0 | 1 | Global Mix fader before the selected response curve. |
| solarizeThresh | Sol Thresh | 0 | 1 | THRESHOLD mode only. |
| solarizeLevel | Sol Level | 0 | 100 | LUMA QUANTIZE coarseness; 99 = two luma levels, 100 = luma removed. |
| solarizeSoft | Sol Soft | 0 | 100 | LUMA QUANTIZE transition softness. |
| solarizeFluidity | Sol Fluidity | 0 | 100 | Solarize temporal response; 100 = exact instantaneous compatibility path, lower = slower continuous slew. |
| solarizeAmt | Sol Amount | 0 | 1 | |
| solarizeR | Sol R | 0 | 2 | |
| solarizeG | Sol G | 0 | 2 | |
| solarizeB | Sol B | 0 | 2 | |
| flowStrength | Flow Strength | 0 | 20 | |
| flowScale | Flow Scale | 40 | 200 | |
| flowSpeed | Flow Speed | 0 | 4 | 0 = noise field frozen |
| flowPulse | Flow Pulse | 0 | 200 | frames back |
| flowImpl | Flow Pull | -1 | 1 | Positive = implode toward centre, negative = explode outward |
| flowSwirl | Flow Swirl | -2 | 2 | Vortex rotation of displacement vectors |
| flowTurb | Flow Turbulence | 0 | 1 | Blends in a second, higher-frequency noise octave |
Use type: "toggle". Value > 0.5 = ON, value ≤ 0.5 = OFF.
| ID | Label |
|---|---|
| corruptOn | Corrupt On |
| glitchStrobe | Legacy Corrupt Strobe Alias |
| baseOn | Base Video |
| seedOnLoad | Seed on Load |
| symOn | Symmetry On |
| clusters | Scanlines On |
| clusterTiles | Clusters On |
| feedbackEnabled | Feedback Transform Enable |
| scanSpinLeft | Scan Spin Left |
| scanSpinRight | Scan Spin Right |
| lumaKeyOn | Luma Key On |
| lumaKeyInvert | Luma Key Invert |
| globalMixOn | Global Mix On |
| solarizeOn | Solarize On |
| solarizeInvert | Solarize Luma Invert |
| flowOn | Flow Warp On |
| trailOn | Trails On |
| loopToggle | Loop Video |
Use type: "select". Value must be one of the listed options exactly.
| ID | Label | Options | |
|---|---|---|---|
| feedbackMotionRange | Feedback Motion Range | classic, wide | |
| corruptUpdateMode | Corrupt Update Mode | continuous, strobe, multigrab | |
| corruptDistribution | Corrupt Layout Compatibility Alias | random, cluster | |
| corruptMaskMode | Corrupt Mask | full, stencil | |
| corruptMaskSide | Corrupt Stencil Side | bright, dark | |
| cluBounds | Corrupt Group Edge | bounce, wrap | |
| globalMixBlend | Global Mix Blend | screen, lighter, lighten, color-dodge, multiply, darken, color-burn, overlay, soft-light, hard-light, difference, exclusion, hue, saturation, color, luminosity, source-over | |
| globalMixCurve | Global Mix Curve | linear, smooth, punch | LINEAR is exact legacy alpha. SMOOTH uses smoothstep. PUNCH raises low/mid fader response without adding a render pass. |
| layerPriority | Layer Priority | scan, glitch | Stable hierarchy only: SCAN TOP or CORRUPT TOP. Legacy neutral/pulse imports migrate to scan. |
| lumaKeyTarget | Luma Key Target | composite, corrupt, scan | COMPOSITE = legacy clean-key overlay; CORRUPT = key Corrupt patches; SCAN = key Scan panels/FIELD objects. Legacy presets default to composite. |
| lumaKeySource | Luma Key Source | clean, stencil | |
| lumaKeyFade | Luma Fade Mode | xfade, add, lighten, darken, multiply, overlay, hardlight, difference | X-FADE and SOFT ADD preserve the existing keyed-fill behavior. The additional HUFF modes apply Canvas blend operations to the same keyed patch. |
| solarizeMode | Solarize Mode | threshold, luma-quantize | |
| symMode | Symmetry Mode | v, h, hv | |
| bgMode | Background | black, white, green, blue |
Use type: "trigger". Any value > 0 fires the click.
| ID | Action |
|---|---|
| refreshBtn | Re-seed glitch randomisation |
| resetMotionBtn | Reset FB X/Y/Z/θ to neutral |
| resetBtn | Reset all parameters to defaults |
| clearBufBtn | Wipe the frame ring and all internal buffers instantly, without resetting parameters |
| scanAngleReset | Set Scan Angle to 0° |
| scanAngle90n | Set Scan Angle to -90° |
| scanAngle90p | Set Scan Angle to 90° |
The dispatch code in index.html resolves param by document.getElementById() generically — any element with an ID can be targeted, not just the effect groups. The transport bar and preset toolbar are valid targets under the same type rules, with the caveats below.
Use type: "trigger". All are <button> elements — .click() fires their existing handler.
| ID | Action |
|---|---|
| playBtn | ▶ Play |
| pauseBtn | ⏸ Pause |
| camStartBtn | ⬤ Cam — start the selected camera |
| camStopBtn | ✕ Cam — stop the camera |
| camRefreshBtn | ↻ — rescan camera devices |
| presetSaveBtn | 💾 Save — save current snapshot under the name in presetName |
| presetLoadBtn | ▶ Load — load the preset selected in presetList |
| presetDeleteBtn | ✕ Delete — delete the preset selected in presetList |
| presetExportBtn | ↑ Export JSON — download all saved presets |
| presetImportBtn | ↓ Import JSON — open the import file picker |
| ID | Label | Min | Max | Notes |
|---|---|---|---|---|
| volumeSlider | Volume | 0 | 1 | Routed through a dedicated Web Audio GainNode |
| seekBar | Seek Position | 0 | 1000 | Position as a fraction of total duration ×1000. Dispatching input seeks the loaded video immediately |
<select> elements, and presetName is a text input. None have a numeric min/max, so the range-dispatch code (which computes el.min/el.max) resolves both to 0 and writes value = "0" — not a valid option for any of these. There is no select mapping type. These four are not usable MIDI/OSC targets with the current dispatch logic; they're operated from the controls UI only.<span> showing M:SS / M:SS — it is not a control and has no param use.