用途:当用户已写好(或想写)一个 ModularPipelineBlocks 子类,并希望把它打包成可上传到 Hub 的小型仓库,供他人通过 from_pretrained 加载时,使用此技能。它只负责打包已写好的块,不负责编写块类本身,也不用于运行或查看已有模块化流水线。
主要能力:diffusers-cli custom_blocks 会解析指定 Python 文件,用 AST 扫描顶层类定义,收集所有继承自 ModularPipelineBlocks 的类;若未指定类名则取第一个,并记录其余类名。随后通过 importlib 加载该文件(会实际执行模块,需确保文件可信),无参实例化所选类,并调用 .save_pretrained(os.getcwd()),在当前目录生成可上传的目录,包含块源码、带 auto_map 的 modular_config.json,以及该块类 save_pretrained 写出的产物。
使用方式:命令为 diffusers-cli custom_blocks [--block_module_name <file.py>] [--block_class_name <ClassName>]。--block_module_name 默认当前目录的 block.py;--block_class_name 可选,文件含多个块时用于指定。打包后可用 hf upload <repo> . 上传,消费者可用 ModularPipeline.from_pretrained(<repo>, trust_remote_code=True),或通过 diffusers-cli schema / run 配合 --trust-remote-code 使用。
适用场景:为自定义模块化块发布到 Hub、搭建新的模块化流水线仓库、生成 from_pretrained 所需的磁盘布局。
限制:AST 扫描只识别字面基类名 ModularPipelineBlocks,别名导入不会被识别;文件语法错误会报 Could not parse;类名不匹配会列出可用类;无匹配类时可能触发 IndexError;块类必须能无参构造,若需要 init 参数需改为在 call 时从 state/components 获取或硬编码默认值。若 diffusers-cli 不在 PATH,可用 pip install -e . --force-reinstall --no-deps 重装并检查 which diffusers-cli。