# Pipeline 块

## ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

#### diffusers.ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

```python
diffusers.ModularPipelineBlocks()
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L392)

所有 Pipeline Blocks 的基类：ConditionalPipelineBlocks、AutoPipelineBlocks、SequentialPipelineBlocks、LoopSequentialPipelineBlocks

[ModularPipelineBlocks](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) 提供了用于加载和保存流水线块定义的方法。

#### get_block_state[[diffusers.ModularPipelineBlocks.get_block_state]]

```python
get_block_state(state: PipelineState)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L590)

在一个字典中获取所有输入和中间值

#### get_execution_blocks[[diffusers.ModularPipelineBlocks.get_execution_blocks]]

```python
get_execution_blocks(**kwargs)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L461)

**参数：**

- ****kwargs**：输入名称和值。只有触发输入会影响块的选择。

获取在给定输入下将执行的块。支持条件块选择的子类必须实现此方法。

#### get_workflow[[diffusers.ModularPipelineBlocks.get_workflow]]

```python
get_workflow(workflow_name: str)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L479)

**参数：**

workflow_name : 要获取的工作流名称。

获取特定工作流的执行块。必须由定义了 `_workflow_map` 的子类实现。

#### init_pipeline[[diffusers.ModularPipelineBlocks.init_pipeline]]

```python
init_pipeline(pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L568)

创建一个 ModularPipeline，可选地接受 pretrained_model_name_or_path 以从 hub 加载。

## SequentialPipelineBlocks[[diffusers.SequentialPipelineBlocks]]

#### diffusers.SequentialPipelineBlocks[[diffusers.SequentialPipelineBlocks]]

```python
diffusers.SequentialPipelineBlocks()
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1044)

**参数：**

block_classes : 要使用的块类列表

block_names : 每个块的 prefixes 列表

A Pipeline Blocks 将多个 pipeline block 类组合为一个。调用时，它会按顺序调用每个 block。

此类继承自 [ModularPipelineBlocks](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)。请查阅父类文档，了解该库为所有 pipeline 块实现的通用方法（例如加载或保存等）。

#### from_blocks_dict[[diffusers.SequentialPipelineBlocks.from_blocks_dict]]

```python
from_blocks_dict(blocks_dict: dict[str, typing.Any], description: str | None = None)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1116)

**参数：**

blocks_dict : 将块名称映射到块类或实例的字典

**返回值：**

新的 SequentialPipelineBlocks 实例

从块字典创建 SequentialPipelineBlocks 实例。

#### get_execution_blocks[[diffusers.SequentialPipelineBlocks.get_execution_blocks]]

```python
get_execution_blocks(**kwargs)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1259)

**参数：**

- ****kwargs**：输入名称和值。只有触发输入会影响块的选择。

**返回值：**

仅包含将执行的块的 SequentialPipelineBlocks

获取在给定指定输入的情况下将执行的块。

当遍历按顺序处理各个块时，已解析块的中间输出会被添加到活动输入中。这意味着，只要条件是基于存在性（即 None 或非 None）而非实际值，依赖于中间结果的有条件块（例如“如果 image_latents 存在，则运行 img2img”）就能正确解析。

## LoopSequentialPipelineBlocks[[diffusers.LoopSequentialPipelineBlocks]]

#### diffusers.LoopSequentialPipelineBlocks[[diffusers.LoopSequentialPipelineBlocks]]

```python
diffusers.LoopSequentialPipelineBlocks()
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1404)

**参数：**

block_classes : 要使用的块类列表

block_names : 每个块的 prefixes 列表

Pipeline 是一种将多个 pipeline 块类组合到 For Loop 中的块。调用时，它会按顺序调用每个块。

此类继承自 [ModularPipelineBlocks](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)。请查阅父类文档，了解该库为所有 pipeline 块实现的通用方法（例如加载或保存等）。

#### from_blocks_dict[[diffusers.LoopSequentialPipelineBlocks.from_blocks_dict]]

```python
from_blocks_dict(blocks_dict: dict[str, typing.Any])
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1565)

**参数：**

blocks_dict : 将块名称映射到块实例的字典

**返回值：**

新的 LoopSequentialPipelineBlocks 实例

从块字典创建 LoopSequentialPipelineBlocks 实例。

## AutoPipelineBlocks[[diffusers.AutoPipelineBlocks]]

#### diffusers.AutoPipelineBlocks[[diffusers.AutoPipelineBlocks]]

```python
diffusers.AutoPipelineBlocks()
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L983)

**参数：**

block_classes : 要使用的块类列表。其长度必须与 `block_names` 和 `block_trigger_inputs` 相同。

block_names : 每个块的名称列表。其长度必须与 `block_classes` 和 `block_trigger_inputs` 相同。

block_trigger_inputs : 输入名称列表，其中每个元素指定对应块的触发输入。使用 `None` 标记默认块。

Pipeline 块会根据触发输入的存在情况，自动选择要运行的块。

这是 `ConditionalPipelineBlocks` 的一个专用版本，其中：
- 每个块都有一个对应的触发输入（1:1 映射）
- 块选择是自动的：第一个触发输入存在的块会被选中
- `block_trigger_inputs` 的长度必须与 `block_names` 和 `block_classes` 相同
- 在 `block_trigger_inputs` 中使用 `None` 来指定默认块，即在没有触发输入时将运行的块

示例：
```python
    class MyAutoBlock(AutoPipelineBlocks):
        block_classes = [InpaintEncoderBlock, ImageEncoderBlock, TextEncoderBlock]
        block_names = ["inpaint", "img2img", "text2img"]
        block_trigger_inputs = ["mask_image", "image", None]  # text2img is the default
```

使用此定义：
- 只要提供了 `mask_image`，"inpaint" 块就会执行（无论是否提供了 `image`）。
- 如果未提供 `mask_image` 但提供了 `image`，则会运行 "img2img" 块
- 否则，将执行 "text2img" 块（默认值，触发器为 `None`）

#### select_block[[diffusers.AutoPipelineBlocks.select_block]]

```python
select_block(**kwargs)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L1036)

根据哪个触发输入存在（不为 None）来选择块。

## ConditionalPipelineBlocks[[diffusers.ConditionalPipelineBlocks]]

#### diffusers.ConditionalPipelineBlocks[[diffusers.ConditionalPipelineBlocks]]

```python
diffusers.ConditionalPipelineBlocks()
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L684)

**参数：**

block_classes : 要使用的块类列表。其长度必须与 `block_names` 相同。

block_names : 每个块的名称列表。其长度必须与 `block_classes` 相同。

block_trigger_inputs : `select_block()` 用于确定要运行哪个块的输入名称列表。对于 `ConditionalPipelineBlocks`，此列表无需与 `block_names` 和 `block_classes` 对应。对于 `AutoPipelineBlocks`，此列表的长度必须与 `block_names` 和 `block_classes` 相同，其中每个元素指定对应块的触发输入。

default_block_name : 当没有触发输入匹配时，要运行的默认块的名称。如果为 None，则在未提供触发输入时，可以完全跳过此块。

Pipeline Blocks 会根据输入有条件地选择要运行的 block。子类必须实现 `select_block` 方法以定义选择 block 的逻辑。目前，我们仅支持基于输入是否存在（即是否为 `None`）的选择逻辑。

此类继承自 [ModularPipelineBlocks](/docs/diffusers/v0.43.0/zh/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)。请查阅父类文档，了解该库为所有 pipeline 块实现的通用方法（例如加载或保存等）。

#### get_execution_blocks[[diffusers.ConditionalPipelineBlocks.get_execution_blocks]]

```python
get_execution_blocks(**kwargs)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L874)

**参数：**

- ****kwargs**：输入名称和值。只有触发输入会影响块的选择。

**返回：** - `ModularPipelineBlocks`

叶块或已解析的 `SequentialPipelineBlocks`
- `None`：如果此块将被跳过（没有匹配的触发器且没有默认值）

获取给定输入下将执行的块。

递归解析嵌套的 ConditionalPipelineBlocks，直到达到以下任一条件：
- 叶块（没有 sub_blocks 或 LoopSequentialPipelineBlocks）→ 返回单个 `ModularPipelineBlocks`
- `SequentialPipelineBlocks` → 委托给其 `get_execution_blocks()`，该方法返回
一个包含已解析执行块的 `SequentialPipelineBlocks`

#### select_block[[diffusers.ConditionalPipelineBlocks.select_block]]

```python
select_block(**kwargs)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/modular_pipelines/modular_pipeline.py#L830)

**参数：**

- ****kwargs** : 来自 state 的触发器输入名称及其值。

**返回：** `str | None`

要运行的块名称，或 None 以使用默认值/跳过。

根据触发器输入选择要运行的块。子类必须实现此方法以定义选择块的逻辑。

注意：当触发输入包含来自前面块的中间输出时，选择逻辑应仅取决于该输入是否存在（即是否为 None），而不取决于其实际值。这是因为 `get_execution_blocks()` 通过传播中间输出名称（而不传播其运行时值）来静态解析条件。

