★ PRIMARY

❔ Upload Help
Importing a song — pick your source
I use:
🎛️ From Ableton Live
Best & most exact: Upload → 📁 Folder and choose your whole Ableton Project folder (the one holding the .als and its Samples/). MIDI tracks come in note-exact; audio/sampler tracks are auto-transcribed.
Just the .als: Upload → 📄 File(s) and pick the .als. Its MIDI tracks load exactly, but audio tracks can’t be transcribed unless you also select their audio files in the same go (or use the folder above).
The .als is plain XML, so The Ladder reads the arrangement directly — no bouncing needed. You can also just drag the .als or the folder onto the page.
🎹 From Logic Pro
A Logic .logicx is a closed package — The Ladder can’t read it directly the way it reads Ableton’s .als. Use one of these exports:
Stems (works for any project): in Logic, File → Bounce → “All Tracks as Audio Files”. Then Upload → 📄 File(s) and select all the bounced WAVs together (2 or more). Each stem becomes its own track, rough-transcribed; tempo is auto-detected.
Exact notes: open Logic’s Score Editor → File → Export → MusicXML (wording varies by version) and import that .musicxml — notes are exact; chords are inferred.
Dragging the WAVs (or a folder of them) onto the page works too.
🎼 Sheet music (MusicXML)
Export from MuseScore / Finale / Sibelius / Dorico / Logic as .musicxml, .xml, or .mxl.
Upload → 📄 File(s) (or drag it in). Notes are exact from the score; key and per-bar chords are inferred — you can correct them in the chord editor.
📁 Reference folder (exact notes + exact chords)
The no-manual-work path. Put in one folder: a MusicXML score (or an .als / audio stems) plus a Word .docx chord sheet.
Upload → 📁 Folder and pick it. The Ladder takes notes from the score and chords from the chord sheet — so you skip manual chord entry and re-auditing.
Note: chords are placed one per bar in order (it doesn’t yet read bar-by-bar durations from the sheet).
🎚️ Audio stems / a single song file
2+ audio files (WAV/MP3/M4A/AIFF…) → a dialog asks what instrument each stem is; every stem becomes its own labeled track.
One audio file → check the instruments the song contains: none = full-mix audit (melody + chords), one = that instrument, several = split into labeled stems. Because you told it what to listen for, each note is matched by pitch range + timbre — the attack & overtone fingerprint of each instrument — which is far more accurate than auto-detecting.
A whole album in one go: if those files are separate songs rather than stems of one song, tap 🎵 Separate SONGS — a show each at the top of that dialog. Tick the instruments the songs contain and the app builds a finished light show for every file, dropping the lot into the 🎉 library with their original recordings, ready for the jukebox. Drop in twenty tracks, go make a coffee, come back to twenty shows.
A .ladder.json you saved earlier → reopens the whole project, exactly as you left it.
⧉ New window ▾
Open a view in its own window
◎ Wheel + 5ths
⊞ Octave / Bands
🎹 Piano
🎸 Band
🎶 Harmonics
🌀 Spiral
∿ Freq + ∑ Math
⤒ Upload ▾
🎬 Demo song — Shady Grove
traditional · D dorian · nothing to upload
🕘 Recent songs…
📄 File(s)…
a .ladder.json hub · MusicXML · .als · audio · stems
📁 Folder…
Ableton/Logic project · folder of stems · reference folder (score + chord sheet)
drop any song anywhere — audio · MIDI · MusicXML · Ableton · stems · a saved project (or a folder of score + chord sheet)
Splitting into instruments
Tell the app what each file is — the labels, colours, and transcription tuning all follow from this:
🟢 Spotify light shows
One-time setup (about 2 minutes, free) — Spotify hands out an app key so this page may see what you’re playing:
1 · Open developer.spotify.com/dashboard and tap Create app (any name works).
2 · In the form, paste this page’s address as the Redirect URI
3 · Copy the new app’s Client ID into the box and tap Connect — approve once on Spotify and you’re set forever:
not connected
Songs you split/upload land in the library automatically — this tab is for songs that live on Spotify. Not sure the plumbing works? 🩺 Capture check answers in 2 seconds.
💡 Light-show library
💚 rows follow Spotify playlists automatically (even shuffled) · 🔊 rows play right here with their original sound.
Tone-Deaf Pup
0 XP

🏛 Bonethagoras of Samos

Rank
🔥 Daily streak

📜 Today’s quests

🔎 Explorer board

🎖 Badges

Every feature pays +10 XP the first time you try it — the board above shows what's still dark. Quests rotate daily, so there's always a new corner to poke at.
🏛 Bonethagoras of Samos — lyre in one paw, his right triangle in the other.
play one note at a time
reference: A4 = 440.0 Hz
this is the colour key with no song in it — tap 🎓 Tour, or 🎬 Try the demo song
Mode ▾
melody
chord
key
SAVE ⤓
8va0 🔊 🕐
Tonal wheel + one unified timeline: BARS · MIDI (editable) · SHEET · WAVE are the same data on one time grid with a fixed left gutter, so notes stay in the same columns. Edit in MIDI — colors recompute and propagate everywhere; Export saves the edited hub.

The colour key

🟡 yellow = home🌈 colour = the note's job⬜ grey = not in the song🔁 same colours, every key
Colour = the note's job in the song. Every song has a home note it keeps coming back to — this app always calls it Do (like Do-Re-Mi). In a normal major song, home is yellow, the other six notes of the song get the other six colours, and notes the song doesn't use stay grey. Move home and the colours move with it — yellow means home, not any particular piano key.
One octave, low → high — 12 squares, like 12 piano keys in a row (a major song). W = whole step (one grey between) · H = half step (no gap):
DoReMiFaSolLaTiDoWWHWWWH½ step · no gap½ step · no gap Only two pairs of coloured squares touch with no grey between: blue→purple and orange→yellow. That W-W-H-W-W-W-H climb is the ladder itself — start it on any note and it slides over unchanged. The two joins never move: spot them and you know where you are, in every view.

Happy songs are usually major — Do is yellow. Sad songs are usually minor — Do is red. There are seven flavours in all, with impossible Greek names (Lydian, Mixolydian…). Don't memorise the names — remember the colours: the seven colours always keep the same pattern, so the only thing to remember is which colour home lands on. the colour of Do = the flavour of the songDoIonian · majorDoDorianDoPhrygianDoLydianDoMixolydianDoAeolian · minorDoLocrian And the flavours sort into three families you can see: major-leaning · brightDoLydianDoIonianDoMixolydianminor-leaning · darkerDoDorianDoAeolianDoPhrygianthe outlierDoLocrianthe same three families every time — the family is written into the colour Chords match the same families. A chord wears its root's colour — and a chord rooted on purple, yellow or pink is major; on green, red or blue it's minor; on orange, diminished. Colour and sound never disagree.

Can't go by the colours? Turn on 🔢 Numbers. Every note in the key gets its number printed on it — 1 is always home, 5 is always Sol — so the numbers tell you exactly what the colours tell you. It works on every view, alongside the colours or instead of them, and if you're colourblind it's worth switching on before anything else. Numbers are how most players talk to each other anyway: a 1–4–5 is a 1–4–5 in every key there is.
Fine print: F♯ and G♭ (same piano key, two written names) count as different notes here and can wear different colours.

Basics

Three ways to get music in: 📄drop a fileMIDI · MusicXML · .als · audio🎤listen livethe mic hears the room🎹play liveMIDI keyboard or on-screen keysany of the three → the same coloured light show, in every view Load music: drag a .ladder.json, MIDI, MusicXML, Ableton .als, or audio file anywhere on the page — or use 🎧 Listen to hear the room live.

🟢 Setting Spotify up (once): the first time you open the Spotify panel there's a short bit of setup — about two minutes, free, never again. Spotify hands out a key so this page is allowed to see what you're playing: make an app on Spotify's developer page, paste this page's address in as the Redirect URI (there's a ⧉ button that copies it exactly right), then paste the app's Client ID back here and tap Connect. One catch — this needs the real website, not a file opened off your computer, because the sign-in has to redirect somewhere.

🟢 Spotify: play a track in the Spotify web player tab, open the Spotify panel, and tap 🎧 Capture this track — one tap restarts the song, records it from the tab, analyzes it, and saves its light show (plus the recording into the 🎉 library). From then on the app recognises that song whenever Spotify plays it — any playlist, even shuffled — and runs the lights in sync automatically. If a capture doesn't work it's almost always that the browser shared the wrong tab: tap 🩺 Capture check before you commit and it listens for two seconds, then tells you plainly whether the tab you picked is really making sound. And if a capture does come back silent, the app throws it away rather than saving you an empty show — fix the tab, capture again, nothing is lost.

🩺 Capture check: in the Spotify panel, next to 🎧 Capture. Tab recording only works if the tab you shared is the one actually making sound — this listens for two seconds and tells you plainly whether it's hearing the music, so you find out now instead of after a three-minute recording. If it hears silence it says exactly what to fix.

⇪ Backup / ⇩ Restore: the library panel packs every show and its recording into one .ladderlib file you can keep or move to another computer. Everything lives in this browser, so this is the only copy that survives clearing your browser data.

🔓 Lock Tonic: pins Do (home) to 12 o'clock and hums a steady home note under everything you play. Works on every view.

🎸 Chords: paste a progression (plain C G Am F or an Ultimate-Guitar sheet) before listening/uploading — it sets the key and guides chord detection.

⏺ Loop recorder: fold open the bar under the stage to record what you play into a quantized loop, or 🎸 Jam Along over the loaded loop — your live notes light the show too.

🔁 Build a loop sits beside the recorder and works the other way round: instead of playing a loop in, you tap chords onto a grid of bars and beats, hear it back straight away, and nudge until it sounds right. Save it and it becomes a named section — Verse, Chorus, whatever you call it — that the rest of the app treats as part of the song. Good for when you know the chords but don't fancy performing them.

New window: opens a synced mirror (up to 8) — same song, same playhead, its own view and its own 🔈 mutes. One window is ★ PRIMARY (controls); tap a mirror's badge to make it primary.

🎓 Tour: the fastest way in — tap 🎓 Tour in the toolbar and it loads a song, starts it playing, and walks you through every view with a caption on each one. About ninety seconds.

🎬 First time here? Upload → Demo song loads Shady Grove (the Garcia & Grisman arrangement of the traditional tune) so you can see everything working with nothing to upload. Songs you load land in 🕘 Recent songs automatically — reopen any with one tap.

🎯 Pentatonic: the five can’t-miss pentatonic notes stay bright on every view while the two spicy ones — the purple and orange (Fa & Ti) colours — fade back. The improviser's can't-miss palette — great when you're soloing and don't want to think.

🏋️ Practice: next to the Loop toggle — slow the song to 50–100%, loop a section, and with +5%/loop checked the tempo creeps back up every pass until you're at full speed.

🎵 Play a file into the show: pick any audio file — it plays out loud AND drives the live light show at the same time. Fully internal: no mic, no dialogs, works on iPhone/iPad too. The 🕐 sync slider nudges the speakers a hair later so the lights land exactly on the beat.

🎭 Performance mode: hides everything but the stage (great for gigs and wall displays) — tap ✕ to come back.

🦴 The Maestro: that's Bonethagoras in the bottom-left corner, and he keeps score — XP for playing, capturing and practicing, three quests a day, a 🔥 streak for showing up, and 🎖 badges to chase. Tap him for your rank, or read the 🦴 XP tab above for the whole thing. Nothing in the app is locked behind him; he's there for the fun of it.

🎉 Party (inside 🟢 Spotify): songs you split (or audit) keep their original recording — open the Spotify panel's light-show library and hit 🎉 ▶ Play all: the real songs play while their light shows run in sync, one after another. Each show remembers the view you watched it in; 🔀 shuffle and 🎭 performance mode make it a wall display. Spotify playlists: shows whose titles match link themselves as the playlist plays (or tap 🔗 on a row while the track plays) — from then on the lights follow the playlist automatically, even shuffled, each song in its remembered view. Taking it with you: the ⇪ and ⇩ buttons under the show list pack everything — every light show plus its recording — into one .ladderlib file, and unpack it again somewhere else. Carry a set to the venue's laptop, keep a backup, hand a friend your shows. Nothing goes to a server; the file lands in your Downloads and it's yours.

📲 Install it: on the real site, use your browser's Add to Home Screen / Install — The Ladder becomes a real app that works offline, on iPhone, iPad, Android, Mac, or PC. No app store needed.

🏛 Bonethagoras of Samos & your XP

🦴 he pays you to practice📜 3 quests a day🔥 streaks🎖 12 badges
The dog in the bottom-left corner is Bonethagoras of Samos — laurel crown, lyre, and the right triangle that bears his name. He watches what you do and hands out XP for it — playing a song, capturing one, practicing, exploring a view you've never opened. Tap him to see your rank, today's quests, and your badge shelf.

Ranks. XP adds up into fourteen ranks, starting at Tone-Deaf Pup and ending at The Maestro's Equal. The bar under his name fills toward the next one; when it tops out he spins, confetti falls, and he tells you something Pythagoras would have said. Nothing is locked behind a rank — it's just a record of how much music you've put through the thing.

📜 Daily quests. Three every day, 15 XP each: play a song, visit three different views, and add a show to your library. Do all three and the Perfect Day bonus lands on top. They reset at midnight, your time.

🔥 Streaks. Show up on consecutive days and the check-in bonus grows — a little more each day up to a week and a half out. Miss a day and it starts over, so the streak is really just "did you touch an instrument today."

🎖 Badges. Twelve of them, and the locked ones stay visible in the panel so you can see what's left — hover any badge to read how to earn it. A few are easy (Graduate: finish the 🎓 Tour · First Light: capture your first Spotify song), a few take real playing (Woodshedder: work a song back up to full speed in Practice · Blue Note: light up the 7th harmonic · Full Spectrum: light all eight partials at once), and two take patience (Week of Fetch and Moon Dog — 7- and 30-day streaks).
All of it lives in this browser only — nothing is uploaded, there's no account, and no one else can see your XP. Clearing your browser data resets the dog's memory.

◎ Wheel

The main light show. Each ring is one layer of the music, centre → out: outermost — MELODY (the tune) BASS (the lowest note) CHORD (the notes played together) KEY (all the notes this song uses) centre — keyboard ring (note names · drag to move Do) And it's live — here's how to read and steer it: bright cell = that note is sounding now (it fades as the sound dies) drag the inner ring — move Do (home) to any note drag an outer ring — change the song's flavour tap a chord cell — “expect this chord” ▲ the tick at 12 o'clock: with 🔓 Lock Tonic on, Do stays there With 🔓 Lock Tonic on, Do stays at 12 o'clock and everything is read relative to home.

🎧 "listening…" and the striped cells. Before the app is sure what key you're in, it doesn't guess — the readout says listening… and each note you've played splits into stripes, one for every flavour that note could still belong to. Play a few more notes and the impossible flavours drop away, the stripes thin out, and when one is left the key settles on its own. Already know the key? Drag the inner ring to your home note (or hit 🔓 Lock Tonic) and the stripes go away immediately.

✦ 5ths

The same wheel, reordered by the circle of fifths — neighbours are a fifth apart, so closely related chords and keys sit next to each other and progressions sweep around the circle instead of jumping. chromatic orderthe song’s colours are scatteredcircle-of-fifths orderthe same 7 colours huddle into one arc — greys opposite Colours don't change: a note keeps its job colour no matter where it sits on the wheel. All wheel gestures (drag rings, tap chord cells) work the same here.

⊞ Octave

One octave, Do (home) always leftmost, climbing to the right. Every octave folds into these same 12 columns. Do is always the FIRST column — the scale reads left → rightkeychordbassmelody Rows light for key · chord · bass · melody — the same layers as the wheel, just unrolled into a line. Click a column to move Do; the dropdown picks the flavour. The clearest view of where the two touching joins (blue→purple, orange→yellow) sit inside the scale.

🎹 Piano

The full 88 keys, A0–C8. Every key wears its job colour (grey = not in the song), and the actual sounding notes light — melody, bass, and each voiced chord tone — at their real register. colour strip on every key = its job in the key · grey strip = outside the key◉ bass sounding here◉ melody up here — real registers, all 88 keys Use this when register matters: watch a bass line live in the left half while the melody works the right.

🎸 Guitar

A standard-tuning (EADGBE) fretboard, every position wearing its job colour. Labels pick one realistic hand position per string (X = nothing on that string). 🎯 Melody — the exact spot you playedChord — that note in EVERY octave The 🎯 toggle switches what lights: Melody — exact pitch lights only the notes actually played; Chord lights every octave of each sounding note, so a C chord paints all the C·E·G up and down the neck — a live scale-shape map.

🎻 Strings

Same as the guitar view, for fifths-tuned instruments. GDAEGDAE ⇄ CGDAtap 🎻 to flip betweenviolin·mandolin / viola·mandola The 🎯 Melody / Chord toggle is shared with the guitar view — set it once, both fretboards follow.

🎸 Band — every string instrument on one page

With a song loaded, every voicing gets its own neck — the banjo part on a banjo, the fiddle on a mandolin (guessed from the track name). Tap a part’s chips to move it to a different instrument, or onto several at once. No song → full-mix necks: bass · guitar · mandolin (+ mandola · banjo · uke). BASS GUITAR MANDOLIN One piano part is wider than any one neck its low notes land on the bass, mids on the guitar, highs on the mandolin — automatically. Each neck only lights the notes it can actually reach. Each part’s row of chips picks its instrument(s): learn the banjo part on guitar, or show it on banjo and guitar side by side. ⊞ Merge collapses everything onto shared full-mix necks; each neck also keeps its own draggable capo.

🎶 Harmonics — why notes have colour

Every real note is a stack of overtones: the note itself (the root), an octave up, a fifth above that, and on up. This view draws that stack from the actual audio, left to right like recording software — live input gets one lane per instrument, playback shows the whole output. Each bar stands at its partial’s real measured frequency: height = how loud it actually is, colour = the note it lands on, grey = between the cracks. Labels say what each partial is (root · 8ve · 5th · 3rd · ♭7) and how many ¢ it drifts — the amber ties show the drift as a gap you can see. Watch h7 land famously flat. Reading the levels: the faint horizontal lines behind the bars are loudness marks — the same ones a recording engineer reads — so you can see how much quieter each overtone is than the root instead of guessing. The thin line resting on top of each bar is its loudest moment just gone: it hangs for a second, then sinks, which is how you catch a partial that flashed past too fast to see. Nothing to switch on, it's simply there. Touch it: tap any bar to hear that partial alone, or drag across the stack to arpeggiate the series. The readout counts your series N/8 — light all eight and it turns gold. Instruments differ exactly here: a banjo piles energy into the high partials, a flute keeps almost everything in the root — this view IS the sound of an instrument, drawn.

🌀 Spiral

The 88 keys wound into an octave-aligned spiral. one full turn = one octave so every octave of a note stacks on the same spoke here: the same yellow Do, three octaves, one line bass rides the wide outer rim — pitch rises as the coil winds inward Watch melodies climb the coil and chords light matching spokes at different radii — the clearest picture of “same note, different register.”

▭ Bands

The most condensed view: three big colour fields — melody · chord · key — each showing its current colour and name. No geometry, just the three layers at maximum size. melodyLachordSolkeyD major Made for distance: a projector, a second window across the room, or ambient light while you play.

∿ Freq

A log-frequency ladder: each rung's height is its real pitch under the active tuning system — pick equal temperament, just intonation, Pythagorean, or meantone, and set the A4 reference. Do · 146.8 HzRe · 165.2 HzMi · 183.5 HzFa · 195.8 HzSol · 220.2 Hz⌁ ET’s Mi lands here — 14¢ sharp of the pure 5:4 rung height = the note's real pitch in the tuning you picked — change the tuning and watch the rungs shift Each diatonic rung is labelled with raw Hz and its cents deviation from equal temperament; the dashed ghost is where ET would put it — above, just intonation tunes Mi 14¢ sweeter (lower) than ET. Turn on ◉ drone to hold the tonic and hear the temperament beat against the melody.

∑ Math

Left: a static reference — the spiral of fifths and the commas where the systems fail to close. Right: a live table of the intervals sounding right now: 3 : 2a perfect fifth — two notes, one ratio the live table, for every pair of notes sounding right now: Do–Sol 3:2 +2¢ vs ET pure — no beats Do–Mi 5:4 −14¢ vs ET pure — no beats smaller numbers = smoother sound · pure ratios don’t beat — ET’s slightly-off thirds beat ~10 Hz Each pair shows its ratio in the active tuning, its cents vs equal temperament, and its beat rate — where temperament stops being theory and becomes something you can hear. Updates every frame.