waveOS

A Raspberry Pi becomes a tape looper.

Plug in an interface and a MIDI keyboard — it boots straight into the tape.

Raspberry Pi · free · PocketCHIP version coming soon

Coming to PocketCHIP

Download waveOS

Email in, SD image out. Updates only.

What is waveOS?

A free OS image. The Pi boots straight into WaveLoop X1 — tape, effects, MIDI, live waveform.

  • Record, overdub, and destroy loops in real-time
  • 14 built-in effects (reverb, delay, bitcrush, chorus, and more)
  • Full MIDI mapping — works great with Arturia MiniLab
  • Generative boot splash and screensavers
  • WiFi config from the on-screen menu
  • Plugin screensaver system — write your own

What you need

BoardRaspberry Pi 4 or 5 (4GB+ recommended)
StoragemicroSD card (8GB minimum, 32GB recommended)
AudioUSB audio interface (tested with Universal Audio Volt 276)
DisplayHDMI monitor or HyperPixel 4.0
InputUSB keyboard and/or MIDI controller
Download~1.9 GB compressed, ~6 GB on disk

Installation

1. Download the .img.gz file above.

2. Flash it to your microSD card using Raspberry Pi Imager, balenaEtcher, or dd:

gunzip waveos-v1.0.1.img.gz
sudo dd if=waveos-v1.0.1.img of=/dev/sdX bs=4M status=progress conv=fsync

Replace /dev/sdX with your SD card device. Use lsblk to find it. Be careful — this will erase the card.

3. Card in, interface and display on, power. It boots into the looper.

4. The partition auto-expands on first boot to fill your SD card.

Keyboard Controls

CAPS

Hover a highlighted key to inspect shortcut details.

▾ All shortcuts

WaveOSX1

ActionShortcut
play stopSPACE
record toggleR
rewindW
reverseD
clearC
speed cycleS
input configI
overwriteO
loop set in[
loop set out]
loop toggle/
chew1
eat2
flat3
pop4
copy extend5
double loop6
prev audio device,
next audio device.
settings menuENTER
helpSHIFT+/
quitESC

WiFi Setup

Settings (Enter, or press the encoder) → WiFi. Ethernet just works.

Custom Screensavers

Five idle minutes and a screensaver takes over — even mid-playback. Write your own:

// my-screensaver.c
const char *screensaver_name(void) { return "My Saver"; }

void screensaver_render(SDL_Renderer *r, int w, int h, uint32_t t_ms) {
    // draw with SDL2 — called ~30fps
}

// Build:
// gcc -shared -fPIC -O2 -o my-saver.so my-screensaver.c $(pkg-config --cflags sdl2)

Drop the .so file into /opt/waveos/screensavers/ and restart.