■ 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
qualityQuality03Scales ring depth + performance
feedbackFeedback03Values > 1 over-expose
persistencePersistence010
fbXFB X-11
fbYFB Y-11
fbZFB Z0.981.031.0 = no zoom
fbThetaFB θ-22degrees/frame
depthDepth00.5
depthScatterScatter01
corruptCorrupt %07
corruptDriftCorrupt Drift01
blockPixel Size1502000
glitchSizeGlitch Size160
glitchAlphaTile Opacity01
glitchJitterJitter01
glitchSmearSmear0200
glitchSmearAngleSmear Angle03600 = noise-driven
glitchSpeedGlitch Speed05
glitchSpeedFineFine Speed010
glitchSpeedMulSpeed Mult010
glitchBaseXGlitch X-10001000
glitchBaseYGlitch Y-10001000
abMixA/B Mix010 = Glitch priority, 1 = Scanlines priority. Recessive side floors at 0.35
lumaKeyABLuma Key A/B010 = clean dominant, 1 = glitch dominant. Floors at 0.35
lumaKeyMixLuma Key Mix01Overall strength of the pipeline luma key
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 Speed05Independent of glitch speed
scanGapScan Gap0200
scanSkewScan Skew-11
scanAlphaScan Opacity01
clusterCountScan Bands150Displaces current frame — no ring sampling
clusterRadiusBand Size1120
cluCentersClu Centers120
cluSpreadClu Spread1300
cluMinSpreadClu Min Rad0150
spatialGapSpatial Gap0200
cluBiasClu Bias01
cluDriftClu Drift05
cluSpeedClu Speed010Step 0.01. 0 = centres glide to a stop and hold
cluSpeedVarClu Spd Var02Per-centre speed multiplier variance
cluPulseClu Pulse010Periodic velocity burst frequency
cluInertiaClu Inertia0.010.99
globalMixAmtGlobal Mix Amount01Opacity of base video in the blend
solarizeThreshSol Thresh01
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
corruptOnGlitch On
baseOnBase Video
seedOnLoadSeed on Load
symOnSymmetry On
clustersScanlines On
clusterTilesCluster Tiles On
scanSpinLeftScan Spin Left
scanSpinRightScan Spin Right
lumaKeyOnLuma Key On
lumaKeyInvertLuma Key Invert
globalMixOnGlobal Mix On
solarizeOnSolarize On
flowOnFlow Warp On
trailOnTrails On
loopToggleLoop Video

Select Parameters

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

IDLabelOptions
globalMixBlendGlobal Mix Blendscreen, multiply, overlay, difference, hard-light, lighter
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.

quality range is 0–3 but 0–1 is the practical working range. Values > 1 increase ring depth beyond 60 frames and can cause memory pressure at high resolutions.

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).