The Harmony Wheel
Bookmark this FREE TOOL! Meet your interactive, theory-aware songwriting companion. Connect your MIDI keyboard for instant functional analysis. Multiple keyspaces make concepts like borrowed chords and modal interchange visually intuitive. See why your music works, not just what it is.
▶ Try the Wheel — free, no install
Get the plugin
The free Wheel below runs in your browser and tracks MIDI. The plugin listens — it pulls harmony out of the air while you play your instrument, or while you listen to your favorite songs. Completely on device. No internet connection required. Harmony is displayed through the Beat Kitchen 10-chord toolkit, designed to show you not just what a chord is, but what a chord does.
Downloads
/Applications, AU to ~/Library/Audio/Plug-Ins/Components. Restart your DAW after install. Signed + notarized — Gatekeeper will let you through without warnings.
Windows VST3: unzip and move
BKS Harmony Wheel.vst3 to C:\Program Files\Common Files\VST3\. Unsigned build — Windows SmartScreen may warn the first time you load it. Untested by us; please report issues on Discord.
v0.3.4 · macOS 11+ universal (Intel + Apple Silicon) · Windows VST3 64-bit
This tool was built through a lot of musical stubbornness and a bunch of AI prompts.
Learn what the Wheel is showing you
The Harmony Wheel visualizes concepts that Beat Kitchen’s Music Theory guide covers in depth:
- Your First Chords: Major, Minor, and the Dominant — the three chords every Wheel position is built from
- Voice Leading and the Caterpillar — how chords move smoothly from one to the next
- Modes Without the Mystique — the modal interchange the Wheel makes visible
- Diminished Chords, Extensions, and Other Chameleons — where the weird ones fit
Or try the Random Chord Generator or the Tetrachord Construction Kit — both open on the Harmony Wheel when you find something worth exploring.
Notes and usage
- This tool works best on desktop using a MIDI enabled browser like Chrome.
- Safari won’t pass MIDI. Mobile Safari still may not have sound (fix coming). Chrome on iOS currently seems to be more reliable. We’re working on it.
- Got a question? Want to report a bug? Is there a feature you’d like to see? Please head to our Discord↗. We’d love to hear about it! (But please don’t email or DM – it’s a community project)
- Mobile enhancements and a proper help/documentaion are coming soon.
Plugin version history
v0.3.4 (2026-05-27) — Guidebook, Tetrachord Toolkit & Chord Randomizer
New built-in music theory guidebook, Tetrachord Toolkit, and Chord Randomizer, plus a clearer key-detection display and a simpler Settings layout.
- New Textbook tab — the Musician Basics guidebook, built right into the plugin.
- New Tetrachord Toolkit and Chord Randomizer tabs.
- Clearer key-detection display — easier to read at a glance.
- Touchable on-screen keyboard — click or drag to play.
- Simpler Settings — a full-window tabbed page (Settings / Textbook / Tetra / Random) instead of a modal card; the tab row stays visible everywhere. Removed the rarely-used Advanced detector knobs and in-Settings audio-file tools.
v0.3.3 (2026-05-24) — Speaker gate, Eb→PAR, activation cooldown
- Speaker icon now silences everything — wedge clicks and MIDI both go quiet when the icon is off (previously only MIDI). Default is on. For full silence including DAW passthrough, use “Silence output” in Settings.
- Eb in C-HOME now goes to PAR (not SUB), with symmetric handling so genuinely ambiguous voicings keep the wheel still.
- Activation panel debounces rapid clicks — a 30-second cooldown on Request Code, with a clear “check Discord / wait Xs” message instead of silently firing more requests.
- In-plugin update banner now appears within a minute of a new release.
v0.3.2 (2026-05-24) — Detection fix for 48 kHz hosts
- CREMA now resamples to 44.1 kHz before detection. On 48 kHz Logic/Ableton sessions (and iOS) chords were tracking a semitone-and-a-half flat (Ab read as G). Real-time resampling fixes the shift; passthrough when the host is already 44.1.
- Activation panel sets expectations about the Discord code flow — tells you the code lands in a private Discord thread and expires in 10 minutes.
v0.3.1 (2026-05-24) — vi-wedge click fix + key marker fix
- Bonus wedges are click-targets only when visible — fixes “I click vi and nothing happens” (invisible bonus wedges were intercepting clicks) and erratic triggers from off-screen wedges.
- Keyboard root marker stays on the correct root while a wedge is held (clicking G7 in C now lights G, not D).
- Camelot DJ key codes moved out of Advanced into the main Settings tab.
- Cmd+, (Ctrl+, on Windows) opens/closes Settings.
v0.3.0 (2026-05-23) — Listen mode + 12-bar key tracker
- Listen mode. New top-level mode for continuous chord recognition + key tracking over the last 12 bars of incoming audio. Walks the wheel in time with what you’re playing or what’s on the speakers.
- 12-bar key tracker. Persistent key-state context across bars so passing chords don’t yank the key suggestion off the actual tonal center.
- Steadier space rotation. Fewer unwanted jumps between TONIC / PARALLEL / RELATIVE / SUB spaces — the wheel commits to the right space and stays there.
- Better minor-chord detection on solo piano. Tighter recognition of i / iv / v / VI / VII shapes when there’s no rhythm section to anchor the analysis.
v0.2.1 (2026-05-22) — Same-day patch
- Relative-minor key pairings fixed. Suggestions row pairs each major with the correct minor (C/Am, G/Em, etc.).
- In-plugin “update available” banner. When a newer build ships, the plugin surfaces a one-click link to the download page.
v0.2.0 (2026-05-22) — Day-1 release
Detection
- Enharmonic spelling now follows the functional system. G#dim7 in C major shows as G# (not Ab). Ebdim in C stays Eb. Same rules the web Wheel uses — byte-for-byte parity between plugin and browser.
- CREMA recognizer upgrades: hdim7 vs min7 distinction sharpened; 9 / 11 / 13 / add9 extension detection.
- Latency down from ~300–500 ms to ~120–200 ms (worker wake 200 → 80 ms, analysis window 2 s → 1 s, HIGH-priority worker thread).
- REL entry now requires a double-tap of vi (single-tap was too aggressive — one passing minor chord shouldn’t switch keys). BLUES exits on triple-tap of Am for vamps that resolve to relative minor.
Wheel + UI
- Key candidate pills: stable slots (no reordering as confidence shifts), relative-minor pair display (“Bb / Gm”), confidence-driven opacity, “DETECTED KEY SUGGESTIONS” subtitle.
- Bonus wedges: 1.10× radius, fully clickable, new on/off icon, opaque dark backing so the legend doesn’t bleed through inactive wedges.
- Click-to-hear synth: wedge press sustains a tone (gated triggerNoteGated + releaseGate); pill clicks fire one-shot. Wedge clicks now drive the engine’s noteOn[] so the keyboard and hub follow your clicks even with the mic off.
- KeyMeter pill confidence bar inset inside the rounded border; “(selected)” sub-label gets its own band; teal accent matches the KEY dropdown.
- ChordTimeline prompts (“Press the dot to record” / “Clear recording”) moved next to the record dot and X.
- New Legend panel: TONIC / PREDOMINANT / DOMINANT colour key.
- About panel: BK brand header, “chord function > chord structure” tagline, How-it-works + What’s-on links.
- Settings: removed Custom-X gate confusion + the hover bug that flickered Advanced visibility.
Install + packaging
- Signed (Developer ID: NATHAN HOWARD ROSENBERG), notarized, stapled. Gatekeeper lets you through with no Terminal commands.
- Three downloads: macOS Installer .pkg (recommended), Standalone .app, AU.
- macOS 11+, universal binary (Intel + Apple Silicon). Windows build is on the roadmap.
Web tool version history
- 4.5.2 Bug fixes. No longer exits HOME space on half-diminished chord. Clicking wedges wiil sustain notes again.
- BIG UPDATE 4.5.1: refactor of function and transposition engines eliminates a bunch of bugs (Thanks for pointing them out). New SYNTH ENGINE added. Improved song sharing. Better annotation system for lyrics or music theory notes. And I forget. Lots more stuff too. Enjoy!
- 3.18.93 Maj7 detection bug and sequencer insertion point fix
- 3.18.79 ♭III now correctly interpreted as PARALLEL when including major 7th
- 3.18.78 Temop and loop support for imported songs.
- 3.18.61 Fixes incorrect wedge identification in PARALLEL mode