$ lofi-hiphopper # fills silence, yields to audio

Fill silence with lofi.
Not with noise.

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.

# install
Install

# free · open source · macOS 14.4+ · Linux

interactive demo: simulate a call, then end it to resume. click or tap the spectrum for the next visualizer.

lofi-hiphopper — 120×40 DEMO
silence → sound AUTO-FILL ON FILLING
RADIO preview
  • ▸● lofi hip hop
  • ○ live now
  • ○ synthwave radio
  • ○ chillhop
SIGNAL
audio
silence
spectrum
live
player
mpv · 55%
auto-fill
on
VISUALIZER peak 98 Hz BARS · 1/6 h/l
NOW PLAYING Lofi Girl · lofi hip hop radio lofi hip hop radio 📚 beats to relax/study to LIVE vol 55%
SILENCE · filling with lofi
# behavior

Plays when quiet. Yields when it matters.

No mixing, no talking over your meeting. lofi-hiphopper watches system audio activity on macOS and Linux and fills only the silence.

fill

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.

call

Call-aware

Any app that opens the microphone counts as a call. Zoom, Meet, FaceTime, Teams: playback holds immediately.

viz

Six live visualizers

Bars, mirror, scope, halo, aurora, and matrix. Real FFT data, smooth attack and release, falling peak caps, and a frequency ruler.

keys

Editable everything

Keyboard bindings and mouse gestures live in one YAML table. Wheel volume, shift-wheel radio, ctrl-wheel visualizer.

bypass

Bypass noisy tools

Simulators and helper apps can keep an audio stream open. Add them to bypass_apps so they never interrupt lofi.

update

Updates by release

Release builds check GitHub on launch. A newer version appears as u in the footer; install and restart from the TUI.

# preview

A terminal that feels alive.

Truecolor panels, gradient spectrum bars, braille line work, and a compact layout that still fits a small window.

Six visualizers, one radio list. Demo capture; the app uses real FFT data.
Press ? for the live shortcut sheet. Every binding is editable.
# install

One paste, then it listens.

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

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 ↗

$ lofi-hiphopper -print-config
# 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 ↗.

# faq

Good questions.

Does it record my microphone?

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.

What happens during a Zoom or Meet call?

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.

Do notification sounds stop the music?

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.

Why does it say “waiting for silence”?

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.

Does it work on Linux?

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.

Why does it need mpv, yt-dlp, and ffmpeg?

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.

Is it free?

Yes. The code, releases, installer, and visualizers are free and open source. There is no account, telemetry, or paywall.

# install

Let the quiet sound better.

Install the latest release, or star the repository and build from source.

APP SHORTCUTS

j / k
select radio
enter
play selection
h / l
visualizer
m
mute
- / =
volume
a
auto-fill
?
shortcuts
q
quit

These shortcuts work in the app, not on this page. This preview only switches visualizers.

Mouse wheel: volume · shift+wheel: radio · ctrl+wheel: visualizer

Screenshot

full screenshot