auto-save 2026-05-18 17:45 (~3)

This commit is contained in:
2026-05-18 17:45:54 +08:00
parent 1f600ae436
commit 92f04f1a7e
3 changed files with 1954 additions and 2016 deletions

View File

@@ -15,16 +15,17 @@ key 写在 `api/.env` 的 `LLM_API_KEY`
| 端点 / 字段 | 状态 | 用途 |
|---|---|---|
| `/v1/chat/completions` text-only | ✅ 通 | translate / rewrite |
| `/v1/chat/completions` + image_url | ✅ **通**(之前误判为不通,是 dog.jpg 那张图损坏) | vision 识别图片gemini-2.5-flash 推荐) |
| `/v1/chat/completions` + input_audio | ❌ 不通 | ASR 不能走这条 |
| `/v1/audio/transcriptions` (whisper) | ❌ 404 | 整个 audio 端点都没暴露 |
| `/v1/audio/speech` (tts) | ❌ 404 | |
| `/v1/images/generations` (text→image) | ✅ 通 | 生图gemini-3-pro-image-preview = nano-banana-pro |
| `/v1/images/generations` + image 参数 | ✅ **通**image-to-image | 实测能传 reference image关键的发现 |
| `/v1/images/edits` | ❌ 404 | |
| `/v1/videos/*` (sora-2) | ❌ 404 | 视频生成需要 IT 开通或外部 key |
| `/v1/files` | ❌ 403 "必须指定渠道" | |
| 远端 ASR | `ASR_MODEL=whisper-1` | 失败后进本机 ASR再进多模态兜底。 |
| 本机 ASR | `LOCAL_ASR_MODEL=mlx-community/whisper-tiny` | 默认二级兜底,优先产出真实逐句时间轴。 |
| ASR 兜底 / 音频分析 | `ASR_FALLBACK_MODEL=gemini-2.5-flash` | 多模态音频兜底;后端会拒绝假字幕、重复文本和覆盖率过低结果。 |
| 字幕翻译 | `TRANSLATE_MODEL=gemini-2.5-flash` | 保留 Gemini。 |
| 画面理解 | `VISION_MODEL=gpt-4o` | 关键帧 Vision 已切 GPT旧环境若写 `gemini-*` 会自动归一化到 `GPT_TEXT_MODEL` |
| 通用改写 / 分镜描述 | `REWRITE_MODEL=gpt-4o` | 已切 GPT旧 Gemini 覆盖值会自动归一化。 |
| 新口播改写 | `AUDIO_REWRITE_MODEL=gpt-4o` | 默认跟随 `REWRITE_MODEL`;旧 Gemini 覆盖值会自动归一化。 |
| 产品视角识别 | `PRODUCT_VIEW_MODEL=gpt-image-2` | 产品图批量识别视角、左右 / 上下 / 内外侧、用途和风险。 |
| 所有生图 / 修图 | `gpt-image-2` | 服务端硬锁,无图片模型 fallback覆盖关键帧生图、水印清理、元素提取、主体资产包、产品补角度、首尾帧。 |
| 配音 | `VOICE_PROVIDER=azure_openai` + `AZURE_TTS_MODEL=gpt-4o-mini-tts` | 语音固定 Azure OpenAI TTSMiniMax 不再作为 fallback。后端会按 `AZURE_TTS_PATHS` 依次尝试路径,便于区分路径错误和整条语音服务不可用。 |
| 视频 | `VIDEO_MODEL=seedance` | 当前主流程暂停直接提交;生产通道默认 `ai.skg.com/doubao`Seedance 真实 ID 由 `VIDEO_MODEL_SEEDANCE` 配置。 |
**网关后端 = one-hub 多渠道代理**。当前 key 分组叫「纯OpenAI+AWSClaude+Gemini官方」缺 audio 渠道(`gpt-4o-audio-preview` 503 "无可用渠道")和 video 渠道。
@@ -91,6 +92,7 @@ Job { frames: KeyFrame[] ... }
## 已通的 API 端点
```
POST /jobs 创建 job链接
POST /jobs/{id}/download/retry TK 链接下载失败后重新下载
POST /jobs/upload 上传视频
GET /jobs/{id} job 状态
POST /jobs/{id}/analyze?frames=5 拆轨+抽帧+ASR 自动一气呵成
@@ -104,43 +106,21 @@ GET /jobs/{id}/frames/{idx}.jpg 关键帧 jpg
GET /health
```
## 已知坑 / 不要
1. **关键帧 index 不连续**:手动加帧后 frames 数组按 timestamp 排序index 是稳定 ID。lightbox 必须用 `frames.find(x => x.index === activeIndex)`**不要**用 `frames[activeIndex]`
2. **SKG 网关 vision 之前测试结果错误**:用 `dog.jpg` 那张 wikipedia 200px 缩略图损坏 / metadata 异常,导致一直以为 image input 不通。用标准 PNG / 真实 jpeg 测就通了
3. **Gemini 2.5 Flash 默认带 thinking**`content` 字段经常为空token 都给了 reasoning要从 `reasoning_content` 正则挖 JSON 兜底
4. **缩略图 aspect-ratio**:必须用 `aspectRatio: ${job.width}/${job.height}` 自适应,不要强制 `aspect-video` 16:9竖屏视频会被裁切
5. **ReactFlow `type="input"` / `"output"` 是 reserved**:自带白底默认样式,要 CSS 覆盖 `.react-flow .react-flow__node-input { background: transparent !important; ... }`
6. **ReactFlow 12 colorMode 独立于 next-themes**:必须 `<ReactFlow colorMode={resolvedTheme}>` 联动,否则节点白底
7. **FastAPI BackgroundTasks 用法**`bg.add_task(func, arg)` 不能传 coroutine
8. **ffmpeg 8 mjpeg encoder 拒绝 yuv420p**:抽帧必须加 `-pix_fmt yuvj420p`,且 `-vsync``-fps_mode`
9. **抽帧速度**:场景切换检测(`select='gt(scene,0.4)'`超慢71s 视频要 30s+),换均匀采样 fast seek5 张 < 3 秒)
## 当前约束 / 不要踩
1. 图片 / 视频 / 抽帧 / 产品图 / 生成图 / 首尾帧 / 视频候选缩略图默认复用 `web/components/media-asset-tile.tsx`
2. 所有生图入口服务端只允许 `gpt-image-2`,不要重新加 Gemini 图片模型或其他 fallback
3. 画面理解和文案改写默认归 GPT`VISION_MODEL``REWRITE_MODEL``AUDIO_REWRITE_MODEL` 会拦截旧 `gemini-*` 覆盖值
4. Gemini 仍保留在 ASR fallback / 音频分析 / 翻译链路,不要误删
5. 语音只走 Azure OpenAI TTS不要新增或依赖其他配音通道配置
6. TikTok 受限下载遇到 `Log in for access` 不是后端没接到任务;需要 `YTDLP_COOKIES_FILE``YTDLP_COOKIES_FROM_BROWSER`,配置后可点“重新下载”
7. 当前主流程不直接批量提交视频;先走“分镜规划 → 首尾帧 → 人工审核”
8. 后端长任务不要用 `--reload`
9. 关键帧 `index` 是稳定 ID不等于数组下标前端取帧用 `frames.find(x => x.index === idx)`
## 待办(按优先级)
1. **ASR 阻塞**:找 SKG IT 开 audio 渠道,或给一个外部 ASR keyDeepgram / 讯飞 / OpenAI 直连)
2. **生图测试反馈**:刚做完,等用户在浏览器试 → 调 negative prompt / 模型选型
3. **区域化修图inpainting**:用户讨论了,方案 A 纯 prompt / B 矩形框 / C 画笔 mask / D SAM暂时搁置
4. **改写 Rewrite**:等用户给产品信息卡模板
5. **视频生成**sora-2 走 SKG 端点不通;考虑外部 key (Runway/Kling/Veo3)
6. **合成 Compose**:全本地 ffmpeg + 字幕 + TTS
## 操作流(开发会话)
```bash
# 1. 启动后端(如未跑)
cd ~/Projects/business/20260512-20260512-skg-tk-二创验证/api
source .venv/bin/activate
uvicorn main:app --port 4291 --reload
# 2. 启动前端(如未跑)
cd ../web
pnpm dev
# 3. 浏览器
open http://localhost:4290/?job=c6767f3a166b
```
## 用户偏好提醒feedback memory
- feedback_image-gen-model生图统一用 nano-banana-pro ✅
- feedback_keep-scope-small小需求小做
- feedback_flow-dont-stop连续执行到交付真分叉才问
- feedback_demand-before-infra基建前先反问谁/痛点/频率
- feedback_no-guessing-ports操作前先核实
## 最近变更
- 2026-05-18清理个人语音通道残留`/health`、前端类型、环境模板和文档不再暴露相关字段或配置。
- 2026-05-18`VISION_MODEL``REWRITE_MODEL``AUDIO_REWRITE_MODEL` 切到 GPT 默认模型 `gpt-4o`,并加旧 Gemini 环境变量归一化保护。
- 2026-05-18语音通道固定 Azure OpenAI TTS并按 `AZURE_TTS_PATHS` 尝试语音路径。
- 2026-05-18TikTok 受限链接支持 cookies 配置和失败素材“重新下载”。
- 2026-05-18媒体素材交互统一收口到 `MediaAssetTile`
- 2026-05-18产品图视角识别和产品缺角度补图收敛到 `gpt-image-2`