# Pipeline 블록

## ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

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

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

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L391)

모든 Pipeline Blocks의 기본 클래스: ConditionalPipelineBlocks, AutoPipelineBlocks, SequentialPipelineBlocks, LoopSequentialPipelineBlocks

[ModularPipelineBlocks](/docs/diffusers/main/ko/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#L589)

모든 입력과 중간 결과를 하나의 사전으로 가져오기

#### 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#L460)

**매개변수:**

- ****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#L478)

**매개변수:**

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#L567)

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#L1041)

**매개변수:**

block_classes : 사용할 블록 클래스 목록

block_names : 각 블록에 대한 접두사 목록

여러 pipeline block 클래스를 하나로 결합하는 Pipeline Blocks입니다. 호출되면 각 블록을 순서대로 호출합니다.

이 클래스는 [ModularPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)에서 상속됩니다. 라이브러리가 모든 파이프라인 블록에 대해 구현하는 일반적 메서드(로드, 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.

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

```python
from_blocks_dict(blocks_dict: dict, description: str | None = None)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1113)

**매개변수:**

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#L1256)

**매개변수:**

- ****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#L1401)

**매개변수:**

block_classes : 사용할 블록 클래스 목록

block_names : 각 블록에 대한 접두사 목록

여러 개의 pipeline block 클래스를 For Loop로 결합하는 Pipeline block입니다. 호출되면 각 block을 순서대로 호출합니다.

이 클래스는 [ModularPipelineBlocks](/docs/diffusers/main/ko/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks)에서 상속됩니다. 라이브러리가 모든 파이프라인 블록에 대해 구현하는 일반적 메서드(로드, 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.

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

```python
from_blocks_dict(blocks_dict: dict)
```

[소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1562)

**매개변수:**

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#L980)

**매개변수:**

block_classes : 사용할 블록 클래스 목록. `block_names` 및 `block_trigger_inputs`와 동일한 길이를 가져야 합니다.

block_names : 각 블록의 이름 목록. `block_classes`와 `block_trigger_inputs`와 동일한 길이를 가져야 합니다.

block_trigger_inputs : 각 요소가 해당 블록의 트리거 입력을 지정하는 입력 이름 목록. 기본 블록은 `None`으로 표시합니다.

트리거 입력의 존재에 따라 실행할 블록을 자동으로 선택하는 Pipeline Blocks입니다.

`ConditionalPipelineBlocks`의 특수화된 버전으로, 다음과 같습니다:
- 각 블록에는 하나의 대응하는 트리거 입력이 있습니다(1:1 매핑)
- Block selection은 자동으로 수행됩니다: trigger 입력이 존재하는 첫 번째 블록이 선택됩니다
- `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#L1033)

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#L681)

**매개변수:**

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/ko/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#L871)

**매개변수:**

- ****kwargs** : 입력 이름과 값. 블록 선택에는 트리거 입력만 영향을 줍니다.

**반환값:** - `ModularPipelineBlocks`

리프 블록 또는 해결된 `SequentialPipelineBlocks`
- `None`: 이 블록이 건너뛰어지는 경우 (트리거가 일치하지 않고 기본값도 없는 경우)

입력에 따라 실행될 블록을 가져옵니다.

ConditionalPipelineBlocks가 더 이상 없거나 다음 중 하나에 도달할 때까지 재귀적으로 중첩된 ConditionalPipelineBlocks를 해결합니다:
- A leaf block (no sub_blocks or LoopSequentialPipelineBlocks) → returns single `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#L827)

**매개변수:**

- ****kwargs** : 상태(state)에서 트리거 입력 이름과 해당 값

**반환값:** `str | None`

실행할 블록의 이름 또는 기본값 사용/스킵을 위해 None

트리거 입력을 기반으로 실행할 블록을 선택합니다. 서브클래스는 이 메서드를 구현하여 블록 선택 로직을 정의해야 합니다.

Note: trigger 입력에 이전 블록의 중간 출력이 포함된 경우, 선택 로직은 입력의 실제 값이 아니라 존재 여부(즉, None인지 여부)에만 의존해야 합니다. 이는 `get_execution_blocks()`가 런타임 값 없이 중간 출력 이름을 전파하여 조건을 정적으로 해석하기 때문입니다.

