@optima-chat/optima-agent 0.9.7 → 0.9.9
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.
- package/.claude/settings.local.json +166 -0
- package/.claude/skills/gen/SKILL.md +5 -1
- package/.claude/skills/multigrid-poster/SKILL.md +192 -0
- package/.claude/skills/multigrid-poster/layouts/2x2.json +34 -0
- package/.claude/skills/multigrid-poster/layouts/3x3.json +43 -0
- package/.claude/skills/multigrid-poster/scripts/compose.py +116 -0
- package/.claude/skills/multigrid-poster/scripts/placeholder.png +0 -0
- package/.claude/skills/multigrid-poster/shared/fonts/MaShanZheng-Regular.ttf +0 -0
- package/.claude/skills/scout/SKILL.md +136 -23
- package/.claude/skills/video-gen/SKILL.md +56 -79
- package/dist/bin/bi-cli.js +0 -0
- package/dist/bin/browser-cli.js +0 -0
- package/dist/bin/comfy.d.ts +3 -0
- package/dist/bin/comfy.d.ts.map +1 -0
- package/dist/bin/comfy.js +3 -0
- package/dist/bin/comfy.js.map +1 -0
- package/dist/bin/commerce.js +0 -0
- package/dist/bin/gen.js +0 -0
- package/dist/bin/google-ads.js +0 -0
- package/dist/bin/growth.d.ts +3 -0
- package/dist/bin/growth.d.ts.map +1 -0
- package/dist/bin/growth.js +3 -0
- package/dist/bin/growth.js.map +1 -0
- package/dist/bin/logistics.js +0 -0
- package/dist/bin/optima.js +0 -0
- package/dist/bin/scout.js +0 -0
- package/dist/bin/sentinel.js +0 -0
- package/dist/bin/shopify.js +0 -0
- package/dist/src/hooks-loader.d.ts +6 -0
- package/dist/src/hooks-loader.d.ts.map +1 -0
- package/dist/src/hooks-loader.js +215 -0
- package/dist/src/hooks-loader.js.map +1 -0
- package/dist/src/system-prompt.d.ts.map +1 -1
- package/dist/src/system-prompt.js +4 -0
- package/dist/src/system-prompt.js.map +1 -1
- package/dist/src/ui/App.d.ts +6 -0
- package/dist/src/ui/App.d.ts.map +1 -0
- package/dist/src/ui/App.js +164 -0
- package/dist/src/ui/App.js.map +1 -0
- package/dist/src/ui/components/Composer.d.ts +10 -0
- package/dist/src/ui/components/Composer.d.ts.map +1 -0
- package/dist/src/ui/components/Composer.js +13 -0
- package/dist/src/ui/components/Composer.js.map +1 -0
- package/dist/src/ui/components/Header.d.ts +7 -0
- package/dist/src/ui/components/Header.d.ts.map +1 -0
- package/dist/src/ui/components/Header.js +7 -0
- package/dist/src/ui/components/Header.js.map +1 -0
- package/dist/src/ui/components/Message.d.ts +12 -0
- package/dist/src/ui/components/Message.d.ts.map +1 -0
- package/dist/src/ui/components/Message.js +21 -0
- package/dist/src/ui/components/Message.js.map +1 -0
- package/dist/src/ui/components/MessageList.d.ts +9 -0
- package/dist/src/ui/components/MessageList.d.ts.map +1 -0
- package/dist/src/ui/components/MessageList.js +18 -0
- package/dist/src/ui/components/MessageList.js.map +1 -0
- package/dist/src/ui/components/Spinner.d.ts +6 -0
- package/dist/src/ui/components/Spinner.d.ts.map +1 -0
- package/dist/src/ui/components/Spinner.js +7 -0
- package/dist/src/ui/components/Spinner.js.map +1 -0
- package/dist/src/ui/components/StatusBar.d.ts +11 -0
- package/dist/src/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/src/ui/components/StatusBar.js +7 -0
- package/dist/src/ui/components/StatusBar.js.map +1 -0
- package/dist/src/ui/components/index.d.ts +7 -0
- package/dist/src/ui/components/index.d.ts.map +1 -0
- package/dist/src/ui/components/index.js +7 -0
- package/dist/src/ui/components/index.js.map +1 -0
- package/dist/src/validation/error-formatter.d.ts +21 -0
- package/dist/src/validation/error-formatter.d.ts.map +1 -0
- package/dist/src/validation/error-formatter.js +98 -0
- package/dist/src/validation/error-formatter.js.map +1 -0
- package/dist/src/validation/index.d.ts +10 -0
- package/dist/src/validation/index.d.ts.map +1 -0
- package/dist/src/validation/index.js +10 -0
- package/dist/src/validation/index.js.map +1 -0
- package/dist/src/validation/json-validator.d.ts +25 -0
- package/dist/src/validation/json-validator.d.ts.map +1 -0
- package/dist/src/validation/json-validator.js +173 -0
- package/dist/src/validation/json-validator.js.map +1 -0
- package/dist/src/validation/schema.d.ts +353 -0
- package/dist/src/validation/schema.d.ts.map +1 -0
- package/dist/src/validation/schema.js +57 -0
- package/dist/src/validation/schema.js.map +1 -0
- package/dist/src/validation/suggestions.d.ts +25 -0
- package/dist/src/validation/suggestions.d.ts.map +1 -0
- package/dist/src/validation/suggestions.js +144 -0
- package/dist/src/validation/suggestions.js.map +1 -0
- package/dist/src/validation/types.d.ts +40 -0
- package/dist/src/validation/types.d.ts.map +1 -0
- package/dist/src/validation/types.js +5 -0
- package/dist/src/validation/types.js.map +1 -0
- package/dist/src/validation/yaml-validator.d.ts +25 -0
- package/dist/src/validation/yaml-validator.d.ts.map +1 -0
- package/dist/src/validation/yaml-validator.js +177 -0
- package/dist/src/validation/yaml-validator.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: scout
|
|
3
|
-
description: "Interactive Amazon product research consultant with 1688 supplier sourcing. Search products, analyze markets, find suppliers (by keyword or image), and generate professional reports. ALWAYS use when user asks about: selling products (卖/开店), product ideas (产品/商品), market research (市场/竞品), suppliers (供应商/厂家), sourcing (采购/进货/货源), image search (图片找货/以图搜货/找同款), evaluating business opportunities (生意/创业)
|
|
3
|
+
description: "Interactive Amazon product research consultant with 1688 supplier sourcing and Keepa historical data. Search products, analyze markets, find suppliers (by keyword or image), track price/BSR history, and generate professional reports. ALWAYS use when user asks about: selling products (卖/开店), product ideas (产品/商品), market research (市场/竞品), suppliers (供应商/厂家), sourcing (采购/进货/货源), image search (图片找货/以图搜货/找同款), evaluating business opportunities (生意/创业), product trends (趋势/走势), price history (价格历史/价格变化), BSR ranking (排名/销量排名), product lifecycle (生命周期/增长期/衰退期). Uses 'scout search', 'scout product', 'scout keepa *', 'scout supplier-search', and 'scout supplier-search-image' commands."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Optima Scout - AI Product Research
|
|
@@ -193,6 +193,95 @@ scout supplier-search-image "IMAGE_URL" --limit NUMBER
|
|
|
193
193
|
- If image is inaccessible (404, expired, auth-required), will return helpful error message
|
|
194
194
|
- **Best practice**: Try both image and keyword search for comprehensive results
|
|
195
195
|
|
|
196
|
+
### 历史数据(Keepa API)
|
|
197
|
+
|
|
198
|
+
#### `scout keepa product` — 产品历史数据(核心命令)
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
scout keepa product B09V3KXJPB # 默认 90 天统计
|
|
202
|
+
scout keepa product B09V3KXJPB --stats 180 # 180 天统计
|
|
203
|
+
scout keepa product B09V3KXJPB --buybox --rating # 含 BuyBox 和评分历史
|
|
204
|
+
scout keepa product B09V3KXJPB,B0D4J2QLCR # 批量查询(逗号分隔,最多100)
|
|
205
|
+
scout keepa product B09V3KXJPB --domain amazon.de # 指定站点
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
返回(关键字段):
|
|
209
|
+
- **stats.current[3]** — 当前 BSR
|
|
210
|
+
- **stats.salesRankDrops30/90** — 30/90 天 BSR 下降次数 ≈ 出单次数
|
|
211
|
+
- **stats.outOfStockPercentage30** — 30 天断货率
|
|
212
|
+
- **csv[0]** — Amazon 自营价格历史
|
|
213
|
+
- **csv[1]** — 第三方新品价格历史
|
|
214
|
+
- **csv[3]** — BSR 排名历史
|
|
215
|
+
- **csv[11]** — 在售卖家数量历史(COUNT_NEW)
|
|
216
|
+
- **csv[16]** — 评分历史
|
|
217
|
+
- **csv[17]** — 评论数历史
|
|
218
|
+
|
|
219
|
+
价格单位:美分(÷100 得美元)。评分:×10(45 = 4.5 星)。
|
|
220
|
+
|
|
221
|
+
**When to use:** 在 `scout product` 获取实时数据后,用 `scout keepa product` 拉历史数据判断趋势和生命周期。
|
|
222
|
+
|
|
223
|
+
#### `scout keepa search` — Product Finder(按条件筛选全库)
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# 找 BSR < 1万、评论 < 500、价格 $20-50 的新机会
|
|
227
|
+
# 注意:currentRange 单位是美分,$20-50 = [2000,5000]
|
|
228
|
+
scout keepa search '{"salesRankRange":[1,10000],"avg90_COUNT_REVIEWS_lte":500,"currentRange":[2000,5000]}'
|
|
229
|
+
|
|
230
|
+
# 找特定品牌
|
|
231
|
+
scout keepa search '{"brand":"Apple","salesRankRange":[1,50000]}' --per-page 10
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
返回:符合条件的 ASIN 列表。selection 支持几百个筛选条件。
|
|
235
|
+
|
|
236
|
+
#### `scout keepa bestsellers` — 品类热卖榜
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
scout keepa bestsellers 172282 # Electronics 品类
|
|
240
|
+
scout keepa bestsellers 172282 --range 90 # 90 天平均排名
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
返回:品类 top ASIN 列表(根类目最多 10 万个)。先用 `scout keepa category 0` 获取品类 ID。
|
|
244
|
+
|
|
245
|
+
#### `scout keepa category` — 品类树
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
scout keepa category 0 # 所有根类目(拿品类 ID)
|
|
249
|
+
scout keepa category 172282 # Electronics 子类目
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### `scout keepa seller` — 卖家画像
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
scout keepa seller ATVPDKIKX0DER # Amazon.com 自己
|
|
256
|
+
scout keepa seller A2R2RITDJNW1Q6 --storefront # 含店铺全部 ASIN
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
返回:卖家名称、评分、店铺 ASIN 总数。
|
|
260
|
+
|
|
261
|
+
#### `scout keepa deals` — 降价商品监控
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
scout keepa deals # 默认 BuyBox 降价
|
|
265
|
+
scout keepa deals --category 172282 # Electronics 品类降价
|
|
266
|
+
scout keepa deals --title "wireless earbuds" # 按标题搜索
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
返回:最近降价的商品列表(ASIN、标题、当前价、降幅)。
|
|
270
|
+
|
|
271
|
+
#### `scout keepa graph` — 价格走势图
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
scout keepa graph B09V3KXJPB -o price-chart.png
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
返回:Keepa 价格走势 PNG 图片。
|
|
278
|
+
|
|
279
|
+
#### `scout keepa tokens` — API 余额
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
scout keepa tokens
|
|
283
|
+
```
|
|
284
|
+
|
|
196
285
|
## Research Workflow
|
|
197
286
|
|
|
198
287
|
### Interactive Research Flow (Recommended):
|
|
@@ -204,32 +293,37 @@ scout supplier-search-image "IMAGE_URL" --limit NUMBER
|
|
|
204
293
|
|
|
205
294
|
**Phase 2: Deep Dive & Refinement**
|
|
206
295
|
4. **Targeted Analysis** → Based on user feedback, run `scout product` on relevant ASINs
|
|
207
|
-
5. **
|
|
208
|
-
6. **
|
|
296
|
+
5. **Historical Trend Analysis** → Run `scout keepa product ASIN1,ASIN2,ASIN3 --stats 180` to get historical data
|
|
297
|
+
6. **Extract Insights** → Combine realtime + historical data:
|
|
298
|
+
- BSR trend → 增长期/成熟期/衰退期?
|
|
299
|
+
- `salesRankDrops30/90` → 估算月销量
|
|
300
|
+
- 价格历史 → 利润空间稳定吗?有价格战吗?
|
|
301
|
+
- 卖家数量变化 → 竞争在加剧吗?
|
|
302
|
+
7. **Iterate & Explore** → User may request different keywords, specific competitor analysis, or alternative product categories
|
|
209
303
|
|
|
210
304
|
**Phase 2.5: Supplier Sourcing (Optional but Recommended)**
|
|
211
|
-
|
|
305
|
+
8. **Trigger**: User shows interest in costs/sourcing, or after market validation
|
|
212
306
|
- "成本大概多少?" "批发价怎么样?" "利润空间大吗?"
|
|
213
307
|
- "哪里进货?" "供应商怎么找?"
|
|
214
308
|
- "这个图片能找到货源吗?" "Amazon这个能在1688找到吗?"
|
|
215
309
|
|
|
216
|
-
|
|
310
|
+
9. **Choose search method**:
|
|
217
311
|
- **With image**: `scout supplier-search-image "https://..."` ← More accurate for visual products
|
|
218
312
|
- **With keyword**: `scout supplier-search "产品关键词"`
|
|
219
313
|
- **Best practice**: Try both and compare results
|
|
220
314
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
315
|
+
10. **Share Findings**:
|
|
316
|
+
- Wholesale price range (e.g., ¥429-599)
|
|
317
|
+
- MOQ (minimum order quantity)
|
|
318
|
+
- Profit margin calculation: Amazon price ($60-80) - 1688 cost (¥429 ≈ $60) - shipping ($10-15)
|
|
319
|
+
- Supplier quality indicators (years in business, certifications)
|
|
226
320
|
|
|
227
|
-
|
|
321
|
+
11. **Ask**: "要不要我详细分析几个供应商?" or proceed to report
|
|
228
322
|
|
|
229
323
|
**Phase 3: Report Generation (Proactive Suggestion)**
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
324
|
+
12. **Gauge Completion** → After sufficient data, suggest: "要不要我整理成一份完整的市场分析报告?"
|
|
325
|
+
13. **Generate Report** → Create comprehensive markdown report with all findings
|
|
326
|
+
14. **Save & Iterate** → Offer to save report and refine based on feedback
|
|
233
327
|
|
|
234
328
|
---
|
|
235
329
|
|
|
@@ -238,8 +332,9 @@ scout supplier-search-image "IMAGE_URL" --limit NUMBER
|
|
|
238
332
|
When user explicitly requests a report upfront:
|
|
239
333
|
1. Run 3-4 diverse keyword searches
|
|
240
334
|
2. Analyze top 3-5 products with `scout product`
|
|
241
|
-
3.
|
|
242
|
-
4.
|
|
335
|
+
3. Pull historical trends with `scout keepa product` (batch ASINs)
|
|
336
|
+
4. Search 1688 suppliers (image + keyword)
|
|
337
|
+
5. Generate comprehensive report directly
|
|
243
338
|
|
|
244
339
|
### Multi-Keyword Research Strategy
|
|
245
340
|
|
|
@@ -268,12 +363,14 @@ scout search "titanium tumbler" --limit 10
|
|
|
268
363
|
3. User: "中高端的,质量好的"
|
|
269
364
|
4. Run `scout product` on 3 representative ASINs (B0CTKWJDXX, B0DNCMN3NX, B083NLR6BF)
|
|
270
365
|
5. Share: "TOAKS中端爆款BSR#530,月销250件,87%五星。用户最爱:超轻、品质好、无金属味。主要抱怨:散热快(无保温)。KOYASU高端保温$89.99,评论少但4.8分。保温款市场几乎空白!"
|
|
271
|
-
6.
|
|
272
|
-
7.
|
|
273
|
-
8.
|
|
274
|
-
9. Run `scout
|
|
275
|
-
10. Share: "
|
|
276
|
-
11.
|
|
366
|
+
6. Run `scout keepa product B0CTKWJDXX,B0DNCMN3NX,B083NLR6BF --stats 180` 拉历史数据
|
|
367
|
+
7. Share: "Keepa 历史数据显示:TOAKS 的 BSR 过去 6 个月持续走低(从#2000 降到#530),说明市场在增长。卖家数量从 3 个增到 8 个,竞争在加剧。价格近 6 个月稳定在 $25-28,没有价格战。保温款 KOYASU 的 BSR 波动大但整体下降趋势,说明刚起步有潜力。"
|
|
368
|
+
8. User: "好的,你看看"
|
|
369
|
+
9. Run `scout search "titanium tumbler"`
|
|
370
|
+
10. Share: "titanium tumbler竞品只5-6个,$60-110。现在查供应商成本?"
|
|
371
|
+
11. Run `scout supplier-search "钛合金保温杯"`
|
|
372
|
+
12. Share: "批发价区间:¥180-450(约$25-65),起订量多数50-100个。头部供应商:8年工厂,¥280批发价。**利润分析**:Amazon售价$70-90,1688成本¥280(约$40),运费+关税约$15,总成本约$55,**毛利率25-40%**。"
|
|
373
|
+
13. Suggest report generation
|
|
277
374
|
|
|
278
375
|
### Example 2: Image-Based Supplier Search
|
|
279
376
|
|
|
@@ -345,6 +442,21 @@ scout product B0788F3R8X
|
|
|
345
442
|
| BSR范围 | 1K-10K | 10K-50K | >50K |
|
|
346
443
|
| 进入难度 | 适中 | 需差异化 | 很难或需求不明 |
|
|
347
444
|
|
|
445
|
+
### 选品五要素(Keepa 历史数据驱动)
|
|
446
|
+
|
|
447
|
+
| 要素 | 数据来源 | 怎么判断 |
|
|
448
|
+
|------|---------|---------|
|
|
449
|
+
| **市场体量** | `salesRankDrops30/90` + BSR | drops 多 = 出单多 |
|
|
450
|
+
| **垄断程度** | `csv[11]` 卖家数量 + BuyBox | 卖家少且稳定 = 垄断 |
|
|
451
|
+
| **历史趋势** | `csv[3]` BSR 曲线 | 持续走低 = 增长期 |
|
|
452
|
+
| **所处阶段** | BSR 曲线形态 + 评论增速 | 增长/成熟/衰退 |
|
|
453
|
+
| **新品方向** | Product Finder 筛选低竞争品 | 评论少 + BSR 好 = 机会 |
|
|
454
|
+
|
|
455
|
+
**产品生命周期判断:**
|
|
456
|
+
- **增长期**:BSR 持续走低,评论数快速增长,卖家数量开始增加
|
|
457
|
+
- **成熟期**:BSR 平稳波动,评论数增速放缓,卖家数量稳定
|
|
458
|
+
- **衰退期**:BSR 持续走高,新评论减少,卖家数量下降或价格战
|
|
459
|
+
|
|
348
460
|
### Key Metrics
|
|
349
461
|
|
|
350
462
|
**BSR (Best Seller Rank):**
|
|
@@ -412,8 +524,9 @@ Low Demand:
|
|
|
412
524
|
**Report must include:**
|
|
413
525
|
- Executive Summary(核心结论前置:适合进入?风险是什么?)
|
|
414
526
|
- Market Analysis(基于搜索数据的市场概况)
|
|
527
|
+
- Historical Trend Analysis(基于 Keepa 数据的趋势分析:BSR 走势、价格稳定性、卖家数量变化、生命周期阶段判断)
|
|
415
528
|
- Competitor Deep-Dive(基于product details的竞品分析:BSR, rating breakdown, top reviews insights)
|
|
416
|
-
- Opportunity Assessment(SWOT
|
|
529
|
+
- Opportunity Assessment(SWOT 或机会/挑战分析,结合五要素框架)
|
|
417
530
|
- Entry Strategy(产品定位、定价、差异化策略)
|
|
418
531
|
- Supplier Analysis (if Phase 2.5 completed)(1688供应商、成本、利润空间)
|
|
419
532
|
|
|
@@ -12,7 +12,7 @@ description: "帮商家用 AI 生成产品视频(社媒投放 / 产品详情
|
|
|
12
12
|
优先级高于任何 pipeline 步骤。违反会导致泄漏、超支或数据丢失。
|
|
13
13
|
|
|
14
14
|
1. **User-facing 不出现模型名或服务名**
|
|
15
|
-
status / 成本 / 进度 / 错误 / 总结 统一用"
|
|
15
|
+
status / 成本 / 进度 / 错误 / 总结 统一用"视频生成中"。模型名仅用于 skill 内部路由,**代码注释里的也不能抄给用户**。
|
|
16
16
|
|
|
17
17
|
2. **花钱前必走 COST-GATE**
|
|
18
18
|
任何 `gen video` / `gen image` 调用之前必走一次成本确认(§执行生成)。**Fast-path、迭代、重试均无例外**。成本按秒估算:`Σ(seg.duration_s) × per_second_rate_usd[mode]`,rate 从所选模板的 `production_cost.per_second_rate_usd` 读取。rate 为 TBD 时成本前缀"~"明示粗估。
|
|
@@ -305,7 +305,7 @@ ffmpeg -i assets/reference.mp4 -vf "select='eq(n\,<FRAME_NUM>)'" -vsync 0 assets
|
|
|
305
305
|
| 1 | 0-1.5s | <内容> | <运镜> | <替换或"原创"> |
|
|
306
306
|
| ... |
|
|
307
307
|
|
|
308
|
-
>
|
|
308
|
+
> **段时长约束**:Storyboard 按叙事节奏自由分段(推荐 2-15s),不受 Sora2 时长限制。Production Plan 阶段会将多个短段合并为 10/15s 的 gen video 调用,再用 ffmpeg trim 切回各段时长。单段 >15s 必须拆段。段时长精度到 0.5s(3.73s 四舍五入到 3.5s)。
|
|
309
309
|
|
|
310
310
|
## Hook
|
|
311
311
|
<第 1 秒如何抓注意力>
|
|
@@ -329,63 +329,52 @@ ffmpeg -i assets/reference.mp4 -vf "select='eq(n\,<FRAME_NUM>)'" -vsync 0 assets
|
|
|
329
329
|
|
|
330
330
|
Storyboard 确认后自动推导。用户通常不改。
|
|
331
331
|
|
|
332
|
-
### 0.
|
|
332
|
+
### 0. 选策略
|
|
333
333
|
|
|
334
|
-
|
|
334
|
+
所有视频生成统一使用 Sora2(GrsAI),支持文生视频和图生视频。**Sora2 生成静音视频,音频需后期处理**(ffmpeg 叠 BGM / `gen tts` 配旁白)。
|
|
335
335
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
|
343
|
-
|
|
344
|
-
| 复刻 + 参考带音频,用户想保留原音频 | 强制高保真(标准模式对口型太差,叠原音会明显错位)| 高保真 | `--provider piapi` |
|
|
345
|
-
| 复刻 + 参考带音频,愿意重生音频 | 高保真(默认)| 高保真 | `--provider piapi` |
|
|
346
|
-
| 纯生成,未指定音频需求 | **问**:"需要音频吗?(人声 / 旁白 / 音效)" | ↓ | ↓ |
|
|
347
|
-
| → 需要人声 / 旁白 | 高保真 | 高保真 | `--provider piapi` |
|
|
348
|
-
| → 只要环境配音,不讲话 | 标准(便宜 ~10×,自动配音够用)| 标准 | *(默认)* |
|
|
349
|
-
| → 不要音频(后期自配 BGM)| 标准 + 无音频 | 标准 | `--no-audio` |
|
|
350
|
-
| 高度还原 / 严格对口型 / premium | 强制高保真(忽略音频决策)| 高保真 | `--provider piapi` |
|
|
351
|
-
| 用户明确说"便宜版" / "省 credits" | 标准 + 警告"对口型精度低"| 标准 | *(默认)* 或 `--no-audio` |
|
|
352
|
-
|
|
353
|
-
**Fast-path 集成**:Fast-path 不单独问音频,在 COST-GATE 里追加"含同步音频(对口型精度依模式而定),不需要可说'静音版'"。用户喊"静音版" → 回退标准模式 + `--no-audio`,重走 COST-GATE。
|
|
354
|
-
|
|
355
|
-
**冲突检测**:复刻场景 + 用户说"便宜版" → 不直接降级,先问:
|
|
356
|
-
|
|
357
|
-
> 复刻场景用标准模式对口型精度低,叠原音频会听起来错位。确认要降级吗?
|
|
336
|
+
| 特征 | 策略 |
|
|
337
|
+
|---|---|
|
|
338
|
+
| 1 镜头,无参考 | single-shot |
|
|
339
|
+
| 多镜头,无参考 | multi-shot-concat |
|
|
340
|
+
| 有参考,大致复刻 | clone-loose |
|
|
341
|
+
| 有参考,高度还原 | clone-strict |
|
|
342
|
+
| PDP 多卖点 | pdp-feature-concat |
|
|
343
|
+
| 人物讲话 | talking-head |
|
|
358
344
|
|
|
359
|
-
|
|
345
|
+
> **DashScope 回退**:如需 DashScope 特有功能(自动配音、负向提示词),可用 `--provider dashscope`,但仅支持图生视频,时长 5|10s。
|
|
360
346
|
|
|
361
|
-
|
|
362
|
-
|---|---|---|
|
|
363
|
-
| 1 镜头,无参考 | single-shot | 依 §0 |
|
|
364
|
-
| 多镜头,无参考 | multi-shot-concat | 依 §0 |
|
|
365
|
-
| 有参考,大致复刻 | clone-loose | 依 §0(含参考音频时强制高保真)|
|
|
366
|
-
| **有参考,高度还原** | **clone-strict** | **高保真(强制)** |
|
|
367
|
-
| PDP 多卖点 | pdp-feature-concat | 依 §0 |
|
|
368
|
-
| **人物讲话 + 严格对口型** | **talking-head** | **高保真(强制)** |
|
|
369
|
-
| 用户明确要 premium 质量 | 任一 + premium | 高保真(强制)|
|
|
347
|
+
### 1. 写 `videos/{id}/production-plan.md`
|
|
370
348
|
|
|
371
|
-
|
|
349
|
+
Sora2 仅支持 10 或 15 秒整段生成。Storyboard 的细粒度段需要在 Production Plan 中**合并为 gen video 调用单元**:
|
|
372
350
|
|
|
373
|
-
|
|
351
|
+
- 相邻短段(叙事连贯、同一场景)合并成一个 10s 或 15s 的 gen video 调用
|
|
352
|
+
- 每个调用的 prompt 合并覆盖所有子段的内容描述
|
|
353
|
+
- 生成后用 ffmpeg trim 切回各子段时长
|
|
354
|
+
- 单独一个 10s+ 的 storyboard 段直接映射为一个 gen video 调用
|
|
374
355
|
|
|
375
356
|
```markdown
|
|
376
357
|
# Production Plan
|
|
377
358
|
|
|
378
359
|
## 策略
|
|
379
360
|
<策略名>
|
|
380
|
-
模式: <标准 / 高保真>(依 §0 决策)
|
|
381
361
|
原因: <选择理由>
|
|
382
362
|
|
|
383
|
-
##
|
|
384
|
-
|
|
|
385
|
-
|
|
386
|
-
| 1 |
|
|
363
|
+
## 生成调用
|
|
364
|
+
| Call | 合并段 | gen_duration | seed | aspect_ratio | Prompt 摘要 |
|
|
365
|
+
|---|---|---|---|---|---|
|
|
366
|
+
| 1 | seg 1-3 (共 8s) | 10 | <seed 或 `-`> | <16:9 \| 9:16 \| 1:1> | <合并 prompt> |
|
|
367
|
+
| 2 | seg 4 (12s) | 15 | $PRODUCT_SEED | <同上> | <prompt> |
|
|
387
368
|
| ... |
|
|
388
369
|
|
|
370
|
+
## Trim 映射
|
|
371
|
+
| seg | 来源 Call | trim 区间 | 输出 |
|
|
372
|
+
|---|---|---|---|
|
|
373
|
+
| 1 | Call 1 | 0:00-2.5s | clips/seg-1.mp4 |
|
|
374
|
+
| 2 | Call 1 | 2.5-5.5s | clips/seg-2.mp4 |
|
|
375
|
+
| 3 | Call 1 | 5.5-8.0s | clips/seg-3.mp4 |
|
|
376
|
+
| 4 | Call 2 | 0:00-12.0s | clips/seg-4.mp4 |
|
|
377
|
+
|
|
389
378
|
**seed 规则**:同一产品的镜头(如 template PRODUCT_LOCK 指定的 #4/#5/#6/#9)**共用一个 seed**(任选一个固定整数记录下来)。PAIN / 场景段(如 #1/#2/#3)无产品时可填 `-`。
|
|
390
379
|
|
|
391
380
|
## 验收标准
|
|
@@ -395,11 +384,9 @@ Storyboard 确认后自动推导。用户通常不改。
|
|
|
395
384
|
- CTA: <从 Storyboard>
|
|
396
385
|
```
|
|
397
386
|
|
|
398
|
-
|
|
387
|
+
### 2. 为每个需 prompt 的步骤生成 `prompts/call-N.txt`
|
|
399
388
|
|
|
400
|
-
### 3.
|
|
401
|
-
|
|
402
|
-
### 4. `git commit -m "video: plan $VIDEO_ID — <strategy>"`
|
|
389
|
+
### 3. `git commit -m "video: plan $VIDEO_ID — <strategy>"`
|
|
403
390
|
|
|
404
391
|
## 执行生成
|
|
405
392
|
|
|
@@ -408,20 +395,16 @@ Storyboard 确认后自动推导。用户通常不改。
|
|
|
408
395
|
<COST-GATE>
|
|
409
396
|
**生成前成本确认(必做,包括 Fast-path)**:在执行任何 `gen video` / `gen image` 调用之前,必须向用户展示一次成本摘要:
|
|
410
397
|
|
|
411
|
-
> 即将生成 N 段视频(策略:
|
|
398
|
+
> 即将生成 N 段视频(策略: <策略名>),预计:
|
|
412
399
|
> - 调用次数: N 次 gen video + M 次 gen image(首帧编辑)
|
|
413
400
|
> - 总时长: <Σ seg.duration_s>s
|
|
414
401
|
> - 预估耗时: ~X 分钟
|
|
415
402
|
> - 预估成本: ~$Y(扣 Optima credits)
|
|
416
|
-
> - 音频: <含同步音频 / 无音频>
|
|
417
|
-
>
|
|
418
|
-
> <若高保真模式>不需要音频可说"静音版"降级到标准模式。</若高保真模式>
|
|
419
403
|
>
|
|
420
404
|
> 继续?
|
|
421
405
|
|
|
422
406
|
用户说"继续"/"好"/"OK" → 开始执行。
|
|
423
407
|
用户说"太贵"/"换个便宜的" → 回到 Production Plan,换策略(如 strict → loose)。
|
|
424
|
-
用户说"静音版" → 若当前高保真且非强制(clone-strict / talking-head / premium)则回退标准模式,重走 COST-GATE;否则告知冲突。
|
|
425
408
|
用户不回应超过合理时间 → 不执行,等用户。
|
|
426
409
|
|
|
427
410
|
**即使是 Fast-path 也必须走这一步。** 这是花钱步骤的唯一确认点。**迭代、重试同样无例外。**
|
|
@@ -443,30 +426,27 @@ Storyboard 确认后自动推导。用户通常不改。
|
|
|
443
426
|
**工具调用**:
|
|
444
427
|
|
|
445
428
|
```bash
|
|
446
|
-
#
|
|
429
|
+
# 图生视频(--duration 只能是 10 或 15)
|
|
447
430
|
gen video <input_image> \
|
|
448
|
-
--prompt "$(cat prompts/
|
|
449
|
-
--
|
|
450
|
-
--
|
|
451
|
-
--resolution <720P|1080P> \
|
|
431
|
+
--prompt "$(cat prompts/call-N.txt)" \
|
|
432
|
+
--duration <10|15> \
|
|
433
|
+
--aspect-ratio <16:9|9:16|1:1> \
|
|
452
434
|
--seed $PRODUCT_SEED \
|
|
453
|
-
|
|
454
|
-
-o clips/seg-<N>.mp4
|
|
435
|
+
-o clips/call-<N>.mp4
|
|
455
436
|
|
|
456
|
-
#
|
|
457
|
-
gen video
|
|
458
|
-
--prompt "$(cat prompts/
|
|
459
|
-
--
|
|
460
|
-
--
|
|
461
|
-
|
|
462
|
-
--seed $PRODUCT_SEED \
|
|
463
|
-
$AUDIO_FLAG \
|
|
464
|
-
-o clips/seg-<N>.mp4
|
|
437
|
+
# 纯文生视频(无输入图像)
|
|
438
|
+
gen video \
|
|
439
|
+
--prompt "$(cat prompts/call-N.txt)" \
|
|
440
|
+
--duration <10|15> \
|
|
441
|
+
--aspect-ratio <16:9|9:16|1:1> \
|
|
442
|
+
-o clips/call-<N>.mp4
|
|
465
443
|
|
|
466
|
-
#
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
444
|
+
# ffmpeg trim — 按 Trim 映射表切回 storyboard 各段
|
|
445
|
+
ffmpeg -i clips/call-1.mp4 -ss 0 -t 2.5 -c copy clips/seg-1.mp4
|
|
446
|
+
ffmpeg -i clips/call-1.mp4 -ss 2.5 -t 3.0 -c copy clips/seg-2.mp4
|
|
447
|
+
|
|
448
|
+
# 变量约定(production-plan.md 每个 call 提供):
|
|
449
|
+
# $PRODUCT_SEED = 锁定产品一致性的 seed(同一产品的所有镜头共用一个值)
|
|
470
450
|
|
|
471
451
|
# 注意 --seed 必须 wire:否则每段 gen 产品外观随机变,templates 的 PRODUCT_LOCK
|
|
472
452
|
# 规范(same seed across shots)会失效,电商视频产品一致性崩塌。
|
|
@@ -474,7 +454,7 @@ gen video <input_image> \
|
|
|
474
454
|
# 首帧编辑(产品替换)— 双图模式
|
|
475
455
|
gen image "<编辑指令>" -i <原始首帧> -i <产品图> -o assets/keyframes/seg-<N>-edited.jpg
|
|
476
456
|
|
|
477
|
-
#
|
|
457
|
+
# 拼接所有 seg 为最终视频
|
|
478
458
|
printf "file '%s'\n" clips/seg-*.mp4 > concat_list.txt
|
|
479
459
|
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy final.mp4
|
|
480
460
|
|
|
@@ -484,13 +464,11 @@ gen task cancel <task_id>
|
|
|
484
464
|
gen task retry <task_id>
|
|
485
465
|
```
|
|
486
466
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
**Duration**:`--duration` 直接传 production-plan.md 里该步的 `duration_s`(= storyboard 段时长,精度 0.5s)。**不允许**四舍五入到 5 或 10。多段视频仍用多次 `gen video` + `ffmpeg concat` 拼接(按段拆是 storyboard 层的决定,不是 duration 层的)。
|
|
467
|
+
**Duration**:`--duration` 只接受 10 或 15。Production Plan 的 Trim 映射表负责将生成的完整视频切回 Storyboard 各段时长。
|
|
490
468
|
|
|
491
469
|
**每步完成后**:
|
|
492
470
|
- 删 `seg-N.pending.json`
|
|
493
|
-
- 写 `seg-N.meta.json`(duration_s /
|
|
471
|
+
- 写 `seg-N.meta.json`(duration_s / aspect_ratio / status)
|
|
494
472
|
- `git commit -m "video: receive $VIDEO_ID seg-N"`
|
|
495
473
|
|
|
496
474
|
**全部完成**:`git commit -m "video: done $VIDEO_ID"`
|
|
@@ -550,8 +528,7 @@ gen task retry <task_id>
|
|
|
550
528
|
| 故障 | 处理 |
|
|
551
529
|
|---|---|
|
|
552
530
|
| gen 返回 failed | 重试 1 次 → 仍失败告知用户 |
|
|
553
|
-
| gen video 返回 "duration out of range" | **不**自动重试/裁剪,告知用户并建议调整该段 storyboard
|
|
554
|
-
| 复刻场景用户选标准模式(便宜版) | 告知"标准模式无音频,与原音频叠加会嘴型错位",问是否确认降级;确认后在 COST-GATE 明示"无音频" |
|
|
531
|
+
| gen video 返回 "duration out of range" | **不**自动重试/裁剪,告知用户并建议调整该段 storyboard 时长(Sora2 支持 10\|15 秒)后重新 Production Plan |
|
|
555
532
|
| ffmpeg 失败 | 检查输入完整性,告知用户 |
|
|
556
533
|
| 源视频无法下载 | 建议手动下载后重试 |
|
|
557
534
|
| scout 无结果 | 告知,转模板构建 |
|
package/dist/bin/bi-cli.js
CHANGED
|
File without changes
|
package/dist/bin/browser-cli.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfy.d.ts","sourceRoot":"","sources":["../../bin/comfy.ts"],"names":[],"mappings":";AACA,OAAO,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comfy.js","sourceRoot":"","sources":["../../bin/comfy.ts"],"names":[],"mappings":";AACA,OAAO,wBAAwB,CAAC"}
|
package/dist/bin/commerce.js
CHANGED
|
File without changes
|
package/dist/bin/gen.js
CHANGED
|
File without changes
|
package/dist/bin/google-ads.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth.d.ts","sourceRoot":"","sources":["../../bin/growth.ts"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth.js","sourceRoot":"","sources":["../../bin/growth.ts"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC"}
|
package/dist/bin/logistics.js
CHANGED
|
File without changes
|
package/dist/bin/optima.js
CHANGED
|
File without changes
|
package/dist/bin/scout.js
CHANGED
|
File without changes
|
package/dist/bin/sentinel.js
CHANGED
|
File without changes
|
package/dist/bin/shopify.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-loader.d.ts","sourceRoot":"","sources":["../../src/hooks-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAwL5D;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,GACrC,WAAW,CAiFb"}
|