木智利
15 篇在线开始阅读
AI 本地部署 · Windows / Mac

从一段分镜,
做到一部动画。

Ollama + Qwen3 · ComfyUI + Qwen-Image-2.1 · 本地 H3。Windows RTX 4090 与 Apple Silicon Mac 双路线。文本、图片、视频全本地,含模型参数、8 份工作流、自动字幕、配音混音与 30 秒自动剪辑。

作者:小佛爷 · 智能体先锋队成员15 步8 份工作流全本地推理
FIG 14 · LOCAL.FRAMESGUIDE
TEXT · IMAGE · MOTIONWindows / Mac
01

STEP 01 / 15

先选机器:三项全本地,按阶段顺序运行

面向 3D 动画短剧:Ollama 写剧本与分镜,Qwen-Image-2.1 生成角色定妆和每镜首帧,MiniMax H3 把首帧变成带声音的短镜头,再在本机剪辑。先完成一部约 30 秒、6 镜头的小片。

Windows / RTX 4090Apple Silicon Mac
阶段准确模型与参数本篇用法
文本Qwen3-30B-A3B-Instruct-2507:总计 30.5B,激活约 3.3BOllama 标签 qwen3:30b-a3b-instruct-2507-q4_K_M;约 19GB 下载。
图片Qwen-Image-2.1:7B 生成器 + 独立 8B 编码器Windows 用 INT8 ConvRot;Mac 用 BF16。关闭额外提示词增强器,无需额外 9B 模型。
视频MiniMax H3:33B 稠密生成器 + 独立 32B 编码器Windows 用裁剪量化版;约 13B AdaLN 可预计算/裁剪后,生成器推理部分约 20B。33B 是原始生成器参数量。
Windows 推荐配置

Windows 11、RTX 4090 24GB、64GB 系统内存、NVMe 空闲约 200GB。24GB 显存采用文本、图片、视频分阶段加载,编码器与生成器由 ComfyUI 动态管理。

Mac 规划配置

Apple Silicon、macOS 15 或更新。完整 H3 制作路线按 Max 级芯片、128GB 统一内存与高性能 SSD 规划,空闲约 350GB;先用验证档检查加载,再使用原生 768p 质量档。

图 1:先锁定角色,再逐镜生成
图 1:先锁定角色,再逐镜生成本站工作流示意图。模型下载和依赖安装需要联网;下载齐全后,文本、图片与视频推理均在本机完成。
完成标志
  • 确认机器、磁盘空间与使用范围,选择 Windows 或 Mac 路线。
02

STEP 02 / 15

建一个项目目录,把角色、首帧和镜头分开保存

建议目录如下。角色定妆通过后保存一份主版本;每镜保存自己的提示词、seed、工作流与输出。后续只重做有问题的镜头。

My3DShort/
  00_story/          剧本、分镜、角色设定
  01_character/      阿木定妆主图
  02_first_frames/   shot01.png ... shot06.png
  03_video/          shot01.mp4 ... shot06.mp4
  04_edit/           剪辑工程、字幕、最终成片
  workflows/        当前使用的JSON

工作流直接从本站下载

保存 JSON 后拖进 ComfyUI 画布,或使用菜单的“打开”。这些文件是 UI 工作流,不是 API 请求 JSON。图片节点要重新上传自己的文件;不能保留示例文件名直接点运行。

Windows · 角色定妆Windows · 首帧编辑Windows · 视频验证档Windows · 视频质量档
Mac · 角色定妆Mac · 首帧编辑Mac · 视频验证档Mac · 视频质量档

30 秒制作单:《迟到的包裹》

全片六镜,每镜交付 5 秒。先让观众看懂“赶不上”,再揭示“有人一直等着”,最后用礼物反转。固定夕阳从画面左侧照入、长椅在右侧、包裹红带与人物服装。镜头切换时延续视线与道具位置。

镜号 / 时间首帧与主要动作接镜与声音
01 · 00–05秒中远景:阿木在左,双手抱包裹,望向右侧空站台,肩膀慢慢落下。静机位或轻推;远去的列车声。包裹固定胸前。
02 · 05–10秒包裹近景:双手姿势接上镜;一小段红缎带被风轻轻掀起。同侧光,红带指向画面右;风声与纸张轻响。
03 · 10–15秒阿木中近景:手与包裹保持原位,只抬眼向画面右侧看。视线引向长椅;轻推。可用短句“还在等我?”
04 · 15–20秒反打中景:灰发奶奶穿米色开衫坐在长椅上,朝画面左侧轻轻招手。奶奶视线接阿木。短句“我等的是你。”声音后期统一。
05 · 20–25秒双人中景:首帧已摆好交接姿势,阿木把包裹往前递,奶奶伸手接稳。包裹仍在两人之间;用简单递交动作,纸张摩擦声。
06 · 25–30秒中近景:奶奶手中已拿出小围巾,阿木看着围巾笑起来。借剪辑省去拆包过程。奶奶一句“给送包裹的人。”在最后一秒留表情。

奶奶也先制作一张固定定妆图:灰色短发、米色针织开衫、墨绿色长裙、圆润 3D 材质。双人首帧在编辑工作流中把奶奶参考接到 image_3,并在提示词中指定 <image3> 只约束奶奶。第 6 镜直接制作“围巾已取出”的首帧,以接镜完成拆包过程。

用本地 Qwen3 扩写为逐镜制作文件

下面的制作指令同时约束剧情、角色、首帧参考关系与 H3 音视频字段。生成后把六镜提示词逐一保存,拍摄轴线与包裹位置按上表审核。

你是本地3D动画短剧制作导演。为30秒原创短剧《迟到的包裹》输出可执行制作单。
固定资产:阿木,短栗发、棕眼、橙色雨衣(帽子放下)、深蓝斜挎包、深色靴子;牛皮纸包裹、红缎带;暖色夕阳小镇站台,光从画面左侧进入,长椅在右侧。
六镜各5秒:站台失落→发现包裹红带被风掀起→顺红带看向右侧长椅→长椅上出现等候的老奶奶→阿木递出包裹→奶奶从包裹取出小围巾给阿木,完成反转。
先输出角色与场景资产表。再输出6镜表:镜号、5秒时长、景别、首帧构图、唯一主要动作、机位及轻微运镜、道具与视线接续、环境声、可选短对白、验收点。
为每镜分别输出英文布局图提示词、Qwen首帧编辑提示词、H3视频提示词。参考图1是该镜1344×768布局,参考图2是角色定妆。多角色镜头另附同一奶奶定妆参考。
H3采用单首帧I2VA:第一行逐字为“For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.”;空一行后只使用 integrated_multimodal_description、overall_soundscape、non_diegetic_music 三字段。每个独立文件从[Shot 1]开始,先锚定首帧再写动作、运镜和结果;每镜只安排一个主体动作。音乐字段默认N/A。
对白使用(S1)阿木、(S2)奶奶,音色说明在标签外,台词在<d>[Chinese]台词。</d>内,每句12字以内。纯环境声版本省去对白句。
保持人物、服装、灯位、视线与包裹交接位置一致。只输出制作内容。
完成标志
  • 项目目录已建好,已保存对应平台的工作流文件。
03

STEP 03 / 15

Windows:安装 Ollama,解压 NVIDIA 版 ComfyUI

下面统一使用 D:\AI。没有 D 盘时,把本篇所有 D:\AI 一并改为有足够空间的目录。先更新 NVIDIA 驱动,再在 PowerShell 逐条执行;安装器弹出后按界面完成安装。

New-Item -ItemType Directory -Path 'D:\AI' -Force | Out-Null
Set-Location 'D:\AI'
curl.exe -L --fail --retry 3 -o OllamaSetup.exe https://ollama.com/download/OllamaSetup.exe
.\OllamaSetup.exe
curl.exe -L --fail --retry 3 -o ComfyUI_windows_portable_nvidia.7z https://github.com/Comfy-Org/ComfyUI/releases/download/v0.43.0/ComfyUI_windows_portable_nvidia.7z
  1. 完整解压

    用 7-Zip 解压,确认存在 D:\AI\ComfyUI_windows_portable\ComfyUI\main.py 和 python_embeded\python.exe。不要在压缩包内运行。

  2. 第一次启动

    双击 run_nvidia_gpu.bat。终端出现 http://127.0.0.1:8188 后,在浏览器打开这个本机地址,保持终端开着。

  3. 核对运行设备

    启动日志应识别 NVIDIA RTX 4090 / CUDA;若只有 CPU,先解决驱动或包架构问题。不要下载 AMD、ARM 或旧 CUDA 兼容包。

标准 Portable 已含 Python 和匹配的运行时;不需要为本篇另装整套 CUDA Toolkit。先用下面命令关闭 Ollama 的云功能,再从托盘退出并重新打开 Ollama:

[Environment]::SetEnvironmentVariable('OLLAMA_NO_CLOUD','1','User')
完成标志
  • Ollama 已安装;ComfyUI 本机页面可打开,启动日志识别 NVIDIA GPU。
04

STEP 04 / 15

Ollama:拉取准确标签,生成角色设定和分镜

不要只输入 qwen3 或 latest:它们不等于本篇的 30.5B 型号。新开 PowerShell 执行:

ollama pull qwen3:30b-a3b-instruct-2507-q4_K_M
ollama run qwen3:30b-a3b-instruct-2507-q4_K_M

进入对话后先输入 /set parameter num_ctx 8192,再复制下面的制作提示词。此 Instruct 标签采用非思考模式。

你是本地3D动画短剧制作导演。为30秒原创短剧《迟到的包裹》输出可执行制作单。
固定资产:阿木,短栗发、棕眼、橙色雨衣(帽子放下)、深蓝斜挎包、深色靴子;牛皮纸包裹、红缎带;暖色夕阳小镇站台,光从画面左侧进入,长椅在右侧。
六镜各5秒:站台失落→发现包裹红带被风掀起→顺红带看向右侧长椅→长椅上出现等候的老奶奶→阿木递出包裹→奶奶从包裹取出小围巾给阿木,完成反转。
先输出角色与场景资产表。再输出6镜表:镜号、5秒时长、景别、首帧构图、唯一主要动作、机位及轻微运镜、道具与视线接续、环境声、可选短对白、验收点。
为每镜分别输出英文布局图提示词、Qwen首帧编辑提示词、H3视频提示词。参考图1是该镜1344×768布局,参考图2是角色定妆。多角色镜头另附同一奶奶定妆参考。
H3采用单首帧I2VA:第一行逐字为“For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.”;空一行后只使用 integrated_multimodal_description、overall_soundscape、non_diegetic_music 三字段。每个独立文件从[Shot 1]开始,先锚定首帧再写动作、运镜和结果;每镜只安排一个主体动作。音乐字段默认N/A。
对白使用(S1)阿木、(S2)奶奶,音色说明在标签外,台词在<d>[Chinese]台词。</d>内,每句12字以内。纯环境声版本省去对白句。
保持人物、服装、灯位、视线与包裹交接位置一致。只输出制作内容。

本地 API 可以直接调用

保持 Ollama 运行,以下请求只发到本机 127.0.0.1:11434。keep_alive=0 让本次回答后卸载模型,给图片阶段腾出空间。

$storyRequest = @{
  model = 'qwen3:30b-a3b-instruct-2507-q4_K_M'
  messages = @(@{role='user'; content='为原创3D动画短剧写6个镜头。角色是橙色雨衣、短栗色头发、深蓝斜挎包的阿木;每镜只安排一个主要动作,列出首帧、运镜和环境声。'})
  stream = $false
  keep_alive = 0
  options = @{num_ctx=8192; temperature=0.7}
} | ConvertTo-Json -Depth 8
$storyResult = Invoke-RestMethod -Uri 'http://127.0.0.1:11434/api/chat' -Method Post -ContentType 'application/json; charset=utf-8' -Body ([Text.Encoding]::UTF8.GetBytes($storyRequest))
$storyResult.message.content

交互对话结束输入 /bye。做图前确认文本模型不再驻留:

ollama stop qwen3:30b-a3b-instruct-2507-q4_K_M
ollama ps
完成标志
  • 分镜和角色设定已保存;本地 API 能回答,图片生成前 Ollama 已释放模型。
05

STEP 05 / 15

Qwen-Image-2.1:下载三个文件,先出角色定妆

三个文件约 16.10GiB。在 PowerShell 执行下面整段,保存到 Portable 内的正确模型分类目录。重复执行会重新下载同名文件;下载失败时先处理错误,不修改文件扩展名。

$comfyRoot = 'D:\AI\ComfyUI_windows_portable\ComfyUI'
$modelRepo = 'Comfy-Org/Qwen-Image-2.1'
$modelFiles = @(
  'diffusion_models/qwen_image_2.1_int8_convrot.safetensors'
  'text_encoders/qwen3vl_8b_int8_convrot.safetensors'
  'vae/qwen_image_2.1_vae_bf16.safetensors'
)
foreach ($modelFile in $modelFiles) {
  $destination = Join-Path (Join-Path $comfyRoot 'models') $modelFile
  New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
  curl.exe -L --fail --retry 3 --output $destination "https://huggingface.co/$modelRepo/resolve/main/$modelFile"
  if ($LASTEXITCODE -ne 0) { throw "下载失败,请先处理:$modelFile" }
}

下载完成后重启 ComfyUI,导入本站“Windows · 角色定妆”工作流。确认生成器、编码器、VAE 三个下拉框分别是刚下载的文件;refine_prompt 关闭,提示词增强器 PE 不是必需模型。

设置正式定妆
分辨率 / batch1024 × 1024 / 1
steps / CFG40 / 1(快速构图预览用 25 步)
sampler / schedulereuler / simple
seed固定一个数并保存,方便逐次比较
输出Save Image 保存 PNG,复制一张到 01_character/

正向提示词复制如下。CFG=1 时,负面提示词不产生 CFG 引导作用;优先把身份、构图和材质写清楚。

Original stylized cinematic 3D animation character, Amu, a young courier boy with short chestnut hair, warm brown eyes, rounded expressive face, orange raincoat with hood down, navy crossbody satchel, dark boots. Full-body three-quarter character portrait, both hands visible, neutral warm-grey studio background, clear silhouette, soft cinematic key light, subtle subsurface skin, tactile woven fabric, physically plausible materials, restrained filmic color. One character, clean studio composition.
完成标志
  • 已生成并保存一张通过脸型、手部和衣服检查的角色主图。
06

STEP 06 / 15

先做布局,再用角色定妆锁定逐镜首帧

首帧决定角色与构图。采用“同画幅布局图+角色定妆图”的编辑方式,先摆好镜头,再将准确身份带入。

  1. 生成该镜布局

    打开定妆用的文生图工作流,把 Resolution Selector 改为 16:9、0.98MP、multiple=32,确认输出 1344×768。换成下方布局提示词,生成后保存为 shot01-layout.png。布局图负责景别、位置、手势和道具。

  2. 接入参考图

    导入“首帧编辑”。image_1 上传刚生成的 1344×768 布局;image_2 上传已验收的 amu-character.png。后者专门约束脸、服装与材质。画布上从两个 Load Image 节点分别连入对应接口。

  3. 保留布局画幅

    保持 resolution=0、custom_size=false、40 步、CFG=1、euler / simple、refine_prompt=false,使用下方编辑提示词。25 步用于构图预览。输出尺寸沿用 image_1 的 1344×768。

  4. 逐镜验收与归档

    依次保存 shot01.png 至 shot06.png。与定妆图对比脸型、发色、衣服、包带和靴子;放大检查手指、道具接触和脚下阴影;再核对视线、包裹位置和灯位。修改当前镜的构图描述时,保留参考角色的身份约束。

Stylized cinematic 3D animation opening frame, quiet small-town train platform at golden hour. A young courier boy with short chestnut hair, orange raincoat with hood down, navy crossbody satchel and dark boots stands on the left third, holding a small kraft-paper parcel with a red ribbon at chest height, looking toward the right. Medium-wide eye-level composition, warm sunlight from screen left, wooden bench in the background to the right, coherent tactile materials, clear hand and parcel silhouettes. Clean composition with open space on the right.
Use <image1> as the exact composition, camera, canvas and station layout. Use <image2> as the identity and outfit reference for Amu. Replace only the boy in <image1> with this same Amu: exact face, short chestnut hair, orange raincoat with hood down, navy crossbody satchel and dark boots from <image2>. Keep the parcel with its red ribbon, hand positions, gaze direction, warm light from screen left and the bench on screen right. Match the stylized 3D materials from <image2>. Preserve the width and height of <image1>.

验证视频也使用同一宽高的首帧副本。低分辨率验证时,将其等比缩放并居中补边到 864×480;质量档直接使用 1344×768 主图。每镜通过后保存 PNG、提示词、seed 和 JSON。做视频前重启 ComfyUI 释放图片模型。

完成标志
  • 六镜首帧画幅一致、角色参考准确,身份、手部、道具和镜头接续均已检查。
07

STEP 07 / 15

H3:下载本地图生视频模型,别选 API 节点

Windows 五件套约 39.14GiB。视频 VAE 与音频 VAE 都需要;8 步 LoRA 一并备好,便于模板模型检查与后续对比,但本篇先 关闭 Turbo。

$comfyRoot = 'D:\AI\ComfyUI_windows_portable\ComfyUI'
$modelRepo = 'Comfy-Org/MiniMax-H3'
$modelFiles = @(
  'diffusion_models/minimax_h3_fl2va_pruned_int8_convrot.safetensors'
  'text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors'
  'vae/minimax_h3_video_vae_int8_convrot.safetensors'
  'vae/minimax_h3_audio_vae_fp32.safetensors'
  'loras/minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors'
)
foreach ($modelFile in $modelFiles) {
  $destination = Join-Path (Join-Path $comfyRoot 'models') $modelFile
  New-Item -ItemType Directory -Path (Split-Path $destination) -Force | Out-Null
  curl.exe -L --fail --retry 3 --output $destination "https://huggingface.co/$modelRepo/resolve/main/$modelFile"
  if ($LASTEXITCODE -ne 0) { throw "下载失败,请先处理:$modelFile" }
}
图 2:首帧进入本地 H3,再保存视频
图 2:首帧进入本地 H3,再保存视频工作流结构示意。这里的 H3 是本地核心节点,声音也由本机模型生成。

重启 ComfyUI 后导入“Windows · 视频验证档”,Load Image 重新上传自己的首帧。保留图生视频子图与 Save Video 的连接。若界面让你填写云端 API Key,说明选错了节点。

完成标志
  • 五个模型在正确目录,工作流能识别,输入是自己的首帧。
08

STEP 08 / 15

先做一镜验证,再升到原生 768p 质量档

一镜安排一个主要动作,先控制在约 5 秒。外层 Resolution Selector 的连线会覆盖子图内的宽高;只改子图数字不会生效。

参数验证档正式质量档
外层 aspect16:9 (Widescreen)16:9 (Widescreen)
megapixels / multiple0.4 / 320.98 / 32
实际宽高864 × 4801344 × 768
duration / batch5 / 15 / 1
Turbo / stepsfalse / 20false / 20
引导与编码保留默认 BasicGuider、24fps保留默认 BasicGuider、24fps
下载验证档下载质量档

外层保持 0.98MP / multiple=32,输出 1344×768;1.0MP 会选到更大的对齐画布。Turbo=false 时模板执行 Base 的 20 步分支,内部 Turbo 分支的静态数字不参与本次采样。

For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.

integrated_multimodal_description: [Shot 1] Stylized cinematic 3D animation, the opening medium-wide composition matches <Picture 1>. Amu keeps the same face, short chestnut hair, orange raincoat, navy satchel and dark boots. He holds the red-ribbon parcel steadily at chest height and looks toward the empty platform on screen right; his shoulders slowly settle in disappointment. The camera pushes in with small amplitude at slow speed. Warm sunlight stays on screen left and the wooden bench remains on screen right. The shot follows one continuous restrained movement.

overall_soundscape: A distant train fades into a soft station hum. A light breeze brushes the coat fabric.

non_diegetic_music: N/A

提示词按“首帧 → 动作 → 声音”组织

上方第一行锚定 0 秒首帧。integrated_multimodal_description 写人物动作、机位和对白;overall_soundscape 写环境声与动作声;non_diegetic_music 写配乐,本片先填 N/A。每次生成一个镜头,镜头编号从 [Shot 1] 开始。

要做第 3 镜对白,先换成该镜首帧,再使用下例。声线描述和 (S1) 放标签外,中文台词放进 <d>[Chinese]…</d>。一镜一句短对白,并留出收尾表情。

For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.

integrated_multimodal_description: [Shot 1] Stylized cinematic 3D animation, the opening medium-wide composition matches <Picture 1>. Amu keeps the same face, short chestnut hair, orange raincoat, navy satchel and dark boots. He holds the red-ribbon parcel steadily at chest height and lifts his eyes toward the bench on screen right. Amu, a young boy with a clear warm mid-high voice and unhurried Mandarin delivery (S1), says: <d>[Chinese] 还在等我?</d> His expression shifts from disappointment to curiosity. The camera pushes in with small amplitude at slow speed. Warm sunlight stays on screen left and the wooden bench remains on screen right. The shot follows one continuous restrained movement.

overall_soundscape: A distant train fades into a soft station hum. A light breeze brushes the coat fabric.

non_diegetic_music: N/A

跨镜头需要统一音色时,采用第 15 步的整条本地配音轨;镜头内的 H3 对白可用于口型与节奏小样。人物 ID 负责提示词中的说话者指代,连续配音轨负责最终音色。

  1. 先验证一镜

    上传与画幅匹配的首帧,填入上方提示词,点 Run / 运行,观察终端进度。首次运行依次完成编码器、生成器与 VAE 的加载。终端应持续显示阶段进度,结合显存与系统内存观察执行状态。

  2. 检查输出

    视频保存到 ComfyUI/output/video/。检查整段有没有黑帧、角色漂移、手部变形、背景跳变,听环境声是否正常。

  3. 再升质量

    验证档通过后导入质量档,重新选首帧并检查下拉模型。若 OOM,回到 0.4MP、batch=1,停掉其他 GPU 工作;不要一开始跑 15 秒。

完成标志
  • 验证档完成音视频输出,质量档逐帧通过角色、手部、动作与背景检查。
09

STEP 09 / 15

Mac:准备 Apple Silicon、独立 Python 环境与本机页面

Mac 路线使用 Apple Silicon + macOS 15 或更新,统一装到 ~/AI。完整 768p 制作按 Max 级芯片与 128GB 统一内存规划。文本、图片和视频顺序运行,每阶段结束释放模型;验证档先检查引擎和路径。

在终端先运行开发工具安装,完成系统弹窗再继续:

xcode-select --install

已安装 Homebrew 的跳过第一条。初次安装按提示确认,并完成安装器给出的 PATH 设置;Apple Silicon 通常可用下面第二条加载当前终端环境:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install python@3.12 ffmpeg ollama
mkdir -p ~/AI
cd ~/AI
git clone --branch v0.43.0 --depth 1 https://github.com/Comfy-Org/ComfyUI.git
cd ComfyUI
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install torch torchvision torchaudio
python -m pip install -r requirements.txt
python -c "import torch; print('MPS:', torch.backends.mps.is_available()); print(torch.ones(1, device='mps'))"

MPS 应为 True,张量应显示 device='mps:0'。若失败先处理系统、Python 架构与依赖,别用 CUDA 安装命令。然后启动:

cd ~/AI/ComfyUI
source .venv/bin/activate
python main.py --cpu-vae

浏览器打开 http://127.0.0.1:8188。本篇 Mac 图片采用 CPU VAE 兼容路径,解码会慢一些;生成器仍可用 MPS。终端保持开启。

完成标志
  • Mac 的 MPS 检查成功,ComfyUI 本机页面打开,ffmpeg / ffprobe 可用。
10

STEP 10 / 15

Mac Ollama:本地服务、同一精确标签与 API

若已有 Ollama App 或服务运行,先设置 launchctl setenv OLLAMA_NO_CLOUD 1,再完整退出并重新打开 App;确认使用本地标签。不要重复启动第二个服务实例。首次使用 CLI 时在一个终端运行:

OLLAMA_NO_CLOUD=1 ollama serve

保持服务终端开启,新开终端拉取并运行模型。进入对话输入 /set parameter num_ctx 8192,再复制第 4 步的完整分镜提示词。

ollama pull qwen3:30b-a3b-instruct-2507-q4_K_M
ollama run qwen3:30b-a3b-instruct-2507-q4_K_M

Mac 本地 API 请求

curl --fail http://127.0.0.1:11434/api/chat   -H 'Content-Type: application/json'   -d '{"model":"qwen3:30b-a3b-instruct-2507-q4_K_M","messages":[{"role":"user","content":"为原创3D动画短剧写6镜分镜。主角阿木穿橙色雨衣、背深蓝斜挎包,每镜仅一个主要动作,保持同一角色。"}],"stream":false,"keep_alive":0,"options":{"num_ctx":8192,"temperature":0.7}}'

返回 JSON 的 message.content 是生成内容。复制保存到项目目录,做图或视频前再检查模型已卸载:

ollama stop qwen3:30b-a3b-instruct-2507-q4_K_M
ollama ps
完成标志
  • Mac 上的文本服务与 API 均使用本机地址,分镜已保存,模型已释放。
11

STEP 11 / 15

Mac 图片用 BF16,不复用 Windows CUDA 量化包

图片生成器约 14.23GB、编码器约 17.53GB、VAE 约 0.68GB,合计约 32.44GB 下载;运行还需要额外内存。使用独立下载工具环境,不把下载工具混装进 ComfyUI。

python3.12 -m venv ~/AI/hf-tools
~/AI/hf-tools/bin/python -m pip install --upgrade huggingface_hub
~/AI/hf-tools/bin/hf download Comfy-Org/Qwen-Image-2.1   diffusion_models/qwen_image_2.1_bf16.safetensors   text_encoders/qwen3vl_8b_bf16.safetensors   vae/qwen_image_2.1_vae_bf16.safetensors   --local-dir ~/AI/ComfyUI/models

重启 ComfyUI,导入本站“Mac · 角色定妆”与“Mac · 首帧编辑”。文件下拉框必须是 BF16 文件名,VAE 使用专用文件;refine_prompt 关闭。不要把 Windows 的 INT8 ConvRot 或 H3 NVFP4 包直接搬进 MPS 路线。

Mac · 定妆工作流Mac · 编辑工作流

按第 5、6 步相同的定妆提示词、40 步、CFG=1、固定 seed 完成角色和首帧,25 步用于快速构图预览。图像验收后停止 Ollama,按 Ctrl+C 关闭 ComfyUI,接下来配置 H3 引擎后再启动,避免图片模型与视频进程争用统一内存。

完成标志
  • Mac 已生成角色与首帧;开始视频前图片模型已释放。
12

STEP 12 / 15

Mac 视频:编译本地 Metal 引擎,只下载 FL2VA

Mac 用 h3.c 原生 C / Metal 引擎,下一步再接到同一个 ComfyUI。这是社区进阶路线。FL2VA 原始权重约 144.05GB / 134.16GiB,与 Windows 的量化包不同。

cd ~/AI
git clone https://github.com/antirez/h3.c.git
cd h3.c
git checkout 8974cc055ea9c02fcd14cc27dfda3e1027c05153
make -j8
./h3 --help
ffmpeg -version
ffprobe -version

保留完整 h3.c 目录,运行时需要同目录的 h3_shaders.metal。继续用前一步的 hf-tools 下载:

~/AI/hf-tools/bin/hf download MiniMaxAI/MiniMax-H3   --revision 42ed227ee7df40d41602854ae760620d6eb651fe   --include 'FL2VA/*' 'model_index.json'   --local-dir ~/AI/h3.c/MiniMax-H3
cd ~/AI/h3.c
./h3 --info -d ./MiniMax-H3

正确结构应有 MiniMax-H3/FL2VA/transformer、text_encoder、tokenizer、processor、video_vae、audio_vae。--info 只是检查模型目录与设备,不等于已经生成视频。

完成标志
  • h3 已编译,ffmpeg 可用,FL2VA 权重完整且 --info 能识别。
13

STEP 13 / 15

把本地 H3 接入 ComfyUI:三节点完成图生视频

安装固定版本 Wild H3C 桥接,它在本机启动 h3 引擎,不调用 MiniMax 云端 API。

cd ~/AI/ComfyUI/custom_nodes
git clone https://github.com/skaiy/wild-h3c-comfyui.git
cd wild-h3c-comfyui
git checkout e08057decfe3083a9270b05cac255c0101a7208e
cat > config.json <<'JSON'
{
  "h3_binary": "~/AI/h3.c/h3",
  "model_dir": "~/AI/h3.c/MiniMax-H3"
}
JSON
cd ~/AI/ComfyUI
source .venv/bin/activate
python main.py --cpu-vae --offline

model_dir 指向包含 FL2VA 的外层目录。修改 config.json 后要重启 ComfyUI。导入本站“Mac · 视频验证档”,连接为:

Load Image→Wild H3 Text to Video
first_frame
→Save Video
设置设备验证正式质量档
width × height512 × 5121344 × 768
seconds1.05.0
steps / preset20 / precise50 / precise
seed42 / fixed42 / fixed
token_reductionfalsefalse
ssd_streaming默认 false;容量不足可单独评估默认 false;按机器情况评估
Mac · 视频验证档Mac · 视频质量档

上传匹配比例的首帧,视频提示词沿用第 8 步。验证成功后切换质量档:1344×768、5 秒、50 步。precise=50 层、reuse=1,完整执行每次去噪。保持 token_reduction=false,先关闭 ssd_streaming;通过 Save Video 保存 MP4 / H.264。

ComfyUI 节点报错时,先分开定位

在终端用下方命令做本地引擎检查。把首帧路径替换为自己真实的 PNG 绝对路径;命令不能原样带占位路径运行。

cd ~/AI/h3.c
mkdir -p outputs
cat > shot01-prompt.txt <<'PROMPT'
For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.

integrated_multimodal_description: [Shot 1] Stylized cinematic 3D animation, the opening medium-wide composition matches <Picture 1>. Amu keeps the same face, short chestnut hair, orange raincoat, navy satchel and dark boots. He holds the red-ribbon parcel steadily at chest height and looks toward the empty platform on screen right; his shoulders slowly settle in disappointment. The camera pushes in with small amplitude at slow speed. Warm sunlight stays on screen left and the wooden bench remains on screen right. The shot follows one continuous restrained movement.

overall_soundscape: A distant train fades into a soft station hum. A light breeze brushes the coat fabric.

non_diegetic_music: N/A
PROMPT
./h3 --profile -d ./MiniMax-H3   --first-frame /absolute/path/shot01.png   -p "$(cat shot01-prompt.txt)"   --width 1344 --height 768 --seconds 5   --steps 50 --layers 50 --reuse 1 --seed 42   -o outputs/shot01.mp4

终端引擎能生成、桥接却失败时再检查 config.json、首帧路径、ffmpeg PATH 与节点版本。桥接找不到命令时,从已载入 Homebrew 环境的终端启动 ComfyUI。

完成标志
  • 本地引擎与 ComfyUI 工作流分别有可播放的视频输出,画面和声音经过检查。
14

STEP 14 / 15

三项分别断网生成一次,才算完成本地验收

先下载完所有模型、模板和依赖,再做以下检查。本机 API 能回答,不单独证明图片、视频也已本地完成。不使用云模型标签或收费 API 节点。

  1. 文本

    断开网络后,用精确标签向 127.0.0.1:11434 发一个新问题,确认产生新的回答。保留 OLLAMA_NO_CLOUD 设置,不使用带 -cloud 的标签。

  2. 图片

    重启离线 ComfyUI,加载定妆工作流,用新的 seed 生成新图并保存;检查不是只看上一张缓存预览。

  3. 视频

    停止文本与图片任务,加载本机 H3 工作流,用新的 seed 生成一个短镜头,保存并播放,确认有真实输出且无远程请求依赖。

下载完成后的离线启动命令

Windows 在 Portable 根目录运行:

Set-Location 'D:\AI\ComfyUI_windows_portable'
.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --offline

Mac 在终端运行:

cd ~/AI/ComfyUI
source .venv/bin/activate
python main.py --cpu-vae --offline
现象优先检查
模型不在下拉列表是否放到 models 的正确分类;扩展名与完整下载是否正确;重启 ComfyUI。
缺少节点 / Unknown node确认 ComfyUI v0.43.0;Windows 用本地核心工作流,Mac 视频需 Wild H3C,重启看导入日志。
4090 CUDA OOM先停 Ollama,关其他 GPU 任务,重启 ComfyUI 只加载视频;batch=1,回 0.4MP 短镜头,检查64GB系统内存与页面文件空间。
旧参数似乎没变化本篇基线默认动态显存管理,--lowvram 不作为通用修复;确认外层分辨率输入与当前执行分支。
Mac 内存压力或 swap 大先释放图片模型,缩小镜头;SSD streaming 改变部分权重驻留与加载速度,按进程峰值重新安排容量。
Mac 找不到 h3 或 ffmpeg检查编译结果、config.json 外层目录、Homebrew PATH;先用终端诊断命令定位。
脸、手或服装不稳定先修正首帧与参考关系,简化单镜动作,再换 seed 对比;不要只堆更多步数。
完成标志
  • 文本、图片、视频分别完成断网生成,新结果与对应日志已保存。
15

STEP 15 / 15

六镜 30 秒:自动组片、字幕、混音与交付

按制作单挑选六个合格镜头,再统一为每镜 120 帧、全片 720 帧的 30 秒成片。最终交付规格:1344×768、24fps、H.264、48kHz 立体声 AAC。

本地自动剪辑链:从素材到交付

用分镜单组织叙事,用自动化完成重复工作:六镜顺序组片、素材时长检查、画幅与帧率统一、配音混音、说话时背景声自动压低、音乐首尾淡化、中文语音转字幕、整片响度校准和导出规格检查。所有音视频处理和语音识别均在本机运行。

画面

逐帧检查脸型、手部、道具接触;相邻镜的服装、包带、灯位与视线相接。验证档通过后,正式镜头使用原生 768p 质量档重新生成。

叙事与声音

每镜完成一个信息点,前后动作有因果。短对白清晰、起止完整;人声高于环境声,切镜处音量平顺,结尾留出表情。

1. 准备 FFmpeg 与六个镜头

Mac 已在第 9 步安装。Windows 在 PowerShell 安装后重新打开终端:

winget install --id Gyan.FFmpeg --exact --source winget

将质量档的输出复制到同一文件夹,命名为 shot01.mp4 至 shot06.mp4。每段至少 5 秒、画面连续、音轨完整;在 ComfyUI 的 Save Video 中选择 MP4 / H.264 后保存。将下面脚本下载到这个文件夹。

下载本地成片脚本

2. 统一声线:本地录制一条配音

同一演员在安静房间录完整条台词。Windows 使用录音机,Mac 使用 QuickTime Player → 文件 → 新建音频录制。录完后在本地剪辑软件中按六镜时间点对齐,导出正好 30 秒的立体声 narration.wav,保留没有台词时的静音。此版本的 H3 镜头按环境声版提示词生成,最终对白由整条配音承担;开口对白镜须逐句对齐口型,旁白镜保持嘴唇闭合。

需要把录音转换成 48kHz WAV 时:

ffmpeg -i voice-recording.m4a -ar 48000 -ac 2 narration.wav

自动中文字幕:Whisper large-v3-turbo · 809M

使用 809M 参数的多语言语音识别模型,将对齐后的 30 秒 narration.wav 转成带时间轴的 SRT。模型约 1.62GB,首次下载后离线运行。Windows 和 Mac 均使用独立 Python 3.12 环境、CPU INT8;与 ComfyUI 的 GPU 环境分开。

下载本地自动字幕脚本

Windows:先安装 Python 3.12,完成后重新打开 PowerShell,再建立专用环境并下载固定版本模型:

winget install --id Python.Python.3.12 --exact --source winget
py -3.12 -m venv D:\AI\subtitle-tools
& 'D:\AI\subtitle-tools\Scripts\python.exe' -m pip install --upgrade pip
& 'D:\AI\subtitle-tools\Scripts\python.exe' -m pip install 'faster-whisper==1.2.1' 'ctranslate2==4.8.4'
& 'D:\AI\subtitle-tools\Scripts\python.exe' -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='dropbox-dash/faster-whisper-large-v3-turbo', revision='0a363e9161cbc7ed1431c9597a8ceaf0c4f78fcf', local_dir=r'D:\AI\models\whisper-turbo')"

Mac:使用前面安装的 Python 3.12:

python3.12 -m venv ~/AI/subtitle-tools
~/AI/subtitle-tools/bin/python -m pip install --upgrade pip
~/AI/subtitle-tools/bin/python -m pip install 'faster-whisper==1.2.1' 'ctranslate2==4.8.4'
~/AI/subtitle-tools/bin/python -c "from huggingface_hub import snapshot_download; from pathlib import Path; snapshot_download(repo_id='dropbox-dash/faster-whisper-large-v3-turbo', revision='0a363e9161cbc7ed1431c9597a8ceaf0c4f78fcf', local_dir=str(Path.home()/'AI/models/whisper-turbo'))"

将字幕脚本放在镜头目录,从该目录执行。Windows:

& 'D:\AI\subtitle-tools\Scripts\python.exe' .\h3-subtitles-v2.py .\narration.wav .\captions.srt --model 'D:\AI\models\whisper-turbo'

Mac:

~/AI/subtitle-tools/bin/python ./h3-subtitles-v2.py ./narration.wav ./captions.srt --model ~/AI/models/whisper-turbo

脚本按实际词级时间戳、停顿和标点分条,输出 UTF-8 的 captions.srt 与 captions.asr.json。校对人名、断句和第一 / 最后一个字的时间。使用 H3 原生对白时,先用成片脚本导出 rough.mp4,识别该文件,再把得到的字幕加入最终版。字幕时间以最终 30 秒时间线为准。Windows 遇到 CTranslate2 DLL 加载错误时,安装 Microsoft Visual C++ 2015–2022 x64 运行库后重新打开终端。

3. 自动组片、混音、字幕与导出

准备一段自有或已授权的本地音乐 music.wav,长度至少 30 秒。将音乐、对齐的配音、校对好的 captions.srt 和六个 MP4 放在镜头目录。Windows 打开 PowerShell,使用 Portable 自带 Python:

D:\AI\ComfyUI_windows_portable\python_embeded\python.exe .\h3-finish-v2.py . --narration .\narration.wav --music .\music.wav --srt .\captions.srt --output final.mp4

Mac 在相同镜头目录运行:

python3.12 ./h3-finish-v2.py . --narration ./narration.wav --music ./music.wav --srt ./captions.srt --output final.mp4

按需要保留 --narration、--music、--srt;省去某项时连同其后路径一起删除。脚本先检查输入,再逐镜等比缩放 / 补边、转为 24fps、取前 120 帧,统一音轨为 48kHz。配音发声时自动压低环境声与音乐,音乐首尾各淡化 0.5 秒;整片做两遍响度处理,目标约 -16 LUFS、峰值上限目标 -2 dBTP。输出 MP4 含可切换中文字幕轨,同时生成 final.report.json,记录实际帧数、时长、音轨、字幕条数与测量响度。原素材保留,已有输出文件时使用新名称。

4. 本地时间线与字幕精修:Shotcut

Windows 与 Mac 使用同一套本地剪辑界面。Windows 安装:

winget install --id Meltytech.Shotcut --exact --source winget

Mac 安装:

brew install --cask shotcut
  1. 建工程

    打开 Shotcut,新建工程保存到 04_edit;将母版 final.mp4 拖到时间线。视频模式设为自定义 1344×768、24fps,保持与母版一致。

  2. 对齐与检查

    用时间线播放头逐镜检查,拖动配音片段对齐说话起止。整条配音以 WAV 导出为 narration.wav 后交给成片脚本;字幕则在母版上精修。每屏不超过两行,保持面部和关键道具无遮挡。

  3. 添加字幕

    打开 View / 视图 → Subtitles / 字幕,新建字幕轨,添加台词并设置起止时间;已有 SRT 时通过字幕面板导入。校对人名、错字、断句与口型,先单独导出一份 SRT 留档。

  4. 烧录并导出

    在时间线的 Output / 输出 添加 Subtitle: Burn In 滤镜,选择字幕轨与字体。预览确认字幕已显示,再导出 H.264 MP4,保持 1344×768、24fps 和 48kHz 音轨。保存 Shotcut 工程,便于继续调整。

全屏播放最终版:检查脸和手、每句对白、首尾黑帧、转场与画外音接续。将原片、PNG、提示词、工作流、录音、SRT 和剪辑工程一起归档。

完成标志
  • 30 秒母版已导出,720 帧 / 24fps / 48kHz 音轨通过检查,画面、对白、字幕与镜头连续性验收完成。

版本基线:2026-10-28 · ComfyUI v0.43.0 · Windows CUDA / Mac Metal。三项本地推理,按六镜制作单完成 30 秒动画短剧。

常见问题

开始前与出片后的几个问题

怎样做出有成片感的 3D 动画短剧?

按角色定妆、场景布局、首帧编辑、单镜生成、筛片和统一配音的顺序制作。先锁脸型与材质,再锁光线、视线和道具位置,最后用剪辑组织信息与情绪。第 2 步的六镜制作单贯穿全流程。

三项如何在本地协作?

Qwen3 在 127.0.0.1:11434 提供本地文本 API;Qwen-Image-2.1 在 ComfyUI 生成角色与首帧;H3 在同一 ComfyUI 完成音视频。Windows 使用 CUDA 核心节点,Mac 使用本机 Metal 引擎桥接。模型下载后按第 14 步做断网验收。

4090 的显存怎样分配?

文本、图片、视频按阶段运行。文本完成后 ollama stop 释放模型;首帧完成后重启 ComfyUI,再只加载视频工作流。配套 64GB 系统内存与 NVMe,用默认显存管理完成编码器与生成器的分段加载。

Mac 质量档用什么参数?

Max 级 Apple Silicon,按 128GB 统一内存规划;H3 质量档 1344×768、seconds=5、50 步、precise、token_reduction=false。precise 对应 50 层与 reuse=1。512×512 验证档用于先检查引擎、路径和音视频输出。

H3 的 33B、20B 和 32B 分别是什么?

33B 是原始稠密生成器;约 13B AdaLN 部分可预计算并裁剪,生成器推理部分约 20B。32B 是独立编码器。下载与运行容量需同时计算生成器、编码器、VAE 和工作内存。

为什么 5 秒镜头要再裁成 120 帧?

模型时间网格是 17k+5 帧。本文 seconds=5 得到 124 帧、约 5.17 秒,后期每镜取 120 帧。六镜统一后为 720 帧,即 24fps 下的 30 秒。

如何保持跨镜头的角色和声音一致?

所有首帧从同一角色定妆编辑,固定服装、材质和灯位,再逐镜检查。全片对白用同一演员的一条本地配音轨统一音色,在时间线上与画面对齐。固定 seed 用于比较候选片,角色由参考图和逐镜验收控制。