7 releases (4 breaking)
Uses new Rust 2024
| 0.6.1 | Nov 9, 2025 |
|---|---|
| 0.6.0 |
|
| 0.5.1 | Sep 10, 2024 |
| 0.5.0 | Aug 23, 2024 |
| 0.2.1 | Jun 12, 2022 |
#63 in Visualization
150KB
3.5K
SLoC
Coffee Music Visualizer
A personal GUI + TUI music visualizer written in Rust.
What's new in v0.6.0
Terminal mode is back and enabled by default!
Minifb support has been removed!
Controls have been remapped. I'm currently preparing to introduce more complex visualizers that allow inputs.
A little post-processing effect has been added to window mode which should make the animations a little more smooth looking.
Examples:

Platform support
Coffeevis works on Linux. Windows support is being planned.
Installation
cargo install coffeevis
Configuration
Coffeevis does not remember settings and does not generate config files (feature won't be implemented unless requested).
To get around this, make a user script that runs coffeevis with flags
E.g:
#!/bin/bash
/path/to/coffeevis --fps 60 --no-auto-switch --size 40x40
To force Coffeevis to run in Xwayland, unset WAYLAND_DISPLAY
WAYLAND_DISPLAY= coffeevis
Flags
Coffeevis supports temporary options at launch
| Option | Value(s) | Description |
|---|---|---|
| --ascii --block --braille |
run in the terminal | |
| --no-auto-switch | disable automatic visualizer switching | |
| --size | 80x80 | set resolution in window mode |
| --scale | 2 | upscale in window mode |
| --fps | 60 | set refresh rate (by default coffeevis will try to query your monitor's refresh rate) |
| --resizable | allow resizing in window mode | |
| --max-con-size | 50x50 | set maximum resolution in terminal mode |
| --vis | spectrum | launche coffeevis with the specified visualizer |
| --effect | crt | blank out every other horizontal line to simulate CRT effect |
| --effect | interlaced | (default) interlace fields together to make the visualizer appear smoother (the number of fields is the scale value) |
| --effect | none | rendering is scaled and presented as is |
Notes
Upon launch coffeevis will grab your default audio source, use an audio
config tool to direct your desired source to coffeevis (e.g. pavucontrol).
On Wayland, coffeevis cannot set itself on top so you will have to rely on an external tool. For example, on KDE Plasma, you can use the window rules feature.
When input is quiet, the visualizer will try to amplify the input so that the visualizers don't become boring.
Coffeevis prints text directly to stdout, rendering may be heavy depending on your terminal.
A terminal with GPU-accelerated support is recommended (i.e Alacritty, Kitty, Wezterm, ...)
A maximum resolution is built into the console mode (default: 50x50). Coffeevis will render in the center of the screen if terminal dimensions are larger than the limit.
It looks the smoothest when you're in a dark room with low monitor brightness. But don't do that lol
Keyboard shortcuts
Global
| Key | Description |
|---|---|
| n | iterate forward through visualizers (wraps around) |
| b | iterate backward (wraps around) |
| m | switche through sets of visualizers (wraps around) |
| q | exit |
| \ | toggle auto switching (default: ON, 8 seconds) |
Terminal
| Key | Description |
|---|---|
| . | toggle between ascii rendering, block rendering and braille rendering |
| 9 / 0 | decrease/increase maximum resolution |
| 7 / 8 | decrease/increase fps by 5 (default: 60) |
| 1 .. 6 | change fps to 10 ... 60 respectively |
Please don't look at my code. No I'm not hiding anything in there it's all garbage code idk how to do gpu programming so it's all cpu code uh uhhh
Dependencies
~9–48MB
~659K SLoC