From 3b9d4533f9fc048c5009d7469649525601180980 Mon Sep 17 00:00:00 2001 From: space-nuko <24979496+space-nuko@users.noreply.github.com> Date: Sat, 27 May 2023 22:39:07 -0500 Subject: [PATCH] Preserve mask when sending output into image upload --- src/lib/components/ComfyQueue.svelte | 4 +- src/lib/components/MaskCanvas.svelte | 66 ++++++++++++++----- src/lib/nodes/ComfyPickImageNode.ts | 4 +- src/lib/nodes/widgets/ComfyImageUploadNode.ts | 1 + src/lib/widgets/ImageUploadWidget.svelte | 12 ++-- 5 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/lib/components/ComfyQueue.svelte b/src/lib/components/ComfyQueue.svelte index 9d8bd75..8aa3cdf 100644 --- a/src/lib/components/ComfyQueue.svelte +++ b/src/lib/components/ComfyQueue.svelte @@ -146,10 +146,10 @@ if (entry.extraData?.workflowTitle != null) { message = `${entry.extraData.workflowTitle}` } + if (subgraphs) { const subgraphsString = subgraphs.join(', ') - if (subgraphsString.length > 0) - message += ` (${subgraphsString})` + message += ` (${subgraphsString})` } let submessage = `Nodes: ${Object.keys(entry.prompt).length}` diff --git a/src/lib/components/MaskCanvas.svelte b/src/lib/components/MaskCanvas.svelte index 6ad0cb6..4463d7a 100644 --- a/src/lib/components/MaskCanvas.svelte +++ b/src/lib/components/MaskCanvas.svelte @@ -2,7 +2,19 @@ export type MaskCanvasData = { hasMask: boolean, maskCanvas: HTMLCanvasElement | null, + curLineGroup: LineGroup, + redoCurLines: LineGroup, } + export type LinePoint = { + x: number, + y: number + } + export interface Line { + size?: number, + points: LinePoint[] + } + export type LineGroup = Line[]; + diff --git a/src/lib/nodes/ComfyPickImageNode.ts b/src/lib/nodes/ComfyPickImageNode.ts index c314a79..8404463 100644 --- a/src/lib/nodes/ComfyPickImageNode.ts +++ b/src/lib/nodes/ComfyPickImageNode.ts @@ -99,9 +99,9 @@ export default class ComfyPickImageNode extends ComfyGraphNode { override onExecute() { const data = this.getInputData(0) let index = this.getInputData(1); - if (this.properties.imageTagFilter && Array.isArray(data)) + if (this.properties.imageTagFilter != "" && Array.isArray(data)) index = data.findIndex(i => i.tags?.includes(this.properties.imageTagFilter)) - else + else if (index == null) index = 0; this.setValue(data, index); diff --git a/src/lib/nodes/widgets/ComfyImageUploadNode.ts b/src/lib/nodes/widgets/ComfyImageUploadNode.ts index eee73b4..1782b18 100644 --- a/src/lib/nodes/widgets/ComfyImageUploadNode.ts +++ b/src/lib/nodes/widgets/ComfyImageUploadNode.ts @@ -6,6 +6,7 @@ import ImageUploadWidget from "$lib/widgets/ImageUploadWidget.svelte"; import type { ComfyWidgetProperties } from "./ComfyWidgetNode"; import ComfyWidgetNode from "./ComfyWidgetNode"; import { get, writable, type Writable } from "svelte/store"; +import { type LineGroup } from "$lib/components/MaskCanvas.svelte" export interface ComfyImageUploadNodeProperties extends ComfyWidgetProperties { maskCount: number diff --git a/src/lib/widgets/ImageUploadWidget.svelte b/src/lib/widgets/ImageUploadWidget.svelte index 2bc6c6a..b06bc3a 100644 --- a/src/lib/widgets/ImageUploadWidget.svelte +++ b/src/lib/widgets/ImageUploadWidget.svelte @@ -5,8 +5,6 @@ import Row from "$lib/components/gradio/app/Row.svelte"; import { writable, type Writable } from "svelte/store"; import { Button } from "@gradio/button"; - - import ImageUpload from "$lib/components/ImageUpload.svelte"; import { type ComfyBoxImageMetadata, comfyFileToComfyBoxMetadata, @@ -16,13 +14,12 @@ convertComfyOutputToComfyURL, batchUploadBlobsToComfyUI, canvasToBlob, - basename - } from "$lib/utils"; + import ImageUpload from "$lib/components/ImageUpload.svelte"; import notify from "$lib/notify"; import { ImageViewer } from "$lib/ImageViewer"; - import MaskCanvas, { type MaskCanvasData } from "$lib/components/MaskCanvas.svelte"; + import MaskCanvas, { type LineGroup, type MaskCanvasData } from "$lib/components/MaskCanvas.svelte"; import type { ComfyImageUploadNode } from "$lib/nodes/widgets"; import { tick } from "svelte"; @@ -65,7 +62,7 @@ async function onMaskReleased(e: CustomEvent) { const data = e.detail; - if (data.maskCanvas && data.hasMask) { + if (data.maskCanvas != null && data.hasMask) { await saveMask(data.maskCanvas) } } @@ -203,7 +200,6 @@ $: canEdit = status === "empty" || status === "uploaded"; - function onChange(e: CustomEvent) { } @@ -229,7 +225,7 @@ {#if _value && canMask} {@const comfyURL = convertComfyOutputToComfyURL(_value[0])}
- +
{/if}