本项目为腾讯混元开源的 HunyuanVideo 1.5 打造,提供 ComfyUI 官方原生节点链路、API 格式工作流、LM Studio 视频提示词智能扩写 与 命令行端到端自动化测试脚本,专门针对 Apple Silicon (Mac Studio / M4 Max) 统一内存架构调优。
上游仓库:
- 原版 13B 模型 —— https://github.com/Tencent-Hunyuan/HunyuanVideo
- 本目录对应的 1.5 版本 —— https://github.com/Tencent-Hunyuan/HunyuanVideo-1.5
- 轻量化 DiT 架构:仅 8.3B 参数(相比初代 13B 大幅瘦身),却达到开源视频模型的 SOTA 画质,是本机 (M4 Max / 128GB) 少数真正跑得动的高质量视频模型。
- 双任务统一:同一套框架同时支持文生视频 (T2V) 与图生视频 (I2V),图生视频额外引入 SigLIP 视觉编码器做起始帧语义对齐。
- 双文本编码器:
Qwen2.5-VL-7B—— 主力多模态语义编码器,负责理解自然语言中的空间、动作与镜头描述;ByT5-small-glyphXL—— 字形编码器,专门负责画面中文字 / 中文字形的生成与还原。
- 3D VAE:空间下采样 16 倍、时间下采样 4 倍,因此分辨率必须是 16 的整数倍、帧数必须满足 length = 4n + 1。
- 可选 1080P 超分:官方另有
1080p_sr_distilled扩散模型 + Latent Upsampler,可把 720p 结果二次放大到 1080p(本目录默认未下载,见第 3 节)。 - MPS 友好:ComfyUI 内核已声明
supported_inference_dtypes = [fp16, bf16, fp32],fp16 权重可在 Apple Silicon 上原生推理。
ComfyUI/hunyuan_video_1.5/
├── README.md # 本说明文档
├── download_models.sh # 模型一键下载脚本 (支持 all / t2v / i2v / lite 四种模式)
├── prompt_enhancer.py # 视频提示词增强引擎 (LM Studio 客户端 + 规则兜底)
├── hunyuan_video15_test.py # 命令行端到端测试主脚本
├── workflows/
│ ├── hunyuan_video_1.5_t2v_api.json # 文生视频 (API 格式, 供脚本直接调用)
│ └── hunyuan_video_1.5_i2v_api.json # 图生视频 (API 格式)
├── assets/
│ └── i2v_start_sample.png # 图生视频起始帧示例 (1280x720)
├── tests/ # pytest 回归测试 (56 个用例)
│ ├── conftest.py
│ ├── test_workflows.py # 工作流结构与连线完整性校验
│ ├── test_cli_runner.py # CLI 参数解析 / 参数注入 / 模型前置校验
│ └── test_prompt_enhancer.py # 帧数换算 / 分辨率对齐 / 扩写降级
└── output/ # 生成的 mp4、dry-run 工作流与运行报告 (已 gitignore)
说明:ComfyUI 官方内置模板中已自带 HunyuanVideo 1.5 的可视化画布工作流(含 1080P 超分分支), 位于 ComfyUI 菜单
Workflows → Browse Templates → Video,可直接使用; 本目录提供的是可脚本化调用的 API 格式工作流,二者模型文件完全通用。
所有模型均来自 ComfyUI 官方 repackaged 仓库
Comfy-Org/HunyuanVideo_1.5_repackaged,
与 ComfyUI 内置模板引用的权重完全一致。
| 角色 | 文件名 | 目标目录 | 体积 |
|---|---|---|---|
| 文生视频主模型 | hunyuanvideo1.5_720p_t2v_fp16.safetensors |
models/diffusion_models/ |
16.65 GB |
| 图生视频主模型 | hunyuanvideo1.5_720p_i2v_fp16.safetensors |
models/diffusion_models/ |
16.65 GB |
| 语义文本编码器 | qwen_2.5_vl_7b_fp8_scaled.safetensors |
models/text_encoders/ |
9.38 GB |
| 字形编码器 | byt5_small_glyphxl_fp16.safetensors |
models/text_encoders/ |
0.44 GB |
| 专用 VAE | hunyuanvideo15_vae_fp16.safetensors |
models/vae/ |
2.52 GB |
| 视觉编码器 (仅 I2V) | sigclip_vision_patch14_384.safetensors |
models/clip_vision/ |
0.86 GB |
| 合计 | ~46.5 GB |
| 文件名 | 目标目录 | 体积 |
|---|---|---|
hunyuanvideo1.5_1080p_sr_distilled_fp8_scaled.safetensors |
models/diffusion_models/ |
8.34 GB |
hunyuanvideo15_latent_upsampler_1080p.safetensors |
models/latent_upscale_models/ |
0.20 GB |
cd ComfyUI/hunyuan_video_1.5
./download_models.sh all # 完整套装 T2V + I2V (~46.5GB, 默认)
./download_models.sh t2v # 仅文生视频所需的 4 个文件 (~29GB)
./download_models.sh i2v # 仅图生视频增量 (CLIP Vision + I2V 主模型, ~17.5GB)
./download_models.sh lite # 额外补 480p 双档模型, 便于快速迭代
# 自定义模型根目录 (默认 /Users/frank/ComfyUI/models)
COMFY_MODELS=/path/to/ComfyUI/models ./download_models.sh all下载完成后请在 ComfyUI 界面点击右侧菜单的 刷新 按钮以识别新模型。
⚠️ 不要用hf downloadCLI 下载本套权重。本机实测hfCLI 1.9.0 在下载qwen_2.5_vl_7b_fp8_scaled.safetensors时会卡死在 256,000,000 字节不再前进 (进程存活但无网络活动),且均速仅约 0.8 MB/s。 本脚本改用curl断点续传 + stall 检测 + safetensors 结构校验后,实测稳定跑到 约 6.9 MB/s,完整 46.5GB 套装预计约 2 小时。另一个常见陷阱:只比对文件大小无法发现损坏。多线程分块下载中断后可能留下 "大小正确但中间有空洞"的文件,ComfyUI 加载时才会报张量解析错误。 本脚本会解析 safetensors 头部 JSON,校验各张量
data_offsets的末端是否与文件 实际大小严格吻合,从而可靠识别截断与空洞。
| 观测项 | 实测值 |
|---|---|
curl 单流稳态吞吐 |
~6.9 MB/s |
curl 4 流并发聚合 |
~3.97 MB/s(并发无收益,说明是链路带宽瓶颈) |
hf-mirror.com |
1.96 MB/s(比直连更慢,本机无需镜像) |
hf CLI 1.9.0 |
0.8 MB/s,且会 stall |
因此脚本默认直连 huggingface.co;若你的网络环境直连不稳,可用
HF_ENDPOINT=https://hf-mirror.com ./download_models.sh t2v 切换镜像。
| 方案 | 体积 | Mac 推理表现 | 结论 |
|---|---|---|---|
| fp16 (本目录默认) | 16.65 GB | MPS 原生支持,无额外反量化开销 | ✅ 首选,128GB 统一内存毫无压力 |
| fp8_scaled | 8.34 GB | MPS 不支持 fp8 矩阵乘,每步需动态反量化,明显变慢 | 仅在内存紧张时降级使用 |
| GGUF | — | HunyuanVideo 1.5 目前无可用 GGUF 转换(city96/HunyuanVideo-gguf 仅覆盖初代 13B) |
不适用 |
文本编码器
Qwen2.5-VL-7B官方仅提供fp8_scaled与全量 fp16 两个版本, 本目录沿用官方模板的fp8_scaled(省 7GB 内存),文本编码只执行一次,反量化开销可忽略。
下表取自 ComfyUI 内置模板中 Hunyuan 官方给出的参数说明:
| 档位 | cfg | shift | 官方步数 | 模板默认步数 |
|---|---|---|---|---|
| 480p_t2v | 6 | 5 | 50 | 20 |
| 480p_i2v | 6 | 5 | 50 | 20 |
| 720p_t2v | 6 | 7 | 50 | 20 |
| 720p_i2v | 6 | 7 | 50 | 20 |
| 1080p_sr_distilled | 1 | 2 | 50 | 8(超分分支) |
shift通过ModelSamplingSD3节点注入。ComfyUI 内核中HunyuanVideo15.sampling_settings已内置shift=7.0, 因此BasicScheduler直接读取原始 UNET 输出即可得到正确的 sigma 调度(本目录工作流严格遵循官方连线方式)。- 官方 50 步在 Apple Silicon 上耗时过长,模板与本目录均默认使用 20 步;追求画质可用
--steps 50。
视频生成对提示词的要求与生图不同:必须显式描述"动作随时间如何演变"与"镜头怎么运动"。
prompt_enhancer.py 提供两级能力:
- LLM 扩写(优先):调用本地 LM Studio 的 OpenAI 兼容接口,System Prompt 强制模型输出单段英文视频提示词,
必须覆盖
主体细节 / 动作时序 / 镜头语言 / 光影氛围四个维度,并禁止输出任何前后缀说明。 - 规则兜底(离线可用):LM Studio 不可用时,自动降级到内置风格模板库(
STYLE_PRESETS), 把用户描述与风格化的镜头/光照/运动词汇拼装为英文提示词,零显存、零延迟、不中断流水线。
| 预设 | 镜头语言 | 光影与质感 |
|---|---|---|
cinematic |
电影感推轨 + 缓慢环绕,浅景深,24mm 变形宽银幕 | 体积光、金色轮廓光、胶片颗粒、青橙调色 |
photorealistic |
手持纪实镜头,自然微抖,真实焦段 | 自然日光、物理正确的阴影与材质响应 |
anime |
动画式快速横摇,速度线,透视冲击 | 赛璐璐高光、高饱和、锐利线稿 |
cyberpunk |
低角度跟拍,湿地反射滑动 | 霓虹青紫实用光、强泛光、体积雾、色散 |
nature |
航拍缓慢推进,柔和视差 | 大气雾霭、林间暖阳、自然色彩科学 |
general |
稳定中景轻推 | 均衡自然光 |
qwen/qwen3-vl-8b(黄金首选 ⭐):本机实测单次扩写约 2 秒,词汇分布与 Qwen2.5-VL 文本编码器同源,契合度最高。- 低显存设备可降级
qwen2.5-3b-instruct,或直接用--no-enhance关闭扩写。
# 1. 文生视频 · 快速验证档 (2.5 秒 / 61 帧 / 8 步)
python hunyuan_video15_test.py --desc "雨夜霓虹街道上, 一只机甲猫抖落雨水后缓步向前" \
--style cyberpunk --duration 2.5 --steps 8
# 2. 文生视频 · 官方画质档 (5 秒 / 121 帧 / 20 步)
python hunyuan_video15_test.py --desc "纸飞机从摩天大楼顶被抛出, 穿过城市峡谷飞向夕阳" --steps 20
# 3. 竖直构图 (9:16, 720x1280)
python hunyuan_video15_test.py --desc "雪山之巅的日出云海" --aspect 9:16 --style nature
# 4. 图生视频 (起始帧自动上传到 ComfyUI input 目录)
python hunyuan_video15_test.py --mode i2v --image assets/i2v_start_sample.png \
--desc "霓虹城市中的剪影人物缓缓抬起手臂" --duration 2.5
# 5. 480p 提速档 (需先 ./download_models.sh lite)
python hunyuan_video15_test.py --desc "海浪拍打礁石" --model-size 480p --duration 2.5
# 6. Dry-Run: 仅做扩写与工作流装配校验, 不提交生成 (模型未下载也可运行)
python hunyuan_video15_test.py --desc "赛博朋克飞行汽车" --dry-run| 参数 | 默认值 | 说明 |
|---|---|---|
--mode |
t2v |
t2v 文生视频 / i2v 图生视频 |
--desc |
示例中文短句 | 用户极简描述 |
--image |
— | i2v 必填,起始帧图片路径(脚本会 POST 到 /upload/image) |
--style |
cinematic |
风格预设(见第 5 节) |
--size |
自动 | 显式分辨率,如 1280x720,会向下对齐到 16 的倍数 |
--aspect |
16:9 |
长宽比:16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 |
--duration |
5.0 |
时长(秒),自动换算为 4n+1 帧 |
--fps |
24 |
帧率 |
--model-size |
720p |
720p / 480p |
--steps |
20 |
采样步数(官方 50) |
--cfg |
官方预设 6.0 |
CFG 引导系数 |
--shift |
官方预设 7.0 |
ModelSamplingSD3 shift |
--seed |
-1 |
随机种子 |
--comfy-host |
127.0.0.1:8188 |
ComfyUI 地址 |
--lmstudio-host |
127.0.0.1:1234 |
LM Studio 地址 |
--llm-model |
自动优选 | 指定扩写模型 |
--no-enhance |
关闭 | 直接用 --desc 原文,不做扩写 |
--comfy-models |
/Users/frank/ComfyUI/models |
模型根目录(用于前置校验) |
--output |
./output |
产物目录 |
--dry-run |
关闭 | 只装配工作流并保存,不提交生成 |
--timeout |
3600 |
等待生成完成的最大秒数 |
- 服务连通性检查 —— ComfyUI 离线直接报错并给出启动命令;LM Studio 离线仅告警并自动降级扩写。
- 模型文件前置校验 —— 生成前逐个检查 6 个权重文件是否就位,缺失时直接列出文件名与目标目录,避免浪费一次漫长的排队。
- 产物落盘 + 运行报告 —— 从
/history/{prompt_id}解析SaveVideo节点产物并用/view下载 mp4, 同时写出output/report_<id>.json(含步数、cfg、shift、种子、耗时、引擎等完整元数据,便于回归对比)。
- 启动 ComfyUI 后打开
http://127.0.0.1:8188; - 菜单
Workflows → Browse Templates → Video,选择 Hunyuan Video 1.5 720p T2V / I2V; - 若节点缺模型,工作流内的 Markdown 便签会给出下载链接;
Ctrl+Enter排队生成。
内置模板额外包含 1080P 超分分支与 EasyCache 加速节点(默认处于 Bypass 状态),
选中节点按 Ctrl+B 即可启用。
workflows/*_api.json 是 API 格式(用于脚本调用),与画布格式不通用。
如需在画布中查看图形化版本,请直接使用内置模板,二者的模型文件与参数完全一致。
在 MPS 后端运行 8.3B 级 DiT 视频模型,耗时由以下因素共同支配:
-
帧数是线性成本,分辨率是平方成本
EmptyHunyuanVideo15Latent中1280x720的 token 数远高于848x480(后者约 1/2.3), 注意力计算量为$O(N^2)$ 。先把--duration降到 2.5 秒(61 帧)、必要时再降分辨率,收益最直接。 -
步数直接线性影响总时长
官方 50 步 → 默认 20 步可省 60% 时间;快速验证可压到
--steps 8。 -
VAE 解码是独立瓶颈,且是"全帧一次解码"
121 帧 720p 的解码本身就可能占用数分钟。工作流中另有
VAEDecodeTiled分支(官方模板默认 Bypass), 内存吃紧时可改用它。 -
CFG 双前向
cfg=6且提供负向提示词时,每步需执行正向 + 负向两次完整 DiT 前向。 代价换来了明显的画质与指令遵循度,不建议在 720p 画质档关闭。 - 内存占用粗算(128GB 完全够用) 主模型 16.65GB + 文本编码器 9.38GB + 字形 0.44GB + VAE 2.52GB ≈ 29GB 常驻, 加上注意力激活与 VAE 解码峰值,建议预留 40–50GB。 ComfyUI 默认的智能显存管理会在文本编码后卸载 CLIP,实际峰值更友好。
| 手段 | 效果 | 代价 |
|---|---|---|
--duration 2.5(61 帧) |
耗时约减半 | 视频更短 |
--steps 8 |
耗时约 -60% | 细节与运动质量下降 |
--model-size 480p |
显著加速 | 需另下 480p 权重;分辨率上限降低 |
启用内置模板的 EasyCache |
官方称可提速 | 画质轻微损失 |
# 在仓库根目录执行
python3.13 -m pytest ComfyUI/hunyuan_video_1.5/tests/ -v覆盖范围(56 个用例,全部离线,不发起网络请求):
| 测试文件 | 覆盖内容 |
|---|---|
test_workflows.py |
T2V/I2V 工作流 JSON 可解析、节点连线指向有效、必备节点齐全、帧数满足 4n+1、分辨率满足 16 倍数、shift 为官方值、VAEDecode → CreateVideo → SaveVideo 链路完整 |
test_cli_runner.py |
参数解析与覆盖、主机地址归一化、参数注入正确且不污染模板、480p 档位切换、官方预设表完整性、模型文件前置校验(含 I2V 额外依赖 SigLIP) |
test_prompt_enhancer.py |
帧数换算边界、分辨率 16 对齐、长宽比推断、离线时降级为规则扩写、未知风格/长宽比回退、风格预设完整性 |
| 项目 | 值 |
|---|---|
| 硬件 | Mac Studio · Apple M4 Max · 128GB 统一内存 |
| 系统 | Darwin 27.0.0 (macOS 26) |
| ComfyUI | v0.37.4(前端 1.52.7,模板 0.11.69) |
| 后端 | PyTorch MPS,fp16 权重 |
| 扩写模型 | qwen/qwen3-vl-8b @ LM Studio (:1234) |
状态:待实跑填充。模型下载完成后由
hunyuan_video15_test.py实测写入, 每次运行同时会落盘output/report_<prompt_id>.json。
| 档位 | 分辨率 | 帧数 | 步数 | cfg | shift | 总耗时 |
|---|---|---|---|---|---|---|
| T2V 快速验证 | 1280x720 | 61 | 8 | 6 | 7 | 待测 |
| T2V 官方画质 | 1280x720 | 121 | 20 | 6 | 7 | 待测 |
| I2V 快速验证 | 1280x720 | 61 | 8 | 6 | 7 | 待测 |
| 现象 | 原因与解法 |
|---|---|
value not in list: unet_name / clip_name / vae_name |
对应模型文件未下载到位或软链接失效 → 执行 ./download_models.sh,然后在 ComfyUI 点击"刷新" |
DualCLIPLoader 报 type 非法 |
必须选择 hunyuan_video_15(不是 hunyuan_video,后者是初代 13B 的编码器类型) |
| 帧数报错 / 输出画面闪烁跳帧 | 帧数必须是 4n+1(如 61、121);分辨率必须是 16 的整数倍 |
| OOM / 内存不足 | 降低 --duration、改用 --model-size 480p,或把 UNETLoader 的 weight_dtype 改为 fp8_e4m3fn |
| 画面中文字/中文标点糊成一团 | 确认 byt5_small_glyphxl_fp16.safetensors 已加载;该字形编码器专治文字渲染 |
| VAE 解码阶段长时间无输出 | 属正常现象,121 帧 720p 解码本身耗时数分钟 |
| i2v 报找不到起始帧 | 确认 --image 路径存在;脚本会先 POST /upload/image 再回填节点 |
| i2v 生成结果与原图差异过大 | I2V 采用 SigLIP 语义对齐而非逐像素约束,动作幅度大时主体会漂移,属模型特性 |
你最初提供的 https://github.com/Tencent-Hunyuan/HunyuanVideo 是 2024 年 12 月开源的初代 13B 模型,
其权重体积与算力需求都远超本机舒适区(fp16 主模型 25.65GB,且为全注意力架构)。
ComfyUI 目前仍然保留它的节点类型(DualCLIPLoader 的 hunyuan_video 类型、
EmptyHunyuanLatentVideo 节点、hunyuan_video_text_to_video 内置模板)。
本目录聚焦 1.5 版本:参数量减少 36%,画质反而更强,且原生支持 I2V 与 1080P 超分,
是 Apple Silicon 上更现实的选择。若后续确实需要对照初代 13B,可参考
city96/HunyuanVideo-gguf 的 Q4_K_M 量化(7.88GB)版本。