• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

NowPlayingDisplay - a universal API driven album art screen

anotherhobby

Addicted to Fun and Learning
Forum Donor
Joined
Dec 17, 2021
Messages
683
Likes
1,521
I just finished building a project that some others here might enjoy trying! It's free and reusable under the MIT license.

NowPlayingDisplay on GitHub: https://github.com/anotherhobby/NowPlayingDisplay

Tell Me About It!
NowPlayingDisplay shows full screen album art and information on an HDMI screen for your currently playing music. It is universal (player agnostic), API driven, and written in python. It requires a client to push data and keep the display updated, but the display does a lot of the driving, including tracking down the album data and art. Out of the gate I have 4 client integrations available: Home Assistant, WiiM, and TIDAL desktop on the Mac. Additional clients are easy to write and can be done in any language or even something like NodeRed. The Home Assistant integration also means it works with any music player that works with Home Assistant as long as you are running it, which is a very large number of players.

Below are pictures of NowPlayingDisplay running on a 6" HDMI screen. The ablum art fills the full left square, while the remaining space to the right contains organized information and a progress bar for the currently playing title. The album art and metadata is all sourced from the iTunes music service API.

display1.jpeg


When the player is paused, the album information and progress bar dim:

display2.jpeg


After a few minutes of being idle and not playing music, NowPlayingDisplay runs a built-in screen saver I wrote that's a grid of album covers sourced from the music you've played. The grid updates a small percentage of the covers randomly every few seconds. A 16x9 display will have 16 albums across by 9 albums high (144 albums). Until you have listened to 144 albums, covers will be repeated in the screensaver. Once that threshold is crossed, the screensaver keeps the artwork well randomized and unique.

display_screensaver.jpeg


Why did I build this?
A year ago I bought a small 6" HDMI monitor to suspend under my main computer monitor for the purpose of have a "now playing" display. At the time I was using Roon which had this feature. I dropped Roon and was sad about losing the display. I tried several other things, but just wasn't happy. Three weeks ago, I finally decided I wanted my own small stand-alone now playing display server, with the specific ability to integrate any player I wanted over time. In my research for inspiration, I stumbled across this post by @Ralph_Cramden that really got me started, introduced me to the python tkinter library, and served as an excellent starting point and lit a fire under me.

How does it work?
NowPlayingDisplay doesn't do anything on it's own until there is a client sending it data. The client is a process that commincates with an actual music player, and then regularily posts the track title, album title, artist(s), track duration, elapsed time, and active/stopped/paused status to the NowPlayingDisplay server, which is then used to drive the state of the display. For the album art and metadata, NowPlayingDisplay uses the data provided by the client using several methods to achieve a very high and fast hit rate from the iTunes database, way above 99% accurate (except for classical, the brief testing there did not go well). It then pulls data from there to minimize the work for the client and to have access to extra data like release date, track count, and album duration. NowPlayingDisplay also syncs the elapsed time provided by the client to an internal counter to drive the progress bar and update elapsed time on the display every second, so the client doesn't need to constantly send updates.

Hardware?
NowPlayingDisplay uses very little CPU and is platform independant (it even runs on my Mac running Sonoma). A Raspberry pi zero would be more than enough. I run it on a pi4 (overkill) with a 6 inch HDMI display:

desktop.jpeg


How do I run it?
Details are all provded on the GitHub page: https://github.com/anotherhobby/NowPlayingDisplay
 
Last edited:
I made something similar for use with Kodi as a DLNA Renderer:

kodi_panel: Front panel LCD display for Kodi (via JSON-RPC)

I was also originally shooting for a spectrum display, but realized that 1) I didn't want to pull such frequently-updated info over my network and 2) spectrum info isn't currently part of the information Kodi makes available via its remote JSON calls.

It was in the course of playing with this that I discovered the DLNA handling of fields such as Composer isn't standardized. At present, Kodi (well, Platinum UPnP's integration into Kodi) doesn't seem to forward all of the fields that JRiver Media Center is providing onward to Kodi's internal metadata.
 
I made something similar for use with Kodi as a DLNA Renderer:

kodi_panel: Front panel LCD display for Kodi (via JSON-RPC)

I was also originally shooting for a spectrum display, but realized that 1) I didn't want to pull such frequently-updated info over my network and 2) spectrum info isn't currently part of the information Kodi makes available via its remote JSON calls.

It was in the course of playing with this that I discovered the DLNA handling of fields such as Composer isn't standardized. At present, Kodi (well, Platinum UPnP's integration into Kodi) doesn't seem to forward all of the fields that JRiver Media Center is providing onward to Kodi's internal metadata.
Very cool! I'm a big fan of spectrum displays and I was using this HDMI to run cava before this, using an audio input on the pi. I wouldn't push that data over the network either.

Your mention of composer made me realize I didn't consider the challenges/needs of classical in my display... at all. lol

I took it for a spin into that territory, and I'd say if that's your thing this is not your screen, at least not without a lot of work. As opposed to the well over 99% hit rate I get with all of the non classical I listen to, the classical I went and clicked on did not go well.
 
I will have a look at this as i still want a display for my Wiim Pro. THANKS

Being a non techie hope I can make it work....... (hint, make a kit and I'll most certainly buy it ;) )
 
Back
Top Bottom