From cda4822ca0693664d2dc8b8282a0c975e8eadd9e Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Mon, 25 May 2026 23:00:56 +0100 Subject: [PATCH] fix(chroma): route through native_transformer to avoid SDNQ pre-mode crash Loading a Chroma transformer override via UNET dropdown crashed at inference with a shape mismatch in unpack_uint4: from_single_file does not integrate quantization_config the way from_pretrained does, so the dequantizer state was set up but the .weight tensor was never packed. CHROMA_SPEC routes through native_transformer with the diffusers Chroma converter, which loads bare and quantizes explicitly via sdnq_quantize_model. --- pipelines/chroma/__init__.py | 18 ++++++++++++++++++ pipelines/model_chroma.py | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/pipelines/chroma/__init__.py b/pipelines/chroma/__init__.py index e69de29bb..b8eaa68c6 100644 --- a/pipelines/chroma/__init__.py +++ b/pipelines/chroma/__init__.py @@ -0,0 +1,18 @@ +"""Chroma pipeline package. + +Exports :data:`CHROMA_SPEC`. Chroma community files use BFL-style +``model.diffusion_model.``-prefixed keys that need renaming into the +diffusers naming convention, so the spec plugs in +:func:`convert_chroma_transformer_checkpoint_to_diffusers` explicitly. +""" + +import diffusers +from diffusers.loaders.single_file_utils import convert_chroma_transformer_checkpoint_to_diffusers + +from pipelines.native_transformer import TransformerSpec + + +CHROMA_SPEC = TransformerSpec( + cls=diffusers.ChromaTransformer2DModel, + converter=convert_chroma_transformer_checkpoint_to_diffusers, +) diff --git a/pipelines/model_chroma.py b/pipelines/model_chroma.py index 1e7f9ea8a..ee33d2109 100644 --- a/pipelines/model_chroma.py +++ b/pipelines/model_chroma.py @@ -14,7 +14,8 @@ def load_chroma(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) log.debug(f'Load model: type=Chroma repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') - transformer = generic.load_transformer(repo_id, cls_name=diffusers.ChromaTransformer2DModel, load_config=diffusers_load_config, modules_to_not_convert=["distilled_guidance_layer"]) + from pipelines.chroma import CHROMA_SPEC + transformer = generic.load_transformer(repo_id, cls_name=diffusers.ChromaTransformer2DModel, load_config=diffusers_load_config, modules_to_not_convert=["distilled_guidance_layer"], native_spec=CHROMA_SPEC) text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.T5EncoderModel, load_config=diffusers_load_config) pipe = diffusers.ChromaPipeline.from_pretrained(