Seedance API sensitive-content failures should not abort concurrent task batches

这个报错通常出现在使用 ComfyUI 的 ByteDance / Seedance API 节点、并开启 generate_audio: true 做批量或多任务生成时:远端任务因音频内容审核失败返回 OutputAudioSensitiveContentDetected ,随后被轮询逻辑当作异常

快速结论:这个报错通常出现在使用 ComfyUI 的 ByteDance / Seedance API 节点、并开启 generate_audio: true 做批量或多任务生成时:远端任务因音频内容审核失败返回 OutputAudioSensitiveContentDetected,随后被轮询逻辑当作异常抛出,导致整个批次中断。优先排查点是轮询返回中的 error['code'] 与 ComfyUI 轮询异常处理路径。

适用环境:ComfyUI,master 分支,commit 300b6c8c9;使用 ByteDance / Seedance API 节点(comfy_api_nodes/nodes_bytedance.py),并启用 generate_audio: true。Issue 中未提供操作系统、Python、CUDA、显卡或依赖版本信息。

最快修复方案:暂无确认的一步修复方案。Issue 中提出的期望行为,是在节点侧识别已知的审核类错误码(如 OutputAudioSensitiveContentDetected),将该单个任务按受控失败或空输出处理,而不是让轮询直接抛异常中断整批。评论中提到的可行做法,是在自己的节点封装里检查轮询响应中的 error['code'],对预期内的审核错误码返回空输出或直通结果;可优先尝试。

注意事项:上述做法是在节点外层替换异常处理,不修改核心执行逻辑,属于用户的变通方案,并非上游确认修复;Issue 中未给出官方补丁或配置项。对错误码做白名单时,需要能接收对应错误码的遗漏风险;如果监控体系依赖异常来触发告警,改为受控失败后需要另行补上日志或状态检查。

问题场景

用户在 ComfyUI 中运行 ByteDance / Seedance API 节点,设置 generate_audio: true,并行或批量提交多个生成任务。其中某个任务在远端审核阶段失败:视频画面可能没有明显问题,但生成的音频被判定包含敏感内容,服务端将任务状态标记为 failed 并返回 OutputAudioSensitiveContentDetected。ComfyUI 在轮询该任务状态时把失败当作异常抛出,导致当前执行路径中断,其他无关任务也一并停止。

报错原文

Task failed: {"id": "cgt-20260514101521-nk5ct", "model": "dreamina-seedance-2-0-260128", "status": "failed", "error": {"code": "OutputAudioSensitiveContentDetected", "message": "The request failed because the output audio may contain sensitive information. Request id: 02177872492196700000000000000000000ffffc0a87832ba9e04"}, "generate_audio": true}

Exception: Polling aborted due to error: Task failed: {... "code": "OutputAudioSensitiveContentDetected" ...}

Issue 中给出的相关堆栈位置:

comfy_api_nodes/util/client.py:405 poll_op_raw
comfy_api_nodes/util/client.py:436 poll_op_raw
comfy_api_nodes/nodes_bytedance.py:2144 execute
execution.py:454 execute

原因分析

最可能的原因是:comfy_api_nodes/util/client.py 的 poll_op_raw 对轮询结果中的任意 error 都采用统一的中断处理,只要任务状态为 failed 就抛出 Polling aborted due to error。对于提供商侧的音频内容审核失败这类预期内结果,这种处理方式过于激进:单个任务被审核拦截后,异常沿 nodes_bytedance.py 的 execute 向上传播,最终使整批执行中止。此外,generate_audio: true 时音频会被单独审核,即使视频部分可用,也可能因音频触发该错误。以上为基于 Issue 描述与代码位置的推断,Issue 未给出上游确认的根因结论。

环境排查

  • 确认 ComfyUI 所在分支与 commit,Issue 环境为 master、300b6c8c9;不同 commit 的轮询逻辑可能有差异。
  • 确认当前使用的 Seedance 节点实现位置,Issue 涉及 comfy_api_nodes/nodes_bytedance.py 的 execute。
  • 确认是否启用了 generate_audio: true;这是 Issue 中明确指出容易触发该错误的条件。
  • 确认工作流是否为多任务或批量并行执行,这决定了单个任务失败是否会造成大范围中断。
  • 查看轮询返回完整 JSON 中的 status、error.code、error.message 与 Request id,用于区分审核类失败与其他任务失败。
  • Issue 未提供操作系统、Python、CUDA、PyTorch、显卡或依赖版本,无需据此补充判断。

解决步骤

  1. 复现时先保留完整轮询响应,记录 error['code']、error['message'] 和 Request id,确认失败属于提供商侧审核类错误,而非网络、鉴权或参数错误。
  2. 整理一组需要按受控失败处理的审核错误码,至少包含 OutputAudioSensitiveContentDetected;不要对全部 error 一律吞掉,否则会掩盖真正的故障。
  3. 可优先尝试:在自有节点封装中接管 Seedance 节点调用,捕获轮询异常后读取异常信息或轮询结果中的 error['code'];命中审核错误码时返回空输出或直通结果,未命中则原样抛出。
  4. 将处理范围限制在单个任务的结果上,保持错误码与 Request id 写入日志或节点输出,便于在批量运行后定位具体被拦截的任务。
  5. 在批量工作流中用上述封装替换原节点后再次运行,确认单任务审核失败不再导致批次整体中止。

验证方法

再次提交包含多个任务的同批次 Seedance 运行,并确保 generate_audio: true。当某个任务返回 OutputAudioSensitiveContentDetected 时,观察该任务是否显示为空输出、直通或明确的单任务失败状态,其余任务是否继续完成;同时检查日志中是否仍保留原始错误码和 Request id。若仍出现 Polling aborted due to error 并中断整批,说明异常未被封装捕获,需要检查封装是否覆盖了 poll_op_raw 抛出的路径。

参考来源

Comfy-Org/ComfyUI #13883

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34536

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注