# 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 实现** 先完成图生视频 / 文生视频的精细映射,再向动作控制、主体管理、自定义音色、多图参考等腾讯能力扩展。