A small glass capsule that sits above the Windows taskbar and shows what's playing. Works with any player, scrolls the volume of one app at a time, shows synced lyrics and puts your music on Discord. One portable exe, nothing to install.
- Download
lumen.exefrom the latest release. - Put it in any folder and run it. A short tour shows up on first launch.
- Play something. The capsule appears above the taskbar.
Settings are in the tray icon menu. Config is saved as lumen.config.json next to the exe.
Uninstall: turn off "Start with Windows" in settings (if you turned it on), quit from the tray, then delete the folder and any shortcuts you made in the tour. Nothing else is left behind.
Windows may show a SmartScreen warning because the exe isn't signed. Click "More info" and "Run anyway".
- Shuffle and repeat toggles next to the progress bar, shown only when the player supports them.
- Right-click menu on the capsule: open the player, shuffle, repeat, keep open, hide, settings.
- Open the player by clicking the source badge. Works with Spotify, browsers and most desktop players.
- Full-screen games. Exclusive full-screen games (a lot of DirectX 9 titles) always hide the capsule, since drawing over them makes the game flicker or minimise. "Except over games" also hides it for borderless full screen.
- Old configs without some hotkey keys no longer reset every other setting.
| Gesture | Action |
|---|---|
| Wheel over the taskbar | Volume of the app under the cursor |
| Wheel over the capsule | Volume of the playing app |
| Ctrl / Shift + wheel | Bigger / finer steps |
| Middle-click a taskbar button | Close that app |
| Middle-click the capsule | Hide until the next track |
| Right-click the capsule | Menu |
| Click the source badge | Bring the player to the front |
| Drag the capsule | Move it, snaps near corners |
| Alt + middle-click the capsule | Quit right away |
| Action | Default |
|---|---|
| Previous / play-pause / next | F5 / F6 / F7 |
| Switch to the next playing app | Ctrl+F6 |
| App volume up / down, repeat, hide/show, keep open | not set |
A combination another app already uses is skipped, the rest still work.
Works without setup: the status shows as "Listening to Lumen" with the cover, time and buttons. To use your own name, create an app at https://discord.com/developers/applications and paste its ID in settings. Buttons are only visible to other people, not on your own profile.
Everything saves as soon as you change it. English and Russian.
- Windows 10 1809 or newer. Mica needs Windows 11 22H2, volume boost needs Windows 10 2004.
- WebView2 runtime (already on Windows 11).
Nothing is sent over the network unless you turn it on: lyrics (lrclib.net, genius.com), Discord cover lookup (iTunes Search) and the update check (one request to this repo).
For developers
Needs Rust 1.85+, Node 20+ and the MSVC toolchain.
npm install
npm run releaseThe exe ends up in src-tauri/target/release/lumen.exe. For development:
npm run startcd src-tauri
cargo test # host tests
cargo clippy --all-targets # lints
npm run check # Svelte and TypeScript
npm run check:motion # easing matches between Rust and TSSome tests are #[ignore] because they need real audio, a real player or a lock screen:
cargo test --lib -- --ignored --nocapture the_tap_follows # capture vs session volume
cargo test --lib -- --ignored --nocapture boost_replaces # boost chain
cargo test -- --ignored --nocapture spectrum_cost # spectrum CPU
cargo test -- --ignored genius # Genius page still parses
cargo test --lib -- --ignored brings_real_spotify # open player with Spotify runningsrc/ Svelte renderer (capsule, settings, tour)
src-tauri/src/
media/ SMTC sessions
window/ capsule window, geometry, backdrop, z-order
input/ hotkeys, mouse hook, taskbar buttons
audio/ master and per-app volume, boost
lyrics/ LRCLIB, Genius, LRC parser
presence/ Discord
spectrum/ loopback capture and FFT
context_menu.rs right-click menu
player.rs bring the player window forward
docs/ README images
More detail in ARCHITECTURE.md.
Windows volume stops at 100%, so Lumen processes the sound:
- Capture the app with process loopback.
- Turn the app down to 2%. Not muted, because the capture happens after the app volume and a muted app gives silence.
- Multiply back, apply gain and a 120 Hz shelf, then a soft limiter.
- Play it on the default output.
The original is left 34 dB under the boosted copy, so you don't hear it. The app's volume is restored when boost stops or Lumen exits.
lumen.config.json next to the exe (or %APPDATA%\Lumen\ if the folder is read-only). Listening history is lumen.stats.json in the same place. Every option is also in the settings window.
| Key | Values |
|---|---|
language |
auto, en, ru |
uiScale |
0.75 to 2.0 |
dock |
taskbar-center, bottom-left, bottom-right, top-left, top-right, free |
backdrop |
auto, acrylic, mica |
onTop |
always, games, never |
alwaysExpanded, showWhilePaused |
bool |
volumeStep |
0.01 to 0.1 |
boost.enabled, boost.gain, boost.bassDb |
bool, 0.5 to 3.0, -12 to 12 |
mouse.* |
taskbar wheel, close button, capsule gestures |
lyrics.enabled, lyrics.geniusFallback, lyrics.offsetMs |
bool, bool, ms |
discord.enabled, discord.applicationId, discord.activity |
bool, string, listening or playing |
smartPause.enabled, spectrum.enabled, updates.check |
bool |
appearance.surface, appearance.tint, appearance.radius |
system/solid/clear, #rrggbb or auto, px |
obs.enabled, obs.folder |
bool, path |
startWithWindows |
bool |
hotkeys.* |
e.g. Ctrl+Shift+KeyL |
- Bump the version in
VERSION,src-tauri/Cargo.tomlandsrc-tauri/tauri.conf.json. npm run release- Push, wait for CI.
gh release create vX.Y.Z src-tauri/target/release/lumen.exe
MIT. Made by flexeykinDEV.
