Changelog¶
Version 5.2.3 - UNRELEASED¶
Denon DJ¶
- Fixed a StagelinQ protocol bug that caused "0 services" connection failures against standalone players (SC5000/SC6000 series): the player's own services request was misparsed, discarding its service announcements
- WNP now connects to every Denon DJ player and all-in-one on the network at the same time; multi-player setups (for example, two SC6000s) work with or without a Denon mixer. Decks are numbered by each unit's player number and layer, and Deck Skip applies to those numbers
- Deck audibility now uses the mixer-provided per-deck volume when a Denon mixer or all-in-one provides it; with an analog or third-party mixer, every playing deck counts as audible and the most recently started deck is reported
- Discovery announcements are now broadcast on every network interface, fixing discovery on multi-NIC systems
- Connection lifecycle hardening and greatly reduced debug-log volume
- Many thanks to Nachtraaf for the assistance
Icecast¶
- Track metadata no longer goes missing or arrives stale. Ogg pages split across network reads are reassembled instead of dropped, so broadcasters that put artist and title in the stream (Traktor) are read reliably. Broadcasters that also send a combined "song" value (Mixxx) no longer have their correct artist and title overridden by it
- A track no longer inherits the previous track's artist when a broadcaster omits it, and an empty update no longer blanks whatever is playing
- Metadata sent after streaming has started is now accepted rather than ignored
- Status requests are answered with the current track, so broadcast software can confirm WNP received it
- Streams in a format WNP cannot read, such as MP3, now log one explanatory warning instead of filling the log
- Port changes are detected and the listener restarts without requiring a WNP restart
New Features¶
- Twitch chat now says hello when WNP connects, the same way Kick chat already did, so it is clear the bot is live without waiting for a track to change
- The upgrade prompt can now show aggregated release notes for the versions between the installed and the offered build
- WNP now checks whether this computer's certificate authorities can still verify the music services it fetches from, and falls back to a bundled set when they cannot. On a machine whose certificates have fallen behind, artwork and biographies stopped arriving with nothing in the interface to explain why. General settings has a Certificate Trust control to force either behaviour, which matters on networks that inspect traffic with their own certificate
Bug Fixes¶
- Twitch no longer throws away your saved login while it is trying to connect. A connection attempt that failed for any reason, including the network being down or no sign-in having happened yet, was treated as proof the stored credentials were bad and deleted them. While not signed in that repeated on every reconnection attempt, and it could delete a token part-way through signing in through the browser. Channel point redemptions and chat were both affected
- The track delay now defaults to 10 seconds rather than 1. The old default disagreed with what the metadata lookups already assumed, so the setting did not describe what WNP was actually doing. Anyone who has set a delay keeps it; on a fresh install tracks are now held about 10 seconds before publishing, which better matches the latency of most broadcasts
- Fixed WebSocket heartbeat handling in the built-in web server
- Fixed DJUCED install-time configuration writes being silently ignored
- Fixed version comparison ordering across release, preview, and release-candidate builds
- Fixed configuration restore when cancelling after a settings reset; the charts key is preserved
- Fixed the artist extras image limits, which had been read from a configuration key nothing writes and so were ignored since March 2024. The values on the Artist Extras settings page now take effect. Anyone who never changed them will see fewer images than before, because the defaults are lower than the fallbacks that were silently in use
- Album matching is more accurate: MusicBrainz lookups now treat "&" and "and" as the same, so a track tagged one way still matches a release tagged the other
- A momentary MusicBrainz outage no longer leaves a track missing its album, label, and date for up to a week afterward
- The settings window fits a 1200x600 screen again, and no longer opens larger than it needs to be
- WNP now opens DJ software libraries read-only. It never wrote to them, but opening them for writing was enough to make WNP re-read djay Pro's library several times a second, even with djay Pro closed
- DJUCED tracks no longer go missing before DJUCED has created its database. The artist and title still come through; only the extra details are lost
Platform¶
- The private directory inside a build now carries the version in its name, so an upgrade can put the new copy in place before removing the old one
- Debug logs record MusicBrainz rate limiting and retries again
Security¶
- Artist images and album artwork from fanart.tv are now fetched over an encrypted connection. The request previously went out unencrypted with the fanart.tv API key attached, exposing the key to anything between this computer and fanart.tv
- Updated aiohttp to 3.14.3, nltk to 3.10.3, and pillow to 12.3.0, each of which closes published security advisories. The aiohttp ones include the web server WNP runs for overlays, and the pillow ones cover image decoding, which handles artwork downloaded from outside
- Updated certifi to 2026.7.22, lxml to 6.1.2, pillow-avif-plugin to 1.6.0, pyinstaller to 6.22.2, pypresence to 4.6.2, rapidfuzz to 3.14.6, requests-cache to 1.3.3, setuptools to 83.0.0, wnpmb to 0.6.0, and zeroconf to 0.151.3
Version 5.2.2 - 2026-06-20¶
New Features¶
- General settings now has a "Receive pre-release updates" checkbox. When enabled, WNP will offer alpha, beta, and release-candidate builds in addition to stable releases. Disabled by default.
Security¶
- Updated zeroconf to address five CVEs (CVE-2026-48487, CVE-2026-48045, CVE-2026-47184, CVE-2026-47183, CVE-2026-47180): unvalidated record payloads and unbounded queues/caches that allowed LAN-local memory exhaustion and denial of service via crafted mDNS packets
- Updated dbus-fast (Linux only) to address multiple denial-of-service hardening fixes: oversized message rejection, container nesting depth limits, and malformed-message handling
Bug Fixes¶
- Fixed template preview window showing a stale template list when reopened after new templates were added or removed
- Fixed several settings that could silently fall back to Qt's built-in defaults instead of WNP's intended defaults when no value had ever been explicitly stored (e.g. after a clean install or config reset)
djay Pro¶
- Library lookups are now O(1) instead of a full table scan: WNP maintains its own side index of djay Pro's location data, so track matching stays fast even for large libraries
Platform¶
- macOS: WNP now detects when an Intel build is running under Rosetta on Apple Silicon hardware and offers the native Apple Silicon build during update checks instead of another Intel build
Version 5.2.1 - 2026-05-20¶
Bug Fixes¶
- Fixed incorrect Discord invite link in About window
- Fixed a bug where track detection silently stopped after a system sleep/wake cycle or transient error
- Fixed cover art being truncated in EarShot and two-computer setups
- Fixed Wikipedia, MusicBrainz, Discogs, and fanart.tv remembering transient errors (rate limits, network failures) as "no data" for hours or days, so artist bios, images, and album metadata for the affected track stayed blank until the entry expired. Stale entries are cleared automatically on upgrade
- Improved how WNP behaves when Wikipedia is rate-limiting traffic: WNP now backs off for as long as Wikipedia asks (honoring their Retry-After header) and caps parallel Wikipedia requests, so a short throttling window no longer cascades into prolonged missing artist data
Artist Extras¶
- Discogs and fanart.tv now fetch album cover art when available, using data already retrieved during artist lookups (no extra API calls); each provider has a new Cover Art checkbox in settings
- MusicBrainz cover art fetching from Cover Art Archive can now be toggled via a new checkbox in MusicBrainz settings (enabled by default)
djay Pro¶
- BPM, key, and deck number are now read from djay Pro's analysis database and included in track metadata
- ISRC codes are now included in track metadata when djay Pro provides them, improving downstream metadata lookups
- Configurable analysis delay: how long to wait for djay Pro to make BPM, key, and file path available after a track starts
- Configurable deck skip: individual decks can be excluded from reporting via checkboxes in settings
- Tracks already playing when WNP launches are silently skipped, preventing stale tracks from being re-reported on startup
- These features should work but I lack a full djay Pro license to test:
- The Twitch
!hasartistchat command now works with djay Pro - Added playlist support: available playlists can now be selected for artist queries and roulette requests
MusicBrainz¶
- Improved album and album art selection when an album name is provided by EarShot iOS and macOS. The canonical studio album is preferred over compilations or reissues that happen to contain the same recording.
- Improved album selection for ISRC-only lookups: canonical singles and studio releases are preferred over compilations and reissues
- Fixed cover art going permanently missing for a track after a single failed fetch from the Cover Art Archive; failed fetches now retry on the next play
- Fixed false rate-limit errors when talking to MusicBrainz
Version 5.2.0 - 2026-05-04¶
New Features¶
- WNP EarShot: new input source for vinyl, CDJs, and analog mixers via Shazam-based identification; supports Always-Accept mode as a secondary monitor alongside any DJ software source
- OBS Scene Collection exporter: "Export for OBS..." tray menu item generates a ready-to-import OBS scene collection with pre-configured browser sources, including WebGL and CSS-only Guess Game scenes
- New animated WebGL game board and leaderboard overlays for Guess Game
- Eight new WebGL and effects "Now Playing" overlay templates; see the templates documentation for details
ws-typing-matrixrebuilt as a full matrix digital rain canvas animation with falling katakana characters- Template preview now available from Twitch Bot, Kick Bot, Text Output, Discord, and Discord channel settings; includes a "Use This Template" button
Remote Output¶
- Fixed duplicate Charts submissions when both sender and receiver have Charts enabled
Kick & Twitch¶
- Stream title can now be updated automatically on each track change using a Jinja2 template (requires re-auth if upgrading)
- Twitch broadcaster tokens are no longer cleared on shutdown
- Fixed authentication when the webserver port wasn't 8899
MPRIS¶
- Reduced log noise for unavailable D-Bus services and idle state
UI¶
- Major overhaul of all settings screens for improved layout and consistency
- Tray icon switches automatically between light and dark variants based on OS color scheme; new Auto/Light/Dark override in General settings
- Fixed dark mode rendering on several UI panels on Linux and Windows
djay Pro¶
- Fixed one-track-behind detection on Windows; djay Pro writes analysis data and history in separate transactions, so track changes now debounce the WAL file event to ensure both writes have landed before querying
VirtualDJ¶
- Track metadata is now pulled from the local library database for previously cataloged tracks
- Key and BPM from the Scan element are captured when not present in track tags
- BPM is now correctly converted from VirtualDJ's internal format
Platform¶
- macOS binaries are now code-signed and notarized
- Windows binaries are now signed with Azure Trusted Signing
- Fixed font scaling on Windows and Linux settings screens
Removed¶
- Tenor GIF support; use Klipy instead
Bug Fixes¶
- Track titles with duplicate parenthetical suffixes (e.g.
Song (Radio Edit) (radio edit)) are now collapsed to a single suffix - Fixed SQL injection, XSS, and unpinned CI action security issues
- BPM and key now read correctly from M4A files with duplicate fields
- Guess Game menu item is grayed out when Twitch Bot is not configured
- Filenames with en dash separators (e.g.
Artist – Title.mp4) now split correctly when track tags are absent - YouTube
Artist_-_Titlefilenames now split correctly even without a YouTube URL in the file tags
Developer Stuff¶
- Dependency updates
- Python 3.10 is no longer supported; minimum version is now Python 3.11
- Python 3.14 is now supported
- Replaced vendored musicbrainzngs with wnpmb: ~3,500 lines of XML-based client code replaced with a JSON async client with improved release selection, HTTP/2 support, and artist name normalization; fallback title-strip matches return artist data only, not a recording ID from the stripped title
Version 5.1.0 - 2026-03-26¶
macOS¶
- This is the last release with pre-built binaries for macOS 11 (Intel) and macOS 12 (Apple Silicon)
Major New Features¶
- djay Pro
- Added basic support for djay Pro
- Guess Game
- Add a new Twitch chat-based guessing game for your audience
- System tray toggle to enable or disable the game at runtime
- Viewers guess the current track via configurable Twitch chat commands
- Leaderboards, scoring, and personal stats available via chat
- Real-time OBS overlay support to display game state on stream
- Support for seeing the current game and leaderboards from the whatsnowplaying.com website
- Last.fm
- Added support for Last.fm as a source for track metadata
Minor New Features¶
- Support Klipy as an alternative to the EOLing Tenor
- Klipy is preferred when both API keys are configured
- Add support for autodiscovery using Bonjour/Zeroconf for Remote Output and for some upcoming feature support
- Add a new /v1/status webserver endpoint
- Requests now support reporting 'for @user'
- Direct link to your version's documentation from the menu bar/system tray
General Bug Fixes¶
- Security vulnerability fixes
- SSL certificate verification now uses the system certificate store, fixing connection failures on some systems (particularly Windows)
- Major speedup of program launch
- General reliability improvements
- Configuration files can now be exported and imported for portability across systems
- The exporting machine's home directory is recorded in the config file so paths are automatically remapped to the importing machine's home directory
- Paths that do not exist on the importing system are skipped gracefully, with a warnings file generated listing what needs to be manually reconfigured
- Stale legacy configuration keys from old versions are automatically cleaned up on upgrade
- Smarter upgrade logic
- Should do a better job of helping you get the correct zip file
- Linux users now receive correct upgrade notifications
- Found an issue where in some cases changed templates would always trigger an 'update'
on program launch despite the
.newfile actually being correct. - Web server template assets (including vendor libraries and guessing game files) now load correctly
- Fixed an issue where Qt SVG support was sometimes unavailable on Windows
- Respinning a request that doesn't have a playlist assigned no longer crashes parts of the system
- Major documentation overhaul
- Minor graphics cleanup
- Arrow overlay now uses a filled arrowhead and wider text area
- Fixed font scaling on Windows in several settings panels
Artist Extras¶
- Artist biographies are now deduplicated per session. The same bio will not be shown twice during a stream. This can be disabled in settings.
- Last.fm and TheAudioDB can now be used for album art lookup
- TheAudioDB basic features no longer require an API key
Discord¶
- Bot Mode and Rich Presence are now independently toggled
- Bot Mode can now post to a channel with cover art
Denon¶
- Fixed a crash on certain network environments during device discovery
Kick and Twitch¶
- Twitch accounts will now be automatically linked to your Charts profile at startup
- A warning is shown if the account is already linked to a different Charts profile
- Token refreshes for Kick and Twitch would sometimes get lost
- Twitch and Kick OAuth authentication status is now more accurately reflected in the Settings panel
- The panel now shows the actual account name(s) associated with authenticated tokens
- Stale authentication state from a previous session is cleared on startup
Serato¶
- Fixed an issue where tracks with null bytes in metadata were not handled correctly
- Add artist-based library query support for Serato 4
- Search entire library or selected playlists/crates for artist tracks
- Enhanced crate search and metadata querying capabilities
- Track filename resolution now works correctly using location ID and portable ID mapping
- All Serato library database files are now auto-discovered. Manual path configuration is no longer needed
- Changes to better detect when the latest track is playing
- Better support for tracks from streaming services
- Optionally disable tracking of played status
Traktor¶
- partially corrupted XML library files no longer cause a complete import failure; parsing continues with whatever data was successfully read
VirtualDJ¶
- partially corrupted XML library files no longer cause a complete import failure; parsing continues with whatever data was successfully read
Linux¶
- Linux binary builds are now available
Developer Stuff¶
- Dependency updates
- Test fixes
- Update years to 2026
- Getting closer to supporting Python 3.14
- Reduced binary build size by removing unnecessary metadata files
- Rewrote the developer docs and improved
builder.sh, including the ability to create Linux executables.
Version 5.0.1 - 2025-10-22¶
This release fixes a critical bug in 5.0.0 that causes it to lock up if the Charts submission fails.
Version 5.0.0 - 2025-10-20¶
ANNOUNCING What's Now Playing Charts¶
- ANNOUNCING WHAT'S NOW PLAYING CHARTS!
- Now you can help the community figure out what DJs are ACTUALLY PLAYING on their streams!
- After installing, copy your anonymous key from your client into the website to unlock a ton of features!
Renamed to WhatsNowPlaying¶
- Quite a few things had already been renamed to use the new name. It was time to finish the job.
- The rename includes the Documents directory. As part of the upgrade, the new Documents/WhatsNowPlaying directory will have your previous content also copied into it.
UI¶
- Major overhaul of the UI with many pages getting some clean up
- On launch, an arrow will show you where the minimized icon is (relatively) supposed to be
- Tree-structure to help organize various categories
- Many preferences are now in tabs to make them less crowded
- New startup window system shows progress tracking
- AcoustID and MusicBrainz setup split apart
New Output System¶
- Remote server support to send results to a central computer to consolidate one or more DJs into one set of outputs
- Text Output was moved here
- Set lists are now built in real-time and can be customized
Twitch¶
- Switched from deprecated PubSub to WS-EventSub
- Twitch Redemptions and Requests are back
- Authentication system now simplified and self-contained
- Added contextual help system for chat commands (e.g., !track help)
Requests Overhaul¶
- Fuzzy matching with customizable threshold for track requests now handles some typos and natural language input
- !hasartist chat command to search either entire DB or specific crates/playlists
- Support for animated gifs/memes based upon text from Tenor
Title Filtering Overhaul¶
- A new, simplified filter system for removing text from titles has been implemented. The newer one is much easier to use without having to do a lot of extra work.
- The complex regex-based filter is still present and available, but upgrading to this version will remove existing filters and use a default set of useful filters.
Web Server¶
- Removed bundled templates that did not use websockets
- Revamped old templates to remove some sizing and background issues with OBS
- New templates that mirror the boring templates everyone else uses
- New templates with new special effects
- All templates may now be referenced by name (e.g.,
/template.htm->/templates/template.htm) - ws-gifwords-fade.htm to show GifWords requests
- ws-justthecover.htm to cycle through all of the front covers
- Bundled copies of some common libraries available via the
/vendorendpoint - New remote control APIs
New Template Variables¶
- discordguild
- has_video
- kickchannel
- lyricist
- now
- timestamp
- today
- track_received
- twitchchannel
New Features¶
- Completely revamped documentation website to make it easy to pick your version
- Upgrade downloads are now sent through whatsnowplaying.com/download so that users can be pointed to the correct one, see release notes, etc.
- Distribution files now use user-friendly naming (e.g., WhatsNowPlaying-5.0.0-macOS12-AppleSilicon.zip, WhatsNowPlaying-5.0.0-Windows.zip) making it easier to identify the correct download for your platform
Windows Binary Overhaul¶
- The binaries for Windows now come as a directory rather than a single executable. This was done to speed up launch time by removing the need to extract the content.
Bug fixes¶
- M3U-based systems (Virtual DJ) file watching fixes
- Wikimedia links did not correctly redirect
- MP4 files with XMP data should get some info now
- Fixed an issue with MP4 reader getting confused if tags are after the media data
- TheAudioDB and ImageCache downloader handle rate limiting and other such problems better.
- Kick would invalidate keys if their OAuth server was down... which happens a lot. Now if WNP can't connect, it won't invalidate.
- The ability to set the poll watcher time somehow got dropped from the Quirks UI along the way
Removed¶
- The non-websocket templates have been removed. The code to support your old templates is still there, but you should really update.
Denon¶
- Many Denon devices using Stagelinq should now be supported
DJUCED¶
- Revamped database support
- hasartist support
- Smart playlists should now be supported
Icecast (butt, Traktor, Mixxx, others)¶
- Icecast protocol fixes to make it more reliable
- Fixed an issue where files without metadata were not properly doing "dash" separations. For example, a title of "The Pixies - Monkey Gone to Heaven" will now get split into artist: "The Pixies" title: "Monkey Gone to Heaven" so that proper metadata handling from there on out will work. Of course, properly tagged files are way better.
Serato¶
- New Dual Serato Support
- Very basic and experimental support for Serato 4. Since that is the future of Serato, a few renames in the UI have happened to show Serato vs Serato Legacy or Serato3. The system will copy over settings from Serato 3 to Serato on upgrade if your current input source is Serato.
- Future releases will attempt to bring it to parity.
- Before the beta drop, some changes to Serato Legacy had already happened:
- Support for more than one
_Serato_library path - Smart crates now have limited support
- hasartist support for crates, smart crates, or the full database
Traktor¶
- Revamped database support, including automatic database refresh running in the background
- hasartist support
VirtualDJ¶
- Revamped database support, including automatic database refresh running in the background
- hasartist support
Important Internal Changes¶
- Windows build server is now running on Server 2022
- Python 3.11 is now the base version
- Vendoring (like versioningit) is now required before launching from the dev area
- WinMedia is now using the winrt set of modules
- Python types are slowly getting added
- Added comprehensive TypedDict definitions for track requests
- Improved requests database reliability with retry logic for Windows
- Enhanced PyInstaller build system with automatic module discovery
- Switched to
ruffcode formatter - Switched to
mkdocsfor website - New build system for web templates
- Settings UI now has a new generic tab loading system
- Major reorganization of core code in lots of places, with many classes and modules getting broken up
- Switched back to vendored TinyTag