Skip to content

fix(diffusers): pin diffusers and transformers to a known-good pair (#9979) - #10442

Merged
mudler merged 1 commit into
mudler:masterfrom
Dennisadira:fix/diffusers-transformers-pin-9979
Jun 22, 2026
Merged

fix(diffusers): pin diffusers and transformers to a known-good pair (#9979)#10442
mudler merged 1 commit into
mudler:masterfrom
Dennisadira:fix/diffusers-transformers-pin-9979

Conversation

@Dennisadira

Copy link
Copy Markdown
Contributor

Summary

Closes #9979 (consolidates #9082). The diffusers / Stable Diffusion backend has been broken since ~v4.2.3: loading any single-file SD checkpoint fails with AttributeError: 'CLIPTextModel' object has no attribute 'text_model'.

Root cause

backend/python/diffusers/requirements-*.txt tracked git+…/diffusers (main) with an unpinned transformers. transformers v5 restructured CLIPTextModel and removed the .text_model attribute that diffusers' single-file loader reads:

diffusers/loaders/single_file_utils.py:1705, in create_diffusers_clip_model_from_ldm
    position_embedding_dim = model.text_model.embeddings.position_embedding.weight.shape[-1]
AttributeError: 'CLIPTextModel' object has no attribute 'text_model'

No released diffusers (≤ 0.38.0) supports transformers v5 — only unreleased diffusers main does. Because the requirements tracked main + an unpinned transformers, every backend image froze whichever pair existed at build time, and images built once transformers v5 shipped but before diffusers main caught up are permanently broken.

Fix

Pin the last known-good released pair across all 8 requirements-*.txt:

  • diffusers==0.38.0
  • transformers==4.57.6

Verified 0.38.0 still exposes every pipeline backend.py imports (Flux, Wan, Sana, LTX2, Qwen, GGUF), so no functionality is lost — builds just become reproducible instead of drifting into the broken window. The compel comment block is updated to explain the pin.

Local GPU testing (RTX 4060 Laptop, 8GB, driver 580 / CUDA)

Reproduced with the exact checkpoint from the report (DreamShaper_8_pruned.safetensors, SD1.5 single-file), using the backend's load path StableDiffusionPipeline.from_single_file(..., torch_dtype=fp16) on CUDA.

Version bisect (transformers 5.12.1 unless noted):

diffusers transformers result
main (0.39.0.dev0) 5.x ✅ works (unpinned/fragile — today's state)
0.38.0 / 0.37.1 / 0.36.0 / 0.35.2 5.12.1 text_model AttributeError
0.38.0 4.57.6 works (this PR's pin)

Before → After on the GPU:

==================== BEFORE (unpinned -> broken) ====================
diffusers=0.38.0 transformers=5.12.1 torch=2.12.1 cuda_avail=True
[load] StableDiffusionPipeline.from_single_file('DreamShaper_8_pruned.safetensors', torch_dtype=fp16)
...
  File ".../diffusers/loaders/single_file_utils.py", line 1705, in create_diffusers_clip_model_from_ldm
    position_embedding_dim = model.text_model.embeddings.position_embedding.weight.shape[-1]
AttributeError: 'CLIPTextModel' object has no attribute 'text_model'
RESULT: FAILED

==================== AFTER (this PR's pin -> fixed) =================
installed: diffusers==0.38.0 transformers==4.57.6
[load] OK
[gen] running 4-step generation...
[gen] OK -> out.png   # coherent 512x512 image generated
RESULT: WORKS

Also verified the full requirements-cublas12.txt (incl. sd_embed, optimum-quanto) resolves cleanly in a fresh env — no dependency conflict, no resolver backtracking storm.

Test plan

  • Reproduced the original crash on a local NVIDIA GPU
  • Verified the pinned pair loads SD1.5 single-file + generates an image on GPU
  • Full requirements-cublas12.txt resolves without conflict in a clean env
  • Confirmed all diffusers classes used by backend.py exist in 0.38.0

The diffusers backend tracked git+https://github.com/huggingface/diffusers
(main) with an unpinned transformers. transformers v5 restructured
CLIPTextModel and removed the .text_model attribute that diffusers' single
-file loader reads, so loading any single-file Stable Diffusion checkpoint
fails:

    create_diffusers_clip_model_from_ldm (single_file_utils.py)
    position_embedding_dim = model.text_model.embeddings.position_embedding...
    AttributeError: 'CLIPTextModel' object has no attribute 'text_model'

No released diffusers (<=0.38.0) supports transformers v5 - only unreleased
diffusers main does. Because the requirements tracked main plus an unpinned
transformers, every backend image froze whichever pair existed at build
time, and images built once transformers v5 shipped but before diffusers
main caught up are permanently broken.

Pin the last known-good released pair across all requirements files:
diffusers==0.38.0 and transformers==4.57.6. 0.38.0 still exposes every
pipeline backend.py imports (Flux, Wan, Sana, LTX2, Qwen, GGUF), so no
functionality is lost, and builds become reproducible instead of drifting
into the broken window.

Fixes mudler#9979

Assisted-by: Claude:claude-opus-4-8 [Claude Code]
Signed-off-by: Adira Denis Muhando <dennisadira@gmail.com>
@mudler
mudler merged commit 62c99c1 into mudler:master Jun 22, 2026
1 check passed
@localai-bot localai-bot added the bug Something isn't working label Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

diffusers / stablediffusion still broken in v4.3.0 - v4.4.0

3 participants