# Blok Pipeline

## ModularPipelineBlocks[[diffusers.ModularPipelineBlocks]]

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

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

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

Kelas dasar untuk semua Blok Pipeline: ConditionalPipelineBlocks, AutoPipelineBlocks, SequentialPipelineBlocks, LoopSequentialPipelineBlocks

[ModularPipelineBlocks](/docs/diffusers/main/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks) menyediakan metode untuk memuat dan menyimpan definisi blok pipeline.

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L590)

Dapatkan semua input dan intermediat dalam satu kamus

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L461)

**Parameter:**

- ****kwargs** : Nama dan nilai input. Hanya input pemicu yang memengaruhi pemilihan blok.

Dapatkan blok yang akan dieksekusi berdasarkan input yang diberikan. Harus diimplementasikan oleh subkelas yang mendukung pemilihan blok kondisional.

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L479)

**Parameter:**

workflow_name : Nama workflow yang akan diambil.

Dapatkan blok eksekusi untuk workflow tertentu. Harus diimplementasikan oleh subkelas yang mendefinisikan `_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)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L568)

buat ModularPipeline, secara opsional terima pretrained_model_name_or_path untuk memuat dari hub.

## SequentialPipelineBlocks[[diffusers.SequentialPipelineBlocks]]

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1044)

**Parameter:**

block_classes : daftar kelas blok yang akan digunakan

block_names : daftar prefiks untuk setiap blok

A Pipeline Blocks yang menggabungkan beberapa kelas pipeline block menjadi satu. Saat dipanggil, blok ini akan memanggil setiap blok secara berurutan.

Kelas ini mewarisi dari [ModularPipelineBlocks](/docs/diffusers/main/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua blok pipeline (seperti memuat atau menyimpan, dll.)

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1116)

**Parameter:**

blocks_dict : Dictionary yang memetakan nama blok ke kelas atau instance blok

**Mengembalikan:**

Instans baru SequentialPipelineBlocks

Membuat instance SequentialPipelineBlocks dari kamus blok.

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1259)

**Parameter:**

- ****kwargs** : Nama dan nilai input. Hanya input pemicu yang memengaruhi pemilihan blok.

**Mengembalikan:**

SequentialPipelineBlocks yang hanya berisi blok-blok yang akan dieksekusi

Dapatkan blok yang akan dieksekusi berdasarkan input yang ditentukan.

Saat traversal berjalan melalui blok-blok berurutan, output antara dari blok yang telah dipecahkan ditambahkan ke input aktif. Artinya, blok kondisional yang bergantung pada nilai antara (misalnya, "jalankan img2img jika image_latents ada") akan dipecahkan dengan benar, selama kondisinya didasarkan pada keberadaan/keberadaan (None atau bukan None), bukan pada nilai aktualnya.

## LoopSequentialPipelineBlocks[[diffusers.LoopSequentialPipelineBlocks]]

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

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

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

**Parameter:**

block_classes : daftar kelas blok yang akan digunakan

block_names : daftar prefiks untuk setiap blok

A Pipeline blocks yang menggabungkan beberapa kelas pipeline block menjadi For Loop. Saat dipanggil, blok ini akan memanggil setiap blok secara berurutan.

Kelas ini mewarisi dari [ModularPipelineBlocks](/docs/diffusers/main/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua blok pipeline (seperti memuat atau menyimpan, dll.)

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1565)

**Parameter:**

blocks_dict : Dictionary yang memetakan nama blok ke instance blok

**Mengembalikan:**

Instans baru LoopSequentialPipelineBlocks

Membuat instance LoopSequentialPipelineBlocks dari kamus blok.

## AutoPipelineBlocks[[diffusers.AutoPipelineBlocks]]

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L983)

**Parameter:**

block_classes : Daftar kelas blok yang akan digunakan. Harus memiliki panjang yang sama dengan `block_names` dan `block_trigger_inputs`.

block_names : Daftar nama untuk setiap blok. Harus memiliki panjang yang sama dengan `block_classes` dan `block_trigger_inputs`.

block_trigger_inputs : Daftar nama input di mana setiap elemen menentukan input pemicu untuk blok yang sesuai. Gunakan `None` untuk menandai blok default.

A Pipeline Blocks yang secara otomatis memilih blok untuk dijalankan berdasarkan keberadaan input pemicu.

Ini adalah versi khusus dari `ConditionalPipelineBlocks` di mana:
- Setiap blok memiliki satu input pemicu yang sesuai (pemetaan 1:1)
- Pemilihan blok bersifat otomatis: blok pertama yang input pemicunya ada akan dipilih
- `block_trigger_inputs` harus memiliki panjang yang sama dengan `block_names` dan `block_classes`
- Gunakan `None` di `block_trigger_inputs` untuk menentukan blok default, yaitu blok yang akan dijalankan jika tidak ada input pemicu

Contoh:
```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
```

Dengan definisi ini:
- Selama `mask_image` disediakan, blok "inpaint" akan dijalankan (terlepas dari apakah `image` disediakan atau tidak)
- Jika `mask_image` tidak diberikan tetapi `image` diberikan, blok "img2img" dijalankan
- Jika tidak, blok "text2img" dijalankan (default, pemicunya adalah `None`)

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L1036)

Pilih blok berdasarkan input pemicu mana yang ada (bukan None).

## ConditionalPipelineBlocks[[diffusers.ConditionalPipelineBlocks]]

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L684)

**Parameter:**

block_classes : Daftar kelas blok yang akan digunakan. Harus memiliki panjang yang sama dengan `block_names`.

block_names : Daftar nama untuk setiap blok. Harus memiliki panjang yang sama dengan `block_classes`.

block_trigger_inputs : Daftar nama input yang digunakan oleh `select_block()` untuk menentukan blok mana yang akan dijalankan. Untuk `ConditionalPipelineBlocks`, ini tidak perlu sesuai dengan `block_names` dan `block_classes`. Untuk `AutoPipelineBlocks`, ini harus memiliki panjang yang sama dengan `block_names` dan `block_classes`, di mana setiap elemen menentukan input pemicu untuk blok yang sesuai.

default_block_name : Nama blok default yang dijalankan ketika tidak ada input pemicu yang cocok. Jika None, blok ini dapat dilewati sepenuhnya ketika tidak ada input pemicu yang diberikan.

A Pipeline Blocks yang memilih secara kondisional blok untuk dijalankan berdasarkan input. Subclass harus mengimplementasikan metode `select_block` untuk mendefinisikan logika pemilihan blok. Saat ini, kami hanya mendukung logika pemilihan berdasarkan ada atau tidaknya input (yaitu, apakah nilainya `None` atau tidak).

Kelas ini mewarisi dari [ModularPipelineBlocks](/docs/diffusers/main/id/api/modular_diffusers/pipeline_blocks#diffusers.ModularPipelineBlocks). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua blok pipeline (seperti memuat atau menyimpan, dll.)

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L874)

**Parameter:**

- ****kwargs** : Nama dan nilai input. Hanya input pemicu yang memengaruhi pemilihan blok.

**Mengembalikan:** - `ModularPipelineBlocks`

Blok daun atau `SequentialPipelineBlocks` yang telah diselesaikan
- `None`: Jika blok ini akan dilewati (tidak ada pemicu yang cocok dan tidak ada default)

Dapatkan blok yang akan dieksekusi berdasarkan input yang diberikan.

Menyelesaikan blok ConditionalPipelineBlocks yang bersarang secara rekursif hingga mencapai salah satu dari:
- Blok daun (tanpa sub_blocks atau LoopSequentialPipelineBlocks) → mengembalikan satu `ModularPipelineBlocks`
- A `SequentialPipelineBlocks` → mendelegasikan ke `get_execution_blocks()` yang mengembalikan
a `SequentialPipelineBlocks` yang berisi blok eksekusi yang telah dipecah

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

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/modular_pipelines/modular_pipeline.py#L830)

**Parameter:**

- ****kwargs** : Nama input pemicu dan nilai-nilainya dari state.

**Mengembalikan:** `str | None`

Nama blok yang akan dijalankan, atau None untuk menggunakan default/melompati.

Pilih blok yang akan dijalankan berdasarkan input pemicu. Subkelas harus mengimplementasikan metode ini untuk mendefinisikan logika pemilihan blok.

Catatan: Ketika input pemicu mencakup output antara dari blok sebelumnya, logika seleksi harus hanya bergantung pada ada atau tidaknya input (yaitu, apakah nilainya None atau bukan), bukan pada nilai aktualnya. Hal ini karena `get_execution_blocks()` menyelesaikan kondisi secara statis dengan mempropagasi nama output antara tanpa nilai runtime-nya.

