From 1ebe11f889880a644092178caefd44641da85edc Mon Sep 17 00:00:00 2001 From: kang Date: Thu, 14 May 2026 10:31:25 +0800 Subject: [PATCH] auto-save 2026-05-14 10:31 (~4) --- .memory/worklog.json | 40 +++++++++++++++++++-------------------- api/.env.example | 5 +++++ api/main.py | 6 ++++-- docs/source-analysis.html | 14 +++++++++++++- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/.memory/worklog.json b/.memory/worklog.json index 8479a1a..9f360a5 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1,26 +1,5 @@ { "entries": [ - { - "files_changed": 1, - "hash": "f2d817d", - "message": "auto-save 2026-05-13 01:07 (~1)", - "ts": "2026-05-13T01:07:25+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "e42ae5b", - "message": "auto-save 2026-05-13 01:13 (~1)", - "ts": "2026-05-13T01:13:20+08:00", - "type": "commit" - }, - { - "files_changed": 1, - "hash": "5086534", - "message": "auto-save 2026-05-13 01:19 (~1)", - "ts": "2026-05-13T01:19:16+08:00", - "type": "commit" - }, { "files_changed": 1, "hash": "7a31e86", @@ -3315,6 +3294,25 @@ "message": "auto-save 2026-05-14 10:20 (~7)", "hash": "be1ae80", "files_changed": 7 + }, + { + "ts": "2026-05-14T10:25:50+08:00", + "type": "commit", + "message": "auto-save 2026-05-14 10:25 (~13)", + "hash": "7bfbb38", + "files_changed": 13 + }, + { + "ts": "2026-05-14T02:26:09Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 3 项未提交变更 · 最近提交:auto-save 2026-05-14 10:25 (~13)", + "files_changed": 3 + }, + { + "ts": "2026-05-14T02:28:38Z", + "type": "session-heartbeat", + "message": "Codex 会话活跃 · 最近命令:codex · 4 项未提交变更 · 最近提交:auto-save 2026-05-14 10:25 (~13)", + "files_changed": 4 } ] } diff --git a/api/.env.example b/api/.env.example index 750f219..648db3a 100644 --- a/api/.env.example +++ b/api/.env.example @@ -31,6 +31,10 @@ POE_API_KEY= # VIDEO_CREATE_PATHS=/contents/generations/tasks # VIDEO_STATUS_PATH=/contents/generations/tasks/{id} # +# SKG 豆包/Seedance 视频网关也使用同一套 content JSON 提交格式: +# VIDEO_API_BASE_URL=https://ai.skg.com/doubao +# VIDEO_API_KEY= +# # 自定义视频网关覆盖;留空时如配置 POE_API_KEY,则走 Poe。 VIDEO_API_BASE_URL= VIDEO_API_KEY= @@ -39,6 +43,7 @@ VIDEO_CREATE_PATHS=/videos VIDEO_STATUS_PATH=/videos/{id} VIDEO_CONTENT_PATH=/videos/{id}/content VIDEO_DURATION_FIELD=seconds +VIDEO_POLL_TIMEOUT_SECONDS=900 # 工作目录 KEYFRAME_COUNT=12 diff --git a/api/main.py b/api/main.py index cf608fc..7860287 100644 --- a/api/main.py +++ b/api/main.py @@ -83,6 +83,7 @@ VIDEO_CREATE_PATHS = [ VIDEO_STATUS_PATH = os.getenv("VIDEO_STATUS_PATH", "/videos/{id}").strip() or "/videos/{id}" VIDEO_CONTENT_PATH = os.getenv("VIDEO_CONTENT_PATH", "/videos/{id}/content").strip() or "/videos/{id}/content" VIDEO_DURATION_FIELD = os.getenv("VIDEO_DURATION_FIELD", "seconds").strip() or "seconds" +VIDEO_POLL_TIMEOUT_SECONDS = max(60, int(os.getenv("VIDEO_POLL_TIMEOUT_SECONDS", "900"))) # OpenAI 客户端(OpenAI 兼容网关,含 SKG ezlink) from openai import OpenAI @@ -415,7 +416,8 @@ def video_uses_poe() -> bool: def video_uses_ark() -> bool: - return "ark.cn-beijing.volces.com" in video_api_base() + base = video_api_base() + return "ark.cn-beijing.volces.com" in base or "ai.skg.com/doubao" in base def video_api_base() -> str: @@ -3198,7 +3200,7 @@ def render_storyboard_video( direct_url = video_url_from_response(data) update_generated_video(job_id, local_id, provider_id=video_api_id, status=status, progress=progress) - deadline = time.time() + 420 + deadline = time.time() + VIDEO_POLL_TIMEOUT_SECONDS while status in {"queued", "in_progress"} and time.time() < deadline: time.sleep(8) poll = client.get(f"{base}{video_path(VIDEO_STATUS_PATH, id=video_api_id)}", headers=headers) diff --git a/docs/source-analysis.html b/docs/source-analysis.html index 875317f..93ec2b3 100644 --- a/docs/source-analysis.html +++ b/docs/source-analysis.html @@ -874,7 +874,7 @@ SubjectAsset {
  • ASR:仍依赖当前 OpenAI-compatible 音频转写入口;如果该网关 audio endpoint 不通,文案提取仍会失败。
  • MiniMax:当前接入的是官方 T2A 配音能力,不是 ASR;API Key 只能放本地环境变量,不能写入仓库。
  • Audio Product Brief:默认是通用 SKG 放松产品卖点,后续可改成跟已选产品库条目联动。
  • -
  • Video Gen:模型层按业务保留 Seedance / Kling / Veo/Voe 选择;后端已支持 Poe 视频通道,别名默认映射到 seedance-2-fastkling-omniveo-3.1-fast,提交后写入 Video Gen 节点。
  • +
  • Video Gen:模型层按业务保留 Seedance / Kling / Veo/Voe 选择;后端已支持 Poe、火山方舟和 SKG 豆包视频网关。Seedance 可通过 VIDEO_API_BASE_URL=https://ai.skg.com/doubao 走 content JSON 异步任务,提交后写入 Video Gen 节点并轮询到完成。
  • Compose:还没做本地 ffmpeg 字幕/TTS 合成。
  • @@ -914,6 +914,18 @@ SubjectAsset {

    变更记录

    这个记录不是 git log 的替代品。它记录“产品理解发生了什么变化、影响了哪些源码、你以后描述需求时该怎么说”。后续每次改功能都要补一条。

    +
    +
    +

    2026-05-14 · 生视频接入 SKG 豆包网关

    + Video Gen + Seedance +
    +
    +

    问题:用户提供 https://ai.skg.com/doubao 作为视频模型网关;该网关应按 Seedance / 方舟内容生成任务格式提交,而不能误走普通 multipart 上传。

    +

    改动:video_uses_ark() 现在同时识别火山方舟域名和 ai.skg.com/doubao,统一使用 content JSON:文本 prompt、首帧、尾帧和产品参考图作为不同 role 传入,再按 /contents/generations/tasks/{id} 轮询。api/.env.example 增加 SKG 豆包视频网关配置示例;生视频轮询上限改为 VIDEO_POLL_TIMEOUT_SECONDS,默认 900 秒,避免慢任务过早失败。

    +

    影响:api/main.pyapi/.env.exampledocs/source-analysis.html。本机 api/.env 已配置 VIDEO_API_BASE_URL=https://ai.skg.com/doubao 和视频专用 key。

    +
    +

    2026-05-14 · 音频处理接入 SKG 口播改写与 MiniMax 配音