diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/addImageToImage.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/addImageToImage.ts index 86896ff4ac..c0a3ef3ac4 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/addImageToImage.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/addImageToImage.ts @@ -15,28 +15,26 @@ type AddImageToImageArg = { g: Graph; manager: CanvasManager; l2i: Invocation; - i2lNodeType: 'i2l' | 'flux_vae_encode' | 'sd3_i2l' | 'cogview4_i2l'; + i2l: Invocation<'i2l' | 'flux_vae_encode' | 'sd3_i2l' | 'cogview4_i2l'>; denoise: Invocation; vaeSource: Invocation; originalSize: Dimensions; scaledSize: Dimensions; bbox: CanvasState['bbox']; denoising_start: number; - fp32: boolean; }; export const addImageToImage = async ({ g, manager, l2i, - i2lNodeType, + i2l, denoise, vaeSource, originalSize, scaledSize, bbox, denoising_start, - fp32, }: AddImageToImageArg): Promise> => { denoise.denoising_start = denoising_start; const adapters = manager.compositor.getVisibleAdaptersOfType('raster_layer'); @@ -54,12 +52,7 @@ export const addImageToImage = async ({ ...scaledSize, }); - const i2l = g.addNode({ - id: i2lNodeType, - type: i2lNodeType, - image: image_name ? { image_name } : undefined, - ...(i2lNodeType === 'i2l' ? { fp32 } : {}), - }); + i2l.image = { image_name }; const resizeImageToOriginalSize = g.addNode({ type: 'img_resize', @@ -76,12 +69,7 @@ export const addImageToImage = async ({ return resizeImageToOriginalSize; } else { // No need to resize, just decode - const i2l = g.addNode({ - id: i2lNodeType, - type: i2lNodeType, - image: image_name ? { image_name } : undefined, - ...(i2lNodeType === 'i2l' ? { fp32 } : {}), - }); + i2l.image = { image_name }; g.addEdge(vaeSource, 'vae', i2l, 'vae'); g.addEdge(i2l, 'latents', denoise, 'latents'); return l2i; diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/addInpaint.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/addInpaint.ts index f0273c0a66..48adbc150e 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/addInpaint.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/addInpaint.ts @@ -21,15 +21,14 @@ type AddInpaintArg = { g: Graph; manager: CanvasManager; l2i: Invocation; - i2lNodeType: 'i2l' | 'flux_vae_encode' | 'sd3_i2l' | 'cogview4_i2l'; + i2l: Invocation<'i2l' | 'flux_vae_encode' | 'sd3_i2l' | 'cogview4_i2l'>; denoise: Invocation; vaeSource: Invocation; modelLoader: Invocation; originalSize: Dimensions; scaledSize: Dimensions; denoising_start: number; - fp32: boolean; - seed: number; + seed: Invocation<'integer'>; }; export const addInpaint = async ({ @@ -37,14 +36,13 @@ export const addInpaint = async ({ g, manager, l2i, - i2lNodeType, + i2l, denoise, vaeSource, modelLoader, originalSize, scaledSize, denoising_start, - fp32, seed, }: AddInpaintArg): Promise> => { denoise.denoising_start = denoising_start; @@ -97,12 +95,7 @@ export const addInpaint = async ({ if (needsScaleBeforeProcessing) { // Scale before processing requires some resizing - const i2l = g.addNode({ - id: i2lNodeType, - type: i2lNodeType, - image: initialImage.image_name ? { image_name: initialImage.image_name } : undefined, - ...(i2lNodeType === 'i2l' ? { fp32 } : {}), - }); + i2l.image = { image_name: initialImage.image_name }; const resizeImageToScaledSize = g.addNode({ type: 'img_resize', @@ -128,9 +121,9 @@ export const addInpaint = async ({ noise_type: 'gaussian', amount: 1.0, // the mask controls the actual intensity noise_color: true, - seed: seed, }); + g.addEdge(seed, 'value', noiseNode, 'seed'); g.addEdge(resizeImageToScaledSize, 'image', noiseNode, 'image'); g.addEdge(resizeNoiseMaskToScaledSize, 'image', noiseNode, 'mask'); g.addEdge(noiseNode, 'image', i2l, 'image'); @@ -160,7 +153,7 @@ export const addInpaint = async ({ coherence_mode: params.canvasCoherenceMode, minimum_denoise: params.canvasCoherenceMinDenoise, edge_radius: params.canvasCoherenceEdgeSize, - fp32, + fp32: i2l.type === 'i2l' ? i2l.fp32 : false, }); const expandMask = g.addNode({ type: 'expand_mask_with_fade', @@ -208,12 +201,7 @@ export const addInpaint = async ({ } } else { // No scale before processing, much simpler - const i2l = g.addNode({ - id: i2lNodeType, - type: i2lNodeType, - image: initialImage.image_name ? { image_name: initialImage.image_name } : undefined, - ...(i2lNodeType === 'i2l' ? { fp32 } : {}), - }); + i2l.image = { image_name: initialImage.image_name }; // If we have a noise mask, apply it to the input image before i2l conversion if (noiseMaskImage) { @@ -221,14 +209,18 @@ export const addInpaint = async ({ const noiseNode = g.addNode({ type: 'img_noise', id: getPrefixedId('add_inpaint_noise'), - image: initialImage.image_name ? { image_name: initialImage.image_name } : undefined, + image: { + image_name: initialImage.image_name, + }, noise_type: 'gaussian', amount: 1.0, // the mask controls the actual intensity noise_color: true, - seed: seed, - mask: { image_name: noiseMaskImage.image_name }, + mask: { + image_name: noiseMaskImage.image_name, + }, }); + g.addEdge(seed, 'value', noiseNode, 'seed'); g.addEdge(noiseNode, 'image', i2l, 'image'); } @@ -238,7 +230,7 @@ export const addInpaint = async ({ coherence_mode: params.canvasCoherenceMode, minimum_denoise: params.canvasCoherenceMinDenoise, edge_radius: params.canvasCoherenceEdgeSize, - fp32, + fp32: i2l.type === 'i2l' ? i2l.fp32 : false, image: { image_name: initialImage.image_name }, mask: { image_name: maskImage.image_name }, }); diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/addOutpaint.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/addOutpaint.ts index e11fc61b67..71f634848f 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/addOutpaint.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/addOutpaint.ts @@ -22,15 +22,14 @@ type AddOutpaintArg = { g: Graph; manager: CanvasManager; l2i: Invocation; - i2lNodeType: ImageToLatentsNodes; + i2l: Invocation; denoise: Invocation; vaeSource: Invocation; modelLoader: Invocation; originalSize: Dimensions; scaledSize: Dimensions; denoising_start: number; - fp32: boolean; - seed: number; + seed: Invocation<'integer'>; }; export const addOutpaint = async ({ @@ -38,14 +37,13 @@ export const addOutpaint = async ({ g, manager, l2i, - i2lNodeType, + i2l, denoise, vaeSource, modelLoader, originalSize, scaledSize, denoising_start, - fp32, seed, }: AddOutpaintArg): Promise> => { denoise.denoising_start = denoising_start; @@ -138,7 +136,7 @@ export const addOutpaint = async ({ coherence_mode: params.canvasCoherenceMode, minimum_denoise: params.canvasCoherenceMinDenoise, edge_radius: params.canvasCoherenceEdgeSize, - fp32, + fp32: i2l.type === 'i2l' ? i2l.fp32 : false, }); g.addEdge(infill, 'image', createGradientMask, 'image'); g.addEdge(resizeInputMaskToScaledSize, 'image', createGradientMask, 'mask'); @@ -149,13 +147,6 @@ export const addOutpaint = async ({ g.addEdge(createGradientMask, 'denoise_mask', denoise, 'denoise_mask'); - // Decode infilled image and connect to denoise - const i2l = g.addNode({ - id: i2lNodeType, - type: i2lNodeType, - ...(i2lNodeType === 'i2l' ? { fp32 } : {}), - }); - // If we have a noise mask, apply it to the input image before i2l conversion if (noiseMaskImage) { // Resize the noise mask to match the scaled size @@ -173,9 +164,9 @@ export const addOutpaint = async ({ noise_type: 'gaussian', amount: 1.0, // the mask controls the actual intensity noise_color: true, - seed: seed, }); + g.addEdge(seed, 'value', noiseNode, 'seed'); g.addEdge(resizeNoiseMaskToScaledSize, 'image', noiseNode, 'mask'); g.addEdge(infill, 'image', noiseNode, 'image'); g.addEdge(noiseNode, 'image', i2l, 'image'); @@ -232,11 +223,6 @@ export const addOutpaint = async ({ } else { infill.image = { image_name: initialImage.image_name }; // No scale before processing, much simpler - const i2l = g.addNode({ - id: i2lNodeType, - type: i2lNodeType, - ...(i2lNodeType === 'i2l' ? { fp32 } : {}), - }); const initialImageAlphaToMask = g.addNode({ id: getPrefixedId('image_alpha_to_mask'), type: 'tomask', @@ -253,7 +239,7 @@ export const addOutpaint = async ({ coherence_mode: params.canvasCoherenceMode, minimum_denoise: params.canvasCoherenceMinDenoise, edge_radius: params.canvasCoherenceEdgeSize, - fp32, + fp32: i2l.type === 'i2l' ? i2l.fp32 : false, image: { image_name: initialImage.image_name }, }); g.addEdge(initialImageAlphaToMask, 'image', maskCombine, 'mask2'); @@ -269,10 +255,10 @@ export const addOutpaint = async ({ noise_type: 'gaussian', amount: 1.0, // the mask controls the actual intensity noise_color: true, - seed: seed, mask: { image_name: noiseMaskImage.image_name }, }); + g.addEdge(seed, 'value', noiseNode, 'seed'); g.addEdge(infill, 'image', noiseNode, 'image'); g.addEdge(noiseNode, 'image', i2l, 'image'); } else { diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildCogView4Graph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildCogView4Graph.ts index de223b1873..9650470694 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildCogView4Graph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildCogView4Graph.ts @@ -32,7 +32,7 @@ export const buildCogView4Graph = async (arg: GraphBuilderArg): Promise