The Drop · October 14, 2026
Why nobody can read the text in your music visualizer
You typed the lines, the render looks great, then somebody watches it and asks what it said. Three things decide whether text in a music visualizer is readable, and font size is the one you have least control over, because there is no size control at all.
Photo via Unsplash
There is no font size setting, and that is the whole story
Look for a size slider and you will not find one. The app starts every line at 230 pixels tall in a 1080 pixel frame, measures how wide that comes out, and if the line is wider than 90 percent of the frame it scales down by exactly enough to fit. That is the entire sizing system.
So the two things that actually set your type size are how long the line is and how wide the typeface is. Neither looks like a size control, so neither gets treated as one. A short word stays enormous: I measured all 50 fonts and a six character word renders at the full 230 pixels in every one of them. Nothing shrinks until you cross the width limit.
The same line comes out three times bigger in one font than another
This is the part that catches people, because the app picks a new typeface every time the content changes, shuffled from whichever fonts you left ticked. The same line can come up twice in one render at completely different sizes, and you chose neither of them.
Here is a real 22 character line, NO WATERMARK NO SIGNUP, measured in the actual
fonts the app ships. The middle column is how many characters fit before shrinking starts.
| Font | Characters at full size | That 22 character line |
|---|---|---|
| Bebas Neue | 19 | 213 px |
| Anton | 16 | 174 px |
| Oswald | 14 | 153 px |
| Archivo Black | 9 | 108 px |
| Michroma | 7 | 83 px |
| Stalinist One | 6 | 71 px |
Across all 50 fonts that one line lands between 71 and 213 pixels. Same words, same settings, a three fold difference decided by a shuffle. Push it out to 56 characters and the range drops to 29 to 91 pixels, which at the bottom is under three percent of the picture height.
For a sense of what counts as large enough, broadcast subtitling is a fair yardstick. The BBC's subtitle guidelines ask that font size fit within a line height of 7 to 8 percent of the video height, which on a 1080 frame is roughly 76 to 86 pixels. That is the floor for text somebody is expected to read sitting still, with no flashing and nothing competing. Anything that has shrunk below it is decorative, whatever you meant it to be.
So keep a line you want read under about 15 characters, and untick the widest faces when the text matters. The fonts guide goes through the set.
How long is a line actually on screen?
The content change rate decides this, and it is tied to tempo, so the same setting means different things on different tracks. The arithmetic is just the beat length times the rate.
| Setting | At 120 BPM | At 140 BPM |
|---|---|---|
| Every 1/8 beat | 62 ms | 54 ms |
| Every 1/4 beat | 125 ms | 107 ms |
| Every 1/2 beat | 250 ms | 214 ms |
| Every beat | 500 ms | 429 ms |
| Every 2 beats | 1000 ms | 857 ms |
| Every 4 beats | 2000 ms | 1714 ms |
Every 1/4 beat is the setting the app opens on, and on a 140 BPM track that gives each line 107 milliseconds. Nobody reads anything in a tenth of a second.
Netflix publishes a hard floor for this in its subtitle timing guide: an event should never be shorter than 20 frames, which it writes as 4/5 of a second, and that floor is meant for events of only one or two words. 800 milliseconds, for two words, with nothing strobing.
Run it against the table and the rule falls out cleanly. Every beat clears 800 ms only at or below 75 BPM. Every 2 beats clears it at or below 150 BPM. Every 4 beats clears it at or below 300 BPM. At exactly 150 BPM, Every 2 beats lands on 800 ms to the millisecond. The BBC is stricter and scales with the words, around 0.3 seconds each, so a four word line wants 1.2 seconds and only Every 4 beats gets there at 140 BPM.
None of this makes the fast rates wrong. It makes them a texture setting rather than a reading setting. A line going past at 107 ms is a visual effect made of letters, which is a fine thing to want. Just do not expect it to also communicate.
The contrast problem only exists during the flash
Between flashes the app is simple and good: white text on solid black, with a hard black drop shadow offset behind it. You cannot do much better than that. During a flash it changes, and how it changes depends on the effect.
With most effects the text is painted in the flash colour, over a background that is black with a 25 percent wash of that same colour on top. Text and background share a hue, so all your contrast comes from the black that is left. That is why a mid tone palette colour is the worst case and a bright one is fine.
The strobe effect does something else again. The text is forced to black while the background fills with the flash colour, and a heavy black fill alternates on and off roughly every 33 milliseconds. Black letters on a colour field that is itself blinking.
There is a one click fix for the first case. Tick Black and white text and the fill is forced to white on every flash, whatever the palette does. If the text carries your message, tick it. The rest of the settings walkthrough can stay however you like.
Two of the text flicker modes also cost reading time. Blink shows the text on alternate frames, so it is absent half the time it is nominally up, and strobe alternates white with a mid grey. Fine for a word nobody needs to parse, bad for a lyric. The usual caution applies too: fast full screen flashing can trigger seizures in people with photosensitive epilepsy, so if you are stacking a fast flicker on a fast content rate, slow one of them down and warn people before they press play.
The text also moves, every single flash
Easy to miss because it looks intentional. On every flash the app re-rolls a jitter and the text jumps up to 60 pixels sideways, up to 40 vertically, and tilts by up to about 3 degrees. That is per flash, not per line, so a line sitting across six flashes gets shoved to a new position and angle six times while you are reading it. You cannot switch the jitter off, so the lever is flash rate: fewer flashes under a line means fewer jumps across it.
The settings that make text readable
- Content change rate: Every 2 beats or Every 4 beats. Every 2 clears the 800 ms floor up to 150 BPM, Every 4 clears it everywhere. The single biggest lever.
- Keep readable lines short. Under about 15 characters and most faces render at or near full size. Long lines are what drive the type down to where the typeface lottery starts to hurt.
- Untick the very wide fonts when text matters. Stalinist One, Press Start 2P, Michroma, Zen Dots and Nosifer all fit fewer than nine characters before shrinking.
- Tick Black and white text so the fill cannot land on a mid tone palette colour mid flash.
- Avoid the strobe effect under text you want read. It inverts the letters to black and blinks the background behind them.
Go and change the content rate
Free, in the browser, no signup, 1080p out as a WebM you download. Every 2 beats with Black and white text ticked is the readable preset. New here? Start on the home page.
Open the visualizer