I am using this extension and I noticed the cover changes everytime the song changed, but not the infos about the song. They change only every two songs.
Nce! What would it cost?
It’s a bug, and I haven’t figured out how to fix it yet!
https://github.com/epochaudio/RoonCoverArt_Android/releases/download/v2.4.1/CoverArt-2.4.1-debug.apk
- 2.4.1 (Latest)
- Fixed a bug where touching the cover art could tear down the Roon connection: the cover-drag preview warmup sent a queue-subscribe on the main thread (
NetworkOnMainThreadException), which the outbound writer misread as a socket failure and closed the connection — surfacing as reconnect churn and unreliable swipe gestures - Moved main-thread MOO sends off the UI thread; hardened the outbound writer to only disconnect on a real
IOException
- Fixed a bug where touching the cover art could tear down the Roon connection: the cover-drag preview warmup sent a queue-subscribe on the main thread (
- 2.4.0
- Added a connection supervisor for unattended 24/7 operation: application-level heartbeat detects silent/half-dead WebSocket sessions within ~35s (independent of TCP keepalive) and drives a perpetual exponential-backoff reconnect that never gives up
- Session-generation isolation prevents a dying old connection’s late callbacks from disrupting a fresh one; escalates to SOOD re-discovery after repeated failures so a Roon Core that changed IP is found again
- Enabled by default; can be toggled off at runtime via
runtime_config.feature_flags.connection_supervisor. Legacy connection path retained as a rollback fallback - Field-verified: automatic recovery ~29s after a real disconnect, zero false heartbeat kills over long idle (Roon replies to WS ping/pong)
- Folds in the previously unreleased 2.3.8 cover-art sync fixes (see below)
- Added 19 JVM tests for heartbeat liveness and reconnect backoff/escalation/stale-callback handling
- 2.3.8
- Fixed cover-art desync in now-playing binding and gesture previews so the visible cover always matches the current track
- Fixed gesture cover-art previews: eliminated preview freeze, wrong-cover flashes, and a resubscribe storm during rapid skips
@Israel_Smith @Maurizio_Fabiani @K.J_Redert @Otto_K_Domma @Spencer_Didriksen @Michael_van_der_Wal
Hi Wen, thanks for tagging me!
It’s a beautiful app!
Our two apps differ a lot but both have Roon and artworkd in common, nice work my friend! ![]()
Thanks for the update Wen. Running great here on my cheap Walmart tablet.
Wow, nice draft, that’s exactly what I’m looking for. Instant buy if it has a black frame and a matte IPS FHD display. From an aesthetic standpoint the power connection should be hidden on the back of the display - visible cables are evil. ![]()
I’m getting a 404 on the GitHub link.
- 2.5.4 (Latest)
- Fixed inbound message classification so only seek-only progress payloads are discarded; natural-track payloads that also carry authoritative Zone, now-playing, or state changes stay on the ordered protocol path
- Added mixed seek/track regression coverage; all 307 Debug and 307 Release JVM tests pass with 0 lint errors/5 existing warnings and a successful Debug APK build
- Installed the repaired APK as an in-place update on LX04 (
192.168.0.148): without a manual transport command, playback advanced fromVincenttoImagine (Imagine)with matching Eva Cassidy artwork, title, artist, album, and persisted image key; the app stayed foreground with its Roon Core socket established and an empty crash buffer
- 2.5.3
- Consolidated early multi-AI legacy paths into explicit single owners for connection, subscriptions, transitions, Settings/Zone persistence, cache/configuration, and layout policy
- Hardened Core discovery, WebSocket framing, session isolation, bounded protocol/image work, Queue restoration, and stale-response rejection
- Removed the final production-zero-call compatibility/debug surfaces while preserving the live Settings, palette, layout, dispatch, and transition handoff paths
- Verified 305 Debug and 305 Release JVM tests, 0 lint errors, and the same final Debug APK on LX04 and YF_024E; YF_024E is startup/connection-only because it does not support gestures
- 2.5.2
- Fixed the natural-track transition race that could leave new cover art paired with old metadata
- Bound connection callbacks, inbound/outbound work, and Queue subscriptions to explicit sessions so stale work cannot cross reconnects
- Replaced recursive WebSocket frame parsing with an iterative, bounded reader and strengthened subscription restoration
2.54 is running smoothly here. Great work!
I’d still like to see a nice simple clock screen when nothing’s playing. But I’m really grateful for your work on this!!
