-
Notifications
You must be signed in to change notification settings - Fork 2.8k
feat(z-image): add Z-Image Base (undistilled) model variant support #8799
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
base: main
Are you sure you want to change the base?
feat(z-image): add Z-Image Base (undistilled) model variant support #8799
Conversation
- Add ZImageVariantType enum with 'turbo' and 'zbase' variants - Auto-detect variant on import via scheduler_config.json shift value (3.0=turbo, 6.0=zbase) - Add database migration to populate variant field for existing Z-Image models - Re-add LCM scheduler with variant-aware filtering (LCM hidden for zbase) - Auto-reset scheduler to Euler when switching to zbase model if LCM selected - Update frontend to show/hide LCM option based on model variant - Add toast notification when scheduler is auto-reset Z-Image Base models are undistilled and require more steps (28-50) with higher guidance (3.0-5.0), while Z-Image Turbo is distilled for ~8 steps with CFG 1.0. LCM scheduler only works with distilled (Turbo) models.
Issues involving Z-Image Turbo supportI found a couple of problems with support for Z-Image Turbo. Problem 1After pulling the PR and restarting the backend, I'm getting config validation errors on previously-installed Z-Image Turbo models, and they vanish from the model manager. Here is the type of error message that appears during startup: Problem 2Installing a new ZiT model (in this case |
|
I can confirm that Z-Image Base (Diffusers):
I was unable to test whether the LCM scheduler reappears when a turbo model is installed due to the earlier issues with turbo model validation errors. |
That is to be expected
i will take a look The zimage Turbo models should be getting a variant with the migration. Do you have the startup log? |
See |
|
I reported the same issue on Discord the other day; I should have posted it here in the first place. Here is a link to the log I pasted in Discord. https://discord.com/channels/1020123559063990373/1083864753543331981/1466506983627686062 Another example taken today using the db after updating to the latest release 6.11.0 [2026-02-01 13:11:55,731]::[InvokeAI]::WARNING --> Skipping invalid model config in the database with name Z-Image Turbo (Q8). Ignoring this model. ({"key": "7e351a8a-1201-4fd4-8b44-cb2c3672cbf7", "hash": "random:...)
[2026-02-01 13:11:55,731]::[InvokeAI]::WARNING --> Validation error: 1 validation error for tagged-union[Main_Diffusers_SD1_Config,Main_Diffusers_SD2_Config,Main_Diffusers_SDXL_Config,Main_Diffusers_SDXLRefiner_Config,Main_Diffusers_SD3_Config,Main_Diffusers_FLUX_Config,Main_Diffusers_Flux2_Config,Main_Diffusers_CogView4_Config,Main_Diffusers_ZImage_Config,Main_Checkpoint_SD1_Config,Main_Checkpoint_SD2_Config,Main_Checkpoint_SDXL_Config,Main_Checkpoint_SDXLRefiner_Config,Main_Checkpoint_Flux2_Config,Main_Checkpoint_FLUX_Config,Main_Checkpoint_ZImage_Config,Main_BnBNF4_FLUX_Config,Main_GGUF_Flux2_Config,Main_GGUF_FLUX_Config,Main_GGUF_ZImage_Config,VAE_Checkpoint_SD1_Config,VAE_Checkpoint_SD2_Config,VAE_Checkpoint_SDXL_Config,VAE_Checkpoint_FLUX_Config,VAE_Checkpoint_Flux2_Config,VAE_Diffusers_SD1_Config,VAE_Diffusers_SDXL_Config,VAE_Diffusers_Flux2_Config,ControlNet_Checkpoint_SD1_Config,ControlNet_Checkpoint_SD2_Config,ControlNet_Checkpoint_SDXL_Config,ControlNet_Checkpoint_FLUX_Config,ControlNet_Checkpoint_ZImage_Config,ControlNet_Diffusers_SD1_Config,ControlNet_Diffusers_SD2_Config,ControlNet_Diffusers_SDXL_Config,ControlNet_Diffusers_FLUX_Config,LoRA_LyCORIS_SD1_Config,LoRA_LyCORIS_SD2_Config,LoRA_LyCORIS_SDXL_Config,LoRA_LyCORIS_FLUX_Config,LoRA_LyCORIS_ZImage_Config,LoRA_OMI_SDXL_Config,LoRA_OMI_FLUX_Config,LoRA_Diffusers_SD1_Config,LoRA_Diffusers_SD2_Config,LoRA_Diffusers_SDXL_Config,LoRA_Diffusers_FLUX_Config,LoRA_Diffusers_ZImage_Config,ControlLoRA_LyCORIS_FLUX_Config,T5Encoder_T5Encoder_Config,T5Encoder_BnBLLMint8_Config,Qwen3Encoder_Qwen3Encoder_Config,Qwen3Encoder_Checkpoint_Config,Qwen3Encoder_GGUF_Config,TI_File_SD1_Config,TI_File_SD2_Config,TI_File_SDXL_Config,TI_Folder_SD1_Config,TI_Folder_SD2_Config,TI_Folder_SDXL_Config,IPAdapter_InvokeAI_SD1_Config,IPAdapter_InvokeAI_SD2_Config,IPAdapter_InvokeAI_SDXL_Config,IPAdapter_Checkpoint_SD1_Config,IPAdapter_Checkpoint_SD2_Config,IPAdapter_Checkpoint_SDXL_Config,IPAdapter_Checkpoint_FLUX_Config,T2IAdapter_Diffusers_SD1_Config,T2IAdapter_Diffusers_SDXL_Config,Spandrel_Checkpoint_Config,CLIPEmbed_Diffusers_G_Config,CLIPEmbed_Diffusers_L_Config,CLIPVision_Diffusers_Config,SigLIP_Diffusers_Config,FLUXRedux_Checkpoint_Config,LlavaOnevision_Diffusers_Config,Unknown_Config]
Input tag 'main.gguf_quantized.z-image' found using get_model_discriminator_value() does not match any of the expected tags: 'main.diffusers.sd-1', 'main.diffusers.sd-2', 'main.diffusers.sdxl', 'main.diffusers.sdxl-refiner', 'main.diffusers.sd-3', 'main.diffusers.flux', 'main.diffusers.flux2', 'main.diffusers.cogview4', 'main.diffusers.z-image', 'main.checkpoint.sd-1', 'main.checkpoint.sd-2', 'main.checkpoint.sdxl', 'main.checkpoint.sdxl-refiner', 'main.checkpoint.flux2', 'main.checkpoint.flux', 'main.checkpoint.z-image.turbo', 'main.bnb_quantized_nf4b.flux', 'main.gguf_quantized.flux2', 'main.gguf_quantized.flux', 'main.gguf_quantized.z-image.turbo', 'vae.checkpoint.sd-1', 'vae.checkpoint.sd-2', 'vae.checkpoint.sdxl', 'vae.checkpoint.flux', 'vae.checkpoint.flux2', 'vae.diffusers.sd-1', 'vae.diffusers.sdxl', 'vae.diffusers.flux2', 'controlnet.checkpoint.sd-1', 'controlnet.checkpoint.sd-2', 'controlnet.checkpoint.sdxl', 'controlnet.checkpoint.flux', 'controlnet.checkpoint.z-image', 'controlnet.diffusers.sd-1', 'controlnet.diffusers.sd-2', 'controlnet.diffusers.sdxl', 'controlnet.diffusers.flux', 'lora.lycoris.sd-1', 'lora.lycoris.sd-2', 'lora.lycoris.sdxl', 'lora.lycoris.flux', 'lora.lycoris.z-image', 'lora.omi.sdxl', 'lora.omi.flux', 'lora.diffusers.sd-1', 'lora.diffusers.sd-2', 'lora.diffusers.sdxl', 'lora.diffusers.flux', 'lora.diffusers.z-image', 'control_lora.lycoris.flux', 't5_encoder.t5_encoder.any', 't5_encoder.bnb_quantized_int8b.any', 'qwen3_encoder.qwen3_encoder.any', 'qwen3_encoder.checkpoint.any', 'qwen3_encoder.gguf_quantized.any', 'embedding.embedding_file.sd-1', 'embedding.embedding_file.sd-2', 'embedding.embedding_file.sdxl', 'embedding.embedding_folder.sd-1', 'embedding.embedding_folder.sd-2', 'embedding.embedding_folder.sdxl', 'ip_adapter.invokeai.sd-1', 'ip_adapter.invokeai.sd-2', 'ip_adapter.invokeai.sdxl', 'ip_adapter.checkpoint.sd-1', 'ip_adapter.checkpoint.sd-2', 'ip_adapter.checkpoint.sdxl', 'ip_adapter.checkpoint.flux', 't2i_adapter.diffusers.sd-1', 't2i_adapter.diffusers.sdxl', 'spandrel_image_to_image.checkpoint.any', 'clip_embed.diffusers.any.gigantic', 'clip_embed.diffusers.any.large', 'clip_vision.diffusers.any', 'siglip.diffusers.any', 'flux_redux.checkpoint.flux', 'llava_onevision.diffusers.any', 'unknown.unknown.unknown' [type=union_tag_invalid, input_value={'key': '7e351a8a-1201-4f...ed', 'variant': 'turbo'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.12/v/union_tag_invalid
|
Summary
Z-Image Base models are undistilled and require more steps (28-50) with higher guidance (3.0-5.0), while Z-Image Turbo is distilled for ~8 steps with CFG 1.0. LCM scheduler only works with distilled (Turbo) models.
Only Tested with Diffusers version of the Model.
Related Issues / Discussions
Adds full support for Z-Image Base (undistilled) models alongside the existing Z-Image Turbo support.
QA Instructions
Merge Plan
Database migration (migration_26) adds variant field to existing Z-Image models. Safe to merge anytime.
Checklist
What's Newcopy (if doing a release after this PR)