diff --git a/CHANGELOG.md b/CHANGELOG.md index f01f9954b..2ec55935c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [Qwen-Image-2512](https://huggingface.co/Qwen/Qwen-Image-2512) Qwen-Image successor, significantly reduces the AI-generated look and adds finer natural detailils and improved text rendering available in both *original*, *sdnq-svd prequantized* and *sdnq-dynamic prequantized* variants + - [Nunchaku Z-Image Turbo](https://huggingface.co/nunchaku-tech/nunchaku-z-image-turbo) - **Feaures** - **SDNQ** now has *19 int* based and *69 float* based quantization types *note*: not all are exposed via ui purely for simplicity, but all are available via api and scripts diff --git a/pipelines/model_z_image.py b/pipelines/model_z_image.py index a839715e8..9f8dd51e1 100644 --- a/pipelines/model_z_image.py +++ b/pipelines/model_z_image.py @@ -4,6 +4,20 @@ from modules import shared, devices, sd_models, model_quant, sd_hijack_te from pipelines import generic +def load_nunchaku(): + import nunchaku + nunchaku_precision = nunchaku.utils.get_precision() + nunchaku_rank = 128 + nunchaku_repo = f"nunchaku-tech/nunchaku-z-image-turbo/svdq-{nunchaku_precision}_r{nunchaku_rank}-z-image-turbo.safetensors" + shared.log.debug(f'Load module: quant=Nunchaku module=transformer repo="{nunchaku_repo}" attention={shared.opts.nunchaku_attention}') + transformer = nunchaku.NunchakuZImageTransformer2DModel.from_pretrained( + nunchaku_repo, + torch_dtype=devices.dtype, + cache_dir=shared.opts.hfcache_dir, + ) + return transformer + + def load_z_image(checkpoint_info, diffusers_load_config=None): if diffusers_load_config is None: diffusers_load_config = {} @@ -13,7 +27,11 @@ def load_z_image(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) shared.log.debug(f'Load model: type=ZImage repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={diffusers_load_config}') - transformer = generic.load_transformer(repo_id, cls_name=diffusers.ZImageTransformer2DModel, load_config=diffusers_load_config) + if model_quant.check_nunchaku('Model'): # only available model + transformer = load_nunchaku() + else: + transformer = generic.load_transformer(repo_id, cls_name=diffusers.ZImageTransformer2DModel, load_config=diffusers_load_config) + text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.Qwen3ForCausalLM, load_config=diffusers_load_config) pipe = diffusers.ZImagePipeline.from_pretrained(