gif gif gif

36 HP · video synthesizer

A gif looper that plays like an instrument. Pitch CV picks the gif, a semitone each. Twenty-four knobs and nine CV inputs bend time, colour and space, and a real motion-vector datamosh tears the picture apart and lets it heal. Composite out, no screens: the video is the display.

The GIF GIF GIF panel: gold rings of GIFGIFGIF text around the GIF jack, gif gif gif at the top and daylight noise at the bottom, its 24 knobs, three encoders and twelve jacks labelled in white.

Turn a knob: drag it, roll the wheel over it or use the arrow keys; a double click puts it back. Turn CLIP or PALETTE (drag or the arrow keys) for the gif and its colours, and push CLIP to restart the loop. Press FLUSH or HOLD.

VIDEO · composite out · 320 × 240

gif CLIP picks it on the module

example patches

The module's own shaders and datamosh, running in your browser.

The panel

Four lanes of knobs either side of a spine. A CV jack sits below the knob it adds to, and ±5 V covers the knob's whole travel. FLUSH and HOLD are triggers, marked with a small pulse, and they catch a pulse of any length.

MOSH

BEND corrupts the gif's compressed data and decodes it anyway; the same setting always breaks it the same way. SCAN moves where the damage starts. KILL, BLOOM and STEER drive the datamosh, FLUSH heals it, and GLITCH slides bands of the picture sideways.

CRACK → BEND · RUIN → KILL · FLUSH

TIME

CLIP picks the gif and LENGTH how much of it loops. MODE plays it forward, reversed, ping-pong or random, and SPEED runs it from stopped to 4×. SCRUB slides the frame, ECHO leaves trails, and PIXEL coarsens the picture.

LURCH → SPEED · RIFFLE → SCRUB

SPINE

GIF picks the gif at 1 V/oct, a semitone a gif, round the bank, and FRAME picks the frame: 0 to +5 V runs through the whole gif, and with SPEED at zero it is the playhead. BANK picks a folder on the USB stick, and the RCA is the video out.

GIF · FRAME

COLOR

PALETTE puts one palette over every gif, matched by brightness rather than by index, and CYCLE rotates it. HUE, GLOW, CRUSH, DITHER and SOLAR shape the light.

TIDE → CYCLE · FLARE → SOLAR

SPACE

FLOW feeds the picture back into itself, MELT slumps and drips, and WARP bends it; MIRROR, KALEIDO and SPIN fold and turn it. HOLD freezes the picture while the engine keeps running, so letting go jumps to where it got to.

SURGE → FLOW · ORBIT → SPIN · HOLD

Datamosh

When a gif loads, a block-matching motion estimator works out how each 8 × 8 block moves from frame to frame. While it plays, that motion drags pixels across a canvas that persists between frames, which is what makes a broken video file smear.

Change gifs with KILL up and the new gif's motion moves the old gif's pixels.

The stick and the screen

The gifs come on a USB stick, a folder for each bank. A tool that comes with it, video2bank, cuts a film into gifs scene by scene. Palettes are Lospec files on the same stick.

There's no LCD and no menu. Turn a knob and its name and value show over the picture, with a strip of the four lanes, then fade. Hold BANK for the one page there is: diagnostics and calibration.

Inside

The board sits right behind the panel: the panel's parts on its front, everything else on its back, including a Raspberry Pi Zero 2 W face-up in a socket. The Zero's composite video and USB exist only as test pads under it, so five spring pins on the board press against them instead of wires.

All of it is generated from code. One table places every knob and jack and drives the panel, the board and the firmware, and the model below is drawn from the same files.

The back of the main board as KiCad renders it: black solder mask, the small surface-mount parts, the outline of the Pi's socket with the five pogo pin pads beside its header, and the power header at the top.
GIF GIF GIF

Drag to look around. Lift the panel to see the board behind it; turn it round for the Pi on the back.

Specs

Format

Standard
Eurorack, 3U
Width
36 HP (182.6 × 128.5 mm)
Depth
About 27 mm, the Pi included (an estimate until one is built)
Panel
FR4, black mask, gold (ENIG) art
Controls
24 knobs; CLIP, BANK and PALETTE push encoders
Power
+12 V only, onboard buck to 5 V

I/O

Video out
Composite RCA, PAL / NTSC, THS7314 driver
CV inputs
Nine, ±5 V: eight add to their knobs, FRAME picks the frame
V/OCT
GIF jack, −5 V to +10 V
Triggers
FLUSH · HOLD, high above about 1.3 V, any pulse width
Unpatched
Every input reads 0 V
Protection
Every input survives ±12 V
Gifs in
USB stick, folders are banks

Engine

Brain
Raspberry Pi Zero 2 W, face-up on pogo pins
Renderer
LÖVE + GLSL (GLES2)
Internal res
320 × 240
Motion fields
8 × 8 block match, cached at load
ADC
40 channels, 12-bit (2 × ADS7953, ADS7951): 34 inputs, 6 self-tests

Nothing's for sale yet.

GIF GIF GIF is designed and routed, and its engine runs on a Pi Zero 2 W into a CRT. Nothing's built yet, and there's no date.