Skip to content

fl0-at/simple-media-overlay

Repository files navigation

Simple Media Overlay

About this project

I wanted to build a simple media overlay app that stays on top, so I vibe-coded one. This app uses tauri in the backend and NextJS as the frontend, and honestly, it turned out better than I thought:

Simple Media Overlay

I decided to add a second overlay that displays synced lyrics, if available, since I found LRC Library and their repo on GitHub - here's how that overlay looks:

Simple Media Overlay - Lyrics Overlay

Features

  • 📻 Always-on-top overlay that displays currently playing media
  • ℹ️ Auto-scrolling for longer titles & artist names
  • 📍 Pin the overlay to avoid accidentally moving it, unpin to allow dragging again
  • 👀 Little icon in the bottom left corner of the album art, showing the source of the currently playing media
  • ⏯️ Play/Pause, Skip to next or previous track or use the seek bar to skip to a certain part of the currently playing media
  • 🔁 Toggle repeat mode and/or shuffle, if supported by the player
  • 🎼 Toggle the Lyrics Overlay to see synced lyrics, if available on LRC Library
  • ✨ Fancy animations when the currently played media or the playback source changes, is played/paused or the overlay is pinned
  • 🔃 Automatic app-updates to ensure you are running the latest version

Prerequisites

  • Windows 10 or Windows 11 for the Windows backend via GSMTC
  • A Linux desktop session with D-Bus and an MPRIS-compatible media player for the Linux backend

Additional requirements for developers

If you want to build from source or contribute to development:

Running the overlay

For end users

Download the installer for your platform from the latest release:

  • Windows: MSI installer
  • Linux: AppImage

The app includes automatic updates - you'll be notified when a new version is available, and the app will automatically update and restart!

For developers

  1. Install dependencies:

    npm install
  2. Run in development mode:

    npx tauri dev
  3. Build from source:

    npx tauri build

Make sure you have Rust and the Tauri prerequisites installed before building.

Supported media playback sources

On Windows, any media player or application that publishes metadata about the currently playing media via GSMTC APIs should work out of the box, but these ones were tested and have their own dedicated icons:

  • 🌐 Google Chrome
  • 🌎 Microsoft Edge
  • 🦊 Mozilla Firefox
  • 🦁 Brave Browser
  • ⭕ Opera Browser
  • 🎻 Vivaldi Browser
  • 🌊 Tidal Desktop Client
  • 🛜 Spotify Desktop Client
  • 🚧 Videolan VLC (UWP App only as of now)
  • 👽 Foobar2000
  • 🐒 MediaMonkey 2024
  • 🪟 Windows 11 default media player

For the following apps, I have not tested, but they should have their own icons:

  • 🍎 Apple Music
  • 🎧 Apple Podcasts
  • 🎵 iTunes
  • 🧭 Safari Browser
  • ▶️ Groove Media Player
  • ⚡ Winamp

I also added Kodi, KMPlayer, and Media Player Classic (MPC-HC as maintained by clsid2) but later found out they do not actually publish any media metadata via GSMTC APIs, and I can confirm that the overlay will not display media that is played via these apps on Windows.

On Linux, the overlay uses MPRIS. Any player that exposes standard MPRIS metadata and playback controls on the session bus should be discoverable. Artwork, shuffle, repeat, and seek support still depend on what the individual player exports.

If you want me to add a specific media player/app icon, please open a new issue!

Current Limitations

For some reason, the shuffle and repeat functionality don't seem to work when playing media via the following apps, so I've hidden those buttons for now in those cases, as they wouldn't be functional anyway:

  • 🌐 Google Chrome
  • 🌎 Microsoft Edge
  • 🦊 Mozilla Firefox
  • 🦁 Brave Browser
  • ⭕ Opera Browser
  • 🎻 Vivaldi Browser
  • 🧭 Safari Browser
  • 🌊 Tidal Desktop Client
  • 🐒 MediaMonkey 2024
  • 👽 Foobar2000

The following apps also do not publish timeline information via GSMTC APIs on Windows:

  • 🐒 MediaMonkey 2024
  • 👽 Foobar2000

Thumbnails are not provided via GSMTC APIs by these applications on Windows:

  • 🐒 MediaMonkey 2024

Platform backends

The app now uses platform-specific media backends behind the same Tauri command surface:

  • Windows uses GSMTC to read the current system media session and send playback controls.
  • Linux uses MPRIS over D-Bus to discover the active player, read metadata, and send playback controls.

Linux window behavior

On GNOME Wayland sessions, the compositor may ignore the always-on-top hint for undecorated overlay windows even when alwaysOnTop is enabled in the Tauri config. This means the overlay and lyrics window may not reliably stay above other windows on distributions such as Zorin OS.

If that happens, you can still enable it manually through the desktop environment: press Super + right-click anywhere on the overlay window and turn on the window manager's always-on-top option.

Troubleshooting

Ugly-looking "title-bar" in the overlay and lyrics window?

Timeline shows incorrect progress?

  • This is currently a known issue that I am working on, so feel free to contribute if you spot the root cause of this problem

Media not showing up?

  • On Windows, make sure your media player publishes to GSMTC (most modern apps do - see list of supported players here)
  • On Linux, make sure your media player exposes an MPRIS service on the session D-Bus

Overlay not staying on top?

Can't move the overlay?

  • Click the pin button to unpin it first

For other issues, please open an issue on GitHub.

Contributing

Contributions are welcome! If you'd like to add support for a new media player icon or fix a bug:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

For media player icon requests, please open an issue first.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Note on Third-Party Icons: This software includes icons and logos of third-party media players solely for the purpose of identifying the source of currently playing media. All trademarks, logos, and brand names are the property of their respective owners. The use of these marks does not imply endorsement and does not grant any rights to use these trademarks outside the context of this software. See the LICENSE file for complete trademark notices.

About

A simple media overlay, using GSMTC APIs in Windows and MPRIS in Linux

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors