网上已经有 MiniMax 的「保姆级」教程了,这篇不重复那条路。
这篇只干一件事:在 8G 显存最低配上,从头到尾把 MiniMax H3 跑通。机器是 RTX 3060 Ti 8GB + 56GB 内存。能出什么规格、要等多久、开到哪一档会撞墙——全是这台机器上的实测,不是官方推荐表抄下来的。
MiniMax H3 是画面和声音一次生成的视频模型:环境音、音效、配乐和画面在同一次前向传播里一起算,口型和动作天生跟声音对齐。ComfyUI 已原生支持本地跑。
先看成品。下面这条 10 秒视频是纯文字生成,没有任何输入素材:画面、雨声、海浪声、配乐、结尾那行中文字,全是模型一次出的。(记得开声音。)
目录
- 先看懂几个词
- 8G 最低配:我们这台机器
- 装 ComfyUI
- 下模型(4 个文件,39.6 GB)
- ⚠️ 我踩的坑:下载器骗了我
- 跑通第一条视频
- 两条硬规则:帧数和分辨率
- 提示词的三字段格式
- 给结尾加自己的品牌
- 全部实测耗时
- 常见报错速查
- 脚本和工作流
1. 先看懂几个词
不看这几个词,后面的报错你会看不懂。
ComfyUI 是跑 AI 生成模型的免费开源工作台。界面是节点连线式的,看着复杂,但你不需要自己连:官方模板都做好了,你只改参数。
**工作流(Workflow)**就是一张连好线的节点图,相当于配方。加载模板 = 打开现成配方。
权重 / 模型文件是模型本体,后缀「.safetensors」的大文件。H3 需要 4 个:DiT(画画)、文本编码器(读提示词)、视频 VAE、音频 VAE(把内部数据翻译成像素和声波)。
量化是把模型压小的技术。「bf16」是全精度原版,「int8」、「nvfp4」是压缩版,画质损失很小、显存需求大降。本地部署基本都用量化版。
T2V / I2V / R2V分别是纯文字生成、给图片让它动起来、给参考素材锁定角色或风格。这篇只讲 T2V。
2. 8G 最低配:我们这台机器
- CPU:Intel i7-10700F @ 2.90 GHz
- 显卡:NVIDIA GeForce RTX 3060 Ti,8 GB
- 内存:56 GB
- 硬盘:4.56 TB(开始下载时剩 223 GB)
后面所有耗时、能不能跑、开到哪一档会撞墙,都是这台 8G 卡上的边界——不是 24G / 48G 机器的体验。
关于配置,只说一件真正重要的事:内存比显存更是门槛。
H3 的四个模型文件加起来 39.6 GB。ComfyUI 启动时会打出:
DynamicVRAM support detected and enabled
它的做法是把权重全部常驻系统内存,计算时按层流式换入显存。跑起来之后日志会告诉你分配了多少:约 40.5 GB 全部躺在内存里。
所以内存 32 GB 是底线,64 GB 才舒服;内存不够会直接卡死在加载阶段。权重一定放固态,机械盘上每次生成都要多等好几分钟,因为分层加载需要反复读盘。
显存决定的是「能开多大规格、等多久」,不是「能不能跑」。8G 最低配也能跑通,具体能开到哪一档见第 10 节。
3. 装 ComfyUI
**版本必须 ≥ 0.30.0。**H3 的原生节点是 2026 年 8 月才合并进 ComfyUI 的,旧版任何工作流都跑不起来。
全新安装推荐直接去 ComfyUI 官网下桌面版安装包,双击一路默认。Python、PyTorch、CUDA 依赖它自己处理,这是桌面版对新手最友好的地方。
已有 ComfyUI 的,桌面版在菜单里检查更新;手动 git 部署的进目录执行 git pull,再执行 pip install -r requirements.txt。
启动后浏览器打开 http://127.0.0.1:8188,看到节点画布就行。确认版本:设置(左下角齿轮)→ 关于,版本号 ≥ 0.30.0。
低于这个版本就去更新,别硬试。「缺少 MiniMaxH3ImageToVideo 节点」这个最高频报错,99% 是版本问题。
我的环境最后是:ComfyUI 0.31.0 / 前端 1.48.7 / torch 2.12.1+cu130 / Python 3.13.12 / CUDA 13.0。
首次启动会让你挑一个 starter workflow,MiniMax H3 就在推荐位。注意那里标的 ~53 GB 不准:T2V / I2V 真正需要的是 4 个文件、39.6 GB。多出来的十几 GB 是 R2V 那套单独的权重,只有你要做「参考生视频」才用得到。
4. 下模型:4 个文件,39.6 GB
模型托管在 Hugging Face 的「Comfy-Org/MiniMax-H3」仓库。别 clone 整个仓库——原始仓库有几百 GB,各种精度版本全在里面,你只要 4 个文件。
两个 VAE 都必须下:视频 VAE 出画面,音频 VAE 出声音——少了音频 VAE,你会得到一条无声视频。
选型也很简单:上面这组是官方推荐的通吃组合,任何显卡都先用它跑通。文本编码器选「nvfp4」而不是更大的「int8」版,是因为它小 10 GB——在内存吃紧的机器上,省 10 GB 内存比省一点计算重要得多。
国内下载时,可以把链接里的 huggingface.co 换成 hf-mirror.com,速度差一个量级。20 GB 的大文件务必用支持断点续传的工具(IDM、aria2,或文末那个脚本),断了不用重来。
放完目录结构应该是这样。桌面版用户注意:模型目录可能在安装时自选的路径下,设置里搜 model paths 确认。
5. ⚠️ 我踩的坑:下载器骗了我
这一节是这篇最值钱的部分,因为它会让你怀疑是不是自己哪里装错了。
我用桌面版内置的下载器下,进度条跑完,Downloads 面板四个全绿勾、全部显示「完成」。盯着面板看第二眼才发现不对:DiT 显示 3.13 GB,应该是 19.53 GB;文本编码器显示 2.67 GB,应该是 14.61 GB。
也就是说,下载中断之后,下载器没有报错,直接把截断的文件标成了完成。
点 Run,报错:
RuntimeError: shape '[151936, 5120]' is invalid for input of size 149999876
这行错误极具误导性。它看起来像模型版本不匹配、像 ComfyUI 有 bug、像量化格式不支持,你很容易跑去重装 PyTorch、换量化版、翻 issue。
但它的真实含义只有一个:**.safetensors 文件被截断了。**header 里声明某个张量的形状是 [151936, 5120](文本编码器的 embedding,151936 × 5120),但文件里实际只剩 149999876 个元素,一读就炸。
确认文件完整有两种方法。第一种最简单:文件大小对照下载页面标的字节数。每个下载好的模型旁边还有一个 .safetensors.dl-meta 小 JSON,里面写着权威的 expectedSize 和 sha256——信这个,别信面板上的绿勾。
第二种更严格:解析 safetensors 的 header,把所有张量 data_offsets 的末尾取最大值,加上 header 长度,再和文件实际大小对比,必须严格相等。这个检查能在你浪费两小时之前告诉你答案。
修复时别重下,直接续传。HTTP Range 断点续传只补缺的字节,核心就是:
curl -L --fail --retry 8 --retry-delay 5 --retry-all-errors \
--continue-at - --progress-bar -o "$path" "$url"
我把它包成了一个脚本,带大小和 SHA256 双校验,加 -Mirror 参数走国内镜像。中途断了重跑同一条命令,会自动接着下。
我最后补的是 28.34 GB。四行全绿,这一步才算真的过。
6. 跑通第一条视频
顶部菜单 工作流 → 浏览模板 → 视频,搜索「MiniMax H3」。会出来 6 个,认清楚别点错:本地版三个(Text to Video / Image to Video / Reference to Video),api_ 开头的三个是调云端的、要充值。
从 Text to Video 开始。加载后画布上有一串节点,你只需要认识几个:UNETLoader 负责选 DiT 权重;文本编码器加载节点选 qwen3vl_32b_...;两个 VAE Loader 分别选视频 VAE 和音频 VAE;ResolutionSelector 控制输出分辨率;提示词框写内容;时长输入决定视频长度;SaveVideo 是输出 MP4 的终点。
如果哪个模型下拉框是空的或红的,说明那个文件没下完,回第 5 节。
我第一条的参数是 ResolutionSelector 的 Megapixels = 0.3 → 736×416,时长 5 秒,点 Run。
结果:292 秒。
出来的是一条带声音的 MP4。ffprobe 验过:H.264 + AAC,32000 Hz、双声道,和官方标的「32 kHz 立体声」一致。
这里有两个正常现象。第一,进度条会长时间停在模型加载阶段:约 34 GB 要从磁盘进内存,小显存卡还要反复换入换出,这一段慢是正常的。第二,控制台刷这行不是报错:
Input tensors must be in dtype of torch.float16 or torch.bfloat16, using pytorch attention instead
这是部分层回退到标准 attention 的提示,不影响生成。
判断跑到哪了,看队列面板里 SamplerCustomAdvanced 的百分比。这个工作流是 20 步。别看 Estimated to finish in——样本少的时候它会算出荒谬的值。我见过已经跑了 31 分钟的任务,它还显示「约 1 秒后完成」。Total: xx% 也别只看,那是整图的节点级进度,不等于采样进度。
7. 两条硬规则:帧数和分辨率
这两条不是经验之谈,是工作流里写死的。
规则一:帧数必须落在 17k+5 网格。
模板里的数学表达式是:
max(5, round(a*24)) + (5 - (max(5, round(a*24)) % 17)) % 17
翻译一下:帧数必须满足 n % 17 == 5,不合法的值会被静默向上吸附——不报错、不提示。
官方标的输出时长是 4–15 秒 @ 24fps。所以填 60 秒也只会得到 15 秒左右,更长内容要分镜头生成再剪辑。
**规则二:原生画布是短边 768。**官方说明默认短边 768 像素,支持 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16。ComfyUI 模板自带的档位是:
- 0.2:608×352
- 0.3:736×416
- 0.4:864×480
- 0.5:960×544
- 1.0:1344×768(原生画布)
我的建议是:**用 0.3(736×416)反复试提示词,定稿再考虑往上抬。**为什么不是一步到原生画布,第 10 节有实测答案。
8. 提示词的三字段格式
这是从「能跑」到「能用」的分界线。H3 的提示词是官方定义的结构化格式,不是散文。三个字段顺序固定:
integrated_multimodal_description: [Shot 1] ...
overall_soundscape: ...
non_diegetic_music: ...
后两段没内容就写 N/A。除对白和画面内文字保留原语言外,全部用英文写。
[Shot 1] 开头交代整体风格 + 初始构图,不带时间戳。风格词可以用 Cinematic / live-action / 2D-animated / 3D CG / watercolor / vintage film。
后续镜头带严格递增的时间戳,例如:
[Shot 2] At 00:03.500, the camera cuts to ...
运镜写成镜头内自然的英文句子,别在句尾堆标签:
The camera pushes in with small amplitude at slow speed toward the phone in his hands.
The camera holds a static shot as the wave slides toward the lens.
中等幅度、正常速度直接省略不写。**想要构图绝对稳定,别用「小幅度推近」——直接锁静态,并把要保留在画面内的东西列出来。**我实测 10 秒零漂移。
有对白的话,给会出声的角色分配稳定 ID,比如 (S1)、(S2),台词包在 <d>[语言] ... </d> 里,一字不改、不翻译。身份和语气描述放标签外面:
The young woman with a quiet voice (S1) says: <d>[English] I get off at seven.</d>
还有一个意外:中文字它写对了。
我在结尾那一镜让它渲染一行中文标语,写法是把原文放在英文双引号里、不翻译。我本来做好了糊掉、错字、缺笔画的心理准备——视频模型渲染汉字普遍不行,结果一个字都没错,笔画完整、居中、稳稳停到结尾。上面那条成品视频里就是。
9. 给结尾加自己的品牌
标语模型能写对,但你的专属 IP 形象它画不出来——它只会画一个「它以为的」东西。这个别指望提示词。
正确做法是生成完之后用 ffmpeg 精确合成。把 logo(和需要的文字)预渲染成一张带 alpha 的 PNG,叠上去淡入;-c:a copy 直接复制音轨,模型生成的那条立体声一点不动。
这里有三个实操细节。第一,logo 原图四角如果是黑的(RGB 没有 alpha 通道),直接叠会出一个黑方块,需要先按圆形或原始轮廓做抗锯齿 alpha 遮罩。
第二,位置要看成片再定。我一开始放底部居中,结果发现画面主体最后正好停在下方中央,logo 压在上面;放中部也挡主体。最后放顶部,因为那片天空是空的,再加一层顶部渐变压暗保证白字可读。先抽末帧试三个位置,比直接猜省事。
第三,停留时间要靠冻帧买,不是靠提前淡入。让演出完整演完,然后冻住最后一帧:
[0:v]tpad=stop_mode=clone:stop_duration=1.8[vp];
[0:a]apad=pad_dur=1.8,afade=t=out:st=<总长-0.9>:d=0.9[a]
视频克隆末帧停 1.8 秒,音频同步补齐并在最后 0.9 秒淡出。配合提前 2.2 秒开始淡入,片尾总露出约 4 秒——足够视觉停留,又不损失任何画面内容。
10. 全部实测耗时:8G 最低配
下面这张表里的数据,全部是 RTX 3060 Ti 8GB 真跑出来的。
两个结论可以直接拿走:**一、I2V 不比 T2V 贵。**同规格下几乎同价,多一张输入图不额外收费。**二、时长维度是超线性的。**5 秒 292 秒、10 秒 773 秒——时长翻倍,耗时 2.6 倍,这符合 attention 对 token 数的复杂度。
真正关键的是那次撞墙。
跑通 736×416 只花 5 分钟,我当时想:像素多一点应该也就十几二十分钟。于是按 Megapixels 1.0(1344×768)、10 秒点了 Run。
31 分钟后,采样器进度:5%。
20 步里刚做完 1 步。一步 20 分钟,20 步约 10 小时,我直接停掉了。
关键是这个反差:像素涨 3.4 倍、帧数涨 2 倍,计算量总共涨 6.7 倍,而耗时涨了约 125 倍。
差出的这 20 倍不是算力不够,而是内存墙。回到第 2 节:权重是流式换入显存的,剩给激活值的余量本来就薄。而激活值和 attention 的工作集会随「像素 × 帧数」增长。撑破那点余量之后,每一步都要把约 20 GB 权重重新从内存搬进显存,从「算得慢」直接变成「几乎全程在等 PCIe」。
这是断崖,不是平滑变慢。
所以在你的机器上,先找到甜点区,别想当然往上推。方法很简单:开一档,跑 2 分钟,看采样器百分比推进了多少,反推总时长;不对劲立刻停。
也别指望加速节点救这个。Cache 类节点省的是计算和步数,而这里真正卡住的是显存带宽,省下来的那点时间在这个量级面前没有意义。画质不够,就在提示词和构图上找,别硬拉分辨率。736×416 在手机上看已经够用,而拉到原生画布的代价你已经看到了。
如果你的卡显存更大,上限自然更高;这张表只是 8G 最低配 的边界,方法可以照搬。
11. 常见报错速查
Q:提示缺少 MiniMaxH3ImageToVideo 等节点?
A:ComfyUI 版本低于 0.30.0,升级。这是最高频的问题。
Q:RuntimeError: shape '[...]' is invalid for input of size ...?
A:模型文件被截断了,不是版本或量化问题。对照第 5 节查大小、续传补全。
Q:爆显存 / CUDA out of memory?
A:按顺序排:① 确认用的是量化版(pruned_int8 + nvfp4_awq),别误下 bf16;② 关掉其他吃显存的程序,包括浏览器(硬件加速会占 1–2 GB);③ 内存拉到 32 GB 以上。注意:降分辨率救不了爆显存,因为显存大头是模型本身;但降分辨率能救「跑不动」,见第 10 节——这是两件不同的事。
Q:输出视频没有声音?
A:两个 VAE 都要加载,并确认工作流里音频 VAE 和 SaveVideo 之间的链路完整。用官方模板一般不会错,自己改工作流最容易漏掉这条线。
Q:视频时长和我填的不一样?
A:帧数被吸附到 17k+5 网格了,见第 7 节。从合法帧数表里直接抄。
Q:控制台刷 dtype 警告?
A:正常现象,部分层回退到标准 attention,不影响生成。
Q:进度条不动,是不是卡死了?
A:看队列面板里的 SamplerCustomAdvanced 百分比,别看 Estimated to finish in,它会瞎报。加载阶段本身就慢,模型放机械盘更慢。
12. 脚本和工作流
配套打包里有三样东西:
- 断点续传脚本:补全被截断的模型文件,带大小 + SHA256 双校验,
-Mirror走国内镜像。 - 工作流:T2V(5 秒 / 10 秒,736×416),参数都调好了。
- 片尾合成脚本:logo + 标语 + 冻帧停留,一条命令出成片。
需要的话评论区问我怎么拿。
最后
8G 最低配能跑通,不代表什么规格都能开——甜点在 736×416,原生画布在这台机器上是断崖。
本地真正值钱的是试错阶段:一条 5 秒片走云端 API 要花钱,本地只有电费。反复改提示词、筛构图、试运镜,成本几乎为零。定稿后再考虑要不要用 API 出高分辨率,那笔账才划算。
有问题直接评论——8G 这档我们跑过的,我都能答。
整体上我主要做了三件事:合并碎段、减少「一句一段」的节奏、把连续解释放回同一个信息单元里。技术数据、命令、报错和关键结论都没有删。







暂无评论内容