Sonos Search Tracks Grayed Out – Playable via Albums, but Missing Media/Part in Plex Search

Summary

When using Plex for Sonos, search results for individual tracks appear grayed out and are unclickable — despite being fully playable via album or artist browsing. Plex logs show that stream metadata (<Media> and <Part>) is missing from /hubs/search responses for songs, causing Sonos to gray them out in the UI.


:white_check_mark: Confirmed Working:

  • Plex remote access is fully accessible from outside (via static IP + port 32400)
  • ADVERTISE_IP is set to http://[public-ip]:32400/
  • Custom server access URLs in Plex = only public IP, no .plex.direct
  • Plex is running in Docker using network_mode: host
  • Remote access shows green in Plex settings
  • Album and artist search results appear in Sonos and are clickable + playable
  • Tracks play correctly when selected via album view
  • Timeline/session tracking works perfectly during playback

:cross_mark: Not Working:

  • Tracks in Sonos search results are grayed out and not clickable
  • Logs show no stream URLs or media parts included in Plex’s search response
  • Playback works when triggered via album or library navigation

:magnifying_glass_tilted_left: Technical Details:

  • Plex Version: 1.41.5.9522-a96edc606
  • Sonos App: S2 (mobile & desktop, latest)
  • Platform: Plex in Docker on QNAP
  • Reverse Proxy: SWAG (for HTTPS); direct port 32400 forwarded and used
  • Fix attempts tried:
    • Full metadata refresh
    • Full library analyze
    • ADVERTISE_IP override
    • Container set to host mode
    • Re-authorizing Plex in Sonos
    • Full Sonos system reboot + state flush

:white_check_mark: Log Sample:

Apr 03, 2025 20:53:25.285 [140188674710328] DEBUG - Completed: [52.51.247.180:12831] 200 GET /hubs/search?query=single-handed&limit=50&timeout=2500 (11 live) #3144c TLS 504ms 3739 bytes
Apr 03, 2025 20:53:25.457 [140188572330808] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4396&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=analyzing (8 live) #314a6 GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.458 [140188672600888] DEBUG - Completed: [127.0.0.1:40532] 200 GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4396&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=analyzing (8 live) #314a6 GZIP 0ms 195 bytes (pipelined: 5324)
Apr 03, 2025 20:53:25.460 [140188596759352] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4396&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=idle (8 live) #314b8 GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.461 [140188674710328] DEBUG - Completed: [127.0.0.1:40532] 200 GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4396&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=idle (8 live) #314b8 GZIP 0ms 195 bytes (pipelined: 5325)
Apr 03, 2025 20:53:25.469 [140188552637240] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /library/changestamp (8 live) #314bd GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Internal-Request => 1 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.469 [140188552637240] VERBOSE - It took 0.0 sec to serialize a list with 0 elements.
Apr 03, 2025 20:53:25.471 [140188672600888] DEBUG - Completed: [127.0.0.1:40532] 200 GET /library/changestamp (8 live) #314bd GZIP 2ms 431 bytes (pipelined: 5326)
Apr 03, 2025 20:53:25.485 [140188550527800] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4397&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=analyzing (8 live) #314c2 GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.485 [140188672600888] DEBUG - Completed: [127.0.0.1:40532] 200 GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4397&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=analyzing (8 live) #314c2 GZIP 0ms 195 bytes (pipelined: 5327)
Apr 03, 2025 20:53:25.489 [140188547369784] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4397&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=idle (8 live) #314c3 GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.490 [140188674710328] DEBUG - Completed: [127.0.0.1:40532] 200 GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4397&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=idle (8 live) #314c3 GZIP 0ms 195 bytes (pipelined: 5328)
Apr 03, 2025 20:53:25.503 [140188592540472] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /library/changestamp (8 live) #314cc GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Internal-Request => 1 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.503 [140188592540472] VERBOSE - It took 0.0 sec to serialize a list with 0 elements.
Apr 03, 2025 20:53:25.503 [140188672600888] DEBUG - Completed: [127.0.0.1:40532] 200 GET /library/changestamp (8 live) #314cc GZIP 1ms 431 bytes (pipelined: 5329)
Apr 03, 2025 20:53:25.557 [140188599667512] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4398&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=analyzing (8 live) #314cd GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.557 [140188674710328] DEBUG - Completed: [127.0.0.1:40532] 200 GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4398&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=analyzing (8 live) #314cd GZIP 0ms 195 bytes (pipelined: 5330)
Apr 03, 2025 20:53:25.559 [140188554746680] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4398&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=idle (8 live) #314ce GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.560 [140188674710328] DEBUG - Completed: [127.0.0.1:40532] 200 GET /:/metadata/notify/changeItemState?librarySectionID=1&metadataItemID=4398&metadataType=10&state=-1&parentID=-1&rootID=-1&mediaState=idle (8 live) #314ce GZIP 0ms 195 bytes (pipelined: 5331)
Apr 03, 2025 20:53:25.569 [140188587019064] DEBUG - Request: [127.0.0.1:40532 (Loopback)] GET /library/changestamp (8 live) #314d7 GZIP Signed-in Token (TheRoadrunner) / Accept => / / Accept-Encoding => gzip / Host => 127.0.0.1:32400 / User-Agent => PlexMediaServer/1.41.5.9522-a96edc606 / X-Plex-Internal-Request => 1 / X-Plex-Token => xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Apr 03, 2025 20:53:25.569 [140188587019064] VERBOSE - It took 0.0 sec to serialize a list with 0 elements.

GET /hubs/search?query=single-handed… 200 OK, but no media/part returned in response Track is playable when accessed via album view → /library/metadata/XYZ


:folded_hands: Request

Please look into why Plex omits streamable media parts in /hubs/search responses for tracks when responding to Sonos clients.

This causes Sonos to unnecessarily gray out valid results — even though they’re fully playable.

Would love to see this resolved or worked around in a future Plex update :folded_hands:

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.