@optima-chat/optima-agent 0.8.87 → 0.8.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gen
3
- description: "生成和编辑图片/视频/语音/虚拟试穿。使用场景:生成图片(generate images/生成图片/画图)、编辑图片(edit images/编辑图片/图生图/风格转换)、生成视频(create videos/图生视频)、文本转语音(TTS/语音合成/朗读)、语音识别(ASR/语音转文字/转录)、虚拟试穿(virtual try-on/试穿/换装/试衣)。"
3
+ description: "生成和编辑图片/语音/虚拟试穿。使用场景:生成图片(generate images/生成图片/画图)、编辑图片(edit images/编辑图片/图生图/风格转换)、文本转语音(TTS/语音合成/朗读)、语音识别(ASR/语音转文字/转录)、虚拟试穿(virtual try-on/试穿/换装/试衣)。视频生成请使用 video-clone skill。"
4
4
  ---
5
5
 
6
6
  # AI 内容生成工具
@@ -145,54 +145,6 @@ gen image "Disney Pixar style 3D animated robot character, friendly cheerful exp
145
145
  #### 多图参考
146
146
  - 最多 8 张输入图
147
147
 
148
- ## 视频生成
149
-
150
- 从静态图片生成视频(wan2.6-i2v),支持 720P/1080P,5-10 秒。
151
-
152
- ```bash
153
- gen video <图片路径> [options]
154
- ```
155
-
156
- ### 参数
157
-
158
- | 参数 | 说明 | 默认值 |
159
- |------|------|--------|
160
- | `-p, --prompt` | 运动/内容描述 | - |
161
- | `-n, --negative` | 负向提示词 | - |
162
- | `-o, --output <path>` | 输出目录或完整路径 | - |
163
- | `-r, --resolution` | 720P \| 1080P | 1080P |
164
- | `-d, --duration` | 5 \| 10 秒 | 5 |
165
- | `--shot-type` | single \| multi(多镜头叙事) | single |
166
- | `--no-audio` | 禁用自动配音 | - |
167
- | `--audio-url <url>` | 自定义音频 URL | - |
168
- | `--no-prompt-extend` | 禁用智能改写 prompt | - |
169
- | `--watermark` | 添加 AI 生成水印 | - |
170
- | `--seed <number>` | 随机种子(可复现) | - |
171
-
172
- ### 示例
173
-
174
- ```bash
175
- # 基础用法
176
- gen video portrait.png --prompt "gentle smile, subtle head movement"
177
-
178
- # 10 秒 1080P 视频
179
- gen video scene.png -d 10 -r 1080P --prompt "cinematic camera pan"
180
-
181
- # 静音视频
182
- gen video product.png --no-audio --prompt "360 degree rotation"
183
-
184
- # 指定输出路径
185
- gen video scene.png -o /home/aiuser/project/result.mp4 --prompt "camera zoom"
186
- Read /home/aiuser/project/result.mp4
187
- ```
188
-
189
- ### 注意事项
190
-
191
- - 输入图片:推荐 1080P 比例,≤10MB
192
- - 最大时长 10 秒
193
- - 输出:30fps,MP4 (H.264)
194
- - 默认保存到 `./gen-output/`
195
-
196
148
  ## 虚拟试穿 (Virtual Try-On)
197
149
 
198
150
  使用 FASHN AI tryon-v1.6 将服装穿到人物照片上。
@@ -0,0 +1,492 @@
1
+ ---
2
+ name: video-clone
3
+ description: "视频复刻与视频生成。当用户需要:复刻视频(复刻/翻拍/仿拍/做同款/视频换产品/product swap/爆款复刻/video replication)、用户贴视频链接+产品图要求出同款视频、或用户提供图片/文字描述要求直接生成视频(生成视频/图生视频/做一个视频)时使用。"
4
+ ---
5
+
6
+ # Video Clone
7
+
8
+ ## 典型场景
9
+
10
+ 当用户说:
11
+ - "帮我复刻这个视频" + 视频 + 产品图 → **视频复刻**:判断单/多片段,走 Pipeline
12
+ - "帮我做同款视频" + 视频 + 产品图 → 同上
13
+ - "帮我分析一下这个视频" + 视频 → 只跑 Phase 1(分析+场景拆分)
14
+ - "换个首帧试试" → 回到 Phase 2 重跑
15
+ - "prompt 改一下" → 用户修改 prompt 后重跑 Phase 3
16
+ - "帮我生成一个视频" + 图片 + 描述 → **纯视频生成**(无源视频)
17
+ - "用这张图做个视频" + 图片 → 同上
18
+
19
+ ### 单片段 vs 多片段(复刻时首先判断)
20
+
21
+ ```
22
+ 源视频 → ffmpeg 场景检测
23
+ ├─ scene change ≤ 1 → 单片段:1 首帧 → 1 clip → 成品
24
+ └─ scene change ≥ 2 → 多片段:N 首帧 → N clips → 拼接 → 成品
25
+ ```
26
+
27
+ ### 纯视频生成(无源视频)
28
+
29
+ ```
30
+ 图片 + 描述 → Claude 编写中文 6 段 prompt → 用户确认
31
+ → 不需要音频 → gen video(Wan 2.6,~$0.02)
32
+ → 需要音频 → Kling 3.0 API(~$1.00)
33
+ ```
34
+
35
+ ## URL 解析
36
+
37
+ **不要用 WebFetch**(反爬/登录墙),按规则处理:
38
+
39
+ | URL 特征 | 处理 |
40
+ |----------|------|
41
+ | TikTok `tiktok.com/@xxx/video/数字` | `scout tiktok video-detail <id>` → wget |
42
+ | TikTok 短链 `vm.tiktok.com/xxx` | `curl -sI` → Location → 提取 id |
43
+ | 抖音 `douyin.com/video/数字` | `scout douyin video-download <id>` → wget |
44
+ | 抖音短链 `v.douyin.com/xxx` | `scout douyin video-by-url "<url>"` |
45
+ | Instagram Reels | `scout instagram download-reel "<url>"` |
46
+ | 小红书视频 | `scout xhs note-detail <id>` → 视频链接 |
47
+ | 本地文件 | 直接使用 |
48
+
49
+ ## 交互流程
50
+
51
+ ### 视频复刻(单片段/多片段共用)
52
+
53
+ ```
54
+ 源视频 + 产品图
55
+ → 创建 gen-output/video-clone/{project}/ 目录,保存源素材
56
+ → Phase 1:自动抽帧、自动选首帧、Claude Opus 分析
57
+ ├─ [多片段] 报告片段数和每段描述
58
+ ├─ 写入 prompt.md + 打印给用户
59
+ └─ "这是分析出的 prompt,需要修改吗?可以直接编辑 prompt.md"
60
+ → 用户确认或编辑 prompt.md
61
+ → Phase 2:FLUX-PRO 首帧编辑 → 保存到 frames/
62
+ ├─ 展示首帧(Read 图片)
63
+ └─ "产品替换满意吗?"
64
+ → Phase 3:"视频生成中..." → 保存到 videos/
65
+ → Phase 4:后处理 → final_v{N}.mp4 → 更新 log.md 结果
66
+
67
+ ⚠️ 两个交互点:prompt 确认 + 首帧质检
68
+ ⚠️ Phase 3/4 自动执行
69
+ ⚠️ 每步产物都保存,log.md 实时更新
70
+ ```
71
+
72
+ ### 纯视频生成
73
+
74
+ ```
75
+ 图片 + 描述
76
+ → 创建 gen-output/video-clone/{project}/ 目录
77
+ → Claude 编写中文 6 段 prompt → 写入 prompt.md + 打印给用户
78
+ → 用户确认或编辑 prompt.md → "视频生成中..." → 保存到 videos/
79
+ → 交付 → 更新 log.md 结果
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 铁律
85
+
86
+ ```
87
+ 1. 首帧质量决定一切 — 自动选产品最清晰+手部最自然的帧
88
+ 2. 让模型做简单的事 — 产品保持静止,人做简单动作
89
+ 3. Prompt 质量 = 视频质量 — 必须打印给用户,用户可能修改
90
+ 4. 永远不覆盖文件 — 所有产物版本化命名,保留完整迭代历史
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 项目目录与文件管理
96
+
97
+ 所有产物保存在 `gen-output/video-clone/{project}/`,`{project}` 由产品名或任务简称命名(如 `fishing-scale`、`car-creeper`)。
98
+
99
+ ### 新任务 vs 修改已有任务
100
+
101
+ ```
102
+ "帮我复刻这个视频" + 新产品图 → ls gen-output/video-clone/ → 新建 {project}/ 目录
103
+ "帮我做另一个视频" + 新素材 → 新建 {project}/ 目录
104
+ "换个首帧试试" / "prompt 改一下" → 继续当前 {project}/ 目录,v{N}+1
105
+ "上次那个电子秤视频再改改" → 进入已有 fishing-scale/ 目录,读 log.md 续接
106
+ ```
107
+
108
+ **判断逻辑**:有新源视频或新产品 → 新目录;改 prompt/换 seed/重跑 → 同目录递增版本。
109
+
110
+ ### 目录结构
111
+
112
+ ```
113
+ gen-output/video-clone/{project}/
114
+ ├── source/ ← 源素材(只读)
115
+ │ ├── source_video.mp4
116
+ │ └── product.jpg
117
+ ├── frames/ ← 抽帧 + 编辑首帧(版本化)
118
+ │ ├── source_t15.0s.jpg ← 选中的源帧
119
+ │ ├── frame_v1_s42.png ← 首帧编辑 v1(seed=42)
120
+ │ ├── frame_v2_s43.png ← 首帧编辑 v2(seed=43)
121
+ │ ├── scene1_frame_v1_s42.png ← [多片段] 场景1首帧
122
+ │ └── grid.jpg ← 帧网格
123
+ ├── videos/ ← 视频产物(版本化)
124
+ │ ├── video_v1_10s.mp4 ← 视频 v1
125
+ │ ├── video_v2_10s.mp4 ← 视频 v2(改了prompt)
126
+ │ ├── scene1_v1_5s.mp4 ← [多片段] 场景1视频
127
+ │ └── final_v2.mp4 ← 最终交付版本
128
+ ├── prompt.md ← 当前 prompt(用户可直接编辑)
129
+ └── log.md ← 迭代日志(版本历史 + 用户反馈)
130
+ ```
131
+
132
+ ### 命名规则
133
+
134
+ - 首帧:`frame_v{N}_s{seed}.png`,多片段加前缀 `scene{M}_`
135
+ - 视频:`video_v{N}_{duration}s.mp4`,多片段 `scene{M}_v{N}_{duration}s.mp4`
136
+ - 最终:`final_v{N}.mp4`(指向最终采用的版本)
137
+ - **v{N} 递增,绝不覆盖**
138
+
139
+ ### prompt.md(当前 prompt,用户可直接编辑)
140
+
141
+ Claude 分析后写入,用户确认或修改后,Phase 3 从此文件读取 prompt 生成视频。
142
+
143
+ ```markdown
144
+ # fishing-scale — Prompt
145
+
146
+ ### 视觉风格
147
+ 竖屏手持vlog,自然饱和色彩,明亮日光,无滤镜,纪实感。
148
+
149
+ ### 场景叙述
150
+ 阳光白天,戴眼镜、深蓝头巾、黑色运动上衣的女子跪坐沙滩...
151
+
152
+ ### 摄影技术
153
+ ...
154
+
155
+ ### 动作清单
156
+ ...
157
+
158
+ ### 对话
159
+ ...
160
+
161
+ ### 背景声音
162
+ ...
163
+ ```
164
+
165
+ **prompt.md 工作流**:
166
+ 1. Claude 分析 → 写入 prompt.md → 打印给用户
167
+ 2. 用户说"OK" → 直接用;用户说"改一下动作" → 用户自行编辑 prompt.md 或告诉 Claude 改
168
+ 3. Phase 3 从 prompt.md 读取生成视频
169
+ 4. 需要重跑时:修改 prompt.md → 旧版本自动记录到 log.md
170
+
171
+ ### 迭代日志(log.md)
172
+
173
+ 记录每次迭代的版本快照。**不存完整 prompt**(prompt.md 是唯一来源),只记变更摘要。
174
+
175
+ ```markdown
176
+ # fishing-scale — Video Clone Log
177
+ Created: 2026-04-10 14:30
178
+
179
+ ## v1 — 2026-04-10 14:30
180
+ - **首帧**: frame_v1_s42.png ✅ 用户确认
181
+ - **Prompt**: 初始版本(见 prompt.md)
182
+ - **视频**: video_v1_10s.mp4
183
+ - **结果**: 手部变形,用户要求改 prompt
184
+
185
+ ## v2 — 2026-04-10 15:10
186
+ - **首帧**: 复用 v1(frame_v1_s42.png)
187
+ - **Prompt 修改**: 动作清单删除"举起电子秤",改为"手指轻触电子秤"
188
+ - **视频**: video_v2_10s.mp4
189
+ - **结果**: ✅ 用户满意 → final_v2.mp4
190
+ ```
191
+
192
+ **日志规则**:
193
+ - 首帧没变就写"复用 vX",变了就写新文件名
194
+ - Prompt 修改只记差异摘要(完整内容始终在 prompt.md)
195
+ - 结果必须记录用户反馈(满意/不满意+原因)
196
+ - 跨会话续接时,先读 log.md 获取上次版本号,再读 prompt.md 获取当前 prompt
197
+
198
+ ---
199
+
200
+ ## Pipeline 总览
201
+
202
+ ```
203
+ 单片段:源视频 → 分析 → gen image 首帧编辑 → I2V → 后处理 → 成品
204
+ 多片段:源视频 → 场景拆分 → 每段 gen image 首帧 → 每段 I2V → 拼接 → 成品
205
+ 纯生成:图片 → prompt → gen video(无音频) 或 Kling(有音频) → 成品
206
+ ```
207
+
208
+ ## 工具分工
209
+
210
+ | 工具 | 职责 |
211
+ |------|------|
212
+ | **Claude Opus** | 逐帧分析 → 中文 6 段 prompt;纯生成时根据用户描述编写 prompt |
213
+ | **gen image** | 首帧编辑(多图输入:`-i 源帧 -i 产品图`)|
214
+ | **gen video** | Wan 2.6 I2V(不需要音频时)|
215
+ | **Kling 3.0**(PiAPI) | I2V(需要音频时,口型同步)|
216
+ | **ffmpeg** | 抽帧、场景拆分、后处理、拼接 |
217
+
218
+ ---
219
+
220
+ ## Phase 1: 预处理与分析
221
+
222
+ ### 1.1 场景拆分
223
+
224
+ ```bash
225
+ ffprobe -v quiet -print_format json -show_format -show_streams source_video.mp4
226
+ ffmpeg -i source_video.mp4 -vf "select='gt(scene,0.3)',showinfo" -vsync vfr -f null -
227
+ ```
228
+
229
+ 切换点 ≤1 → 单片段 | ≥2 → 多片段(过滤 <0.5s 片段)
230
+
231
+ ### 1.2 抽帧 + 帧网格
232
+
233
+ **单片段**:等间距抽 10 帧 → 5×2 网格。
234
+ **多片段**:每段 3-10 帧 → 每段网格 + 总网格。标注时间戳。
235
+
236
+ ### 1.3 Claude Opus 分析(核心)
237
+
238
+ 将所有帧 + 产品图分析,输出**中文 6 段 motion prompt**(格式见 Phase 3.3)。
239
+
240
+ - 逐帧看清动作序列(哪只手做什么)
241
+ - 精确描述产品外观(颜色/形状/特征,从产品图提取)
242
+ - 精确描述背景和光线(从源帧提取)
243
+
244
+ **⚠️ 必须打印给用户。用户可能修改场景/人物/动作。**
245
+
246
+ ### 1.4 首帧选择(自动,不需要用户确认)
247
+
248
+ 从全视频自动选:产品最清晰 + 手部最自然 + 占比适中 + 面部清晰。
249
+
250
+ ---
251
+
252
+ ## Phase 2: 首帧编辑
253
+
254
+ ### 单片段:gen image 双图编辑
255
+
256
+ ```bash
257
+ gen image "Keep this exact same scene, same [人物特征], same [场景]. \
258
+ Replace ONLY the [原物品] with [新产品] from the reference image. \
259
+ [产品颜色+形状+特征]. Photorealistic, natural." \
260
+ -i source_frame.jpg -i product.jpg \
261
+ -W 576 -H 1024 -s 42 \
262
+ -o gen-output/video-clone/{project}/frames/frame_v1_s42.png
263
+ Read gen-output/video-clone/{project}/frames/frame_v1_s42.png
264
+ # 不满意 → 换 seed: frame_v2_s43.png,绝不覆盖 v1
265
+ ```
266
+
267
+ ### 多片段:gen image 产品参考生成(仅 -i 产品图)
268
+
269
+ 每段独立生成首帧,不用源帧,只用产品图作参考。
270
+
271
+ ```bash
272
+ gen image "[人物描述] [动作] [产品描述: the red MaxWorks creeper from \
273
+ the reference image - 颜色/logo/特征] [场景] Vertical 9:16. Photorealistic." \
274
+ -i product.jpg \
275
+ -W 576 -H 1024 -s 42 \
276
+ -o gen-output/video-clone/{project}/frames/scene1_frame_v1_s42.png
277
+ Read gen-output/video-clone/{project}/frames/scene1_frame_v1_s42.png
278
+ ```
279
+
280
+ ⚠️ 每段 prompt 中产品描述重复(防遗忘),人物外貌跨段一致
281
+
282
+ ### 首帧质检(展示给用户确认)
283
+
284
+ ```
285
+ □ 产品清晰? □ 位置自然? □ 人物保持? □ 背景一致?
286
+ 不合格 → 换 seed(-s 43) → 调 prompt → 重新确认
287
+ ```
288
+
289
+ ---
290
+
291
+ ## Phase 3: I2V 视频生成
292
+
293
+ ### 3.1 模型选择(内部逻辑,对用户只显示 "视频生成中...")
294
+
295
+ | 场景 | 工具 | 音频 |
296
+ |------|------|------|
297
+ | 复刻(默认) | Kling 3.0 API | 有(口型同步) |
298
+ | 纯生成 + 需要音频 | Kling 3.0 API | 有 |
299
+ | 纯生成 + 不需要音频 | gen video | 无 |
300
+
301
+ ### 3.2 gen video(Wan 2.6,不需要音频时)
302
+
303
+ ```bash
304
+ gen video gen-output/video-clone/{project}/frames/frame_v1_s42.png \
305
+ --prompt "motion description..." \
306
+ -d 10 -r 1080P --no-audio \
307
+ -o gen-output/video-clone/{project}/videos/video_v1_10s.mp4
308
+ Read gen-output/video-clone/{project}/videos/video_v1_10s.mp4
309
+ # 重跑 → video_v2_10s.mp4,绝不覆盖
310
+ ```
311
+
312
+ ### 3.3 Kling 3.0 API(需要音频时)
313
+
314
+ **Step 1: 上传首帧获取公开 URL**(Kling 不接受 base64,需要 URL)
315
+
316
+ ```python
317
+ import requests, base64
318
+
319
+ img_b64 = base64.b64encode(open('edited_frame.png', 'rb').read()).decode()
320
+ resp = requests.post('https://freeimage.host/api/1/upload', data={
321
+ 'key': '6d207e02198a847aa98d0a2a901485a5',
322
+ 'action': 'upload',
323
+ 'source': img_b64,
324
+ 'format': 'json',
325
+ })
326
+ img_url = resp.json()['image']['url']
327
+ # ⚠️ catbox.moe 不可用(PiAPI 服务器访问不了)
328
+ ```
329
+
330
+ **Step 2: 提交生成任务**
331
+
332
+ ```python
333
+ resp = requests.post('https://api.piapi.ai/api/v1/task',
334
+ headers={'x-api-key': PIAPI_KEY, 'Content-Type': 'application/json'},
335
+ json={
336
+ 'model': 'kling',
337
+ 'task_type': 'video_generation',
338
+ 'input': {
339
+ 'prompt': motion_prompt,
340
+ 'negative_prompt': 'slow motion, dreamy, ethereal, cinematic, blurry, '
341
+ 'distorted, deformed hands, extra fingers',
342
+ 'image_url': img_url,
343
+ 'duration': 10, # 或 5(多片段时)
344
+ 'aspect_ratio': '9:16',
345
+ 'mode': 'std', # 720p
346
+ 'version': '3.0',
347
+ 'cfg_scale': 0.5, # ⚠️ 必须 float!
348
+ 'enable_audio': True,
349
+ },
350
+ 'config': {'service_mode': 'public'},
351
+ }, timeout=60)
352
+ task_id = resp.json()['data']['task_id']
353
+ ```
354
+
355
+ **Step 3: 轮询等待完成**
356
+
357
+ ```python
358
+ import time
359
+ while True:
360
+ r = requests.get(f'https://api.piapi.ai/api/v1/task/{task_id}',
361
+ headers={'x-api-key': PIAPI_KEY})
362
+ d = r.json().get('data', {})
363
+ status = d.get('status', '')
364
+ if status == 'completed': # ⚠️ 小写!
365
+ video_url = d['output']['video'] # ⚠️ 3.0 用 video,2.6 用 video_url
366
+ break
367
+ if status == 'failed':
368
+ raise RuntimeError(d.get('error', {}))
369
+ time.sleep(15)
370
+ ```
371
+
372
+ **Step 4: 下载视频**(CDN 不稳定需重试)
373
+
374
+ ```python
375
+ for attempt in range(3):
376
+ try:
377
+ data = requests.get(video_url, timeout=300).content
378
+ open('gen-output/video-clone/{project}/videos/video_v1_10s.mp4', 'wb').write(data)
379
+ break
380
+ # 重跑 → video_v2_10s.mp4,绝不覆盖
381
+ except Exception:
382
+ time.sleep(5)
383
+ ```
384
+
385
+ ### 3.4 Motion Prompt(中文 6 段模板)
386
+
387
+ **复刻时**:Claude Opus 分析源帧后生成。**纯生成时**:Claude 根据用户描述编写。
388
+ 两种都写入 `prompt.md` 并打印给用户,用户可直接编辑文件。Phase 3 从 `prompt.md` 读取。
389
+
390
+ ```
391
+ ### 视觉风格
392
+ [拍摄设备感 + 画面质感 + 色彩方案 + 光线 + 氛围]
393
+
394
+ ### 场景叙述
395
+ [时间地点 + 人物外貌 + 产品描述(重复颜色/特征) + 背景环境]
396
+
397
+ ### 摄影技术
398
+ [景别 + 运镜 + 焦段 + 景深 + 光线] 情绪:[...]
399
+
400
+ ### 动作清单
401
+ - [时间顺序,精确到哪只手]
402
+ - [产品交互,避免复杂手部操作]
403
+
404
+ ### 对话
405
+ - [语言和风格]
406
+
407
+ ### 背景声音
408
+ - [环境音 + 人声 + 无背景音乐]
409
+ ```
410
+
411
+ **Anti-AI**(摄影技术段融入):手持拍摄/轻微晃动/自然光/无滤镜/纪实感
412
+ **禁用词**:梦幻/空灵/电影感/慢动作/丝滑/优雅
413
+
414
+ ---
415
+
416
+ ## Phase 4: 后处理
417
+
418
+ ### 单片段
419
+
420
+ ```bash
421
+ # video_v{N} → final_v{N}
422
+ ffmpeg -y -i gen-output/video-clone/{project}/videos/video_v1_10s.mp4 \
423
+ -r 30 -c:v libx264 -crf 18 -c:a aac -b:a 192k \
424
+ gen-output/video-clone/{project}/videos/final_v1.mp4
425
+ ```
426
+
427
+ ### 多片段
428
+
429
+ ```bash
430
+ # 标准化每个 clip
431
+ ffmpeg -y -i gen-output/video-clone/{project}/videos/scene1_v1_5s.mp4 \
432
+ -vf scale=720:1280 -r 30 -c:v libx264 -crf 18 -c:a aac -b:a 128k scene1_norm.mp4
433
+
434
+ # 拼接 → final_v{N}
435
+ echo "file 'scene1_norm.mp4'
436
+ file 'scene2_norm.mp4'" > concat_list.txt
437
+ ffmpeg -y -f concat -safe 0 -i concat_list.txt -c:v libx264 -crf 18 -c:a aac -b:a 192k \
438
+ gen-output/video-clone/{project}/videos/final_v1.mp4
439
+ ```
440
+
441
+ **⚠️ Kling 音频口型同步,必须保留,不要用源视频音频替换。**
442
+
443
+ ### 质检
444
+
445
+ ```
446
+ □ 产品可辨? □ 手部自然? □ 物理正确? □ 人脸稳定? □ 背景一致? □ 音频正常?
447
+ □ [多片段] 过渡自然?产品跨段一致?
448
+ 不合格 → 调 prompt / 换 seed 重跑(可只重跑问题片段)
449
+ ```
450
+
451
+ ---
452
+
453
+ ## Red Flags
454
+
455
+ | ❌ 你在想... | ✅ 应该做的 |
456
+ |---|---|
457
+ | 直接取 t=1s 当首帧 | 自动选产品最清晰的帧 |
458
+ | prompt 随便写一句话 | 中文 6 段结构化模板 |
459
+ | prompt 不给用户看 | 必须打印,用户可能修改 |
460
+ | 告诉用户模型名称 | 只说 "视频生成中..." |
461
+ | 用源视频音频替换 Kling 音频 | Kling 音频口型同步,必须保留 |
462
+ | cfg_scale 传 string | 必须 float(string → 500) |
463
+ | 描述复杂手部操作 | 产品静止,人做简单动作 |
464
+ | prompt 超 2500 字符 | 精简到 1200-2000 |
465
+ | 用 catbox.moe 托管图片 | 用 freeimage.host |
466
+ | 本地直接调 API | 通过服务器中转 |
467
+ | 覆盖之前生成的文件 | v{N} 递增命名,保留全部历史 |
468
+ | 不写 log.md | 每次操作必须追加日志 |
469
+
470
+ ---
471
+
472
+ ## 已知限制
473
+
474
+ - **单段最长 10s**:多段需拼接
475
+ - **动作模型自编**:不还原源视频动作序列,等 Kling Omni video reference
476
+ - **PiAPI CDN 不稳定**:3 次重试 + 流式下载
477
+
478
+ ## 实战参考
479
+
480
+ **demo1 沙滩电子秤**:t=1s 无产品→失败,改 t=15s→完美。首帧选择 + prompt 质量 >> 一切。
481
+
482
+ **demo2 汽车躺板-单片段**:PiAPI FLUX 单图+一句话=⭐⭐,BFL FLUX-PRO 双图+6段 prompt=⭐⭐⭐⭐⭐。
483
+
484
+ **demo3 汽车躺板-多片段**:18s 源视频 4 场景 → 拆分 → 每段 gen image + Kling 5s → 拼接 20s。关键:产品描述跨段一致。
485
+
486
+ ## 重要提醒
487
+
488
+ 1. **BFL 轮询 "Task not found"** 持续约 60s,正常,继续轮询
489
+ 2. **Kling enable_audio 只有 3.0 支持**
490
+ 3. **Kling 状态小写 "completed"**,输出字段 `output.video`(3.0)
491
+ 4. **国内网络通过服务器中转** API,本地大 payload 会断连
492
+ 5. **freeimage.host key**: `6d207e02198a847aa98d0a2a901485a5`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optima-chat/optima-agent",
3
- "version": "0.8.87",
3
+ "version": "0.8.89",
4
4
  "description": "基于 Claude Agent SDK 的电商运营 AI 助手",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",