Show animated pulse bar when processing but progress still 0%
Docker Build and Push / check-secrets (push) Successful in 4s
Docker Build and Push / build-and-push (cpu, latest) (push) Has been skipped
Docker Build and Push / build-and-push (cuda, 11.8) (push) Has been skipped
Docker Build and Push / build-and-push (cuda, 12.8) (push) Has been skipped
Docker Build and Push / build-and-push (directml, latest) (push) Has been skipped
Docker Build and Push / build-and-push (cuda, 12.6) (push) Has been skipped
Build Windows CPU / build (push) Has been cancelled
Build Windows CUDA 11.8 / build (push) Has been cancelled
Build Windows CUDA 12.6 / build (push) Has been cancelled
Build Windows CUDA 12.8 / build (push) Has been cancelled
Build Windows DirectML / build (push) Has been cancelled

For large videos (e.g. 27508 frames), the first 275 frames only amount
to ~1% which rounds to 0 in integer percentage — so detect_pct stays 0
for a while even though the task is actively running. Instead of showing
static zero bars, display a pulsing indeterminate bar with an explanation
message so the user knows the task is alive.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
liuchen
2026-06-27 15:42:20 +08:00
co-authored by Claude Haiku 4.5
parent b4b9837dde
commit 8dc1276a7c
+24 -6
View File
@@ -458,6 +458,11 @@
.log-toolbar .subtle { flex: 1; }
#wl-pause-btn.paused { color: var(--warn); border-color: rgba(181,113,10,.5); }
@keyframes pulse-bar {
0%,100% { opacity:.3; transform: scaleX(.3); }
50% { opacity:1; transform: scaleX(1); }
}
/* ── Responsive ─────────────────────────────────────────── */
@media (max-width: 1100px) {
.shell { grid-template-columns: 1fr; }
@@ -1073,12 +1078,25 @@ function updateDetailDynamic(t) {
const p = t.download_progress||0;
progEl.innerHTML = `<div style="font-size:11px;color:var(--muted);margin-bottom:4px">下载进度 ${p}%</div><div class="prog-track"><div class="prog-fill dl" style="width:${p}%"></div></div>`;
} else if (t.status === 'processing') {
progEl.innerHTML = `
<div style="display:grid;gap:5px">
<div class="phase-row"><span class="phase-label">检测</span><div class="phase-track"><div class="phase-fill detect" style="width:${t.detect_pct||0}%"></div></div><span class="phase-pct">${t.detect_pct||0}%</span></div>
<div class="phase-row"><span class="phase-label">处理</span><div class="phase-track"><div class="phase-fill process" style="width:${t.process_pct||0}%"></div></div><span class="phase-pct">${t.process_pct||0}%</span></div>
<div class="phase-row"><span class="phase-label">合并</span><div class="phase-track"><div class="phase-fill merge" style="width:${t.merge_pct||0}%"></div></div><span class="phase-pct">${t.merge_pct||0}%</span></div>
</div>`;
const allZero = !t.detect_pct && !t.process_pct && !t.merge_pct;
if (allZero) {
// 尚未有实质进度,显示脉冲动画表示"正在工作"
progEl.innerHTML = `
<div style="font-size:11px;color:var(--warn);margin-bottom:6px">
⏳ 初始化中,正在处理第一批帧…(大视频需要等待)
</div>
<div class="prog-track" style="overflow:visible">
<div style="height:4px;border-radius:2px;background:linear-gradient(90deg,var(--brand),#0ea5a5);
animation:pulse-bar 1.5s ease-in-out infinite;transform-origin:left"></div>
</div>`;
} else {
progEl.innerHTML = `
<div style="display:grid;gap:5px">
<div class="phase-row"><span class="phase-label">检测</span><div class="phase-track"><div class="phase-fill detect" style="width:${t.detect_pct||0}%"></div></div><span class="phase-pct">${t.detect_pct||0}%</span></div>
<div class="phase-row"><span class="phase-label">处理</span><div class="phase-track"><div class="phase-fill process" style="width:${t.process_pct||0}%"></div></div><span class="phase-pct">${t.process_pct||0}%</span></div>
<div class="phase-row"><span class="phase-label">合并</span><div class="phase-track"><div class="phase-fill merge" style="width:${t.merge_pct||0}%"></div></div><span class="phase-pct">${t.merge_pct||0}%</span></div>
</div>`;
}
} else {
progEl.innerHTML = '';
}