JazzVis

Harmony visualizer — interactive controls for JazzVis.py

𝆑

Your harmony chart will appear here.

Choose a lead sheet above to get started.

How to Use These Controls
Lead Sheet
Type to search the chart collection — matching letters anywhere in a filename are highlighted, so e.g. typing moon or vrmt can both find "Moonlight in Vermont." Press Ctrl+F (or ⌘F on a Mac) from anywhere on the page to jump straight to this search box. Click a result (or press Enter) to load it. Click Upload to add your own .ls or .txt file — uploads are kept separate from the bundled collection. Loading a new lead sheet resets every control below to its default.
Download Chart
Saves the chart currently on screen as a PNG file.
Tonal Center
Click a slice of the circle of fifths to set the tonal center JazzVis analyzes the chart against; the wheel highlights whichever key is in effect, whether chosen automatically or by you. In this framework a major key and its relative natural minor share the same tonal center — for example, C major and A minor are treated the same way. Click Reset to Auto to let JazzVis estimate the tonal center from the chords instead.
Display
Roman Numerals shows the harmonic function of each chord (e.g. ii–V–I); Chord Names shows the actual chord symbols.
Bars Per Row
Type how many bars should appear in each row, separated by spaces — for example 8 8 8 8 for four rows of eight, or 12 12 8 12 for an AABA form. Press Enter or click to redraw.
Transpose
Click Transpose and pick a target key on the small wheel to redraw the whole chart in that key. This automatically switches the display to Chord Names while it's active; click Transpose again to turn it off.
Reset
Restores the tonal center to Auto, turns transpose off, switches back to Roman Numerals, and sets the layout back to 8 8 8 8.
How to Read the Chart
Circle-of-Fifths Key
The wheel below the chart shows how every key relates to the tonal center in effect, which always sits at the top (ref). Moving clockwise adds sharps (1♯, 2♯, …); moving counter-clockwise adds flats (1♭, 2♭, …). Every cell's background color comes from a position on this wheel.
Background Color
A run of cells sharing a background color is in the same tonal center. Red is always the tonal center in effect; colors shift toward yellow for keys reached by sharps and toward blue for keys reached by flats. A change in background color marks a shift to a new tonal center.
Minor Cadences
A cadence resolving to a minor chord is split into three horizontal bands, with a lighter stripe down the middle in the same color family as the surrounding background. This sets minor cadences apart from major ones at a glance while keeping them in the same tonal center.
Brackets & Glyphs
Square brackets group the chords of a cadence — the strongest signal of a tonal center. A small glyph just before the opening bracket (e.g. 1♭, 5♭, 3♯) names that cadence's tonal center on the circle-of-fifths wheel.
Diamonds
A diamond marks a secondary dominant or a chord in a chain of dominants — a chord that points toward another key without the progression actually resolving there. Its fill color shows the key it's borrowed from.
Pentagons
A pentagon marks a modal-interchange (borrowed) chord — one drawn momentarily from a parallel scale, such as the parallel minor, Dorian, or Mixolydian. Its fill color shows the borrowed-from key, while the background keeps the color of the surrounding tonal center.
Black Circles
A black circle marks a diminished chord. Diminished chords don't belong to any major scale, so they're shown in black rather than a key color.
Gray Shapes
A gray square marks a tritone substitution — a dominant chord standing in for the one a tritone away. A gray background marks a chain of dominants: a run of dominant chords that each point toward a different key without settling on one, so the passage has no single tonal center.
Song File Format

Lead sheets are plain text files (.ls or .txt) with a few header lines followed by the chord progression. Here's Wave.txt, included with this app:

Title = Wave
ComposedBy = Antonio Carlos Jobim
DBKeySig = C
TimeSig = 4 4
Bars = 44
 DM7 | Eo7 | Am7 | D7 |
 GM7 | Gm7 | F#7 | B7 |
 Bm7 E7 | Bb7 A7 | Dm7 G7 | Dm7 G7 |
 DM7 | Eo7 | Am7 | D7 |
 GM7 | Gm7 | F#7 | B7 |
 Bm7 E7 | Bb7 A7 | Dm7 G7 | Dm7 G7 |
 Gm7 | C7 | FM7 | FM7 |
 Fm7 | Bb7 | Eb | Em7b5 A7 |
 DM7 | Eo7 | Am7 | D7 |
 GM7 | Gm7 | F#7 | B7 |
 Bm7 E7 | Bb7 A7 | Dm7 G7 | Dm7 G7 |

The header lines give the song's title, composer, the key signature as written on the original lead sheet (DBKeySig), the time signature as two space-separated numbers (TimeSig), and the total number of bars (Bars).

Each remaining line is a row of the progression, with bars separated by |. A bar can hold one chord (DM7) or several space-separated chords played within that bar (Bm7 E7). Chord names use a root (AG, optionally # or b) followed by a quality such as M7, m7, 7, o7, m7b5, sus4, 6, or 9. Bars should equal the total number of bars across all rows; the line breaks themselves are just for readability and don't need to match the chart's row layout.