BetterLyrics: a WinUI 3 lyrics visualizer that reads the system media session
An elegant and deeply customizable lyrics visualizer & versatile music player, built with WinUI3/Win2D | 一款优雅且高度自定义的歌词可视化与全能音乐播放应用,基于 WinUI3/Win2D 构建
At a glance
- What is it?
- A Windows 11 music player built on WinUI 3 and Win2D, with per-syllable karaoke highlighting, wallpaper mode, and a plugin system for lyric sources and translations.
- Who is it for?
- What makes BetterLyrics more than a skin is the layout system and the plugin surface. Full screen, desktop window, taskbar, and a mode that sits behind your desktop icons are four genuinely different ways to consume the same lyric stream, and letting community plugins add lyric sources and translation engines means the matching logic is not frozen at build time.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 8 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Why a Windows media player needs the system session at all
BetterLyrics is a C# application built on WinUI 3 with hardware-accelerated drawing from Win2D, targeting the Windows 11 design language. Its stated job is lyrics visualization, but the feature list widens that into a full music player that syncs with local libraries, SMB and FTP streams, and services including Spotify, Apple Music and NetEase.
The interesting engineering is in how it gets the track information. The release notes for v1.3.522.0 mention the system media controls, referred to by their Windows API abbreviation, and describe a bug where empty title, artist and album strings from that session failed to fall back to placeholder text. That single line tells you the app does not scrape anything: it reads the media session that Windows maintains for hardware media keys and the system now-playing controls. Whatever application is playing audio publishes its metadata there, and BetterLyrics consumes it.
That design is why one app can cover Apple Music, Spotify, local files and network streams without a separate integration for each. It is also the app's main constraint. Anything that does not publish to the system media session will be silent, and the per-syllable timing still has to be matched to the audio separately.
Per-syllable highlighting, glows and perspective fading
The visualizer is where most of the work goes, and the README describes three specific motion effects rather than vague polish. Lyrics advance per syllable rather than per line, with karaoke highlighting on the active word. Long notes get a trailing glow that holds through the sustain instead of snapping to the next line. And lyrics further from the current position fade with spatial perspective, which is a depth effect rather than simple opacity.
Behind the text, the background is a real-time audio visualizer with several modes: fluid gradients, blur, fog and snowflake particles. There is also a color adaptation feature that samples colors from your screen edges or from the album art, so the window blends with the desktop. The v1.3.527.0 notes show this being tuned, adding a light and dark threshold setting for filtering the luminance range when pulling colors out of cover art.
For the lyric format itself, the repository topics list both `lrc` and `ttml`, which matters because those formats carry different amounts of timing information. Plain LRC gives you a timestamp per line. TTML, the format Apple Music and other services use, can carry per-word or per-syllable timing, which is what makes the syllable-level highlighting possible at all. The matching step is described as high-accuracy with automatic metadata correction and noise reduction.
Four layouts, one of which puts the player behind your desktop icons
The layout choices are the feature that separates this from an ordinary lyrics window, and the README names four of them. Full screen is the immersive one. Desktop mode floats the window. A taskbar integration keeps it discreet. And wallpaper mode embeds the player beneath your desktop icons, which the README notes is friendly to Wallpaper Engine.
That last one is the most distinctive and also the most demanding, since it has to behave correctly while you keep working in other windows. The v1.3.522.0 notes describe a bug in exactly that area: when all media sessions closed and the window auto-hid and then reappeared, mouse pass-through stopped working. Fixing that class of bug, where the window must be invisible to clicks in some regions and interactive in others, is the unglamorous half of making wallpaper mode usable.
The same release notes show the layout system becoming something extensible rather than a set of hardcoded modes. Playback controls were refactored into a standard layout component with options for persistent display, background opacity, time-region control, button visibility and auto-hiding at narrow widths. Padding settings were added to layout components, and a progress bar visibility toggle arrived. If you have used the app and found settings missing, this is why, and it is also a signal that the layout editor linked from the release notes is a first-class surface rather than a demo.
The plugin system is the part that decides long-term usefulness
A lyric player is only as good as its lyric database, and this is where BetterLyrics has made the most consequential architectural choice. Custom lyric sources, transliterations such as Romaji, and translation engines are all added through community-built plugins, with a plugin store and a developer guide both hosted on the project site.
The README also describes the architecture as ready for offline translations and local language model integrations. That is a claim about future direction rather than a shipped feature, and the release notes are consistent with it: v1.3.523.0 records an optimization to the language matching logic for lyric content, which is the kind of change that matters most when you have sources in more than one language.
Two adjacent features are worth mentioning because they show where the project is heading. There is a lyrics card generator with more than ten templates, including Vinyl, Polaroid, Cyberpunk, Physical, Digital Retro, Atmosphere and Chinese Elegance, for sharing a chosen line as an image. And there is a Wrapped-style listening statistics story. Both are the kind of feature that gets shared on social media, and both are built on top of the same lyric and metadata pipeline the visualizer uses.
Distribution, licensing and what the repository does not tell you
There are two install routes, presented as a table. The Microsoft Store entry is marked recommended and described as an unlimited free trial, the same as paid, which is an unusual phrasing that suggests the paid tier, if any, is separate and unstated. The alternative is a zip from the latest release page, with an installation guide on the project site.
The project is GPL-3.0, with the license file at the repository root, and it has 2,176 stars, 65 forks and 12 open issues, with the last push on 2026-09-28 and release v1.3.527.0 five days earlier. Version numbers with three dotted components are the project's own convention. Community support runs through Discord, Telegram and several QQ groups and channels, and translation runs through Crowdin, with the Chinese README kept alongside the English one at the root.
The gap is documentation. The repository README has no build commands, no code fences, and no architecture description. Everything a contributor or plugin author needs, including the build instructions referenced as a documentation link to Visual Studio, is on the separate docs site. The repository root also carries a `.devin/` directory, which is not explained anywhere in the README and is either an agent configuration or leftover tooling.
Editorial conclusion
What makes BetterLyrics more than a skin is the layout system and the plugin surface. Full screen, desktop window, taskbar, and a mode that sits behind your desktop icons are four genuinely different ways to consume the same lyric stream, and letting community plugins add lyric sources and translation engines means the matching logic is not frozen at build time. The honest limitation is platform: this is a Windows app built on WinUI 3, and the plugin developer guide plus the install documentation both live on the project site rather than in the repository. Install from the Microsoft Store entry or the latest release zip, then read the plugin developer guide if you want to add a source.
Frequently asked questions
Does BetterLyrics work with Spotify and Apple Music?
The README lists Spotify, Apple Music and NetEase among the platforms it syncs with, alongside local libraries and SMB and FTP streams. The synchronization happens through the Windows system media session rather than a per-service integration, so any player that publishes its now-playing metadata there should be picked up. Per-syllable timing is matched separately from that metadata.
Which platforms can BetterLyrics run on?
Windows only, as far as the project describes. It is a C# application built on WinUI 3 and Win2D, aimed at the Windows 11 design language, and one of its features is wallpaper mode that embeds the player behind desktop icons. There is no macOS or Linux build mentioned anywhere in the project documentation.
How do I add a lyric source or translation to BetterLyrics?
Through the plugin system. The README states that custom lyric sources, transliterations such as Romaji, and translation engines can all be added by community-built plugins, with a plugin store and a developer guide hosted on the project documentation site. The architecture is also described as ready for offline translation and local language model work.
Is BetterLyrics free?
The Microsoft Store entry is described in the README as an unlimited free trial, the same as the paid offering, which leaves the terms of any paid tier unstated in the project documentation. A zip archive of the latest release is also published for manual installation. The project is GPL-3.0 licensed and takes donations through several platforms.
What is the difference between LRC and TTML lyric files?
LRC carries a timestamp per line, which is enough to highlight a line as it is sung. TTML is the richer XML format used by services such as Apple Music, and it can carry timing per word or per syllable, which is the data BetterLyrics needs for its per-syllable highlighting. Both formats appear in the repository topics for the project.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/jayfunc-betterlyrics)