fix(ui): ensure noise is correctly sized

This commit is contained in:
psychedelicious
2025-07-07 18:09:27 +10:00
parent 7845623fa5
commit 2e8db3cce3
6 changed files with 48 additions and 5 deletions

View File

@@ -14,6 +14,7 @@ import type {
VaeSourceNodes,
} from 'features/nodes/util/graph/types';
import type { Invocation } from 'services/api/types';
import { assert } from 'tsafe';
type AddImageToImageArg = {
g: Graph;
@@ -21,6 +22,7 @@ type AddImageToImageArg = {
manager: CanvasManager;
l2i: Invocation<LatentToImageNodes>;
i2l: Invocation<'i2l' | 'flux_vae_encode' | 'sd3_i2l' | 'cogview4_i2l'>;
noise?: Invocation<'noise'>;
denoise: Invocation<DenoiseLatentsNodes>;
vaeSource: Invocation<VaeSourceNodes | MainModelLoaderNodes>;
};
@@ -31,6 +33,7 @@ export const addImageToImage = async ({
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
}: AddImageToImageArg): Promise<Invocation<'img_resize' | 'l2i' | 'flux_vae_decode' | 'sd3_l2i' | 'cogview4_l2i'>> => {
@@ -40,6 +43,16 @@ export const addImageToImage = async ({
const { originalSize, scaledSize, rect } = getOriginalAndScaledSizesForOtherModes(state);
if (denoise.type === 'cogview4_denoise' || denoise.type === 'flux_denoise' || denoise.type === 'sd3_denoise') {
denoise.width = scaledSize.width;
denoise.height = scaledSize.height;
} else {
assert(denoise.type === 'denoise_latents');
assert(noise, 'SD1.5/SD2/SDXL graphs require a noise node to be passed in');
noise.width = scaledSize.width;
noise.height = scaledSize.height;
}
const adapters = manager.compositor.getVisibleAdaptersOfType('raster_layer');
const { image_name } = await manager.compositor.getCompositeImageDTO(adapters, rect, {
is_intermediate: true,
@@ -55,8 +68,6 @@ export const addImageToImage = async ({
...scaledSize,
});
i2l.image = { image_name };
const resizeImageToOriginalSize = g.addNode({
type: 'img_resize',
id: getPrefixedId('initial_image_resize_out'),

View File

@@ -17,6 +17,7 @@ import type {
VaeSourceNodes,
} from 'features/nodes/util/graph/types';
import type { ImageDTO, Invocation } from 'services/api/types';
import { assert } from 'tsafe';
type AddInpaintArg = {
g: Graph;
@@ -24,6 +25,7 @@ type AddInpaintArg = {
manager: CanvasManager;
l2i: Invocation<LatentToImageNodes>;
i2l: Invocation<'i2l' | 'flux_vae_encode' | 'sd3_i2l' | 'cogview4_i2l'>;
noise?: Invocation<'noise'>;
denoise: Invocation<DenoiseLatentsNodes>;
vaeSource: Invocation<VaeSourceNodes | MainModelLoaderNodes>;
modelLoader: Invocation<MainModelLoaderNodes>;
@@ -36,6 +38,7 @@ export const addInpaint = async ({
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
modelLoader,
@@ -50,6 +53,16 @@ export const addInpaint = async ({
const { originalSize, scaledSize, rect } = getOriginalAndScaledSizesForOtherModes(state);
if (denoise.type === 'cogview4_denoise' || denoise.type === 'flux_denoise' || denoise.type === 'sd3_denoise') {
denoise.width = scaledSize.width;
denoise.height = scaledSize.height;
} else {
assert(denoise.type === 'denoise_latents');
assert(noise, 'SD1.5/SD2/SDXL graphs require a noise node to be passed in');
noise.width = scaledSize.width;
noise.height = scaledSize.height;
}
const rasterAdapters = manager.compositor.getVisibleAdaptersOfType('raster_layer');
const initialImage = await manager.compositor.getCompositeImageDTO(rasterAdapters, rect, {
is_intermediate: true,
@@ -92,8 +105,6 @@ export const addInpaint = async ({
if (needsScaleBeforeProcessing) {
// Scale before processing requires some resizing
i2l.image = { image_name: initialImage.image_name };
const resizeImageToScaledSize = g.addNode({
type: 'img_resize',
id: getPrefixedId('resize_image_to_scaled_size'),
@@ -198,7 +209,6 @@ export const addInpaint = async ({
}
} else {
// No scale before processing, much simpler
i2l.image = { image_name: initialImage.image_name };
// If we have a noise mask, apply it to the input image before i2l conversion
if (noiseMaskImage) {
@@ -219,6 +229,8 @@ export const addInpaint = async ({
g.addEdge(seed, 'value', noiseNode, 'seed');
g.addEdge(noiseNode, 'image', i2l, 'image');
} else {
i2l.image = { image_name: initialImage.image_name };
}
const createGradientMask = g.addNode({

View File

@@ -19,6 +19,7 @@ import type {
VaeSourceNodes,
} from 'features/nodes/util/graph/types';
import type { ImageDTO, Invocation } from 'services/api/types';
import { assert } from 'tsafe';
type AddOutpaintArg = {
g: Graph;
@@ -26,6 +27,7 @@ type AddOutpaintArg = {
manager: CanvasManager;
l2i: Invocation<LatentToImageNodes>;
i2l: Invocation<ImageToLatentsNodes>;
noise?: Invocation<'noise'>;
denoise: Invocation<DenoiseLatentsNodes>;
vaeSource: Invocation<VaeSourceNodes | MainModelLoaderNodes>;
modelLoader: Invocation<MainModelLoaderNodes>;
@@ -38,6 +40,7 @@ export const addOutpaint = async ({
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
modelLoader,
@@ -52,6 +55,16 @@ export const addOutpaint = async ({
const { originalSize, scaledSize, rect } = getOriginalAndScaledSizesForOtherModes(state);
if (denoise.type === 'cogview4_denoise' || denoise.type === 'flux_denoise' || denoise.type === 'sd3_denoise') {
denoise.width = scaledSize.width;
denoise.height = scaledSize.height;
} else {
assert(denoise.type === 'denoise_latents');
assert(noise, 'SD1.5/SD2/SDXL graphs require a noise node to be passed in');
noise.width = scaledSize.width;
noise.height = scaledSize.height;
}
const rasterAdapters = manager.compositor.getVisibleAdaptersOfType('raster_layer');
const initialImage = await manager.compositor.getCompositeImageDTO(rasterAdapters, rect, {
is_intermediate: true,

View File

@@ -130,6 +130,7 @@ export const buildFLUXGraph = async (arg: GraphBuilderArg): Promise<GraphBuilder
g.addEdge(modelLoader, 't5_encoder', posCond, 't5_encoder');
g.addEdge(modelLoader, 'max_seq_len', posCond, 't5_max_seq_len');
g.addEdge(positivePrompt, 'value', posCond, 'prompt');
g.addEdge(posCond, 'conditioning', posCondCollect, 'item');
g.addEdge(posCondCollect, 'collection', denoise, 'positive_text_conditioning');

View File

@@ -182,6 +182,7 @@ export const buildSD1Graph = async (arg: GraphBuilderArg): Promise<GraphBuilderR
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
});
@@ -199,6 +200,7 @@ export const buildSD1Graph = async (arg: GraphBuilderArg): Promise<GraphBuilderR
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
modelLoader,
@@ -218,6 +220,7 @@ export const buildSD1Graph = async (arg: GraphBuilderArg): Promise<GraphBuilderR
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
modelLoader,

View File

@@ -192,6 +192,7 @@ export const buildSDXLGraph = async (arg: GraphBuilderArg): Promise<GraphBuilder
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
});
@@ -209,6 +210,7 @@ export const buildSDXLGraph = async (arg: GraphBuilderArg): Promise<GraphBuilder
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
modelLoader,
@@ -228,6 +230,7 @@ export const buildSDXLGraph = async (arg: GraphBuilderArg): Promise<GraphBuilder
manager,
l2i,
i2l,
noise,
denoise,
vaeSource,
modelLoader,