Project Overview
Ichos Looper is a Progressive Web Application for choreographers and dancers practising a routine. You pick a song on your own device, wrap the section that keeps going wrong in a loop and repeat it until it is right, without fighting a media player’s scrub bar.
What it does
- Loops: a song can hold several loops, each with its own name, colour, range, fades, signal and repeat count. Enabled loops play in order; disabled ones stay on the waveform, dimmed.
- Speed without changing the pitch: from 0.5× to 1.5×. You can type either the speed or the BPM and the other follows, and the tempo is detected from the audio when a project opens.
- A countdown before each repeat: a signal tells the dancers exactly when the music starts again.
- Precise editing: drag the handles on the waveform, zoom in with the mouse wheel or a pinch, and place the edges of a loop to within a few milliseconds.
- Projects: every song keeps its loops and settings in the browser, saved automatically. A project can be exported as a
.looperfile, with or without the song, to share with someone else. - Two languages: the app and its help pages are available in English and Spanish.

How it is built
Everything runs in the browser on the Web Audio API, in React and TypeScript with Vite, and it installs as an app that works offline.
- Speed changes use a time-stretch algorithm I wrote (WSOLA, running in a worker) rather than a library. Each loop is stretched once and then plays sample-accurately, and a test asserts that the pitch is preserved.
- Tempo detection is also my own, tested against synthetic tracks, including the cases where a detector reads half or double the real tempo.
- Repeats are scheduled on the audio clock instead of being polled, so the loop points stay tight.
- Saved projects are versioned: a migration upgrades older stored settings and imported files when the format changes.
Privacy
The music never leaves the device. Nothing is recorded or uploaded; projects live in the browser’s own storage.
Try it
The app is live at ichos-looper.azulich.com.