报错：
这个是通过上传pdf生成纯画面视频报错：
[ERROR] Generate Seedance split video failed with exit code 1. See E:\testworkspace2\projects\douyin\output\分析一下这个文件\video_seedance_stderr.txt | split_error=Seedance clip 1 failed. See E:\testworkspace2\projects\douyin\output\分析一下这个文件\seedance-split-runs\20260427-095752\shots\shot-01\stderr.txt
=== Douyin Master Workflow ===
Route: 直出创作链
Source mode: 不走样本调研
Core keyword: 分析一下这个文件
Product: 分析一下这个文件
Audience: 加盟创业人群
Type: 纯画面视频
Normalized type: 纯画面视频
Writer type: 知识干货
Requested video engine: auto
Project folder: 分析一下这个文件
Attempt id: 20260427-095748-052712
Output dir: E:\testworkspace2\projects\douyin\output\分析一下这个文件
Direct image Seedance mode: True
Detected image-driven Seedance request without narration; skip preview copywriting stage.
[status] preview_packaging | 33%（2/6） | 文案生成 | 正在整理预览文件
Resolved video engine: seedance
[status] video_seedance | 67%（4/6） | 视频生成 | Generate Seedance split video
[video_seedance] Generate Seedance split video
[status] video_seedance | 67%（4/6） | 视频生成 | Generate Seedance split video 失败


这个是给抖音链接数字人口播视频报错：

修复抖音工作流两个失败：抖音下载器 + Seedance PDF 图片格式                                                                                                                                                                                                                                              nage
 Context

 用户运行了两个抖音工作流任务，分别在不同阶段失败：

 1. 宣传一下我家面包店 — 在 "样本准备" 阶段失败，douyin downloader 无法下载抖音视频
 2. 分析一下这个文件 — 在 "视频生成" 阶段失败，Seedance API 返回 InvalidParameter.UnsupportedImageFormat，因为 PDF 文件被当作参考图传入了只支持 JPG/PNG/WebP 的 API

 错误 1：抖音视频下载失败

 - 错误: Error: Unable to parse video detail from page; fallback failed:
 - 位置: E:\testworkspace2\projects\douyin\skills\douyin-video-downloader\scripts\douyin.js + run_downloader.py
 - 原因: Node.js 解析器和 Playwright 备用方案都无法从抖音页面提取视频信息。可能是抖音 HTML 结构变化或反爬措施

 错误 2：Seedance PDF 作为图片传入 API

 - 错误: Seedance create task failed with HTTP 400. InvalidParameter.UnsupportedImageFormat
 - API 请求中的问题 URL: http://tcwwu6wg4.hd-bkt.clouddn.com/omnihuman/reference-image/...pdf
 - 根因链:
   a. 用户上传了 PDF 文件（2025欧文酵室招商手册(1).pdf）
   b. coordinator.py:5486 — 当 seedance_image 为空时，回退使用 self.config.image（即 PDF 路径）
   c. coordinator.py:11286 — resolved_seedance_image = self.config.seedance_image or self.config.image
   d. 该 PDF 被上传到七牛，但保留 .pdf 扩展名
   e. run_seedance.py:normalize_media_input() — 对远程 URL 不做格式验证，直接传入 API
   f. Seedance API 拒绝 PDF 格式

 修复方案

 Fix 1：Seedance 图片格式校验（高优先）

 文件: E:\testworkspace2\projects\douyin\skills\douyin-master\scripts\coordinator.py

 在 materialize_project_inputs() 方法中（约 line 5399），当 seedance_image 回退到 self.config.image 时，检查文件是否为 Seedance 支持的图片格式。如果是 PDF，则改用 asset_understanding 提取的图片（已有 extracted_images/ 目录，包含从 PDF
 提取的 JPG 页面图）。

 具体改动：
 - 在 line 5484-5487（seedance_image 回退逻辑）之前，添加 PDF 检测：
   - 如果 self.config.image 以 .pdf 结尾，查找 asset_understanding/extracted_images/ 下的 JPG 文件
   - 使用第一个提取的 JPG 作为 seedance_image
   - 如果没有提取图片，保持 seedance_image 为空（让 Seedance 用 prompt 生成首帧图）

 同时在 run_seedance.py 的 normalize_media_input() 中添加远程 URL 格式校验（防御性修复）：
 - 对 media_kind == "image" 的远程 URL，检查扩展名是否为 .jpg/.jpeg/.png/.webp
 - 不支持的格式直接跳过（不做 reference），而不是让 API 400 报错

 Fix 2：抖音下载器（低优先，需更多调查）

 文件: E:\testworkspace2\projects\douyin\skills\douyin-video-downloader\scripts\douyin.js + run_downloader.py

 抖音下载器失败是外部依赖问题（抖音反爬/HTML结构变化），需要：
 1. 手动测试 douyin.js 能否用新 URL 正常工作
 2. 检查 Playwright 浏览器是否正确安装（vendor/openclaw-runtime/ 内的 Chromium）
 3. 可能需要更新解析器适配抖音新页面结构

 这个修复比较复杂且涉及第三方网站变化，建议先手动下载视频作为替代方案。

 关键文件（源码在 D:\qjclaw\workspace\douyin\，运行时副本在 E:\testworkspace2\projects\douyin\）

 - D:\qjclaw\workspace\douyin\skills\douyin-master\scripts\coordinator.py — 主要修复点：PDF→JPG 回退逻辑
 - D:\qjclaw\workspace\douyin\skills\seedance-2-0-video-generator\scripts\run_seedance.py — 防御性修复：远程 URL 格式校验
 - D:\qjclaw\workspace\douyin\skills\douyin-asset-understanding\ — PDF 图片提取（已有功能，直接复用）

 修改源码后，需要重新打包 zip 上传到云端或本地替换，让工作流使用修复后的代码。

 验证

 1. 修改 coordinator.py 后，重新提交一个带 PDF 附件的抖音任务，确认 Seedance 使用提取的 JPG 而非 PDF
 2. 检查 task_create.json 中的 image_url 不再包含 .pdf 扩展名
 3. 确认 Seedance API 返回成功（HTTP 200/201）而非 400

