# パイプラインブロック

## ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

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

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

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L392)

すべての Pipeline Blocks の基底クラス: ConditionalPipelineBlocks、AutoPipelineBlocks、SequentialPipelineBlocks、LoopSequentialPipelineBlocks

[ModularPipelineBlocks](/docs/diffusers/main/ja/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/main/src/diffusers/modular_pipelines/modular_pipeline.py#L590)

すべての入力と中間結果を1つの辞書に格納する

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

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

[ソース](https://github.com/huggingface/diffusers/blob/main/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/main/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/main/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/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1044)

**パラメータ:**

block_classes : 使用するブロッククラスのリスト

block_names : 各ブロックのプレフィックスのリスト

複数のパイプラインブロッククラスを1つにまとめるPipeline Blocksです。呼び出されると、各ブロックが順番に呼び出されます。

このクラスは[ModularPipelineBlocks](/docs/diffusers/main/ja/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)を継承しています。ライブラリがすべてのパイプラインブロックに対して実装している汎用的なメソッド（読み込みや保存など）については、スーパークラスのドキュメントを参照してください。

#### 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/main/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/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1259)

**パラメータ:**

- ****kwargs** : 入力名と値。ブロックの選択に影響するのはトリガー入力のみです。

**戻り値:**

実行されるブロックのみを含むSequentialPipelineBlocks

指定された入力に基づいて実行されるブロックを取得します。

トラバーサルがシーケンシャルなブロックを順に処理する際、解決済みのブロックからの中間出力がアクティブな入力に追加されます。これにより、中間出力に依存する条件付きブロック（例：「image_latents が存在する場合に img2img を実行する」）は、条件が実際の値ではなく存在/不在（None か None 以外か）に基づいている限り、正しく解決されます。

## LoopSequentialPipelineBlocks[[diffusers.LoopSequentialPipelineBlocks]]

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

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

[ソース](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1404)

**パラメータ:**

block_classes : 使用するブロッククラスのリスト

block_names : 各ブロックのプレフィックスのリスト

複数のパイプラインブロッククラスを For Loop に結合する Pipeline ブロックです。呼び出されると、各ブロックが順番に呼び出されます。

このクラスは[ModularPipelineBlocks](/docs/diffusers/main/ja/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)を継承しています。ライブラリがすべてのパイプラインブロックに対して実装している汎用的なメソッド（読み込みや保存など）については、スーパークラスのドキュメントを参照してください。

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

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

[ソース](https://github.com/huggingface/diffusers/blob/main/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/main/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 Blocks です。

これは`ConditionalPipelineBlocks`の特殊なバージョンであり、以下が当てはまります:
- 各ブロックには、対応するトリガー入力（1対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` が提供されている限り、`image` が提供されているかどうかに関わらず、"inpaint" ブロックが実行されます。
- `mask_image` が指定されておらず、`image` が指定されている場合、"img2img" ブロックが実行されます
- それ以外の場合、"text2img" ブロックが実行されます（デフォルト、トリガーは `None`）。

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

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

[ソース](https://github.com/huggingface/diffusers/blob/main/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/main/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は、入力に基づいて実行するブロックを条件付きで選択するブロックです。サブクラスは、ブロックを選択するロジックを定義するために`select_block`メソッドを実装する必要があります。現在サポートされている選択ロジックは、入力の有無（つまり、`None`かどうか）に基づくものです。

このクラスは[ModularPipelineBlocks](/docs/diffusers/main/ja/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)を継承しています。ライブラリがすべてのパイプラインブロックに対して実装している汎用的なメソッド（読み込みや保存など）については、スーパークラスのドキュメントを参照してください。

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

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

[ソース](https://github.com/huggingface/diffusers/blob/main/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/main/src/diffusers/modular_pipelines/modular_pipeline.py#L830)

**パラメータ:**

- ****kwargs** : stateからのトリガー入力名とその値。

**戻り値:** `str | None`

実行するブロックの名前、またはデフォルトを使用/スキップする場合はNone。

トリガー入力に基づいて実行するブロックを選択します。サブクラスは、ブロックの選択ロジックを定義するために、このメソッドを実装する必要があります。

Note: トリガー入力に以前のブロックからの中間出力が含まれる場合、選択ロジックは入力の有無（つまり、None かどうか）にのみ依存すべきであり、実際の値には依存すべきではありません。これは、`get_execution_blocks()`が実行時の値なしで中間出力の名前を伝播させることで、条件を静的に解決するためです。

