A GPU compute engine for creating, tweaking, and shipping WGSL shader programs. Built on wgpu, egui, winit and gstreamer :-)
- Hot shader reloading
- Multi-pass, atomics etc
- 3DGS Rendering Inference (PLY Import, radix gpu sort)
- Interactive parameter adjustment, ez media imports through egui
- Easily use HDR textures, videos/webcam via UI
- Audio/Visual synchronization: Spectrum and BPM detection
- Real-time audio synthesis: Generate music directly from wgsl shaders
- Export HQ frames via egui
Cuneus uses a declarative builder to configure your entire compute pipeline. You say what you need — the engine handles all bind group layouts, ping-pong buffers, and pipeline wiring:
// Define your multi-pass pipeline as a dependency graph:
let passes = vec![
PassDescription::new("compute_field", &[]), // no inputs
PassDescription::new("render", &["compute_field"]), // reads compute_field
PassDescription::new("feedback", &["render", "feedback"]),// reads render + own previous frame
PassDescription::new("main_image", &["feedback"]),
];
let config = ComputeShader::builder()
.with_multi_pass(&passes) // the render graph above
.with_custom_uniforms::<MyParams>() // UI-controllable parameters
.with_mouse() // mouse input
.build();Dependencies are packed sequentially — &["render", "feedback"] becomes input_texture0 and input_texture1 in WGSL. Self-reference enables cross-frame feedback (ping-pong) automatically. One .dispatch() call runs the entire pipeline. See usage.md for the full guide.
Ffull screen/minimal screen,Hhide egui
- If you want to try your own shaders, check out the usage.md and see BUILD.md.
- Optional Media Support: GStreamer dependencies are optional - use
--no-default-featuresfor lightweight builds with pure GPU compute shaders. - When using cuneus as a dependency (via
cargo add):- Add
bytemuck = { version = "1", features = ["derive"] }to dependencies (derive macros can't be re-exported) - Copy build.rs to your project root to configure
GStreamerpaths (only needed for media features) - then simply use
use cuneus::prelude::*;
- Add
cargo run --release --example *file*- Or download on the releases
| Sinh3D | JFA | Volumetric Passage |
|---|---|---|
![]() Code |
![]() Code |
![]() Code |
| PathTracing Mandelbulb | CNN:EMNIST | Tame Impala |
|---|---|---|
![]() Code |
![]() Code |
![]() Code |
| Buddhabrot | FFT(Butterworth filter) | Clifford |
|---|---|---|
![]() Code |
![]() Code |
![]() Code |
| Block Tower: 3D Game | System | 2d Gaussian Splatting |
|---|---|---|
![]() Code |
![]() Code |
![]() Code |
| SDneuron | path tracer | audio visualizer |
|---|---|---|
![]() Code |
![]() Code |
![]() Code |
| sdvert | tree | rorschach |
|---|---|---|
![]() Code |
![]() Code |
![]() Code |

















