Before you redo the rest by hand, check whether the broken ones share a format. Black frames that render fine on the phones but not in a desktop browser usually mean the original file is intact and it was the server-side preview that failed to generate, with the phones quietly decoding the original themselves. HEIC and HEVC and 10-bit HDR are the usual suspects, since those lean on libheif and ffmpeg on the server and older builds choke on them.
If that’s the cause, re-uploading only “works” because it reruns preview generation, so you’re really just triggering a fresh encode. Grep the museum logs around one of the bad files for a decode error, and see whether a rescan or clearing the thumbnail cache regenerates them in place. That would save you doing the whole library one file at a time.


That line predates invidious-companion. When the player and signature handling still lived in the main process, a periodic kick was the honest workaround, and the docs never really caught up after companion split it out.
What I’d push back on is the blind hourly restart, because it hides exactly the failure you just had. A companion image sitting a version behind shows up as things half-working, and a scheduled restart makes that go away for an hour at a time, so you never trace it. If you’re going to script something, script a check instead: hit an endpoint that actually plays a video, restart only when that fails, and log it when it does. Then a restart tells you something happened.
Small thing that would have caught your case:
docker compose pullwith no service name pulls all three, anddocker compose imagesprints the digests you’re actually running.