9.7 KiB
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.pypy/api/providers/official/video.pypy/api/providers/tencent_vod/video.py
py/nodes.py已有:- provider 配置解析
- provider factory
Image2VideoNode/Text2VideoNodeprovider 分发入口
- 官方路径已能通过 provider 包装调用
- 腾讯路径已经能发起
CreateAigcVideoTask/DescribeTaskDetail
当前问题
- 早期腾讯逻辑过于保守,仍然带有“能力先禁用”的设计痕迹
- 腾讯 payload 组装逻辑仍不够精细
- 有些字段只是粗粒度 passthrough,还未转成腾讯最终字段结构
- 图/文视频之外的腾讯能力尚未纳入 provider 化
- 当前 shell Python 环境缺少
torch,无法直接完整跑 pytest
v2 实施原则
原则 1:不轻易在节点层禁用字段
除非已经确定腾讯接口确实不支持,或当前字段会构造出无效请求,否则:
- 不在节点层报“不支持”
- 先保留输入
- 再在 provider 层做映射或透传
原则 2:节点是通用接口,provider 负责后端差异
节点层尽量继续表达统一业务语义,例如:
voice_listelement_listcamera_controlreference_videoimage_tailshot_typesound
这些差异应由 provider mapping 解释为腾讯 payload。
原则 3:先显式映射,再保底透传
对腾讯路径分两层处理:
- 显式映射层
- 明确转成腾讯结构与字段名
- 透传层
- 暂未最终建模的字段先通过
extra_payload/extra_output_config带过去
- 暂未最终建模的字段先通过
这样既不阻塞现有流程,又为后续精细化收敛留下空间。
第一阶段范围:Image2Video / Text2Video 精确映射
这是当前最高优先级。
A. Image2Video 目标
provider=tencent_vod 时,至少承接以下输入:
modelimageimage_tailpromptnegative_promptcfg_scalemodedurationsoundvoice_preset/custom_voice_id->voice_listshot_typeimage_listelement_listreference_videocamera_control
B. Text2Video 目标
provider=tencent_vod 时,至少承接以下输入:
modelpromptnegative_promptcfg_scalemodeaspect_ratiodurationsoundvoice_preset->voice_listshot_typeimage_listelement_listreference_videocamera_control
第一阶段技术方案
1. request 层扩展
继续使用 py/api/providers/base.py 的 request dataclass,补充腾讯映射所需字段。
Image2VideoRequest
保留/补充:
image_urlsimage_tail_urlvoice_listelement_listreference_videocamera_controlextra_payloadextra_output_config
Text2VideoRequest
保留/补充:
image_listimage_urlsvoice_listelement_listreference_videocamera_controlextra_payloadextra_output_config
2. nodes 层职责
在 py/nodes.py:
- 继续负责把 ComfyUI 输入转成统一 request
- 上传图片/视频引用 URL
- 组装统一业务字段
- 不负责写腾讯最终 payload 结构
3. mapping 层职责
新增 / 使用:
py/api/providers/tencent_vod/mapping.py
职责:
Image2VideoRequest -> Tencent payloadText2VideoRequest -> Tencent payloadFileInfos组装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:
ModelVersionGenerationModePromptNegativePromptOutputConfig.DurationOutputConfig.AspectRatioOutputConfig.AudioGenerationOutputConfig.CfgScale(若腾讯结构允许)FileInfos
二、结构化扩展映射(阶段内完成)
这些字段先用结构化 helper 明确装入 payload:
VoiceListShotTypeElementListCameraControlReferenceVideoLastFrameImageList/ 多图参考输入
三、保底透传(阶段内保留)
对于暂时还无法确认最终字段位置的能力:
- 允许通过
extra_payload/extra_output_config合并 - 等拿到腾讯完整字段说明后再收敛成显式映射
第一阶段验收标准
功能验收
Image2VideoNode(provider=tencent_vod)不再因为保守实现拒绝正常字段Text2VideoNode(provider=tencent_vod)不再因为保守实现拒绝正常字段- 图生视频支持:
- 主图
- 参考图
- 末帧
- 参考视频
- 文生视频支持:
- prompt
- aspect_ratio
- duration
- 参考图/参考视频(如果腾讯 payload 接受)
- 音频/主体/镜头相关字段至少能进入 provider payload
代码验收
- 腾讯 payload 组装逻辑主要位于
mapping.py nodes.py不再堆积大量腾讯特判video.py主要聚焦请求/轮询逻辑
测试验收
新增/修改测试覆盖:
- provider 选项仍然暴露正确
- official 路径不回归
- Tencent request 不再因为这些字段直接报错:
soundvoice_listshot_typeelement_listreference_videocamera_controlimage_tailimage_list
mapping.py的 payload 结构正确FileInfos/OutputConfig/ extra merge 覆盖
第二阶段范围:扩展到其他腾讯能力节点
在图/文视频映射稳定后,进入第二阶段。
1. MotionControl
对应当前:
MotionControlNodepy/api/motion_control.py
目标:
- 让腾讯 provider 能承接动作控制业务语义
- 支持参考图 + 参考视频 + 保留原声 + element_list 等
2. VideoExtend
对应当前:
VideoExtendNode
目标:
- 把视频延长纳入 provider 分发
3. Subject / AdvancedCustomElements
对应当前:
AdvancedCustomElementCreateNodeAdvancedCustomElementQueryNode
目标:
- 腾讯主体管理能力独立 provider 化
- 支持
element_voice_id
4. CustomVoice
对应当前:
CustomVoiceCreateNodeCustomVoiceQueryNodeTTSNode
目标:
- 让自定义音色与图/文视频 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.pypy/api/providers/base.pypy/api/providers/tencent_vod/mapping.pypy/api/providers/tencent_vod/video.pytests/test_backend_config.py
阶段结论
v2 的核心不是“再加几个 if”,而是把腾讯云路径从“受限首版”升级为:
可承接现有工作流输入的正式 provider 实现
先完成图生视频 / 文生视频的精细映射,再向动作控制、主体管理、自定义音色、多图参考等腾讯能力扩展。