Skip to content

πŸš€ huff --- beta-v1.0.7

Latest

Choose a tag to compare

@cskonopka cskonopka released this 16 Mar 19:46
· 88 commits to beta since this release

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 canvas role clients
  • Two-window architecture β€” controls in index.html, fullscreen output mirror in canvas.html
  • Syphon output (macOS) β€” Metal texture upload via SyphonMetalServer ObjC FFI; activated from the controls panel; visible as huff to any Syphon client (Resolume, VDMX, MadMapper, CoGe, etc.)
  • Spout output (Windows) β€” SpoutDX D3D11 pixel upload via spoutdx_send_image C-ABI bridge; activated from the controls panel; visible as huff to 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-event Tauri 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-message Tauri 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.md and src/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 in tauri.conf.json bundle.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.dll copied 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 installer

Full build instructions in README.md.