Skip to content

Conversation

@Pfannkuchensack
Copy link
Contributor

@Pfannkuchensack Pfannkuchensack commented Dec 4, 2025

Summary

This PR adds Regional Guidance support for Z-Image (S3-DiT Transformer) models, enabling users to apply different prompts to different regions of the image using attention masks.

Key implementation details:

Backend:

  • New ZImageRegionalPromptingExtension class that builds regional attention masks
  • New ZImageTextConditioning and ZImageRegionalTextConditioning dataclasses for managing regional text embeddings
  • Transformer forward patching via patch_transformer_for_regional_prompting context manager
  • Attention mask format: 4D additive float mask (0.0 = attend, -inf = block) in bfloat16 dtype
  • Alternating layer strategy: even layers use regional mask, odd layers use full attention for global coherence
  • Z-Image uses sequence order [img_tokens, txt_tokens] (different from FLUX's [txt_tokens, img_tokens])

Frontend:

  • Updated buildZImageGraph.ts to support regional conditioning collectors
  • Updated addRegions.ts to create z_image_text_encoder nodes for Z-Image regions
  • Updated addZImageLoRAs.ts to handle optional negCond when guidance_scale=0
  • Added Z-Image validation in validators.ts (no IP adapters, no autoNegative support)
  • Negative conditioning nodes only created when guidance_scale > 0

Related Issues / Discussions

#8670
Extends Z-Image support (from the Z-Image-Turbo PR) with regional prompting capabilities.

QA Instructions

  1. Select a Z-Image model (e.g., Z-Image-Turbo)
  2. Create two or more Regional Guidance layers in the Control Layers panel
  3. Draw masks for each region
  4. Add different prompts to each region (e.g., "red apple" for left region, "blue sky" for right region)
  5. Add a global prompt (optional)
  6. Generate image
  7. Verify that different regions follow their respective prompts

Merge Plan

Should be merged after the main Z-Image support PR (feat/z-image-turbo-support), as this builds on top of that implementation.

Checklist

  • The PR has a short but descriptive title, suitable for a changelog
  • Tests added / updated (if applicable)
  • ❗Changes to a redux slice have a corresponding migration
  • Documentation added / updated (if applicable)
  • Updated What's New copy (if doing a release after this PR)

Pfannkuchensack and others added 9 commits December 1, 2025 00:22
Add comprehensive support for Z-Image-Turbo (S3-DiT) models including:

Backend:
- New BaseModelType.ZImage in taxonomy
- Z-Image model config classes (ZImageTransformerConfig, Qwen3TextEncoderConfig)
- Model loader for Z-Image transformer and Qwen3 text encoder
- Z-Image conditioning data structures
- Step callback support for Z-Image with FLUX latent RGB factors

Invocations:
- z_image_model_loader: Load Z-Image transformer and Qwen3 encoder
- z_image_text_encoder: Encode prompts using Qwen3 with chat template
- z_image_denoise: Flow matching denoising with time-shifted sigmas
- z_image_image_to_latents: Encode images to 16-channel latents
- z_image_latents_to_image: Decode latents using FLUX VAE

Frontend:
- Z-Image graph builder for text-to-image generation
- Model picker and validation updates for z-image base type
- CFG scale now allows 0 (required for Z-Image-Turbo)
- Clip skip disabled for Z-Image (uses Qwen3, not CLIP)
- Optimal dimension settings for Z-Image (1024x1024)

Technical details:
- Uses Qwen3 text encoder (not CLIP/T5)
- 16 latent channels with FLUX-compatible VAE
- Flow matching scheduler with dynamic time shift
- 8 inference steps recommended for Turbo variant
- bfloat16 inference dtype
Add comprehensive LoRA support for Z-Image models including:

Backend:
- New Z-Image LoRA config classes (LoRA_LyCORIS_ZImage_Config, LoRA_Diffusers_ZImage_Config)
- Z-Image LoRA conversion utilities with key mapping for transformer and Qwen3 encoder
- LoRA prefix constants (Z_IMAGE_LORA_TRANSFORMER_PREFIX, Z_IMAGE_LORA_QWEN3_PREFIX)
- LoRA detection logic to distinguish Z-Image from Flux models
- Layer patcher improvements for proper dtype conversion and parameter
…ntification

Move Flux layer structure check before metadata check to prevent misidentifying Z-Image LoRAs (which use `diffusion_model.layers.X`) as Flux AI Toolkit format. Flux models use `double_blocks` and `single_blocks` patterns which are now checked first regardless of metadata presence.
…ibility

Add comprehensive support for GGUF quantized Z-Image models and improve component flexibility:

Backend:
- New Main_GGUF_ZImage_Config for GGUF quantized Z-Image transformers
- Z-Image key detection (_has_z_image_keys) to identify S3-DiT models
- GGUF quantization detection and sidecar LoRA patching for quantized models
- Qwen3Encoder_Qwen3Encoder_Config for standalone Qwen3 encoder models

Model Loader:
- Split Z-Image model
Implements regional prompting for Z-Image (S3-DiT Transformer) allowing
different prompts to affect different image regions using attention masks.

Backend changes:
- Add ZImageRegionalPromptingExtension for mask preparation
- Add ZImageTextConditioning and ZImageRegionalTextConditioning data classes
- Patch transformer forward to inject 4D regional attention masks
- Use additive float mask (0.0 attend, -inf block) in bfloat16 for compatibility
- Alternate regional/full attention layers for global coherence

Frontend changes:
- Update buildZImageGraph to support regional conditioning collectors
- Update addRegions to create z_image_text_encoder nodes for regions
- Update addZImageLoRAs to handle optional negCond when guidance_scale=0
- Add Z-Image validation (no IP adapters, no autoNegative)
@github-actions github-actions bot added api python PRs that change python files Root invocations PRs that change invocations backend PRs that change backend files frontend PRs that change frontend files python-deps PRs that change python dependencies labels Dec 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api backend PRs that change backend files frontend PRs that change frontend files invocations PRs that change invocations python PRs that change python files python-deps PRs that change python dependencies Root

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant