A vintage vacuum-tube amplifier visualizer for cliamp. Each EQ band is rendered as a glowing tube. Filaments heat from warm amber through gold and white-hot, then bleed into red when the signal overdrives. Phosphor afterglow gives tubes that always-warm look — even at idle, the bulbs have a faint ember glow.
║ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ╭─────╮ ║
║ │█████│ │██●██│ │░░░░░│ │░░░░░│ │░░░░░│ │░░░░░│ │▒▒●▒▒│ │▓▓●▓▓│ │░░░░░│ │░░░░░│ ║
║ │█████│ │█████│ │░░●░░│ │░░░░░│ │░░░░░│ │▒▒●▒▒│ │█████│ │█████│ │░░░░░│ │░░░░░│ ║
║ │█████│ │█████│ │█████│ │░░░░░│ │██●██│ │█████│ │█████│ │█████│ │▒▒●▒▒│ │░░░░░│ ║
║ │█████│ │█████│ │█████│ │▓▓●▓▓│ │█████│ │█████│ │█████│ │█████│ │█████│ │░░░░░│ ║
║ │█████│ │█████│ │█████│ │█████│ │█████│ │█████│ │█████│ │█████│ │█████│ │▒▒●▒▒│ ║
║ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ╰─────╯ ║
║ [▬▬▬▬·] [▬▬▬▬▬] [▬▬▬▬·] [▬▬▬··] [▬▬▬▬·] [▬▬▬▬·] [▬▬▬▬·] [▬▬▬▬▬] [▬▬▬▬·] [▬▬▬··] ║
║ 32 64 125 250 500 1k 2k 4k 8k 16k ║
- 10 tubes, one per cliamp EQ band, labeled by frequency (32 Hz – 16 kHz)
- Warm amber glow that brightens with level — uses the ANSI 256 color palette so it works on any modern terminal
- Overdrive flare: bands above 78% bleed into red, the "running hot" look of a tube driven into clipping
- Peak hold markers (
●) that hover at the recent max and slowly decay — like a classic VU meter's needle hold - Phosphor afterglow: even silent tubes show a faint dim glow tied to overall signal
- VU needles below each tube for instantaneous level
- Chrome chassis rails and frequency engraving
cliamp plugins install 8bit64k/cliamp-plugin-tubeampOr manually:
mkdir -p ~/.config/cliamp/plugins
cp tubeamp.lua ~/.config/cliamp/plugins/Then restart cliamp and press v to cycle visualizers until you reach tubeamp.
Optional. Add to ~/.config/cliamp/config.toml:
[plugins.tubeamp]
# Multiplier on incoming band levels (default 1.0). Bump it up if your audio
# sources sit low in the spectrum range.
gain = 1.0
# Attack: how quickly the filament heats up on rising signals (0..1).
# Higher = snappier response. Default 0.55.
attack = 0.55
# Release: how slowly the filament cools on falling signals (0..1).
# Lower = more afterglow / persistence. Default 0.18.
release = 0.18
# Overdrive threshold (0..1). Bands at or above this level flare red.
# Default 0.78.
overdrive = 0.78- cliamp 1.x (Lua plugin API with
type = "visualizer") - Terminal: any with ANSI 256-color support (essentially everything modern: xterm, kitty, wezterm, alacritty, ghostty, foot, iTerm2, Windows Terminal)
Tubeamp adapts to the visualizer pane size in four tiers, with row-budget priority filaments > envelopes > VU > labels — so even cliamp's default 5-row visualizer pane gets a real-looking tube (envelopes + 3 filament rows), and VU/labels only appear when there's extra height.
| Tier | Width | Rows | Looks like |
|---|---|---|---|
| FULL | ≥ 53 cols | ≥ 4 rows | rails + envelopes + filaments; VU at ≥6 rows; labels at ≥9 rows |
| COMPACT | ≥ 39 cols | ≥ 4 rows | envelopes + filaments; VU at ≥6 rows; labels at ≥9 rows; no rails |
| MINI | ≥ 19 cols | ≥ 3 rows | bare 1-char glow columns + thin VU; no envelopes |
| HIDDEN | otherwise | otherwise | empty (visualizer renders nothing) |
Row-budget progression at any width within FULL/COMPACT:
| Pane rows | Components | Filament rows |
|---|---|---|
| 4 | envelopes + filaments | 2 |
| 5 (cliamp default) | envelopes + filaments | 3 |
| 6 | envelopes + filaments + VU | 3 |
| 7 | envelopes + filaments + VU | 4 |
| 8 | envelopes + filaments + VU | 5 |
| 9 | envelopes + filaments + VU + labels | 5 |
| 10+ | all four, filaments grow | up to 14 |
In the FULL tier the layout stretches gaps up to 5 chars before centering, so wide terminals look balanced rather than left-anchored. State (smoothed level, peak hold, afterglow) carries across resizes so resizing back up doesn't reveal cold tubes.
Each frame the plugin computes:
- Smoothed level per band (asymmetric attack/release — heating is fast, cooling is slow)
- Peak position with hold-then-decay
- Glow color from an 11-step amber → gold → white-hot ramp, switching to a red overdrive ramp above threshold
Drawing is done with Unicode box-drawing characters (╭ ╮ ╰ ╯ │ ─) for the glass envelopes, shade blocks (░ ▒ ▓ █) for the filament fill, and ANSI 256 foreground colors for the glow.
MIT.
