| import os |
| import torch |
| from shared.utils.hf import build_hf_url |
|
|
|
|
| class family_handler: |
| @staticmethod |
| def query_model_def(base_model_type, model_def): |
| z_image_base = base_model_type == "z_image_base" |
| guidance_max_phases = 1 if z_image_base else 0 |
| extra_model_def = { |
| "image_outputs": True, |
| "guidance_max_phases": guidance_max_phases, |
| "fit_into_canvas_image_refs": 0, |
| "profiles_dir": [], |
| } |
| text_encoder_folder = "Qwen3" |
| extra_model_def["text_encoder_URLs"] = [ |
| build_hf_url("DeepBeepMeep/Z-Image", text_encoder_folder, "qwen3_bf16.safetensors"), |
| build_hf_url("DeepBeepMeep/Z-Image", text_encoder_folder, "qwen3_quanto_bf16_int8.safetensors"), |
| ] |
| extra_model_def["text_encoder_folder"] = text_encoder_folder |
|
|
| if base_model_type in ["z_image_control", "z_image_control2", "z_image_control2_1"]: |
| extra_model_def["mask_preprocessing"] = { |
| "selection":[ ""], |
| "visible": False |
| } |
|
|
| extra_model_def["control_net_weight_name"] = "Control" |
| extra_model_def["control_net_weight_size"] = 1 |
|
|
| extra_model_def["guide_preprocessing"] = { |
| "selection": ["", "PV", "DV", "EV", "V"], |
| "labels" : { "V": "Use Z-Image Raw Format"}, |
| } |
|
|
| if base_model_type in ["z_image_control2", "z_image_control2_1"]: |
| extra_model_def["mask_preprocessing"] = { |
| "selection":[ "", "A", "NA"], |
| "visible": False, |
| } |
| extra_model_def["parent_model_type"] = "z_image_control" |
|
|
| extra_model_def["inpaint_support"] = True |
| extra_model_def["inpaint_video_prompt_type"]= "VA" |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| extra_model_def["flow_shift"] = z_image_base |
| extra_model_def["NAG"] = base_model_type in ["z_image"] |
| return extra_model_def |
|
|
| @staticmethod |
| def query_supported_types(): |
| return ["z_image", "z_image_base", "z_image_control", "z_image_control2", "z_image_control2_1"] |
|
|
| @staticmethod |
| def query_family_maps(): |
|
|
| models_eqv_map = { |
| "z_image_control2_1" : "z_image_control2", |
| "z_image_base": "z_image", |
| } |
|
|
| models_comp_map = {} |
|
|
| return models_eqv_map, models_comp_map |
|
|
| @staticmethod |
| def query_model_family(): |
| return "z_image" |
|
|
| @staticmethod |
| def query_family_infos(): |
| return {"z_image": (120, "Z-Image") } |
|
|
| @staticmethod |
| def register_lora_cli_args(parser, lora_root): |
| parser.add_argument( |
| "--lora-dir-z-image", |
| type=str, |
| default=None, |
| help=f"Path to a directory that contains z image settings (default: {os.path.join(lora_root, 'z_image')})" |
| ) |
|
|
| @staticmethod |
| def get_lora_dir(base_model_type, args, lora_root): |
| return getattr(args, "lora_dir_z_image", None) or os.path.join(lora_root, "z_image") |
|
|
| @staticmethod |
| def query_model_files(computeList, base_model_type, model_def=None): |
| download_def = [ |
| { |
| "repoId": "DeepBeepMeep/Z-Image", |
| "sourceFolderList": ["Qwen3", ""], |
| "fileList": [ |
| ["tokenizer.json", "tokenizer_config.json", "vocab.json", "config.json", "merges.txt"], |
| ["ZImageTurbo_VAE_bf16_config.json", "ZImageTurbo_VAE_bf16.safetensors", "ZImageTurbo_scheduler_config.json"], |
| ], |
| } |
| ] |
| return download_def |
|
|
| @staticmethod |
| def load_model( |
| model_filename, |
| model_type=None, |
| base_model_type=None, |
| model_def=None, |
| quantizeTransformer=False, |
| text_encoder_quantization=None, |
| dtype=torch.bfloat16, |
| VAE_dtype=torch.float32, |
| mixed_precision_transformer=False, |
| save_quantized=False, |
| submodel_no_list=None, |
| text_encoder_filename=None, |
| **kwargs, |
| ): |
| from .z_image_main import model_factory |
|
|
| |
| is_control = base_model_type in ["z_image_control", "z_image_control2", "z_image_control2_1"] |
|
|
| pipe_processor = model_factory( |
| checkpoint_dir="ckpts", |
| model_filename=model_filename, |
| model_type=model_type, |
| model_def=model_def, |
| base_model_type=base_model_type, |
| text_encoder_filename=text_encoder_filename, |
| quantizeTransformer=quantizeTransformer, |
| dtype=dtype, |
| VAE_dtype=VAE_dtype, |
| mixed_precision_transformer=mixed_precision_transformer, |
| save_quantized=save_quantized, |
| is_control=is_control, |
| ) |
|
|
| pipe = { |
| "transformer": pipe_processor.transformer, |
| "text_encoder": pipe_processor.text_encoder, |
| "vae": pipe_processor.vae, |
| } |
| return pipe_processor, pipe |
|
|
| def get_rgb_factors(base_model_type ): |
| from shared.RGB_factors import get_rgb_factors |
| latent_rgb_factors, latent_rgb_factors_bias = get_rgb_factors("flux") |
| return latent_rgb_factors, latent_rgb_factors_bias |
|
|
| @staticmethod |
| def update_default_settings(base_model_type, model_def, ui_defaults): |
| z_image_base = base_model_type == "z_image_base" |
|
|
| if z_image_base: |
| ui_defaults.update( |
| { |
| "guidance_scale": 4, |
| "num_inference_steps": 30 , |
| "flow_shift": 6.0, |
| } |
| ) |
| else: |
| ui_defaults.update( |
| { |
| "guidance_scale": 0, |
| "num_inference_steps": 8, |
| "NAG_scale": 1.0, |
| "NAG_tau": 3.5, |
| "NAG_alpha": 0.5, |
| } |
| ) |
|
|
| |
| if base_model_type in ["z_image_control", "z_image_control2", "z_image_control2_1"]: |
| ui_defaults.update( |
| { |
| "control_net_weight": 0.75, |
| } |
| ) |
|
|