cuneus 0.4.9

A WGPU-based shader development tool
Documentation

Shader Binary Release crates.io

A GPU compute engine for creating, tweaking, and shipping WGSL shader programs. Built on wgpu, egui, winit and gstreamer :-)

Current Features

  • 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

Builder Pattern

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.

Current look

Keys

  • F full screen/minimal screen, H hide egui

Usage

  • 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-features for 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 GStreamer paths (only needed for media features)
    • then simply use use cuneus::prelude::*;

Run examples

  • cargo run --release --example *file*
  • Or download on the releases

Gallery

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