---
title: "diffusers Breaking Changes on PyPI | Since.dev"
description: "What each diffusers release removed, renamed or changed: 596 breaking changes in 3 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/diffusers
last_updated: 2026-10-06
---

# diffusers breaking changes

Every breaking API change we have recorded in diffusers on PyPI: 596 breaking changes in 3 versions. Below are its newest 3 versions, removals and renames first, each with its source.

Newest change October 6, 2026

## 0.41.0

445 breaking changes, first published October 6, 2026.

- **Removed** `force_upcast`  

The force_upcast option was removed from the Flux2 autoencoder. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.41.0)
- **Removed** `Lumina2Text2ImgPipeline`  

The Lumina2Text2ImgPipeline alias was removed as part of removing deprecated code paths. Use Lumina2Pipeline instead. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.41.0)
- **Removed** `LuminaText2ImgPipeline`  

The LuminaText2ImgPipeline alias was removed as part of removing deprecated code paths. Use LuminaPipeline instead. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.41.0)
- **Default changed** `ModularPipeline.save_pretrained`  

The overwrite_modular_index argument of save_pretrained now defaults to True instead of False. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.41.0)
- **Signature changed** `diffusers.AceStepPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: Union\[str, List\[str\]\] = None, lyrics: Union\[str, List\[str\]\] = '', audio_duration: float = 60.0, vocal_language: Union\[str, List\[str\]\] = 'en', num_inference_steps: int = 8, guidance_scale: float = 7.0, shift... [pypi.org](https://pypi.org/project/diffusers/0.41.0/)
- **Signature changed** `diffusers.AllegroTransformer3DModel.forward`  

Was def forward(self, hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor, timestep: torch.LongTensor, attention_mask: torch.Tensor | None = None, encoder_attention_mask: torch.Tensor | None = None, image_rotary_emb... [pypi.org](https://pypi.org/project/diffusers/0.41.0/)
- **Signature changed** `diffusers.AnimateDiffControlNetPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: str | list\[str\] = None, num_frames: int | None = 16, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, guidance_scale: float = 7.5, negative_prompt: str | list\[str\] | None =... [pypi.org](https://pypi.org/project/diffusers/0.41.0/)
- **Signature changed** `diffusers.AnimateDiffPAGPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: str | list\[str\] | None = None, num_frames: int | None = 16, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, guidance_scale: float = 7.5, negative_prompt: str | list\[str\] |... [pypi.org](https://pypi.org/project/diffusers/0.41.0/)
- **Signature changed** `diffusers.AnimateDiffPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: str | list\[str\] | None = None, num_frames: int | None = 16, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, guidance_scale: float = 7.5, negative_prompt: str | list\[str\] |... [pypi.org](https://pypi.org/project/diffusers/0.41.0/)
- **Signature changed** `diffusers.AnimateDiffSDXLPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: str | list\[str\] = None, prompt_2: str | list\[str\] | None = None, num_frames: int = 16, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list\[int\] = None, sigmas... [pypi.org](https://pypi.org/project/diffusers/0.41.0/)

And 435 more in this version.

## 0.40.0

116 breaking changes, first published August 20, 2026.

- **Removed** `Flax*`  

All Flax classes and the flax extras are gone; code using them must move to PyTorch or pin the older release. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.40.0)
- **Behavior changed** `DiffusionPipeline.device`  

DiffusionPipeline.device is now deduced differently for pipelines split across devices. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.40.0)
- **Behavior changed** `DiffusionPipeline.from_pretrained`  

Kernels are no longer downloaded automatically; users must request them. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.40.0)
- **Behavior changed** `get_peft_kwargs`  

Mixed-rank LoRAs with no alpha information now use alpha equal to rank, so existing such LoRAs produce different results. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.40.0)
- **Signature changed** `diffusers.AceStepPipeline`  

Was class AceStepPipeline(DiffusionPipeline); now class AceStepPipeline(DiffusionPipeline, AceStepLoraLoaderMixin). [pypi.org](https://pypi.org/project/diffusers/0.40.0/)
- **Signature changed** `diffusers.AceStepPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: Union\[str, List\[str\]\] = None, lyrics: Union\[str, List\[str\]\] = '', audio_duration: float = 60.0, vocal_language: Union\[str, List\[str\]\] = 'en', num_inference_steps: int = 8, guidance_scale: float = 7.0, shift... [pypi.org](https://pypi.org/project/diffusers/0.40.0/)
- **Signature changed** `diffusers.AceStepTransformer1DModel`  

Was class AceStepTransformer1DModel(ModelMixin, ConfigMixin, AttentionMixin, CacheMixin); now class AceStepTransformer1DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, AttentionMixin, CacheMixin). [pypi.org](https://pypi.org/project/diffusers/0.40.0/)
- **Signature changed** `diffusers.AceStepTransformer1DModel.forward`  

Was def forward(self, hidden_states: torch.Tensor, timestep: torch.Tensor, timestep_r: torch.Tensor, encoder_hidden_states: torch.Tensor, context_latents: torch.Tensor, return_dict: bool = True) -> Union\[torch.Tensor... [pypi.org](https://pypi.org/project/diffusers/0.40.0/)
- **Signature changed** `diffusers.ComponentsManager.enable_auto_cpu_offload`  

Was def enable_auto_cpu_offload(self, device: str | int | torch.device = None, memory_reserve_margin='3GB'); now def enable_auto_cpu_offload(self, device: str | int | torch.device = None, memory_reserve_margin='3GB', offload_strategy=None). [pypi.org](https://pypi.org/project/diffusers/0.40.0/)
- **Signature changed** `diffusers.Cosmos3OmniPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: str | list\[str\], negative_prompt: str | list\[str\] | None = None, image: torch.Tensor | None = None, video: list\[Image.Image\] | torch.Tensor | np.ndarray | None = None, condition_frame_indexes_vision... [pypi.org](https://pypi.org/project/diffusers/0.40.0/)

And 106 more in this version.

## 0.39.0

35 breaking changes, first published July 3, 2026.

- **Removed**  

The minimum supported torch version is now 2.6, so code running on older torch versions must upgrade torch to 2.6 or later. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.39.0)
- **Removed** `txt_seq_lens`  

The txt_seq_lens argument was removed from the Qwen transformer, so calls that pass it must stop passing it. [github.com](https://github.com/huggingface/diffusers/releases/tag/v0.39.0)
- **Signature changed** `diffusers.AutoencoderKLMochi.forward`  

Was def forward(self, sample: torch.Tensor, sample_posterior: bool = False, return_dict: bool = True, generator: torch.Generator | None = None) -> torch.Tensor | torch.Tensor; now def forward(self, sample: torch.Tensor, sample_posterior... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BlockRefinementScheduler.set_timesteps`  

Was def set_timesteps(self, num_inference_steps: int, device: str | torch.device | None = None) -> None; now def set_timesteps(self, num_inference_steps: int, device: str | torch.device | None = None, block_length: int | None = None) ->... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BlockRefinementScheduler.step`  

Was def step(self, model_output: torch.Tensor, timestep: int | torch.Tensor, sample: torch.LongTensor, \*, mask_token_id: int, temperature: float = 0.0, top_p: float | None = None, top_k: int | None = None, sampling_method: str = 'auto'... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BlockRefinementSchedulerOutput.__init__`  

Was def \_\_init\_\_(self, prev_sample: torch.LongTensor, transfer_index: torch.BoolTensor, editing_transfer_index: torch.BoolTensor, sampled_tokens: torch.LongTensor, sampled_probs: torch.Tensor) -> None; now def \_\_init\_\_(self, prev_sample... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BriaFiboEditPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: Union\[str, List\[str\]\] = None, image: Optional\[PipelineImageInput\] = None, mask: Optional\[PipelineMaskInput\] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 30... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BriaFiboEditPipeline.check_inputs`  

Was def check_inputs(self, prompt, seed, image, mask, height, width, negative_prompt=None, prompt_embeds=None, negative_prompt_embeds=None, callback_on_step_end_tensor_inputs=None, max_sequence_length=None); now def check_inputs(self... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BriaFiboEditPipeline.encode_prompt`  

Was def encode_prompt(self, prompt: Union\[str, List\[str\]\], device: torch.device | None = None, num_images_per_prompt: int = 1, guidance_scale: float = 5, negative_prompt: Optional\[Union\[str, List\[str\]\]\] = None, prompt_embeds... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)
- **Signature changed** `diffusers.BriaFiboPipeline.__call__`  

Was def \_\_call\_\_(self, prompt: str | list\[str\] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 30, timesteps: list\[int\] = None, guidance_scale: float = 5, negative_prompt: str | list\[str\] | None =... [pypi.org](https://pypi.org/project/diffusers/0.39.0/)

And 25 more in this version.

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
