Zain Dana HarperRetro Engine

Bring the engine back as a live retro renderer.

Feed it a generative plate, your own image, or your own GLSL. It pixelates through hardware palettes, ordered dither, an early-3D depth shade and a CRT stage, then a stackable rack of ASCII, halftone, databend and more. 190 shaders sit on the shelf, from Evangelion to the Game Boy to your own work, and the whole thing runs in your browser.

source → pixelate · palette · dither · CRT · nothing leaves your browser

The Retro Engine

Preset
Fragment shader
Knobs iKnobA / B / C in your code
A 0.50
B 0.50
C 0.50

Write your own GLSL and read iAudio (bass, mid, treble, level), iKnobA/B/C, iMouse and iTime. Save it to your shelf or copy a link that carries it. Kept in this browser; nothing uploads.

Shader stack1 layer
Stack another shader, blended
Palette
Pixel size 160
Dither
Curvature 0.4
Bloom 0.5
Vignette 0.4
Scanlines 0.35
Gamma 1.0
Effects rack0 on
Amount sets every active effect 0.50
Glitch seed
 
Sound off

Every edit plays a note, the shader sings its own math, and sound feeds back into the picture. Nothing is recorded or uploaded.

Sound drives 0.60
Reactivity
Make it physical
Performance score every edit you make is a note

A patch is the whole setup: shader, stack, palette, every effect and its amount, and the sound routing. Save it, or copy a link that carries all of it. Send to Studio hands the render to the pen surface as a plot map, then on to SVG or G-code. Everything stays in your browser.

Keys F full screen · R randomize · S save PNG · space animate · [ ] amount. Double-click the picture for full screen. Drag on the picture to move the light in most shaders.

The renderer is ordinary readable JavaScript: system/retro-engine.js, system/retro-palettes.js, system/shader-runner.js. Palettes and the dither and scanline math match the coherence-membrane retro.py pipeline, so a browser render and an offline render read as one instrument.