Changelog
[1.0.7] β Beta Release
First public beta. Confirmed building and running on macOS (Apple Silicon + Intel) and Windows (x64).
What is huff
A real-time datamosh and glitch-art desktop application built with Tauri v1 + p5.js. Load a video file or connect a webcam, then sculpt live datamoshing, feedback loops, flow warps, symmetry folds, solarise, scanline corruption, and ghost trails β all streamed to a separate fullscreen output window over an embedded WebSocket relay.
Added
Core effect engine
- Datamosh / glitch tile displacement β temporal tile sampling from a 60-frame ring buffer with configurable depth, scatter, and cluster geometry
- Feedback loop β per-frame zoom, translate, and rotate composited back onto the buffer
- Flow warp β noise-field optical-flow UV distortion with pulse and implosion modes
- Symmetry β vertical, horizontal, or both axes with adjustable position
- Solarise β luminance-threshold colour inversion with per-channel R/G/B tinting
- Scanline bands β drifting horizontal displacement bands sampled from past frames
- Trail accordion β stacked ghost frames for motion-smear effects
- Smear β directional tile stamping with noise-driven or fixed angle
Input
- Camera/webcam live feed via
getUserMedia - Video file loading with drag-and-drop
- Seed buffer on load β primes the frame ring with the first video frame
Output
- Embedded WebSocket relay (port 8787, IPv4 + IPv6) β binary JPEG frames forwarded only to
canvasrole clients - Two-window architecture β controls in
index.html, fullscreen output mirror incanvas.html - Syphon output (macOS) β Metal texture upload via
SyphonMetalServerObjC FFI; activated from the controls panel; visible ashuffto any Syphon client (Resolume, VDMX, MadMapper, CoGe, etc.) - Spout output (Windows) β SpoutDX D3D11 pixel upload via
spoutdx_send_imageC-ABI bridge; activated from the controls panel; visible ashuffto any Spout2 receiver (Resolume Arena, TouchDesigner, VDMX, etc.)
MIDI
- Full MIDI input via
midirβ note on/off, CC, pitch bend, aftertouch, program change - Connect by port name or index via Tauri commands (
connect_midi_port_by_name,list_midi_ports) - MIDI events emitted to the frontend as
midi-eventTauri events - Bundled mapping files for Korg nanoKONTROL1, nanoKONTROL2, and a generic 16-control layout
OSC
- UDP OSC listener on port 9000 via
rosc - Messages emitted to the frontend as
osc-messageTauri events with normalised float values - Bundled TouchOSC layout files for effects and mixer control
Presets
- 7 factory presets:
clean,chaos,melt,mirror,pulse,solar,vapor - JSON preset format documented in
src/midi/FORMAT.mdandsrc/osc/FORMAT.md
Build system
- macOS: Universal binary (ARM64 + x64) via
lipo, packaged as DMG βscripts/create_universal_dmg.sh - Windows: EXE + NSIS installer + MSI + portable ZIP with SHA256 checksums β
scripts/tauri-build.cjs - Spout bridge compiled at build time via CMake from
src-tauri/native/spout_bridge/against the bundled Spout2 SDK
Platform notes
macOS
- Syphon.framework bundled in
src-tauri/frameworks/and declared intauri.conf.jsonbundle.macOS.frameworksβ no separate install required - Camera entitlement present in
src-tauri/entitlements.plist; works in dev mode without codesigning - Universal DMG tested on Apple Silicon (M-series) and Intel
Windows
- Spout requires the Spout2 runtime installed on the target machine
- WebView2 runtime required on Windows < 11
- SmartScreen warning expected on unsigned builds β click More info β Run anyway
spout_bridge.dllcopied next to the executable automatically at build time
Known limitations
- Syphon uses a CPU round-trip:
getImageData()in JS β binary WS frame β Metal texture upload in Rust. Frame rate is throttled to 30 fps on the JS side to limit readback cost. - Spout uses the same CPU path via
spoutdx_send_image. GPU-direct zero-copy is not implemented in this release. - Frame ring memory is capped at 256 MB regardless of quality setting; at 4K resolution the effective ring depth is reduced.
- Linux builds are untested in this release β the Tauri scaffolding supports it but no binary has been verified.
Dependencies
| Crate | Version | Purpose |
|---|---|---|
| tauri | 1.x | App shell, WebView, two-window management |
| tokio | 1.x | Async runtime |
| tokio-tungstenite | 0.21 | Embedded WebSocket relay |
| midir | 0.9 | MIDI input |
| rosc | 0.10 | OSC UDP listener |
| objc / objc-foundation | 0.2 / 0.1 | macOS Syphon ObjC FFI (macOS only) |
| cmake | 0.1 | Spout bridge build (Windows only) |
Frontend: p5.js (bundled locally, no CDN dependency).
How to build from source
# Install dependencies
npm install
# Development (hot-reload)
npm run dev
# Production
npm run build # macOS: Universal DMG
npx tauri build # Windows/Linux: platform native installerFull build instructions in README.md.