⌒
┬ ┬──┐ ┬ ┌──┐
│ │ │ │ │ │
│ ├─┬┘ │ └──┐
│ │ │ │ │ │
┴ ┴ └─ ┴ └──┘
![]() |
![]() |
![]() |
|---|---|---|
![]() |
![]() |
![]() |
Iris is an art project & visualization system written in Odin & Raylib, which runs on desktop systems that support openGL, including Raspberry Pi.
It contains...
- an audio engine which performs basic audio analysis (RMS, centroid, FFT)
- scenes which are passed the audio features for visualizing
- shaders n stuff
- keyboard-centric control
- (hopefully) decent performance for low-powered systems (RPi)
- (planned) automatic scene switching
Scenes are inspired by artefacts from Greek mythology.
Food of the gods.
Cursed jewellery.
Blades of sound.
Under construction
Iris has a layer-based key mapping system for ready-to-hand & expressive keyboard control.
There are 4 key map layers. In each layer, the alphanumeric keys are used as primary keys for certain actions.
Activated by holding the Ctrl+Alt modifier
- Toggle FPS:
/ - Toggle cursor visibility:
c - Quit:
q
Primarily for switching between scenes.
Permanent latch: [Alt/Option]+Enter or [Alt/Option]+Tab
Temporary latch: Alt/Option
[a-z]keys switch scenes (currently only a handful do something)[1-9, 0]for setting the audio input level (1is min,0is max, i.e. number-row-as-a-slider)
For toggling effects.
Permanent latch: Shift+Enter or Shift+Tab
Temporary latch: Shift
Actions:
- Toggle pixelate:
p - Toggle warp:
w - ...more coming
- Clear all:
backspace
Under construction
For controlling individual scene parameters.
Permanent latch: Ctrl+Enter or Ctrl+Tab
Temporary latch: Ctrl
Under construction
Iris can be extended with the addition of scenes: simple structs which provide a draw procedure. Scene draw procedures are passed the scene's current state, a set of params (which includes audio features) and a texture to draw to. Scenes are initialised in init_scenes in scene.odin.
scene_utils.odin contains utilities for visualization: a stateless LFO including smoothed random, interpolators, polar/cartesian convertors & colour utilities.
- One Fantastic Bind (music video) - hops & Icebeing (2025)
- Coding Challenge 183: Paper Marbling Algorithm - Daniel Shiffman / The Coding Train
- greekmythology.org
- ICEBEING
- Don’t Forget the Laptop: Using Native Input Capabilities for Expressive Musical Control - Rebecca Fiebrink, Ge Wang, Perry R. Cook
- Hydra video synth - Olivia Jack
- EYESY™️ - Critter & Guitari
- Atmospheric Plugin Design (ADC 2024) - Syl Morrison
N.B. Iris is in its very early stages and will remain unstable/experimental for some time. I'm not actively seeking contributions but will happily answer any questions about the project.







