Files
diffusers/docs/source/en/modular_diffusers/modular_diffusers_states.md
Steven Liu 38740ddbd8
Some checks are pending
Build documentation / build (push) Waiting to run
Run dependency tests / check_dependencies (push) Waiting to run
Run Flax dependency tests / check_flax_dependencies (push) Waiting to run
Run Torch dependency tests / check_torch_dependencies (push) Waiting to run
Fast GPU Tests on main / Setup Torch Pipelines CUDA Slow Tests Matrix (push) Waiting to run
Fast GPU Tests on main / Torch Pipelines CUDA Tests (push) Blocked by required conditions
Fast GPU Tests on main / Torch CUDA Tests (lora) (push) Waiting to run
Fast GPU Tests on main / Torch CUDA Tests (models) (push) Waiting to run
Fast GPU Tests on main / Torch CUDA Tests (others) (push) Waiting to run
Fast GPU Tests on main / Torch CUDA Tests (schedulers) (push) Waiting to run
Fast GPU Tests on main / Torch CUDA Tests (single_file) (push) Waiting to run
Fast GPU Tests on main / PyTorch Compile CUDA tests (push) Waiting to run
Fast GPU Tests on main / PyTorch xformers CUDA tests (push) Waiting to run
Fast GPU Tests on main / Examples PyTorch CUDA tests on Ubuntu (push) Waiting to run
Fast tests on main / ${{ matrix.config.name }} (map[framework:pytorch image:diffusers/diffusers-pytorch-cpu name:Fast PyTorch CPU tests on Ubuntu report:torch_cpu runner:aws-general-8-plus]) (push) Waiting to run
Fast tests on main / ${{ matrix.config.name }} (map[framework:pytorch_examples image:diffusers/diffusers-pytorch-cpu name:PyTorch Example CPU tests on Ubuntu report:torch_example_cpu runner:aws-general-8-plus]) (push) Waiting to run
Secret Leaks / trufflehog (push) Waiting to run
Update Diffusers metadata / update_metadata (push) Waiting to run
[docs] Modular diffusers (#11931)
* start

* draft

* state, pipelineblock, apis

* sequential

* fix links

* new

* loop, auto

* fix

* pipeline

* guiders

* components manager

* reviews

* update

* update

* update

---------

Co-authored-by: DN6 <dhruv.nair@gmail.com>
2025-08-12 18:50:20 +05:30

3.3 KiB

States

Blocks rely on the [~modular_pipelines.PipelineState] and [~modular_pipelines.BlockState] data structures for communicating and sharing data.

State Description
[~modular_pipelines.PipelineState] Maintains the overall data required for a pipeline's execution and allows blocks to read and update its data.
[~modular_pipelines.BlockState] Allows each block to perform its computation with the necessary data from inputs

This guide explains how states work and how they connect blocks.

PipelineState

The [~modular_pipelines.PipelineState] is a global state container for all blocks. It maintains the complete runtime state of the pipeline and provides a structured way for blocks to read from and write to shared data.

There are two dict's in [~modular_pipelines.PipelineState] for structuring data.

  • The values dict is a mutable state containing a copy of user provided input values and intermediate output values generated by blocks. If a block modifies an input, it will be reflected in the values dict after calling set_block_state.
PipelineState(
  values={
    'prompt': 'a cat'
    'guidance_scale': 7.0
    'num_inference_steps': 25
    'prompt_embeds': Tensor(dtype=torch.float32, shape=torch.Size([1, 1, 1, 1]))
    'negative_prompt_embeds': None
  },
)

BlockState

The [~modular_pipelines.BlockState] is a local view of the relevant variables an individual block needs from [~modular_pipelines.PipelineState] for performing it's computations.

Access these variables directly as attributes like block_state.image.

BlockState(
    image: <PIL.Image.Image image mode=RGB size=512x512 at 0x7F3ECC494640>
)

When a block's __call__ method is executed, it retrieves the [BlockState] with self.get_block_state(state), performs it's operations, and updates [~modular_pipelines.PipelineState] with self.set_block_state(state, block_state).

def __call__(self, components, state):
    # retrieve BlockState
    block_state = self.get_block_state(state)

    # computation logic on inputs

    # update PipelineState
    self.set_block_state(state, block_state)
    return components, state

State interaction

[~modular_pipelines.PipelineState] and [~modular_pipelines.BlockState] interaction is defined by a block's inputs, and intermediate_outputs.

  • inputs, a block can modify an input - like block_state.image - and this change can be propagated globally to [~modular_pipelines.PipelineState] by calling set_block_state.
  • intermediate_outputs, is a new variable that a block creates. It is added to the [~modular_pipelines.PipelineState]'s values dict and is available as for subsequent blocks or accessed by users as a final output from the pipeline.