Pipeline 블록
ModularPipelineBlocks
모든 Pipeline Blocks의 기본 클래스: ConditionalPipelineBlocks, AutoPipelineBlocks, SequentialPipelineBlocks, LoopSequentialPipelineBlocks
ModularPipelineBlocks는 파이프라인 블록의 정의를 로드하고 저장하는 메서드를 제공합니다.
모든 입력과 중간 결과를 하나의 사전으로 가져오기
입력에 따라 실행될 블록을 가져옵니다. 조건부 블록 선택을 지원하는 하위 클래스에서 구현해야 합니다.
_workflow_map를 정의하는 하위 클래스에서 구현해야 합니다. 특정 워크플로우의 실행 블록을 가져옵니다.
init_pipeline
< source >( pretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = None )
ModularPipeline를 생성하고, 필요에 따라 pretrained_model_name_or_path를 받아 hub에서 로드합니다.
SequentialPipelineBlocks
class diffusers.SequentialPipelineBlocks
< source >( )
여러 pipeline block 클래스를 하나로 결합하는 Pipeline Blocks입니다. 호출되면 각 블록을 순서대로 호출합니다.
이 클래스는 ModularPipelineBlocks에서 상속됩니다. 라이브러리가 모든 파이프라인 블록에 대해 구현하는 일반적 메서드(로드, 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.
from_blocks_dict
< source >( blocks_dict: dictdescription: str | None = None )
블록의 사전에서 SequentialPipelineBlocks 인스턴스를 생성합니다.
지정된 입력에 따라 실행될 블록을 가져옵니다.
탐색이 순차적인 블록을 순회하면서, 해결된 블록의 중간 출력은 활성 입력에 추가됩니다. 이는 중간 값에 의존하는 조건부 블록(예: “image_latents가 존재하면 img2img 실행”)이 올바르게 해결되도록 보장합니다. 단, 조건이 실제 값이 아닌 존재/부재(None 또는 None이 아닌 값)에 기반해야 합니다.
LoopSequentialPipelineBlocks
class diffusers.LoopSequentialPipelineBlocks
< source >( )
여러 pipeline block 클래스를 For Loop로 결합하는 Pipeline block입니다. 호출되면 각 block을 순서대로 호출합니다.
이 클래스는 ModularPipelineBlocks에서 상속됩니다. 라이브러리가 모든 파이프라인 블록에 대해 구현하는 일반적 메서드(로드, 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.
LoopSequentialPipelineBlocks 인스턴스를 블록 사전에서 생성합니다.
AutoPipelineBlocks
class diffusers.AutoPipelineBlocks
< source >( )
트리거 입력의 존재에 따라 실행할 블록을 자동으로 선택하는 Pipeline Blocks입니다.
ConditionalPipelineBlocks의 특수화된 버전으로, 다음과 같습니다:
- 각 블록에는 하나의 대응하는 트리거 입력이 있습니다(1:1 매핑)
- Block selection은 자동으로 수행됩니다: trigger 입력이 존재하는 첫 번째 블록이 선택됩니다
block_trigger_inputs는block_names와block_classes와 동일한 길이를 가져야 합니다block_trigger_inputs에None을(를) 사용하여 기본 블록을 지정합니다. 즉, 트리거 입력이 없는 경우 실행되는 블록입니다.
예:
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)
None가 아닌 트리거 입력이 존재하는지에 따라 블록을 선택합니다.
ConditionalPipelineBlocks
class diffusers.ConditionalPipelineBlocks
< source >( )
매개변수
- 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에서 상속됩니다. 라이브러리가 모든 파이프라인 블록에 대해 구현하는 일반적 메서드(로드, 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.
get_execution_blocks
< source >( **kwargs ) →
ModularPipelineBlocks
입력에 따라 실행될 블록을 가져옵니다.
ConditionalPipelineBlocks가 더 이상 없거나 다음 중 하나에 도달할 때까지 재귀적으로 중첩된 ConditionalPipelineBlocks를 해결합니다:
- A leaf block (no sub_blocks or LoopSequentialPipelineBlocks) → returns single
ModularPipelineBlocks SequentialPipelineBlocks→get_execution_blocks()에 위임하여, 해결된 실행 블록을 포함하는SequentialPipelineBlocks를 반환합니다
select_block
< source >( **kwargs ) → str | None
트리거 입력을 기반으로 실행할 블록을 선택합니다. 서브클래스는 블록 선택 로직을 정의하기 위해 이 메서드를 구현해야 합니다.
Note: trigger 입력에 이전 블록의 중간 출력이 포함된 경우, 선택 로직은 입력의 실제 값이 아니라 존재 여부(즉, None인지 여부)에만 의존해야 합니다. 이는 get_execution_blocks()가 런타임 값 없이 중간 출력 이름을 전파하여 조건을 정적으로 해석하기 때문입니다.