



ComfyUI v0.25.1 是一个最新发布版本,发布时间为 2026年6月20日。本次版本说明中明确标注为 Immutable release,也就是说,这个版本发布后,只有发布标题和发布说明可以修改,实际发布内容本身保持不可变。这意味着该版本的更新内容具有明确的稳定性标记,适合开发者和使用者按版本进行对照与追踪。
从这次更新内容来看,核心重点非常聚焦,主要围绕一个方向展开:为 Partner Nodes 中的 Kling 能力新增对 Kling V3-Turbo 模型的支持。虽然从提交数量和文件变更数量来看,本次版本属于小版本更新,但从能力扩展角度来说,它带来的价值并不小,因为它直接把新的视频生成模型能力打通到了 ComfyUI 的节点体系中。
本次版本的版本号从 0.25.0 升级为 0.25.1,涉及:
从文件层面看,本次更新主要集中在以下 4 个文件:
comfy_api_nodes/apis/kling.pycomfy_api_nodes/nodes_kling.pycomfyui_version.pypyproject.toml下面就基于你给出的全部更新内容,详细拆解 ComfyUI v0.25.1 到底改了什么、意味着什么,以及这次更新对实际使用会带来哪些直接变化。
一、本次版本更新的核心主题
本次版本更新的唯一主线非常明确:
发布说明中的关键内容为:
[Partner Nodes] feat(Kling): add support for Kling V3-Turbo model从这句话可以直接看出,本次更新属于 Partner Nodes 范畴,也就是与合作能力节点相关的增强。重点不是泛化的底层框架重构,而是 Kling 能力的扩展。而新增支持的目标模型就是 Kling V3-Turbo。
这意味着,ComfyUI 在原有 Kling 视频能力基础上,进一步增加了一个新模型入口,并且这个入口不仅仅是简单加个名称,而是从 API 请求结构、节点参数配置、创建任务、轮询任务、结果提取、价格显示逻辑等多个层面做了完整接入。
二、API 层新增内容解析:comfy_api_nodes/apis/kling.py
在 comfy_api_nodes/apis/kling.py 中,本次更新一共新增了 56 行内容,没有删除,主要新增的是一整套围绕 Kling 3.0 Turbo 的数据模型定义。
这一部分非常关键,因为它决定了 ComfyUI 如何与 Kling 3.0 Turbo 的接口进行请求和响应交互。
1. 新增 Kling3TurboSettings
class Kling3TurboSettings(BaseModel):
resolution: str = Field("720p", description="'720p' or '1080p'")
aspect_ratio: str | None = Field(None, description="'16:9'/'9:16'/'1:1'; text-to-video only")
duration: int = Field(5, description="3-15 second")这个设置对象定义了 Kling 3.0 Turbo 的核心生成参数:
resolution720p720p 或 1080paspect_ratio16:9、9:16、1:1duration5这说明 Kling 3.0 Turbo 在 ComfyUI 中接入后,至少支持三个核心控制项:分辨率、宽高比、时长。同时,宽高比只在文生视频模式下生效,这一点在后续节点逻辑中也得到了呼应。
2. 新增文生视频请求模型 Kling3TurboText2VideoRequest
class Kling3TurboText2VideoRequest(BaseModel):
prompt: str = Field(..., description="<=3072 chars; may use multi-shot 'shot n, m, words; ...'")
settings: Kling3TurboSettings | None = Field(None)这个类对应的是 Kling 3.0 Turbo 文生视频请求结构。
重点信息包括:
prompt 必填shot n, m, words; ...这一点非常重要,因为它意味着 Kling 3.0 Turbo 文生视频不仅支持普通单段提示词,还支持 multi-shot 的分镜式提示结构。后面在节点实现里,ComfyUI 也专门为这个格式添加了一个字符串构建函数。
3. 新增内容对象 Kling3TurboContent
class Kling3TurboContent(BaseModel):
type: str = Field(..., description="'prompt' or 'first_frame'")
text: str | None = Field(None, description="for type=prompt; <=2500 chars")
url: str | None = Field(None, description="for type=first_frame")这个类用于图生视频请求中的内容列表定义。
它支持两种类型:
promptfirst_frame字段含义分别是:
texttype=prompt 时使用urltype=first_frame 时使用这里可以清晰看出,Kling 3.0 Turbo 的图生视频请求采用的是 contents 列表机制,其中既可以放首帧图,也可以放文本提示词。
4. 新增图生视频请求模型 Kling3TurboImage2VideoRequest
class Kling3TurboImage2VideoRequest(BaseModel):
contents: list[Kling3TurboContent] = Field(..., description="prompt + first_frame materials")
settings: Kling3TurboSettings | None = Field(None)这说明 Kling 3.0 Turbo 的图生视频请求由两部分组成:
contentsprompt + first_frame 材料settings这里和文生视频最大的区别在于,请求入口不再是单个 prompt 字段,而是一个组合内容列表。也就是说,图生视频模式本身是一个多材料输入结构。
5. 新增任务创建响应结构
class Kling3TurboCreateData(BaseModel):
id: str | None = Field(None, description="Task ID")
status: str | None = Field(None)
message: str | None = Field(None)class Kling3TurboCreateResponse(BaseModel):
code: int | None = Field(None)
message: str | None = Field(None)
request_id: str | None = Field(None)
data: Kling3TurboCreateData | None = Field(None)这一组模型说明,创建任务后返回的是标准的任务信息结构,其中重点字段包括:
codemessagerequest_iddata.id,也就是 Task IDdata.statusdata.message这表明 Kling 3.0 Turbo 在 ComfyUI 中采用的是 先创建任务,再轮询任务状态 的异步处理方式。
6. 新增任务结果输出结构
class Kling3TurboOutput(BaseModel):
type: str | None = Field(None, description="'video', 'image', 'audio', ...")
id: str | None = Field(None)
url: str | None = Field(None)
duration: str | None = Field(None)这里定义了输出对象。type 的描述中写得很清楚,结果可能是:
videoimageaudio这也和后续逻辑形成呼应,因为最终结果提取时,ComfyUI 会专门遍历 outputs,查找 type == "video" 且带有 url 的结果。
7. 新增任务查询返回结构
class Kling3TurboTaskData(BaseModel):
id: str | None = Field(None)
status: str | None = Field(None, description="submitted | processing | succeeded | failed")
message: str | None = Field(None)
outputs: list[Kling3TurboOutput] | None = Field(None)class Kling3TurboQueryResponse(BaseModel):
code: int | None = Field(None)
message: str | None = Field(None)
request_id: str | None = Field(None)
data: list[Kling3TurboTaskData] | None = Field(None)任务状态支持以下几种:
submittedprocessingsucceededfailed这就完整定义了 Kling 3.0 Turbo 的任务生命周期。
至此,API 层已经把 Kling 3.0 Turbo 的:
全部补齐了。
三、节点层新增内容解析:comfy_api_nodes/nodes_kling.py
这一文件是本次更新量最大的地方,共有 116 处变更,其中 107 处新增,9 处删除。真正把 API 能力变成可用节点能力的,正是这里。
1. 新增导入内容
在导入部分新增了以下类型:
Kling3TurboSettingsKling3TurboText2VideoRequestKling3TurboContentKling3TurboImage2VideoRequestKling3TurboCreateResponseKling3TurboQueryResponse这一步表明,前面在 API 层定义的所有 Kling 3.0 Turbo 结构,已经正式被节点层使用。
2. 新增多镜头提示词构建函数 build_turbo_shot_prompt
def build_turbo_shot_prompt(multi_prompt: list[MultiPromptEntry]) -> str:
"""Render storyboard entries into the Turbo multi-shot prompt 'shot n, m, words; ...'."""
return "; ".join(f"shot {i}, {int(e.duration)}, {e.prompt}" for i, e in enumerate(multi_prompt, 1)) + ";"这个函数的作用非常明确:
shot n, m, words; ...这里的逻辑是:
multi_promptshot 序号, 时长, 提示词; 拼接,并额外加一个结尾分号举例来说,虽然代码里没有给具体示例,但从逻辑上可以看出,它会生成类似:
shot 1, 3, xxx; shot 2, 5, yyy;这一设计直接对应了前面文生视频请求中对 prompt 的说明:支持 multi-shot 格式。
3. 新增结果视频链接提取函数 _turbo_video_url
def _turbo_video_url(response: Kling3TurboQueryResponse) -> str:
"""Extract the result video URL from a /tasks response (data[].outputs[] where type == 'video')."""
task = response.data[0] if response.data else None
if task and task.outputs:
for output in task.outputs:
if output.type == "video" and output.url:
return output.url
raise RuntimeError(f"Kling 3.0 Turbo task finished without a video output: {response.model_dump()}")这个函数用于从 /tasks 响应中提取最终视频地址。
提取规则是:
response.data[0] 取任务task.outputstype == "video" 且 url 存在的输出如果任务结束后没有找到视频输出,则直接抛出异常:
Kling 3.0 Turbo task finished without a video output这一点说明,虽然 outputs 中理论上可能有 image、audio 等内容,但当前 ComfyUI 节点的最终目标输出仍然是 视频文件。
4. 新增核心执行函数 execute_kling_turbo
这是本次更新最重要的实现逻辑之一。
async def execute_kling_turbo(
cls: type[IO.ComfyNode],
*,
prompt: str,
resolution: str,
aspect_ratio: str,
duration: int,
start_frame: torch.Tensor | None,
) -> IO.NodeOutput:这个函数承担了 Kling 3.0 Turbo 的完整调用流程,包括:
下面逐段来看。
4.1 当 start_frame 存在时,进入图生视频模式
if start_frame is not None:
validate_image_dimensions(start_frame, min_width=300, min_height=300)
validate_image_aspect_ratio(start_frame, (1, 2.5), (2.5, 1))这里先做了输入校验:
(1, 2.5)(2.5, 1)然后构建内容列表:
contents = [Kling3TurboContent(type="first_frame", url=tensor_to_base64_string(start_frame))]
if prompt:
contents.insert(0, Kling3TurboContent(type="prompt", text=prompt))也就是说:
first_frameprompt随后调用图生视频接口:
ApiEndpoint(path="/proxy/kling/image-to-video/kling-3.0-turbo", method="POST")请求数据为:
Kling3TurboImage2VideoRequest(
contents=contents,
settings=Kling3TurboSettings(resolution=resolution, duration=duration),
)这里有一个很关键的注释:
i2v: no aspect_ratio这和前面 API 定义完全一致,说明 图生视频模式下不传 aspect_ratio。
4.2 当 start_frame 不存在时,进入文生视频模式
else:
create = await sync_op(
cls,
ApiEndpoint(path="/proxy/kling/text-to-video/kling-3.0-turbo", method="POST"),
response_model=Kling3TurboCreateResponse,
data=Kling3TurboText2VideoRequest(
prompt=prompt,
settings=Kling3TurboSettings(resolution=resolution, aspect_ratio=aspect_ratio, duration=duration),
),
)文生视频使用的接口路径是:
/proxy/kling/text-to-video/kling-3.0-turbo请求中包含:
promptresolutionaspect_ratioduration这再次说明:
4.3 创建任务失败时的处理
if not (create.data and create.data.id):
raise RuntimeError(f"Kling 3.0 Turbo create failed. Code: {create.code}, Message: {create.message}")也就是说,如果返回里没有任务 ID,就视为任务创建失败,并输出错误码和错误信息。
4.4 任务轮询逻辑
final_response = await poll_op(
cls,
ApiEndpoint(path="/proxy/kling/tasks", query_params={"task_ids": create.data.id}),
response_model=Kling3TurboQueryResponse,
status_extractor=lambda r: (r.data[0].status if r.data else None),
)轮询接口路径是:
/proxy/kling/tasks查询参数为:
task_ids = create.data.id状态提取逻辑是:
r.data[0].status这和前面定义的任务状态结构完全对应。
4.5 最终输出视频
return IO.NodeOutput(await download_url_to_video_output(_turbo_video_url(final_response)))最终流程是:
也就是说,Kling 3.0 Turbo 在 ComfyUI 中已经形成了完整闭环。
四、KlingVideoNode 的 UI 参数更新
本次更新还对 KlingVideoNode 的 schema 定义做了增强,主要集中在以下几个点。
1. generate_audio 提示文案更新
原本这里是:
IO.Boolean.Input("generate_audio", default=True)更新后变成:
IO.Boolean.Input(
"generate_audio",
default=True,
tooltip="'kling-3.0-turbo' always generates native audio, so the audio toggle is ignored.",
),新增的提示信息非常关键:
kling-3.0-turbo 总是生成原生音频这意味着:
generate_audiokling-3.0-turbo这是一个典型的兼容式设计:保留统一界面,但针对特定模型说明开关不生效。
2. 模型选项中新增 kling-3.0-turbo
在动态模型选项中新增:
IO.DynamicCombo.Option(
"kling-3.0-turbo",
[
IO.Combo.Input("resolution", options=["1080p", "720p"], default="720p"),
IO.Combo.Input(
"aspect_ratio",
options=["16:9", "9:16", "1:1"],
tooltip="Ignored in image-to-video mode.",
),
],
),这表示在节点 UI 中,用户现在可以直接选择:
kling-3.0-turbo对应可配置项有两个:
resolution1080p、720p720paspect_ratio16:9、9:16、1:1这和执行逻辑完全一致。
五、价格徽章逻辑更新
本次更新对 price_badge 的表达式做了非常关键的调整,核心变化有两点:
"model"kling-3.0-turbo 单独定义了计价规则1. 依赖项新增 "model"
在 depends_on.widgets 中新增了:
"model"同时保留了:
"model.resolution""generate_audio""multi_shot"这说明价格展示现在会直接受模型类型影响,而不再只是分辨率、音频和时长共同决定。
2. 原有逻辑回顾
原本价格计算采用统一费率:
4k0.420.421080p0.1120.168720p0.0840.126然后根据:
来计算总价格。
3. 新增 kling-3.0-turbo 专属计价逻辑
更新后表达式变成了分支判断:
如果:
widgets.model = "kling-3.0-turbo"那么价格为:
1080p:0.14 * 时长720p:0.112 * 时长如果不是 kling-3.0-turbo,则继续使用原先按分辨率和音频状态区分的那套费率表。
这里带来的变化非常明确:
kling-3.0-turbo 不再依赖 generate_audio 开关计算价格这和前面的 UI 提示完全吻合。
六、执行逻辑中的模型分支新增
在 execute 方法中,本次更新新增了专门针对 kling-3.0-turbo 的分支:
if model["model"] == "kling-3.0-turbo":
turbo_prompt = build_turbo_shot_prompt(multi_prompt_list) if custom_multi_shot else multi_shot["prompt"]
return await execute_kling_turbo(
cls,
prompt=turbo_prompt,
resolution=model["resolution"],
aspect_ratio=model["aspect_ratio"],
duration=duration,
start_frame=start_frame,
)这一段逻辑非常重要,可以总结出以下几点:
1. Kling 3.0 Turbo 已经被正式纳入执行分发逻辑
也就是说,当用户在节点里选择模型为 kling-3.0-turbo 时,ComfyUI 会直接进入专属执行函数 execute_kling_turbo,而不是走旧模型流程。
2. 支持自定义多镜头提示拼接
这里的 turbo_prompt 逻辑是:
custom_multi_shotbuild_turbo_shot_prompt(multi_prompt_list) 构建多镜头提示词multi_shot["prompt"]这意味着 Kling 3.0 Turbo 已经和现有多镜头系统打通,并且采用的是它要求的那种:
shot n, m, words; ...格式。
3. 图生视频与文生视频入口统一封装
无论是:
start_frame 有值,走图生视频start_frame 为空,走文生视频最终都统一由 execute_kling_turbo 处理。
这使得 Kling 3.0 Turbo 的集成方式比较完整,不是只做单一模式支持,而是同时覆盖:
七、版本号同步更新
除了功能性变更,本次版本还同步更新了版本号信息。
1. comfyui_version.py
__version__ = "0.25.0"更新为:
__version__ = "0.25.1"2. pyproject.toml
version = "0.25.0"更新为:
version = "0.25.1"这代表 ComfyUI 的代码内部版本与项目配置版本已经同步切换到 0.25.1。
八、从更新细节看,这次 v0.25.1 实际解决了什么
如果只看版本号,这只是一次从 0.25.0 到 0.25.1 的小更新;但如果从功能接入完整度来看,这次更新其实完成了一次 模型级别的正式落地。
它具体带来了以下能力完善:
可以说,这不是简单地“把模型名加到下拉框里”,而是完成了从请求结构到前端参数、从执行链路到价格逻辑的一整套适配。
九、Kling 3.0 Turbo 在 ComfyUI v0.25.1 中的能力边界,完全以本次更新内容为准
基于你提供的全部更新文本,可以明确总结出 Kling 3.0 Turbo 在当前版本中的能力边界:
1. 支持两种生成模式
2. 文生视频参数支持
promptresolutionaspect_ratioduration3. 图生视频参数支持
contentspromptfirst_frameresolutionduration并且:
aspect_ratio4. 时长范围
3 到 15 秒5. 分辨率支持
720p1080p6. 宽高比支持
16:99:161:1但仅限文生视频。
7. 输入图像限制
当使用首帧图时:
8. 多镜头提示支持
支持格式:
shot n, m, words; ...9. 音频特性
kling-3.0-turbo 总是生成原生音频generate_audio 开关对该模型无效10. 定价逻辑
1080p:0.14 * 时长720p:0.112 * 时长十、这次更新为什么值得关注
从你提供的内容来看,ComfyUI v0.25.1 虽然不是一次大规模重构版本,但它有三个非常鲜明的价值点。
第一,目标集中。
整个版本几乎围绕 Kling 3.0 Turbo 展开,没有分散修改。这意味着开发意图非常明确,就是把新模型支持做实、做完整。
第二,接入完整。
不是局部代码试验,而是 API 定义、节点执行、输入校验、轮询结果、UI 选项、价格逻辑全部联动。
第三,使用体验更清晰。
像下面这些细节都写得很明确:
这种明确性对于实际使用非常重要,因为它减少了误用和理解偏差。
十一、ComfyUI v0.25.1 更新总结
代码地址:github.com/Comfy-Org/ComfyUI
最后,用最精炼但完整的方式总结一下这次版本更新:
ComfyUI v0.25.1 于 2026年6月20日发布,是一个标记为 Immutable release 的最新版本。本次更新的核心内容是:在 Partner Nodes 中为 Kling 新增对 Kling V3-Turbo 模型的支持。代码层面共涉及 2 个提交、4 个文件变更、165 处新增、11 处删除。
在 comfy_api_nodes/apis/kling.py 中,新增了 Kling 3.0 Turbo 的完整 API 数据结构,包括:
在 comfy_api_nodes/nodes_kling.py 中,新增了:
同时,版本号文件 comfyui_version.py 和项目配置 pyproject.toml 也从 0.25.0 更新到了 0.25.1。
如果一句话概括这次升级,那就是:
ComfyUI v0.25.1 完整接入了 Kling 3.0 Turbo,让文生视频、图生视频、多镜头提示、结果轮询与价格展示形成了一条可直接使用的完整链路。