GPU-Accelerated Video Synthesis

Build video instruments in Rust.

scheng is an open SDK for creating real-time shader instruments — live mixers, processors, and generators — with professional video I/O built in.

Explore Templates SDK Reference →
// signal flow
Syphon In
──
NDI In
──
Webcam
──
Video File
──▶
GPU Shader Graph
──▶
Syphon Out
MIDI CC
──
OSC
──▶
ParamStore
──▶
Uniforms → Shader
NDI Out
RTMP / RTSP
──▶
Hot-Reload GLSL
──▶
Rgba16Float
──▶
RTMP Stream
──
Record MP4
16-bit
Float precision
4K
Resolution support
MSAA anti-aliasing
0ms
Shader reload lag

What is scheng

A toolkit for
video artists.

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.

🎛

Live Performance

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 · Live
📹

Video Processing

Process webcam and video file inputs through custom GLSL shaders. Solarize, colorgrade, distort, composite — with hot-reload so you see changes instantly.

Webcam · Video · GLSL
📡

Broadcast & Stream

Push your rendered output to Syphon, NDI, RTMP (YouTube, Twitch, OBS), or RTSP. Record to ProRes or H.264. Professional colorspace throughout.

RTMP · Syphon · NDI
🏗

SDK Integration

Use 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 · Embed
🎨

Generative Art

Write animated GLSL shaders with hot-reload. No restart, no recompile wait. Write, save, see — iterate at the speed of thought.

GLSL · Hot-reload
🔌

System Integration

Receive Syphon or NDI from Resolume, VDMX, TouchDesigner. Output back. scheng fits into any professional video signal chain.

Syphon · NDI · VJ Tools

How it works

Every frame,
six steps.

scheng's render loop is deterministic and non-blocking. Inputs never stall the GPU. Outputs never stall the render loop.

01
Poll Inputs
Webcam, video, NDI, Syphon — upload latest frame to GPU texture
02
Step Params
Smooth MIDI/OSC targets toward values — silky control response
03
Build Configs
Shader source, uniforms, and textures assembled per node
04
Render Graph
One GPU pass per node — Rgba16Float precision throughout
05
Submit GPU
All commands batched and submitted as one encoder
06
Present Output
Preview, Syphon, NDI, RTMP — simultaneously if needed

Inputs & Outputs

Everything
connects.

scheng speaks the protocols of the professional video world out of the box.

// Inputs
Syphon Receive
Receive from Resolume, OBS, VDMX, TouchDesigner on macOS
NDI Receive
Receive from any NDI source on the network
Webcam
Any connected camera — FaceTime HD, USB, virtual cameras
Video File
MP4, MOV, AVI, MKV, ProRes — any ffmpeg-readable format, loops
RTMP / RTSP / SRT
Pull a live stream as an input texture
MIDI CC
Any MIDI controller — maps to shader uniforms with smoothing
OSC
Open Sound Control over UDP — control from any app or hardware
scheng GPU
// Outputs
Syphon Output
Zero-copy Metal texture sharing — receive in Resolume, OBS, etc.
NDI Output
Broadcast over network to any NDI receiver
RTMP Stream
Push to YouTube, Twitch, OBS ingest, nginx-rtmp
RTSP Stream
Push to mediamtx, receive in VLC, Resolume, broadcast systems
File Recording
H.264 or ProRes to disk — non-blocking, never drops frames on render
Preview Window
Native windowed preview — resize-aware, sRGB color managed
Spout (Windows)
DirectX texture sharing for Windows video ecosystems

Starter Templates

Ready to run
in minutes.

Four reference instruments you can clone, run, and build on immediately. Each demonstrates a complete real-world signal chain.

scheng-gradient

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.

Hot-reload GLSL Minimal
$ cargo run --release -- --msaa 4

scheng-mixer

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.

Syphon In/Out MIDI T-bar Crossfade
$ cargo run --release -- --syphon-a "Resolume" --syphon-b "OBS"

scheng-processor

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.

Webcam MIDI Syphon Out
$ cargo run --release -- --webcam 1

scheng-video-mixer

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.

Video Files MIDI T-bar Syphon Out
$ cargo run --release -- --video-a a.mp4 --video-b b.mp4

Quality

Professional grade
from the start.

scheng doesn't cut corners on quality. The defaults are chosen for broadcast, not for demos.

Rgba16Float Pipeline

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)

bt.709 Colorspace

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 bt709

MSAA Anti-Aliasing

4x MSAA available via a single flag. The pipeline infrastructure handles MSAA texture allocation and resolve automatically per frame.

--msaa 4 — Metal/DX12/Vulkan

Non-Blocking Architecture

MIDI, 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 semantics

4K & Beyond

Render resolution is a runtime parameter. Switch from 720p to 4K between frames with automatic render target reallocation.

--width 3840 --height 2160

Zero-Copy Syphon

Syphon 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/M2

Start building.

Clone a template, run cargo build, and you're rendering on the GPU in under 5 minutes.

Developer Reference Architecture Diagrams →