
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.
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.
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
Each module takes up a "drawer" of the Sandin IP — or adds what the analog world could not do.
Bright areas lift the scan lines: the image becomes a luminous wireframe relief, lines displaced and off-screen black.
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.
Luminance drives a false-color ramp — 7 palettes including Spiral, Julia and Quaternion, drawn from Sandin's works, with animated drift.
Objects are born, grow and fade over the image; random trajectory or golden spiral. Deterministic — identical on export.
Binary keying at a luminance threshold, with adjustable transition softness.
Horizontal rippling of the image and line jitter like a desynchronized video recorder.
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.
Phosphor bloom, temporal freeze of the image, scanlines, noise, vignette and CRT mask (RGB phosphor triads).
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.
Outputs rendered by the engine, and the interface. Click to enlarge.








| Platforms | macOS 14+ — Apple Silicon & Intel (Metal). Linux — C++17, SDL2, OpenGL 3.3, Dear ImGui, FFmpeg, RtMidi. |
|---|---|
| Technique | Swift · SwiftUI · Metal. A single fragment shader, compiled at runtime. |
| Inputs | Video file (loop, In/Out points) · live webcam camera. |
| Real time | 60 frames/second; full-screen preview and output window. |
| Export | H.264 · ProRes 422 · ProRes 4444 — original audio preserved, deterministic render (timecode-locked). |
| Camera REC | Real-time recording in .mov (H.264), optional mic. |
| Modulation | 3 internal LFOs · 3-band audio reactivity (mic opt-in) · gestures replayed on export. |
| GRASS | Metal editor, syntax highlighting, hot compilation, persistent code. |
| Presets | 11 presets + "My settings" — one JSON per setting, GRASS code included. |
| Control | MIDI Learn; mappings saved in JSON. |
| Files | Open JSON, readable and copyable — shared with the Linux version. |