Movie Editor: remove low-pass panel; elapsed timer; job-crash detection
sampler_panel.js: remove the Low pass section — Studio outputs high_pass_
sampler/sigmas (indices 4+5) to the chain sampler; the low-pass outputs (6+7)
are not wired in the movie editor graph. Renamed header from "High pass" to
"Sampler" since there's only one now.
store.js: show elapsed time in the generating readout so a slow run doesn't
look frozen ("Generating… 1m 23s" instead of a static "Generating… (running)").
store.js: detect job-disappeared crash — if ComfyUI returns state="pending"
three polls in a row after the job was running (job left the queue but never
appeared in history), stop polling and show "Job disappeared from ComfyUI queue
— it may have crashed. Check the ComfyUI terminal." Previously this left the
UI in "Generating… (running)" indefinitely.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
fbf7ac5ac0
commit
dc049ad333
@@ -314,8 +314,9 @@
|
||||
return () => quiet ? save(s) : saveNow(s);
|
||||
}
|
||||
|
||||
renderPass(container, "high", "High pass", s.high, mkSave(true), mkSave(false));
|
||||
renderPass(container, "low", "Low pass", s.low, mkSave(true), mkSave(false));
|
||||
// Only the high-pass sampler is wired in the Movie Editor graph
|
||||
// (studio outputs 4+5 → chain sampler; outputs 6+7 are not connected).
|
||||
renderPass(container, "high", "Sampler", s.high, mkSave(true), mkSave(false));
|
||||
}
|
||||
|
||||
window.SamplerPanel = { render, defaultSamplers, defaultPass };
|
||||
|
||||
@@ -268,12 +268,14 @@
|
||||
}
|
||||
|
||||
let pollTimer = null;
|
||||
let pollStart = 0;
|
||||
async function generate(onlyScene) {
|
||||
if (!state.project) return;
|
||||
set({ gen: { state: "queuing", promptId: null, media: [], msg: onlyScene ? "Queuing scene…" : "Queuing montage…" } });
|
||||
try {
|
||||
const r = await API.generate(state.project.id, onlyScene);
|
||||
if (!r.prompt_id) { set({ gen: { ...state.gen, state: "error", msg: "No prompt id returned." } }); return; }
|
||||
pollStart = Date.now();
|
||||
set({ gen: { state: "running", promptId: r.prompt_id, media: [], msg: "Generating…" } });
|
||||
poll(r.prompt_id);
|
||||
} catch (e) {
|
||||
@@ -281,8 +283,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
function _elapsed() {
|
||||
const s = Math.floor((Date.now() - pollStart) / 1000);
|
||||
return s < 60 ? `${s}s` : `${Math.floor(s / 60)}m ${s % 60}s`;
|
||||
}
|
||||
|
||||
function poll(promptId) {
|
||||
clearInterval(pollTimer);
|
||||
let pendingStreak = 0;
|
||||
pollTimer = setInterval(async () => {
|
||||
try {
|
||||
const s = await API.status(state.project.id, promptId);
|
||||
@@ -294,7 +302,16 @@
|
||||
clearInterval(pollTimer);
|
||||
set({ gen: { state: "done", promptId, media: s.media, msg: s.media.length ? "" : "Completed but no output media found — check ComfyUI terminal." } });
|
||||
} else {
|
||||
set({ gen: { ...state.gen, state: s.state, msg: `Generating… (${s.state})` } });
|
||||
// "pending" after being "running" means the job left the queue without a
|
||||
// history entry — it likely crashed or was interrupted by ComfyUI.
|
||||
if (s.state === "pending") pendingStreak++;
|
||||
else pendingStreak = 0;
|
||||
if (pendingStreak >= 3) {
|
||||
clearInterval(pollTimer);
|
||||
set({ gen: { state: "error", promptId, media: [], msg: "Job disappeared from ComfyUI queue — it may have crashed or been interrupted. Check the ComfyUI terminal." } });
|
||||
return;
|
||||
}
|
||||
set({ gen: { ...state.gen, state: s.state, msg: `Generating… ${_elapsed()}` } });
|
||||
}
|
||||
} catch (e) {
|
||||
clearInterval(pollTimer);
|
||||
|
||||
Reference in New Issue
Block a user