Diffusers documentation

Pipeline 块

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pipeline 块

ModularPipelineBlocks

class diffusers.ModularPipelineBlocks

< >

( )

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

ModularPipelineBlocks 提供了用于加载和保存流水线块定义的方法。

get_block_state

< >

( state: PipelineState )

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

get_execution_blocks

< >

( **kwargs )

参数

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

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

get_workflow

< >

( workflow_name: str )

参数

  • workflow_name — 要获取的工作流名称。

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

init_pipeline

< >

( 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

< >

( )

参数

  • block_classes — 要使用的块类列表
  • block_names — 每个块的名称前缀列表

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

此类继承自 ModularPipelineBlocks。有关该库为所有 pipeline 块实现的通用方法(例如加载或保存等),请参阅父类文档。

from_blocks_dict

< >

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

参数

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

从块字典创建 SequentialPipelineBlocks 实例。

get_execution_blocks

< >

( **kwargs )

参数

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

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

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

LoopSequentialPipelineBlocks

class diffusers.LoopSequentialPipelineBlocks

< >

( )

参数

  • block_classes — 要使用的块类列表
  • block_names — 每个块的名称前缀列表

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

此类继承自 ModularPipelineBlocks。有关该库为所有 pipeline 块实现的通用方法(例如加载或保存等),请参阅父类文档。

from_blocks_dict

< >

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

参数

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

从块字典创建 LoopSequentialPipelineBlocks 实例。

AutoPipelineBlocks

class diffusers.AutoPipelineBlocks

< >

( )

参数

  • 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 来指定默认块,即在没有触发输入时运行的块

示例:

    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

< >

( **kwargs )

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

ConditionalPipelineBlocks

class diffusers.ConditionalPipelineBlocks

< >

( )

参数

  • block_classes — 要使用的块类列表。其长度必须与 block_names 相同。
  • block_names — 每个块的名称列表。其长度必须与 block_classes 相同。
  • block_trigger_inputs — select_block() 用于确定要运行哪个 block 的输入名称列表。 对于 ConditionalPipelineBlocks,此参数无需与 block_names 和 block_classes 对应。对于 AutoPipelineBlocks,此参数的长度必须与 block_names 和 block_classes 相同,其中每个 元素指定对应 block 的触发输入。
  • default_block_name — 当没有触发输入匹配时,要运行的默认块的名称。 如果为 None,则在未提供触发输入时,可以完全跳过此块。

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

此类继承自 ModularPipelineBlocks。有关该库为所有 pipeline 块实现的通用方法(例如加载或保存等),请参阅父类文档。

get_execution_blocks

< >

( **kwargs ) →

  • ModularPipelineBlocks

参数

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

返回值

  • ModularPipelineBlocks

叶块或已解析的 SequentialPipelineBlocks

  • None:如果此块将被跳过(没有匹配的触发器且没有默认值)

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

递归解析嵌套的 ConditionalPipelineBlocks,直到达到以下任一条件:

  • 叶块(没有 sub_blocks 或 LoopSequentialPipelineBlocks)→ 返回单个 ModularPipelineBlocks
  • SequentialPipelineBlocks → 委托给其 get_execution_blocks(),该方法返回一个包含已解析执行块的 SequentialPipelineBlocks

select_block

< >

( **kwargs ) → str | None

参数

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

返回值

str | None

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

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

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

Update on GitHub