Keep the extension prompt editable while the last frame loads.

The box was disabled for last-frame extract and a stuck videoBusy flag, so typing died after a finished job.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-09-02 00:10:52 -05:00
co-authored by Cursor
parent d64a25bbb7
commit b1b005669d
+6 -5
View File
@@ -534,7 +534,6 @@
placeholder="Motion prompt for this extension…" placeholder="Motion prompt for this extension…"
:keep-items="keepPrompts.video" :keep-items="keepPrompts.video"
keep-heading="Video prompts" keep-heading="Video prompts"
:disabled="videoBusy"
/> />
<DurationField v-model="item.duration" class="mt-3" label="Duration" /> <DurationField v-model="item.duration" class="mt-3" label="Duration" />
<LoraSelect <LoraSelect
@@ -1413,7 +1412,7 @@
{{ lastFrameLoading ? 'Reading last frame…' : 'Last frame preview unavailable' }} {{ lastFrameLoading ? 'Reading last frame…' : 'Last frame preview unavailable' }}
</p> </p>
</div> </div>
<label class="block text-sm"> <div class="block text-sm">
<span class="mb-1 block text-zinc-400">Extension prompt</span> <span class="mb-1 block text-zinc-400">Extension prompt</span>
<PromptField <PromptField
v-model="extendPrompt" v-model="extendPrompt"
@@ -1422,10 +1421,9 @@
placeholder="Continue the motion from this frame…" placeholder="Continue the motion from this frame…"
:keep-items="keepPrompts.video" :keep-items="keepPrompts.video"
keep-heading="Video prompts" keep-heading="Video prompts"
:disabled="lastFrameLoading || videoBusy"
textarea-class="" textarea-class=""
/> />
</label> </div>
<DurationField <DurationField
v-model="extendDuration" v-model="extendDuration"
label="Extension duration" label="Extension duration"
@@ -5698,7 +5696,10 @@ async function loadLastFrame(id: string) {
lastFrameLoading.value = true lastFrameLoading.value = true
const gen = ++lastFrameGen const gen = ++lastFrameGen
try { try {
const blob = await $fetch<Blob>(`/api/library/clips/${id}/last-frame`, { responseType: 'blob' }) const blob = await $fetch<Blob>(`/api/library/clips/${id}/last-frame`, {
responseType: 'blob',
signal: AbortSignal.timeout(20_000)
})
if (gen !== lastFrameGen) return if (gen !== lastFrameGen) return
if (lastFrameObjectUrl) URL.revokeObjectURL(lastFrameObjectUrl) if (lastFrameObjectUrl) URL.revokeObjectURL(lastFrameObjectUrl)
lastFrameObjectUrl = URL.createObjectURL(blob) lastFrameObjectUrl = URL.createObjectURL(blob)