diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index 5872d22dfe..7f31da089e 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -887,6 +887,10 @@ "imageFit": "Fit Initial Image To Output Size", "images": "Images", "infillMethod": "Infill Method", + "infillMosaicTileWidth": "Tile Width", + "infillMosaicTileHeight": "Tile Height", + "infillMosaicMinColor": "Min Color", + "infillMosaicMaxColor": "Max Color", "info": "Info", "invoke": { "addingImagesTo": "Adding images to", diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts index 520005ee5b..faad4189a9 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasOutpaintGraph.ts @@ -65,6 +65,10 @@ export const buildCanvasOutpaintGraph = async ( infillTileSize, infillPatchmatchDownscaleSize, infillMethod, + infillMosaicTileWidth, + infillMosaicTileHeight, + infillMosaicMinColor, + infillMosaicMaxColor, clipSkip, seamlessXAxis, seamlessYAxis, @@ -361,6 +365,10 @@ export const buildCanvasOutpaintGraph = async ( type: 'infill_mosaic', id: INPAINT_INFILL, is_intermediate, + tile_width: infillMosaicTileWidth, + tile_height: infillMosaicTileHeight, + min_color: infillMosaicMinColor, + max_color: infillMosaicMaxColor, }; } diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts index 751eb52b9a..efe9d51990 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/buildCanvasSDXLOutpaintGraph.ts @@ -66,6 +66,10 @@ export const buildCanvasSDXLOutpaintGraph = async ( infillTileSize, infillPatchmatchDownscaleSize, infillMethod, + infillMosaicTileWidth, + infillMosaicTileHeight, + infillMosaicMinColor, + infillMosaicMaxColor, seamlessXAxis, seamlessYAxis, canvasCoherenceMode, @@ -370,6 +374,10 @@ export const buildCanvasSDXLOutpaintGraph = async ( type: 'infill_mosaic', id: INPAINT_INFILL, is_intermediate, + tile_width: infillMosaicTileWidth, + tile_height: infillMosaicTileHeight, + min_color: infillMosaicMinColor, + max_color: infillMosaicMaxColor, }; } diff --git a/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamInfillOptions.tsx b/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamInfillOptions.tsx index 16cbffe56a..607a2ed809 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamInfillOptions.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamInfillOptions.tsx @@ -3,6 +3,7 @@ import { memo } from 'react'; import ParamInfillPatchmatchDownscaleSize from './ParamInfillPatchmatchDownscaleSize'; import ParamInfillTilesize from './ParamInfillTilesize'; +import ParamMosaicInfillOptions from './ParamMosaicInfillOptions'; const ParamInfillOptions = () => { const infillMethod = useAppSelector((s) => s.generation.infillMethod); @@ -14,6 +15,10 @@ const ParamInfillOptions = () => { return ; } + if (infillMethod === 'mosaic') { + return ; + } + return null; }; diff --git a/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamMosaicInfillOptions.tsx b/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamMosaicInfillOptions.tsx new file mode 100644 index 0000000000..47c11d5669 --- /dev/null +++ b/invokeai/frontend/web/src/features/parameters/components/Canvas/InfillAndScaling/ParamMosaicInfillOptions.tsx @@ -0,0 +1,127 @@ +import { Box, CompositeNumberInput, CompositeSlider, Flex, FormControl, FormLabel } from '@invoke-ai/ui-library'; +import { createSelector } from '@reduxjs/toolkit'; +import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +import IAIColorPicker from 'common/components/IAIColorPicker'; +import { + selectGenerationSlice, + setInfillMosaicMaxColor, + setInfillMosaicMinColor, + setInfillMosaicTileHeight, + setInfillMosaicTileWidth, +} from 'features/parameters/store/generationSlice'; +import { memo, useCallback, useMemo } from 'react'; +import type { RgbaColor } from 'react-colorful'; +import { useTranslation } from 'react-i18next'; + +const ParamMosaicInfillTileSize = () => { + const dispatch = useAppDispatch(); + + const selector = useMemo( + () => + createSelector(selectGenerationSlice, (generation) => ({ + infillMosaicTileWidth: generation.infillMosaicTileWidth, + infillMosaicTileHeight: generation.infillMosaicTileHeight, + infillMosaicMinColor: generation.infillMosaicMinColor, + infillMosaicMaxColor: generation.infillMosaicMaxColor, + })), + [] + ); + + const { infillMosaicTileWidth, infillMosaicTileHeight, infillMosaicMinColor, infillMosaicMaxColor } = + useAppSelector(selector); + + const infillMethod = useAppSelector((s) => s.generation.infillMethod); + + const { t } = useTranslation(); + + const handleInfillMosaicTileWidthChange = useCallback( + (v: number) => { + dispatch(setInfillMosaicTileWidth(v)); + }, + [dispatch] + ); + + const handleInfillMosaicTileHeightChange = useCallback( + (v: number) => { + dispatch(setInfillMosaicTileHeight(v)); + }, + [dispatch] + ); + + const handleInfillMosaicMinColor = useCallback( + (v: RgbaColor) => { + dispatch(setInfillMosaicMinColor(v)); + }, + [dispatch] + ); + + const handleInfillMosaicMaxColor = useCallback( + (v: RgbaColor) => { + dispatch(setInfillMosaicMaxColor(v)); + }, + [dispatch] + ); + + return ( + + + {t('parameters.infillMosaicTileWidth')} + + + + + {t('parameters.infillMosaicTileHeight')} + + + + + {t('parameters.infillMosaicMinColor')} + + + + + + {t('parameters.infillMosaicMaxColor')} + + + + + + ); +}; + +export default memo(ParamMosaicInfillTileSize); diff --git a/invokeai/frontend/web/src/features/parameters/store/generationSlice.ts b/invokeai/frontend/web/src/features/parameters/store/generationSlice.ts index e272cd278e..7572ffeb90 100644 --- a/invokeai/frontend/web/src/features/parameters/store/generationSlice.ts +++ b/invokeai/frontend/web/src/features/parameters/store/generationSlice.ts @@ -19,6 +19,7 @@ import type { import { getIsSizeOptimal, getOptimalDimension } from 'features/parameters/util/optimalDimension'; import { configChanged } from 'features/system/store/configSlice'; import { clamp } from 'lodash-es'; +import type { RgbaColor } from 'react-colorful'; import type { ImageDTO } from 'services/api/types'; import type { GenerationState } from './types'; @@ -55,6 +56,10 @@ const initialGenerationState: GenerationState = { shouldUseCpuNoise: true, shouldShowAdvancedOptions: false, aspectRatio: { ...initialAspectRatioState }, + infillMosaicTileWidth: 64, + infillMosaicTileHeight: 64, + infillMosaicMinColor: { r: 0, g: 0, b: 0, a: 1 }, + infillMosaicMaxColor: { r: 255, g: 255, b: 255, a: 1 }, }; export const generationSlice = createSlice({ @@ -206,6 +211,18 @@ export const generationSlice = createSlice({ aspectRatioChanged: (state, action: PayloadAction) => { state.aspectRatio = action.payload; }, + setInfillMosaicTileWidth: (state, action: PayloadAction) => { + state.infillMosaicTileWidth = action.payload; + }, + setInfillMosaicTileHeight: (state, action: PayloadAction) => { + state.infillMosaicTileHeight = action.payload; + }, + setInfillMosaicMinColor: (state, action: PayloadAction) => { + state.infillMosaicMinColor = action.payload; + }, + setInfillMosaicMaxColor: (state, action: PayloadAction) => { + state.infillMosaicMaxColor = action.payload; + }, }, extraReducers: (builder) => { builder.addCase(configChanged, (state, action) => { @@ -264,6 +281,10 @@ export const { heightChanged, widthRecalled, heightRecalled, + setInfillMosaicTileWidth, + setInfillMosaicTileHeight, + setInfillMosaicMinColor, + setInfillMosaicMaxColor, } = generationSlice.actions; export const { selectOptimalDimension } = generationSlice.selectors; diff --git a/invokeai/frontend/web/src/features/parameters/store/types.ts b/invokeai/frontend/web/src/features/parameters/store/types.ts index 73185754ee..1e69bf52d5 100644 --- a/invokeai/frontend/web/src/features/parameters/store/types.ts +++ b/invokeai/frontend/web/src/features/parameters/store/types.ts @@ -17,6 +17,7 @@ import type { ParameterVAEModel, ParameterWidth, } from 'features/parameters/types/parameterSchemas'; +import type { RgbaColor } from 'react-colorful'; export interface GenerationState { _version: 2; @@ -51,6 +52,10 @@ export interface GenerationState { shouldUseCpuNoise: boolean; shouldShowAdvancedOptions: boolean; aspectRatio: AspectRatioState; + infillMosaicTileWidth: number; + infillMosaicTileHeight: number; + infillMosaicMinColor: RgbaColor; + infillMosaicMaxColor: RgbaColor; } export type PayloadActionWithOptimalDimension = PayloadAction; diff --git a/invokeai/frontend/web/src/services/api/schema.ts b/invokeai/frontend/web/src/services/api/schema.ts index 41e60fa029..c42078d414 100644 --- a/invokeai/frontend/web/src/services/api/schema.ts +++ b/invokeai/frontend/web/src/services/api/schema.ts @@ -1419,7 +1419,7 @@ export type components = { * @default true */ use_cache?: boolean; - /** @description The image to infill */ + /** @description The image to process */ image?: components["schemas"]["ImageField"]; /** * type @@ -4112,7 +4112,7 @@ export type components = { * @description The nodes in this graph */ nodes: { - [key: string]: components["schemas"]["AddInvocation"] | components["schemas"]["MaskCombineInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["CreateGradientMaskInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["VAELoaderInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["SchedulerInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["FaceOffInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["IdealSizeInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["UnsharpMaskInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["CalculateImageTilesMinimumOverlapInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["CalculateImageTilesEvenSplitInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["DWOpenposeImageProcessorInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["CanvasPasteBackInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["ImageInverseLerpInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["DepthAnythingImageProcessorInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["SaveImageInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["LoRALoaderInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["MaskFromIDInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["CLIPSkipInvocation"] | components["schemas"]["SDXLLoRALoaderInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["StringJoinInvocation"]; + [key: string]: components["schemas"]["FaceOffInvocation"] | components["schemas"]["ImageHueAdjustmentInvocation"] | components["schemas"]["AddInvocation"] | components["schemas"]["DWOpenposeImageProcessorInvocation"] | components["schemas"]["ImageInvocation"] | components["schemas"]["FloatLinearRangeInvocation"] | components["schemas"]["TileToPropertiesInvocation"] | components["schemas"]["SegmentAnythingProcessorInvocation"] | components["schemas"]["ImageLerpInvocation"] | components["schemas"]["SDXLRefinerCompelPromptInvocation"] | components["schemas"]["RandomFloatInvocation"] | components["schemas"]["SDXLModelLoaderInvocation"] | components["schemas"]["LoRALoaderInvocation"] | components["schemas"]["StringCollectionInvocation"] | components["schemas"]["MaskFromAlphaInvocation"] | components["schemas"]["MergeTilesToImageInvocation"] | components["schemas"]["TileResamplerProcessorInvocation"] | components["schemas"]["IPAdapterInvocation"] | components["schemas"]["CV2InfillInvocation"] | components["schemas"]["ZoeDepthImageProcessorInvocation"] | components["schemas"]["IntegerMathInvocation"] | components["schemas"]["ImageBlurInvocation"] | components["schemas"]["StepParamEasingInvocation"] | components["schemas"]["MlsdImageProcessorInvocation"] | components["schemas"]["MidasDepthImageProcessorInvocation"] | components["schemas"]["RandomIntInvocation"] | components["schemas"]["MetadataInvocation"] | components["schemas"]["FloatInvocation"] | components["schemas"]["CannyImageProcessorInvocation"] | components["schemas"]["ResizeLatentsInvocation"] | components["schemas"]["MergeMetadataInvocation"] | components["schemas"]["SDXLRefinerModelLoaderInvocation"] | components["schemas"]["FaceIdentifierInvocation"] | components["schemas"]["VAELoaderInvocation"] | components["schemas"]["LeresImageProcessorInvocation"] | components["schemas"]["DivideInvocation"] | components["schemas"]["FloatToIntegerInvocation"] | components["schemas"]["ImageScaleInvocation"] | components["schemas"]["ColorInvocation"] | components["schemas"]["LatentsToImageInvocation"] | components["schemas"]["IntegerInvocation"] | components["schemas"]["StringReplaceInvocation"] | components["schemas"]["ImageToLatentsInvocation"] | components["schemas"]["BlendLatentsInvocation"] | components["schemas"]["ImageNSFWBlurInvocation"] | components["schemas"]["ConditioningInvocation"] | components["schemas"]["ImageCollectionInvocation"] | components["schemas"]["ImageChannelOffsetInvocation"] | components["schemas"]["PairTileImageInvocation"] | components["schemas"]["ImageCropInvocation"] | components["schemas"]["ESRGANInvocation"] | components["schemas"]["IdealSizeInvocation"] | components["schemas"]["CenterPadCropInvocation"] | components["schemas"]["ImagePasteInvocation"] | components["schemas"]["CalculateImageTilesInvocation"] | components["schemas"]["ImageChannelMultiplyInvocation"] | components["schemas"]["FloatMathInvocation"] | components["schemas"]["NoiseInvocation"] | components["schemas"]["ControlNetInvocation"] | components["schemas"]["MainModelLoaderInvocation"] | components["schemas"]["MaskCombineInvocation"] | components["schemas"]["ImageResizeInvocation"] | components["schemas"]["LineartImageProcessorInvocation"] | components["schemas"]["UnsharpMaskInvocation"] | components["schemas"]["MetadataItemInvocation"] | components["schemas"]["MaskFromIDInvocation"] | components["schemas"]["CoreMetadataInvocation"] | components["schemas"]["PromptsFromFileInvocation"] | components["schemas"]["LatentsInvocation"] | components["schemas"]["LatentsCollectionInvocation"] | components["schemas"]["ImageWatermarkInvocation"] | components["schemas"]["BooleanInvocation"] | components["schemas"]["SaveImageInvocation"] | components["schemas"]["PidiImageProcessorInvocation"] | components["schemas"]["DenoiseLatentsInvocation"] | components["schemas"]["InfillTileInvocation"] | components["schemas"]["CvInpaintInvocation"] | components["schemas"]["HedImageProcessorInvocation"] | components["schemas"]["ConditioningCollectionInvocation"] | components["schemas"]["StringSplitNegInvocation"] | components["schemas"]["ColorMapImageProcessorInvocation"] | components["schemas"]["MultiplyInvocation"] | components["schemas"]["CanvasPasteBackInvocation"] | components["schemas"]["T2IAdapterInvocation"] | components["schemas"]["CreateDenoiseMaskInvocation"] | components["schemas"]["StringInvocation"] | components["schemas"]["SeamlessModeInvocation"] | components["schemas"]["CompelInvocation"] | components["schemas"]["DepthAnythingImageProcessorInvocation"] | components["schemas"]["SchedulerInvocation"] | components["schemas"]["SDXLLoRALoaderInvocation"] | components["schemas"]["CollectInvocation"] | components["schemas"]["FreeUInvocation"] | components["schemas"]["StringSplitInvocation"] | components["schemas"]["ScaleLatentsInvocation"] | components["schemas"]["ImageConvertInvocation"] | components["schemas"]["MediapipeFaceProcessorInvocation"] | components["schemas"]["BlankImageInvocation"] | components["schemas"]["ShowImageInvocation"] | components["schemas"]["RoundInvocation"] | components["schemas"]["IntegerCollectionInvocation"] | components["schemas"]["NormalbaeImageProcessorInvocation"] | components["schemas"]["LineartAnimeImageProcessorInvocation"] | components["schemas"]["SubtractInvocation"] | components["schemas"]["StringJoinInvocation"] | components["schemas"]["DynamicPromptInvocation"] | components["schemas"]["MosaicInfillInvocation"] | components["schemas"]["IterateInvocation"] | components["schemas"]["LaMaInfillInvocation"] | components["schemas"]["MaskEdgeInvocation"] | components["schemas"]["RangeOfSizeInvocation"] | components["schemas"]["CreateGradientMaskInvocation"] | components["schemas"]["ImageChannelInvocation"] | components["schemas"]["RangeInvocation"] | components["schemas"]["ColorCorrectInvocation"] | components["schemas"]["ContentShuffleImageProcessorInvocation"] | components["schemas"]["RandomRangeInvocation"] | components["schemas"]["FloatCollectionInvocation"] | components["schemas"]["CLIPSkipInvocation"] | components["schemas"]["InfillPatchMatchInvocation"] | components["schemas"]["CalculateImageTilesEvenSplitInvocation"] | components["schemas"]["ImageMultiplyInvocation"] | components["schemas"]["CropLatentsCoreInvocation"] | components["schemas"]["SDXLCompelPromptInvocation"] | components["schemas"]["StringJoinThreeInvocation"] | components["schemas"]["CalculateImageTilesMinimumOverlapInvocation"] | components["schemas"]["InfillColorInvocation"] | components["schemas"]["FaceMaskInvocation"] | components["schemas"]["BooleanCollectionInvocation"] | components["schemas"]["ImageInverseLerpInvocation"]; }; /** * Edges @@ -4149,7 +4149,7 @@ export type components = { * @description The results of node executions */ results: { - [key: string]: components["schemas"]["UNetOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["String2Output"] | components["schemas"]["ControlOutput"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["IntegerOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["ConditioningCollectionOutput"] | components["schemas"]["CLIPSkipInvocationOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["LoRALoaderOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["SDXLLoRALoaderOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["IdealSizeOutput"] | components["schemas"]["ColorOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["VAEOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["GradientMaskOutput"] | components["schemas"]["CalculateImageTilesOutput"] | components["schemas"]["LatentsOutput"]; + [key: string]: components["schemas"]["ControlOutput"] | components["schemas"]["CLIPOutput"] | components["schemas"]["CollectInvocationOutput"] | components["schemas"]["NoiseOutput"] | components["schemas"]["TileToPropertiesOutput"] | components["schemas"]["FloatOutput"] | components["schemas"]["GradientMaskOutput"] | components["schemas"]["ConditioningOutput"] | components["schemas"]["FaceOffOutput"] | components["schemas"]["String2Output"] | components["schemas"]["StringCollectionOutput"] | components["schemas"]["DenoiseMaskOutput"] | components["schemas"]["FloatCollectionOutput"] | components["schemas"]["SDXLLoRALoaderOutput"] | components["schemas"]["StringOutput"] | components["schemas"]["StringPosNegOutput"] | components["schemas"]["LatentsCollectionOutput"] | components["schemas"]["LoRALoaderOutput"] | components["schemas"]["CalculateImageTilesOutput"] | components["schemas"]["MetadataItemOutput"] | components["schemas"]["ConditioningCollectionOutput"] | components["schemas"]["IntegerOutput"] | components["schemas"]["FaceMaskOutput"] | components["schemas"]["MetadataOutput"] | components["schemas"]["BooleanOutput"] | components["schemas"]["ColorCollectionOutput"] | components["schemas"]["IPAdapterOutput"] | components["schemas"]["BooleanCollectionOutput"] | components["schemas"]["SeamlessModeOutput"] | components["schemas"]["PairTileImageOutput"] | components["schemas"]["IdealSizeOutput"] | components["schemas"]["SchedulerOutput"] | components["schemas"]["LatentsOutput"] | components["schemas"]["SDXLModelLoaderOutput"] | components["schemas"]["SDXLRefinerModelLoaderOutput"] | components["schemas"]["ModelLoaderOutput"] | components["schemas"]["IterateInvocationOutput"] | components["schemas"]["IntegerCollectionOutput"] | components["schemas"]["CLIPSkipInvocationOutput"] | components["schemas"]["T2IAdapterOutput"] | components["schemas"]["ImageCollectionOutput"] | components["schemas"]["UNetOutput"] | components["schemas"]["ImageOutput"] | components["schemas"]["ColorOutput"] | components["schemas"]["VAEOutput"]; }; /** * Errors @@ -5693,7 +5693,7 @@ export type components = { * @default true */ use_cache?: boolean; - /** @description The image to infill */ + /** @description The image to process */ image?: components["schemas"]["ImageField"]; /** * @description The color to use to infill @@ -5738,7 +5738,7 @@ export type components = { * @default true */ use_cache?: boolean; - /** @description The image to infill */ + /** @description The image to process */ image?: components["schemas"]["ImageField"]; /** * Downscale @@ -5786,7 +5786,7 @@ export type components = { * @default true */ use_cache?: boolean; - /** @description The image to infill */ + /** @description The image to process */ image?: components["schemas"]["ImageField"]; /** * Tile Size @@ -6088,7 +6088,7 @@ export type components = { * @default true */ use_cache?: boolean; - /** @description The image to infill */ + /** @description The image to process */ image?: components["schemas"]["ImageField"]; /** * type @@ -7702,6 +7702,73 @@ export type components = { /** Models */ models: (components["schemas"]["MainDiffusersConfig"] | components["schemas"]["MainCheckpointConfig"] | components["schemas"]["VAEDiffusersConfig"] | components["schemas"]["VAECheckpointConfig"] | components["schemas"]["ControlNetDiffusersConfig"] | components["schemas"]["ControlNetCheckpointConfig"] | components["schemas"]["LoRALyCORISConfig"] | components["schemas"]["LoRADiffusersConfig"] | components["schemas"]["TextualInversionFileConfig"] | components["schemas"]["TextualInversionFolderConfig"] | components["schemas"]["IPAdapterInvokeAIConfig"] | components["schemas"]["IPAdapterCheckpointConfig"] | components["schemas"]["T2IAdapterConfig"] | components["schemas"]["CLIPVisionDiffusersConfig"])[]; }; + /** + * Mosaic Infill + * @description Infills transparent areas of an image with a mosaic pattern drawing colors from the rest of the image + */ + MosaicInfillInvocation: { + /** @description The board to save the image to */ + board?: components["schemas"]["BoardField"] | null; + /** @description Optional metadata to be saved with the image */ + metadata?: components["schemas"]["MetadataField"] | null; + /** + * Id + * @description The id of this instance of an invocation. Must be unique among all instances of invocations. + */ + id: string; + /** + * Is Intermediate + * @description Whether or not this is an intermediate invocation. + * @default false + */ + is_intermediate?: boolean; + /** + * Use Cache + * @description Whether or not to use the cache + * @default true + */ + use_cache?: boolean; + /** @description The image to infill */ + image?: components["schemas"]["ImageField"]; + /** + * Tile Width + * @description Width of the tile + * @default 64 + */ + tile_width?: number; + /** + * Tile Height + * @description Height of the tile + * @default 64 + */ + tile_height?: number; + /** + * @description The min threshold for color + * @default { + * "r": 0, + * "g": 0, + * "b": 0, + * "a": 255 + * } + */ + min_color?: components["schemas"]["ColorField"]; + /** + * @description The max threshold for color + * @default { + * "r": 255, + * "g": 255, + * "b": 255, + * "a": 255 + * } + */ + max_color?: components["schemas"]["ColorField"]; + /** + * type + * @default infill_mosaic + * @constant + */ + type: "infill_mosaic"; + }; /** * Multiply Integers * @description Multiplies two numbers