Tool for the Live Coding Compo debuted at Revision 2014
Clone or download
pansk and Gargaj Pan's Cleanup
* More const correctness
* Converted "map.insert(make_pair(a,b))" pattern into "map[a] = b".
* removed some warnings (e.g. double->float conversions and sign mismatch)
Latest commit 055200a Aug 7, 2018


Build status Build Status

What's this?

This is a live-coding tool, where you can write a 2D fragment/pixel shader while it is running in the background.


The tool was originally conceived and implemented after the Revision 2014 demoscene party's live coding competition where two contestants improv-code an effect in 25 minutes head-to-head. Wanna see how it looks in action? Check


  • F2: toggle texture preview
  • F5 or Ctrl-R: recompile shader
  • F11 or Ctrl/Cmd-f: hide shader overlay
  • Alt-F4 or Shift+Escape: exbobolate your planet


On Windows, both DirectX 9 and 11 are supported.

For the OpenGL version (for any platform), at least OpenGL 4.1 is required.

On MacBooks with a TouchBar that are running macOS Mojave: Open up System Preferences, click on Security & Privacy, click on the privacy tab then click on the Accessibility menu item. Make sure is ticked, otherwise only the "Quit" TouchBar button will work.


Create a config.json with e.g. the following contents: (all fields are optional)

  "window":{ // default window size / state, if there's a setup dialog, it will override it
    "fftSmoothFactor": 0.9, // 0.0 means there's no smoothing at all, 1.0 means the FFT is completely smoothed flat
  "textures":{ // the keys below will become the shader variable names
    "outputHeight": 200,
    "opacity": 192, // 255 means the editor occludes the effect completely, 0 means the editor is fully transparent
    "texturePreviewWidth": 64,
    "spacesForTabs": false,
    "tabSize": 8,
    "visibleWhitespace": true,
  "midi":{ // the keys below will become the shader variable names, the values are the CC numbers
    "fMidiKnob": 16, // e.g. this would be CC#16, i.e. by default the leftmost knob on a nanoKONTROL 2
  // this section is if you want to enable NDI streaming; otherwise just ignore it
    "enabled": true,
    "connectionString": "<ndi_product something=\"123\"/>", // metadata sent to the receiver; completely optional
    "identifier": "hello!", // additional string to the device name; helps source discovery/identification in the receiver if there are multiple sources on the network
    "frameRate": 60.0, // frames per second
    "progressive": true, // progressive or interleaved?
  "postExitCmd":"copy_to_dropbox.bat" // this command gets ran when you quit Bonzomatic, and the shader filename gets passed to it as first parameter. Use this to take regular backups.


As you can see you're gonna need CMAKE for this, but don't worry, a lot of it is automated at this point.

  • On Windows, use at least Visual C++ 2010. For the DX9/DX11 builds, obviously you'll be needing a DirectX SDK, though a lot of it is already in the Windows 8.1 SDK as well.
  • On Linux, you'll need xorg-dev and libglu1-mesa-dev; after that cmake should take care of the rest.
  • On OSX, cmake should take care of everything.

Organizing a competition

If you want to organize a competition using Bonzomatic at your party, here's a handy-dandy guide on how to get started:

Credits and acknowledgements

Original / parent project authors

Libraries and other included software

These software are available under their respective licenses.

The remainder of this project code was (mostly, I guess) written by Gargaj / Conspiracy and is public domain.

Contact / discussion forum

If you have anything to say, do it at or Join the chat at