Home Assistant integration for the Tuneshine LED album art display.
- Media player entity — reflects the display state (playing, idle) and exposes current track, artist, album, and artwork
- Source media player — select any HA media player to mirror; Tuneshine automatically updates when the track changes and clears when playback stops
- Sendspin client — supports the Sendspin protocol, displaying artwork and metadata
- Input mode — switch between Source Mirroring, Sendspin, and Remote Only via the media player source selector; the modes are mutually exclusive
- Display mode sensor — reports what is currently driving the display (
remote,local,mirroring,sendspin, ornone) - Brightness controls — set active and idle brightness (1–100, disabled by default)
- Preserve Artwork switch — keep the last track's artwork (dimmed) on screen instead of the idle image when playback stops (firmware 2.6.1+)
- Entity services —
send_imageandclear_imagefor automation use
Copy the tuneshine folder inside custom_components to your Home Assistant's custom_components folder.
Restart Home Assistant after copying.
Your Tuneshine should be automatically discovered. If not, add the integration via Settings → Devices & Services → Add Integration → Tuneshine and enter your device's IP address.
The integration will expose a media player that will mirror what is currently being displayed by your Tuneshine.
Select Source Mirroring from the media player source selector, then set Source Media Player to any media player in your system. Tuneshine will display the current track artwork whenever that player is playing, and clear the display when it stops.
Source Mirroring will be overridden on-device by artwork sent via the Tuneshine cloud service. If you want to ensure you only see mirrored artwork, follow these steps:
- Go to the Tuneshine app on your phone and select your Tuneshine device
- Tap on the currently connected music service and select "Remove from this device" from the options
- Go to your Tuneshine's device settings (icon in the top right corner) and disable the "Show account disconnected warning" setting under Display Options at the bottom of the settings screen
The integration supports the Sendspin protocol, allowing Sendspin servers such as Music Assistant to send artwork and metadata directly to the display.
Select Sendspin from the media player source selector. The integration advertises the device as a Sendspin client via mDNS (_sendspin._tcp.local.) and exposes a WebSocket endpoint on Home Assistant's HTTP server. When a Sendspin server adds the device to a group:
- Artwork is received over the Sendspin stream and pushed to the display
- Track, artist, and album metadata updates the media player entity in real time
- The display mode sensor reports
sendspin
When the device is removed from the group or the server disconnects, the display is cleared.
Sendspin is discovered automatically by Music Assistant once the Sendspin provider is enabled in its settings.
Input mode is selected from the source selector on the Tuneshine media player card. There are three mutually exclusive modes:
| Mode | Behaviour |
|---|---|
| Source Mirroring | Mirrors a Home Assistant media player. Sendspin mDNS is not advertised and incoming Sendspin connections are rejected. |
| Sendspin | Advertises the device via mDNS so Sendspin servers can discover and connect to it. Source mirroring is inactive. |
| Remote Only | Disables both source mirroring and Sendspin. The device displays whatever its cloud/streaming service sends. |
Changing the mode takes effect immediately — switching to Source Mirroring closes any active Sendspin connection, unregisters mDNS, and activates the source listener; switching to Sendspin tears down source mirroring and registers mDNS; switching to Remote Only closes any active Sendspin connection, unregisters mDNS, and tears down source mirroring.
The Display Mode sensor reports what is currently driving the Tuneshine display:
| Value | Meaning |
|---|---|
remote |
A cloud or streaming service (e.g. Spotify) is sending artwork via the Tuneshine cloud |
local |
An image was sent via the send_image service |
mirroring |
The integration is mirroring a Home Assistant media player |
sendspin |
A Sendspin server (e.g. Music Assistant) is controlling the display |
none |
The display is idle with no active source |
Display an image by URL on the device.
| Parameter | Required | Description |
|---|---|---|
image_url |
Yes | http:// URL of the image to display |
track_name |
No | Track title |
artist_name |
No | Artist name |
album_name |
No | Album name |
service_name |
No | Service label (e.g. Spotify) |
animation |
No | Transition animation: none, dissolve, crate, crate_to_idle, crate_from_idle |
Remove the locally-provided image, returning the display to its idle state.
This integration was built against Tuneshine firmware 2.3.3 and Tuneshine device API 1.0.1, and updated for firmware 2.6.1.
This integration was created for my personal use only, using Claude Code and based on the Tuneshine API documentation. This code is made available as an example to others. I am not a developer and this is in no way intended to be an official integration you should rely on in production - it is very "it works on my computer". If you do not trust AI-generated code, please do not install this integration.