Fix last queue item not removing & don't autoselect init workflows
This commit is contained in:
@@ -42,6 +42,12 @@ if (typeof window !== "undefined") {
|
|||||||
nodes.ComfyReroute.setDefaultTextVisibility(!!localStorage["Comfy.ComfyReroute.DefaultVisibility"]);
|
nodes.ComfyReroute.setDefaultTextVisibility(!!localStorage["Comfy.ComfyReroute.DefaultVisibility"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type OpenWorkflowOptions = {
|
||||||
|
setActive?: boolean,
|
||||||
|
refreshCombos?: boolean | Record<string, ComfyNodeDef>,
|
||||||
|
warnMissingNodeTypes?: boolean,
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Queued prompt that hasn't been sent to the backend yet.
|
* Queued prompt that hasn't been sent to the backend yet.
|
||||||
*/
|
*/
|
||||||
@@ -208,8 +214,12 @@ export default class ComfyApp {
|
|||||||
|
|
||||||
// We failed to restore a workflow so load the default
|
// We failed to restore a workflow so load the default
|
||||||
if (!restored) {
|
if (!restored) {
|
||||||
await this.initDefaultWorkflow("defaultWorkflow", defs);
|
const options: OpenWorkflowOptions = {
|
||||||
await this.initDefaultWorkflow("upscale", defs);
|
refreshCombos: defs,
|
||||||
|
setActive: false
|
||||||
|
}
|
||||||
|
await this.initDefaultWorkflow("defaultWorkflow", options);
|
||||||
|
await this.initDefaultWorkflow("upscale", options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save current workflow automatically
|
// Save current workflow automatically
|
||||||
@@ -296,7 +306,7 @@ export default class ComfyApp {
|
|||||||
|
|
||||||
const workflows = state.workflows as SerializedAppState[];
|
const workflows = state.workflows as SerializedAppState[];
|
||||||
await Promise.all(workflows.map(w => {
|
await Promise.all(workflows.map(w => {
|
||||||
return this.openWorkflow(w, defs, false).catch(error => {
|
return this.openWorkflow(w, { refreshCombos: defs, warnMissingNodeTypes: false, setActive: false }).catch(error => {
|
||||||
console.error("Failed restoring previous workflow", error)
|
console.error("Failed restoring previous workflow", error)
|
||||||
notify(`Failed restoring previous workflow: ${error}`, { type: "error" })
|
notify(`Failed restoring previous workflow: ${error}`, { type: "error" })
|
||||||
})
|
})
|
||||||
@@ -586,9 +596,11 @@ export default class ComfyApp {
|
|||||||
setColor(BuiltInSlotType.ACTION, "lightseagreen")
|
setColor(BuiltInSlotType.ACTION, "lightseagreen")
|
||||||
}
|
}
|
||||||
|
|
||||||
async openWorkflow(data: SerializedAppState,
|
async openWorkflow(data: SerializedAppState, options: OpenWorkflowOptions = {
|
||||||
refreshCombos: boolean | Record<string, ComfyNodeDef> = true,
|
setActive: true,
|
||||||
warnMissingNodeTypes: boolean = true
|
refreshCombos: true,
|
||||||
|
warnMissingNodeTypes: true
|
||||||
|
}
|
||||||
): Promise<ComfyWorkflow> {
|
): Promise<ComfyWorkflow> {
|
||||||
if (data.version !== COMFYBOX_SERIAL_VERSION) {
|
if (data.version !== COMFYBOX_SERIAL_VERSION) {
|
||||||
const mes = `Invalid ComfyBox saved data format: ${data.version} `
|
const mes = `Invalid ComfyBox saved data format: ${data.version} `
|
||||||
@@ -600,7 +612,7 @@ export default class ComfyApp {
|
|||||||
|
|
||||||
let workflow: ComfyWorkflow;
|
let workflow: ComfyWorkflow;
|
||||||
try {
|
try {
|
||||||
workflow = workflowState.openWorkflow(this.lCanvas, data);
|
workflow = workflowState.openWorkflow(this.lCanvas, data, options.setActive);
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
modalState.pushModal({
|
modalState.pushModal({
|
||||||
@@ -612,7 +624,7 @@ export default class ComfyApp {
|
|||||||
return Promise.reject(error)
|
return Promise.reject(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (workflow.missingNodeTypes.size > 0 && warnMissingNodeTypes) {
|
if (workflow.missingNodeTypes.size > 0 && options.warnMissingNodeTypes) {
|
||||||
modalState.pushModal({
|
modalState.pushModal({
|
||||||
svelteComponent: MissingNodeTypesModal,
|
svelteComponent: MissingNodeTypesModal,
|
||||||
svelteProps: {
|
svelteProps: {
|
||||||
@@ -624,10 +636,10 @@ export default class ComfyApp {
|
|||||||
// Restore canvas offset/zoom
|
// Restore canvas offset/zoom
|
||||||
this.lCanvas.deserialize(data.canvas)
|
this.lCanvas.deserialize(data.canvas)
|
||||||
|
|
||||||
if (refreshCombos) {
|
if (options.refreshCombos) {
|
||||||
let defs = null;
|
let defs = null;
|
||||||
if (typeof refreshCombos === "object")
|
if (typeof options.refreshCombos === "object")
|
||||||
defs = refreshCombos;
|
defs = options.refreshCombos;
|
||||||
await this.refreshComboInNodes(workflow, defs);
|
await this.refreshComboInNodes(workflow, defs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -705,7 +717,7 @@ export default class ComfyApp {
|
|||||||
selectionState.clear();
|
selectionState.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
async initDefaultWorkflow(name: string = "defaultWorkflow", defs?: Record<string, ComfyNodeDef>) {
|
async initDefaultWorkflow(name: string = "defaultWorkflow", options?: OpenWorkflowOptions) {
|
||||||
let state = null;
|
let state = null;
|
||||||
try {
|
try {
|
||||||
const graphResponse = await fetch(`/workflows/${name}.json`);
|
const graphResponse = await fetch(`/workflows/${name}.json`);
|
||||||
@@ -716,7 +728,7 @@ export default class ComfyApp {
|
|||||||
notify(`Failed to load default graph ${name}: ${error} `, { type: "error" })
|
notify(`Failed to load default graph ${name}: ${error} `, { type: "error" })
|
||||||
state = structuredClone(blankGraph)
|
state = structuredClone(blankGraph)
|
||||||
}
|
}
|
||||||
await this.openWorkflow(state, defs)
|
await this.openWorkflow(state, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
|
|||||||
@@ -76,11 +76,11 @@
|
|||||||
let _runningEntries: QueueUIEntry[] = []
|
let _runningEntries: QueueUIEntry[] = []
|
||||||
let _entries: QueueUIEntry[] = []
|
let _entries: QueueUIEntry[] = []
|
||||||
|
|
||||||
$: if (mode === "queue" && (changed || ($queuePending && $queuePending.length != _queuedEntries.length))) {
|
$: if (mode === "queue" && (changed || $queuePending.length != _queuedEntries.length || $queueRunning.length != _runningEntries.length)) {
|
||||||
updateFromQueue();
|
updateFromQueue();
|
||||||
changed = false;
|
changed = false;
|
||||||
}
|
}
|
||||||
else if (mode === "history" && (changed || ($queueCompleted && $queueCompleted.length != _entries.length))) {
|
else if (mode === "history" && (changed || $queueCompleted.length != _entries.length)) {
|
||||||
updateFromHistory();
|
updateFromHistory();
|
||||||
changed = false;
|
changed = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -245,8 +245,8 @@ type WorkflowStateOps = {
|
|||||||
getWorkflowByNodeID: (id: NodeID) => ComfyWorkflow | null
|
getWorkflowByNodeID: (id: NodeID) => ComfyWorkflow | null
|
||||||
getActiveWorkflow: () => ComfyWorkflow | null
|
getActiveWorkflow: () => ComfyWorkflow | null
|
||||||
createNewWorkflow: (canvas: ComfyGraphCanvas, title?: string, setActive?: boolean) => ComfyWorkflow,
|
createNewWorkflow: (canvas: ComfyGraphCanvas, title?: string, setActive?: boolean) => ComfyWorkflow,
|
||||||
openWorkflow: (canvas: ComfyGraphCanvas, data: SerializedAppState) => ComfyWorkflow,
|
openWorkflow: (canvas: ComfyGraphCanvas, data: SerializedAppState, setActive?: boolean) => ComfyWorkflow,
|
||||||
addWorkflow: (canvas: ComfyGraphCanvas, data: ComfyWorkflow) => void,
|
addWorkflow: (canvas: ComfyGraphCanvas, data: ComfyWorkflow, setActive?: boolean) => void,
|
||||||
closeWorkflow: (canvas: ComfyGraphCanvas, index: number) => void,
|
closeWorkflow: (canvas: ComfyGraphCanvas, index: number) => void,
|
||||||
closeAllWorkflows: (canvas: ComfyGraphCanvas) => void,
|
closeAllWorkflows: (canvas: ComfyGraphCanvas) => void,
|
||||||
setActiveWorkflow: (canvas: ComfyGraphCanvas, index: number | WorkflowInstID) => ComfyWorkflow | null,
|
setActiveWorkflow: (canvas: ComfyGraphCanvas, index: number | WorkflowInstID) => ComfyWorkflow | null,
|
||||||
@@ -299,7 +299,7 @@ function createNewWorkflow(canvas: ComfyGraphCanvas, title: string = "New Workfl
|
|||||||
state.openedWorkflows.push(workflow);
|
state.openedWorkflows.push(workflow);
|
||||||
state.openedWorkflowsByID[workflow.id] = workflow;
|
state.openedWorkflowsByID[workflow.id] = workflow;
|
||||||
|
|
||||||
if (setActive)
|
if (setActive || state.activeWorkflowID == null)
|
||||||
setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
|
setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
|
||||||
|
|
||||||
store.set(state)
|
store.set(state)
|
||||||
@@ -307,19 +307,21 @@ function createNewWorkflow(canvas: ComfyGraphCanvas, title: string = "New Workfl
|
|||||||
return workflow;
|
return workflow;
|
||||||
}
|
}
|
||||||
|
|
||||||
function openWorkflow(canvas: ComfyGraphCanvas, data: SerializedAppState): ComfyWorkflow {
|
function openWorkflow(canvas: ComfyGraphCanvas, data: SerializedAppState, setActive: boolean = true): ComfyWorkflow {
|
||||||
const [workflow, layoutState] = ComfyWorkflow.create("Workflow")
|
const [workflow, layoutState] = ComfyWorkflow.create("Workflow")
|
||||||
workflow.deserialize(layoutState, { graph: data.workflow, layout: data.layout, attrs: data.attrs })
|
workflow.deserialize(layoutState, { graph: data.workflow, layout: data.layout, attrs: data.attrs })
|
||||||
|
|
||||||
addWorkflow(canvas, workflow);
|
addWorkflow(canvas, workflow, setActive);
|
||||||
|
|
||||||
return workflow;
|
return workflow;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addWorkflow(canvas: ComfyGraphCanvas, workflow: ComfyWorkflow) {
|
function addWorkflow(canvas: ComfyGraphCanvas, workflow: ComfyWorkflow, setActive: boolean = true) {
|
||||||
const state = get(store);
|
const state = get(store);
|
||||||
state.openedWorkflows.push(workflow);
|
state.openedWorkflows.push(workflow);
|
||||||
state.openedWorkflowsByID[workflow.id] = workflow;
|
state.openedWorkflowsByID[workflow.id] = workflow;
|
||||||
|
|
||||||
|
if (setActive || state.activeWorkflowID == null)
|
||||||
setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
|
setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
|
||||||
|
|
||||||
store.set(state)
|
store.set(state)
|
||||||
|
|||||||
Reference in New Issue
Block a user