Skip to content

Repository files navigation

Shader Binary Release crates.io

cuneus sdf

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
  • 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
  • Frame-accurate audio sync on export: pre analyzed spectrum/BPM per frame for perfect mux with the source audio

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

Cuneus IDE Interface

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
  • When using cuneus as a dependency (via cargo add):
    • 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

Physarum JFA Volumetric Passage

Code

Code

Code
PathTracing Mandelbulb Galaxy Path Tracing Tame Impala

Code

Code

Code
Buddhabrot FFT(Butterworth filter) Fluid

Code

Code

Code
Block Tower: 3D Game GPU Synthesizer 2DGS:real time training

Code

Code

Code
Schwarzschild bh Lichtenberg audio visualizer

Code

Code

Code
ggxbrot bugberman: 2D game rorschach

Code

Code

Code

About

Engine for creating compute shader apps. easy multi pass pipelines, hot reload, audio/video input via gst, code sound and frame export

Topics

Resources

Contributing

Stars

197 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages