波波技术栈
article

ComfyUI Sonic 安装教程

本文面向已安装 ComfyUI 的用户,详细介绍了安装对口型视频生成节点 ComfyUI_Sonic 的两种方式:手动克隆仓库与通过 ComfyUI Manager 安装。同时说明了模型下载路径、前置条件(NVIDIA GPU ≥12GB 显存)及常见问题处理,帮助用户快速搭建人像+音频生成短视频的工作流。

面向 已安装好 ComfyUI 环境(GPU、Python、能浏览器或 API 访问)的机器。Sonic 用于 人像 + 音频 → 对口型短视频(Portrait Animation),适合歌曲片段、口播等场景。

下文路径均相对于 ComfyUI 根目录(记为 ComfyUI/)。请把命令里的路径换成你的实际安装位置(Linux 常见 /root/ComfyUI,Windows 本机如 D:\ComfyUI)。

项目 路径
ComfyUI 根目录 ComfyUI/
Sonic 自定义节点 ComfyUI/custom_nodes/ComfyUI_Sonic
Sonic 专用模型 ComfyUI/models/sonic/
SVD 检查点 ComfyUI/models/checkpoints/
输出视频 ComfyUI/output/

0. 前置条件

  • 已安装 ComfyUI,并能用浏览器或 API 正常访问
  • NVIDIA GPU,建议 ≥ 12GB 显存(首次加载易 OOM,见下文)
  • Python 3.10+,CUDA 与 PyTorch 版本与 ComfyUI 一致
  • 若从其他机器访问 ComfyUI,需放行对应端口(防火墙 / 安全组)

1. 安装 ComfyUI_Sonic 自定义节点

ComfyUI/custom_nodes/ 下克隆(任选其一仓库,工作流节点名需与所装版本一致)。

1.1 常用仓库(smthemex)

cd ComfyUI/custom_nodes
git clone https://github.com/smthemex/ComfyUI_Sonic.git
cd ComfyUI_Sonic
pip3 install -r requirements.txt
GitHub 较慢可用镜像:

```bash
cd ComfyUI/custom_nodes
git clone https://ghproxy.net/https://github.com/smthemex/ComfyUI_Sonic.git ComfyUI_Sonic
cd ComfyUI_Sonic && pip3 install -r requirements.txt

1.2 使用 ComfyUI Manager 安装(推荐)

ComfyUI-Manager 可在网页里搜索、安装自定义节点,并自动执行 git clonepip install -r requirements.txt模型权重仍需按第 2 节手动下载(Manager 不会替你下 GB 级 Sonic/SVD 文件)。

1.2.1 安装 ComfyUI-Manager(若尚未安装)

插件目录必须是 ComfyUI/custom_nodes/ComfyUI-Manager(不要解压到 custom_nodes 根目录下一层乱套)。

cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

GitHub 较慢可用镜像:

cd ComfyUI/custom_nodes
git clone https://ghproxy.net/https://github.com/ltdrdata/ComfyUI-Manager.git ComfyUI-Manager

安装后 重启 ComfyUI(见第 3 节)。浏览器打开工作流页,菜单栏或侧边应出现 Manager 按钮;若无,查看启动日志里是否有 ComfyUI-Manager 的 import 报错。

1.2.2 在 Manager 中安装 ComfyUI_Sonic

  1. 浏览器访问 ComfyUI(本机常见 http://127.0.0.1:8188;远程则为 http://<主机>:<端口>)。若已配置 ComfyUI-Login,先完成登录。
  2. 点击 Manager(新版界面可能在右上角 Manager 菜单里)。
  3. 打开 Custom Nodes Manager / Install Custom Nodes(文案因 Manager 版本略有不同)。
  4. 在搜索框输入 SonicComfyUI_Sonicsmthemex
  5. 在结果列表中找到 ComfyUI_Sonic(作者 smthemex,仓库 smthemex/ComfyUI_Sonic),点击 Install
  6. 等待底部日志显示 clone / pip install 完成(首次可能需数分钟,取决于网络)。
  7. 若提示 Restart required,在 Manager 里点 Restart,或结束 ComfyUI 进程后重新启动(见 §3)。

安装成功后,目录应类似:

ComfyUI/custom_nodes/ComfyUI_Sonic/

不要 同时用 Manager 再装 Sean-Bradley/ComfyUI-Sonic 等不同 fork,节点名与工作流不通用,易冲突。

1.2.3 搜索不到或安装失败时

情况 处理
列表里没有 Sonic 在 Manager 的Install via Git URL(或「通过 Git 安装」)中粘贴:https://github.com/smthemex/ComfyUI_Sonic.git,再 Install
pip 超时 / 失败 进入节点目录手动安装:cd ComfyUI/custom_nodes/ComfyUI_Sonic && pip3 install -r requirements.txt
权限 / git 报错 确认 custom_nodes 可写(按需 chown);或改用 §1.1 手动 git clone
安装后仍无 Sonic 节点 必须完整重启 ComfyUI 进程,不要只刷新浏览器

Manager 安装与 §1.1 手动 clone 二选一即可,不必重复安装同一仓库。

1.2.4 安装节点后的必做步骤

  1. 重启 ComfyUI(见 §3)。
  2. §2 下载 models/sonic/ 与 SVD 检查点(否则 Queue 会报缺模型)。
  3. 在界面 Add Node 搜索 SONIC,确认出现 SONIC_PreDataSONICSampler 等节点后再保存 API 工作流。

安装或更新节点后 必须重启 ComfyUI;仅刷新网页不会加载新节点。


2. 下载模型

国内怎么下(直连不行就用 ModelScope)

方式 适用 说明
ModelScope modelscope download 国内服务器首选 魔搭镜像,大文件稳;先 pip install -U modelscope
huggingface-cli / hf download + HF_ENDPOINT=https://hf-mirror.com 备选 ModelScope 无对应仓库时用
wget + hf-mirror.com / huggingface.co 小文件或海外 GB 级 safetensors 常 403/超时,不推荐当首选

通用安装 CLI:

pip install -U modelscope

下载命令格式(Sonic 两套模型见下表,把 --model 换成对应 ID):

modelscope download \
  --model <作者>/<仓库名> \
  <文件名或子目录> \
  --local_dir <保存目录>

https://www.modelscope.cn 搜索模型名(如 ComfyUI_Sonicstable-video-diffusion),打开模型页可复制 模型 ID

Sonic 要下 两套 权重,不要混:

目录 用途 ModelScope 示例
models/checkpoints/ SVD 图生视频底模 cjc1887415157/stable-video-diffusion-img2vid-xt-1-1
models/sonic/ Sonic 对口型专用 zhuzhukeji/ComfyUI_Sonic_Models

2.1 Sonic 权重(models/sonic/

目标目录结构:

ComfyUI/models/sonic/
├── audio2bucket.pth
├── audio2token.pth
├── unet.pth
├── yoloface_v5m.pt
├── whisper-tiny/
│   ├── config.json
│   ├── model.safetensors
│   └── preprocessor_config.json
└── RIFE/
    └── flownet.pkl

国内推荐:ModelScope 一键下整包

pip install -U modelscope

mkdir -p ComfyUI/models/sonic

modelscope download \
  --model zhuzhukeji/ComfyUI_Sonic_Models \
  --local_dir ComfyUI/models/sonic

模型页:https://www.modelscope.cn/models/zhuzhukeji/ComfyUI_Sonic_Models

下完后确认 unet.pth 约 6GB+(不是空目录):

ls -lh ComfyUI/models/sonic/
ls -lh ComfyUI/models/sonic/whisper-tiny/
ls -lh ComfyUI/models/sonic/RIFE/flownet.pkl

若文件落在 models/sonic/sonic/ 子目录,挪到上一层:

mv ComfyUI/models/sonic/sonic/* ComfyUI/models/sonic/

备选: 官方 Google Drive 解压上传;或 HuggingFace 镜像:

pip3 install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com

huggingface-cli download ApacheOne/ComfyUI-Sonic-models \
  --include "sonic/*" \
  --local-dir ComfyUI/models \
  --local-dir-use-symlinks False

2.2 SVD 检查点(models/checkpoints/

Sonic 工作流里的 ImageOnlyCheckpointLoader 需要其一:svd_xt.safetensorssvd_xt_1_1.safetensors(约 4~5GB)。

国内推荐:ModelScope(SVD 常用这条)

pip install -U modelscope

mkdir -p ComfyUI/models/checkpoints

modelscope download \
  --model cjc1887415157/stable-video-diffusion-img2vid-xt-1-1 \
  svd_xt_1_1.safetensors \
  --local_dir ComfyUI/models/checkpoints

若要用 svd_xt(非 1.1),在 ModelScope 搜索 stable-video-diffusion-img2vid-xt 换对应模型 ID。

下完后检查(须在 checkpoints 根目录,且为 GB 级):

ls -lh ComfyUI/models/checkpoints/svd_xt_1_1.safetensors
# 若在子目录:
find ComfyUI/models/checkpoints -name "svd_xt*.safetensors"

备选:huggingface-cli + HF 镜像wget 对大文件常 403 时用)

pip3 install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com

cd ComfyUI/models/checkpoints
huggingface-cli download stabilityai/stable-video-diffusion-img2vid-xt-1-1 \
  svd_xt_1_1.safetensors \
  --local-dir . \
  --local-dir-use-symlinks False

新版 CLI 也可写成:

hf download stabilityai/stable-video-diffusion-img2vid-xt-1-1 svd_xt_1_1.safetensors \
  --local-dir ComfyUI/models/checkpoints

(同样先 export HF_ENDPOINT=https://hf-mirror.com。)


3. 重启并验证节点

本机示例:

cd ComfyUI
python3 main.py --listen 127.0.0.1 --port 8188

需局域网 / 公网访问时(将 0.0.0.0 换为实际需求,并注意端口安全):

cd ComfyUI
python3 main.py --listen 0.0.0.0 --port 8188

浏览器打开后:

  1. 右键空白处 → Add Node,搜索 Sonic / SONIC
  2. 应能看到如 SONIC_PreDataSONICSampler 等节点(名称因 fork 略有差异)
  3. 打开仓库自带的 example_workflows 示例 JSON,在界面 Load 后点 Queue Prompt 试跑

首次运行会加载大模型,耗时较长,属正常现象。


4. 工作流要点

4.1 基本连线逻辑

典型流程(概念上):

参考人像 (LoadImage) ──┐
                       ├──► Sonic 预处理 / 采样 ──► 解码 ──► SaveVideo
音频 (LoadAudio)     ──┘
  • LoadImage:正面或半侧面人像,清晰、光线稳定,避免遮挡嘴部
  • LoadAudio:与要对口型的 mp3/wav 片段,时长与生成段一致
  • duration(秒):控制本段生成时长,与音频长度匹配;不要用整曲时长跑长音频(易 OOM)

4.2 duration 与显存

  • 插件用 duration(秒) 控制输出长度,不是「整首歌一次生成」
  • T4(16GB) 等卡:建议单段 10~15 秒,过长易 CUDA out of memory
  • 长音频应 切段 → 多次生成 → 再拼接(可用 ffmpeg concat);常见做法为每段用同一张原图,生成时长可比字幕段多 0.5~2 秒(本软件在「视频 → 模型配置」可调),拼接前裁掉尾秒

4.3 工作流 JSON 里的 duration

若在 API 或脚本中自动改 duration

  • JSON 里可写占位数值,运行时按当前音频切片覆盖
  • 不要写整曲 200+ 秒,否则提交即可能爆显存

API 自动化时,工作流须包含:

  • LoadImageLoadAudio
  • duration(或 video_duration / audio_duration)输入的 Sonic 相关节点
  • 输出端 SaveVideo(或等价保存节点)

5. 导出 API 工作流

与通用 ComfyUI 一致:

  1. 在界面把 Sonic 工作流 跑通
  2. 菜单 Save (API Format)(不是普通 Save)
  3. 保存为如 ComfyUI/workflows/sonic_api.json

正确 API JSON: 顶层为 "3""7" 等节点 ID,含 class_typeinputs 错误:nodeslinks 的界面版 JSON

5.1 API 调用流程

  1. POST /prompt 提交 API JSON(鉴权用启动日志里的 token,或浏览器 Cookie AIOHTTP_SESSION
  2. 上传参考图、音频到 ComfyUI input(或工作流里已写死的文件名)
  3. GET /history/{prompt_id} 轮询直至 outputs 出现(视频任务较慢,建议间隔 60 秒 以上)
  4. GET /view 下载 videos 中的 mp4

单段视频生成可能需 数分钟到数十分钟,超时建议按 ≥ 3600 秒(1 小时)/ 段 配置客户端。


6. 常见问题

现象 处理建议
找不到 Sonic 节点 确认装在 custom_nodes/ComfyUI_Sonic,完整重启 ComfyUI;看启动日志 import 报错;勿混装多个 Sonic fork
Manager 里 Install 一直转圈 看 Manager 日志 / 手动 pip3 install -r requirements.txt;网络差时改 §1.1 手动 clone
Manager 按钮不存在 先按 §1.2.1 安装 ComfyUI-Manager 并重启;检查 custom_nodes/ComfyUI-Manager 路径是否正确
首次运行 OOM 减小 image_size(见仓库 README);缩短 duration;换更大显存卡
必须用 cuda:0 部分环境需指定 GPU 0,在启动参数加 --cuda-device 0
bf16 / MPS 报错 Linux + CUDA 一般无 MPS 问题;macOS 按仓库说明关闭 bf16 或换 fork
batch 与帧率 非 25fps 时历史版本曾有 batch 问题,以当前仓库 README 为准
API 提交后一直无输出 看 ComfyUI 网页Queue 是否排队;查启动日志;确认模型路径完整
对口型与音频对不齐 检查音频是否被剪短;duration 是否与音频秒数一致
wget hf-mirror 返回 403 大文件改用**modelscope download** 或 huggingface-cli + HF_ENDPOINT=https://hf-mirror.com
SONICTLoader 里 sonic_unet 为 none models/sonic/ 未下齐,用 §2.1 ModelScope 补 unet.pth 后重启

7. 参考链接


附:长视频制作思路(通用)

完整音频 + 字幕时间轴 (.srt)
    → 按句/按秒切成多段 [t0, t1),记每段时长 seg_len
    → 每段:始终用同一张原图;音频 [t0, t1+pad)(如 [0,16)、[15,31))→ ComfyUI duration = seg_len+pad
    → 下载 mp4 后裁掉尾部 pad 秒,得到成片 [t0,t1),拼接后总长不变
    → ffmpeg 拼接各段视频轨 + 混入完整原曲音频

这样每段显存可控,且每段人脸来自同一参考图。具体脚本或业务软件自行对接 API 即可。