Skip to content

Repository files navigation

Lumen, a music capsule for the Windows taskbar

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.

CI Release Platform License

Русская версия

Install

Download Lumen

  1. Download lumen.exe from the latest release.
  2. Put it in any folder and run it. A short tour shows up on first launch.
  3. 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".

The Lumen capsule

What it does

Feature overview

New in 0.4

  • 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.

Mouse

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

Hotkeys

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.

Discord

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.

Settings

Settings window

Everything saves as soon as you change it. English and Russian.

Requirements

  • 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

Build

Needs Rust 1.85+, Node 20+ and the MSVC toolchain.

npm install
npm run release

The exe ends up in src-tauri/target/release/lumen.exe. For development:

npm run start

Tests

cd 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 TS

Some 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 running

Layout

src/                     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.

How the boost works

Windows volume stops at 100%, so Lumen processes the sound:

  1. Capture the app with process loopback.
  2. Turn the app down to 2%. Not muted, because the capture happens after the app volume and a muted app gives silence.
  3. Multiply back, apply gain and a 120 Hz shelf, then a soft limiter.
  4. 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.

Config

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

Release

  1. Bump the version in VERSION, src-tauri/Cargo.toml and src-tauri/tauri.conf.json.
  2. npm run release
  3. Push, wait for CI.
  4. gh release create vX.Y.Z src-tauri/target/release/lumen.exe

License

MIT. Made by flexeykinDEV.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages