diff --git a/src/composables/useCoreCommands.ts b/src/composables/useCoreCommands.ts index f691ff7f1e..25fa740110 100644 --- a/src/composables/useCoreCommands.ts +++ b/src/composables/useCoreCommands.ts @@ -1220,6 +1220,12 @@ export function useCoreCommands(): ComfyCommand[] { await settingStore.set('Comfy.Assets.UseAssetAPI', !current) await useWorkflowService().reloadCurrentWorkflow() // ensure changes take effect immediately } + }, + { + id: 'Comfy.ToggleLinear', + icon: 'pi pi-database', + label: 'toggle linear mode', + function: () => (canvasStore.linearMode = !canvasStore.linearMode) } ] diff --git a/src/platform/workflow/core/services/workflowService.ts b/src/platform/workflow/core/services/workflowService.ts index 2eba1345ba..59b1b6faf4 100644 --- a/src/platform/workflow/core/services/workflowService.ts +++ b/src/platform/workflow/core/services/workflowService.ts @@ -11,6 +11,7 @@ import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' import type { ComfyWorkflowJSON } from '@/platform/workflow/validation/schemas/workflowSchema' +import { useCanvasStore } from '@/renderer/core/canvas/canvasStore' import { useWorkflowThumbnail } from '@/renderer/core/thumbnail/useWorkflowThumbnail' import { app } from '@/scripts/app' import { blankGraph, defaultGraph } from '@/scripts/defaultGraph' @@ -332,6 +333,7 @@ export const useWorkflowService = () => { const loadedWorkflow = await workflowStore.openWorkflow(value) loadedWorkflow.changeTracker.reset(workflowData) loadedWorkflow.changeTracker.restore() + useCanvasStore().linearMode = !!loadedWorkflow.activeState.extra?.linearMode } /** diff --git a/src/renderer/core/canvas/canvasStore.ts b/src/renderer/core/canvas/canvasStore.ts index 42740ec22c..bfc54c1db5 100644 --- a/src/renderer/core/canvas/canvasStore.ts +++ b/src/renderer/core/canvas/canvasStore.ts @@ -40,6 +40,8 @@ export const useCanvasStore = defineStore('canvas', () => { // Reactive scale percentage that syncs with app.canvas.ds.scale const appScalePercentage = ref(100) + const linearMode = ref(false) + // Set up scale synchronization when canvas is available let originalOnChanged: ((scale: number, offset: Point) => void) | undefined = undefined @@ -138,6 +140,7 @@ export const useCanvasStore = defineStore('canvas', () => { groupSelected, rerouteSelected, appScalePercentage, + linearMode, updateSelectedItems, getCanvas, setAppZoomFromPercentage, diff --git a/src/stores/imagePreviewStore.ts b/src/stores/imagePreviewStore.ts index 300c532c97..ee8ae759bd 100644 --- a/src/stores/imagePreviewStore.ts +++ b/src/stores/imagePreviewStore.ts @@ -40,6 +40,7 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => { const { nodeIdToNodeLocatorId, nodeToNodeLocatorId } = useWorkflowStore() const { executionIdToNodeLocatorId } = useExecutionStore() const scheduledRevoke: Record void }> = {} + const latestOutput = ref([]) function scheduleRevoke(locator: NodeLocatorId, cb: () => void) { scheduledRevoke[locator]?.stop() @@ -146,6 +147,13 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => { } } + //TODO:Preview params and deduplication + latestOutput.value = + (outputs as ExecutedWsMessage['output'])?.images?.map((image) => { + const imgUrlPart = new URLSearchParams(image) + const rand = app.getRandParam() + return api.apiURL(`/view?${imgUrlPart}${rand}`) + }) ?? [] app.nodeOutputs[nodeLocatorId] = outputs nodeOutputs.value[nodeLocatorId] = outputs } @@ -213,6 +221,7 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => { scheduledRevoke[nodeLocatorId].stop() delete scheduledRevoke[nodeLocatorId] } + latestOutput.value = previewImages app.nodePreviewImages[nodeLocatorId] = previewImages nodePreviewImages.value[nodeLocatorId] = previewImages } @@ -381,6 +390,7 @@ export const useNodeOutputStore = defineStore('nodeOutput', () => { // State nodeOutputs, - nodePreviewImages + nodePreviewImages, + latestOutput } }) diff --git a/src/views/GraphView.vue b/src/views/GraphView.vue index b7ffa19e14..8415150562 100644 --- a/src/views/GraphView.vue +++ b/src/views/GraphView.vue @@ -5,12 +5,14 @@
+
@@ -22,6 +24,7 @@ +