简介:这是一份面向视频创作与AI绘画爱好者的ComfyUI工作流资源,聚焦LTX2.3模型的首尾帧生成视频能力。用户只需提供起始与结束两张图像,即可借助可视化节点流程自动补全中间帧,输出连贯流畅的视频内容,适合希望快速上手AI视频生成、又不想深究底层代码的创作者与业余玩家。资源包为zip格式,仅含1个json文件,体积约3KB,该json即完整工作流配置,导入ComfyUI后可直接加载使用,省去手动搭建节点的繁琐。工作流中集成了帧插值、帧率与分辨率调整、色彩校正等处理环节,并支持多种视频格式输出与批处理队列管理,方便批量生成与后期微调。目前已有645人学习下载,可作为首尾帧视频生成的入门模板,帮助读者理解节点连接逻辑、参数配置思路与自动化处理流程,并在此基础上按需扩展动画效果与渲染优化模块。
1. 首尾帧生成视频:为什么 LTX2.3 值得在 ComfyUI 里单独搭一条工作流
手里只有两张图——一张开头、一张结尾,中间的过程帧全靠模型补出来,这就是首尾帧生成视频最直观的用法。LTX2.3 在 ComfyUI 里跑这条链路,解决的是「镜头怎么动、中间怎么过渡」的问题,而不是单纯把静图动起来。它适合三类人:做分镜预演的、做电商短视频素材的、以及想把 AI 视频生成接进自己自动化流程的。相比纯文生视频,首尾帧给了你两个硬锚点,画面起点和终点可控,中间插值由模型负责,废片率会低不少。这一章先把「这是什么、能解决什么、适合谁」讲清楚,后面几章再落到 ComfyUI 工作流怎么搭、参数怎么调、内存怎么省。
LTX2.3 的核心能力在于它把首帧和尾帧当作条件输入,而不是只喂一个文本提示词。你给的两张图会分别编码进潜空间,模型在去噪过程中同时受这两个锚点约束,生成的中间帧就会朝尾帧方向收敛。这跟「图生视频」只给首帧、后面全靠猜有本质区别。ComfyUI 里这条链路通常由几个节点串起来:图像加载、LTX 条件编码、采样器、VAE 解码、视频合成。工作流的难点不在节点数量,而在首尾帧的编码方式、采样步数和分辨率之间的平衡。很多人第一次跑就爆内存,或者出来的视频中间帧糊成一团,问题基本都出在这几个环节。
2. LTX2.3 首尾帧工作流的节点链路与最小可跑配置
2.1 从两张图到一段视频:链路里到底发生了什么
先把链路拆开看。首帧和尾帧分别经过图像预处理,统一分辨率和对齐方式,然后送进 LTX 的条件编码节点。这里有个关键点:LTX2.3 对首尾帧的编码不是简单拼接,而是各自生成一份条件潜变量,在采样阶段按时间步分别施加约束。采样器从纯噪声出发,每一步去噪都同时参考首帧条件和尾帧条件,越靠近开头首帧权重越高,越靠近结尾尾帧权重越高。这个权重过渡是模型内部处理的,但你可以通过条件强度参数去微调。
采样完成后得到的是潜空间序列,经过 VAE 解码成帧序列,再由视频合成节点打包成 mp4 或 webm。整条链路里最吃显存的是采样阶段,因为要同时维护首尾两份条件和中间帧的潜变量。分辨率、帧数、采样步数这三个参数任意一个翻倍,显存占用都会明显上涨。所以最小可跑配置的思路是:先把分辨率压到 512 宽、帧数压到 25 帧、步数压到 20 步,跑通之后再往上加。
2.2 最小可跑工作流的节点清单与参数
下面这份配置是我在 12G 显存上验证过能跑通的起点。节点名称按 ComfyUI 里常见的叫法写,不同整合包可能有细微差异,但核心节点不会变。
| 节点 | 作用 | 关键参数 | 建议起始值 |
|---|---|---|---|
| Load Image(首帧) | 加载起始图 | 路径 | 本地图片 |
| Load Image(尾帧) | 加载结束图 | 路径 | 本地图片 |
| Image Resize | 统一分辨率 | width/height | 512×512 |
| LTX Condition | 编码首尾帧条件 | strength | 0.8 |
| KSampler | 去噪采样 | steps / cfg | 20 / 3.5 |
| VAE Decode | 潜空间转帧 | — | 默认 |
| Video Combine | 合成视频 | fps | 8 |
这张表里的数值不是最优解,是「先跑通」的解。strength 设 0.8 是让首尾帧条件足够强但不至于锁死中间帧的变化空间。cfg 设 3.5 是因为 LTX 系列对 cfg 比较敏感,太高容易过曝和色偏。fps 设 8 是配合 25 帧总长,出来的视频大约 3 秒,够看过渡效果。
2.3 用 API 格式导出工作流并批量跑
ComfyUI 的图形界面适合调试,但真要批量生成或者接进自动化流程,得用 API 格式。在界面里点「保存(API格式)」,会得到一个 json,里面每个节点的输入输出关系都是显式的。下面这段 Python 是读取这个 json 并提交任务的骨架。
import json import requests # 读取 API 格式的工作流 json with open("ltx_first_last_api.json", "r", encoding="utf-8") as f: workflow = json.load(f) # 定位首帧和尾帧的 Load Image 节点,替换图片路径 # 节点 ID 需要根据你实际导出的 json 里的编号来改 for node_id, node in workflow.items(): if node.get("class_type") == "LoadImage": # 这里假设有两个 LoadImage 节点,按 title 区分 if node.get("_meta", {}).get("title") == "first_frame": node["inputs"]["image"] = "first.png" elif node.get("_meta", {}).get("title") == "last_frame": node["inputs"]["image"] = "last.png" # 提交到本地 ComfyUI 服务 resp = requests.post( "http://127.0.0.1:8188/prompt", json={"prompt": workflow} ) print(resp.status_code, resp.text)这段代码的逻辑是:把工作流当成一个字典,遍历所有节点,找到类型为 LoadImage 的节点,按标题区分首帧和尾帧,替换图片文件名。参数说明:class_type是 ComfyUI 节点的类型标识,inputs里放的是该节点的输入值,_meta.title是你在界面里给节点起的名字。注意节点 ID 在不同版本里会变,不要硬编码,用 class_type 加 title 来定位更稳。提交成功后任务进入队列,结果会写到 ComfyUI 的输出目录。
3. 首尾帧条件强度、采样步数与分辨率的参数取舍
3.1 条件强度怎么影响中间帧的过渡质量
条件强度这个参数,本质上是在问:首尾帧对中间帧的约束有多硬。设得太低,中间帧会偏离首尾帧的构图,出现跳变;设得太高,中间帧会变成首尾帧的简单混合,缺少自然运动。我一般从 0.8 开始试,如果发现中间帧几乎不动,降到 0.6;如果发现中间帧和首尾帧风格断裂,升到 0.9。这个参数没有万能值,跟你的首尾帧差异大小直接相关。首尾帧构图接近、只是主体位置变了,强度可以低一点;首尾帧是完全不同的场景,强度得高一点,否则模型不知道该往哪边靠。
还有一个容易被忽略的点:首帧和尾帧的条件强度可以分开设。有些工作流里是两个独立的 strength 输入。如果你希望视频开头更贴近首帧、结尾稍微放开一点,可以把首帧强度设 0.85、尾帧设 0.7。这种不对称设置在做「从清晰到模糊」或者「从静止到运动」的过渡时特别有用。
3.2 采样步数和 cfg 的搭配关系
采样步数决定去噪迭代多少次,cfg 决定文本条件(如果有)对结果的牵引力度。在首尾帧工作流里,文本提示词的作用会被首尾帧条件稀释,所以 cfg 不需要设太高。我试过 cfg 从 2 到 7 的范围,3.5 到 4.5 之间最稳。超过 5 之后画面开始出现明显的对比度拉高和色彩偏移,低于 3 则细节不足。
步数方面,20 步是底线,低于 20 步中间帧容易出现结构崩坏。25 到 30 步是质量和耗时的平衡点。如果你跑的是 512 分辨率、25 帧,20 步在 12G 显存上大约 40 秒出结果。加到 30 步大概 60 秒,画质提升有限但过渡会更顺。我的习惯是:先 20 步跑一版看构图对不对,构图对了再 30 步跑最终版。
3.3 分辨率、帧数与显存的三角关系
这三个参数是互相拉扯的。显存占用大致跟「分辨率平方 × 帧数」成正比。512×512、25 帧能跑,不代表 768×768、25 帧也能跑。我实测下来,12G 显存的安全线是 512×512 配 25 帧,或者 512×384 配 33 帧。想上 768 宽,帧数得压到 17 帧以内,而且采样步数不能超过 25。
如果你非要高分辨率长视频,常见做法是分段生成再拼接:把首尾帧之间拆成几段,每段单独生成,上一段的尾帧作为下一段的首帧。这样每段的显存压力都可控,代价是段与段之间可能有轻微跳变,需要在拼接处做交叉淡化。这个思路在 ComfyUI 里可以用多个采样节点串联实现,但工作流会复杂不少,建议先把单段跑稳再折腾。
4. ComfyUI 跑 LTX2.3 首尾帧的避坑与排查
4.1 爆内存:现象、原因、解决
现象:提交任务后进度条走到采样阶段就卡住,然后 ComfyUI 控制台报 out of memory,或者直接进程被杀。
原因:采样阶段同时维护首尾两份条件潜变量和中间帧潜变量,显存峰值出现在去噪中间步。分辨率或帧数超过显存上限时,峰值直接溢出。
解决:先把分辨率降到 512×512、帧数降到 25、步数降到 20,确认能跑通。然后逐项往上加,每次只加一项,观察显存占用。如果必须跑高分辨率,开启 ComfyUI 的--lowvram启动参数,它会强制把部分模型层换出到内存,代价是速度变慢。另一个办法是减少同时加载的模型数量,跑 LTX 的时候不要同时挂着其他大模型。
4.2 中间帧糊成一片:现象、原因、解决
现象:首帧和尾帧都清晰,但中间几帧像蒙了一层雾,细节全丢。
原因:条件强度设得太高,模型把中间帧往首尾帧的平均值上拉,导致运动模糊;或者采样步数太低,去噪不充分。
解决:先把条件强度从 0.8 降到 0.6 试试,如果中间帧开始有变化但还不够清晰,把步数从 20 加到 30。另外检查一下首尾帧的分辨率是否一致,如果一张 512 一张 1024,编码后的潜变量尺度不匹配,中间帧也会糊。统一用 Image Resize 节点处理成相同尺寸再送进去。
4.3 视频首尾跳变:现象、原因、解决
现象:生成的视频第一帧和最后一张图对不上,或者开头几帧突然闪一下。
原因:首帧条件没有正确对齐到视频的第一帧,或者 VAE 解码时的帧顺序错位。
解决:检查工作流里首帧图像是否直接连到条件编码节点,中间有没有多余的裁剪或缩放节点。另外确认 Video Combine 节点的帧率设置和采样输出的帧数匹配,帧率设错会导致首尾帧被丢弃。如果用的是 API 格式,检查 LoadImage 节点替换的图片路径是否正确,路径错了会加载默认图,首帧自然对不上。
4.4 生成速度异常慢:现象、原因、解决
现象:同样的参数,有时候 40 秒出结果,有时候要 3 分钟。
原因:ComfyUI 在切换不同模型或不同分辨率任务时会重新加载模型权重,如果队列里混着不同配置的任务,每次切换都要重新加载。
解决:把相同配置的任务放在一起跑,不要交替提交不同分辨率的任务。另外检查是否开启了--lowvram,这个参数会显著降低速度。如果显存够用,去掉这个参数。还有一点:首次加载模型本身就要时间,第一版慢是正常的,后续同配置任务会快很多。
4.5 输出视频没有声音或格式不对:现象、原因、解决
现象:生成的 mp4 在某些播放器里打不开,或者没有声音轨道。
原因:Video Combine 节点默认输出的是无声视频,格式取决于编码器设置。
解决:LTX2.3 首尾帧工作流本身不生成音频,如果需要声音得单独用音频节点合成。格式方面,把 Video Combine 的输出格式设成 h264 兼容性最好。如果播放器打不开,检查文件扩展名和实际编码是否匹配,有时候扩展名是 mp4 但编码是 webm 的,改扩展名没用,得在节点里改编码器。
5. 把首尾帧工作流接进批量生产:几个我常用的技巧
5.1 用文件名约定做批量首尾帧配对
当你有一批首尾帧要跑的时候,手动改路径不现实。我的做法是:首帧命名成xxx_first.png,尾帧命名成xxx_last.png,放在同一个目录里。然后用一段脚本扫描目录,按前缀配对,依次替换 API json 里的路径并提交。这样一次能跑几十组,中间不需要人工干预。
import os import json import requests workflow_path = "ltx_first_last_api.json" frame_dir = "./frames" # 按前缀配对首尾帧 pairs = [] for fname in os.listdir(frame_dir): if fname.endswith("_first.png"): prefix = fname.replace("_first.png", "") last_name = f"{prefix}_last.png" if os.path.exists(os.path.join(frame_dir, last_name)): pairs.append((fname, last_name)) for first, last in pairs: with open(workflow_path, "r", encoding="utf-8") as f: wf = json.load(f) for node_id, node in wf.items(): if node.get("class_type") == "LoadImage": title = node.get("_meta", {}).get("title", "") if title == "first_frame": node["inputs"]["image"] = first elif title == "last_frame": node["inputs"]["image"] = last requests.post("http://127.0.0.1:8188/prompt", json={"prompt": wf}) print(f"submitted: {first} -> {last}")这段脚本的关键在于配对逻辑和节点定位。参数说明:frame_dir是首尾帧存放目录,prefix是去掉后缀后的公共部分。注意每次提交前重新读取 json,避免上一轮的修改污染下一轮。提交后任务进入队列,ComfyUI 会按顺序处理。
5.2 用中间帧做质量抽检
批量跑的时候不可能每一条都看完。我的习惯是:每条视频生成后,用 ffmpeg 抽第 1 帧、中间帧、最后 1 帧三张图,快速扫一眼。如果首尾帧对得上、中间帧没有明显崩坏,就算通过。抽帧命令很简单:
# 抽取第 1 帧、中间帧、最后 1 帧 ffmpeg -i output.mp4 -vf "select='eq(n\,0)+eq(n\,12)+eq(n\,24)'" -vsync 0 check_%d.png这里的n是帧序号,12 和 24 要根据你的总帧数调整。抽出来的图按序号命名,方便对照。这个习惯帮我省了很多逐条播放的时间,尤其是批量跑几十条的时候,扫一眼抽检图就能筛掉大部分废片。
5.3 参数固化与版本记录
最后说一个血泪经验:每次调参之后,把当前工作流的 API json 和对应的参数记下来,存成一个带日期的文件。LTX2.3 的首尾帧效果对参数很敏感,今天调好的配置,过两天换个首尾帧素材可能就不适用了。如果没有记录,你会在「这个参数好像试过但忘了效果」的循环里反复翻车。我一般会在 json 文件名里带上日期和关键参数,比如ltx_512x512_s20_cfg3.5_20250101.json,一眼就能看出这版是什么配置。这个习惯看起来笨,但比任何后悔药都管用。
希望帮到你。
本文还有配套的精品资源,点击获取