Files
2026-07-03 17:23:34 +08:00

9.7 KiB
Raw Permalink Blame History

Comfyui-Kling-Wrapper 腾讯云 Provider 改造计划 v2

背景修正

上一版方案默认把腾讯云 provider 当作“首版受限能力”,在 Image2Video / Text2Video 上主动禁用了不少字段。

这与当前实际需求不符:

  • 用户现有流程需要继续可用
  • 腾讯文档覆盖范围并不只是最小图生视频/文生视频
  • 腾讯侧能力至少已经覆盖:
    • 图生视频
    • 文生视频
    • 动作控制
    • 视频延长
    • 主体管理
    • 自定义音色
    • 多模态编辑
    • 多图参考生视频

因此 v2 的目标不再是“先禁掉复杂能力”,而是:

优先保证腾讯 provider 不破坏现有工作流输入;在节点层保留能力,在 provider 层做精确映射与渐进增强。


总目标

1. 节点层目标

对用户来说,provider=tencent_vod 时:

  • 不应因为实现保守而丢失日常可用字段
  • Image2VideoNode / Text2VideoNode 现有输入尽量保持可用
  • 能力缺口优先通过“映射/透传”解决,而不是直接报不支持

2. 架构目标

在现有 provider 抽象上继续演进:

  • official 路径保持现状与兼容性
  • tencent_vod 路径单独维护腾讯请求映射
  • 把腾讯特有 payload 组装逻辑从 py/nodes.py 逐步下沉到:
    • py/api/providers/tencent_vod/mapping.py
    • 后续可再拆 capabilities.py / schemas.py

3. 产品目标

先把 图生视频 / 文生视频 做到“能承接完整工作流字段”,然后再扩展到:

  • MotionControl
  • VideoExtend
  • Subject / AdvancedCustomElements
  • CustomVoice
  • MultiModal Edit
  • MultiImagesToVideo

当前代码现状

已经具备

  • provider 基础目录已建立:
    • py/api/providers/base.py
    • py/api/providers/official/video.py
    • py/api/providers/tencent_vod/video.py
  • py/nodes.py 已有:
    • provider 配置解析
    • provider factory
    • Image2VideoNode / Text2VideoNode provider 分发入口
  • 官方路径已能通过 provider 包装调用
  • 腾讯路径已经能发起 CreateAigcVideoTask / DescribeTaskDetail

当前问题

  • 早期腾讯逻辑过于保守,仍然带有“能力先禁用”的设计痕迹
  • 腾讯 payload 组装逻辑仍不够精细
  • 有些字段只是粗粒度 passthrough,还未转成腾讯最终字段结构
  • 图/文视频之外的腾讯能力尚未纳入 provider 化
  • 当前 shell Python 环境缺少 torch,无法直接完整跑 pytest

v2 实施原则

原则 1:不轻易在节点层禁用字段

除非已经确定腾讯接口确实不支持,或当前字段会构造出无效请求,否则:

  • 不在节点层报“不支持”
  • 先保留输入
  • 再在 provider 层做映射或透传

原则 2:节点是通用接口,provider 负责后端差异

节点层尽量继续表达统一业务语义,例如:

  • voice_list
  • element_list
  • camera_control
  • reference_video
  • image_tail
  • shot_type
  • sound

这些差异应由 provider mapping 解释为腾讯 payload。

原则 3:先显式映射,再保底透传

对腾讯路径分两层处理:

  1. 显式映射层
    • 明确转成腾讯结构与字段名
  2. 透传层
    • 暂未最终建模的字段先通过 extra_payload / extra_output_config 带过去

这样既不阻塞现有流程,又为后续精细化收敛留下空间。


第一阶段范围:Image2Video / Text2Video 精确映射

这是当前最高优先级。

A. Image2Video 目标

provider=tencent_vod 时,至少承接以下输入:

  • model
  • image
  • image_tail
  • prompt
  • negative_prompt
  • cfg_scale
  • mode
  • duration
  • sound
  • voice_preset / custom_voice_id -> voice_list
  • shot_type
  • image_list
  • element_list
  • reference_video
  • camera_control

B. Text2Video 目标

provider=tencent_vod 时,至少承接以下输入:

  • model
  • prompt
  • negative_prompt
  • cfg_scale
  • mode
  • aspect_ratio
  • duration
  • sound
  • voice_preset -> voice_list
  • shot_type
  • image_list
  • element_list
  • reference_video
  • camera_control

第一阶段技术方案

1. request 层扩展

继续使用 py/api/providers/base.py 的 request dataclass,补充腾讯映射所需字段。

Image2VideoRequest

保留/补充:

  • image_urls
  • image_tail_url
  • voice_list
  • element_list
  • reference_video
  • camera_control
  • extra_payload
  • extra_output_config

Text2VideoRequest

保留/补充:

  • image_list
  • image_urls
  • voice_list
  • element_list
  • reference_video
  • camera_control
  • extra_payload
  • extra_output_config

2. nodes 层职责

在 py/nodes.py:

  • 继续负责把 ComfyUI 输入转成统一 request
  • 上传图片/视频引用 URL
  • 组装统一业务字段
  • 不负责写腾讯最终 payload 结构

3. mapping 层职责

新增 / 使用:

  • py/api/providers/tencent_vod/mapping.py

职责:

  • Image2VideoRequest -> Tencent payload
  • Text2VideoRequest -> Tencent payload
  • FileInfos 组装
  • OutputConfig 组装
  • sound / voice / element / camera / shot / reference 映射
  • extra_payload / extra_output_config 合并

4. provider 层职责

py/api/providers/tencent_vod/video.py 只负责:

  • 签名
  • HTTP 请求
  • 轮询
  • 调 mapping 产出 payload
  • 响应解析

避免 provider 文件同时承载过多字段组装细节。


建议的腾讯映射分层

一、稳定显式映射(优先完成)

这些字段应尽量直接进入腾讯固定 payload:

  • ModelVersion
  • GenerationMode
  • Prompt
  • NegativePrompt
  • OutputConfig.Duration
  • OutputConfig.AspectRatio
  • OutputConfig.AudioGeneration
  • OutputConfig.CfgScale(若腾讯结构允许)
  • FileInfos

二、结构化扩展映射(阶段内完成)

这些字段先用结构化 helper 明确装入 payload:

  • VoiceList
  • ShotType
  • ElementList
  • CameraControl
  • ReferenceVideo
  • LastFrame
  • ImageList / 多图参考输入

三、保底透传(阶段内保留)

对于暂时还无法确认最终字段位置的能力:

  • 允许通过 extra_payload / extra_output_config 合并
  • 等拿到腾讯完整字段说明后再收敛成显式映射

第一阶段验收标准

功能验收

  1. Image2VideoNode(provider=tencent_vod) 不再因为保守实现拒绝正常字段
  2. Text2VideoNode(provider=tencent_vod) 不再因为保守实现拒绝正常字段
  3. 图生视频支持:
    • 主图
    • 参考图
    • 末帧
    • 参考视频
  4. 文生视频支持:
    • prompt
    • aspect_ratio
    • duration
    • 参考图/参考视频(如果腾讯 payload 接受)
  5. 音频/主体/镜头相关字段至少能进入 provider payload

代码验收

  1. 腾讯 payload 组装逻辑主要位于 mapping.py
  2. nodes.py 不再堆积大量腾讯特判
  3. video.py 主要聚焦请求/轮询逻辑

测试验收

新增/修改测试覆盖:

  1. provider 选项仍然暴露正确
  2. official 路径不回归
  3. Tencent request 不再因为这些字段直接报错:
    • sound
    • voice_list
    • shot_type
    • element_list
    • reference_video
    • camera_control
    • image_tail
    • image_list
  4. mapping.py 的 payload 结构正确
  5. FileInfos / OutputConfig / extra merge 覆盖

第二阶段范围:扩展到其他腾讯能力节点

在图/文视频映射稳定后,进入第二阶段。

1. MotionControl

对应当前:

  • MotionControlNode
  • py/api/motion_control.py

目标:

  • 让腾讯 provider 能承接动作控制业务语义
  • 支持参考图 + 参考视频 + 保留原声 + element_list 等

2. VideoExtend

对应当前:

  • VideoExtendNode

目标:

  • 把视频延长纳入 provider 分发

3. Subject / AdvancedCustomElements

对应当前:

  • AdvancedCustomElementCreateNode
  • AdvancedCustomElementQueryNode

目标:

  • 腾讯主体管理能力独立 provider 化
  • 支持 element_voice_id

4. CustomVoice

对应当前:

  • CustomVoiceCreateNode
  • CustomVoiceQueryNode
  • TTSNode

目标:

  • 让自定义音色与图/文视频 voice 逻辑衔接

5. MultiImagesToVideo / MultiModalEdit

目标:

  • 与腾讯多图参考、多模态编辑文档对齐

风险与处理策略

风险 1:腾讯文档当前无法完整抓取字段细节

处理:

  • 先做“统一业务语义 + 显式映射 + 保底透传”
  • 等补充更精确字段说明后再收敛

风险 2:节点语义与腾讯字段语义不完全一致

处理:

  • 在 mapping 层做适配,不在节点层改用户输入语义

风险 3:测试环境缺依赖

处理:

  • 当前先做 py_compile
  • 完整 pytest 需要带 ComfyUI/torch 的 Python 环境运行

推荐实施顺序

Step 1

完成 Image2Video / Text2Video 的腾讯 mapping 精细化:

  • mapping.py 完整接管 payload 组装
  • 减少节点层硬编码腾讯逻辑

Step 2

修正测试:

  • 去掉“腾讯应拒绝工作流字段”的旧断言
  • 改成“腾讯 request 能承接并构造 payload”

Step 3

在带依赖环境跑定向测试:

  • tests/test_backend_config.py

Step 4

进入第二阶段节点扩展:

  • MotionControl
  • VideoExtend
  • Subject
  • Voice
  • Multi-image / Multi-modal

本计划对应产物

文档产物

  • docs/plan-v2.md(本文件)

第一阶段目标代码文件

  • py/nodes.py
  • py/api/providers/base.py
  • py/api/providers/tencent_vod/mapping.py
  • py/api/providers/tencent_vod/video.py
  • tests/test_backend_config.py

阶段结论

v2 的核心不是“再加几个 if”,而是把腾讯云路径从“受限首版”升级为:

可承接现有工作流输入的正式 provider 实现

先完成图生视频 / 文生视频的精细映射,再向动作控制、主体管理、自定义音色、多图参考等腾讯能力扩展。