Skip to content

chore: prep for v5.9.0 #7845

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions invokeai/app/invocations/flux_control_lora_loader.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand All @@ -25,7 +24,6 @@ class FluxControlLoRALoaderOutput(BaseInvocationOutput):
tags=["lora", "model", "flux"],
category="model",
version="1.1.1",
classification=Classification.Prototype,
)
class FluxControlLoRALoaderInvocation(BaseInvocation):
"""LoRA model and Image to use with FLUX transformer generation."""
Expand Down
2 changes: 0 additions & 2 deletions invokeai/app/invocations/flux_controlnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand Down Expand Up @@ -52,7 +51,6 @@ class FluxControlNetOutput(BaseInvocationOutput):
tags=["controlnet", "flux"],
category="controlnet",
version="1.0.0",
classification=Classification.Prototype,
)
class FluxControlNetInvocation(BaseInvocation):
"""Collect FLUX ControlNet info to pass to other nodes."""
Expand Down
3 changes: 1 addition & 2 deletions invokeai/app/invocations/flux_denoise.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from torchvision.transforms.functional import resize as tv_resize
from transformers import CLIPImageProcessor, CLIPVisionModelWithProjection

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.fields import (
DenoiseMaskField,
FieldDescriptions,
Expand Down Expand Up @@ -64,7 +64,6 @@
tags=["image", "flux"],
category="image",
version="3.3.0",
classification=Classification.Prototype,
)
class FluxDenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Run denoising process with a FLUX transformer model."""
Expand Down
2 changes: 1 addition & 1 deletion invokeai/app/invocations/flux_fill.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class FluxFillOutput(BaseInvocationOutput):
tags=["inpaint"],
category="inpaint",
version="1.0.0",
classification=Classification.Prototype,
classification=Classification.Beta,
)
class FluxFillInvocation(BaseInvocation):
"""Prepare the FLUX Fill conditioning data."""
Expand Down
3 changes: 1 addition & 2 deletions invokeai/app/invocations/flux_ip_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from pydantic import field_validator, model_validator
from typing_extensions import Self

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.fields import InputField, UIType
from invokeai.app.invocations.ip_adapter import (
CLIP_VISION_MODEL_MAP,
Expand All @@ -28,7 +28,6 @@
tags=["ip_adapter", "control"],
category="ip_adapter",
version="1.0.0",
classification=Classification.Prototype,
)
class FluxIPAdapterInvocation(BaseInvocation):
"""Collects FLUX IP-Adapter info to pass to other nodes."""
Expand Down
3 changes: 0 additions & 3 deletions invokeai/app/invocations/flux_lora_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand Down Expand Up @@ -32,7 +31,6 @@ class FluxLoRALoaderOutput(BaseInvocationOutput):
tags=["lora", "model", "flux"],
category="model",
version="1.2.1",
classification=Classification.Prototype,
)
class FluxLoRALoaderInvocation(BaseInvocation):
"""Apply a LoRA model to a FLUX transformer and/or text encoder."""
Expand Down Expand Up @@ -111,7 +109,6 @@ def invoke(self, context: InvocationContext) -> FluxLoRALoaderOutput:
tags=["lora", "model", "flux"],
category="model",
version="1.3.1",
classification=Classification.Prototype,
)
class FLUXLoRACollectionLoader(BaseInvocation):
"""Applies a collection of LoRAs to a FLUX transformer."""
Expand Down
2 changes: 0 additions & 2 deletions invokeai/app/invocations/flux_model_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand Down Expand Up @@ -41,7 +40,6 @@ class FluxModelLoaderOutput(BaseInvocationOutput):
tags=["model", "flux"],
category="model",
version="1.0.6",
classification=Classification.Prototype,
)
class FluxModelLoaderInvocation(BaseInvocation):
"""Loads a flux base model, outputting its submodels."""
Expand Down
2 changes: 1 addition & 1 deletion invokeai/app/invocations/flux_redux.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class FluxReduxOutput(BaseInvocationOutput):
tags=["ip_adapter", "control"],
category="ip_adapter",
version="2.0.0",
classification=Classification.Prototype,
classification=Classification.Beta,
)
class FluxReduxInvocation(BaseInvocation):
"""Runs a FLUX Redux model to generate a conditioning tensor."""
Expand Down
3 changes: 1 addition & 2 deletions invokeai/app/invocations/flux_text_encoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import torch
from transformers import CLIPTextModel, CLIPTokenizer, T5EncoderModel, T5Tokenizer, T5TokenizerFast

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.fields import (
FieldDescriptions,
FluxConditioningField,
Expand All @@ -30,7 +30,6 @@
tags=["prompt", "conditioning", "flux"],
category="conditioning",
version="1.1.2",
classification=Classification.Prototype,
)
class FluxTextEncoderInvocation(BaseInvocation):
"""Encodes and preps a prompt for a flux image."""
Expand Down
3 changes: 0 additions & 3 deletions invokeai/app/invocations/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,6 @@ def invoke(self, context: InvocationContext) -> ImageOutput:
tags=["image", "unsharp_mask"],
category="image",
version="1.2.2",
classification=Classification.Beta,
)
class UnsharpMaskInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Applies an unsharp mask filter to an image"""
Expand Down Expand Up @@ -1265,7 +1264,6 @@ def invoke(self, context: InvocationContext) -> ImageOutput:
category="image",
version="1.0.0",
tags=["image", "crop"],
classification=Classification.Beta,
)
class CropImageToBoundingBoxInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Crop an image to the given bounding box. If the bounding box is omitted, the image is cropped to the non-transparent pixels."""
Expand All @@ -1292,7 +1290,6 @@ def invoke(self, context: InvocationContext) -> ImageOutput:
category="image",
version="1.0.0",
tags=["image", "crop"],
classification=Classification.Beta,
)
class PasteImageIntoBoundingBoxInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Paste the source image into the target image at the given bounding box.
Expand Down
11 changes: 9 additions & 2 deletions invokeai/app/invocations/llava_onevision_vllm.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from PIL.Image import Image
from pydantic import field_validator

from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.fields import FieldDescriptions, ImageField, InputField, UIComponent, UIType
from invokeai.app.invocations.model import ModelIdentifierField
from invokeai.app.invocations.primitives import StringOutput
Expand All @@ -13,7 +13,14 @@
from invokeai.backend.util.devices import TorchDevice


@invocation("llava_onevision_vllm", title="LLaVA OneVision VLLM", tags=["vllm"], category="vllm", version="1.0.0")
@invocation(
"llava_onevision_vllm",
title="LLaVA OneVision VLLM",
tags=["vllm"],
category="vllm",
version="1.0.0",
classification=Classification.Beta,
)
class LlavaOnevisionVllmInvocation(BaseInvocation):
"""Run a LLaVA OneVision VLLM model."""

Expand Down
4 changes: 0 additions & 4 deletions invokeai/app/invocations/mask.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
Classification,
InvocationContext,
invocation,
)
Expand Down Expand Up @@ -58,7 +57,6 @@ def invoke(self, context: InvocationContext) -> MaskOutput:
tags=["conditioning"],
category="conditioning",
version="1.0.0",
classification=Classification.Beta,
)
class AlphaMaskToTensorInvocation(BaseInvocation):
"""Convert a mask image to a tensor. Opaque regions are 1 and transparent regions are 0."""
Expand Down Expand Up @@ -87,7 +85,6 @@ def invoke(self, context: InvocationContext) -> MaskOutput:
tags=["conditioning"],
category="conditioning",
version="1.1.0",
classification=Classification.Beta,
)
class InvertTensorMaskInvocation(BaseInvocation):
"""Inverts a tensor mask."""
Expand Down Expand Up @@ -234,7 +231,6 @@ def invoke(self, context: InvocationContext) -> ImageOutput:
tags=["mask"],
category="mask",
version="1.0.0",
classification=Classification.Beta,
)
class GetMaskBoundingBoxInvocation(BaseInvocation):
"""Gets the bounding box of the given mask image."""
Expand Down
2 changes: 0 additions & 2 deletions invokeai/app/invocations/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand Down Expand Up @@ -124,7 +123,6 @@ class ModelIdentifierOutput(BaseInvocationOutput):
tags=["model"],
category="model",
version="1.0.1",
classification=Classification.Prototype,
)
class ModelIdentifierInvocation(BaseInvocation):
"""Selects any model, outputting it its identifier. Be careful with this one! The identifier will be accepted as
Expand Down
3 changes: 1 addition & 2 deletions invokeai/app/invocations/sd3_denoise.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from torchvision.transforms.functional import resize as tv_resize
from tqdm import tqdm

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.constants import LATENT_SCALE_FACTOR
from invokeai.app.invocations.fields import (
DenoiseMaskField,
Expand Down Expand Up @@ -36,7 +36,6 @@
tags=["image", "sd3"],
category="image",
version="1.1.1",
classification=Classification.Prototype,
)
class SD3DenoiseInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Run denoising process with a SD3 model."""
Expand Down
3 changes: 1 addition & 2 deletions invokeai/app/invocations/sd3_image_to_latents.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import torch
from diffusers.models.autoencoders.autoencoder_kl import AutoencoderKL

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.fields import (
FieldDescriptions,
ImageField,
Expand All @@ -25,7 +25,6 @@
tags=["image", "latents", "vae", "i2l", "sd3"],
category="image",
version="1.0.1",
classification=Classification.Prototype,
)
class SD3ImageToLatentsInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Generates latents from an image."""
Expand Down
2 changes: 0 additions & 2 deletions invokeai/app/invocations/sd3_model_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand Down Expand Up @@ -34,7 +33,6 @@ class Sd3ModelLoaderOutput(BaseInvocationOutput):
tags=["model", "sd3"],
category="model",
version="1.0.1",
classification=Classification.Prototype,
)
class Sd3ModelLoaderInvocation(BaseInvocation):
"""Loads a SD3 base model, outputting its submodels."""
Expand Down
3 changes: 1 addition & 2 deletions invokeai/app/invocations/sd3_text_encoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
T5TokenizerFast,
)

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.fields import FieldDescriptions, Input, InputField
from invokeai.app.invocations.model import CLIPField, T5EncoderField
from invokeai.app.invocations.primitives import SD3ConditioningOutput
Expand All @@ -33,7 +33,6 @@
tags=["prompt", "conditioning", "sd3"],
category="conditioning",
version="1.0.1",
classification=Classification.Prototype,
)
class Sd3TextEncoderInvocation(BaseInvocation):
"""Encodes and preps a prompt for a SD3 image."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from diffusers.schedulers.scheduling_utils import SchedulerMixin
from pydantic import field_validator

from invokeai.app.invocations.baseinvocation import BaseInvocation, Classification, invocation
from invokeai.app.invocations.baseinvocation import BaseInvocation, invocation
from invokeai.app.invocations.constants import LATENT_SCALE_FACTOR
from invokeai.app.invocations.controlnet_image_processors import ControlField
from invokeai.app.invocations.denoise_latents import DenoiseLatentsInvocation, get_scheduler
Expand Down Expand Up @@ -56,7 +56,6 @@ def crop_controlnet_data(control_data: ControlNetData, latent_region: TBLR) -> C
title="Tiled Multi-Diffusion Denoise - SD1.5, SDXL",
tags=["upscale", "denoise"],
category="latents",
classification=Classification.Beta,
version="1.0.1",
)
class TiledMultiDiffusionDenoiseLatents(BaseInvocation):
Expand Down
7 changes: 0 additions & 7 deletions invokeai/app/invocations/tiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from invokeai.app.invocations.baseinvocation import (
BaseInvocation,
BaseInvocationOutput,
Classification,
invocation,
invocation_output,
)
Expand Down Expand Up @@ -40,7 +39,6 @@ class CalculateImageTilesOutput(BaseInvocationOutput):
tags=["tiles"],
category="tiles",
version="1.0.1",
classification=Classification.Beta,
)
class CalculateImageTilesInvocation(BaseInvocation):
"""Calculate the coordinates and overlaps of tiles that cover a target image shape."""
Expand Down Expand Up @@ -74,7 +72,6 @@ def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput:
tags=["tiles"],
category="tiles",
version="1.1.1",
classification=Classification.Beta,
)
class CalculateImageTilesEvenSplitInvocation(BaseInvocation):
"""Calculate the coordinates and overlaps of tiles that cover a target image shape."""
Expand Down Expand Up @@ -117,7 +114,6 @@ def invoke(self, context: InvocationContext) -> CalculateImageTilesOutput:
tags=["tiles"],
category="tiles",
version="1.0.1",
classification=Classification.Beta,
)
class CalculateImageTilesMinimumOverlapInvocation(BaseInvocation):
"""Calculate the coordinates and overlaps of tiles that cover a target image shape."""
Expand Down Expand Up @@ -168,7 +164,6 @@ class TileToPropertiesOutput(BaseInvocationOutput):
tags=["tiles"],
category="tiles",
version="1.0.1",
classification=Classification.Beta,
)
class TileToPropertiesInvocation(BaseInvocation):
"""Split a Tile into its individual properties."""
Expand Down Expand Up @@ -201,7 +196,6 @@ class PairTileImageOutput(BaseInvocationOutput):
tags=["tiles"],
category="tiles",
version="1.0.1",
classification=Classification.Beta,
)
class PairTileImageInvocation(BaseInvocation):
"""Pair an image with its tile properties."""
Expand Down Expand Up @@ -230,7 +224,6 @@ def invoke(self, context: InvocationContext) -> PairTileImageOutput:
tags=["tiles"],
category="tiles",
version="1.1.1",
classification=Classification.Beta,
)
class MergeTilesToImageInvocation(BaseInvocation, WithMetadata, WithBoard):
"""Merge multiple tile images into a single image."""
Expand Down
5 changes: 3 additions & 2 deletions invokeai/frontend/web/public/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2344,8 +2344,9 @@
"whatsNew": {
"whatsNewInInvoke": "What's New in Invoke",
"items": [
"Workflows: New and improved Workflow Library.",
"FLUX: Support for FLUX Redux & FLUX Fill in Workflows and Canvas."
"Workflows: Support for custom string drop-downs in Workflow Builder.",
"FLUX: Support for FLUX Fill in Workflows and Canvas.",
"LLaVA OneVision VLLM: Beta support in Workflows."
],
"readReleaseNotes": "Read Release Notes",
"watchRecentReleaseVideos": "Watch Recent Release Videos",
Expand Down
2 changes: 1 addition & 1 deletion invokeai/version/invokeai_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "5.9.0rc2"
__version__ = "5.9.0"