Sandin FX output: a long luminous spiral born from video feedback on a dark background
Sandin FX · Real time · 60 fps

Sandin FX

A video effects synthesizer that is played live, inspired by the Sandin Image Processor of 1973. "Drawer" modules that you stack, and GRASS: a stage you code yourself in Metal.

Lab.Mescalina / Sandin FX
Photograph of the Sandin Image Processor: modular analog video synthesizer with control front panels
Sandin Image Processor — Dan Sandin, 1973

The original machine

The Sandin Image Processor (Dan Sandin, Chicago, 1973) is a modular analog video synthesizer: a series of drawers — oscillators, colorizer, comparator, adder/multiplier — linked by patch cords, that transform a signal live.

Sandin published its plans as open access: anyone can build it. Paired with Tom DeFanti's GRASS language (1974), it makes the image programmable. It is one of the birthplaces of video art.

The recreation

Sandin FX applies a chain of modules in real time to any video — or to the live webcam — and exports the result. Everything is real time at 60 fps; the export is deterministic, locked to the timecode.

Eleven presets, an A→B morph between your settings, three internal LFOs, the automation of your gestures replayed on export, and audio reactivity that listens to the mic only if you allow it.

App interface is in French — feature names kept in French

The features

Each module takes up a "drawer" of the Sandin IP — or adds what the analog world could not do.

≈ Rutt/Etra · 1972

Rutt / Etra

Bright areas lift the scan lines: the image becomes a luminous wireframe relief, lines displaced and off-screen black.

≈ Feedback

Feedback

Reinjection of the previous image — zoom, rotation, movable center, rotating hue, 4 blend modes, RGB separation of the echoes. From a subtle trail to a spiraling mandala.

≈ Color Encoder

Colorizer

Luminance drives a false-color ramp — 7 palettes including Spiral, Julia and Quaternion, drawn from Sandin's works, with animated drift.

≈ Function Generator

Shapes — generator

Objects are born, grow and fade over the image; random trajectory or golden spiral. Deterministic — identical on export.

≈ Comparator

Comparator

Binary keying at a luminance threshold, with adjustable transition softness.

≈ Oscillators

Oscillators / sync

Horizontal rippling of the image and line jitter like a desynchronized video recorder.

beyond analog

Liquid warp · Kaleidoscope

The "rubber sheet" — displacement by fluid noise — and an angular fold into N sectors placed at the head of the chain: everything downstream operates in the folded space.

— CRT

Glow · Strobe · Artifacts

Phosphor bloom, temporal freeze of the image, scanlines, noise, vignette and CRT mask (RGB phosphor triads).

≈ GRASS · Tom DeFanti 1974

GRASS — your code

A stage coded by you, in Metal, hot-compiled and inserted at the head of the chain. Syntax highlighting, line numbers, examples included. The active code is persisted and replayed on export.

Gallery

Outputs rendered by the engine, and the interface. Click to enlarge.

Technical specifications
PlatformsmacOS 14+ — Apple Silicon & Intel (Metal). Linux — C++17, SDL2, OpenGL 3.3, Dear ImGui, FFmpeg, RtMidi.
TechniqueSwift · SwiftUI · Metal. A single fragment shader, compiled at runtime.
InputsVideo file (loop, In/Out points) · live webcam camera.
Real time60 frames/second; full-screen preview and output window.
ExportH.264 · ProRes 422 · ProRes 4444 — original audio preserved, deterministic render (timecode-locked).
Camera RECReal-time recording in .mov (H.264), optional mic.
Modulation3 internal LFOs · 3-band audio reactivity (mic opt-in) · gestures replayed on export.
GRASSMetal editor, syntax highlighting, hot compilation, persistent code.
Presets11 presets + "My settings" — one JSON per setting, GRASS code included.
ControlMIDI Learn; mappings saved in JSON.
FilesOpen JSON, readable and copyable — shared with the Linux version.

Download

macOS 14+ — Apple Silicon & Intel Linux — SDL2 · OpenGL · FFmpeg