How to tune Nova to get the look and feel you want. Presets as case studies, the compressor lane explained, and common recipes.
Think of Nova as three layers stacked on top of each other:
| Layer | What it does | Key knobs |
|---|---|---|
| Audio | How the music moves — speed, responsiveness | attack, release, tilt |
| Color | What you see — glow, overdrive, ring blending | theme, overdrive, sustain, blend, ring_blend |
| Control | Shape the signal — gate, curve, limiter | gate, knee, ceiling |
The preset you choose sets all three layers at once. You can then override any individual knob in your config. The preset is a starting point, not a locked choice.
When you set preset = "plasma", Nova applies plasma's profile at the start of
every frame. But here's the key: any knob you explicitly set in your TOML
config survives the overlay. The preset only fills in what you didn't set.
[plugins.nova]
preset = "plasma"
attack = 0.95 # this overrides plasma's attack (0.65)
# everything else still comes from plasmaThis means you can start from a preset you like, then tweak one knob at a time. Every preset below includes a "try tweaking" section — those are the knobs that most define that preset's personality.
The standard everything is measured against. Not the most exciting, but the most honest — it shows you what Nova actually does with no stylistic spin.
attack = 0.55 release = 0.18
overdrive = 0.92 sustain = 0.82 blend = true
bloom_attack = 0.60 bloom_release = 0.25
gate = 0.00 knee = 1.00 tilt = 0.00
ring_blend = true
What it's going for: Neutral. Decay tails are medium-length — a kick drum lights the wall and fades in about a second. Overdrive fires at 0.92, which is high enough that only genuine peaks trigger the flare. Bloom has its own moderate envelope. The compressor lane is wide open (gate=0, knee=1.0 linear).
Try tweaking: Lower sustain to 0.7 for faster flare decay — the wall
calms down quicker after big hits. Raise overdrive to 0.95 to make flares
rarer but more dramatic when they happen.
Built for music with sharp attacks — rock, metal, drum-heavy electronic. The wall snaps to attention on every hit and stays lit.
attack = 1.00 release = 0.25
overdrive = 0.96 sustain = 0.90 blend = true
bloom_attack = 1.00 bloom_release = 0.95
gate = 0.20 knee = 1.00 tilt = 0.00
ring_blend = true
What it's going for: Instant response. attack=1.0 means zero smoothing lag — the wall jumps on the first tick of any new sound. Bloom is also max attack, so dots thicken instantly. sustain=0.9 means flares hold on for a long time. gate=0.20 raises the noise floor, so quiet passages go dark and only real hits register. The combination of max attack + gate means the wall pulses hard on beats and goes quiet between them.
Why bloom_release = 0.95: High release means fast decay — dots melt away quickly. Combined with max bloom attack, dots snap to full density on every hit then clear fast. The wall stays responsive and never clogs up between beats.
Try tweaking: Lower gate to 0.1 if the wall feels too dark between hits.
Lower sustain to 0.7 if the flare overstays. Try bloom = false to see what
transient looks like as pure color with no dot texture — a different animal.
The opposite of transient. Soft, shimmering, treble-forward. Sounds like looking at clouds through heat haze.
attack = 0.30 release = 0.08
overdrive = 0.97 sustain = 0.90 blend = false
bloom_attack = 0.40 bloom_release = 0.05
gate = 0.00 knee = 0.60 tilt = 0.40
ring_blend = true
What it's going for: Smear. attack=0.3 means the wall takes several frames to reach full brightness — sounds blur into each other. release=0.08 is fast decay, so the blur is attack-side only. tilt=0.4 boosts treble, making outer rings more active than inner — the opposite of bass-heavy presets. knee=0.6 (soft knee) makes low-level signal brighter, so quiet passages glow evenly.
Why blend = false: Normally blend lets overdrive color spill into adjacent rings. Nebula kills it. Flares stay confined to their own bands. Combined with tilt pushing energy outward, this creates distinct ring separation at the edges.
Why bloom_release = 0.05: Low release means slow decay — dots linger long after the signal fades. Combined with moderate bloom_attack (0.40), the wall builds at a moderate pace and then holds its texture for a long tail. It's mostly a color show, but when dots do appear they stick around.
Try tweaking: Drop tilt to 0.0 to hear what the preset sounds like
without the treble bias — the bass rings will come back. Raise attack to
0.5 to reduce the smear. Try blend = true to let flares bleed — it softens
the hard ring boundaries.
Energetic, sustained, works with everything. The preset to pick when you don't want to think about presets.
attack = 0.65 release = 0.10
overdrive = 0.90 sustain = 0.88 blend = true
bloom_attack = 0.45 bloom_release = 0.23
gate = 0.03 knee = 0.90 tilt = 0.20
ring_blend = true
What it's going for: Lively but not extreme. attack=0.65 is a touch faster than reference — the wall feels "alive" without being twitchy. gate=0.03 is a tiny noise floor bump — nearly imperceptible, but it cleans up the faintest flicker on silence. tilt=0.2 gives treble a slight edge for sparkle.
Why these values work together: Plasma is the midpoint of almost every dimension. It's faster than reference, slower than transient. More bloom than nebula, less than afterglow. Every knob is nudged slightly from neutral toward "energetic" — no single knob defines it, the sum does.
Try tweaking: Raise gate to 0.08 for a cleaner noise floor on quiet
passages. Drop overdrive to 0.85 for more frequent but gentler flares.
Try ring_blend = false to see the hard-ring version — surprisingly different
feel from the same dynamics.
The CRT charge-up preset. Slow to wake, fast to clear, treble-biased for a ghostly glow. Named for the green phosphor afterimage on old monitors.
attack = 0.30 release = 0.05
overdrive = 0.98 sustain = 0.90 blend = false
bloom_attack = 0.05 bloom_release = 0.90
gate = 0.00 knee = 2.60 tilt = 0.50
ring_blend = true
What it's going for: Slow wake, fast clear. The key numbers are bloom_attack=0.05 and bloom_release=0.90. Dots take a long time to build up (low attack), but once the signal drops they clear quickly (high release). The visual effect is a slow-building glow that snaps clean between events — like a CRT phosphor that charges slowly but resets fast.
Why knee = 2.6: This is the hardest knee of any preset. The response curve is strongly concave — low levels are dark, high levels hit hard. Combined with tilt=0.5 pushing energy to the edges, the outer rings glow persistently while the center stays dark until genuine bass events.
Why blend = false: Like nebula, afterglow keeps flares in their lanes. But for a different reason — with bloom building dots slowly, bleed would smear the ring boundaries into mud.
Try tweaking: Lower bloom_release to 0.50 for slower dot fade — dots
linger longer after events. Drop knee to 1.50 if the contrast feels too
stark. Try bloom = false — the color-only version is a completely different
vibe, more "aurora borealis" than "CRT burn."
(the best one) The hardware EQ look. Distinct ring bands, fast attack, fast release. Like watching a 10-band graphic equalizer rendered as concentric circles.
attack = 0.85 release = 1.00
overdrive = 0.95 sustain = 0.95 blend = false
bloom_attack = 1.00 bloom_release = 0.85
tilt = 0.30
ring_blend = true
What it's going for: Discrete band response. attack=0.85 and release=1.00 mean bands snap up and snap back — a snare hit lights its ring and it drops as soon as the signal does. sustain=0.95 holds the overdrive heat for a long tail, so flares linger even though the band response is instant. bloom attack is instant, bloom release is fast (0.85 — dots clear quickly). The wall pulses in distinct rings rather than a smooth gradient.
Note: analog doesn't set gate, knee, or ceiling — it inherits those
from your config (or reference defaults: gate=0, knee=1.0, ceiling=1.0).
Why release = 1.00: This is the maximum — bands never decay on their own, they only drop when the music drops. Every hit leaves a visible "hold" on its ring. In practice the band smoothing means they still move, but each ring has a pronounced sustained presence.
Try tweaking: Set ring_blend = false for the hardest possible ring
boundaries — pure bands with no gradient. Lower release to 0.3 for more
movement between hits. Try blend = true to let flares bleed — the hard
bands soften at the edges.
These three knobs form a mastering-style compressor lane. They apply in order: gate → knee → ceiling. Understanding them as a unit is more useful than understanding each in isolation.
raw signal
│
▼
GATE — clamp everything below threshold to 0
│
▼
KNEE — reshape the response curve (^knee)
│
▼
CEILING — hard-cap everything above threshold
│
▼
final level → color + bloom
Gate (0–0.5): A noise gate. Anything below this level is forced to zero. Useful for cleaning up the faint outer-ring glow on quiet passages. Start at 0.03–0.08 for subtle cleanup; 0.1–0.2 for aggressive silence between hits. transient uses 0.2 for exactly this reason — the wall goes properly dark between beats.
Knee (0.1–3.0): Shapes the level→brightness curve. 1.0 is linear — a band at 0.5 maps to 50% brightness. Below 1.0 is "soft knee" — low levels are brighter, the curve is flatter and more even (nebula uses 0.6). Above 1.0 is "hard knee" — low levels are darker, high levels hit harder, more contrast (afterglow uses 2.6).
Ceiling (0.01–1.0): A brick-wall limiter. Any level above ceiling is clamped flat. 1.0 = off. Lower values create a narrow shimmer band — try 0.2–0.6 with gate=0.03 to constrain color to a thin slice while bloom still animates.
Putting them together: gate = 0.08, knee = 2.00, ceiling = 0.50 creates a
narrow, high-contrast window — bands below 8% are silent, bands above 50% are
clamped flat, and the remaining 8–50% range is aggressively curved for maximum
contrast. The wall barely flickers until a real hit, then slams to full.
"I want more movement"
→ Lower attack (0.3–0.4) so bands lag behind the music, creating visible
sweep. Raise release (0.3–0.5) so they linger. The wall "breathes."
"I want less color, more texture"
→ Lower ceiling to 0.30–0.50. Set knee = 0.50. Colors stay muted and narrow.
Bloom (which reads from the same signal but has its own envelope) still
animates fully — the wall pulses in density rather than color.
"I want a retro CRT look"
→ preset = "afterglow" with ring_blend = false. Try theme = "crt" for
green phosphor. The slow bloom release + hard ring boundaries + green glow is
as close to an old monitor as Nova gets.
"I want the wall to barely move"
→ attack = 0.10, release = 0.02. gate = 0.03, ceiling = 0.20, knee = 0.50.
The wall shimmers faintly. Almost ambient. Works well as a background
visualizer for coding or reading.
"I want to see every kick drum"
→ Start from preset = "transient". Set gate = 0.15. The wall is dark until
a kick hits, then the bass rings flare hard. Max attack means no lag — the hit
and the flash are simultaneous.
"Cycle everything and watch"
→ cycle_presets = true, cycle_themes = true, cycle_seconds = 15. Every 15
seconds Nova switches to a new preset and theme. A zero-effort way to preview
all the feels and find what you like.
Bloom is Nova's signature: braille dots that thicken toward the center of the screen as rings heat up. It has its own attack/release envelope (separate from the color envelope), so dots can move at a different speed than color.
- bloom_attack: How fast dots thicken when a ring heats. Low = slow creep (afterglow's 0.05). High = instant snap (transient's 1.00).
- bloom_release: How fast dots melt back when the signal drops. Low = slow fade, dots linger (nebula's 0.05). High = fast clear, dots melt quickly (transient's 0.95).
The interplay of color envelope and bloom envelope is where Nova's personality lives. afterglow is the clearest example: color fades slow (attack=0.30) and dots build slowly (bloom_attack=0.05) but clear fast once the signal drops (bloom_release=0.90). nebula is the opposite: dots linger after the signal fades (bloom_release=0.05) and build at a moderate pace (bloom_attack=0.40).
Set bloom = false to turn off dot mutation entirely — the glyphs stay fixed
and only color changes. This isn't "worse" — it's a different visual.
afterglow + bloom=false is a smooth color field. transient + bloom=false is
pure ring pulses with no texture.
The complete list. For the audio signal chain and implementation details, see docs/DESIGN.md.
| Key | Values | Default | What it does |
|---|---|---|---|
theme |
aurora, sol, sirius, rigel, antares, crt | aurora | Color theme |
ring_shape |
circle | circle | Ring geometry |
ring_blend |
true/false | true | Smooth gradient between rings |
fit |
fill, contain | fill | How art fits the pane |
start |
black, stipple | black | Resting glyph density |
art_path |
file path | — | External art file (optional) |
| Key | Values | Default | What it does |
|---|---|---|---|
preset |
reference, transient, nebula, plasma, afterglow, analog | reference | One-knob feel |
cycle_presets |
true/false | false | Auto-rotate presets |
cycle_themes |
true/false | false | Auto-rotate themes |
cycle_seconds |
2+ | 20 | Seconds per cycle step |
| Key | Range | Default | What it does |
|---|---|---|---|
attack |
0–1 | 0.55 | Envelope rise speed |
release |
0–1 | 0.18 | Envelope decay speed |
overdrive |
0–1 | 0.78 | Flare trigger threshold |
sustain |
0–0.97 | 0.82 | Flare decay per frame |
blend |
true/false | true | Flare spills into adjacent rings |
tilt |
0–1 | 0.00 | Per-band treble boost |
| Key | Range | Default | What it does |
|---|---|---|---|
bloom |
true/false | true | Braille dot thickening |
bloom_attack |
0–1 | 0.60 | Dot thickening speed |
bloom_release |
0–1 | 0.15 | Dot melting speed |
| Key | Range | Default | What it does |
|---|---|---|---|
gate |
0–0.50 | 0.00 | Noise gate threshold |
knee |
0.10–3.00 | 1.00 | Response curve (1.00 = linear) |
ceiling |
0.01–1.00 | 1.00 | Limiter ceiling |
| Key | Range | Default | What it does |
|---|---|---|---|
render_rate |
0.25–1.00 | 1.00 | Fraction of frames rendered |
max_cols |
0+ | 0 | Canvas width cap (0 = unlimited) |
max_rows |
0+ | 0 | Canvas height cap (0 = unlimited) |
cell_aspect |
0.20–2.00 | 0.50 | Terminal cell aspect ratio |
| Key | Values | Default | What it does |
|---|---|---|---|
color_mode |
glow, mono, passthrough | glow | Color rendering mode |
mono_color |
0–255 | 11 | ANSI color for mono mode |
debug |
true/false | false | Show preset/theme footer |
Last reviewed: 2026-06-09.