scheng is an open SDK for creating real-time shader instruments — live mixers, processors, and generators — with professional video I/O built in.
scheng lets you write real-time video instruments in Rust with the full power of GPU shaders — and wire them to your existing video ecosystem in minutes.
Build MIDI-controlled video mixers and effects that respond to your hardware controllers in real time. T-bars, faders, buttons — all wired to GPU shader parameters.
MIDI · OSC · LiveProcess webcam and video file inputs through custom GLSL shaders. Solarize, colorgrade, distort, composite — with hot-reload so you see changes instantly.
Webcam · Video · GLSLPush your rendered output to Syphon, NDI, RTMP (YouTube, Twitch, OBS), or RTSP. Record to ProRes or H.264. Professional colorspace throughout.
RTMP · Syphon · NDIUse scheng as a library in your own Rust application. The graph-based architecture composes cleanly — add nodes, connect edges, run your render loop.
Rust · API · EmbedWrite animated GLSL shaders with hot-reload. No restart, no recompile wait. Write, save, see — iterate at the speed of thought.
GLSL · Hot-reloadReceive Syphon or NDI from Resolume, VDMX, TouchDesigner. Output back. scheng fits into any professional video signal chain.
Syphon · NDI · VJ Toolsscheng's render loop is deterministic and non-blocking. Inputs never stall the GPU. Outputs never stall the render loop.
scheng speaks the protocols of the professional video world out of the box.
Four reference instruments you can clone, run, and build on immediately. Each demonstrates a complete real-world signal chain.
The hello world. Opens a window and hot-reloads a GLSL fragment shader. Edit, save, see — zero restart. The perfect starting point for any new instrument.
Two Syphon inputs crossfaded by a MIDI T-bar. Outputs to Syphon and preview. Inspired by analog Panasonic/Videonics mixer signal flow — rebuilt in GPU shaders.
Webcam input through a live solarize effect. MIDI CC controls threshold and wet/dry mix. Demonstrates the full MIDI → shader uniform pipeline on live video.
Two looping video files crossfaded by a MIDI T-bar. Both videos loop automatically. The same T-bar mechanic as the Syphon mixer, but works entirely offline.
scheng doesn't cut corners on quality. The defaults are chosen for broadcast, not for demos.
All render targets use 16-bit half-float precision internally. Multiple shader passes accumulate zero quantization error — no banding, ever.
65536 values/channel vs 256 (8-bit)All FFmpeg output is tagged with Rec.709 metadata. Players, broadcast systems, and streaming platforms interpret colors correctly without manual configuration.
-colorspace bt709 -color_trc bt7094x MSAA available via a single flag. The pipeline infrastructure handles MSAA texture allocation and resolve automatically per frame.
--msaa 4 — Metal/DX12/VulkanMIDI, video decode, and FFmpeg output run on dedicated threads. The render loop never waits — when the system is overloaded, frames drop gracefully.
Bounded channels, try_send semanticsRender resolution is a runtime parameter. Switch from 720p to 4K between frames with automatic render target reallocation.
--width 3840 --height 2160Syphon output shares the Metal texture directly — no CPU readback, no copy. On Apple Silicon, this is effectively zero-latency texture sharing.
Metal texture sharing — M1/M2Clone a template, run cargo build, and you're rendering on the GPU in under 5 minutes.