diff --git a/invokeai/app/invocations/metadata.py b/invokeai/app/invocations/metadata.py index 36b29e656a..bdacec55eb 100644 --- a/invokeai/app/invocations/metadata.py +++ b/invokeai/app/invocations/metadata.py @@ -170,7 +170,7 @@ GENERATION_MODES = Literal[ title="Core Metadata", tags=["metadata"], category="metadata", - version="2.0.0", + version="2.1.0", classification=Classification.Internal, ) class CoreMetadataInvocation(BaseInvocation): @@ -221,6 +221,10 @@ class CoreMetadataInvocation(BaseInvocation): default=None, description="The VAE used for decoding, if the main model's default was not used", ) + qwen3_encoder: Optional[ModelIdentifierField] = InputField( + default=None, + description="The Qwen3 text encoder model used for Z-Image inference", + ) # High resolution fix metadata. hrf_enabled: Optional[bool] = InputField( diff --git a/invokeai/frontend/web/public/locales/en.json b/invokeai/frontend/web/public/locales/en.json index 28d7bd6002..1663a42f0a 100644 --- a/invokeai/frontend/web/public/locales/en.json +++ b/invokeai/frontend/web/public/locales/en.json @@ -839,6 +839,7 @@ "parameterSet": "Parameter {{parameter}} set", "parsingFailed": "Parsing Failed", "positivePrompt": "Positive Prompt", + "qwen3Encoder": "Qwen3 Encoder", "recallParameters": "Recall Parameters", "recallParameter": "Recall {{label}}", "scheduler": "Scheduler", diff --git a/invokeai/frontend/web/src/features/metadata/parsing.tsx b/invokeai/frontend/web/src/features/metadata/parsing.tsx index d964279c2a..cc4358ef72 100644 --- a/invokeai/frontend/web/src/features/metadata/parsing.tsx +++ b/invokeai/frontend/web/src/features/metadata/parsing.tsx @@ -31,6 +31,8 @@ import { setSteps, vaeSelected, widthChanged, + zImageQwen3EncoderModelSelected, + zImageVaeModelSelected, } from 'features/controlLayers/store/paramsSlice'; import { refImagesRecalled } from 'features/controlLayers/store/refImagesSlice'; import type { CanvasMetadata, LoRA, RefImageState } from 'features/controlLayers/store/types'; @@ -694,6 +696,51 @@ const VAEModel: SingleMetadataHandler = { }; //#endregion VAEModel +//#region Qwen3EncoderModel +const Qwen3EncoderModel: SingleMetadataHandler = { + [SingleMetadataKey]: true, + type: 'Qwen3EncoderModel', + parse: async (metadata, store) => { + const raw = getProperty(metadata, 'qwen3_encoder'); + const parsed = await parseModelIdentifier(raw, store, 'qwen3_encoder'); + assert(parsed.type === 'qwen3_encoder'); + return Promise.resolve(parsed); + }, + recall: (value, store) => { + store.dispatch(zImageQwen3EncoderModelSelected(value)); + }, + i18nKey: 'metadata.qwen3Encoder', + LabelComponent: MetadataLabel, + ValueComponent: ({ value }: SingleMetadataValueProps) => ( + + ), +}; +//#endregion Qwen3EncoderModel + +//#region ZImageVAEModel +const ZImageVAEModel: SingleMetadataHandler = { + [SingleMetadataKey]: true, + type: 'ZImageVAEModel', + parse: async (metadata, store) => { + const raw = getProperty(metadata, 'vae'); + const parsed = await parseModelIdentifier(raw, store, 'vae'); + assert(parsed.type === 'vae'); + // Only recall if the current main model is Z-Image + const base = selectBase(store.getState()); + assert(base === 'z-image', 'ZImageVAEModel handler only works with Z-Image models'); + return Promise.resolve(parsed); + }, + recall: (value, store) => { + store.dispatch(zImageVaeModelSelected(value)); + }, + i18nKey: 'metadata.vae', + LabelComponent: MetadataLabel, + ValueComponent: ({ value }: SingleMetadataValueProps) => ( + + ), +}; +//#endregion ZImageVAEModel + //#region LoRAs const LoRAs: CollectionMetadataHandler = { [CollectionMetadataKey]: true, @@ -928,6 +975,8 @@ export const ImageMetadataHandlers = { RefinerDenoisingStart, MainModel, VAEModel, + Qwen3EncoderModel, + ZImageVAEModel, LoRAs, CanvasLayers, RefImages, diff --git a/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildZImageGraph.ts b/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildZImageGraph.ts index 0f1017ff90..81ff3a95ee 100644 --- a/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildZImageGraph.ts +++ b/invokeai/frontend/web/src/features/nodes/util/graph/generation/buildZImageGraph.ts @@ -123,6 +123,8 @@ export const buildZImageGraph = async (arg: GraphBuilderArg): Promise