Fills silence automatically
When no app is producing audio, it starts the selected radio. When sound returns, it stops or mutes based on your hold mode.
A terminal companion for macOS and Linux that plays Lofi Girl when your computer is quiet, gets out of the way for calls and other audio, and draws six live spectrum visualizers.
No mixing, no talking over your meeting. lofi-hiphopper watches system audio activity on macOS and Linux and fills only the silence.
When no app is producing audio, it starts the selected radio. When sound returns, it stops or mutes based on your hold mode.
Any app that opens the microphone counts as a call. Zoom, Meet, FaceTime, Teams: playback holds immediately.
Bars, mirror, scope, halo, aurora, and matrix. Real FFT data, smooth attack and release, falling peak caps, and a frequency ruler.
Keyboard bindings and mouse gestures live in one YAML table. Wheel volume, shift-wheel radio, ctrl-wheel visualizer.
Simulators and helper apps can keep an audio stream open. Add them to bypass_apps so they never interrupt lofi.
Release builds check GitHub on launch. A newer version appears as u in the footer; install and restart from the TUI.
Truecolor panels, gradient spectrum bars, braille line work, and a compact layout that still fits a small window.
macOS 14.4 or newer, or Linux with PipeWire or PulseAudio, on arm64 or amd64. Pick your system; the block installs the runtime dependencies, fetches the latest release, verifies its checksum, and puts the binary in ~/.local/bin. Copy all three lines once.
macOS uses Homebrew ↗; Linux uses your package manager plus PipeWire (pw-dump) or PulseAudio (pactl). The installer ↗ picks the right build for your OS and CPU.
# runtime dependencies (Homebrew)
brew install mpv yt-dlp ffmpeg
# latest release · detects OS and CPU
curl -fsSL https://raw.githubusercontent.com/WilsonNet/lofi-hiphopper/main/install.sh | bash
# start filling silence
~/.local/bin/lofi-hiphopper # runtime dependencies (pacman · PipeWire)
sudo pacman -S --needed mpv yt-dlp ffmpeg pipewire
# latest release · detects OS and CPU
curl -fsSL https://raw.githubusercontent.com/WilsonNet/lofi-hiphopper/main/install.sh | bash
# start filling silence
~/.local/bin/lofi-hiphopper # runtime dependencies (apt · PipeWire)
sudo apt install mpv yt-dlp ffmpeg pipewire-bin
# latest release · detects OS and CPU
curl -fsSL https://raw.githubusercontent.com/WilsonNet/lofi-hiphopper/main/install.sh | bash
# start filling silence
~/.local/bin/lofi-hiphopper # runtime dependencies (dnf · PipeWire)
sudo dnf install mpv yt-dlp ffmpeg pipewire-utils
# latest release · detects OS and CPU
curl -fsSL https://raw.githubusercontent.com/WilsonNet/lofi-hiphopper/main/install.sh | bash
# start filling silence
~/.local/bin/lofi-hiphopper Add ~/.local/bin to PATH if you want the short lofi-hiphopper command. No config file is created. Defaults live inside the binary. To customize, run lofi-hiphopper -print-config and redirect it wherever you like. Prefer a binary? Download release ↗
# optional overrides; everything else stays default
volume: 35
visualizer: mirror # bars | mirror | scope | halo | aurora | matrix
hold_mode: stop # stop | pause | mute
yield_delay: 3s # ignore short notification pings
bypass_apps:
- "CoreSimulator"
- "com.example.MyApp"
shortcuts:
- action: mute
keys: ["m"]
- action: next_radio
keys: ["j", "shift+wheel_down"] Read the configuration reference ↗ or build from source ↗.
No. It reads CoreAudio process flags on macOS, or PipeWire/PulseAudio stream state on Linux, to see whether an app has an active input or output stream. The only audio it decodes is the radio stream, silently, to draw the spectrum.
Any app with an active microphone stream holds playback immediately. With the default hold_mode: stop, the stream stops and re-resolves when the call ends. pause and mute are opt-in alternatives.
No. Other audio must keep playing for yield_delay (3 seconds by default) before lofi yields, so short notification pings are ignored. A call still holds playback immediately.
Another app is producing audio. Check the footer for the app name. If the audio is not important, add the app to bypass_apps in your optional config.
Yes. Since v0.4.0 it runs on Linux with PipeWire (it reads stream state with pw-dump) and falls back to PulseAudio (pactl). It is tested on Arch Linux with PipeWire. Apps that only capture desktop audio, such as cava, are not treated as calls.
mpv handles playback, yt-dlp resolves YouTube and channel live URLs, and ffmpeg produces the silent audio analysis for the visualizers. Playback continues if the analyser fails.
Yes. The code, releases, installer, and visualizers are free and open source. There is no account, telemetry, or paywall.
Install the latest release, or star the repository and build from source.