■ 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.
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 LOADPrime the frame ring with the first video frame immediately on file load.
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

ControlRangeDescription
ONtoggleEnable/disable.
BANDS0–30Number of active displacement bands per frame.
BAND HEIGHT0–1Relative height of each band.
RAND SIZEtoggleRandomise band height per band.
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–5Overall speed multiplier for band drift.
GAP0–200Snaps band positions to a regular grid spacing.
OPACITY0–1Alpha of displaced band content.

Clusters Group

ControlRangeDescription
ONtoggleEnable cluster-biased tile placement. Glitch must also be ON.
CENTERS1–20Number of cluster centres.
SPREAD1–300Radius around each centre within which tiles are distributed.
MIN RAD0–150Minimum distance from centre — creates a hollow ring.
SPATIAL GAP0–200Minimum pixel distance between any two tiles. Prevents overlap.
BIAS0–1Fraction of tiles forced into clusters. Remainder placed randomly.
DRIFT0–5Noise-driven movement of cluster centre positions.
SPEED0–15Speed of cluster centre physics simulation. 0 = static.
INERTIA0.01–0.99Momentum of cluster centres. High = smooth. Low = jittery.

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.

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 to localStorage. They survive app restarts.

PresetCharacter
cleanAll effects off — raw source passthrough
chaosHigh corruption, deep ring, fast clusters
meltSlow feedback zoom with deep scanlines
mirrorSymmetry-forward with light solarise
pulseRhythmic cluster glitch with trails
solarSolarise dominant, flow warp texture
vaporSoft trails, slow feedback rotation