diff --git a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/addVAEToGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/addVAEToGraph.ts index 360e07062a..a0b6bc9803 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/addVAEToGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/addVAEToGraph.ts @@ -9,6 +9,7 @@ import { CANVAS_TEXT_TO_IMAGE_GRAPH, IMAGE_TO_IMAGE_GRAPH, IMAGE_TO_LATENTS, + INPAINT_CREATE_MASK, INPAINT_IMAGE, LATENTS_TO_IMAGE, MAIN_MODEL_LOADER, @@ -117,6 +118,16 @@ export const addVAEToGraph = ( field: 'vae', }, }, + { + source: { + node_id: isAutoVae ? modelLoaderNodeId : VAE_LOADER, + field: isAutoVae && isOnnxModel ? 'vae_decoder' : 'vae', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'vae', + }, + }, { source: { node_id: isAutoVae ? modelLoaderNodeId : VAE_LOADER, diff --git a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasInpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasInpaintGraph.ts index 4b017340cb..231e1b7a13 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasInpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasInpaintGraph.ts @@ -2,6 +2,7 @@ import { logger } from 'app/logging/logger'; import { RootState } from 'app/store/store'; import { NonNullableGraph } from 'features/nodes/types/types'; import { + CreateInpaintMaskInvocation, ImageBlurInvocation, ImageDTO, ImageToLatentsInvocation, @@ -15,13 +16,14 @@ import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph'; import { addVAEToGraph } from './addVAEToGraph'; import { addWatermarkerToGraph } from './addWatermarkerToGraph'; import { - CANVAS_INPAINT_GRAPH, - CANVAS_OUTPUT, CANVAS_COHERENCE_DENOISE_LATENTS, CANVAS_COHERENCE_NOISE, CANVAS_COHERENCE_NOISE_INCREMENT, + CANVAS_INPAINT_GRAPH, + CANVAS_OUTPUT, CLIP_SKIP, DENOISE_LATENTS, + INPAINT_CREATE_MASK, INPAINT_IMAGE, INPAINT_IMAGE_RESIZE_DOWN, INPAINT_IMAGE_RESIZE_UP, @@ -127,6 +129,12 @@ export const buildCanvasInpaintGraph = ( is_intermediate: true, fp32: vaePrecision === 'fp32' ? true : false, }, + [INPAINT_CREATE_MASK]: { + type: 'create_inpaint_mask', + id: INPAINT_CREATE_MASK, + is_intermediate: true, + fp32: vaePrecision === 'fp32' ? true : false, + }, [NOISE]: { type: 'noise', id: NOISE, @@ -276,11 +284,22 @@ export const buildCanvasInpaintGraph = ( field: 'latents', }, }, + // Create Inpaint Mask { source: { node_id: MASK_BLUR, field: 'image', }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'mask', + }, + }, + { + source: { + node_id: INPAINT_CREATE_MASK, + field: 'inpaint_mask', + }, destination: { node_id: DENOISE_LATENTS, field: 'mask', @@ -459,6 +478,16 @@ export const buildCanvasInpaintGraph = ( field: 'image', }, }, + { + source: { + node_id: INPAINT_IMAGE_RESIZE_UP, + field: 'image', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'image', + }, + }, // Color Correct The Inpainted Result { source: { @@ -516,6 +545,10 @@ export const buildCanvasInpaintGraph = ( ...(graph.nodes[MASK_BLUR] as ImageBlurInvocation), image: canvasMaskImage, }; + graph.nodes[INPAINT_CREATE_MASK] = { + ...(graph.nodes[INPAINT_CREATE_MASK] as CreateInpaintMaskInvocation), + image: canvasInitImage, + }; graph.edges.push( // Color Correct The Inpainted Result diff --git a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasOutpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasOutpaintGraph.ts index 9f424d3dcf..f123f88103 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasOutpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasOutpaintGraph.ts @@ -17,13 +17,14 @@ import { addNSFWCheckerToGraph } from './addNSFWCheckerToGraph'; import { addVAEToGraph } from './addVAEToGraph'; import { addWatermarkerToGraph } from './addWatermarkerToGraph'; import { - CANVAS_OUTPAINT_GRAPH, - CANVAS_OUTPUT, CANVAS_COHERENCE_DENOISE_LATENTS, CANVAS_COHERENCE_NOISE, CANVAS_COHERENCE_NOISE_INCREMENT, + CANVAS_OUTPAINT_GRAPH, + CANVAS_OUTPUT, CLIP_SKIP, DENOISE_LATENTS, + INPAINT_CREATE_MASK, INPAINT_IMAGE, INPAINT_IMAGE_RESIZE_DOWN, INPAINT_IMAGE_RESIZE_UP, @@ -153,6 +154,12 @@ export const buildCanvasOutpaintGraph = ( use_cpu, is_intermediate: true, }, + [INPAINT_CREATE_MASK]: { + type: 'create_inpaint_mask', + id: INPAINT_CREATE_MASK, + is_intermediate: true, + fp32: vaePrecision === 'fp32' ? true : false, + }, [DENOISE_LATENTS]: { type: 'denoise_latents', id: DENOISE_LATENTS, @@ -317,11 +324,22 @@ export const buildCanvasOutpaintGraph = ( field: 'latents', }, }, + // Create Inpaint Mask { source: { node_id: MASK_BLUR, field: 'image', }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'mask', + }, + }, + { + source: { + node_id: INPAINT_CREATE_MASK, + field: 'inpaint_mask', + }, destination: { node_id: DENOISE_LATENTS, field: 'mask', @@ -522,6 +540,16 @@ export const buildCanvasOutpaintGraph = ( field: 'image', }, }, + { + source: { + node_id: INPAINT_INFILL, + field: 'image', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'image', + }, + }, // Take combined mask and resize and then blur { source: { @@ -640,6 +668,16 @@ export const buildCanvasOutpaintGraph = ( field: 'image', }, }, + { + source: { + node_id: INPAINT_INFILL, + field: 'image', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'image', + }, + }, // Color Correct The Inpainted Result { source: { diff --git a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLInpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLInpaintGraph.ts index f60c710c64..b768f90628 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLInpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLInpaintGraph.ts @@ -2,6 +2,7 @@ import { logger } from 'app/logging/logger'; import { RootState } from 'app/store/store'; import { NonNullableGraph } from 'features/nodes/types/types'; import { + CreateInpaintMaskInvocation, ImageBlurInvocation, ImageDTO, ImageToLatentsInvocation, @@ -16,10 +17,11 @@ import { addSDXLRefinerToGraph } from './addSDXLRefinerToGraph'; import { addVAEToGraph } from './addVAEToGraph'; import { addWatermarkerToGraph } from './addWatermarkerToGraph'; import { - CANVAS_OUTPUT, CANVAS_COHERENCE_DENOISE_LATENTS, CANVAS_COHERENCE_NOISE, CANVAS_COHERENCE_NOISE_INCREMENT, + CANVAS_OUTPUT, + INPAINT_CREATE_MASK, INPAINT_IMAGE, INPAINT_IMAGE_RESIZE_DOWN, INPAINT_IMAGE_RESIZE_UP, @@ -136,6 +138,12 @@ export const buildCanvasSDXLInpaintGraph = ( use_cpu, is_intermediate: true, }, + [INPAINT_CREATE_MASK]: { + type: 'create_inpaint_mask', + id: INPAINT_CREATE_MASK, + is_intermediate: true, + fp32: vaePrecision === 'fp32' ? true : false, + }, [SDXL_DENOISE_LATENTS]: { type: 'denoise_latents', id: SDXL_DENOISE_LATENTS, @@ -290,11 +298,22 @@ export const buildCanvasSDXLInpaintGraph = ( field: 'latents', }, }, + // Create Inpaint Mask { source: { node_id: MASK_BLUR, field: 'image', }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'mask', + }, + }, + { + source: { + node_id: INPAINT_CREATE_MASK, + field: 'inpaint_mask', + }, destination: { node_id: SDXL_DENOISE_LATENTS, field: 'mask', @@ -473,6 +492,16 @@ export const buildCanvasSDXLInpaintGraph = ( field: 'image', }, }, + { + source: { + node_id: INPAINT_IMAGE_RESIZE_UP, + field: 'image', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'image', + }, + }, // Color Correct The Inpainted Result { source: { @@ -530,6 +559,10 @@ export const buildCanvasSDXLInpaintGraph = ( ...(graph.nodes[MASK_BLUR] as ImageBlurInvocation), image: canvasMaskImage, }; + graph.nodes[INPAINT_CREATE_MASK] = { + ...(graph.nodes[INPAINT_CREATE_MASK] as CreateInpaintMaskInvocation), + image: canvasInitImage, + }; graph.edges.push( // Color Correct The Inpainted Result diff --git a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLOutpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLOutpaintGraph.ts index 7e98c37233..7911e827a7 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLOutpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/buildCanvasSDXLOutpaintGraph.ts @@ -18,10 +18,11 @@ import { addSDXLRefinerToGraph } from './addSDXLRefinerToGraph'; import { addVAEToGraph } from './addVAEToGraph'; import { addWatermarkerToGraph } from './addWatermarkerToGraph'; import { - CANVAS_OUTPUT, CANVAS_COHERENCE_DENOISE_LATENTS, CANVAS_COHERENCE_NOISE, CANVAS_COHERENCE_NOISE_INCREMENT, + CANVAS_OUTPUT, + INPAINT_CREATE_MASK, INPAINT_IMAGE, INPAINT_IMAGE_RESIZE_DOWN, INPAINT_IMAGE_RESIZE_UP, @@ -156,6 +157,12 @@ export const buildCanvasSDXLOutpaintGraph = ( use_cpu, is_intermediate: true, }, + [INPAINT_CREATE_MASK]: { + type: 'create_inpaint_mask', + id: INPAINT_CREATE_MASK, + is_intermediate: true, + fp32: vaePrecision === 'fp32' ? true : false, + }, [SDXL_DENOISE_LATENTS]: { type: 'denoise_latents', id: SDXL_DENOISE_LATENTS, @@ -331,11 +338,22 @@ export const buildCanvasSDXLOutpaintGraph = ( field: 'latents', }, }, + // Create Inpaint Mask { source: { node_id: MASK_BLUR, field: 'image', }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'mask', + }, + }, + { + source: { + node_id: INPAINT_CREATE_MASK, + field: 'inpaint_mask', + }, destination: { node_id: SDXL_DENOISE_LATENTS, field: 'mask', @@ -537,6 +555,16 @@ export const buildCanvasSDXLOutpaintGraph = ( field: 'image', }, }, + { + source: { + node_id: INPAINT_INFILL, + field: 'image', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'image', + }, + }, // Take combined mask and resize and then blur { source: { @@ -655,6 +683,16 @@ export const buildCanvasSDXLOutpaintGraph = ( field: 'image', }, }, + { + source: { + node_id: INPAINT_INFILL, + field: 'image', + }, + destination: { + node_id: INPAINT_CREATE_MASK, + field: 'image', + }, + }, // Color Correct The Inpainted Result { source: { diff --git a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/constants.ts b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/constants.ts index 6547d4a092..09f6a1c2d1 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graphBuilders/constants.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graphBuilders/constants.ts @@ -25,6 +25,7 @@ export const INPAINT_IMAGE_RESIZE_DOWN = 'inpaint_image_resize_down'; export const INPAINT_INFILL = 'inpaint_infill'; export const INPAINT_INFILL_RESIZE_DOWN = 'inpaint_infill_resize_down'; export const INPAINT_FINAL_IMAGE = 'inpaint_final_image'; +export const INPAINT_CREATE_MASK = 'inpaint_create_mask'; export const CANVAS_COHERENCE_DENOISE_LATENTS = 'canvas_coherence_denoise_latents'; export const CANVAS_COHERENCE_NOISE = 'canvas_coherence_noise'; diff --git a/invokeai/frontend/web/src/services/api/types.ts b/invokeai/frontend/web/src/services/api/types.ts index 4e30794a51..031130ed65 100644 --- a/invokeai/frontend/web/src/services/api/types.ts +++ b/invokeai/frontend/web/src/services/api/types.ts @@ -111,6 +111,7 @@ export type ImageBlurInvocation = s['ImageBlurInvocation']; export type ImageScaleInvocation = s['ImageScaleInvocation']; export type InfillPatchMatchInvocation = s['InfillPatchMatchInvocation']; export type InfillTileInvocation = s['InfillTileInvocation']; +export type CreateInpaintMaskInvocation = s['CreateInpaintMaskInvocation']; export type RandomIntInvocation = s['RandomIntInvocation']; export type CompelInvocation = s['CompelInvocation']; export type DynamicPromptInvocation = s['DynamicPromptInvocation'];