Hello @Charles_Craiglow
Thank you for your patience while we worked through this. We’ve now completed a thorough analysis of the diagnostic logs captured from your system, and we have a clear picture of what’s happening.
The metadata loss on your Vivaldi Upsampler is caused by a display session disconnect that the Vivaldi firmware does not recover from automatically.
When Roon starts playback on the Vivaldi, it sends a request_source command that includes a URL pointing to Roon’s built-in display page, hosted directly on your Nucleus+:
request_source → url: http://192.168.7.72:9330/display/2/?endpoint_id=…
The Vivaldi’s internal browser opens that page and maintains a live WebSocket connection back to the Nucleus+ to receive ongoing metadata updates. Under normal conditions this works correctly - as you’ve observed, the very first play session after a server restart is always fine.
The problem occurs when playback is paused for more than a minute or two. During this idle period, the Roon broker service on the Nucleus+ periodically re-initialises its network listeners on port 9330 - we can see this in the logs as repeated “cloning service … localEndpoints=tcp://192.168.7.72:9330” events. This silently drops the Vivaldi’s WebSocket connection to the display page.
On the next play, Roon correctly re-sends request_source and the Vivaldi responds with {"status":"Success"} - so from Roon’s perspective everything looks healthy. However, because the Vivaldi still considers the source “selected” from the previous session, its firmware does not re-load or re-connect the display page. The page is open but dead, with no live data feed, which is why the display is blank.
This also explains your observation that the metadata briefly flashes on the Upsampler window the moment you start a track - that is the last frame of the previous WebSocket session, rendered before the connection is fully confirmed lost.
The recovery workaround (pause → reselect → Play from here) triggers a full transport teardown and a fresh session setup, which forces the Vivaldi to reload the page and re-establish the connection from scratch.
Next Steps
dCS
We’d ask you to open a support case with dCS and share this analysis with them. The fix on their side would be for the Vivaldi firmware to treat an incoming request_source as a reload trigger even when that source is already marked as selected, so that a stale WebSocket connection is detected and replaced rather than left in place.
Roon
We are logging this with our own engineering team as well. On our side, we can investigate sending an explicit close followed by a new open in the request_source sequence when resuming after an idle period, which should prompt even a cached display session to reload.
In the meantime, the fastest workaround remains the pause-reselect-play procedure you’ve already found. Setting the Mosaic app to stay in the foreground on the iPad (and disabling iOS Auto-Lock while listening) may also reduce how frequently the display session goes stale, though it is not a root fix.
We’re sorry this has taken time to track down, and we appreciate your detailed reporting throughout - it made the log analysis considerably easier. We’ll update this thread once we have word from our engineering team.