Let Generate queue while Comfy is asleep instead of disabling the button.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+19
-6
@@ -22,8 +22,8 @@
|
|||||||
<button
|
<button
|
||||||
v-if="showWakeGpu"
|
v-if="showWakeGpu"
|
||||||
type="button"
|
type="button"
|
||||||
class="rounded-full border px-3 py-1 text-zinc-300 hover:border-amber-300/50 hover:text-white disabled:cursor-wait disabled:opacity-80"
|
class="rounded-full border px-3 py-1 hover:border-amber-300/50 hover:text-white disabled:cursor-wait disabled:opacity-80"
|
||||||
:class="gpuWaking ? 'border-amber-300/40 text-amber-100' : 'border-white/10'"
|
:class="gpuWaking ? 'border-amber-300/40 text-amber-100' : 'border-amber-400/40 text-amber-200'"
|
||||||
:disabled="gpuWaking"
|
:disabled="gpuWaking"
|
||||||
:title="gpuWakeError || (gpuWaking ? 'Starting Comfy Desktop on the GPU' : 'Poke / Wake GPU — start Comfy before generating')"
|
:title="gpuWakeError || (gpuWaking ? 'Starting Comfy Desktop on the GPU' : 'Poke / Wake GPU — start Comfy before generating')"
|
||||||
@click="pokeGpu"
|
@click="pokeGpu"
|
||||||
@@ -1087,6 +1087,16 @@
|
|||||||
>
|
>
|
||||||
{{ studioMode === 'editv2' ? editV2SubmitLabel : (studioMode === 'edit' ? editSubmitLabel : generateLabel) }}
|
{{ studioMode === 'editv2' ? editV2SubmitLabel : (studioMode === 'edit' ? editSubmitLabel : generateLabel) }}
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
v-if="showWakeGpu"
|
||||||
|
type="button"
|
||||||
|
class="rounded-2xl border px-4 py-3 text-sm font-semibold disabled:cursor-wait disabled:opacity-80"
|
||||||
|
:class="gpuWaking ? 'border-amber-300/40 text-amber-100' : 'border-amber-400/40 text-amber-200 hover:border-amber-300 hover:text-amber-50'"
|
||||||
|
:disabled="gpuWaking"
|
||||||
|
@click="pokeGpu"
|
||||||
|
>
|
||||||
|
{{ gpuWaking ? 'Starting GPU…' : 'Wake GPU' }}
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
v-if="videoBusy || editBusy"
|
v-if="videoBusy || editBusy"
|
||||||
type="button"
|
type="button"
|
||||||
@@ -1101,6 +1111,7 @@
|
|||||||
<p v-if="studioMode === 'video' && videoBlockReason" class="text-xs text-zinc-400">{{ videoBlockReason }}</p>
|
<p v-if="studioMode === 'video' && videoBlockReason" class="text-xs text-zinc-400">{{ videoBlockReason }}</p>
|
||||||
<p v-if="studioMode === 'edit' && editBlockReason" class="text-xs text-zinc-400">{{ editBlockReason }}</p>
|
<p v-if="studioMode === 'edit' && editBlockReason" class="text-xs text-zinc-400">{{ editBlockReason }}</p>
|
||||||
<p v-if="studioMode === 'editv2' && editV2BlockReason" class="text-xs text-zinc-400">{{ editV2BlockReason }}</p>
|
<p v-if="studioMode === 'editv2' && editV2BlockReason" class="text-xs text-zinc-400">{{ editV2BlockReason }}</p>
|
||||||
|
<p v-if="gpuSleepHint" class="text-xs text-amber-200/80">{{ gpuSleepHint }}</p>
|
||||||
|
|
||||||
<div v-if="studioJobs.length" class="rounded-2xl border border-white/10 bg-zinc-950/40 p-4">
|
<div v-if="studioJobs.length" class="rounded-2xl border border-white/10 bg-zinc-950/40 p-4">
|
||||||
<div class="flex items-start justify-between gap-3">
|
<div class="flex items-start justify-between gap-3">
|
||||||
@@ -2720,10 +2731,15 @@ const recommendHint = computed(() => {
|
|||||||
if (imageSidecarBusy.value) return 'Beast Comfy is busy — this may wait in its queue.'
|
if (imageSidecarBusy.value) return 'Beast Comfy is busy — this may wait in its queue.'
|
||||||
return 'Send this still and draft to Beast Qwen VL.'
|
return 'Send this still and draft to Beast Qwen VL.'
|
||||||
})
|
})
|
||||||
|
const gpuSleepHint = computed(() => {
|
||||||
|
if (comfyOk.value || imageComfyOk.value) return ''
|
||||||
|
if (gpuWaking.value) return 'Starting Comfy on the GPU. Generate will wait in the job queue until it answers.'
|
||||||
|
if (comfyAsleep.value) return 'GPU is asleep. Generate will wake it — the first job can take a few minutes. Or click Wake GPU to pre-warm.'
|
||||||
|
return 'GPU is offline. Generate will try to start Comfy. Or click Wake GPU.'
|
||||||
|
})
|
||||||
const editBlocked = computed(() => {
|
const editBlocked = computed(() => {
|
||||||
if (!file.value || !prompt.value.trim() || !folderId.value) return true
|
if (!file.value || !prompt.value.trim() || !folderId.value) return true
|
||||||
if (editPassQueue.value.some(item => !item.prompt.trim())) return true
|
if (editPassQueue.value.some(item => !item.prompt.trim())) return true
|
||||||
if (!comfyOk.value && !imageComfyOk.value && !gpuWaking.value) return true
|
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
const editBlockReason = computed(() => {
|
const editBlockReason = computed(() => {
|
||||||
@@ -2732,7 +2748,6 @@ const editBlockReason = computed(() => {
|
|||||||
if (!folderId.value) return 'Choose a library folder before editing.'
|
if (!folderId.value) return 'Choose a library folder before editing.'
|
||||||
if (editPassQueue.value.some(item => !item.prompt.trim())) return 'Each extra pass needs a prompt.'
|
if (editPassQueue.value.some(item => !item.prompt.trim())) return 'Each extra pass needs a prompt.'
|
||||||
if (!imageComfyConfigured.value && !comfyOk.value) return 'Image edit is not configured. Set COMFY_HOST.'
|
if (!imageComfyConfigured.value && !comfyOk.value) return 'Image edit is not configured. Set COMFY_HOST.'
|
||||||
if (!comfyOk.value && !imageComfyOk.value && !gpuWaking.value) return 'Desktop GPU is offline. Click Wake GPU first.'
|
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
const stillBHint = computed(() => {
|
const stillBHint = computed(() => {
|
||||||
@@ -2746,7 +2761,6 @@ const editV2Blocked = computed(() => {
|
|||||||
if (v2Mode.value !== 'generate' && !file.value) return true
|
if (v2Mode.value !== 'generate' && !file.value) return true
|
||||||
if (v2Mode.value === 'compose' && !editRefFile.value) return true
|
if (v2Mode.value === 'compose' && !editRefFile.value) return true
|
||||||
if (v2Mode.value === 'refine' && !refineMaskDirty.value) return true
|
if (v2Mode.value === 'refine' && !refineMaskDirty.value) return true
|
||||||
if (!comfyOk.value && !imageComfyOk.value && !gpuWaking.value) return true
|
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
const editV2BlockReason = computed(() => {
|
const editV2BlockReason = computed(() => {
|
||||||
@@ -2756,7 +2770,6 @@ const editV2BlockReason = computed(() => {
|
|||||||
if (!prompt.value.trim()) return 'Write a prompt first.'
|
if (!prompt.value.trim()) return 'Write a prompt first.'
|
||||||
if (!folderId.value) return 'Choose a library folder before generating.'
|
if (!folderId.value) return 'Choose a library folder before generating.'
|
||||||
if (!imageComfyConfigured.value && !comfyOk.value) return 'Image v2 is not configured. Set COMFY_HOST.'
|
if (!imageComfyConfigured.value && !comfyOk.value) return 'Image v2 is not configured. Set COMFY_HOST.'
|
||||||
if (!comfyOk.value && !imageComfyOk.value && !gpuWaking.value) return 'Desktop GPU is offline. Click Wake GPU first.'
|
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
const editV2SubmitLabel = computed(() => {
|
const editV2SubmitLabel = computed(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user