#graphics #glsl #shaders #creative #vulkan

app pilka

Another live-coding tool for creating shaders demos

22 unstable releases (3 breaking)

0.5.10 Sep 12, 2021
0.5.9 Sep 9, 2021
0.5.0 Aug 31, 2021
0.4.5 Apr 13, 2021
0.2.9 Feb 20, 2021

#6 in Rendering

Download history 13/week @ 2021-06-07 2/week @ 2021-06-21 6/week @ 2021-07-05 4/week @ 2021-07-12 19/week @ 2021-07-19 15/week @ 2021-07-26 27/week @ 2021-08-02 2/week @ 2021-08-09 28/week @ 2021-08-16 79/week @ 2021-08-30 46/week @ 2021-09-06 19/week @ 2021-09-13

74 downloads per month



pilka 🔩


Pilka is a cross-platform live-coding tool for creating shader* demos, similar to Bonzomatic or KodeLife. Supports hot-reloading, which means resources is checked and updated in the background.

Available features:

  • Hot-reload
  • Saving shaders
  • Taking screenshot
  • Record video
  • Compute pipeline for post processing



In current state pilka tries to seek shaders folder with the files shader.vert and shader.frag, on fail pilka will generate default setup for you. Then open shader in your favourite code editor (VS, emacs, vim, ed etc.) and pilka would fetch changes after each save.


  • F1: Print help
  • F2: Toggle play/pause
  • F3: Pause and step back one frame
  • F4: Pause and step forward one frame
  • F5: Restart playback at frame 0 (Time and Pos = 0)
  • F6: Print parameters
  • F10: Save shaders
  • F11: Take Screenshot
  • F12: Start/Stop record video
  • ESC: Exit the application
  • Arrows: Change Pos



name type range
position vec3 (-∞, ∞)
time float [0, ∞)
resolution vec2 [0, a]
mouse vec2 [-1, 1]
mouse_pressed bool
frame uint
time_delta float
prev_frame texture


  • --record f32 - Start video record
  • --size u32xu32 - specify window size and locks window from resizing


Vulkan SDK is required.

On recent macOS, to allow sound input to be captured (for FFT textures to be generated), you need to: Open up System Preferences, click on Security & Privacy, click on the Privacy tab then click on the Microphone menu item. Make sure pilka is in the list and ticked... erm, probably. I don't have macOS.


cargo install pilka

You also can install the application by to downloading the source code and build locally.

# or through ssh git@github.com:pudnax/pilka.git
git clone https://github.com/pudnax/pilka.git
cd pilka
cargo install --path .


winit is the "default" window library in Rust ecosystem. And it covers the most of cross-platform issues for you.

RustFFT is used to perform Fast FFT for generating sound textures.

cpal is used to capture sound from microphone and probably MIDI devices in the future.

png is used to encode screenshots into png files.

notify is a file watcher and maintains the hot-reload.

shaderc is used to compile GLSL shaders on the runtime instead of opening a process with glslc or glslangValidator. I hope to switch to naga soon, when it's mature enough.

ash is a Vulkan bindings. I choose ash because I see pilka as a learning project and want to touch the maximum untouched Vulkan. For the same reason I didn't use vulkano, erupt, vulkanism, vkvk and wgpu.

Ffmpeg is used to record and save to video. For my concerns it's temporary solution after which I switch to rav1e on it's release.

Places of inspiration (from where I steal code):


You can run any example by executing pilka inside of the folder

cd examples/dithering
cargo run
cube cellular automata line segment
cube automata line
dithering circle pattern menger sponge
dithering pattern spoonge
path tracer lasers oblique slices
tracer lasers slices


~1M SLoC