diff --git a/ui/index.html b/ui/index.html
index e993c3b..8c607bd 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -3596,9 +3596,10 @@ async function readShots(quiet) {
// tried again on Refresh, not by every background check.
async function fillThumbs(quiet) {
const run = ++shots.fill;
+ // Refresh puts every failed one back in line first, so a background pass that takes over carries them all on.
+ if (!quiet) for (const img of document.querySelectorAll("#shotGrid img[data-failed]")) delete img.dataset.failed;
for (const img of document.querySelectorAll("#shotGrid img[data-shot]:not([src])" + (quiet ? ":not([data-failed])" : ""))) {
const s = shots.list[+img.dataset.shot];
- delete img.dataset.failed; // being tried again, so a background pass taking over keeps it
let url;
try { url = await shotThumb(s.id); } catch (e) { img.alt = "Preview failed"; img.dataset.failed = 1; }
if (run !== shots.fill) return; // a newer pass (after a check, a redraw or another headset) has taken over