Implement workflow progress panel (#6092)

Adds a workflow progress panel component underneath the
`actionbar-container`.

I suggest starting a review at the extraneous changes that were needed.
Including but not limited to:

- `get createTime()` in queueStore
- `promptIdToWorkflowId`, `initializingPromptIds`, and
`nodeProgressStatesByPrompt` in executionStore
- `create_time` handling in v2ToV1Adapter
- `pointer-events-auto` on ComfyActionbar.vue

The rest of the changes should be contained under
`QueueProgressOverlay.vue`, and has less of a blast radius in case
something goes wrong.

---------

Co-authored-by: pythongosssss <125205205+pythongosssss@users.noreply.github.com>
Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Jin Yi <jin12cc@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Alexander Brown <drjkl@comfy.org>
Co-authored-by: Johnpaul Chiwetelu <49923152+Myestery@users.noreply.github.com>
Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com>
Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com>
This commit is contained in:
Benjamin Lu
2025-11-18 22:43:49 -08:00
committed by GitHub
parent 92968f3f9b
commit e42715086e
76 changed files with 7117 additions and 39 deletions

View File

@@ -71,6 +71,7 @@
"info": "Node Info",
"bookmark": "Save to Library",
"moreOptions": "More Options",
"more": "More",
"loading": "Loading",
"loadingPanel": "Loading {panel} panel...",
"preview": "PREVIEW",
@@ -170,6 +171,13 @@
"inProgress": "In progress",
"completed": "Completed",
"interrupted": "Interrupted",
"queued": "Queued",
"running": "Running",
"failed": "Failed",
"cancelled": "Cancelled",
"job": "Job",
"untitled": "Untitled",
"emDash": "—",
"enabling": "Enabling {id}",
"disabling": "Disabling {id}",
"updating": "Updating {id}",
@@ -683,6 +691,40 @@
"hideCanceled": "Hide Canceled"
}
},
"queueProgressOverlay": {
"title": "Queue Progress",
"total": "Total: {percent}",
"colonPercent": ": {percent}",
"currentNode": "Current node:",
"viewAllJobs": "View all jobs",
"running": "running",
"interruptAll": "Interrupt all running jobs",
"moreOptions": "More options",
"showAssets": "Show assets",
"showAssetsPanel": "Show assets panel",
"queuedSuffix": "queued",
"clearQueued": "Clear queued",
"clearHistory": "Clear job queue history",
"filterJobs": "Filter jobs",
"filterBy": "Filter by",
"filterAllWorkflows": "All workflows",
"filterCurrentWorkflow": "Current workflow",
"sortJobs": "Sort jobs",
"sortBy": "Sort by",
"activeJobsSuffix": "active jobs",
"jobQueue": "Job Queue",
"expandCollapsedQueue": "Expand job queue",
"viewJobHistory": "View job history",
"noActiveJobs": "No active jobs",
"stubClipTextEncode": "CLIP Text Encode:",
"jobsCompleted": "{count} job completed | {count} jobs completed",
"jobsFailed": "{count} job failed | {count} jobs failed",
"cancelJobTooltip": "Cancel job",
"clearQueueTooltip": "Clear queue",
"clearHistoryDialogTitle": "Clear your job queue history?",
"clearHistoryDialogDescription": "All the finished or failed jobs below will be removed from this Job queue panel.",
"clearHistoryDialogAssetsNote": "Assets generated by these jobs wont be deleted and can always be viewed from the assets panel."
},
"workflowTab": {
"confirmDeleteTitle": "Delete workflow?",
"confirmDelete": "Are you sure you want to delete this workflow?",
@@ -940,6 +982,55 @@
"help": "Help",
"queue": "Queue Panel"
},
"queue": {
"initializingAlmostReady": "Initializing - Almost ready",
"inQueue": "In queue...",
"jobAddedToQueue": "Job added to queue",
"jobMenu": {
"openAsWorkflowNewTab": "Open as workflow in new tab",
"openWorkflowNewTab": "Open workflow in new tab",
"copyJobId": "Copy job ID",
"cancelJob": "Cancel job",
"inspectAsset": "Inspect asset",
"addToCurrentWorkflow": "Add to current workflow",
"download": "Download",
"exportWorkflow": "Export workflow",
"delete": "Delete",
"deleteAsset": "Delete asset",
"removeJob": "Remove job",
"copyErrorMessage": "Copy error message",
"reportError": "Report error"
},
"jobList": {
"undated": "Undated",
"sortMostRecent": "Most recent",
"sortTotalGenerationTime": "Total generation time (longest first)",
"sortComputeHoursUsed": "Compute hours used (most first)"
},
"jobDetails": {
"header": "Job Details",
"workflow": "Workflow",
"jobId": "Job ID",
"queuedAt": "Queued at",
"queuePosition": "Queue position",
"timeElapsed": "Time elapsed",
"estimatedStartIn": "Estimated to start in",
"estimatedFinishIn": "Estimated to finish in",
"generatedOn": "Generated on",
"totalGenerationTime": "Total generation time",
"computeHoursUsed": "Compute hours used",
"failedAfter": "Failed after",
"errorMessage": "Error message",
"report": "Report",
"queuePositionValue": "~{count} job ahead of yours | ~{count} jobs ahead of yours",
"eta": {
"seconds": "~{count} second | ~{count} seconds",
"secondsRange": "~{lo}-{hi} seconds",
"minutes": "~{count} minute | ~{count} minutes",
"minutesRange": "~{lo}-{hi} minutes"
}
}
},
"menuLabels": {
"File": "File",
"Edit": "Edit",