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

huff opens two windows. The controls window is your workspace. The canvas window is the fullscreen output that receives processed frames over the embedded WebSocket relay.

Controls are organised into collapsible groups. Click a group label to collapse or expand it. Collapsing a group does not disable its effects — use the ON toggle inside each group for that.


Source Group

ControlDescription
FileLoad a video file. Drag-and-drop also works. MP4, MOV, WebM, and any format your system decoder handles.
CameraSelect a webcam from the dropdown. Click ↻ Refresh to scan for newly connected devices.
▶ Play / ⏸ PauseToggle video playback. Resuming after pause restarts the frame pump automatically.
Seek BarScrub to any position in the loaded file. Uses fast keyframe seeking while dragging for low latency; playback resumes automatically on release.
Time DisplayShows current position and total duration as M:SS / M:SS.
RATEPlayback speed: 0.25×, 0.5×, 1×, 2×, 4×. Applies immediately without reloading.
LOOPLoop the file continuously. Unchecking plays once and stops.
VOLOutput volume. Drag to zero to mute.
BASE VIDEOShow the raw source frame underneath the glitch output.
BASE MIXOpacity of the base video layer. 0 = fully glitched output, 1 = raw source on top.
BASE BGBackground fill colour when no tile covers a pixel: Black, Green (chroma key), Blue, or White.
SEED ON LOADRandomise the seed each time a new file is loaded, giving every clip a visually distinct glitch pattern.
QUALITYScales the frame ring depth (0 → 4 frames, 1 → 60 frames). The single most impactful performance lever.
SEEDRandomisation seed. Same seed + parameters = same output.

Glitch Group

The core datamosh engine. Reads tiles from past frames and blits them onto the current frame at noise-driven positions.

ControlRangeDescription
ONtoggleEnable/disable the glitch pass entirely.
CORRUPT %0–7Fraction of grid tiles displaced per frame. 0 = nothing moves. 7 = every tile replaced.
CORRUPT DRIFT0–1Noise-driven oscillation of corruption density. The percentage breathes slowly when > 0.
PIXEL SIZE150–2000Tile size in pixels. Larger = blockier datamosh. Smaller = fine grain displacement.
DEPTH0–0.5How far back in the ring tiles are sampled.
DEPTH SCATTER0–1Per-tile randomisation of the lookback index.
GLITCH SIZE1–60Spatial scaling of each tile relative to PIXEL SIZE.
OPACITY0–1Alpha of each blit tile.
JITTER0–1Magnitude of per-tile position noise.
SMEAR0–200Duplicate stamps trailed behind each tile.
SMEAR ANGLE0–360Direction of the smear trail. 0 = noise-driven per frame.
SPEED0–10Phase velocity of the noise field driving tile selection.
FINE / MULT0–10Secondary speed multipliers.
GLITCH X / Y-1–1Base offset applied to all tile destination positions.

Feedback Group

ControlRangeDescription
FEEDBACK0–3Contribution of the previous frame. Values > 1 over-expose.
PERSISTENCE0–10Decay rate between frames. Higher = trails linger longer.
FB X-1–1Horizontal translation per frame. Creates lateral drift.
FB Y-1–1Vertical translation per frame.
FB Z0.98–1.03Zoom per frame. < 1 = implode inward. > 1 = explode outward.
FB θ-2–2Rotation in degrees per frame. Creates spinning feedback tunnels.
↺ Reset MotionbuttonReturns FB X/Y/Z/θ to neutral (0, 0, 1.0, 0).

Scanlines Group

Displaces horizontal bands of the current video frame spatially — no temporal sampling from the ring. This means scanlines are smooth and follow live motion without any buffer-trail artifact. The bands shift the current content left or right; they do not pull from historical frames.

ControlRangeDescription
ONtoggleEnable/disable.
BANDS0–50Number of active displacement bands per frame.
HEIGHT0–120Base height of each band in pixels.
RAND SIZEtoggleRandomise band height per band. Heights are stable per video frame — no 60fps flickering.
SHIFT0–0.5Maximum horizontal displacement as a fraction of canvas width.
SKEW-1–1Position-based horizontal offset making bands angle diagonally.
DRIFT0–3Vertical drift speed of band positions.
SPEED0–5Speed of band animation. Operates independently of glitch speed — works even with glitch off.
GAP0–200Snaps band positions to a regular grid spacing.
OPACITY0–1Alpha of displaced band content.

Clusters Group

Biases glitch tile placement toward moving focal points (cluster centres) rather than scattering tiles randomly. Glitch must also be ON. Each centre has its own physics simulation with inertia, steering, and optional velocity bursts.

ControlRangeDescription
ONtoggleEnable cluster-biased tile placement. Glitch must also be ON.
CENTERS1–20Number of cluster centres. Each is an independent physics body that tiles gravitate toward.
SPREAD1–300Radius in pixels around each centre within which tiles are distributed.
MIN RAD0–150Minimum distance from centre — creates a hollow ring of tiles.
SPATIAL GAP0–200Minimum pixel distance between any two tiles. Prevents overlap.
BIAS0–1Fraction of tiles forced into clusters. Remainder placed randomly across the canvas.
DRIFT0–5Adds noise-driven wandering to centre positions.
SPEED0–40Speed of cluster centre physics simulation. 0 = static centres.
SPD VAR0–2Per-centre speed variation. Each centre gets its own speed multiplier so they move at different rates. 0 = all same speed.
PULSE0–10Periodic velocity kick — centres suddenly burst in a random direction then settle. Higher = more frequent bursts.
INERTIA0.01–0.99Momentum of cluster centres. High = smooth gliding. Low = snappy response to steering.

Global Key Group

A final composite pass applied after all effects, between the clean base video and the fully processed output. Two modes: Luma uses the luminance of the base video to control where processed output shows through. Blend composites layers using a GPU blend operation with no pixel work.

ControlRange / OptionsDescription
MODEOFF / LUMA / BLENDOFF — disabled. LUMA — luminance of the base video gates how much of the processed output shows through; bright areas reveal the effect, dark areas stay clean (flip with Invert). BLEND — composites base over processed using a CSS blend operation; GPU-accelerated, no pixel work.
MIX0–1Overall strength of the key. 0 = no effect, 1 = full.
THRESH0–1Luma mode only. Luminance threshold. 0 = nothing revealed, 1 = everything revealed. Soft rolloff prevents hard edges.
INVERTtoggleLuma mode only. Flips which side of the threshold reveals the processed output.
BLENDSCREEN / MULTIPLY / OVERLAY / DIFFERENCE / HARD LIGHT / ADDBlend mode only. SCREEN brightens. MULTIPLY darkens. OVERLAY adds contrast. DIFFERENCE inverts where layers differ. ADD saturates quickly.

Solarize Group

ControlRangeDescription
ONtoggleEnable/disable.
THRESH0–1Luminance threshold. Pixels above this are inverted.
AMOUNT0–1Inversion strength.
SOL R / G / B0–2Per-channel multiplier applied after inversion. > 1 over-exposes that channel.

Flow Warp Group

ControlRangeDescription
ONtoggleEnable/disable.
STRENGTH0–20Maximum pixel displacement.
SCALE40–200Spatial scale of the noise field.
PULSE0–200Frames back in the ring to sample during warp. Adds temporal smear.
IMPLODE0–1Centripetal pull toward the canvas centre.

Symmetry Group

ControlOptionsDescription
SYMMtoggleEnable/disable.
MODEV / H / HVVertical mirror, horizontal mirror, or both.
SYM POS0–1Position of the mirror axis. 0.5 = centred.

Buffer Trails Group

ControlRangeDescription
ONtoggleEnable/disable.
TRAIL LAYERS0–10Number of ghost frames composited.
TRAIL DEPTH0–1How far back in the ring to pull trail frames from.
LUMA KEY0–1Drops dark pixels from trail frames. Only bright areas trail.

Presets

Presets save a complete snapshot of all parameter values as a JSON file you download to disk. Load them back at any time — across sessions, machines, or shared with collaborators. The previous localStorage-based system has been replaced.

ActionDescription
💾 Save PresetDownloads a timestamped .json file containing all current parameter values.
📂 Load Preset…Opens a file picker. Select a previously saved .json preset. All controls update immediately.
Ctrl+Z / Cmd+Z10-step undo. Steps back through parameter changes one snapshot at a time. Loading a preset counts as one undo step.

Keyboard Shortcuts

KeyAction
PToggle the control panel. A pill indicator appears at the bottom of the screen reading "UI hidden · P to show" so you can always get back.
FToggle fullscreen.
Ctrl+Z / Cmd+ZUndo the last parameter change. Up to 10 steps.