ComfyUI-YogurtNodes-LingBotVideo
ComfyUI custom nodes for local LingBot Video inference.
Nodes (4)
Running LingBot T2I, T2V, and TI2V
The 60 GB video model your 24 GB card can actually run
Prompts as structured JSON
LingBot's 27B prompt engineer
ComfyUI-YogurtNodes-LingBotVideo
LingBot-Video 的 ComfyUI 本地推理节点,支持:
- Dense 1.3B 与 MoE 30B-A3B
- 文生图(T2I)
- 文生视频(T2V)
- 图文生视频(TI2V)
- Qwen3.6-27B + LingBot LoRA Prompt Rewriter
- 24GB 显卡上的 MoE block swap
- 显式下载开关;默认严格使用本地模型
安装
将本项目放入 ComfyUI 的 custom_nodes:
ComfyUI/
└── custom_nodes/
└── ComfyUI-YogurtNodes-LingBotVideo/
使用 ComfyUI 实际运行的 Python 环境 安装依赖:
pip install -r custom_nodes/ComfyUI-YogurtNodes-LingBotVideo/requirements.txt
依赖使用范围约束,不锁死补丁版本。插件基于 transformers>=4.57.0,<5 实现,不要求或支持 Transformers 5.x。
安装或更新依赖后完整重启 ComfyUI。
模型放置
插件只注册以下 ComfyUI 模型根目录:
ComfyUI/models/LingBotVideo/
不会使用 Hugging Face cache,也不会自动扫描其他磁盘目录。可以复制模型目录,也可以自行使用目录链接或 junction 链接到这里。
推荐完整结构:
ComfyUI/
└── models/
└── LingBotVideo/
├── Robbyant--lingbot-video-dense-1.3b/
│ ├── transformer/
│ ├── text_encoder/
│ ├── processor/
│ ├── vae/
│ ├── scheduler/
│ └── model_index.json
│
├── Robbyant--lingbot-video-moe-30b-a3b/
│ ├── transformer/
│ ├── text_encoder/
│ ├── processor/
│ ├── vae/
│ ├── scheduler/
│ ├── refiner/
│ └── model_index.json
│
├── Qwen--Qwen3.6-27B/
│ ├── config.json
│ ├── processor_config.json
│ ├── tokenizer.json
│ └── model*.safetensors
│
└── Robbyant--lingbot-video-rewriter-lora/
├── adapter_config.json
└── adapter_model.safetensors
注意:
- Dense 与 MoE 必须保留官方发布的完整 Diffusers 目录结构,不能只放 Transformer 权重。
- Rewriter Base 和 Rewriter LoRA 是两个独立目录。
- MoE 目录中的
refiner/可以保留,但当前生成节点运行的是 base T2I/T2V/TI2V pipeline,尚未提供独立 Refiner 节点。 - 文件可能按多个 safetensors shard 分片,保持官方文件名和 index 文件不变。
使用现有外部模型目录
例如模型原本位于:
D:\Models\hf\Robbyant--lingbot-video-moe-30b-a3b
可将它链接到:
ComfyUI\models\LingBotVideo\Robbyant--lingbot-video-moe-30b-a3b
Windows PowerShell 示例(请按实际 ComfyUI 路径修改):
New-Item `
-ItemType Junction `
-Path "D:\Codes\AIArt\ComfyUI\models\LingBotVideo\Robbyant--lingbot-video-moe-30b-a3b" `
-Target "D:\Models\hf\Robbyant--lingbot-video-moe-30b-a3b"
Dense、Rewriter Base 和 Rewriter LoRA 可以用同样方式分别建立链接。链接名必须使用上面目录树中的名称。
插件只看到 ComfyUI 目录中的链接入口,不会修改外部模型目录。
节点
节点位于:
YogurtLingBotVideo
Load LingBot Video Model
加载 Dense 或 MoE pipeline。
主要参数:
| 参数 | 说明 |
| --- | --- |
| model_name | 选择 models/LingBotVideo 下的 Dense 或 MoE 模型 |
| mode | t2i、t2v 或 ti2v;必须与后续工作流用途一致 |
| transformer_dtype | 推荐 auto 或 bfloat16 |
| cpu_offload | 默认 true;MoE 24GB 显卡必须开启 |
| moe_gpu_blocks | MoE 中长期驻留 GPU 的 block 数,Dense 会忽略此参数 |
| download_model | 默认 false,只有主动开启才下载模型 |
LingBot Video Generate
执行 T2I、T2V 或 TI2V。输出是 ComfyUI IMAGE batch:
- T2I 输出一张图片。
- T2V/TI2V 输出所有视频帧,可连接 ComfyUI 的视频合成或保存节点。
- TI2V 必须连接
image输入。
官方默认参数:
width 832
height 480
steps 40
guidance_scale 3.0
shift 3.0
帧数规则:
1 或 4n+1
常见视频帧数为 81。宽高必须是 16 的倍数。
Load LingBot Prompt Rewriter
加载:
Qwen--Qwen3.6-27BRobbyant--lingbot-video-rewriter-lora
Rewriter 很大,会与视频模型争抢显存。建议在 Prompt Rewrite 节点保持“改写后释放显存”开启。
LingBot Prompt Rewrite
将普通自然语言 Prompt 扩写并转换为 LingBot 推荐的结构化 JSON,同时输出详细的中间 Prompt。
release_rewriter_after_rewrite=true(默认)时:
- 两阶段改写完成后释放 Rewriter 显存。
- 改写异常时也会尝试释放,并保留原始异常。
- 同一缓存 handle 下次执行会从本地目录重新按
device_map=auto加载。
连续反复改写、并且暂时不运行视频模型时,可以关闭该选项以减少重复加载时间。
基本工作流
仓库中的 example_workflows/ 提供可直接导入的示例:
lingbot_dense_t2i.json:Dense 文生图并保存 PNG。lingbot_dense_t2v.json:Dense 文生视频并保存 WEBM。lingbot_dense_ti2v.json:参考图加文本生成视频;导入后先选择输入图片。lingbot_prompt_rewriter_t2v.json:单独扩写并预览 T2V Prompt,确认后可复制到生成工作流,避免同时驻留两个大模型。
示例默认不下载模型。请先按“模型放置”准备对应目录,或明确需要下载时再手动打开 Loader 的 download_model。
T2I 文生图
Load LingBot Video Model (mode=t2i)
→ LingBot Video Generate
→ Save Image
T2I 会强制生成一帧,Generate 节点上的 num_frames 不影响结果。
T2V 文生视频
Load LingBot Video Model (mode=t2v)
→ LingBot Video Generate
→ Video Combine / Save Video
TI2V 图文生视频
Load Image ───────────────────────────────┐
↓
Load LingBot Video Model (mode=ti2v) → LingBot Video Generate
↓
Video Combine / Save Video
使用 Prompt Rewriter
Load LingBot Prompt Rewriter
→ LingBot Prompt Rewrite
→ prompt_json
→ LingBot Video Generate.prompt
TI2V Prompt Rewrite 也需要连接同一张参考图片。
Prompt 格式
推荐直接使用 Prompt Rewrite 输出的 JSON。
生成节点也接受普通文本,例如:
A clear glass bottle filled with water sits on a wooden table in warm sunlight.
普通文本会自动包装为:
{"comprehensive_description":"A clear glass bottle filled with water sits on a wooden table in warm sunlight."}
这只能保证输入格式有效,不等价于官方 Rewriter 的详细扩写。过短或缺乏镜头、主体、材质、光线和动作描述的 Prompt,生成质量通常较差。
negative_prompt 留空时,插件会根据 T2I 或视频模式使用官方默认 negative prompt。
显存与内存
Dense 1.3B
24GB RTX 4090 可以运行 Dense T2I。一般建议:
transformer_dtype = bfloat16 或 auto
cpu_offload = true
显存充足并希望减少模型搬运时,可以关闭 cpu_offload。实际峰值会随模式、分辨率、帧数、ComfyUI 中同时加载的其他模型以及 PyTorch 后端变化。
MoE 30B-A3B
MoE Transformer 的 BF16 权重约 60.27GB,不能完整放入 24GB 显存。插件使用混合 block swap:
- 前
moe_gpu_blocks个 block 长期驻留 GPU。 - 其余 block 在执行前从 CPU 上载,执行后卸载。
- 非 block 的小型模块驻留 GPU。
- 不改变 MoE routing、expert、attention、scheduler 或采样数学。
RTX 4090 24GB 实测建议:
| moe_gpu_blocks | 适用情况 | 说明 |
| ---: | --- | --- |
| 0 | 最保守 | 全部 block swap,显存最低,速度最慢 |
| 8–10 | 需要给其他节点留显存 | 更安全,但每步搬运更多权重 |
| 12 | 4090 推荐默认值 | 实测约 19.4GB,剩余约 4.8GB |
| 14–16 | 激进调优 | 可能更快,但分辨率或其他模型占用稍高就可能 OOM |
| 48 | 不适用于 24GB | 等同所有 block 常驻,4090 无法容纳 |
默认 12 的本机参考结果(RTX 4090、832×480、T2I、40 steps):
稳定显存占用约 19.4GB
40 步采样约 6 分 33 秒
这些是单机实测,不是所有系统的固定性能保证。PCIe 速度、系统内存、分页文件、后台GPU占用和Torch版本都会影响耗时。
系统内存建议:
- 64GB 可以运行,但接近模型体积边缘,错误的全量offload策略可能触发分页并严重变慢。
- 更推荐 96GB 或以上,为模型权重、文本编码器、VAE和ComfyUI保留余量。
- 首次Loader需要读取并布置约60GB权重,耗时可能数分钟。
- ComfyUI复用同一个Loader输出时,后续生成无需每次重新加载全部模型。
如果发生 OOM,依次尝试:
- 降低
moe_gpu_blocks。 - 确认
cpu_offload=true。 - 关闭或释放 Prompt Rewriter、其他模型和不用的工作流分支。
- 降低分辨率或视频帧数。
- 重启 ComfyUI,清除其他工作流遗留的模型占用。
模型下载行为
download_model=false 是默认值:
- 不访问网络。
- 不自动下载。
- 模型缺失或目录无效时直接报错。
只有显式设置 download_model=true 时,插件才下载所选官方模型,并直接写入:
ComfyUI/models/LingBotVideo/
下载不经过 Hugging Face cache。没有后台更新检查、遥测或自动联网行为。
MoE 与 Qwen Rewriter Base 都非常大,开启下载前请确认磁盘空间。
已验证范围
- Dense 1.3B T2I:与官方参考在相同 Prompt、seed 和参数下逐像素一致。
- MoE 30B-A3B T2I:与官方参考在相同 Prompt、seed 和参数下逐像素一致。
- MoE block swap 只改变权重驻留位置;实测输出与官方参考逐像素一致。
- 自动化测试:67 项通过。
T2V、TI2V 和 Refiner 尚未完成同等级的逐帧官方 A/B 验证,因此不宣称这些模式已经达到逐帧、逐像素一致。
常见问题
模型下拉框为空
检查目录是否位于 ComfyUI/models/LingBotVideo,并确认完整的 model_index.json、transformer、text_encoder、processor、vae 和 scheduler 组件存在。放置或链接模型后重启 ComfyUI。
普通Prompt生成结果很差
LingBot 更适合详细、结构化的视觉描述。使用 Prompt Rewriter,或手工补充主体、环境、构图、镜头、光线、材质和动作。
MoE加载后很久没有开始采样
首次加载需要读取约60GB Transformer,并建立GPU常驻block和CPU swap block。观察系统内存、磁盘活动和ComfyUI控制台;后续复用同一Loader会快很多。
MoE运行时只有几GB显存但特别慢
检查是否使用了新版本节点,并将 moe_gpu_blocks 设为 12 左右。0 会将所有block换入换出,显存低但速度明显更慢。
修改 moe_gpu_blocks 后没有变化
Loader节点可能被ComfyUI缓存。修改参数并重新排队;如果仍使用旧handle,重启ComfyUI后再运行。
上游许可
内嵌的 LingBot pipeline 源码派生自 Apache-2.0 上游项目:
yogurt_lingbot_video/upstream/LICENSE.upstream