■ huff Home How It Works Install Interface MIDI OSC Output
--:--:--
Parameter Reference
_

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.


Range Parameters

IDLabelMinMaxNotes
baseMixBase Mix01
seedSeed199999Randomisation seed. Same seed = same output
historyFramesHistory4dynamic ≤120Requested decoded-frame history depth. Runtime clamps to the 192 MiB FrameRing budget; 1080p max is 24 RGBA frames.
qualityLegacy History Alias03Hidden compatibility ID for old presets/MIDI/OSC maps. Mirrors HISTORY only; no longer changes preview JPEG quality or FPS.
feedbackFEEDBACK · RETURN03Original performance parameter preserved; renderer clamps redraw alpha to 1. The semantic suffix explains the visible action without replacing the ID/range.
persistencePERSISTENCE · MEMORY010Original persistent-buffer decay parameter; independent of Feedback Enable/Strobe.
feedbackEnabledFeedback Enableoff/onBypasses only the Feedback transform and Restore layer; does not rewrite or gate PERSISTENCE.
feedbackStrobeFB STROBEoff/onOptional: gates only the established Feedback transform; does not gate PERSISTENCE.
feedbackStrobeEveryINTERVAL130Decoded source frames between Feedback-transform updates while FB STROBE is on.
feedbackRestoreRESTORE01Optional clean-source catch-up overlay; 0 preserves legacy behavior.
fbXFB X · Drift-1 classic / -8 wide1 classic / 8 wideSame original parameter. RANGE only changes UI limits; CLASSIC is the default.
fbYFB Y · Drift-1 classic / -8 wide1 classic / 8 wideSame original parameter. RANGE only changes UI limits; CLASSIC is the default.
fbZFB Z · Zoom0.98 classic / 0.95 wide1.03 classic / 1.05 wideSame original parameter; 1.0 = neutral zoom.
fbThetaFB θ · Rotate-2 classic / -5 wide2 classic / 5 wideSame original parameter; degrees per Feedback update.
depthCorrupt Age00.5How far back into the bounded FrameRing Corrupt may borrow patches.
depthScatterAge Spread01Variation in borrowed-frame age between patches.
corruptAmount07Relative number of corruption targets.
corruptDriftAmount Drift01Slowly varies the active target count.
blockGrid1502000Candidate-region spacing in pixels.
glitchSizePatch Size160Displayed as a multiplier of the Grid cell.
spatialGapGap0200Minimum spacing between accepted target centers.
glitchJitterJitter01Random positional displacement of patches.
glitchAlphaMix01Strength of Corrupt material.
glitchSmearRepeats0200Additional copies drawn along Direction.
glitchSmearAngleDirection03600 is displayed as AUTO and uses the existing noise-driven direction.
glitchStrobeEveryStrobe Interval130Decoded source frames; used only in STROBE mode.
corruptHoldFramesMultiGrab Hold160Decoded frames held before the live-update window.
corruptLiveFramesMultiGrab Live130Decoded frames during which Corrupt updates before the next hold.
corruptMaskThresholdStencil Level0255Threshold for the already-captured Luma Stencil when Corrupt Mask is STENCIL.
corruptSpeedRandom Speed04Overall 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.
glitchBaseXPosition X-10001000Static horizontal destination offset in pixels.
glitchBaseYPosition Y-10001000Static vertical destination offset in pixels.
glitchBaseZPosition Z-11Canvas2D 2.5D depth: negative recedes toward frame center; positive enlarges and projects outward.
corruptMoveXMove X-12001200Continuous horizontal Corrupt travel in pixels/second, scaled by master Speed.
corruptMoveYMove Y-12001200Continuous vertical Corrupt travel in pixels/second, scaled by master Speed.
corruptMoveZMove Z-1.51.5Continuous near/far 2.5D travel; bounces at the depth limits and is scaled by master Speed.
clusterMasterSpeedCluster Speed04Overall 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.
cluCentersGroups120Number of moving Corrupt groups in CLUSTER layout.
cluBiasGroup Amount01Share of total targets assigned to groups.
cluSpreadGroup Size1300Maximum group radius in pixels.
cluMinSpreadHollow0150Empty inner radius around each group center.
cluCohereShape Hold010 boils/re-rolls patch positions; 1 locks the internal constellation.
cluBreathePulse Size00.9Expands/contracts group radius using the independent Cluster Speed clock.
cluDepthZ Spread01Amount of per-group Z separation. Zero keeps groups flat; higher values spread group bodies through simulated depth.
cluMoveXGroup Move X-600600Direct horizontal group-center travel in pixels/second.
cluMoveYGroup Move Y-600600Direct vertical group-center travel in pixels/second.
cluMoveZGroup Move Z-1.51.5Direct near/far group-center travel in normalized depth units/second.
cluSpeedOrganic Speed010Additional noise-steered travel of group centers; distinct from direct Group XYZ movement.
cluSteerTurn Rate010Rate at which group heading changes.
cluDriftWander05Noise-driven extra movement.
cluSpeedVarSpeed Variation02Difference in travel speed between groups.
cluPulseKick010Periodic random velocity impulse.
cluInertiaMomentum0.010.99Persistence of group velocity.
glitchSpeedLegacy Corrupt Speed05Compatibility parameter. The UI presents FIELD RATE over SPEED × FINE × MULT²; the separate master Corrupt SPEED scales autonomous motion without rewriting this legacy contract.
glitchSpeedFineLegacy Fine Speed010Compatibility parameter for old presets/MIDI/OSC maps.
glitchSpeedMulLegacy Speed Mult010Compatibility parameter; old runtime uses the multiplier squared.
abMixA/B Mix010 = Corrupt priority, 1 = Scanlines priority. Recessive side floors at 0.35
lumaKeyABLuma Key Clip01Threshold for the luminance matte. With TARGET=SCAN/CORRUPT it gates those effect objects directly; COMPOSITE preserves the legacy clean-key overlay.
lumaKeyMixLuma Key Mix01Overall key strength. Targeted SCAN/CORRUPT modes use object-level opacity/eligibility rather than a full-resolution intermediate key layer.
lumaKeyGainLuma Key Gain0.2541.00 preserves the established 64-level rolloff; higher values harden the edge, lower values soften it.
lumaKeyCleanupLuma Cleanup01INDIGO-inspired low-end key cleanup; removes low-level leakage and slight shadows.
lumaKeyDensityLuma Density01INDIGO-inspired high-end key density; pushes strong foreground toward full opacity.
trailLayersTrail Layers04
trailDepthTrail Depth01
trailLumaKeyTrail Luma Key010 = off
symPosSym Position010.5 = centre
scanAngleScan Angle-180180degrees, step 0.5. 0 = horizontal, ±90 = vertical
scanFocusScan Focus01Biases band distribution along the rotated span. 0.5 = even
scanRollScan Roll-22Continuous scroll of bands, independent of Drift
scanSpinSpeedScan Spin Speed0.110Only active when Spin L or Spin R is on
scanShiftScan Shift00.5
scanDriftScan Drift03Dual-frequency: slow wander + fast jitter
scanSpeedScan Speed05Single 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.
scanPlaceXScan Pos X-10001000Pixels; translates the complete existing effect without changing its band generator.
scanPlaceYScan Pos Y-10001000Pixels; translates the complete existing effect without changing its band generator.
scanZoomScan Zoom0.254Panel-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.
scanPanelLayoutPanel Layoutbands / fieldBANDS preserves the existing band lanes. FIELD distributes those same panels independently in X/Y/apparent Z without changing source or temporal behavior.
scanFieldSpreadXField Spread X01Horizontal per-panel distribution amount.
scanFieldSpreadYField Spread Y01Vertical per-panel distribution amount.
scanFieldSpreadZField Spread Z01Per-panel apparent-depth/local-zoom spread around the general Scan Zoom.
scanFieldSizeVarField Size Variation01Independent panel-size variation.
scanFieldDriftField Drift01Per-panel X/Y drift amount; rate is owned by the single Scan Speed control.
scanFieldDepthDriftField Depth Drift01Per-panel apparent-Z drift amount; rate is owned by the single Scan Speed control.
scanMoveXScan Move X-10001000Pixels/second, scaled by Scan Speed.
scanMoveYScan Move Y-10001000Pixels/second, scaled by Scan Speed.
scanMoveZScan Move Z-22Panel-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×.
scanGapScan Gap0200
scanSkewScan Skew-11
scanAlphaScan Opacity01
clusterCountScan Bands150Displaces current frame — no ring sampling
clusterRadiusBand Size1120
globalMixAmtGlobal Mix Amount01Global Mix fader before the selected response curve.
solarizeThreshSol Thresh01THRESHOLD mode only.
solarizeLevelSol Level0100LUMA QUANTIZE coarseness; 99 = two luma levels, 100 = luma removed.
solarizeSoftSol Soft0100LUMA QUANTIZE transition softness.
solarizeFluiditySol Fluidity0100Solarize temporal response; 100 = exact instantaneous compatibility path, lower = slower continuous slew.
solarizeAmtSol Amount01
solarizeRSol R02
solarizeGSol G02
solarizeBSol B02
flowStrengthFlow Strength020
flowScaleFlow Scale40200
flowSpeedFlow Speed040 = noise field frozen
flowPulseFlow Pulse0200frames back
flowImplFlow Pull-11Positive = implode toward centre, negative = explode outward
flowSwirlFlow Swirl-22Vortex rotation of displacement vectors
flowTurbFlow Turbulence01Blends in a second, higher-frequency noise octave

Toggle Parameters

Use type: "toggle". Value > 0.5 = ON, value ≤ 0.5 = OFF.

IDLabel
corruptOnCorrupt On
glitchStrobeLegacy Corrupt Strobe Alias
baseOnBase Video
seedOnLoadSeed on Load
symOnSymmetry On
clustersScanlines On
clusterTilesClusters On
feedbackEnabledFeedback Transform Enable
scanSpinLeftScan Spin Left
scanSpinRightScan Spin Right
lumaKeyOnLuma Key On
lumaKeyInvertLuma Key Invert
globalMixOnGlobal Mix On
solarizeOnSolarize On
solarizeInvertSolarize Luma Invert
flowOnFlow Warp On
trailOnTrails On
loopToggleLoop Video

Select Parameters

Use type: "select". Value must be one of the listed options exactly.

IDLabelOptions
feedbackMotionRangeFeedback Motion Rangeclassic, wide
corruptUpdateModeCorrupt Update Modecontinuous, strobe, multigrab
corruptDistributionCorrupt Layout Compatibility Aliasrandom, cluster
corruptMaskModeCorrupt Maskfull, stencil
corruptMaskSideCorrupt Stencil Sidebright, dark
cluBoundsCorrupt Group Edgebounce, wrap
globalMixBlendGlobal Mix Blendscreen, lighter, lighten, color-dodge, multiply, darken, color-burn, overlay, soft-light, hard-light, difference, exclusion, hue, saturation, color, luminosity, source-over
globalMixCurveGlobal Mix Curvelinear, smooth, punchLINEAR is exact legacy alpha. SMOOTH uses smoothstep. PUNCH raises low/mid fader response without adding a render pass.
layerPriorityLayer Priorityscan, glitchStable hierarchy only: SCAN TOP or CORRUPT TOP. Legacy neutral/pulse imports migrate to scan.
lumaKeyTargetLuma Key Targetcomposite, corrupt, scanCOMPOSITE = legacy clean-key overlay; CORRUPT = key Corrupt patches; SCAN = key Scan panels/FIELD objects. Legacy presets default to composite.
lumaKeySourceLuma Key Sourceclean, stencil
lumaKeyFadeLuma Fade Modexfade, add, lighten, darken, multiply, overlay, hardlight, differenceX-FADE and SOFT ADD preserve the existing keyed-fill behavior. The additional HUFF modes apply Canvas blend operations to the same keyed patch.
solarizeModeSolarize Modethreshold, luma-quantize
symModeSymmetry Modev, h, hv
bgModeBackgroundblack, white, green, blue

Trigger Parameters

Use type: "trigger". Any value > 0 fires the click.

IDAction
refreshBtnRe-seed glitch randomisation
resetMotionBtnReset FB X/Y/Z/θ to neutral
resetBtnReset all parameters to defaults
clearBufBtnWipe the frame ring and all internal buffers instantly, without resetting parameters
scanAngleResetSet Scan Angle to 0°
scanAngle90nSet Scan Angle to -90°
scanAngle90pSet Scan Angle to 90°

Transport & Preset Controls

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.

Mappable as Trigger

Use type: "trigger". All are <button> elements — .click() fires their existing handler.

IDAction
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

Mappable as Range

IDLabelMinMaxNotes
volumeSliderVolume01Routed through a dedicated Web Audio GainNode
seekBarSeek Position01000Position as a fraction of total duration ×1000. Dispatching input seeks the loaded video immediately

Not Practically Mappable

playbackRate, cams, and presetList are <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.

timeDisplay is a read-only <span> showing M:SS / M:SS — it is not a control and has no param use.

Notes on Ranges

MIDI maps use cc: 0–127, mapped linearly to the parameter's min–max. You do not specify the output range in a MIDI map.

OSC maps use inputMin/inputMax to tell huff what range your sender outputs. TouchOSC faders: inputMin: 0, inputMax: 1. MIDI-to-OSC bridges: inputMin: 0, inputMax: 127.

fbZ has a narrow range (0.98–1.03) because zoom is applied multiplicatively every frame. Even 1.005 produces dramatic zoom over a few seconds of feedback.

historyFrames is the public temporal-history control. HUFF Classic clamps the requested history depth to a strict 192 MiB FrameRing budget. At 1920×1080 this is 24 RGBA snapshots. quality remains only as a hidden compatibility alias for older maps/presets and no longer controls mirror-preview fidelity.

processResolution selects AUTO, 720P, or 1080P processing. Classic never exceeds the 1080p-class ceiling; HUFF HD owns 4K+ processing. sourceFit selects STRETCH (legacy), FIT, FILL, or 1:1 mapping of the decoded source into that processing canvas.

clusterCount (Scan Bands) displaces the current video frame spatially — it does not sample from the ring buffer. There is no temporal artifact; bands are smooth even with fast camera movement.

abMix and lumaKeyAB are layer-priority mixes, not crossfades — the recessive side never drops below a 0.35 floor, so both contributors always remain visible.

scanSpinSpeed only has an effect while scanSpinLeft or scanSpinRight is on; otherwise the static scanAngle slider is used.

cluSpeedVar and cluPulse are not mappable via trigger type — use range (0–2 and 0–10 respectively).