Skip to content

Commit bc67d5c

Browse files
dunkeronipsychedelicious
authored andcommitted
add invert logic to grayscale mask composite
1 parent f3d5691 commit bc67d5c

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

invokeai/frontend/web/src/features/controlLayers/konva/CanvasCompositorModule.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,12 +442,13 @@ export class CanvasCompositorModule extends CanvasModuleBase {
442442
adapters: CanvasEntityAdapterInpaintMask[],
443443
rect: Rect,
444444
attribute: 'noiseLevel' | 'denoiseLimit' = 'noiseLevel',
445+
invertMask: boolean = false,
445446
uploadOptions: SetOptional<Omit<UploadImageArg, 'file'>, 'image_category'> = { is_intermediate: true },
446447
forceUpload?: boolean
447448
): Promise<ImageDTO> => {
448449
assert(rect.width > 0 && rect.height > 0, 'Unable to rasterize empty rect');
449450
// Use a unique hash that includes the attribute name for caching
450-
const hash = this.getCompositeHash(adapters, { rect, attribute, grayscale: true });
451+
const hash = this.getCompositeHash(adapters, { rect, attribute, invertMask, grayscale: true });
451452
const cachedImageName = forceUpload ? undefined : this.manager.cache.imageNameCache.get(hash);
452453

453454
let imageDTO: ImageDTO | null = null;
@@ -507,7 +508,7 @@ export class CanvasCompositorModule extends CanvasModuleBase {
507508
// input has transparency
508509
// Calculate grayscale value: white (255) for no mask, darker for stronger mask
509510
let grayValue = 255; // Default to white for unmasked areas
510-
if ((data[i + 3] ?? 0) > 127) {
511+
if (invertMask ? (data[i + 3] ?? 0) < 128 : (data[i + 3] ?? 0) > 127) {
511512
grayValue = Math.max(0, Math.min(255, 255 - Math.round(255 * attributeValue)));
512513
}
513514

invokeai/frontend/web/src/features/nodes/util/graph/generation/addInpaint.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,24 @@ export const addInpaint = async ({
6969
// Create a composite noise mask if we have any adapters with noise settings
7070
let noiseMaskImage: ImageDTO | null = null;
7171
if (noiseMaskAdapters.length > 0) {
72-
noiseMaskImage = await manager.compositor.getGrayscaleMaskCompositeImageDTO(noiseMaskAdapters, rect, 'noiseLevel', {
73-
is_intermediate: true,
74-
silent: true,
75-
});
72+
noiseMaskImage = await manager.compositor.getGrayscaleMaskCompositeImageDTO(
73+
noiseMaskAdapters,
74+
rect,
75+
'noiseLevel',
76+
canvasSettings.preserveMask,
77+
{
78+
is_intermediate: true,
79+
silent: true,
80+
}
81+
);
7682
}
7783

7884
// Create a composite denoise limit mask
7985
const maskImage = await manager.compositor.getGrayscaleMaskCompositeImageDTO(
8086
inpaintMaskAdapters, // denoise limit defaults to 1 for masks that don't have it
8187
rect,
8288
'denoiseLimit',
89+
canvasSettings.preserveMask,
8390
{
8491
is_intermediate: true,
8592
silent: true,

invokeai/frontend/web/src/features/nodes/util/graph/generation/addOutpaint.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,24 @@ export const addOutpaint = async ({
7272
// Create a composite noise mask if we have any adapters with noise settings
7373
let noiseMaskImage: ImageDTO | null = null;
7474
if (noiseMaskAdapters.length > 0) {
75-
noiseMaskImage = await manager.compositor.getGrayscaleMaskCompositeImageDTO(noiseMaskAdapters, rect, 'noiseLevel', {
76-
is_intermediate: true,
77-
silent: true,
78-
});
75+
noiseMaskImage = await manager.compositor.getGrayscaleMaskCompositeImageDTO(
76+
noiseMaskAdapters,
77+
rect,
78+
'noiseLevel',
79+
canvasSettings.preserveMask,
80+
{
81+
is_intermediate: true,
82+
silent: true,
83+
}
84+
);
7985
}
8086

8187
// Create a composite denoise limit mask
8288
const maskImage = await manager.compositor.getGrayscaleMaskCompositeImageDTO(
8389
inpaintMaskAdapters, // denoise limit defaults to 1 for masks that don't have it
8490
rect,
8591
'denoiseLimit',
92+
canvasSettings.preserveMask,
8693
{
8794
is_intermediate: true,
8895
silent: true,

0 commit comments

Comments
 (0)