@starreel/mcp 0.1.136 → 0.1.138
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/SKILL.md +3 -1
- package/dist/tools/guide-data.js +30 -1
- package/dist/tools/produce.js +91 -1
- package/openapi.json +1403 -641
- package/package.json +1 -1
- package/server.json +2 -2
package/openapi.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "StarReel Production API",
|
|
5
|
-
"version": "0.1.
|
|
6
|
-
"description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → storyboards → portraits & sheets + scene plates → keyframes → video shots → TTS → final cut (.mp4).\n\n**Billing is prepaid and agent-safe**: big-ticket stages are quote-then-generate (`quote_*` returns a `quote_id`). For video, quote == actual charge. For images the quote is a *range* — models billed per reference image are priced before those are assembled, so `estimated_points` is the upper bound (size the balance by it and a run never dies half-way) and `typical_points` is the usual cost; fixed-price models return the two equal. Insufficient balance returns 402 — nothing half-runs and the account never goes negative.\n\nAuth: exchange your API key at `POST /v1/agent/token` for a 15-minute bearer token.\n\nGenerated from the @starreel/mcp v0.1.
|
|
5
|
+
"version": "0.1.138",
|
|
6
|
+
"description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → storyboards → portraits & sheets + scene plates → keyframes → video shots → TTS → final cut (.mp4).\n\n**Billing is prepaid and agent-safe**: big-ticket stages are quote-then-generate (`quote_*` returns a `quote_id`). For video, quote == actual charge. For images the quote is a *range* — models billed per reference image are priced before those are assembled, so `estimated_points` is the upper bound (size the balance by it and a run never dies half-way) and `typical_points` is the usual cost; fixed-price models return the two equal. Insufficient balance returns 402 — nothing half-runs and the account never goes negative.\n\nAuth: exchange your API key at `POST /v1/agent/token` for a 15-minute bearer token.\n\nGenerated from the @starreel/mcp v0.1.138 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -2432,11 +2432,11 @@
|
|
|
2432
2432
|
}
|
|
2433
2433
|
}
|
|
2434
2434
|
},
|
|
2435
|
-
"/dramas/{drama_id}/mv/
|
|
2435
|
+
"/dramas/{drama_id}/mv/song": {
|
|
2436
2436
|
"post": {
|
|
2437
|
-
"operationId": "
|
|
2438
|
-
"summary": "MV
|
|
2439
|
-
"description": "MV
|
|
2437
|
+
"operationId": "generate_mv_song",
|
|
2438
|
+
"summary": "MV 项目·AI 作曲第 3 步(扣费):用本剧歌词 + 选定的曲风描述生成 candidates 首带人声的整曲候选,后台跑约 1~2 分钟",
|
|
2439
|
+
"description": "MV 项目·AI 作曲第 3 步(扣费):用本剧歌词 + 选定的曲风描述生成 candidates 首带人声的整曲候选,后台跑约 1~2 分钟。必须带 quote_mv_song 拿到的 quote_id。lyrics_rights_confirmed 必须是 true,且**只能在用户明确表示拥有这份歌词的使用权利后**才传 true(拿别人已发表歌曲的歌词生成属于未经授权的翻唱),不要替用户确认。生成的歌末尾带约 1 秒的 AI 生成标识音。完成后 get_mv_song 看候选与唱词质检,再 select_mv_song 选定。",
|
|
2440
2440
|
"tags": [
|
|
2441
2441
|
"dramas"
|
|
2442
2442
|
],
|
|
@@ -2451,6 +2451,47 @@
|
|
|
2451
2451
|
}
|
|
2452
2452
|
}
|
|
2453
2453
|
],
|
|
2454
|
+
"requestBody": {
|
|
2455
|
+
"required": true,
|
|
2456
|
+
"content": {
|
|
2457
|
+
"application/json": {
|
|
2458
|
+
"schema": {
|
|
2459
|
+
"type": "object",
|
|
2460
|
+
"properties": {
|
|
2461
|
+
"style_prompt": {
|
|
2462
|
+
"type": "string",
|
|
2463
|
+
"minLength": 1,
|
|
2464
|
+
"maxLength": 2000,
|
|
2465
|
+
"description": "曲风描述:suggest_mv_song_styles 返回的某套 prompt(可改)"
|
|
2466
|
+
},
|
|
2467
|
+
"candidates": {
|
|
2468
|
+
"type": "integer",
|
|
2469
|
+
"minimum": 1,
|
|
2470
|
+
"maximum": 3
|
|
2471
|
+
},
|
|
2472
|
+
"quote_id": {
|
|
2473
|
+
"type": "string",
|
|
2474
|
+
"description": "quote_mv_song 返回的 quote_id"
|
|
2475
|
+
},
|
|
2476
|
+
"lyrics_rights_confirmed": {
|
|
2477
|
+
"type": "boolean",
|
|
2478
|
+
"description": "用户确认拥有歌词使用权利后才传 true"
|
|
2479
|
+
},
|
|
2480
|
+
"style_name": {
|
|
2481
|
+
"type": "string",
|
|
2482
|
+
"maxLength": 60
|
|
2483
|
+
}
|
|
2484
|
+
},
|
|
2485
|
+
"required": [
|
|
2486
|
+
"style_prompt",
|
|
2487
|
+
"candidates",
|
|
2488
|
+
"quote_id",
|
|
2489
|
+
"lyrics_rights_confirmed"
|
|
2490
|
+
]
|
|
2491
|
+
}
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
},
|
|
2454
2495
|
"responses": {
|
|
2455
2496
|
"200": {
|
|
2456
2497
|
"description": "StarReel envelope",
|
|
@@ -2477,13 +2518,11 @@
|
|
|
2477
2518
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
2478
2519
|
}
|
|
2479
2520
|
}
|
|
2480
|
-
}
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
"
|
|
2485
|
-
"summary": "给整部剧生成海报图(KV)",
|
|
2486
|
-
"description": "给整部剧生成海报图(KV)。图片步,按用量后付。",
|
|
2521
|
+
},
|
|
2522
|
+
"get": {
|
|
2523
|
+
"operationId": "get_mv_song",
|
|
2524
|
+
"summary": "MV 项目·AI 作曲:查进度与本剧已生成的候选(免费)",
|
|
2525
|
+
"description": "MV 项目·AI 作曲:查进度与本剧已生成的候选(免费)。candidates[].qc 是唱词质检摘要(字错率 / 疑似没唱的段落),只是提示——转写对歌声有误差,请让用户试听 file_url 后再选;bound=true 是当前绑定的整曲;lyrics_match=false 表示这首是按修改前的歌词生成的,不能再选(select_mv_song 会拒),要用当前歌词重新生成。",
|
|
2487
2526
|
"tags": [
|
|
2488
2527
|
"dramas"
|
|
2489
2528
|
],
|
|
@@ -2526,11 +2565,11 @@
|
|
|
2526
2565
|
}
|
|
2527
2566
|
}
|
|
2528
2567
|
},
|
|
2529
|
-
"/dramas/{drama_id}/
|
|
2568
|
+
"/dramas/{drama_id}/mv/song/quote": {
|
|
2530
2569
|
"get": {
|
|
2531
|
-
"operationId": "
|
|
2532
|
-
"summary": "(
|
|
2533
|
-
"description": "
|
|
2570
|
+
"operationId": "quote_mv_song",
|
|
2571
|
+
"summary": "MV 项目·AI 作曲第 2 步:报价(免费)",
|
|
2572
|
+
"description": "MV 项目·AI 作曲第 2 步:报价(免费)。总点数 = candidates × 单首价;返回 quote_id(15 分钟有效、一次性)。⚠️ 把 points 原样告诉用户,用户明确同意后才拿 quote_id 调 generate_mv_song(candidates 必须一致),不要擅自确认。",
|
|
2534
2573
|
"tags": [
|
|
2535
2574
|
"dramas"
|
|
2536
2575
|
],
|
|
@@ -2545,21 +2584,14 @@
|
|
|
2545
2584
|
}
|
|
2546
2585
|
},
|
|
2547
2586
|
{
|
|
2548
|
-
"name": "
|
|
2549
|
-
"in": "query",
|
|
2550
|
-
"required": false,
|
|
2551
|
-
"schema": {
|
|
2552
|
-
"type": "string"
|
|
2553
|
-
}
|
|
2554
|
-
},
|
|
2555
|
-
{
|
|
2556
|
-
"name": "limit",
|
|
2587
|
+
"name": "candidates",
|
|
2557
2588
|
"in": "query",
|
|
2558
|
-
"required":
|
|
2589
|
+
"required": true,
|
|
2559
2590
|
"schema": {
|
|
2560
2591
|
"type": "integer",
|
|
2561
|
-
"
|
|
2562
|
-
"maximum":
|
|
2592
|
+
"minimum": 1,
|
|
2593
|
+
"maximum": 3,
|
|
2594
|
+
"description": "出几首候选对比(1~3),每首单独计费"
|
|
2563
2595
|
}
|
|
2564
2596
|
}
|
|
2565
2597
|
],
|
|
@@ -2591,11 +2623,11 @@
|
|
|
2591
2623
|
}
|
|
2592
2624
|
}
|
|
2593
2625
|
},
|
|
2594
|
-
"/dramas/{drama_id}/
|
|
2626
|
+
"/dramas/{drama_id}/mv/song/select": {
|
|
2595
2627
|
"post": {
|
|
2596
|
-
"operationId": "
|
|
2597
|
-
"summary": "
|
|
2598
|
-
"description": "
|
|
2628
|
+
"operationId": "select_mv_song",
|
|
2629
|
+
"summary": "MV 项目·AI 作曲第 4 步(免费):把某首候选设为本 MV 的整曲,并按本剧歌词自动对轴(之后 generate_mv_story / generate_mv_script 照常走)",
|
|
2630
|
+
"description": "MV 项目·AI 作曲第 4 步(免费):把某首候选设为本 MV 的整曲,并按本剧歌词自动对轴(之后 generate_mv_story / generate_mv_script 照常走)。",
|
|
2599
2631
|
"tags": [
|
|
2600
2632
|
"dramas"
|
|
2601
2633
|
],
|
|
@@ -2617,19 +2649,14 @@
|
|
|
2617
2649
|
"schema": {
|
|
2618
2650
|
"type": "object",
|
|
2619
2651
|
"properties": {
|
|
2620
|
-
"
|
|
2621
|
-
"type": "
|
|
2622
|
-
"
|
|
2623
|
-
|
|
2624
|
-
"description": {
|
|
2625
|
-
"type": "string"
|
|
2626
|
-
},
|
|
2627
|
-
"image_url": {
|
|
2628
|
-
"type": "string"
|
|
2652
|
+
"track_id": {
|
|
2653
|
+
"type": "integer",
|
|
2654
|
+
"exclusiveMinimum": 0,
|
|
2655
|
+
"description": "get_mv_song 返回的 candidates[].track_id"
|
|
2629
2656
|
}
|
|
2630
2657
|
},
|
|
2631
2658
|
"required": [
|
|
2632
|
-
"
|
|
2659
|
+
"track_id"
|
|
2633
2660
|
]
|
|
2634
2661
|
}
|
|
2635
2662
|
}
|
|
@@ -2661,11 +2688,13 @@
|
|
|
2661
2688
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
2662
2689
|
}
|
|
2663
2690
|
}
|
|
2664
|
-
}
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
"
|
|
2691
|
+
}
|
|
2692
|
+
},
|
|
2693
|
+
"/dramas/{drama_id}/mv/song/styles": {
|
|
2694
|
+
"post": {
|
|
2695
|
+
"operationId": "suggest_mv_song_styles",
|
|
2696
|
+
"summary": "MV 项目·AI 作曲第 1 步:读本剧已存的歌词(先 set_mv_lyrics),给 3 套曲风方案(name/why/bpm/vocal/prompt)",
|
|
2697
|
+
"description": "MV 项目·AI 作曲第 1 步:读本剧已存的歌词(先 set_mv_lyrics),给 3 套曲风方案(name/why/bpm/vocal/prompt)。不出歌,只花一次少量文本 LLM 费。把方案讲给用户挑,用户可以改 prompt;挑定后 quote_mv_song 报价。仅在客户**没有**现成歌曲时用;有歌就让客户上传整曲。灰度中:未开放的剧返回 403 feature_disabled。",
|
|
2669
2698
|
"tags": [
|
|
2670
2699
|
"dramas"
|
|
2671
2700
|
],
|
|
@@ -2680,6 +2709,22 @@
|
|
|
2680
2709
|
}
|
|
2681
2710
|
}
|
|
2682
2711
|
],
|
|
2712
|
+
"requestBody": {
|
|
2713
|
+
"required": false,
|
|
2714
|
+
"content": {
|
|
2715
|
+
"application/json": {
|
|
2716
|
+
"schema": {
|
|
2717
|
+
"type": "object",
|
|
2718
|
+
"properties": {
|
|
2719
|
+
"hint": {
|
|
2720
|
+
"type": "string",
|
|
2721
|
+
"maxLength": 300
|
|
2722
|
+
}
|
|
2723
|
+
}
|
|
2724
|
+
}
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
},
|
|
2683
2728
|
"responses": {
|
|
2684
2729
|
"200": {
|
|
2685
2730
|
"description": "StarReel envelope",
|
|
@@ -2708,11 +2753,11 @@
|
|
|
2708
2753
|
}
|
|
2709
2754
|
}
|
|
2710
2755
|
},
|
|
2711
|
-
"/dramas/{drama_id}/
|
|
2712
|
-
"
|
|
2713
|
-
"operationId": "
|
|
2714
|
-
"summary": "
|
|
2715
|
-
"description": "
|
|
2756
|
+
"/dramas/{drama_id}/mv/story": {
|
|
2757
|
+
"post": {
|
|
2758
|
+
"operationId": "generate_mv_story",
|
|
2759
|
+
"summary": "MV 项目:据歌词 AI 编一个 MV 故事线",
|
|
2760
|
+
"description": "MV 项目:据歌词 AI 编一个 MV 故事线。后台/同步,按用量后付。",
|
|
2716
2761
|
"tags": [
|
|
2717
2762
|
"dramas"
|
|
2718
2763
|
],
|
|
@@ -2755,11 +2800,11 @@
|
|
|
2755
2800
|
}
|
|
2756
2801
|
}
|
|
2757
2802
|
},
|
|
2758
|
-
"/dramas/{drama_id}/
|
|
2803
|
+
"/dramas/{drama_id}/poster": {
|
|
2759
2804
|
"post": {
|
|
2760
|
-
"operationId": "
|
|
2761
|
-
"summary": "
|
|
2762
|
-
"description": "
|
|
2805
|
+
"operationId": "generate_drama_poster",
|
|
2806
|
+
"summary": "给整部剧生成海报图(KV)",
|
|
2807
|
+
"description": "给整部剧生成海报图(KV)。图片步,按用量后付。",
|
|
2763
2808
|
"tags": [
|
|
2764
2809
|
"dramas"
|
|
2765
2810
|
],
|
|
@@ -2774,25 +2819,6 @@
|
|
|
2774
2819
|
}
|
|
2775
2820
|
}
|
|
2776
2821
|
],
|
|
2777
|
-
"requestBody": {
|
|
2778
|
-
"required": true,
|
|
2779
|
-
"content": {
|
|
2780
|
-
"application/json": {
|
|
2781
|
-
"schema": {
|
|
2782
|
-
"type": "object",
|
|
2783
|
-
"properties": {
|
|
2784
|
-
"quote_id": {
|
|
2785
|
-
"type": "string",
|
|
2786
|
-
"description": "来自 quote_scene_images"
|
|
2787
|
-
}
|
|
2788
|
-
},
|
|
2789
|
-
"required": [
|
|
2790
|
-
"quote_id"
|
|
2791
|
-
]
|
|
2792
|
-
}
|
|
2793
|
-
}
|
|
2794
|
-
}
|
|
2795
|
-
},
|
|
2796
2822
|
"responses": {
|
|
2797
2823
|
"200": {
|
|
2798
2824
|
"description": "StarReel envelope",
|
|
@@ -2821,11 +2847,11 @@
|
|
|
2821
2847
|
}
|
|
2822
2848
|
}
|
|
2823
2849
|
},
|
|
2824
|
-
"/dramas/{drama_id}/
|
|
2825
|
-
"
|
|
2826
|
-
"operationId": "
|
|
2827
|
-
"summary": "
|
|
2828
|
-
"description": "
|
|
2850
|
+
"/dramas/{drama_id}/precheck": {
|
|
2851
|
+
"get": {
|
|
2852
|
+
"operationId": "run_drama_precheck",
|
|
2853
|
+
"summary": "(★免费·只读)**整部剧**的体检汇总:一次拿到每一集有多少问题、哪几集该先修",
|
|
2854
|
+
"description": "(★免费·只读)**整部剧**的体检汇总:一次拿到每一集有多少问题、哪几集该先修。run_precheck 是集级的,几十集的剧要打几十次还得自己汇总 —— 要跑全集时先调这个。\n回什么:episodes[] 逐集的 blockers/warnings/by_kind(按判据码计数),totals 全剧合计,attention[] = 最该先修的几集(按阻断数、告警数降序)。\n★**怎么用**:先看 attention 定优先级 → 对那几集调 run_precheck 拿逐条明细 → plan_precheck_fix / update_shot 去改 → 改完重跑本工具确认总数下来了。\n⚠️ **「全剧 0 条」不等于「全查过了」**:剧级为了能在一个请求里跑完,强制跳过唯一要看图的那道 lint(一集 25s 墙钟)。返回体的 not_covered 列着跳过了哪一类,要查那一类就去对应集跑 run_precheck。\n⚠️ episodes[].failed=true 的集是**没查成**(不是没问题),重调一次即可。truncated=true 说明集数超过 limit 上限,没扫完。",
|
|
2829
2855
|
"tags": [
|
|
2830
2856
|
"dramas"
|
|
2831
2857
|
],
|
|
@@ -2838,6 +2864,24 @@
|
|
|
2838
2864
|
"type": "integer",
|
|
2839
2865
|
"exclusiveMinimum": 0
|
|
2840
2866
|
}
|
|
2867
|
+
},
|
|
2868
|
+
{
|
|
2869
|
+
"name": "scope",
|
|
2870
|
+
"in": "query",
|
|
2871
|
+
"required": false,
|
|
2872
|
+
"schema": {
|
|
2873
|
+
"type": "string"
|
|
2874
|
+
}
|
|
2875
|
+
},
|
|
2876
|
+
{
|
|
2877
|
+
"name": "limit",
|
|
2878
|
+
"in": "query",
|
|
2879
|
+
"required": false,
|
|
2880
|
+
"schema": {
|
|
2881
|
+
"type": "integer",
|
|
2882
|
+
"exclusiveMinimum": 0,
|
|
2883
|
+
"maximum": 60
|
|
2884
|
+
}
|
|
2841
2885
|
}
|
|
2842
2886
|
],
|
|
2843
2887
|
"responses": {
|
|
@@ -2868,11 +2912,11 @@
|
|
|
2868
2912
|
}
|
|
2869
2913
|
}
|
|
2870
2914
|
},
|
|
2871
|
-
"/dramas/{drama_id}/
|
|
2872
|
-
"
|
|
2873
|
-
"operationId": "
|
|
2874
|
-
"summary": "
|
|
2875
|
-
"description": "
|
|
2915
|
+
"/dramas/{drama_id}/products": {
|
|
2916
|
+
"post": {
|
|
2917
|
+
"operationId": "add_product",
|
|
2918
|
+
"summary": "★广告项目必做:往商品库加一个商品(名称/卖点/图),是广告的**主体**——出视频时按分镜文本匹配产品图当锚,不建产品库镜头里的产品会漂移/瞎编",
|
|
2919
|
+
"description": "★广告项目必做:往商品库加一个商品(名称/卖点/图),是广告的**主体**——出视频时按分镜文本匹配产品图当锚,不建产品库镜头里的产品会漂移/瞎编。建完用 generate_product_sheet 出设定图(锚更稳)。免费(仅建条目)。",
|
|
2876
2920
|
"tags": [
|
|
2877
2921
|
"dramas"
|
|
2878
2922
|
],
|
|
@@ -2887,6 +2931,31 @@
|
|
|
2887
2931
|
}
|
|
2888
2932
|
}
|
|
2889
2933
|
],
|
|
2934
|
+
"requestBody": {
|
|
2935
|
+
"required": true,
|
|
2936
|
+
"content": {
|
|
2937
|
+
"application/json": {
|
|
2938
|
+
"schema": {
|
|
2939
|
+
"type": "object",
|
|
2940
|
+
"properties": {
|
|
2941
|
+
"name": {
|
|
2942
|
+
"type": "string",
|
|
2943
|
+
"minLength": 1
|
|
2944
|
+
},
|
|
2945
|
+
"description": {
|
|
2946
|
+
"type": "string"
|
|
2947
|
+
},
|
|
2948
|
+
"image_url": {
|
|
2949
|
+
"type": "string"
|
|
2950
|
+
}
|
|
2951
|
+
},
|
|
2952
|
+
"required": [
|
|
2953
|
+
"name"
|
|
2954
|
+
]
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2957
|
+
}
|
|
2958
|
+
},
|
|
2890
2959
|
"responses": {
|
|
2891
2960
|
"200": {
|
|
2892
2961
|
"description": "StarReel envelope",
|
|
@@ -2913,13 +2982,11 @@
|
|
|
2913
2982
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
2914
2983
|
}
|
|
2915
2984
|
}
|
|
2916
|
-
}
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
"
|
|
2921
|
-
"summary": "生成视频风格锁 prompt(读 brief/artBible/visualLock,统一视频生成方向)",
|
|
2922
|
-
"description": "生成视频风格锁 prompt(读 brief/artBible/visualLock,统一视频生成方向)。文本步后付不欠费。",
|
|
2985
|
+
},
|
|
2986
|
+
"get": {
|
|
2987
|
+
"operationId": "list_products",
|
|
2988
|
+
"summary": "广告项目:列出商品库",
|
|
2989
|
+
"description": "广告项目:列出商品库。免费。",
|
|
2923
2990
|
"tags": [
|
|
2924
2991
|
"dramas"
|
|
2925
2992
|
],
|
|
@@ -2962,11 +3029,11 @@
|
|
|
2962
3029
|
}
|
|
2963
3030
|
}
|
|
2964
3031
|
},
|
|
2965
|
-
"/dramas/{drama_id}/
|
|
2966
|
-
"
|
|
2967
|
-
"operationId": "
|
|
2968
|
-
"summary": "
|
|
2969
|
-
"description": "
|
|
3032
|
+
"/dramas/{drama_id}/props": {
|
|
3033
|
+
"get": {
|
|
3034
|
+
"operationId": "get_props",
|
|
3035
|
+
"summary": "列剧目道具库(每个道具名称/类型/描述/设定图)",
|
|
3036
|
+
"description": "列剧目道具库(每个道具名称/类型/描述/设定图)。★道具库≠广告商品库(add_product/list_products 是带货商品);道具库是剧目道具。免费。★每个道具带 era_audit(道具图的时代/形制审核结论,图换过则为 null):form_consistent=false 表示道具图与它的 era_lock 不符,conflicting_scopes 列出它被绑定却时代不合的场景/分集(scope 形如 scene:12 / episode:3),violations 点名具体冲突特征。有冲突时:先 update_prop 改 era_lock(写清朝代与形制)再 generate_prop_sheet 重出道具图;或者给那些镜换用合适的道具。",
|
|
2970
3037
|
"tags": [
|
|
2971
3038
|
"dramas"
|
|
2972
3039
|
],
|
|
@@ -2981,21 +3048,6 @@
|
|
|
2981
3048
|
}
|
|
2982
3049
|
}
|
|
2983
3050
|
],
|
|
2984
|
-
"requestBody": {
|
|
2985
|
-
"required": false,
|
|
2986
|
-
"content": {
|
|
2987
|
-
"application/json": {
|
|
2988
|
-
"schema": {
|
|
2989
|
-
"type": "object",
|
|
2990
|
-
"properties": {
|
|
2991
|
-
"setting_brief": {
|
|
2992
|
-
"type": "string"
|
|
2993
|
-
}
|
|
2994
|
-
}
|
|
2995
|
-
}
|
|
2996
|
-
}
|
|
2997
|
-
}
|
|
2998
|
-
},
|
|
2999
3051
|
"responses": {
|
|
3000
3052
|
"200": {
|
|
3001
3053
|
"description": "StarReel envelope",
|
|
@@ -3024,11 +3076,11 @@
|
|
|
3024
3076
|
}
|
|
3025
3077
|
}
|
|
3026
3078
|
},
|
|
3027
|
-
"/dramas/{drama_id}/
|
|
3028
|
-
"
|
|
3029
|
-
"operationId": "
|
|
3030
|
-
"summary": "
|
|
3031
|
-
"description": "
|
|
3079
|
+
"/dramas/{drama_id}/scene-images/generate": {
|
|
3080
|
+
"post": {
|
|
3081
|
+
"operationId": "generate_scene_images",
|
|
3082
|
+
"summary": "确认后批量出**空景基板**(每场一张无人物的场景底图):后台异步,只补「还没有图」的场景",
|
|
3083
|
+
"description": "确认后批量出**空景基板**(每场一张无人物的场景底图):后台异步,只补「还没有图」的场景。★**出镜头图前做这一步**。跳过不会报错、不会被拦,但代价是实打实的:平台的兜底是「出帧时发现该场景缺图 → 后台补一张」,补的那张只惠及同场景的**后续**镜,触发它的那一镜等不到,于是**每个场景的第一镜没有背景锚**——而首镜往往正是定调的那一镜;后续镜之间背景也会一路漂。它与定妆图是一对:定妆图锚人、场景图锚景。★出得不对不要重调本工具(它只补缺图的场景、已有图的一律跳过):`get_scene_prompt` 读正文 → `update_scene` 改 image_prompt → `regenerate_scene_image` 单场重出。★非现代题材先设 `set_era_contract`,否则基板会画成别的时代,下游整场的镜头帧跟着错。★进度看 `get_pipeline_status` 的 generate_scene_images 步。⚠️ 批量报价确认流程:先调对应的 quote_* 工具,把返回的 estimated_points 原样告诉用户,用户明确同意后,才用返回的 quote_id 调本工具。不要擅自确认。★**出图类报价(定妆图/场景图/出帧)给的是两个数**:estimated_points 是**上界**(按该模型参考图张数上限估,保证你不会按低了的预算开跑、出到一半 402 中断);同一响应里的 typical_points 是**通常花费**。两个都要告诉客户——只说上界会让人以为贵得多(满参考图的上界可达通常值的 2 倍以上),只说通常值又会让余额准备不足。固定价模型下两者相等,这时说一个数就行。出视频的报价与扣费同函数,不存在这个区间。",
|
|
3032
3084
|
"tags": [
|
|
3033
3085
|
"dramas"
|
|
3034
3086
|
],
|
|
@@ -3043,13 +3095,32 @@
|
|
|
3043
3095
|
}
|
|
3044
3096
|
}
|
|
3045
3097
|
],
|
|
3046
|
-
"
|
|
3047
|
-
"
|
|
3048
|
-
|
|
3049
|
-
"
|
|
3050
|
-
"
|
|
3051
|
-
"
|
|
3052
|
-
|
|
3098
|
+
"requestBody": {
|
|
3099
|
+
"required": true,
|
|
3100
|
+
"content": {
|
|
3101
|
+
"application/json": {
|
|
3102
|
+
"schema": {
|
|
3103
|
+
"type": "object",
|
|
3104
|
+
"properties": {
|
|
3105
|
+
"quote_id": {
|
|
3106
|
+
"type": "string",
|
|
3107
|
+
"description": "来自 quote_scene_images"
|
|
3108
|
+
}
|
|
3109
|
+
},
|
|
3110
|
+
"required": [
|
|
3111
|
+
"quote_id"
|
|
3112
|
+
]
|
|
3113
|
+
}
|
|
3114
|
+
}
|
|
3115
|
+
}
|
|
3116
|
+
},
|
|
3117
|
+
"responses": {
|
|
3118
|
+
"200": {
|
|
3119
|
+
"description": "StarReel envelope",
|
|
3120
|
+
"content": {
|
|
3121
|
+
"application/json": {
|
|
3122
|
+
"schema": {
|
|
3123
|
+
"type": "object",
|
|
3053
3124
|
"properties": {
|
|
3054
3125
|
"code": {
|
|
3055
3126
|
"type": "integer"
|
|
@@ -3071,11 +3142,11 @@
|
|
|
3071
3142
|
}
|
|
3072
3143
|
}
|
|
3073
3144
|
},
|
|
3074
|
-
"/dramas/{drama_id}/
|
|
3145
|
+
"/dramas/{drama_id}/scene-images/quote": {
|
|
3075
3146
|
"post": {
|
|
3076
|
-
"operationId": "
|
|
3077
|
-
"summary": "
|
|
3078
|
-
"description": "(
|
|
3147
|
+
"operationId": "quote_scene_images",
|
|
3148
|
+
"summary": "报价:给缺图场景批量出**空景基板**要多少点",
|
|
3149
|
+
"description": "报价:给缺图场景批量出**空景基板**要多少点。返回 images_to_generate、estimated_points、quote_id。零扣费。★这是出镜头图(frames)**之前**的一步,不是可选增强:场景图是背景锚,同一场的每个镜头帧都锚在它上面。★只给「还没有图」的场景报价,已有图的不重复算钱;整剧一次报完(按 drama_id 不是 episode_id)。★想先看缺多少,用 get_pipeline_status 的 generate_scene_images 步(completed/total,免费)。★返回两个数:estimated_points 是**上界**(按参考图张数上限估,拿它准备余额就不会中途 402),typical_points 是**通常花费**。两个都告诉客户,只报上界会让人以为贵得多。固定价模型(如 Nano Banana 系列)下两者相等。",
|
|
3079
3150
|
"tags": [
|
|
3080
3151
|
"dramas"
|
|
3081
3152
|
],
|
|
@@ -3118,17 +3189,17 @@
|
|
|
3118
3189
|
}
|
|
3119
3190
|
}
|
|
3120
3191
|
},
|
|
3121
|
-
"/
|
|
3192
|
+
"/dramas/{drama_id}/unlinked-assets": {
|
|
3122
3193
|
"get": {
|
|
3123
|
-
"operationId": "
|
|
3124
|
-
"summary": "
|
|
3125
|
-
"description": "
|
|
3194
|
+
"operationId": "list_unlinked_assets",
|
|
3195
|
+
"summary": "列出本剧「已解除引用」的旧资产(免费):清尾帧、换定妆图时被摘下来的旧尾帧/旧定妆图/旧设定图/发型·身体参考/视频锚,每个 URL 一条",
|
|
3196
|
+
"description": "列出本剧「已解除引用」的旧资产(免费):清尾帧、换定妆图时被摘下来的旧尾帧/旧定妆图/旧设定图/发型·身体参考/视频锚,每个 URL 一条。这些文件仍然存在于存储里。清单会尽量排除已被重新用上的图,但不保证完全排除——某张图是否还在别处被引用,以平台的全库检查为准。客户问「旧图还在不在」时用它。",
|
|
3126
3197
|
"tags": [
|
|
3127
|
-
"
|
|
3198
|
+
"dramas"
|
|
3128
3199
|
],
|
|
3129
3200
|
"parameters": [
|
|
3130
3201
|
{
|
|
3131
|
-
"name": "
|
|
3202
|
+
"name": "drama_id",
|
|
3132
3203
|
"in": "path",
|
|
3133
3204
|
"required": true,
|
|
3134
3205
|
"schema": {
|
|
@@ -3165,17 +3236,17 @@
|
|
|
3165
3236
|
}
|
|
3166
3237
|
}
|
|
3167
3238
|
},
|
|
3168
|
-
"/
|
|
3239
|
+
"/dramas/{drama_id}/vace-capabilities": {
|
|
3169
3240
|
"get": {
|
|
3170
|
-
"operationId": "
|
|
3171
|
-
"summary": "
|
|
3172
|
-
"description": "
|
|
3241
|
+
"operationId": "get_repaint_capabilities",
|
|
3242
|
+
"summary": "查本剧能用哪些视频转绘:repaint(视频重绘)/ reskin(换装重绘)是否开放、单段源片上限 maxSourceSec、长镜头接力最多段数 relayMaxSegments(0=没开,>5 秒的镜不能转绘)",
|
|
3243
|
+
"description": "查本剧能用哪些视频转绘:repaint(视频重绘)/ reskin(换装重绘)是否开放、单段源片上限 maxSourceSec、长镜头接力最多段数 relayMaxSegments(0=没开,>5 秒的镜不能转绘)。免费。",
|
|
3173
3244
|
"tags": [
|
|
3174
|
-
"
|
|
3245
|
+
"dramas"
|
|
3175
3246
|
],
|
|
3176
3247
|
"parameters": [
|
|
3177
3248
|
{
|
|
3178
|
-
"name": "
|
|
3249
|
+
"name": "drama_id",
|
|
3179
3250
|
"in": "path",
|
|
3180
3251
|
"required": true,
|
|
3181
3252
|
"schema": {
|
|
@@ -3212,55 +3283,25 @@
|
|
|
3212
3283
|
}
|
|
3213
3284
|
}
|
|
3214
3285
|
},
|
|
3215
|
-
"/
|
|
3286
|
+
"/dramas/{drama_id}/video-style": {
|
|
3216
3287
|
"post": {
|
|
3217
|
-
"operationId": "
|
|
3218
|
-
"summary": "
|
|
3219
|
-
"description": "
|
|
3288
|
+
"operationId": "generate_video_style",
|
|
3289
|
+
"summary": "生成视频风格锁 prompt(读 brief/artBible/visualLock,统一视频生成方向)",
|
|
3290
|
+
"description": "生成视频风格锁 prompt(读 brief/artBible/visualLock,统一视频生成方向)。文本步后付不欠费。",
|
|
3220
3291
|
"tags": [
|
|
3221
|
-
"
|
|
3292
|
+
"dramas"
|
|
3222
3293
|
],
|
|
3223
3294
|
"parameters": [
|
|
3224
3295
|
{
|
|
3225
|
-
"name": "
|
|
3296
|
+
"name": "drama_id",
|
|
3226
3297
|
"in": "path",
|
|
3227
3298
|
"required": true,
|
|
3228
3299
|
"schema": {
|
|
3229
3300
|
"type": "integer",
|
|
3230
3301
|
"exclusiveMinimum": 0
|
|
3231
3302
|
}
|
|
3232
|
-
},
|
|
3233
|
-
{
|
|
3234
|
-
"name": "generation_id",
|
|
3235
|
-
"in": "path",
|
|
3236
|
-
"required": true,
|
|
3237
|
-
"schema": {
|
|
3238
|
-
"type": "integer",
|
|
3239
|
-
"exclusiveMinimum": 0,
|
|
3240
|
-
"description": "取自 get_asset_recovery 的 candidates[].source_generation_id(响应里没有 id 这个键)"
|
|
3241
|
-
}
|
|
3242
3303
|
}
|
|
3243
3304
|
],
|
|
3244
|
-
"requestBody": {
|
|
3245
|
-
"required": true,
|
|
3246
|
-
"content": {
|
|
3247
|
-
"application/json": {
|
|
3248
|
-
"schema": {
|
|
3249
|
-
"type": "object",
|
|
3250
|
-
"properties": {
|
|
3251
|
-
"target_storyboard_id": {
|
|
3252
|
-
"type": "integer",
|
|
3253
|
-
"exclusiveMinimum": 0,
|
|
3254
|
-
"description": "回填到哪一镜(必填,不猜)"
|
|
3255
|
-
}
|
|
3256
|
-
},
|
|
3257
|
-
"required": [
|
|
3258
|
-
"target_storyboard_id"
|
|
3259
|
-
]
|
|
3260
|
-
}
|
|
3261
|
-
}
|
|
3262
|
-
}
|
|
3263
|
-
},
|
|
3264
3305
|
"responses": {
|
|
3265
3306
|
"200": {
|
|
3266
3307
|
"description": "StarReel envelope",
|
|
@@ -3289,33 +3330,23 @@
|
|
|
3289
3330
|
}
|
|
3290
3331
|
}
|
|
3291
3332
|
},
|
|
3292
|
-
"/
|
|
3333
|
+
"/dramas/{drama_id}/visual-lock": {
|
|
3293
3334
|
"post": {
|
|
3294
|
-
"operationId": "
|
|
3295
|
-
"summary": "
|
|
3296
|
-
"description": "
|
|
3335
|
+
"operationId": "extract_visual_lock",
|
|
3336
|
+
"summary": "从世界观 Brief + 角色抽取「视觉锁定」规则(写 visual_lock,统一出图风格/族裔)",
|
|
3337
|
+
"description": "从世界观 Brief + 角色抽取「视觉锁定」规则(写 visual_lock,统一出图风格/族裔)。文本步后付不欠费。",
|
|
3297
3338
|
"tags": [
|
|
3298
|
-
"
|
|
3339
|
+
"dramas"
|
|
3299
3340
|
],
|
|
3300
3341
|
"parameters": [
|
|
3301
3342
|
{
|
|
3302
|
-
"name": "
|
|
3343
|
+
"name": "drama_id",
|
|
3303
3344
|
"in": "path",
|
|
3304
3345
|
"required": true,
|
|
3305
3346
|
"schema": {
|
|
3306
3347
|
"type": "integer",
|
|
3307
3348
|
"exclusiveMinimum": 0
|
|
3308
3349
|
}
|
|
3309
|
-
},
|
|
3310
|
-
{
|
|
3311
|
-
"name": "event_id",
|
|
3312
|
-
"in": "path",
|
|
3313
|
-
"required": true,
|
|
3314
|
-
"schema": {
|
|
3315
|
-
"type": "integer",
|
|
3316
|
-
"exclusiveMinimum": 0,
|
|
3317
|
-
"description": "取自 get_asset_recovery 的恢复事件 id"
|
|
3318
|
-
}
|
|
3319
3350
|
}
|
|
3320
3351
|
],
|
|
3321
3352
|
"requestBody": {
|
|
@@ -3324,7 +3355,11 @@
|
|
|
3324
3355
|
"application/json": {
|
|
3325
3356
|
"schema": {
|
|
3326
3357
|
"type": "object",
|
|
3327
|
-
"properties": {
|
|
3358
|
+
"properties": {
|
|
3359
|
+
"setting_brief": {
|
|
3360
|
+
"type": "string"
|
|
3361
|
+
}
|
|
3362
|
+
}
|
|
3328
3363
|
}
|
|
3329
3364
|
}
|
|
3330
3365
|
}
|
|
@@ -3357,46 +3392,25 @@
|
|
|
3357
3392
|
}
|
|
3358
3393
|
}
|
|
3359
3394
|
},
|
|
3360
|
-
"/
|
|
3361
|
-
"
|
|
3362
|
-
"operationId": "
|
|
3363
|
-
"summary": "
|
|
3364
|
-
"description": "
|
|
3395
|
+
"/dramas/{drama_id}/wardrobe": {
|
|
3396
|
+
"get": {
|
|
3397
|
+
"operationId": "list_wardrobe",
|
|
3398
|
+
"summary": "列本剧的**服装资产库**(免费)",
|
|
3399
|
+
"description": "列本剧的**服装资产库**(免费)。每件服装是一个可被镜头引用的结构化资产,不是分镜里的文字描述。",
|
|
3365
3400
|
"tags": [
|
|
3366
|
-
"
|
|
3401
|
+
"dramas"
|
|
3367
3402
|
],
|
|
3368
3403
|
"parameters": [
|
|
3369
3404
|
{
|
|
3370
|
-
"name": "
|
|
3405
|
+
"name": "drama_id",
|
|
3371
3406
|
"in": "path",
|
|
3372
3407
|
"required": true,
|
|
3373
3408
|
"schema": {
|
|
3374
3409
|
"type": "integer",
|
|
3375
3410
|
"exclusiveMinimum": 0
|
|
3376
3411
|
}
|
|
3377
|
-
},
|
|
3378
|
-
{
|
|
3379
|
-
"name": "merge_id",
|
|
3380
|
-
"in": "path",
|
|
3381
|
-
"required": true,
|
|
3382
|
-
"schema": {
|
|
3383
|
-
"type": "integer",
|
|
3384
|
-
"exclusiveMinimum": 0,
|
|
3385
|
-
"description": "取自 get_asset_recovery 的 finals[].id"
|
|
3386
|
-
}
|
|
3387
3412
|
}
|
|
3388
3413
|
],
|
|
3389
|
-
"requestBody": {
|
|
3390
|
-
"required": false,
|
|
3391
|
-
"content": {
|
|
3392
|
-
"application/json": {
|
|
3393
|
-
"schema": {
|
|
3394
|
-
"type": "object",
|
|
3395
|
-
"properties": {}
|
|
3396
|
-
}
|
|
3397
|
-
}
|
|
3398
|
-
}
|
|
3399
|
-
},
|
|
3400
3414
|
"responses": {
|
|
3401
3415
|
"200": {
|
|
3402
3416
|
"description": "StarReel envelope",
|
|
@@ -3425,17 +3439,17 @@
|
|
|
3425
3439
|
}
|
|
3426
3440
|
}
|
|
3427
3441
|
},
|
|
3428
|
-
"/
|
|
3442
|
+
"/dramas/{drama_id}/world-concept": {
|
|
3429
3443
|
"post": {
|
|
3430
|
-
"operationId": "
|
|
3431
|
-
"summary": "
|
|
3432
|
-
"description": "
|
|
3444
|
+
"operationId": "generate_world_concept",
|
|
3445
|
+
"summary": "(★默认必做·很多第三方平台漏做这步·仍走报价确认)生成世界观概念图(固定4格:全景/时代/主场景/色彩),提升整剧视觉一致性",
|
|
3446
|
+
"description": "(★默认必做·很多第三方平台漏做这步·仍走报价确认)生成世界观概念图(固定4格:全景/时代/主场景/色彩),提升整剧视觉一致性。★分镜后默认调这个,别跳过;但仍要告知客户预估点数、客户确认才跑(不静默扣费)。需 setting_brief ≥30字。图片步,按固定成本后付、不欠费。",
|
|
3433
3447
|
"tags": [
|
|
3434
|
-
"
|
|
3448
|
+
"dramas"
|
|
3435
3449
|
],
|
|
3436
3450
|
"parameters": [
|
|
3437
3451
|
{
|
|
3438
|
-
"name": "
|
|
3452
|
+
"name": "drama_id",
|
|
3439
3453
|
"in": "path",
|
|
3440
3454
|
"required": true,
|
|
3441
3455
|
"schema": {
|
|
@@ -3472,11 +3486,11 @@
|
|
|
3472
3486
|
}
|
|
3473
3487
|
}
|
|
3474
3488
|
},
|
|
3475
|
-
"/episodes/{episode_id}/
|
|
3476
|
-
"
|
|
3477
|
-
"operationId": "
|
|
3478
|
-
"summary": "
|
|
3479
|
-
"description": "
|
|
3489
|
+
"/episodes/{episode_id}/asset-binding-repair-plan": {
|
|
3490
|
+
"get": {
|
|
3491
|
+
"operationId": "get_asset_binding_repair_plan",
|
|
3492
|
+
"summary": "只读生成一集历史缺失场景绑定的可审核修复提案",
|
|
3493
|
+
"description": "只读生成一集历史缺失场景绑定的可审核修复提案。返回原始地点/时段、候选 ID、匹配依据、歧义和 proposed_scene_id;applied=false,绝不按名字自动回填。逐项核对后才由客户决定是否改绑。免费。",
|
|
3480
3494
|
"tags": [
|
|
3481
3495
|
"episodes"
|
|
3482
3496
|
],
|
|
@@ -3491,64 +3505,6 @@
|
|
|
3491
3505
|
}
|
|
3492
3506
|
}
|
|
3493
3507
|
],
|
|
3494
|
-
"requestBody": {
|
|
3495
|
-
"required": false,
|
|
3496
|
-
"content": {
|
|
3497
|
-
"application/json": {
|
|
3498
|
-
"schema": {
|
|
3499
|
-
"type": "object",
|
|
3500
|
-
"properties": {
|
|
3501
|
-
"bgm_volume_preset": {
|
|
3502
|
-
"type": "string",
|
|
3503
|
-
"enum": [
|
|
3504
|
-
"off",
|
|
3505
|
-
"low",
|
|
3506
|
-
"auto",
|
|
3507
|
-
"high",
|
|
3508
|
-
"inherit"
|
|
3509
|
-
]
|
|
3510
|
-
},
|
|
3511
|
-
"bgm_volume_db": {
|
|
3512
|
-
"anyOf": [
|
|
3513
|
-
{
|
|
3514
|
-
"type": "number",
|
|
3515
|
-
"minimum": -60,
|
|
3516
|
-
"maximum": 0
|
|
3517
|
-
},
|
|
3518
|
-
{
|
|
3519
|
-
"type": "null"
|
|
3520
|
-
}
|
|
3521
|
-
]
|
|
3522
|
-
},
|
|
3523
|
-
"clip_audio_gain_db": {
|
|
3524
|
-
"anyOf": [
|
|
3525
|
-
{
|
|
3526
|
-
"type": "number",
|
|
3527
|
-
"minimum": -30,
|
|
3528
|
-
"maximum": 6
|
|
3529
|
-
},
|
|
3530
|
-
{
|
|
3531
|
-
"type": "null"
|
|
3532
|
-
}
|
|
3533
|
-
]
|
|
3534
|
-
},
|
|
3535
|
-
"voice_gain_db": {
|
|
3536
|
-
"anyOf": [
|
|
3537
|
-
{
|
|
3538
|
-
"type": "number",
|
|
3539
|
-
"minimum": -24,
|
|
3540
|
-
"maximum": 6
|
|
3541
|
-
},
|
|
3542
|
-
{
|
|
3543
|
-
"type": "null"
|
|
3544
|
-
}
|
|
3545
|
-
]
|
|
3546
|
-
}
|
|
3547
|
-
}
|
|
3548
|
-
}
|
|
3549
|
-
}
|
|
3550
|
-
}
|
|
3551
|
-
},
|
|
3552
3508
|
"responses": {
|
|
3553
3509
|
"200": {
|
|
3554
3510
|
"description": "StarReel envelope",
|
|
@@ -3577,11 +3533,11 @@
|
|
|
3577
3533
|
}
|
|
3578
3534
|
}
|
|
3579
3535
|
},
|
|
3580
|
-
"/episodes/{episode_id}/
|
|
3581
|
-
"
|
|
3582
|
-
"operationId": "
|
|
3583
|
-
"summary": "
|
|
3584
|
-
"description": "
|
|
3536
|
+
"/episodes/{episode_id}/asset-recovery": {
|
|
3537
|
+
"get": {
|
|
3538
|
+
"operationId": "get_asset_recovery",
|
|
3539
|
+
"summary": "列本集可恢复的**历史视频产物**(免费·只读):以前生成过、后来被覆盖掉的整集成片与逐镜视频",
|
|
3540
|
+
"description": "列本集可恢复的**历史视频产物**(免费·只读):以前生成过、后来被覆盖掉的整集成片与逐镜视频。\n用途:客户说「上一版那个成片好」「这一镜前天那条视频比现在这条好」时,从这里找回来。\n★★只管视频,**不含图片帧**:首尾帧不在这里,列表里也永远不会出现。客户想换回某一帧 → 用 generate_shot_frame 重出(平台带身份锚),或 upload_shot_frame 登记指定图片 URL(注意它会让该帧从此不被批量重生覆盖)。\n★这一步只看不改。把候选逐条讲给客户,**客户逐条点头**之后再 apply。",
|
|
3585
3541
|
"tags": [
|
|
3586
3542
|
"episodes"
|
|
3587
3543
|
],
|
|
@@ -3596,13 +3552,425 @@
|
|
|
3596
3552
|
}
|
|
3597
3553
|
}
|
|
3598
3554
|
],
|
|
3599
|
-
"
|
|
3600
|
-
"
|
|
3601
|
-
|
|
3602
|
-
"
|
|
3603
|
-
"
|
|
3604
|
-
"
|
|
3605
|
-
|
|
3555
|
+
"responses": {
|
|
3556
|
+
"200": {
|
|
3557
|
+
"description": "StarReel envelope",
|
|
3558
|
+
"content": {
|
|
3559
|
+
"application/json": {
|
|
3560
|
+
"schema": {
|
|
3561
|
+
"type": "object",
|
|
3562
|
+
"properties": {
|
|
3563
|
+
"code": {
|
|
3564
|
+
"type": "integer"
|
|
3565
|
+
},
|
|
3566
|
+
"message": {
|
|
3567
|
+
"type": "string"
|
|
3568
|
+
},
|
|
3569
|
+
"data": {
|
|
3570
|
+
"description": "Operation result payload"
|
|
3571
|
+
}
|
|
3572
|
+
}
|
|
3573
|
+
}
|
|
3574
|
+
}
|
|
3575
|
+
}
|
|
3576
|
+
},
|
|
3577
|
+
"402": {
|
|
3578
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3579
|
+
}
|
|
3580
|
+
}
|
|
3581
|
+
}
|
|
3582
|
+
},
|
|
3583
|
+
"/episodes/{episode_id}/asset-recovery/candidates/{generation_id}/apply": {
|
|
3584
|
+
"post": {
|
|
3585
|
+
"operationId": "apply_recovered_candidate",
|
|
3586
|
+
"summary": "把某条**历史镜头视频**回填到指定镜头(免费,指针切换)",
|
|
3587
|
+
"description": "把某条**历史镜头视频**回填到指定镜头(免费,指针切换)。★它换的是那一镜的**视频**,不是首尾帧。\n★**必须显式指定 target_storyboard_id**:这条视频要回到哪一镜只有客户知道,平台不替你猜——猜错目标镜比不做更糟(会把另一镜正在用的视频换掉)。\n★同样是**逐条确认**:一次只回填一条,先把「哪条视频(时长/提示词)、回到第几镜」讲给客户听。",
|
|
3588
|
+
"tags": [
|
|
3589
|
+
"episodes"
|
|
3590
|
+
],
|
|
3591
|
+
"parameters": [
|
|
3592
|
+
{
|
|
3593
|
+
"name": "episode_id",
|
|
3594
|
+
"in": "path",
|
|
3595
|
+
"required": true,
|
|
3596
|
+
"schema": {
|
|
3597
|
+
"type": "integer",
|
|
3598
|
+
"exclusiveMinimum": 0
|
|
3599
|
+
}
|
|
3600
|
+
},
|
|
3601
|
+
{
|
|
3602
|
+
"name": "generation_id",
|
|
3603
|
+
"in": "path",
|
|
3604
|
+
"required": true,
|
|
3605
|
+
"schema": {
|
|
3606
|
+
"type": "integer",
|
|
3607
|
+
"exclusiveMinimum": 0,
|
|
3608
|
+
"description": "取自 get_asset_recovery 的 candidates[].source_generation_id(响应里没有 id 这个键)"
|
|
3609
|
+
}
|
|
3610
|
+
}
|
|
3611
|
+
],
|
|
3612
|
+
"requestBody": {
|
|
3613
|
+
"required": true,
|
|
3614
|
+
"content": {
|
|
3615
|
+
"application/json": {
|
|
3616
|
+
"schema": {
|
|
3617
|
+
"type": "object",
|
|
3618
|
+
"properties": {
|
|
3619
|
+
"target_storyboard_id": {
|
|
3620
|
+
"type": "integer",
|
|
3621
|
+
"exclusiveMinimum": 0,
|
|
3622
|
+
"description": "回填到哪一镜(必填,不猜)"
|
|
3623
|
+
}
|
|
3624
|
+
},
|
|
3625
|
+
"required": [
|
|
3626
|
+
"target_storyboard_id"
|
|
3627
|
+
]
|
|
3628
|
+
}
|
|
3629
|
+
}
|
|
3630
|
+
}
|
|
3631
|
+
},
|
|
3632
|
+
"responses": {
|
|
3633
|
+
"200": {
|
|
3634
|
+
"description": "StarReel envelope",
|
|
3635
|
+
"content": {
|
|
3636
|
+
"application/json": {
|
|
3637
|
+
"schema": {
|
|
3638
|
+
"type": "object",
|
|
3639
|
+
"properties": {
|
|
3640
|
+
"code": {
|
|
3641
|
+
"type": "integer"
|
|
3642
|
+
},
|
|
3643
|
+
"message": {
|
|
3644
|
+
"type": "string"
|
|
3645
|
+
},
|
|
3646
|
+
"data": {
|
|
3647
|
+
"description": "Operation result payload"
|
|
3648
|
+
}
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
}
|
|
3653
|
+
},
|
|
3654
|
+
"402": {
|
|
3655
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3656
|
+
}
|
|
3657
|
+
}
|
|
3658
|
+
}
|
|
3659
|
+
},
|
|
3660
|
+
"/episodes/{episode_id}/asset-recovery/events/{event_id}/rollback": {
|
|
3661
|
+
"post": {
|
|
3662
|
+
"operationId": "rollback_asset_recovery",
|
|
3663
|
+
"summary": "把一次已应用的恢复**退回去**(免费)",
|
|
3664
|
+
"description": "把一次已应用的恢复**退回去**(免费)。apply 错了就用它撤销,恢复到应用之前的状态(同样只涉及视频)。",
|
|
3665
|
+
"tags": [
|
|
3666
|
+
"episodes"
|
|
3667
|
+
],
|
|
3668
|
+
"parameters": [
|
|
3669
|
+
{
|
|
3670
|
+
"name": "episode_id",
|
|
3671
|
+
"in": "path",
|
|
3672
|
+
"required": true,
|
|
3673
|
+
"schema": {
|
|
3674
|
+
"type": "integer",
|
|
3675
|
+
"exclusiveMinimum": 0
|
|
3676
|
+
}
|
|
3677
|
+
},
|
|
3678
|
+
{
|
|
3679
|
+
"name": "event_id",
|
|
3680
|
+
"in": "path",
|
|
3681
|
+
"required": true,
|
|
3682
|
+
"schema": {
|
|
3683
|
+
"type": "integer",
|
|
3684
|
+
"exclusiveMinimum": 0,
|
|
3685
|
+
"description": "取自 get_asset_recovery 的恢复事件 id"
|
|
3686
|
+
}
|
|
3687
|
+
}
|
|
3688
|
+
],
|
|
3689
|
+
"requestBody": {
|
|
3690
|
+
"required": false,
|
|
3691
|
+
"content": {
|
|
3692
|
+
"application/json": {
|
|
3693
|
+
"schema": {
|
|
3694
|
+
"type": "object",
|
|
3695
|
+
"properties": {}
|
|
3696
|
+
}
|
|
3697
|
+
}
|
|
3698
|
+
}
|
|
3699
|
+
},
|
|
3700
|
+
"responses": {
|
|
3701
|
+
"200": {
|
|
3702
|
+
"description": "StarReel envelope",
|
|
3703
|
+
"content": {
|
|
3704
|
+
"application/json": {
|
|
3705
|
+
"schema": {
|
|
3706
|
+
"type": "object",
|
|
3707
|
+
"properties": {
|
|
3708
|
+
"code": {
|
|
3709
|
+
"type": "integer"
|
|
3710
|
+
},
|
|
3711
|
+
"message": {
|
|
3712
|
+
"type": "string"
|
|
3713
|
+
},
|
|
3714
|
+
"data": {
|
|
3715
|
+
"description": "Operation result payload"
|
|
3716
|
+
}
|
|
3717
|
+
}
|
|
3718
|
+
}
|
|
3719
|
+
}
|
|
3720
|
+
}
|
|
3721
|
+
},
|
|
3722
|
+
"402": {
|
|
3723
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3724
|
+
}
|
|
3725
|
+
}
|
|
3726
|
+
}
|
|
3727
|
+
},
|
|
3728
|
+
"/episodes/{episode_id}/asset-recovery/finals/{merge_id}/apply": {
|
|
3729
|
+
"post": {
|
|
3730
|
+
"operationId": "apply_recovered_final",
|
|
3731
|
+
"summary": "把某个**历史终拼**设为本集当前成片(免费,指针切换)",
|
|
3732
|
+
"description": "把某个**历史终拼**设为本集当前成片(免费,指针切换)。\n★这会**覆盖**本集现在对外的那一版成片。先用 get_asset_recovery 列出来、把是哪一版(时间/时长)讲清楚,**客户逐条确认**再调——不要凭「看起来更好」自己决定。\n★之后重新 compose_episode(终拼)会再把它覆盖回去。",
|
|
3733
|
+
"tags": [
|
|
3734
|
+
"episodes"
|
|
3735
|
+
],
|
|
3736
|
+
"parameters": [
|
|
3737
|
+
{
|
|
3738
|
+
"name": "episode_id",
|
|
3739
|
+
"in": "path",
|
|
3740
|
+
"required": true,
|
|
3741
|
+
"schema": {
|
|
3742
|
+
"type": "integer",
|
|
3743
|
+
"exclusiveMinimum": 0
|
|
3744
|
+
}
|
|
3745
|
+
},
|
|
3746
|
+
{
|
|
3747
|
+
"name": "merge_id",
|
|
3748
|
+
"in": "path",
|
|
3749
|
+
"required": true,
|
|
3750
|
+
"schema": {
|
|
3751
|
+
"type": "integer",
|
|
3752
|
+
"exclusiveMinimum": 0,
|
|
3753
|
+
"description": "取自 get_asset_recovery 的 finals[].id"
|
|
3754
|
+
}
|
|
3755
|
+
}
|
|
3756
|
+
],
|
|
3757
|
+
"requestBody": {
|
|
3758
|
+
"required": false,
|
|
3759
|
+
"content": {
|
|
3760
|
+
"application/json": {
|
|
3761
|
+
"schema": {
|
|
3762
|
+
"type": "object",
|
|
3763
|
+
"properties": {}
|
|
3764
|
+
}
|
|
3765
|
+
}
|
|
3766
|
+
}
|
|
3767
|
+
},
|
|
3768
|
+
"responses": {
|
|
3769
|
+
"200": {
|
|
3770
|
+
"description": "StarReel envelope",
|
|
3771
|
+
"content": {
|
|
3772
|
+
"application/json": {
|
|
3773
|
+
"schema": {
|
|
3774
|
+
"type": "object",
|
|
3775
|
+
"properties": {
|
|
3776
|
+
"code": {
|
|
3777
|
+
"type": "integer"
|
|
3778
|
+
},
|
|
3779
|
+
"message": {
|
|
3780
|
+
"type": "string"
|
|
3781
|
+
},
|
|
3782
|
+
"data": {
|
|
3783
|
+
"description": "Operation result payload"
|
|
3784
|
+
}
|
|
3785
|
+
}
|
|
3786
|
+
}
|
|
3787
|
+
}
|
|
3788
|
+
}
|
|
3789
|
+
},
|
|
3790
|
+
"402": {
|
|
3791
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3792
|
+
}
|
|
3793
|
+
}
|
|
3794
|
+
}
|
|
3795
|
+
},
|
|
3796
|
+
"/episodes/{episode_id}/assign-voices": {
|
|
3797
|
+
"post": {
|
|
3798
|
+
"operationId": "assign_voices",
|
|
3799
|
+
"summary": "★给本集所有角色分配音色(配音导演 agent 按性别/性格/年龄/角色定位+项目语言选)",
|
|
3800
|
+
"description": "★给本集所有角色分配音色(配音导演 agent 按性别/性格/年龄/角色定位+项目语言选)。voiceStyle 不是提取时自动填的——不分配,generate_tts 就没音色。文本步(LLM)后付。已用 set_character_voice 绑了客户自己授权音色的角色会被锁定、不会被改成别的音色。后台异步,轮询 get_pipeline_status:assign_voices=done 即完成,再 generate_tts。",
|
|
3801
|
+
"tags": [
|
|
3802
|
+
"episodes"
|
|
3803
|
+
],
|
|
3804
|
+
"parameters": [
|
|
3805
|
+
{
|
|
3806
|
+
"name": "episode_id",
|
|
3807
|
+
"in": "path",
|
|
3808
|
+
"required": true,
|
|
3809
|
+
"schema": {
|
|
3810
|
+
"type": "integer",
|
|
3811
|
+
"exclusiveMinimum": 0
|
|
3812
|
+
}
|
|
3813
|
+
}
|
|
3814
|
+
],
|
|
3815
|
+
"responses": {
|
|
3816
|
+
"200": {
|
|
3817
|
+
"description": "StarReel envelope",
|
|
3818
|
+
"content": {
|
|
3819
|
+
"application/json": {
|
|
3820
|
+
"schema": {
|
|
3821
|
+
"type": "object",
|
|
3822
|
+
"properties": {
|
|
3823
|
+
"code": {
|
|
3824
|
+
"type": "integer"
|
|
3825
|
+
},
|
|
3826
|
+
"message": {
|
|
3827
|
+
"type": "string"
|
|
3828
|
+
},
|
|
3829
|
+
"data": {
|
|
3830
|
+
"description": "Operation result payload"
|
|
3831
|
+
}
|
|
3832
|
+
}
|
|
3833
|
+
}
|
|
3834
|
+
}
|
|
3835
|
+
}
|
|
3836
|
+
},
|
|
3837
|
+
"402": {
|
|
3838
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3839
|
+
}
|
|
3840
|
+
}
|
|
3841
|
+
}
|
|
3842
|
+
},
|
|
3843
|
+
"/episodes/{episode_id}/audio": {
|
|
3844
|
+
"put": {
|
|
3845
|
+
"operationId": "set_episode_audio",
|
|
3846
|
+
"summary": "设置**本集**成片混音(免费):配乐音量(覆盖整剧设定)、片段原声增益、配音轨增益",
|
|
3847
|
+
"description": "设置**本集**成片混音(免费):配乐音量(覆盖整剧设定)、片段原声增益、配音轨增益。整剧统一的配乐音量用 update_project_settings。★只改设置:成片要 compose_episode 重新合成才变(rerender_episode 用旧时间线,不带上)。★想调某一段配乐的音量、淡入淡出或起点,用 list_bgm_cues + update_bgm_cue。★原声=视频片段自带的声音(原声剧里就是角色台词);配音轨=TTS 生成的对白与旁白(两者在同一轨里预混,只能整轨调,分不开)。★本集若走逐镜合成片终拼(每镜都有合成片),配音已烤进每镜、与原声是同一条音频,这两个增益不生效——响应里会有 warning,照实转告客户。",
|
|
3848
|
+
"tags": [
|
|
3849
|
+
"episodes"
|
|
3850
|
+
],
|
|
3851
|
+
"parameters": [
|
|
3852
|
+
{
|
|
3853
|
+
"name": "episode_id",
|
|
3854
|
+
"in": "path",
|
|
3855
|
+
"required": true,
|
|
3856
|
+
"schema": {
|
|
3857
|
+
"type": "integer",
|
|
3858
|
+
"exclusiveMinimum": 0
|
|
3859
|
+
}
|
|
3860
|
+
}
|
|
3861
|
+
],
|
|
3862
|
+
"requestBody": {
|
|
3863
|
+
"required": false,
|
|
3864
|
+
"content": {
|
|
3865
|
+
"application/json": {
|
|
3866
|
+
"schema": {
|
|
3867
|
+
"type": "object",
|
|
3868
|
+
"properties": {
|
|
3869
|
+
"bgm_volume_preset": {
|
|
3870
|
+
"type": "string",
|
|
3871
|
+
"enum": [
|
|
3872
|
+
"off",
|
|
3873
|
+
"low",
|
|
3874
|
+
"auto",
|
|
3875
|
+
"high",
|
|
3876
|
+
"inherit"
|
|
3877
|
+
]
|
|
3878
|
+
},
|
|
3879
|
+
"bgm_volume_db": {
|
|
3880
|
+
"anyOf": [
|
|
3881
|
+
{
|
|
3882
|
+
"type": "number",
|
|
3883
|
+
"minimum": -60,
|
|
3884
|
+
"maximum": 0
|
|
3885
|
+
},
|
|
3886
|
+
{
|
|
3887
|
+
"type": "null"
|
|
3888
|
+
}
|
|
3889
|
+
]
|
|
3890
|
+
},
|
|
3891
|
+
"clip_audio_gain_db": {
|
|
3892
|
+
"anyOf": [
|
|
3893
|
+
{
|
|
3894
|
+
"type": "number",
|
|
3895
|
+
"minimum": -30,
|
|
3896
|
+
"maximum": 6
|
|
3897
|
+
},
|
|
3898
|
+
{
|
|
3899
|
+
"type": "null"
|
|
3900
|
+
}
|
|
3901
|
+
]
|
|
3902
|
+
},
|
|
3903
|
+
"voice_gain_db": {
|
|
3904
|
+
"anyOf": [
|
|
3905
|
+
{
|
|
3906
|
+
"type": "number",
|
|
3907
|
+
"minimum": -24,
|
|
3908
|
+
"maximum": 6
|
|
3909
|
+
},
|
|
3910
|
+
{
|
|
3911
|
+
"type": "null"
|
|
3912
|
+
}
|
|
3913
|
+
]
|
|
3914
|
+
}
|
|
3915
|
+
}
|
|
3916
|
+
}
|
|
3917
|
+
}
|
|
3918
|
+
}
|
|
3919
|
+
},
|
|
3920
|
+
"responses": {
|
|
3921
|
+
"200": {
|
|
3922
|
+
"description": "StarReel envelope",
|
|
3923
|
+
"content": {
|
|
3924
|
+
"application/json": {
|
|
3925
|
+
"schema": {
|
|
3926
|
+
"type": "object",
|
|
3927
|
+
"properties": {
|
|
3928
|
+
"code": {
|
|
3929
|
+
"type": "integer"
|
|
3930
|
+
},
|
|
3931
|
+
"message": {
|
|
3932
|
+
"type": "string"
|
|
3933
|
+
},
|
|
3934
|
+
"data": {
|
|
3935
|
+
"description": "Operation result payload"
|
|
3936
|
+
}
|
|
3937
|
+
}
|
|
3938
|
+
}
|
|
3939
|
+
}
|
|
3940
|
+
}
|
|
3941
|
+
},
|
|
3942
|
+
"402": {
|
|
3943
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
3944
|
+
}
|
|
3945
|
+
}
|
|
3946
|
+
}
|
|
3947
|
+
},
|
|
3948
|
+
"/episodes/{episode_id}/audit-seams": {
|
|
3949
|
+
"post": {
|
|
3950
|
+
"operationId": "audit_seams",
|
|
3951
|
+
"summary": "审核当前双边帧的剪辑连续性,只检查、不重生、不替换资产",
|
|
3952
|
+
"description": "审核当前双边帧的剪辑连续性,只检查、不重生、不替换资产。默认 dry_run=true 返回待审范围,不收费。插入细节仅检查物体身份和状态,不要求复制构图。已有当前有效结论不重复审核。执行会按实际文本 token 用量计费,estimated_points=null 表示金额未报价,并非免费。先展示计划和计费方式,经客户明确接受后才传 dry_run=false 与 confirm_usage_billing=true。执行后用 get_storyboards 的 seam_review 检查实际结果;attempted 不代表通过。",
|
|
3953
|
+
"tags": [
|
|
3954
|
+
"episodes"
|
|
3955
|
+
],
|
|
3956
|
+
"parameters": [
|
|
3957
|
+
{
|
|
3958
|
+
"name": "episode_id",
|
|
3959
|
+
"in": "path",
|
|
3960
|
+
"required": true,
|
|
3961
|
+
"schema": {
|
|
3962
|
+
"type": "integer",
|
|
3963
|
+
"exclusiveMinimum": 0
|
|
3964
|
+
}
|
|
3965
|
+
}
|
|
3966
|
+
],
|
|
3967
|
+
"requestBody": {
|
|
3968
|
+
"required": false,
|
|
3969
|
+
"content": {
|
|
3970
|
+
"application/json": {
|
|
3971
|
+
"schema": {
|
|
3972
|
+
"type": "object",
|
|
3973
|
+
"properties": {
|
|
3606
3974
|
"dry_run": {
|
|
3607
3975
|
"type": "boolean"
|
|
3608
3976
|
},
|
|
@@ -5491,7 +5859,7 @@
|
|
|
5491
5859
|
"post": {
|
|
5492
5860
|
"operationId": "extract_assets",
|
|
5493
5861
|
"summary": "从可拍稿提取角色/场景/道具(一次写三表,是下游一致性的地基)",
|
|
5494
|
-
"description": "从可拍稿提取角色/场景/道具(一次写三表,是下游一致性的地基)。后台异步,文本步后付不欠费。前置:已 rewrite_script 产出改写稿(新项目强制;人物档案从改写稿提取才与剧本、分镜自洽)。★分钟级后台任务;用 get_run_status 判断是否还在跑,别拿 60 秒当失败判据。\n★【改写稿审查硬闸·免费】本步前必须先调 review_script:把返回的 findings 逐条原样告诉客户(每条带 code=问题类型、shots=命中镜号、action=该调哪个工具修),再把 review_token 传进本工具。未审查会被 400 拒。审查后又改了内容 → token 自动失效,复审一次即可(仍免费)。有 error 时默认拦截;客户知情并坚持照现状继续,才带 acknowledge_review:true——带病推进大概率产出废片且照常扣费,不要替客户做这个决定。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱)——★**要跑全集就先 run_drama_precheck**(剧级汇总·免费·只读):一次拿到每集问题数与 attention(该先修哪几集),按它定优先级,再对那几集跑 run_precheck 拿逐条明细;别一集一集盲扫。注意它的 not_covered——剧级跳过唯一要看图的那道 lint,「全剧 0 条」≠「全查过了」。★揪出来之后别自己盲改:plan_precheck_fix 让平台算出提案 → 逐条讲给客户 → 客户点头后 apply_precheck_fix 落库;分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→★generate_color_script(色彩脚本·统一调色)→assign_voices(分配音色;旁白/角色库里没合适的→design_voice 按描述造一个,定样后 set_character_voice)→★quote_scene_images+generate_scene_images(空景基板·出帧前必做)→frames(默认只出首帧)→★tail_frame_plan(免费·哪几镜要独立尾帧)→frames(frame_type=last_frame)→★review_frames→videos→generate_tts→compose;★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。★★【尾帧被 TERMINAL_DESC_GATE 拦下时:改文本,不是重试】报「此镜标为状态改变,但没有任何地方说明结束时是什么样子」的镜,用 update_shot 把**结束时画面什么样**写进该镜 last_frame_prompt,再重出尾帧。★更好的是**别撞**:出尾帧前先 get_storyboards 看一眼,terminal_desc_missing=true 的镜整集一次就列出来了(免费),先把它们的 last_frame_prompt 补齐再出,一次都不用被拒。逐镜也能问(get_shot_prompts 同名字段),但一集几十镜别那么干。不补描述直接重试是无效的——送厂商的提示词里根本没有终态段,画出来仍是首帧那个姿态、必然再次被终态审核拒,而每次都照常扣费(生产实测:没写终态的镜尾帧成功率 9.4%,写了的 40.2%)。确实该「几乎不变」的镜才用 generate_shot_frame 的 allow_missing_terminal 放行。★★【空景基板别跳·这一步长期被第三方漏掉】场景图是**背景锚**:同一场的每个镜头帧都锚在它上面。不出基板照样能出帧、不报错、不拦你——代价是**每个场景的第一镜完全没有背景锚**(平台的兜底补图是「发现缺图就后台补一张」,补的那张给同场景后续镜用,触发它的那一镜自己等不到),而首镜往往正是定调的那一镜;后续镜之间背景也会漂。它跟定妆图是一对:定妆图锚人、场景图锚景,缺哪个漂哪个。进度自检看 `get_pipeline_status` 的 generate_scene_images 步(completed/total),`review_storyboards` 也会在出帧前把缺口报成 scene_plate_missing。★★【设定图别跳·定妆图≠设定图】定妆图是单人单张的身份锚;设定图是平台据定妆图生成的多视角 turnaround,是镜头帧/视频的一致性根锚(换角度·换光·服装几乎全靠它)。只出定妆图照样能出帧、不报错——代价是人物一换角度就漂、服装每镜不一样。用 generate_portraits_and_sheets 一键两步(每调一次推进一步,定妆图齐了再调一次才出设定图),或定妆图后接 generate_character_sheets。进度自检看 get_pipeline_status 的 generate_character_sheets 步(completed/total,portrait_only=只有定妆图的角色数)。★客户自带图:定妆图须单人、单张单角度、无文字;场景图须空景无人、无叠加文字——set_character_portrait/upload_scene_image 会自动检查、不合规 422 拒收。★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。★★【原声剧先锁声线,再批量出视频】use_clip_audio=true(默认)时每镜嗓音由视频厂商各自采样,不锁必漂,事后统一要逐镜重出。有客户授权音源→clone_voice+set_character_voice,在 generate_videos 之前;没有→每个说话角色先出一镜台词较长的,用 set_voice_anchor_from_shot 从那一镜选定声线,再出其余镜。get_pipeline_status 的 native_voice_anchor 会列出还没锁的 unanchored_speakers 和锁之前出的、需要重出的 stale_shots。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★★【色彩脚本】generate_color_script 统一全片调色,分镜后、出帧前做;文本步无 quote_*,按用量后付。进度自检看 get_pipeline_status 的 generate_color_script,review_storyboards 会报色彩脚本缺口。★动作模板为可选实验:generate_motion_templates(动作模板提取)仅客户明确要求时在分镜后调用,文本步按用量后付。首尾帧默认不注入动作模板;缺模板无需补做,不阻碍出图、出视频或成片。视频模板可能被裁剪,不承诺送达或增益。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\")。★首帧出完调免费的 tail_frame_plan 看哪几镜要独立尾帧,再 frame_type=last_frame 批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
5862
|
+
"description": "从可拍稿提取角色/场景/道具(一次写三表,是下游一致性的地基)。后台异步,文本步后付不欠费。前置:已 rewrite_script 产出改写稿(新项目强制;人物档案从改写稿提取才与剧本、分镜自洽)。★分钟级后台任务;用 get_run_status 判断是否还在跑,别拿 60 秒当失败判据。\n★【改写稿审查硬闸·免费】本步前必须先调 review_script:把返回的 findings 逐条原样告诉客户(每条带 code=问题类型、shots=命中镜号、action=该调哪个工具修),再把 review_token 传进本工具。未审查会被 400 拒。审查后又改了内容 → token 自动失效,复审一次即可(仍免费)。有 error 时默认拦截;客户知情并坚持照现状继续,才带 acknowledge_review:true——带病推进大概率产出废片且照常扣费,不要替客户做这个决定。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱)——★**要跑全集就先 run_drama_precheck**(剧级汇总·免费·只读):一次拿到每集问题数与 attention(该先修哪几集),按它定优先级,再对那几集跑 run_precheck 拿逐条明细;别一集一集盲扫。注意它的 not_covered——剧级跳过唯一要看图的那道 lint,「全剧 0 条」≠「全查过了」。★揪出来之后别自己盲改:plan_precheck_fix 让平台算出提案 → 逐条讲给客户 → 客户点头后 apply_precheck_fix 落库;分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→★generate_color_script(色彩脚本·统一调色)→assign_voices(分配音色;旁白/角色库里没合适的→design_voice 按描述造一个,定样后 set_character_voice)→★quote_scene_images+generate_scene_images(空景基板·出帧前必做)→frames(默认只出首帧)→★tail_frame_plan(免费·哪几镜要独立尾帧)→frames(frame_type=last_frame)→★review_frames→videos→generate_tts→compose;★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。★★【尾帧被 TERMINAL_DESC_GATE 拦下时:改文本,不是重试】报「此镜标为状态改变,但没有任何地方说明结束时是什么样子」的镜,用 update_shot 把**结束时画面什么样**写进该镜 last_frame_prompt,再重出尾帧。★更好的是**别撞**:出尾帧前先 get_storyboards 看一眼,terminal_desc_missing=true 的镜整集一次就列出来了(免费),先把它们的 last_frame_prompt 补齐再出,一次都不用被拒。逐镜也能问(get_shot_prompts 同名字段),但一集几十镜别那么干。不补描述直接重试是无效的——送厂商的提示词里根本没有终态段,画出来仍是首帧那个姿态、必然再次被终态审核拒,而每次都照常扣费(生产实测:没写终态的镜尾帧成功率 9.4%,写了的 40.2%)。确实该「几乎不变」的镜才用 generate_shot_frame 的 allow_missing_terminal 放行。★★【空景基板别跳·这一步长期被第三方漏掉】场景图是**背景锚**:同一场的每个镜头帧都锚在它上面。不出基板照样能出帧、不报错、不拦你——代价是**每个场景的第一镜完全没有背景锚**(平台的兜底补图是「发现缺图就后台补一张」,补的那张给同场景后续镜用,触发它的那一镜自己等不到),而首镜往往正是定调的那一镜;后续镜之间背景也会漂。它跟定妆图是一对:定妆图锚人、场景图锚景,缺哪个漂哪个。进度自检看 `get_pipeline_status` 的 generate_scene_images 步(completed/total),`review_storyboards` 也会在出帧前把缺口报成 scene_plate_missing。★★【设定图别跳·定妆图≠设定图】定妆图是单人单张的身份锚;设定图是平台据定妆图生成的多视角 turnaround,是镜头帧/视频的一致性根锚(换角度·换光·服装几乎全靠它)。只出定妆图照样能出帧、不报错——代价是人物一换角度就漂、服装每镜不一样。用 generate_portraits_and_sheets 一键两步(每调一次推进一步,定妆图齐了再调一次才出设定图),或定妆图后接 generate_character_sheets。进度自检看 get_pipeline_status 的 generate_character_sheets 步(completed/total,portrait_only=只有定妆图的角色数)。★客户自带图:定妆图须单人、单张单角度、无文字;场景图须空景无人、无叠加文字——set_character_portrait/upload_scene_image 会自动检查、不合规 422 拒收。★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script(没有现成歌曲:set_mv_lyrics 后先 suggest_mv_song_styles→quote_mv_song→generate_mv_song→get_mv_song→select_mv_song)。★★【原声剧先锁声线,再批量出视频】use_clip_audio=true(默认)时每镜嗓音由视频厂商各自采样,不锁必漂,事后统一要逐镜重出。有客户授权音源→clone_voice+set_character_voice,在 generate_videos 之前;没有→每个说话角色先出一镜台词较长的,用 set_voice_anchor_from_shot 从那一镜选定声线,再出其余镜。get_pipeline_status 的 native_voice_anchor 会列出还没锁的 unanchored_speakers 和锁之前出的、需要重出的 stale_shots。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★★【色彩脚本】generate_color_script 统一全片调色,分镜后、出帧前做;文本步无 quote_*,按用量后付。进度自检看 get_pipeline_status 的 generate_color_script,review_storyboards 会报色彩脚本缺口。★动作模板为可选实验:generate_motion_templates(动作模板提取)仅客户明确要求时在分镜后调用,文本步按用量后付。首尾帧默认不注入动作模板;缺模板无需补做,不阻碍出图、出视频或成片。视频模板可能被裁剪,不承诺送达或增益。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\")。★首帧出完调免费的 tail_frame_plan 看哪几镜要独立尾帧,再 frame_type=last_frame 批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
5495
5863
|
"tags": [
|
|
5496
5864
|
"episodes"
|
|
5497
5865
|
],
|
|
@@ -6869,7 +7237,7 @@
|
|
|
6869
7237
|
"post": {
|
|
6870
7238
|
"operationId": "rewrite_script",
|
|
6871
7239
|
"summary": "AI 改写:把原始剧本改写成可拍稿(读 content → 写 script_content)",
|
|
6872
|
-
"description": "AI 改写:把原始剧本改写成可拍稿(读 content → 写 script_content)。按项目类型自动选改写 agent★保真自动路由:原稿已是剧本形态时自动走两步保真(台词逐句机器锁定、AI 不加戏,剧作缺口进 dramaturgy_suggestions 由客户决定);原稿是小说/大纲则走创作型改写。(广告走 ad 改写;MV 不走标准改写会被拦)。后台异步(分钟级),文本步按 token 后付、不欠费,无需报价。完成后用 get_script 审阅、edit_rewritten_script 改稿。★典型耗时 2~4 分钟(生产实测 ≈169 秒)。**60 秒内查不到结果是正常的,不是失败**——用 get_run_status 判断还在不在跑,别急着重发。★★**本工具是\"从原稿整篇重来\",不是\"再改一版\"**:已有可拍稿时重跑会把当前稿连同已做的所有修正一起覆盖,而且新一版**不保证保留旧版已经改好的地方**(生产三版实测:上一版拆好的长旁白段下一版又合回去、上一版正确的年代服装下一版漂走)。响应里的 overwrites_existing_script=true 就是这个意思。所以**首次改写成功之后,后续所有修改一律用 edit_rewritten_script 点改**——免费、秒级、只动指定的那几场,其余逐字不变,结果确定不抽卡;只有\"要一个完全不同的版本\"才重跑本工具。误重跑后用 get_script(include_previous=1) 取回上一版。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱)——★**要跑全集就先 run_drama_precheck**(剧级汇总·免费·只读):一次拿到每集问题数与 attention(该先修哪几集),按它定优先级,再对那几集跑 run_precheck 拿逐条明细;别一集一集盲扫。注意它的 not_covered——剧级跳过唯一要看图的那道 lint,「全剧 0 条」≠「全查过了」。★揪出来之后别自己盲改:plan_precheck_fix 让平台算出提案 → 逐条讲给客户 → 客户点头后 apply_precheck_fix 落库;分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→★generate_color_script(色彩脚本·统一调色)→assign_voices(分配音色;旁白/角色库里没合适的→design_voice 按描述造一个,定样后 set_character_voice)→★quote_scene_images+generate_scene_images(空景基板·出帧前必做)→frames(默认只出首帧)→★tail_frame_plan(免费·哪几镜要独立尾帧)→frames(frame_type=last_frame)→★review_frames→videos→generate_tts→compose;★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。★★【尾帧被 TERMINAL_DESC_GATE 拦下时:改文本,不是重试】报「此镜标为状态改变,但没有任何地方说明结束时是什么样子」的镜,用 update_shot 把**结束时画面什么样**写进该镜 last_frame_prompt,再重出尾帧。★更好的是**别撞**:出尾帧前先 get_storyboards 看一眼,terminal_desc_missing=true 的镜整集一次就列出来了(免费),先把它们的 last_frame_prompt 补齐再出,一次都不用被拒。逐镜也能问(get_shot_prompts 同名字段),但一集几十镜别那么干。不补描述直接重试是无效的——送厂商的提示词里根本没有终态段,画出来仍是首帧那个姿态、必然再次被终态审核拒,而每次都照常扣费(生产实测:没写终态的镜尾帧成功率 9.4%,写了的 40.2%)。确实该「几乎不变」的镜才用 generate_shot_frame 的 allow_missing_terminal 放行。★★【空景基板别跳·这一步长期被第三方漏掉】场景图是**背景锚**:同一场的每个镜头帧都锚在它上面。不出基板照样能出帧、不报错、不拦你——代价是**每个场景的第一镜完全没有背景锚**(平台的兜底补图是「发现缺图就后台补一张」,补的那张给同场景后续镜用,触发它的那一镜自己等不到),而首镜往往正是定调的那一镜;后续镜之间背景也会漂。它跟定妆图是一对:定妆图锚人、场景图锚景,缺哪个漂哪个。进度自检看 `get_pipeline_status` 的 generate_scene_images 步(completed/total),`review_storyboards` 也会在出帧前把缺口报成 scene_plate_missing。★★【设定图别跳·定妆图≠设定图】定妆图是单人单张的身份锚;设定图是平台据定妆图生成的多视角 turnaround,是镜头帧/视频的一致性根锚(换角度·换光·服装几乎全靠它)。只出定妆图照样能出帧、不报错——代价是人物一换角度就漂、服装每镜不一样。用 generate_portraits_and_sheets 一键两步(每调一次推进一步,定妆图齐了再调一次才出设定图),或定妆图后接 generate_character_sheets。进度自检看 get_pipeline_status 的 generate_character_sheets 步(completed/total,portrait_only=只有定妆图的角色数)。★客户自带图:定妆图须单人、单张单角度、无文字;场景图须空景无人、无叠加文字——set_character_portrait/upload_scene_image 会自动检查、不合规 422 拒收。★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。★★【原声剧先锁声线,再批量出视频】use_clip_audio=true(默认)时每镜嗓音由视频厂商各自采样,不锁必漂,事后统一要逐镜重出。有客户授权音源→clone_voice+set_character_voice,在 generate_videos 之前;没有→每个说话角色先出一镜台词较长的,用 set_voice_anchor_from_shot 从那一镜选定声线,再出其余镜。get_pipeline_status 的 native_voice_anchor 会列出还没锁的 unanchored_speakers 和锁之前出的、需要重出的 stale_shots。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★★【色彩脚本】generate_color_script 统一全片调色,分镜后、出帧前做;文本步无 quote_*,按用量后付。进度自检看 get_pipeline_status 的 generate_color_script,review_storyboards 会报色彩脚本缺口。★动作模板为可选实验:generate_motion_templates(动作模板提取)仅客户明确要求时在分镜后调用,文本步按用量后付。首尾帧默认不注入动作模板;缺模板无需补做,不阻碍出图、出视频或成片。视频模板可能被裁剪,不承诺送达或增益。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\")。★首帧出完调免费的 tail_frame_plan 看哪几镜要独立尾帧,再 frame_type=last_frame 批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
7240
|
+
"description": "AI 改写:把原始剧本改写成可拍稿(读 content → 写 script_content)。按项目类型自动选改写 agent★保真自动路由:原稿已是剧本形态时自动走两步保真(台词逐句机器锁定、AI 不加戏,剧作缺口进 dramaturgy_suggestions 由客户决定);原稿是小说/大纲则走创作型改写。(广告走 ad 改写;MV 不走标准改写会被拦)。后台异步(分钟级),文本步按 token 后付、不欠费,无需报价。完成后用 get_script 审阅、edit_rewritten_script 改稿。★典型耗时 2~4 分钟(生产实测 ≈169 秒)。**60 秒内查不到结果是正常的,不是失败**——用 get_run_status 判断还在不在跑,别急着重发。★★**本工具是\"从原稿整篇重来\",不是\"再改一版\"**:已有可拍稿时重跑会把当前稿连同已做的所有修正一起覆盖,而且新一版**不保证保留旧版已经改好的地方**(生产三版实测:上一版拆好的长旁白段下一版又合回去、上一版正确的年代服装下一版漂走)。响应里的 overwrites_existing_script=true 就是这个意思。所以**首次改写成功之后,后续所有修改一律用 edit_rewritten_script 点改**——免费、秒级、只动指定的那几场,其余逐字不变,结果确定不抽卡;只有\"要一个完全不同的版本\"才重跑本工具。误重跑后用 get_script(include_previous=1) 取回上一版。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱)——★**要跑全集就先 run_drama_precheck**(剧级汇总·免费·只读):一次拿到每集问题数与 attention(该先修哪几集),按它定优先级,再对那几集跑 run_precheck 拿逐条明细;别一集一集盲扫。注意它的 not_covered——剧级跳过唯一要看图的那道 lint,「全剧 0 条」≠「全查过了」。★揪出来之后别自己盲改:plan_precheck_fix 让平台算出提案 → 逐条讲给客户 → 客户点头后 apply_precheck_fix 落库;分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→★generate_color_script(色彩脚本·统一调色)→assign_voices(分配音色;旁白/角色库里没合适的→design_voice 按描述造一个,定样后 set_character_voice)→★quote_scene_images+generate_scene_images(空景基板·出帧前必做)→frames(默认只出首帧)→★tail_frame_plan(免费·哪几镜要独立尾帧)→frames(frame_type=last_frame)→★review_frames→videos→generate_tts→compose;★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。★★【尾帧被 TERMINAL_DESC_GATE 拦下时:改文本,不是重试】报「此镜标为状态改变,但没有任何地方说明结束时是什么样子」的镜,用 update_shot 把**结束时画面什么样**写进该镜 last_frame_prompt,再重出尾帧。★更好的是**别撞**:出尾帧前先 get_storyboards 看一眼,terminal_desc_missing=true 的镜整集一次就列出来了(免费),先把它们的 last_frame_prompt 补齐再出,一次都不用被拒。逐镜也能问(get_shot_prompts 同名字段),但一集几十镜别那么干。不补描述直接重试是无效的——送厂商的提示词里根本没有终态段,画出来仍是首帧那个姿态、必然再次被终态审核拒,而每次都照常扣费(生产实测:没写终态的镜尾帧成功率 9.4%,写了的 40.2%)。确实该「几乎不变」的镜才用 generate_shot_frame 的 allow_missing_terminal 放行。★★【空景基板别跳·这一步长期被第三方漏掉】场景图是**背景锚**:同一场的每个镜头帧都锚在它上面。不出基板照样能出帧、不报错、不拦你——代价是**每个场景的第一镜完全没有背景锚**(平台的兜底补图是「发现缺图就后台补一张」,补的那张给同场景后续镜用,触发它的那一镜自己等不到),而首镜往往正是定调的那一镜;后续镜之间背景也会漂。它跟定妆图是一对:定妆图锚人、场景图锚景,缺哪个漂哪个。进度自检看 `get_pipeline_status` 的 generate_scene_images 步(completed/total),`review_storyboards` 也会在出帧前把缺口报成 scene_plate_missing。★★【设定图别跳·定妆图≠设定图】定妆图是单人单张的身份锚;设定图是平台据定妆图生成的多视角 turnaround,是镜头帧/视频的一致性根锚(换角度·换光·服装几乎全靠它)。只出定妆图照样能出帧、不报错——代价是人物一换角度就漂、服装每镜不一样。用 generate_portraits_and_sheets 一键两步(每调一次推进一步,定妆图齐了再调一次才出设定图),或定妆图后接 generate_character_sheets。进度自检看 get_pipeline_status 的 generate_character_sheets 步(completed/total,portrait_only=只有定妆图的角色数)。★客户自带图:定妆图须单人、单张单角度、无文字;场景图须空景无人、无叠加文字——set_character_portrait/upload_scene_image 会自动检查、不合规 422 拒收。★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script(没有现成歌曲:set_mv_lyrics 后先 suggest_mv_song_styles→quote_mv_song→generate_mv_song→get_mv_song→select_mv_song)。★★【原声剧先锁声线,再批量出视频】use_clip_audio=true(默认)时每镜嗓音由视频厂商各自采样,不锁必漂,事后统一要逐镜重出。有客户授权音源→clone_voice+set_character_voice,在 generate_videos 之前;没有→每个说话角色先出一镜台词较长的,用 set_voice_anchor_from_shot 从那一镜选定声线,再出其余镜。get_pipeline_status 的 native_voice_anchor 会列出还没锁的 unanchored_speakers 和锁之前出的、需要重出的 stale_shots。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★★【色彩脚本】generate_color_script 统一全片调色,分镜后、出帧前做;文本步无 quote_*,按用量后付。进度自检看 get_pipeline_status 的 generate_color_script,review_storyboards 会报色彩脚本缺口。★动作模板为可选实验:generate_motion_templates(动作模板提取)仅客户明确要求时在分镜后调用,文本步按用量后付。首尾帧默认不注入动作模板;缺模板无需补做,不阻碍出图、出视频或成片。视频模板可能被裁剪,不承诺送达或增益。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\")。★首帧出完调免费的 tail_frame_plan 看哪几镜要独立尾帧,再 frame_type=last_frame 批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
6873
7241
|
"tags": [
|
|
6874
7242
|
"episodes"
|
|
6875
7243
|
],
|
|
@@ -7313,7 +7681,7 @@
|
|
|
7313
7681
|
"put": {
|
|
7314
7682
|
"operationId": "set_script",
|
|
7315
7683
|
"summary": "给某一集设置**原始剧本**(content)",
|
|
7316
|
-
"description": "给某一集设置**原始剧本**(content)。这是 AI 改写的输入,不是最终可拍稿。免费。梗概/大纲/自己写好的成品稿都放这里,设完**必须调 rewrite_script 做 AI 改写**——不能跳过改写直接把稿子贴进 edit_rewritten_script(会被拒)。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱)——★**要跑全集就先 run_drama_precheck**(剧级汇总·免费·只读):一次拿到每集问题数与 attention(该先修哪几集),按它定优先级,再对那几集跑 run_precheck 拿逐条明细;别一集一集盲扫。注意它的 not_covered——剧级跳过唯一要看图的那道 lint,「全剧 0 条」≠「全查过了」。★揪出来之后别自己盲改:plan_precheck_fix 让平台算出提案 → 逐条讲给客户 → 客户点头后 apply_precheck_fix 落库;分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→★generate_color_script(色彩脚本·统一调色)→assign_voices(分配音色;旁白/角色库里没合适的→design_voice 按描述造一个,定样后 set_character_voice)→★quote_scene_images+generate_scene_images(空景基板·出帧前必做)→frames(默认只出首帧)→★tail_frame_plan(免费·哪几镜要独立尾帧)→frames(frame_type=last_frame)→★review_frames→videos→generate_tts→compose;★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。★★【尾帧被 TERMINAL_DESC_GATE 拦下时:改文本,不是重试】报「此镜标为状态改变,但没有任何地方说明结束时是什么样子」的镜,用 update_shot 把**结束时画面什么样**写进该镜 last_frame_prompt,再重出尾帧。★更好的是**别撞**:出尾帧前先 get_storyboards 看一眼,terminal_desc_missing=true 的镜整集一次就列出来了(免费),先把它们的 last_frame_prompt 补齐再出,一次都不用被拒。逐镜也能问(get_shot_prompts 同名字段),但一集几十镜别那么干。不补描述直接重试是无效的——送厂商的提示词里根本没有终态段,画出来仍是首帧那个姿态、必然再次被终态审核拒,而每次都照常扣费(生产实测:没写终态的镜尾帧成功率 9.4%,写了的 40.2%)。确实该「几乎不变」的镜才用 generate_shot_frame 的 allow_missing_terminal 放行。★★【空景基板别跳·这一步长期被第三方漏掉】场景图是**背景锚**:同一场的每个镜头帧都锚在它上面。不出基板照样能出帧、不报错、不拦你——代价是**每个场景的第一镜完全没有背景锚**(平台的兜底补图是「发现缺图就后台补一张」,补的那张给同场景后续镜用,触发它的那一镜自己等不到),而首镜往往正是定调的那一镜;后续镜之间背景也会漂。它跟定妆图是一对:定妆图锚人、场景图锚景,缺哪个漂哪个。进度自检看 `get_pipeline_status` 的 generate_scene_images 步(completed/total),`review_storyboards` 也会在出帧前把缺口报成 scene_plate_missing。★★【设定图别跳·定妆图≠设定图】定妆图是单人单张的身份锚;设定图是平台据定妆图生成的多视角 turnaround,是镜头帧/视频的一致性根锚(换角度·换光·服装几乎全靠它)。只出定妆图照样能出帧、不报错——代价是人物一换角度就漂、服装每镜不一样。用 generate_portraits_and_sheets 一键两步(每调一次推进一步,定妆图齐了再调一次才出设定图),或定妆图后接 generate_character_sheets。进度自检看 get_pipeline_status 的 generate_character_sheets 步(completed/total,portrait_only=只有定妆图的角色数)。★客户自带图:定妆图须单人、单张单角度、无文字;场景图须空景无人、无叠加文字——set_character_portrait/upload_scene_image 会自动检查、不合规 422 拒收。★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。★★【原声剧先锁声线,再批量出视频】use_clip_audio=true(默认)时每镜嗓音由视频厂商各自采样,不锁必漂,事后统一要逐镜重出。有客户授权音源→clone_voice+set_character_voice,在 generate_videos 之前;没有→每个说话角色先出一镜台词较长的,用 set_voice_anchor_from_shot 从那一镜选定声线,再出其余镜。get_pipeline_status 的 native_voice_anchor 会列出还没锁的 unanchored_speakers 和锁之前出的、需要重出的 stale_shots。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★★【色彩脚本】generate_color_script 统一全片调色,分镜后、出帧前做;文本步无 quote_*,按用量后付。进度自检看 get_pipeline_status 的 generate_color_script,review_storyboards 会报色彩脚本缺口。★动作模板为可选实验:generate_motion_templates(动作模板提取)仅客户明确要求时在分镜后调用,文本步按用量后付。首尾帧默认不注入动作模板;缺模板无需补做,不阻碍出图、出视频或成片。视频模板可能被裁剪,不承诺送达或增益。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\")。★首帧出完调免费的 tail_frame_plan 看哪几镜要独立尾帧,再 frame_type=last_frame 批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
7684
|
+
"description": "给某一集设置**原始剧本**(content)。这是 AI 改写的输入,不是最终可拍稿。免费。梗概/大纲/自己写好的成品稿都放这里,设完**必须调 rewrite_script 做 AI 改写**——不能跳过改写直接把稿子贴进 edit_rewritten_script(会被拒)。★三档执行策略(别把三档混着问客户):①【基础项目设定·免费·必做地基·建剧即设好,别建空壳】project_type/setting_brief(世界观·ERA LOCK)/ethnicity(族裔)/画幅分辨率,以及一致性锚 cinematography_prompt(摄影DNA)·art_bible(美术圣经)·visual_lock(视觉锁定)——全免费,是驱动全链一致性的地基;不设好,后续所有生成都跑偏、返工重花钱。用 create_drama/update_project_settings 直接设。★visual_lock/art_bible 只写画面级/世界级锁(镜头语言·环境·美术基调·禁入元素),**绝不为具体角色钉服装/发型/外观细节**——角色外观的唯一真相源是 extract_assets 产出的人物档案(要改走 update_character);两处都写必然互相矛盾,定妆图跟档案、设定图跟视觉锁,一致性闸按定妆图拒收 → 设定图/镜头帧**结构性连拒**,重掷多少次都过不了、纯白花钱。★★【时代契约·免费·非现代题材出图前必设】setting_brief 里的世界观是**自由文本**,只能提供背景、压不住画面;真正能压过视觉锁的是**结构化时代契约**:用 set_era_contract 设本集档位(modern/republican/historical/fantasy),get_era_contract 读现值。**不设就是空着**——平台只能靠提示词正文堆字对抗,现代物件混进古代画面、场景图画成别的时代,基本都由这里空着导致。★仙侠/奇幻/仙境类**必须填 fantasy,别填 historical**:后者要求考据写实,会把发光灵气、悬浮地貌、非人化形一并判成「不合时代」,把画面往写实古代拽。某一场要破例(如奇幻世界里一场现代回忆)用 update_scene 的 era_contract 单独覆写,场级压过集级。★★【逐环节审查协议·全部免费·这是防废片的主线,不是可选项】每个环节产出后先审查、把结论原样告诉客户,再进下一步。**三道硬闸(不过会被 400 拒)**:①改写稿产出后 → review_script(在 extract_assets / generate_storyboards 之前);②分镜产出后 → review_storyboards(在 generate_frames 之前);③镜头图片产出后 → review_frames(在 generate_videos 之前)。每次审查返回 review_token,把它随下游收费工具一起传;findings 逐条讲给客户(code=问题类型·shots=命中镜号·action=该调哪个工具修),按 action 修完后**复审**再走。审查后又改了内容 → token 自动失效,复审一次即可(免费)。有 error 时默认拦截,只有客户明确知情并坚持才带 acknowledge_review:true——别替客户做这个决定。**软引导(不阻断但强烈建议,同样免费)**:出图/出视频前跑 run_precheck(揪出必被厂商拒的镜,防白花钱)——★**要跑全集就先 run_drama_precheck**(剧级汇总·免费·只读):一次拿到每集问题数与 attention(该先修哪几集),按它定优先级,再对那几集跑 run_precheck 拿逐条明细;别一集一集盲扫。注意它的 not_covered——剧级跳过唯一要看图的那道 lint,「全剧 0 条」≠「全查过了」。★揪出来之后别自己盲改:plan_precheck_fix 让平台算出提案 → 逐条讲给客户 → 客户点头后 apply_precheck_fix 落库;分镜后跑 get_health_report;定妆图出完用 get_characters 核对每个出场角色都有 image/sheet;出帧后用 get_storyboards 看 frame_status 与 fail_reason/fail_hint(failed 的镜先修再往下,别带着废帧出视频);出视频后同样看 video_status;成片前用 get_pipeline_status 确认没有缺镜。★**禁止一路 generate 到底**:不审查就连推的做法,问题会在每一层被放大,最后整集废掉重来——而重来的每一次出图/出视频都是真扣费。审查全部免费,拦下来一分钱不花。②【产线主干·按序不跳步·★先分镜再建资产】set_script→rewrite_script→★review_script→extract_assets→storyboards(先分镜·纯文本拆镜)→★review_storyboards→★剧本纪律(端点强制,绕不过):原始素材(梗概/大纲/成品稿都算)一律放 set_script,**必须经 rewrite_script 产出 AI 改写稿**——把自己写好的剧本直接贴进 edit_rewritten_script 绕过改写会被 400 拒(没有改写稿就没有可改的对象),extract_assets 同样要求基于改写稿。改写后的所有修改按 AI 产物的结构化格式做:改稿 edit_rewritten_script(润色/纠正)、人物档案 update_character、分镜 update_shot/replace_shot_dialogue——别回头整篇替换剧本或在设定字段里另写一套,两套真相源打架是一致性事故的头号根源。★★**改写成功一次后就别再重跑 rewrite_script**:它是从原稿整篇重来,当前稿的所有修正全丢,且新版不保证保留旧版已改好的地方(三版实测会来回摆)。要修就 edit_rewritten_script 点改(get_script 取全文 → 只改那几场、其余逐字照抄 → 提交整篇),免费秒级、结果确定;误重跑用 get_script(include_previous=1) 回捞上一版。generate_portraits_and_sheets(定妆图+设定图·分镜后建只给出场角色出图更省)→★generate_color_script(色彩脚本·统一调色)→assign_voices(分配音色;旁白/角色库里没合适的→design_voice 按描述造一个,定样后 set_character_voice)→★quote_scene_images+generate_scene_images(空景基板·出帧前必做)→frames(默认只出首帧)→★tail_frame_plan(免费·哪几镜要独立尾帧)→frames(frame_type=last_frame)→★review_frames→videos→generate_tts→compose;★★【尾帧别跳·出帧是两趟】generate_frames 默认只出首帧。约三成的镜**末态≠首态**(大运镜/物体脱手/状态改变),这些镜需要一张独立尾帧,而判据在平台侧、你从分镜文本猜不出来——所以首帧出完必须调一次免费的 tail_frame_plan 拿逐镜清单,再 frame_type=last_frame 补上(generate_frames 的响应体里 shots_needing_last_frame 就是这个数,不为 0 别直接去 review_frames)。跳过不报错、不拦你——代价是那些镜出视频时只有首帧一个锚,末态由模型自由发挥:动作做不到位、大运镜结束又回到起点构图。生产实测 32 集里 30 集整集只出了首帧,其中 23 集一路出完了视频。★★【尾帧被 TERMINAL_DESC_GATE 拦下时:改文本,不是重试】报「此镜标为状态改变,但没有任何地方说明结束时是什么样子」的镜,用 update_shot 把**结束时画面什么样**写进该镜 last_frame_prompt,再重出尾帧。★更好的是**别撞**:出尾帧前先 get_storyboards 看一眼,terminal_desc_missing=true 的镜整集一次就列出来了(免费),先把它们的 last_frame_prompt 补齐再出,一次都不用被拒。逐镜也能问(get_shot_prompts 同名字段),但一集几十镜别那么干。不补描述直接重试是无效的——送厂商的提示词里根本没有终态段,画出来仍是首帧那个姿态、必然再次被终态审核拒,而每次都照常扣费(生产实测:没写终态的镜尾帧成功率 9.4%,写了的 40.2%)。确实该「几乎不变」的镜才用 generate_shot_frame 的 allow_missing_terminal 放行。★★【空景基板别跳·这一步长期被第三方漏掉】场景图是**背景锚**:同一场的每个镜头帧都锚在它上面。不出基板照样能出帧、不报错、不拦你——代价是**每个场景的第一镜完全没有背景锚**(平台的兜底补图是「发现缺图就后台补一张」,补的那张给同场景后续镜用,触发它的那一镜自己等不到),而首镜往往正是定调的那一镜;后续镜之间背景也会漂。它跟定妆图是一对:定妆图锚人、场景图锚景,缺哪个漂哪个。进度自检看 `get_pipeline_status` 的 generate_scene_images 步(completed/total),`review_storyboards` 也会在出帧前把缺口报成 scene_plate_missing。★★【设定图别跳·定妆图≠设定图】定妆图是单人单张的身份锚;设定图是平台据定妆图生成的多视角 turnaround,是镜头帧/视频的一致性根锚(换角度·换光·服装几乎全靠它)。只出定妆图照样能出帧、不报错——代价是人物一换角度就漂、服装每镜不一样。用 generate_portraits_and_sheets 一键两步(每调一次推进一步,定妆图齐了再调一次才出设定图),或定妆图后接 generate_character_sheets。进度自检看 get_pipeline_status 的 generate_character_sheets 步(completed/total,portrait_only=只有定妆图的角色数)。★客户自带图:定妆图须单人、单张单角度、无文字;场景图须空景无人、无叠加文字——set_character_portrait/upload_scene_image 会自动检查、不合规 422 拒收。★别先建角色形象/道具设定图/动作模板再分镜——分镜是纯文本步、不依赖任何图;资产在分镜后建更省更准(动作模板本就必须分镜后)。收费步照现有 quote 报价确认流程。广告另需 add_product+generate_product_sheet;MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script(没有现成歌曲:set_mv_lyrics 后先 suggest_mv_song_styles→quote_mv_song→generate_mv_song→get_mv_song→select_mv_song)。★★【原声剧先锁声线,再批量出视频】use_clip_audio=true(默认)时每镜嗓音由视频厂商各自采样,不锁必漂,事后统一要逐镜重出。有客户授权音源→clone_voice+set_character_voice,在 generate_videos 之前;没有→每个说话角色先出一镜台词较长的,用 set_voice_anchor_from_shot 从那一镜选定声线,再出其余镜。get_pipeline_status 的 native_voice_anchor 会列出还没锁的 unanchored_speakers 和锁之前出的、需要重出的 stale_shots。★世界观概念图=默认必做(提升整剧一致性、很多第三方平台漏做这步):分镜后默认调 generate_world_concept,仍走报价确认流程(告知客户预估点数、确认再扣)——不静默扣费、也别跳过。★★【色彩脚本】generate_color_script 统一全片调色,分镜后、出帧前做;文本步无 quote_*,按用量后付。进度自检看 get_pipeline_status 的 generate_color_script,review_storyboards 会报色彩脚本缺口。★动作模板为可选实验:generate_motion_templates(动作模板提取)仅客户明确要求时在分镜后调用,文本步按用量后付。首尾帧默认不注入动作模板;缺模板无需补做,不阻碍出图、出视频或成片。视频模板可能被裁剪,不承诺送达或增益。★场景 Bible(每场景详细设定)顺序在**场景图片出图之后**——据出好的场景图完善(MCP 暂无此工具、在官网做);别在出场景图前做场景 Bible。★音频默认用视频原声(use_clip_audio 默认开、跳过 TTS 直接用 AI 视频自带声):建剧/改设定时 AI 应主动告知客户「默认用视频原声,如需 TTS 配音把 use_clip_audio 设 false」,让客户选。★图片模型默认 ChatGPT Image 2.5 Flare(gpt-image-2.5-flare·整剧统一画风):create_drama/update_project_settings 的 image_model 设,不传即默认它;可选 gpt-image-2.5-sunburst(同价·中文字形与细节更准)/gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·更精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·便宜·31点)/doubao-seedream-5-0-260128(Seedream5.0);generate_frames 可临时覆盖某次。★2.5 按输入量计费(基础11点+每张参考图18点),香蕉/Seedream 是一口价——参考图多的镜头要把这笔算进预算。★视频引擎四选一(drama级·AI 建剧时必须主动按剧选型引导并给价差让客户定):【选型决策树】①写实真人剧→seedance-2.5(默认·指令遵循/人脸细节最强·720p 212点/秒),预算敏感可 hailuo-3(约1/3成本70点/秒·强保真编辑·但单镜约6分钟);②风格化/动画/3D卡通剧·空镜·产品镜→wan3.0(约4折84点/秒·最长30秒·最短2秒计费·单镜约2分钟),赶交付用 wan3.0-prime(126点/秒·约1分钟);③★写实真人剧绝不选 wan3.0/prime——WAN 输出侧真人脸审核在 720p+ 一致拒、重试救不回;④★★叙事剧(有对白、讲连贯故事、镜头节奏要稳的)慎选 wan3.0/prime:WAN 会在**单个分镜片内自行换机位硬切**(实测 11/12 镜有镜内跳切,对照 seedance-2.5 仅 1/6、hailuo-3 为 0/5),成片观感是「一个镜头里画面跳来跳去、切太快」;这是厂商指令遵循弱、提示词层拦不住(我方负向约束早已在其中且实测无效),事后只能换引擎重生。WAN 适合镜头本就短平快的风格化/空镜/产品镜;要稳定单镜叙事请选 seedance-2.5 或 hailuo-3。生成后可用 scan_intra_shot_cuts 核查;④b★★对白密集剧慎选 hailuo-3(与上一条的「镜内自剪」是两回事,这条讲**说不说得全台词**):原生音频引擎会念到镜头结束就停、也会自说自话,实测「台词没念完整」占比 hailuo-3 **50%**(26 镜,均为 8-30 原生音频修复之后所生成,故是引擎本身)、seedance-2.5 **23%**(294 镜);wan3.0 该维度**样本不足未测**(26 个样本全在同一修复之前,修复后仅 2 镜)——不要据此认为 WAN 差。客户报「话没说完」时先跑 scan_dialogue_coverage 分族,别默认去加长镜头(实测镜长够的镜里仍有 32% 没念全);⑤★镜长控制(所有引擎通用,WAN 上尤其明显):单镜保持 3~5 秒。镜头越长模型自由发挥空间越大——实测一个 16 秒单镜(邻镜都是 3~5 秒)在片内换了 4 次场景、人物中途消失 4 秒后又从画面边缘长出来,客户看到的就是「凭空多出一个人」。要长表演请拆成多个短镜再靠帧链衔接,别写 15 秒以上的单镜;【分辨率决策】草稿/迭代期:WAN 剧 480p(42点/秒最省)、其余 720p;成片交付:seedance 剧 720p(高清档停售)、hailuo-3 剧 1080p(=2K·112点/秒)、WAN 剧 1080p(168点/秒);hailuo-3 无独立 480p 档(选了也按 768P 计费);create_drama/update_project_settings 的 video_engine/video_resolution 设,★都必须在出视频前定——切换不回溯已生成镜头,同剧混用会画风/身份漂移。★图片生成慢≠失败:每张几十秒~数分钟、整集可能十几分钟,轮询 get_storyboards 看 frame_status——pending=还在生成(耐心等、别重复调 generate_frames 白花钱)、ready=完成、failed=才是真失败。★改某一镜画面 / 换定妆图后要让新图生效,走**单镜重生 generate_shot_frame**(平台自动带该镜身份锚·场景道具参考·画风锚,保全片一致);generate_frames 只批量补「缺帧」的镜、已有首帧的镜跳过(正常、不是\"拒绝\")。★首帧出完调免费的 tail_frame_plan 看哪几镜要独立尾帧,再 frame_type=last_frame 批量补。换定妆图(set_character_portrait)后响应里的 stale_frames 就是被旧图污染、需逐镜重生的镜。★绝不用外部工具自制首尾帧再 upload_shot_frame 来\"改画面\"——外部图无身份锚/画风锚,人物·服装·画风必漂,那才是废片根源;upload_shot_frame 只用于客户自有真实素材。③【可选增强·AI 主动提示客户·报价确认才做】美术圣经生成/视觉锁抽取/场景组/口型/海报/音效/配乐/字幕翻译——这些提升一致性/质量、大多收费。★AI 应主动告知客户这些可做并给报价,客户确认才跑;既不默默跳过、也不擅自扣费。★两条锁定纪律:①**画幅比例**在 create_drama 即定、drama 级锁定,之后所有出图/出视频/成片都用它、**别中途改**(改了已生成内容画幅会不一致、漂移);不设默认 9:16。②**拆镜每镜 5-7 秒是对 AI 出视频优化的正常时长**,别因「镜偏长」误判就重拆——generate_storyboards 会**替换整集所有分镜**、已出图白费,已有分镜后端会拦、需 confirm_replace。★改写保真(默认 auto 智能路由):set_script 的原稿**本身已是剧本形态**(场景头/对白行结构)时,rewrite_script 自动走两步保真——客户台词逐句由机器闸锁定(丢一句即内部拒收重做)、AI 绝不加戏;剧作缺口(钩子/情感锚点)不自动补,写进 get_script 返回的 dramaturgy_suggestions 由客户决定采纳。原稿是小说/大纲则自动走创作型改写(AI 铺钩子造情感点),两种客户各得其所、无需手动切换。要覆盖默认用 update_project_settings 的 rewrite_pipeline(auto/two_pass/single_forced)与 fidelity_enforce(1=保真硬闸)。客户说「AI 把我的剧本改偏了」时的处置:①确认完整原稿已进 set_script;②rewrite_pipeline 设 two_pass 强制保真后重跑 rewrite_script;③客户确认角色外观后用 update_character 的 profile_locked=1 锁定档案,防后续提取覆盖外貌导致定妆图换脸。★客户想在**别的 AI 平台**改写剧本(常见诉求:第三方模型评估我方改写\"改动太大\",客户想自己掌控改动幅度):先调 get_script_format_spec 拿平台认可的格式契约(markdown 范本 + 可直接转发给外部模型的 external_prompt + 空白骨架),把 external_prompt+范本+客户原稿一起交给那个平台;拿回整理稿后**先调 check_script_format 自查**(免费·纯规则·不调模型),errors 清零后有两条出口:【A】adopt_external_script 直接落为可拍稿(我方 AI 不介入·秒级·不计费,前提是外部稿含制作层标注);【B】set_script 灌回原稿位 + rewrite_script 走保真两步(外部只做剧情层时选这条,标注由平台补;客户自写的标注在这条路上会被剥掉重写)。★别把外部整理稿塞进 edit_rewritten_script(未跑过改写会被 400 拒),也别跳过 check_script_format 直接灌——格式不合规的稿子进来照样被闸拦,白跑一轮。★★客户交来的**已经是成品分镜表**(逐镜写了秒数/景别/运镜)时,以上两条都不适用——直接用 import_storyboard_table 建分镜,跳过改写与拆镜。走改写那条路会把秒数/景别/运镜/STYLE/文字卡当非剧情内容剥掉(生产实测 8 镜 36 秒→20 镜 109 秒)。★两条导入通道都是确定性的——写错了也会原样建进去,所以**先取契约再自检再导**:分镜表走 get_storyboard_table_spec → check_storyboard_table → import_storyboard_table;客户自己的工具/表格能导出结构化数据、或让外部 AI 直接产 JSON 时走 get_bulk_import_spec → check_bulk_import → bulk_import_storyboards(只建分镜;角色/场景/道具由 extract_assets 从剧本提取,导入按名字绑定已有的——先 extract 再导)。两条导入默认带 auto_complete(后台 AI 补专业字段 + 出图/视频提示词,文本步后付,调用前告知客户):回执 started=true 就用 get_autofill_status 轮询到 done 再 review_storyboards——补全会改镜,先审的 token 会失效。用 get_pipeline_status 查进度(按项目类型返回专属步骤)。",
|
|
7317
7685
|
"tags": [
|
|
7318
7686
|
"episodes"
|
|
7319
7687
|
],
|
|
@@ -10748,10 +11116,256 @@
|
|
|
10748
11116
|
"type": "string",
|
|
10749
11117
|
"description": "来自 quote_align_prev_shot"
|
|
10750
11118
|
}
|
|
10751
|
-
},
|
|
10752
|
-
"required": [
|
|
10753
|
-
"quote_id"
|
|
10754
|
-
]
|
|
11119
|
+
},
|
|
11120
|
+
"required": [
|
|
11121
|
+
"quote_id"
|
|
11122
|
+
]
|
|
11123
|
+
}
|
|
11124
|
+
}
|
|
11125
|
+
}
|
|
11126
|
+
},
|
|
11127
|
+
"responses": {
|
|
11128
|
+
"200": {
|
|
11129
|
+
"description": "StarReel envelope",
|
|
11130
|
+
"content": {
|
|
11131
|
+
"application/json": {
|
|
11132
|
+
"schema": {
|
|
11133
|
+
"type": "object",
|
|
11134
|
+
"properties": {
|
|
11135
|
+
"code": {
|
|
11136
|
+
"type": "integer"
|
|
11137
|
+
},
|
|
11138
|
+
"message": {
|
|
11139
|
+
"type": "string"
|
|
11140
|
+
},
|
|
11141
|
+
"data": {
|
|
11142
|
+
"description": "Operation result payload"
|
|
11143
|
+
}
|
|
11144
|
+
}
|
|
11145
|
+
}
|
|
11146
|
+
}
|
|
11147
|
+
}
|
|
11148
|
+
},
|
|
11149
|
+
"402": {
|
|
11150
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11151
|
+
}
|
|
11152
|
+
}
|
|
11153
|
+
}
|
|
11154
|
+
},
|
|
11155
|
+
"/storyboards/{storyboard_id}/align-prev/quote": {
|
|
11156
|
+
"post": {
|
|
11157
|
+
"operationId": "quote_align_prev_shot",
|
|
11158
|
+
"summary": "(免费报价)align_prev_shot 会重生**上一镜的视频**(扣一条视频),执行前先报价、经客户确认",
|
|
11159
|
+
"description": "(免费报价)align_prev_shot 会重生**上一镜的视频**(扣一条视频),执行前先报价、经客户确认。回 quote_id / estimated_points / prev_storyboard_id(被重生的是哪一镜);含首次人像核验费时另列 kyc_first_time_points。",
|
|
11160
|
+
"tags": [
|
|
11161
|
+
"storyboards"
|
|
11162
|
+
],
|
|
11163
|
+
"parameters": [
|
|
11164
|
+
{
|
|
11165
|
+
"name": "storyboard_id",
|
|
11166
|
+
"in": "path",
|
|
11167
|
+
"required": true,
|
|
11168
|
+
"schema": {
|
|
11169
|
+
"type": "integer",
|
|
11170
|
+
"exclusiveMinimum": 0,
|
|
11171
|
+
"description": "缝右侧那一镜(它的首帧将作为上一镜视频的收尾画面)"
|
|
11172
|
+
}
|
|
11173
|
+
}
|
|
11174
|
+
],
|
|
11175
|
+
"responses": {
|
|
11176
|
+
"200": {
|
|
11177
|
+
"description": "StarReel envelope",
|
|
11178
|
+
"content": {
|
|
11179
|
+
"application/json": {
|
|
11180
|
+
"schema": {
|
|
11181
|
+
"type": "object",
|
|
11182
|
+
"properties": {
|
|
11183
|
+
"code": {
|
|
11184
|
+
"type": "integer"
|
|
11185
|
+
},
|
|
11186
|
+
"message": {
|
|
11187
|
+
"type": "string"
|
|
11188
|
+
},
|
|
11189
|
+
"data": {
|
|
11190
|
+
"description": "Operation result payload"
|
|
11191
|
+
}
|
|
11192
|
+
}
|
|
11193
|
+
}
|
|
11194
|
+
}
|
|
11195
|
+
}
|
|
11196
|
+
},
|
|
11197
|
+
"402": {
|
|
11198
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11199
|
+
}
|
|
11200
|
+
}
|
|
11201
|
+
}
|
|
11202
|
+
},
|
|
11203
|
+
"/storyboards/{storyboard_id}/asset-versions": {
|
|
11204
|
+
"get": {
|
|
11205
|
+
"operationId": "get_asset_versions",
|
|
11206
|
+
"summary": "只读查询一个镜头的全部图片/视频版本、历史查看链接、依赖 ID 与版本哈希,以及已生成→与当前输入一致→审核有效→已采用四项独立事实",
|
|
11207
|
+
"description": "只读查询一个镜头的全部图片/视频版本、历史查看链接、依赖 ID 与版本哈希,以及已生成→与当前输入一致→审核有效→已采用四项独立事实。历史缺少依赖记录时显示未知,不补造快照。免费。",
|
|
11208
|
+
"tags": [
|
|
11209
|
+
"storyboards"
|
|
11210
|
+
],
|
|
11211
|
+
"parameters": [
|
|
11212
|
+
{
|
|
11213
|
+
"name": "storyboard_id",
|
|
11214
|
+
"in": "path",
|
|
11215
|
+
"required": true,
|
|
11216
|
+
"schema": {
|
|
11217
|
+
"type": "integer",
|
|
11218
|
+
"exclusiveMinimum": 0
|
|
11219
|
+
}
|
|
11220
|
+
}
|
|
11221
|
+
],
|
|
11222
|
+
"responses": {
|
|
11223
|
+
"200": {
|
|
11224
|
+
"description": "StarReel envelope",
|
|
11225
|
+
"content": {
|
|
11226
|
+
"application/json": {
|
|
11227
|
+
"schema": {
|
|
11228
|
+
"type": "object",
|
|
11229
|
+
"properties": {
|
|
11230
|
+
"code": {
|
|
11231
|
+
"type": "integer"
|
|
11232
|
+
},
|
|
11233
|
+
"message": {
|
|
11234
|
+
"type": "string"
|
|
11235
|
+
},
|
|
11236
|
+
"data": {
|
|
11237
|
+
"description": "Operation result payload"
|
|
11238
|
+
}
|
|
11239
|
+
}
|
|
11240
|
+
}
|
|
11241
|
+
}
|
|
11242
|
+
}
|
|
11243
|
+
},
|
|
11244
|
+
"402": {
|
|
11245
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11246
|
+
}
|
|
11247
|
+
}
|
|
11248
|
+
}
|
|
11249
|
+
},
|
|
11250
|
+
"/storyboards/{storyboard_id}/chain-from": {
|
|
11251
|
+
"post": {
|
|
11252
|
+
"operationId": "chain_shot_from",
|
|
11253
|
+
"summary": "把同一集**任一镜**的首帧或尾帧接为本镜首帧",
|
|
11254
|
+
"description": "把同一集**任一镜**的首帧或尾帧接为本镜首帧。两种落法:\n· mode=copy(默认,免费):本镜首帧直接换成源帧,画面逐像素相同——适合「回到一模一样的画面」或同机位延续。\n· mode=reframe(扣一张图,必须带 quote_chain_shot_from 的 quote_id):以源帧为锚、按本镜画面描述重生首帧——人物/服装/道具/光线/场景延续,但保留本镜自己的景别与构图。景别有变化的缝要接,用这个。\n★源不是上一镜尾帧时(首尾呼应/回到某个画面),平台会把本镜与上一镜的缝记为「有意切换」,自动帧链不会再覆盖它。本镜已有视频的会被标为待重生;首帧已定稿的会被拒,客户同意覆盖才传 force:true。",
|
|
11255
|
+
"tags": [
|
|
11256
|
+
"storyboards"
|
|
11257
|
+
],
|
|
11258
|
+
"parameters": [
|
|
11259
|
+
{
|
|
11260
|
+
"name": "storyboard_id",
|
|
11261
|
+
"in": "path",
|
|
11262
|
+
"required": true,
|
|
11263
|
+
"schema": {
|
|
11264
|
+
"type": "integer",
|
|
11265
|
+
"exclusiveMinimum": 0,
|
|
11266
|
+
"description": "要改首帧的那一镜"
|
|
11267
|
+
}
|
|
11268
|
+
}
|
|
11269
|
+
],
|
|
11270
|
+
"requestBody": {
|
|
11271
|
+
"required": true,
|
|
11272
|
+
"content": {
|
|
11273
|
+
"application/json": {
|
|
11274
|
+
"schema": {
|
|
11275
|
+
"type": "object",
|
|
11276
|
+
"properties": {
|
|
11277
|
+
"source_storyboard_id": {
|
|
11278
|
+
"type": "integer",
|
|
11279
|
+
"exclusiveMinimum": 0,
|
|
11280
|
+
"description": "源镜 id(必须同一集);接上一镜就传上一镜的 id"
|
|
11281
|
+
},
|
|
11282
|
+
"source_frame": {
|
|
11283
|
+
"type": "string",
|
|
11284
|
+
"enum": [
|
|
11285
|
+
"first",
|
|
11286
|
+
"last"
|
|
11287
|
+
]
|
|
11288
|
+
},
|
|
11289
|
+
"mode": {
|
|
11290
|
+
"type": "string",
|
|
11291
|
+
"enum": [
|
|
11292
|
+
"copy",
|
|
11293
|
+
"reframe"
|
|
11294
|
+
]
|
|
11295
|
+
},
|
|
11296
|
+
"quote_id": {
|
|
11297
|
+
"type": "string"
|
|
11298
|
+
},
|
|
11299
|
+
"force": {
|
|
11300
|
+
"type": "boolean"
|
|
11301
|
+
}
|
|
11302
|
+
},
|
|
11303
|
+
"required": [
|
|
11304
|
+
"source_storyboard_id"
|
|
11305
|
+
]
|
|
11306
|
+
}
|
|
11307
|
+
}
|
|
11308
|
+
}
|
|
11309
|
+
},
|
|
11310
|
+
"responses": {
|
|
11311
|
+
"200": {
|
|
11312
|
+
"description": "StarReel envelope",
|
|
11313
|
+
"content": {
|
|
11314
|
+
"application/json": {
|
|
11315
|
+
"schema": {
|
|
11316
|
+
"type": "object",
|
|
11317
|
+
"properties": {
|
|
11318
|
+
"code": {
|
|
11319
|
+
"type": "integer"
|
|
11320
|
+
},
|
|
11321
|
+
"message": {
|
|
11322
|
+
"type": "string"
|
|
11323
|
+
},
|
|
11324
|
+
"data": {
|
|
11325
|
+
"description": "Operation result payload"
|
|
11326
|
+
}
|
|
11327
|
+
}
|
|
11328
|
+
}
|
|
11329
|
+
}
|
|
11330
|
+
}
|
|
11331
|
+
},
|
|
11332
|
+
"402": {
|
|
11333
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11334
|
+
}
|
|
11335
|
+
}
|
|
11336
|
+
}
|
|
11337
|
+
},
|
|
11338
|
+
"/storyboards/{storyboard_id}/chain-from-prev": {
|
|
11339
|
+
"post": {
|
|
11340
|
+
"operationId": "chain_shot_from_prev",
|
|
11341
|
+
"summary": "(免费)把上一镜的尾帧**直接**设为本镜首帧:画面 100% 接上,零成本、不出图",
|
|
11342
|
+
"description": "(免费)把上一镜的尾帧**直接**设为本镜首帧:画面 100% 接上,零成本、不出图。★适用:两镜是同一机位、同一景别的延续(seam_state=unchained/broken 且本镜本来就该和上镜一个构图)。★别用于景别有变化的缝(全景→近景等):那会把本镜的景别设计冲掉,且后续出图可能被判「与设计不符」——这种缝用 chain_shot_from 的 mode=reframe。本镜已有视频的会被标为待重生。本镜首帧若已被客户定稿(first_frame_pinned)会被拒;客户明确同意覆盖才传 force:true。",
|
|
11343
|
+
"tags": [
|
|
11344
|
+
"storyboards"
|
|
11345
|
+
],
|
|
11346
|
+
"parameters": [
|
|
11347
|
+
{
|
|
11348
|
+
"name": "storyboard_id",
|
|
11349
|
+
"in": "path",
|
|
11350
|
+
"required": true,
|
|
11351
|
+
"schema": {
|
|
11352
|
+
"type": "integer",
|
|
11353
|
+
"exclusiveMinimum": 0,
|
|
11354
|
+
"description": "要改首帧的那一镜(缝的右侧)"
|
|
11355
|
+
}
|
|
11356
|
+
}
|
|
11357
|
+
],
|
|
11358
|
+
"requestBody": {
|
|
11359
|
+
"required": false,
|
|
11360
|
+
"content": {
|
|
11361
|
+
"application/json": {
|
|
11362
|
+
"schema": {
|
|
11363
|
+
"type": "object",
|
|
11364
|
+
"properties": {
|
|
11365
|
+
"force": {
|
|
11366
|
+
"type": "boolean"
|
|
11367
|
+
}
|
|
11368
|
+
}
|
|
10755
11369
|
}
|
|
10756
11370
|
}
|
|
10757
11371
|
}
|
|
@@ -10784,11 +11398,11 @@
|
|
|
10784
11398
|
}
|
|
10785
11399
|
}
|
|
10786
11400
|
},
|
|
10787
|
-
"/storyboards/{storyboard_id}/
|
|
11401
|
+
"/storyboards/{storyboard_id}/chain-from/quote": {
|
|
10788
11402
|
"post": {
|
|
10789
|
-
"operationId": "
|
|
10790
|
-
"summary": "(免费报价)
|
|
10791
|
-
"description": "(免费报价)
|
|
11403
|
+
"operationId": "quote_chain_shot_from",
|
|
11404
|
+
"summary": "(免费报价)chain_shot_from 的 mode=reframe 要扣**一张图**(以源帧为锚重生本镜首帧),执行前先报价、经客户确认",
|
|
11405
|
+
"description": "(免费报价)chain_shot_from 的 mode=reframe 要扣**一张图**(以源帧为锚重生本镜首帧),执行前先报价、经客户确认。回 quote_id / estimated_points;quote_id 一次性、只对这一镜有效。mode=copy 不需要报价。",
|
|
10792
11406
|
"tags": [
|
|
10793
11407
|
"storyboards"
|
|
10794
11408
|
],
|
|
@@ -10800,7 +11414,7 @@
|
|
|
10800
11414
|
"schema": {
|
|
10801
11415
|
"type": "integer",
|
|
10802
11416
|
"exclusiveMinimum": 0,
|
|
10803
|
-
"description": "
|
|
11417
|
+
"description": "要重生首帧的那一镜"
|
|
10804
11418
|
}
|
|
10805
11419
|
}
|
|
10806
11420
|
],
|
|
@@ -10832,11 +11446,11 @@
|
|
|
10832
11446
|
}
|
|
10833
11447
|
}
|
|
10834
11448
|
},
|
|
10835
|
-
"/storyboards/{storyboard_id}/
|
|
10836
|
-
"
|
|
10837
|
-
"operationId": "
|
|
10838
|
-
"summary": "
|
|
10839
|
-
"description": "
|
|
11449
|
+
"/storyboards/{storyboard_id}/dialogue-replace": {
|
|
11450
|
+
"post": {
|
|
11451
|
+
"operationId": "replace_shot_dialogue",
|
|
11452
|
+
"summary": "换某镜对白音色/声线(转写+克隆重配)",
|
|
11453
|
+
"description": "换某镜对白音色/声线(转写+克隆重配)。**同步调用**,约 1 分钟返回产物,按用量后付不欠费。要求本镜有原声视频+角色声线定妆音。★它也是「这一镜台词没念完/念了别的」最经济的修法:用克隆音重配整句并静音原声段,**不重新生成视频**——按 TTS 档(千字符)计费,比 regenerate_shot_video(720p 212 点/秒)低几个数量级。代价:画面口型是按原音演的,换音后可能对不上;口型看不清的镜(背身/远景/画外)几乎无损,大特写慎用。★产物自动写回该镜(返回 persisted:true),但写回 ≠ 进成片:以 get_dialogue_repair_status 的 productEffective 为准——true 就 rerender_episode 重拼;false 时按 pendingCompose 先补合成再重拼,否则成片仍是旧音频。★该镜已有对口型产物时,成片优先用对口型版,换轨不会生效。整集批量用 repair_episode_dialogue。\n★写回前会对产物复核(与 scan_dialogue_coverage 同一判据):换完仍断音(truncated)、重复念/多念(extra_speech)、念的不是台词(off_script)→ **不写回**、本次费用自动退回,返回错误说明哪一类——这类镜换音修不好,改用 regenerate_shot_video。成功时返回 verify:verified=false 表示没判出来(转写失败/台词太短),照常写回但没复核过,自己听一下。",
|
|
10840
11454
|
"tags": [
|
|
10841
11455
|
"storyboards"
|
|
10842
11456
|
],
|
|
@@ -10851,6 +11465,22 @@
|
|
|
10851
11465
|
}
|
|
10852
11466
|
}
|
|
10853
11467
|
],
|
|
11468
|
+
"requestBody": {
|
|
11469
|
+
"required": false,
|
|
11470
|
+
"content": {
|
|
11471
|
+
"application/json": {
|
|
11472
|
+
"schema": {
|
|
11473
|
+
"type": "object",
|
|
11474
|
+
"properties": {
|
|
11475
|
+
"mode": {
|
|
11476
|
+
"type": "string",
|
|
11477
|
+
"description": "(assembled by the client from tool args — see tool 'replace_shot_dialogue')"
|
|
11478
|
+
}
|
|
11479
|
+
}
|
|
11480
|
+
}
|
|
11481
|
+
}
|
|
11482
|
+
}
|
|
11483
|
+
},
|
|
10854
11484
|
"responses": {
|
|
10855
11485
|
"200": {
|
|
10856
11486
|
"description": "StarReel envelope",
|
|
@@ -10876,14 +11506,17 @@
|
|
|
10876
11506
|
"402": {
|
|
10877
11507
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
10878
11508
|
}
|
|
10879
|
-
}
|
|
11509
|
+
},
|
|
11510
|
+
"x-also-tools": [
|
|
11511
|
+
"revoice_narration"
|
|
11512
|
+
]
|
|
10880
11513
|
}
|
|
10881
11514
|
},
|
|
10882
|
-
"/storyboards/{storyboard_id}/
|
|
11515
|
+
"/storyboards/{storyboard_id}/edit/generate": {
|
|
10883
11516
|
"post": {
|
|
10884
|
-
"operationId": "
|
|
10885
|
-
"summary": "
|
|
10886
|
-
"description": "
|
|
11517
|
+
"operationId": "edit_video_shot",
|
|
11518
|
+
"summary": "确认后就地编辑某镜视频:按 instruction 改,可带参考图/视频/音频,或用 start_sec/end_sec 做区间替换",
|
|
11519
|
+
"description": "确认后就地编辑某镜视频:按 instruction 改,可带参考图/视频/音频,或用 start_sec/end_sec 做区间替换。可用 model 为本次编辑单独选引擎(与剧引擎可不同):hailuo-3=MiniMax H3 强保真编辑约1/3成本;wan3.0/wan3.0-prime=WAN 3.0 强语义编辑约4折(环境可能跟随指令扩写);H3/WAN 均不支持 start_sec/end_sec 区间(传了会 400),编辑/续写的输入视频在 H3/WAN 上另按秒计费。\n★回执里出现 `edit_instruction_negation_advisory` = 你的指令里有**否定式约束**(「不能采用X」「不要出现X」)。视频模型把名词当正向线索,写「不要 X」往往反而把 X 演出来——被否定的那个动作/物件恰恰是模型先验里最显眼的。这不是拦截,任务已照常提交;但**下一轮改指令时务必删掉否定句,改成正向描述**(把该做什么写具体:起手动作、手的位置、每一拍的时值),否则同一个毛病会一直复现。已实测:客户写「不能采用参考图举手单脚的静态舞姿」,成片开头的抬臂手势就被参考图那个举手带跑了。\n★收到 **409「本镜是用户上传的实拍素材」** = 这一镜被 upload_shot_footage 登记成了实拍素材镜,不是模型或引擎的问题,换引擎重试无用。两条出路:要以该素材为源做 AI 重绘 → 带 replace_user_footage=true 重发;要恢复成普通 AI 镜 → 先 clear_shot_footage。\n★收到 **409 + `in_flight_generation_id`** = 这一镜还有一条生成没跑完(上一次编辑 / 重生 / 批量出视频),这次编辑没提交、没扣费,quote 已作废。编辑的源是本镜当前视频,在途那条一完成就会换掉它——所以先等它完成、看过结果,再重新 quote 并编辑;**别连发**多条编辑想让它们叠加,每一条都只基于当时的源。若在途那条正是你刚提交的同一次编辑(例如调用超时后重发),直接等它的结果,不必再发。同一次编辑原样重发(指令、参考素材、区间、引擎都一样)不会 409,会挂到在途那条上、不重复扣费。⚠️ 批量报价确认流程:先调对应的 quote_* 工具,把返回的 estimated_points 原样告诉用户,用户明确同意后,才用返回的 quote_id 调本工具。不要擅自确认。★**出图类报价(定妆图/场景图/出帧)给的是两个数**:estimated_points 是**上界**(按该模型参考图张数上限估,保证你不会按低了的预算开跑、出到一半 402 中断);同一响应里的 typical_points 是**通常花费**。两个都要告诉客户——只说上界会让人以为贵得多(满参考图的上界可达通常值的 2 倍以上),只说通常值又会让余额准备不足。固定价模型下两者相等,这时说一个数就行。出视频的报价与扣费同函数,不存在这个区间。",
|
|
10887
11520
|
"tags": [
|
|
10888
11521
|
"storyboards"
|
|
10889
11522
|
],
|
|
@@ -10894,8 +11527,7 @@
|
|
|
10894
11527
|
"required": true,
|
|
10895
11528
|
"schema": {
|
|
10896
11529
|
"type": "integer",
|
|
10897
|
-
"exclusiveMinimum": 0
|
|
10898
|
-
"description": "要改首帧的那一镜"
|
|
11530
|
+
"exclusiveMinimum": 0
|
|
10899
11531
|
}
|
|
10900
11532
|
}
|
|
10901
11533
|
],
|
|
@@ -10906,34 +11538,57 @@
|
|
|
10906
11538
|
"schema": {
|
|
10907
11539
|
"type": "object",
|
|
10908
11540
|
"properties": {
|
|
10909
|
-
"
|
|
10910
|
-
"type": "
|
|
10911
|
-
"
|
|
10912
|
-
"description": "源镜 id(必须同一集);接上一镜就传上一镜的 id"
|
|
11541
|
+
"quote_id": {
|
|
11542
|
+
"type": "string",
|
|
11543
|
+
"description": "来自 quote_edit_video_shot"
|
|
10913
11544
|
},
|
|
10914
|
-
"
|
|
11545
|
+
"instruction": {
|
|
10915
11546
|
"type": "string",
|
|
10916
|
-
"
|
|
10917
|
-
"first",
|
|
10918
|
-
"last"
|
|
10919
|
-
]
|
|
11547
|
+
"description": "编辑指令(如\"把背景换成夜晚\")"
|
|
10920
11548
|
},
|
|
10921
|
-
"
|
|
11549
|
+
"model": {
|
|
10922
11550
|
"type": "string",
|
|
10923
11551
|
"enum": [
|
|
10924
|
-
"
|
|
10925
|
-
"
|
|
11552
|
+
"seedance-2.5",
|
|
11553
|
+
"hailuo-3",
|
|
11554
|
+
"wan3.0",
|
|
11555
|
+
"wan3.0-prime"
|
|
10926
11556
|
]
|
|
10927
11557
|
},
|
|
10928
|
-
"
|
|
10929
|
-
"type": "
|
|
11558
|
+
"reference_image_urls": {
|
|
11559
|
+
"type": "array",
|
|
11560
|
+
"items": {
|
|
11561
|
+
"type": "string"
|
|
11562
|
+
},
|
|
11563
|
+
"maxItems": 9
|
|
10930
11564
|
},
|
|
10931
|
-
"
|
|
11565
|
+
"reference_video_urls": {
|
|
11566
|
+
"type": "array",
|
|
11567
|
+
"items": {
|
|
11568
|
+
"type": "string"
|
|
11569
|
+
},
|
|
11570
|
+
"maxItems": 2
|
|
11571
|
+
},
|
|
11572
|
+
"reference_audio_urls": {
|
|
11573
|
+
"type": "array",
|
|
11574
|
+
"items": {
|
|
11575
|
+
"type": "string"
|
|
11576
|
+
},
|
|
11577
|
+
"maxItems": 3
|
|
11578
|
+
},
|
|
11579
|
+
"start_sec": {
|
|
11580
|
+
"type": "number"
|
|
11581
|
+
},
|
|
11582
|
+
"end_sec": {
|
|
11583
|
+
"type": "number"
|
|
11584
|
+
},
|
|
11585
|
+
"replace_user_footage": {
|
|
10932
11586
|
"type": "boolean"
|
|
10933
11587
|
}
|
|
10934
11588
|
},
|
|
10935
11589
|
"required": [
|
|
10936
|
-
"
|
|
11590
|
+
"quote_id",
|
|
11591
|
+
"instruction"
|
|
10937
11592
|
]
|
|
10938
11593
|
}
|
|
10939
11594
|
}
|
|
@@ -10967,11 +11622,11 @@
|
|
|
10967
11622
|
}
|
|
10968
11623
|
}
|
|
10969
11624
|
},
|
|
10970
|
-
"/storyboards/{storyboard_id}/
|
|
11625
|
+
"/storyboards/{storyboard_id}/edit/quote": {
|
|
10971
11626
|
"post": {
|
|
10972
|
-
"operationId": "
|
|
10973
|
-
"summary": "(
|
|
10974
|
-
"description": "(
|
|
11627
|
+
"operationId": "quote_edit_video_shot",
|
|
11628
|
+
"summary": "报价:对某镜做就地编辑/区间替换(Seedance 2",
|
|
11629
|
+
"description": "报价:对某镜做就地编辑/区间替换(Seedance 2.5)要多少点。返回 quote_id。零扣费。本镜须已有视频。",
|
|
10975
11630
|
"tags": [
|
|
10976
11631
|
"storyboards"
|
|
10977
11632
|
],
|
|
@@ -10982,26 +11637,57 @@
|
|
|
10982
11637
|
"required": true,
|
|
10983
11638
|
"schema": {
|
|
10984
11639
|
"type": "integer",
|
|
10985
|
-
"exclusiveMinimum": 0
|
|
10986
|
-
"description": "要改首帧的那一镜(缝的右侧)"
|
|
11640
|
+
"exclusiveMinimum": 0
|
|
10987
11641
|
}
|
|
10988
11642
|
}
|
|
10989
11643
|
],
|
|
10990
|
-
"
|
|
10991
|
-
"
|
|
10992
|
-
|
|
10993
|
-
"
|
|
10994
|
-
"
|
|
10995
|
-
"
|
|
10996
|
-
|
|
10997
|
-
"
|
|
10998
|
-
"
|
|
11644
|
+
"responses": {
|
|
11645
|
+
"200": {
|
|
11646
|
+
"description": "StarReel envelope",
|
|
11647
|
+
"content": {
|
|
11648
|
+
"application/json": {
|
|
11649
|
+
"schema": {
|
|
11650
|
+
"type": "object",
|
|
11651
|
+
"properties": {
|
|
11652
|
+
"code": {
|
|
11653
|
+
"type": "integer"
|
|
11654
|
+
},
|
|
11655
|
+
"message": {
|
|
11656
|
+
"type": "string"
|
|
11657
|
+
},
|
|
11658
|
+
"data": {
|
|
11659
|
+
"description": "Operation result payload"
|
|
11660
|
+
}
|
|
10999
11661
|
}
|
|
11000
11662
|
}
|
|
11001
11663
|
}
|
|
11002
11664
|
}
|
|
11665
|
+
},
|
|
11666
|
+
"402": {
|
|
11667
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11003
11668
|
}
|
|
11004
|
-
}
|
|
11669
|
+
}
|
|
11670
|
+
}
|
|
11671
|
+
},
|
|
11672
|
+
"/storyboards/{storyboard_id}/footage": {
|
|
11673
|
+
"delete": {
|
|
11674
|
+
"operationId": "clear_shot_footage",
|
|
11675
|
+
"summary": "清除某镜的实拍素材(video_url 置空、来源标记清掉),让这一镜恢复可 AI 生成视频",
|
|
11676
|
+
"description": "清除某镜的实拍素材(video_url 置空、来源标记清掉),让这一镜恢复可 AI 生成视频。免费。",
|
|
11677
|
+
"tags": [
|
|
11678
|
+
"storyboards"
|
|
11679
|
+
],
|
|
11680
|
+
"parameters": [
|
|
11681
|
+
{
|
|
11682
|
+
"name": "storyboard_id",
|
|
11683
|
+
"in": "path",
|
|
11684
|
+
"required": true,
|
|
11685
|
+
"schema": {
|
|
11686
|
+
"type": "integer",
|
|
11687
|
+
"exclusiveMinimum": 0
|
|
11688
|
+
}
|
|
11689
|
+
}
|
|
11690
|
+
],
|
|
11005
11691
|
"responses": {
|
|
11006
11692
|
"200": {
|
|
11007
11693
|
"description": "StarReel envelope",
|
|
@@ -11030,11 +11716,11 @@
|
|
|
11030
11716
|
}
|
|
11031
11717
|
}
|
|
11032
11718
|
},
|
|
11033
|
-
"/storyboards/{storyboard_id}/
|
|
11034
|
-
"
|
|
11035
|
-
"operationId": "
|
|
11036
|
-
"summary": "
|
|
11037
|
-
"description": "
|
|
11719
|
+
"/storyboards/{storyboard_id}/frame-workbench": {
|
|
11720
|
+
"get": {
|
|
11721
|
+
"operationId": "get_frame_candidates",
|
|
11722
|
+
"summary": "免费只读:一个镜头首帧/尾帧的**全部候选**(出图验收工作台同一份数据)",
|
|
11723
|
+
"description": "免费只读:一个镜头首帧/尾帧的**全部候选**(出图验收工作台同一份数据)。每张候选给原图地址(被拒的也在,可直接打开看原尺寸)、状态、是否为当前在用(adopted)、拒因 reject(main 主码 / code 具体病因 / details 明细 / class 分流:needs_content_fix=要改内容、content_retryable=内容问题但重掷约 1/3 能成、transient=审核没审成或偶发——不是画面不合格)、审计证据 audit(warnings 中文结论、expected 设计要求、derived_shot_type 画面推出的景别及依据、boxes 主体与身体部位在画面里的位置框;2026-10-07 前的候选无存档为 null,不代表审过)、以及这张图实际用了哪些参考图(references:用途/所属角色/是否送达)。storyboard.tail_endstate 是「尾帧≈首帧」检查结论(current=false 表示结论对应的不是现在这两张图)。★镜头反复被拒、或客户问「被拒的那几张到底什么样 / 为什么不采用」时先调它:逐张看原图和证据,再决定改分镜、改参考还是重掷——别盲目付费重抽。要看某张的最终提示词用 get_image_dispatch(generation_id)。",
|
|
11038
11724
|
"tags": [
|
|
11039
11725
|
"storyboards"
|
|
11040
11726
|
],
|
|
@@ -11045,8 +11731,7 @@
|
|
|
11045
11731
|
"required": true,
|
|
11046
11732
|
"schema": {
|
|
11047
11733
|
"type": "integer",
|
|
11048
|
-
"exclusiveMinimum": 0
|
|
11049
|
-
"description": "要重生首帧的那一镜"
|
|
11734
|
+
"exclusiveMinimum": 0
|
|
11050
11735
|
}
|
|
11051
11736
|
}
|
|
11052
11737
|
],
|
|
@@ -11078,11 +11763,11 @@
|
|
|
11078
11763
|
}
|
|
11079
11764
|
}
|
|
11080
11765
|
},
|
|
11081
|
-
"/storyboards/{storyboard_id}/
|
|
11766
|
+
"/storyboards/{storyboard_id}/frame/clear": {
|
|
11082
11767
|
"post": {
|
|
11083
|
-
"operationId": "
|
|
11084
|
-
"summary": "
|
|
11085
|
-
"description": "
|
|
11768
|
+
"operationId": "clear_shot_frame",
|
|
11769
|
+
"summary": "清除某镜的尾帧(解除引用,免费)",
|
|
11770
|
+
"description": "清除某镜的尾帧(解除引用,免费)。用于换了定妆图/改了剧情后,旧尾帧会把旧人物/旧画面带进重生的视频时,先清掉它再 regenerate_shot_video。只能清尾帧:首帧是出视频的起点,要换首帧用 generate_shot_frame 重生或 upload_shot_frame 替换。★这是解除引用,不是删除:文件不会被删,响应里 unlinked[].in_history=true 的可在 get_asset_versions 找回,physically_deleted 恒为空——如实告诉客户。本镜已有视频会被标为过期(video_stale)。尾帧已定稿(pinned)会返回 409,客户确认后带 release_pin:true(会一并解除定稿);尾帧正在生成也会 409,等它结束再清。响应的 still_referenced_by 列出同剧仍在用这张图的其它镜(典型:下一镜首帧是它的裸拷贝)——这些不会被连带清掉,需要的话逐镜重生。",
|
|
11086
11771
|
"tags": [
|
|
11087
11772
|
"storyboards"
|
|
11088
11773
|
],
|
|
@@ -11104,9 +11789,12 @@
|
|
|
11104
11789
|
"schema": {
|
|
11105
11790
|
"type": "object",
|
|
11106
11791
|
"properties": {
|
|
11107
|
-
"
|
|
11792
|
+
"frame_type": {
|
|
11108
11793
|
"type": "string",
|
|
11109
|
-
"description": "(assembled by the client from tool args — see tool '
|
|
11794
|
+
"description": "(assembled by the client from tool args — see tool 'clear_shot_frame')"
|
|
11795
|
+
},
|
|
11796
|
+
"release_pin": {
|
|
11797
|
+
"type": "boolean"
|
|
11110
11798
|
}
|
|
11111
11799
|
}
|
|
11112
11800
|
}
|
|
@@ -11138,17 +11826,14 @@
|
|
|
11138
11826
|
"402": {
|
|
11139
11827
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11140
11828
|
}
|
|
11141
|
-
}
|
|
11142
|
-
"x-also-tools": [
|
|
11143
|
-
"revoice_narration"
|
|
11144
|
-
]
|
|
11829
|
+
}
|
|
11145
11830
|
}
|
|
11146
11831
|
},
|
|
11147
|
-
"/storyboards/{storyboard_id}/
|
|
11832
|
+
"/storyboards/{storyboard_id}/frame/generate": {
|
|
11148
11833
|
"post": {
|
|
11149
|
-
"operationId": "
|
|
11150
|
-
"summary": "
|
|
11151
|
-
"description": "
|
|
11834
|
+
"operationId": "generate_shot_frame",
|
|
11835
|
+
"summary": "确认后给**某一镜**出帧或重生该帧(异步)",
|
|
11836
|
+
"description": "确认后给**某一镜**出帧或重生该帧(异步)。这是修某一镜画面的正路:平台会带上该镜的角色身份锚、场景/道具参考图、画风锚与帧审计,重生出的图与全片一致;用外部工具出图再上传会绕开这整条链路,人物/服装/画风必漂。重生会覆盖该帧现有图(含此前上传的),并把本镜视频标为待重生。尾帧需本镜首帧已就绪(否则先用 first_frame 或 both)。完成判据:轮询 get_storyboards 看该镜 first_frame_image/last_frame_image 变化。\n★继承重开(reopen_pair_id):get_storyboards 某镜带这个字段时,原样传进来可以只重掷首尾帧里真正有问题的那一侧——另一侧此前已经生成好的候选原样保留,不重新生成、不重新计费。传了它就不用再传 frame_type(会被忽略,由平台判定该重哪一侧);quote_id 仍要用 quote_shot_frame 报价(frame_type 传 first_frame 或 last_frame 均可,单帧同价)。若该镜没有 reopen_pair_id 字段(不满足继承条件),这个参数不要传,走常规 frame_type 重试。\n★★出尾帧若被拦下并提示「此镜标为状态改变,但没有任何地方说明结束时是什么样子」:正解是用 update_shot 把结束状态写进 last_frame_prompt 再出,**别直接加 allow_missing_terminal 硬上**——这类镜照现状出尾帧的历史成功率只有 9.4%(有终态描述的 40.2%),硬上多半是白扣一次钱。只有确认这一镜就是要「几乎不变」的画面时才带那个参数。⚠️ 批量报价确认流程:先调对应的 quote_* 工具,把返回的 estimated_points 原样告诉用户,用户明确同意后,才用返回的 quote_id 调本工具。不要擅自确认。★**出图类报价(定妆图/场景图/出帧)给的是两个数**:estimated_points 是**上界**(按该模型参考图张数上限估,保证你不会按低了的预算开跑、出到一半 402 中断);同一响应里的 typical_points 是**通常花费**。两个都要告诉客户——只说上界会让人以为贵得多(满参考图的上界可达通常值的 2 倍以上),只说通常值又会让余额准备不足。固定价模型下两者相等,这时说一个数就行。出视频的报价与扣费同函数,不存在这个区间。",
|
|
11152
11837
|
"tags": [
|
|
11153
11838
|
"storyboards"
|
|
11154
11839
|
],
|
|
@@ -11172,55 +11857,34 @@
|
|
|
11172
11857
|
"properties": {
|
|
11173
11858
|
"quote_id": {
|
|
11174
11859
|
"type": "string",
|
|
11175
|
-
"description": "来自
|
|
11176
|
-
},
|
|
11177
|
-
"instruction": {
|
|
11178
|
-
"type": "string",
|
|
11179
|
-
"description": "编辑指令(如\"把背景换成夜晚\")"
|
|
11860
|
+
"description": "来自 quote_shot_frame"
|
|
11180
11861
|
},
|
|
11181
|
-
"
|
|
11862
|
+
"frame_type": {
|
|
11182
11863
|
"type": "string",
|
|
11183
11864
|
"enum": [
|
|
11184
|
-
"
|
|
11185
|
-
"
|
|
11186
|
-
"
|
|
11187
|
-
"wan3.0-prime"
|
|
11865
|
+
"first_frame",
|
|
11866
|
+
"last_frame",
|
|
11867
|
+
"both"
|
|
11188
11868
|
]
|
|
11189
11869
|
},
|
|
11190
|
-
"
|
|
11191
|
-
"type": "
|
|
11192
|
-
"items": {
|
|
11193
|
-
"type": "string"
|
|
11194
|
-
},
|
|
11195
|
-
"maxItems": 9
|
|
11196
|
-
},
|
|
11197
|
-
"reference_video_urls": {
|
|
11198
|
-
"type": "array",
|
|
11199
|
-
"items": {
|
|
11200
|
-
"type": "string"
|
|
11201
|
-
},
|
|
11202
|
-
"maxItems": 2
|
|
11870
|
+
"replace_user_frame": {
|
|
11871
|
+
"type": "boolean"
|
|
11203
11872
|
},
|
|
11204
|
-
"
|
|
11205
|
-
"type": "
|
|
11206
|
-
"items": {
|
|
11207
|
-
"type": "string"
|
|
11208
|
-
},
|
|
11209
|
-
"maxItems": 3
|
|
11873
|
+
"reopen_pair_id": {
|
|
11874
|
+
"type": "string"
|
|
11210
11875
|
},
|
|
11211
|
-
"
|
|
11212
|
-
"type": "
|
|
11876
|
+
"image_model": {
|
|
11877
|
+
"type": "string"
|
|
11213
11878
|
},
|
|
11214
|
-
"
|
|
11215
|
-
"type": "
|
|
11879
|
+
"allow_missing_terminal": {
|
|
11880
|
+
"type": "boolean"
|
|
11216
11881
|
},
|
|
11217
|
-
"
|
|
11882
|
+
"allow_era_ref_conflict": {
|
|
11218
11883
|
"type": "boolean"
|
|
11219
11884
|
}
|
|
11220
11885
|
},
|
|
11221
11886
|
"required": [
|
|
11222
|
-
"quote_id"
|
|
11223
|
-
"instruction"
|
|
11887
|
+
"quote_id"
|
|
11224
11888
|
]
|
|
11225
11889
|
}
|
|
11226
11890
|
}
|
|
@@ -11254,11 +11918,11 @@
|
|
|
11254
11918
|
}
|
|
11255
11919
|
}
|
|
11256
11920
|
},
|
|
11257
|
-
"/storyboards/{storyboard_id}/
|
|
11921
|
+
"/storyboards/{storyboard_id}/frame/quote": {
|
|
11258
11922
|
"post": {
|
|
11259
|
-
"operationId": "
|
|
11260
|
-
"summary": "
|
|
11261
|
-
"description": "
|
|
11923
|
+
"operationId": "quote_shot_frame",
|
|
11924
|
+
"summary": "报价:重画/补出**某一镜的某一帧**要多少点(一帧=一张图)",
|
|
11925
|
+
"description": "报价:重画/补出**某一镜的某一帧**要多少点(一帧=一张图)。返回 estimated_points、quote_id。零扣费。客户说「第 N 镜画错了/要改」时用它,而不是拿别的图像平台出图再 upload_shot_frame。★响应带 billing_kind/unit_points(实际计费档与单价);要在 generate_shot_frame 里换模型,报价时传同一个 image_model。★两边必须传同一个 image_model —— 不一致会被直接拒(400 IMAGE_MODEL_MISMATCH),因为模型决定计费档,不同源就是「预估≠扣费」。两边都不传也算一致(用该剧设定的模型)。已下架的型号(FLUX 全系列)一律拒收,别再传。★返回两个数:estimated_points 是**上界**(按参考图张数上限估,拿它准备余额就不会中途 402),typical_points 是**通常花费**。两个都告诉客户,只报上界会让人以为贵得多。固定价模型(如 Nano Banana 系列)下两者相等。",
|
|
11262
11926
|
"tags": [
|
|
11263
11927
|
"storyboards"
|
|
11264
11928
|
],
|
|
@@ -11273,6 +11937,29 @@
|
|
|
11273
11937
|
}
|
|
11274
11938
|
}
|
|
11275
11939
|
],
|
|
11940
|
+
"requestBody": {
|
|
11941
|
+
"required": false,
|
|
11942
|
+
"content": {
|
|
11943
|
+
"application/json": {
|
|
11944
|
+
"schema": {
|
|
11945
|
+
"type": "object",
|
|
11946
|
+
"properties": {
|
|
11947
|
+
"frame_type": {
|
|
11948
|
+
"type": "string",
|
|
11949
|
+
"enum": [
|
|
11950
|
+
"first_frame",
|
|
11951
|
+
"last_frame",
|
|
11952
|
+
"both"
|
|
11953
|
+
]
|
|
11954
|
+
},
|
|
11955
|
+
"image_model": {
|
|
11956
|
+
"type": "string"
|
|
11957
|
+
}
|
|
11958
|
+
}
|
|
11959
|
+
}
|
|
11960
|
+
}
|
|
11961
|
+
}
|
|
11962
|
+
},
|
|
11276
11963
|
"responses": {
|
|
11277
11964
|
"200": {
|
|
11278
11965
|
"description": "StarReel envelope",
|
|
@@ -11301,11 +11988,11 @@
|
|
|
11301
11988
|
}
|
|
11302
11989
|
}
|
|
11303
11990
|
},
|
|
11304
|
-
"/storyboards/{storyboard_id}/
|
|
11305
|
-
"
|
|
11306
|
-
"operationId": "
|
|
11307
|
-
"summary": "
|
|
11308
|
-
"description": "
|
|
11991
|
+
"/storyboards/{storyboard_id}/lipsync": {
|
|
11992
|
+
"post": {
|
|
11993
|
+
"operationId": "lipsync_shot",
|
|
11994
|
+
"summary": "给单镜做口型同步(对白与人物嘴型对齐)",
|
|
11995
|
+
"description": "给单镜做口型同步(对白与人物嘴型对齐)。按用量后付。\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。",
|
|
11309
11996
|
"tags": [
|
|
11310
11997
|
"storyboards"
|
|
11311
11998
|
],
|
|
@@ -11348,11 +12035,11 @@
|
|
|
11348
12035
|
}
|
|
11349
12036
|
}
|
|
11350
12037
|
},
|
|
11351
|
-
"/storyboards/{storyboard_id}/
|
|
12038
|
+
"/storyboards/{storyboard_id}/name-card": {
|
|
11352
12039
|
"get": {
|
|
11353
|
-
"operationId": "
|
|
11354
|
-
"summary": "
|
|
11355
|
-
"description": "
|
|
12040
|
+
"operationId": "get_shot_name_card",
|
|
12041
|
+
"summary": "读这一镜的**人物名片**现值(免费):名字、头衔、显示位置那些",
|
|
12042
|
+
"description": "读这一镜的**人物名片**现值(免费):名字、头衔、显示位置那些。\n★改之前先读一遍——set_shot_name_card 是**整体覆盖**,不读就改会把没打算动的字段清掉。",
|
|
11356
12043
|
"tags": [
|
|
11357
12044
|
"storyboards"
|
|
11358
12045
|
],
|
|
@@ -11393,13 +12080,11 @@
|
|
|
11393
12080
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11394
12081
|
}
|
|
11395
12082
|
}
|
|
11396
|
-
}
|
|
11397
|
-
|
|
11398
|
-
|
|
11399
|
-
|
|
11400
|
-
"
|
|
11401
|
-
"summary": "清除某镜的尾帧(解除引用,免费)",
|
|
11402
|
-
"description": "清除某镜的尾帧(解除引用,免费)。用于换了定妆图/改了剧情后,旧尾帧会把旧人物/旧画面带进重生的视频时,先清掉它再 regenerate_shot_video。只能清尾帧:首帧是出视频的起点,要换首帧用 generate_shot_frame 重生或 upload_shot_frame 替换。★这是解除引用,不是删除:文件不会被删,响应里 unlinked[].in_history=true 的可在 get_asset_versions 找回,physically_deleted 恒为空——如实告诉客户。本镜已有视频会被标为过期(video_stale)。尾帧已定稿(pinned)会返回 409,客户确认后带 release_pin:true(会一并解除定稿);尾帧正在生成也会 409,等它结束再清。响应的 still_referenced_by 列出同剧仍在用这张图的其它镜(典型:下一镜首帧是它的裸拷贝)——这些不会被连带清掉,需要的话逐镜重生。",
|
|
12083
|
+
},
|
|
12084
|
+
"put": {
|
|
12085
|
+
"operationId": "set_shot_name_card",
|
|
12086
|
+
"summary": "给某一镜加/改/清「版式字卡」(终拼时烧进成片,含预览一致的书法字体与朱红印章)",
|
|
12087
|
+
"description": "给某一镜加/改/清「版式字卡」(终拼时烧进成片,含预览一致的书法字体与朱红印章)。name 传空字符串=清除本镜字卡。免费(纯数据,填了就显示)。两种用法:①不填 orient/placement/font_size = 角色名卡(画面侧边单列竖排人物名,适合群像出场镜);②填了其中任意一个 = 通用版式字卡,name 可以是**整句台词或旁白**(按标点自动切列、按最高列拟合字号)。placement=\"auto\" 会按背景亮度与粗糙度自动挑位置(躲开人脸/亮部);orient=\"auto\" 在背景太花时自动回退横排。★别自己下载视频叠字再上传——那会绕开渲染机字体与印章素材,预览/成片不一致。",
|
|
11403
12088
|
"tags": [
|
|
11404
12089
|
"storyboards"
|
|
11405
12090
|
],
|
|
@@ -11415,20 +12100,53 @@
|
|
|
11415
12100
|
}
|
|
11416
12101
|
],
|
|
11417
12102
|
"requestBody": {
|
|
11418
|
-
"required":
|
|
12103
|
+
"required": true,
|
|
11419
12104
|
"content": {
|
|
11420
12105
|
"application/json": {
|
|
11421
12106
|
"schema": {
|
|
11422
12107
|
"type": "object",
|
|
11423
12108
|
"properties": {
|
|
11424
|
-
"
|
|
12109
|
+
"name": {
|
|
11425
12110
|
"type": "string",
|
|
11426
|
-
"description": "(
|
|
12111
|
+
"description": "字卡正文(人物名,或版式模式下的任意文案/整句台词);空字符串=清除字卡"
|
|
11427
12112
|
},
|
|
11428
|
-
"
|
|
11429
|
-
"type": "
|
|
12113
|
+
"seal": {
|
|
12114
|
+
"type": "string"
|
|
12115
|
+
},
|
|
12116
|
+
"side": {
|
|
12117
|
+
"type": "string",
|
|
12118
|
+
"enum": [
|
|
12119
|
+
"left",
|
|
12120
|
+
"right"
|
|
12121
|
+
]
|
|
12122
|
+
},
|
|
12123
|
+
"duration_ms": {
|
|
12124
|
+
"type": "integer",
|
|
12125
|
+
"exclusiveMinimum": 0
|
|
12126
|
+
},
|
|
12127
|
+
"orient": {
|
|
12128
|
+
"type": "string",
|
|
12129
|
+
"enum": [
|
|
12130
|
+
"vertical",
|
|
12131
|
+
"horizontal",
|
|
12132
|
+
"auto"
|
|
12133
|
+
]
|
|
12134
|
+
},
|
|
12135
|
+
"placement": {
|
|
12136
|
+
"type": "string",
|
|
12137
|
+
"enum": [
|
|
12138
|
+
"fixed",
|
|
12139
|
+
"auto"
|
|
12140
|
+
]
|
|
12141
|
+
},
|
|
12142
|
+
"font_size": {
|
|
12143
|
+
"type": "integer",
|
|
12144
|
+
"exclusiveMinimum": 0
|
|
11430
12145
|
}
|
|
11431
|
-
}
|
|
12146
|
+
},
|
|
12147
|
+
"required": [
|
|
12148
|
+
"name"
|
|
12149
|
+
]
|
|
11432
12150
|
}
|
|
11433
12151
|
}
|
|
11434
12152
|
}
|
|
@@ -11461,11 +12179,11 @@
|
|
|
11461
12179
|
}
|
|
11462
12180
|
}
|
|
11463
12181
|
},
|
|
11464
|
-
"/storyboards/{storyboard_id}/
|
|
12182
|
+
"/storyboards/{storyboard_id}/product-text-review": {
|
|
11465
12183
|
"post": {
|
|
11466
|
-
"operationId": "
|
|
11467
|
-
"summary": "
|
|
11468
|
-
"description": "
|
|
12184
|
+
"operationId": "record_product_text_review",
|
|
12185
|
+
"summary": "免费记录用户对当前产品原字的人工核对结果",
|
|
12186
|
+
"description": "免费记录用户对当前产品原字的人工核对结果。只有用户明确打开文件逐字核对并确认结果后才能调用;不得用模型判断冒充人工核对。从 get_storyboards 的 product_text 取当前 contract_hash 和 reviews 中的帧位、文件、generation_id;上传素材 generation_id 为 null,必须传同一响应的 media_version。任一变化后旧审核不能沿用。不重生、不换采用版本、不代表整片客户验收。",
|
|
11469
12187
|
"tags": [
|
|
11470
12188
|
"storyboards"
|
|
11471
12189
|
],
|
|
@@ -11487,36 +12205,55 @@
|
|
|
11487
12205
|
"schema": {
|
|
11488
12206
|
"type": "object",
|
|
11489
12207
|
"properties": {
|
|
11490
|
-
"quote_id": {
|
|
11491
|
-
"type": "string",
|
|
11492
|
-
"description": "来自 quote_shot_frame"
|
|
11493
|
-
},
|
|
11494
12208
|
"frame_type": {
|
|
11495
12209
|
"type": "string",
|
|
11496
12210
|
"enum": [
|
|
11497
12211
|
"first_frame",
|
|
11498
12212
|
"last_frame",
|
|
11499
|
-
"
|
|
12213
|
+
"video_identity"
|
|
11500
12214
|
]
|
|
11501
12215
|
},
|
|
11502
|
-
"
|
|
11503
|
-
"
|
|
12216
|
+
"generation_id": {
|
|
12217
|
+
"anyOf": [
|
|
12218
|
+
{
|
|
12219
|
+
"type": "integer",
|
|
12220
|
+
"exclusiveMinimum": 0
|
|
12221
|
+
},
|
|
12222
|
+
{
|
|
12223
|
+
"type": "null"
|
|
12224
|
+
}
|
|
12225
|
+
]
|
|
11504
12226
|
},
|
|
11505
|
-
"
|
|
12227
|
+
"media_version": {
|
|
11506
12228
|
"type": "string"
|
|
11507
12229
|
},
|
|
11508
|
-
"
|
|
12230
|
+
"image_url": {
|
|
11509
12231
|
"type": "string"
|
|
11510
12232
|
},
|
|
11511
|
-
"
|
|
11512
|
-
"type": "
|
|
12233
|
+
"contract_hash": {
|
|
12234
|
+
"type": "string"
|
|
11513
12235
|
},
|
|
11514
|
-
"
|
|
12236
|
+
"passed": {
|
|
11515
12237
|
"type": "boolean"
|
|
12238
|
+
},
|
|
12239
|
+
"confirm_visual_review": {
|
|
12240
|
+
"type": "boolean",
|
|
12241
|
+
"const": true
|
|
12242
|
+
},
|
|
12243
|
+
"note": {
|
|
12244
|
+
"type": "string",
|
|
12245
|
+
"minLength": 1,
|
|
12246
|
+
"maxLength": 1000
|
|
11516
12247
|
}
|
|
11517
12248
|
},
|
|
11518
12249
|
"required": [
|
|
11519
|
-
"
|
|
12250
|
+
"frame_type",
|
|
12251
|
+
"generation_id",
|
|
12252
|
+
"image_url",
|
|
12253
|
+
"contract_hash",
|
|
12254
|
+
"passed",
|
|
12255
|
+
"confirm_visual_review",
|
|
12256
|
+
"note"
|
|
11520
12257
|
]
|
|
11521
12258
|
}
|
|
11522
12259
|
}
|
|
@@ -11550,11 +12287,11 @@
|
|
|
11550
12287
|
}
|
|
11551
12288
|
}
|
|
11552
12289
|
},
|
|
11553
|
-
"/storyboards/{storyboard_id}/
|
|
11554
|
-
"
|
|
11555
|
-
"operationId": "
|
|
11556
|
-
"summary": "
|
|
11557
|
-
"description": "
|
|
12290
|
+
"/storyboards/{storyboard_id}/prompts": {
|
|
12291
|
+
"get": {
|
|
12292
|
+
"operationId": "get_shot_prompts",
|
|
12293
|
+
"summary": "读某一镜的四条提示词**正文**(image_prompt=首帧画面 / video_prompt=动态表演 / first_frame_prompt=开始时什么样 / last_frame_prompt=结束时什么样),供直接微调后用 u",
|
|
12294
|
+
"description": "读某一镜的四条提示词**正文**(image_prompt=首帧画面 / video_prompt=动态表演 / first_frame_prompt=开始时什么样 / last_frame_prompt=结束时什么样),供直接微调后用 update_shot 写回。免费。★回执里的 terminal_desc_missing=true 表示本镜标为「状态改变」却三处都没说终态——出尾帧会被前置闸拦下,修法是把结束状态写进 last_frame_prompt(别重试出图,重试必然重复被拒且照常扣费)。★同时回 expression_hint(本镜作者指定的面部表情,null=未指定、由平台按台词反推),改它用 update_shot。expression_inferred 是拆镜 AI 在剧本没写神态时按本镜内容推断的表情(只读;null=没推断,或本镜台词/动作/氛围/描述/强度改过、推断已过期不再使用);它优先级低于 expression_hint——推断不合意就用 update_shot 写 expression_hint 覆盖它。★逐镜按需:改哪镜读哪镜(整集列表 get_storyboards 不含提示词)。★返回的 asset_tokens 是正文里的补充参考标记(@char:N / @scene:M),改写时原样保留即可:本镜注入谁的定妆图由绑定决定(get_storyboards 的 character_ids / scene_id),删标记不会让已绑定的人消失;带 #变体 的标记是那张变体图的唯一来源;给未绑定的角色写标记会把他的图注入进来。★这是分镜表里的正文层;出图/出视频时平台还会在其上拼身份锚、一致性约束与参考图指令(不在此处,也无需你写)。改完提示词不会自动重出图/视频,要让画面跟上得再 regen 对应镜。",
|
|
11558
12295
|
"tags": [
|
|
11559
12296
|
"storyboards"
|
|
11560
12297
|
],
|
|
@@ -11569,29 +12306,6 @@
|
|
|
11569
12306
|
}
|
|
11570
12307
|
}
|
|
11571
12308
|
],
|
|
11572
|
-
"requestBody": {
|
|
11573
|
-
"required": false,
|
|
11574
|
-
"content": {
|
|
11575
|
-
"application/json": {
|
|
11576
|
-
"schema": {
|
|
11577
|
-
"type": "object",
|
|
11578
|
-
"properties": {
|
|
11579
|
-
"frame_type": {
|
|
11580
|
-
"type": "string",
|
|
11581
|
-
"enum": [
|
|
11582
|
-
"first_frame",
|
|
11583
|
-
"last_frame",
|
|
11584
|
-
"both"
|
|
11585
|
-
]
|
|
11586
|
-
},
|
|
11587
|
-
"image_model": {
|
|
11588
|
-
"type": "string"
|
|
11589
|
-
}
|
|
11590
|
-
}
|
|
11591
|
-
}
|
|
11592
|
-
}
|
|
11593
|
-
}
|
|
11594
|
-
},
|
|
11595
12309
|
"responses": {
|
|
11596
12310
|
"200": {
|
|
11597
12311
|
"description": "StarReel envelope",
|
|
@@ -11620,11 +12334,11 @@
|
|
|
11620
12334
|
}
|
|
11621
12335
|
}
|
|
11622
12336
|
},
|
|
11623
|
-
"/storyboards/{storyboard_id}/
|
|
12337
|
+
"/storyboards/{storyboard_id}/regen/generate": {
|
|
11624
12338
|
"post": {
|
|
11625
|
-
"operationId": "
|
|
11626
|
-
"summary": "
|
|
11627
|
-
"description": "
|
|
12339
|
+
"operationId": "regenerate_shot_video",
|
|
12340
|
+
"summary": "确认后重生某镜视频(可选新 prompt)",
|
|
12341
|
+
"description": "确认后重生某镜视频(可选新 prompt)。\n★收到 **409「本镜是用户上传的实拍素材」** = 该镜被 upload_shot_footage 登记成实拍素材镜,不是模型问题,换引擎无用;要用 AI 视频覆盖它就带 replace_user_footage=true,要保留素材就别重生。\n★收到 **409 + `in_flight_generation_id`** = 这一镜还有一条生成没跑完,而且它不是按这次的内容发起的(你带了新 prompt / 之后用 update_shot 改过该镜 / 之后换过该镜的首帧或尾帧——重出、上传、补出尾帧都算 / 这次带的帧、参考素材或引擎等参数与那次不同 / 在途的是一次编辑)。prompt 没变也可能是这个 409。这次重生没提交、没扣费,quote 已作废。先等在途那条完成、看过结果,再重新 quote 并重生——否则拿到的视频是旧内容(旧提示词或旧首尾帧)出的,会误以为改动没效果。\n★成功但返回里带 **`reused_in_flight: true`** = 同样的内容已经在生成(重发/双击/批量出视频已派发),这次没有新建、没有新扣费,返回的就是在途那一条,看它的进度即可,不必再发。⚠️ 批量报价确认流程:先调对应的 quote_* 工具,把返回的 estimated_points 原样告诉用户,用户明确同意后,才用返回的 quote_id 调本工具。不要擅自确认。★**出图类报价(定妆图/场景图/出帧)给的是两个数**:estimated_points 是**上界**(按该模型参考图张数上限估,保证你不会按低了的预算开跑、出到一半 402 中断);同一响应里的 typical_points 是**通常花费**。两个都要告诉客户——只说上界会让人以为贵得多(满参考图的上界可达通常值的 2 倍以上),只说通常值又会让余额准备不足。固定价模型下两者相等,这时说一个数就行。出视频的报价与扣费同函数,不存在这个区间。",
|
|
11628
12342
|
"tags": [
|
|
11629
12343
|
"storyboards"
|
|
11630
12344
|
],
|
|
@@ -11639,6 +12353,31 @@
|
|
|
11639
12353
|
}
|
|
11640
12354
|
}
|
|
11641
12355
|
],
|
|
12356
|
+
"requestBody": {
|
|
12357
|
+
"required": true,
|
|
12358
|
+
"content": {
|
|
12359
|
+
"application/json": {
|
|
12360
|
+
"schema": {
|
|
12361
|
+
"type": "object",
|
|
12362
|
+
"properties": {
|
|
12363
|
+
"quote_id": {
|
|
12364
|
+
"type": "string",
|
|
12365
|
+
"description": "来自 quote_regenerate_shot_video"
|
|
12366
|
+
},
|
|
12367
|
+
"prompt": {
|
|
12368
|
+
"type": "string"
|
|
12369
|
+
},
|
|
12370
|
+
"replace_user_footage": {
|
|
12371
|
+
"type": "boolean"
|
|
12372
|
+
}
|
|
12373
|
+
},
|
|
12374
|
+
"required": [
|
|
12375
|
+
"quote_id"
|
|
12376
|
+
]
|
|
12377
|
+
}
|
|
12378
|
+
}
|
|
12379
|
+
}
|
|
12380
|
+
},
|
|
11642
12381
|
"responses": {
|
|
11643
12382
|
"200": {
|
|
11644
12383
|
"description": "StarReel envelope",
|
|
@@ -11667,11 +12406,11 @@
|
|
|
11667
12406
|
}
|
|
11668
12407
|
}
|
|
11669
12408
|
},
|
|
11670
|
-
"/storyboards/{storyboard_id}/
|
|
11671
|
-
"
|
|
11672
|
-
"operationId": "
|
|
11673
|
-
"summary": "
|
|
11674
|
-
"description": "
|
|
12409
|
+
"/storyboards/{storyboard_id}/regen/quote": {
|
|
12410
|
+
"post": {
|
|
12411
|
+
"operationId": "quote_regenerate_shot_video",
|
|
12412
|
+
"summary": "报价:重生某镜视频要多少点",
|
|
12413
|
+
"description": "报价:重生某镜视频要多少点。返回 quote_id。零扣费。\n★**按镜指定视频引擎**:传 model 即只为这一镜这一次重生换引擎(不改剧级 video_engine,其它镜照旧);报价按该引擎计价,quote_id 把引擎钉死,regenerate_shot_video 派发的就是它——要换引擎必须重新报价,生成时再传引擎无效。回执 video_engine = 实际派发的引擎,engine_overridden=true 表示盖过了剧引擎。★所选引擎必须支持本剧分辨率(seedance-2.5 只有 480p/720p;hailuo-3 只有 720p/1080p;wan3.0/wan3.0-prime 480p~1080p),不支持则 400 并列出可选引擎——不会悄悄换成别的引擎出片;本镜时长也不能超过该引擎单镜上限(seedance-2.5/wan3.0 30s,hailuo-3 15s),超了 400(厂商会截断)。适用:某镜在本剧引擎上反复失败/被厂商审核拒/镜内自剪,单独换一个引擎试。★同剧混用引擎有画风/身份漂移风险,换完先看这一镜再决定要不要推广;写实真人镜别换 wan3.0/wan3.0-prime(真人脸 720p+ 常被厂商拒)。",
|
|
11675
12414
|
"tags": [
|
|
11676
12415
|
"storyboards"
|
|
11677
12416
|
],
|
|
@@ -11685,7 +12424,28 @@
|
|
|
11685
12424
|
"exclusiveMinimum": 0
|
|
11686
12425
|
}
|
|
11687
12426
|
}
|
|
11688
|
-
],
|
|
12427
|
+
],
|
|
12428
|
+
"requestBody": {
|
|
12429
|
+
"required": false,
|
|
12430
|
+
"content": {
|
|
12431
|
+
"application/json": {
|
|
12432
|
+
"schema": {
|
|
12433
|
+
"type": "object",
|
|
12434
|
+
"properties": {
|
|
12435
|
+
"model": {
|
|
12436
|
+
"type": "string",
|
|
12437
|
+
"enum": [
|
|
12438
|
+
"seedance-2.5",
|
|
12439
|
+
"hailuo-3",
|
|
12440
|
+
"wan3.0",
|
|
12441
|
+
"wan3.0-prime"
|
|
12442
|
+
]
|
|
12443
|
+
}
|
|
12444
|
+
}
|
|
12445
|
+
}
|
|
12446
|
+
}
|
|
12447
|
+
}
|
|
12448
|
+
},
|
|
11689
12449
|
"responses": {
|
|
11690
12450
|
"200": {
|
|
11691
12451
|
"description": "StarReel envelope",
|
|
@@ -11712,11 +12472,13 @@
|
|
|
11712
12472
|
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
11713
12473
|
}
|
|
11714
12474
|
}
|
|
11715
|
-
}
|
|
11716
|
-
|
|
11717
|
-
|
|
11718
|
-
|
|
11719
|
-
"
|
|
12475
|
+
}
|
|
12476
|
+
},
|
|
12477
|
+
"/storyboards/{storyboard_id}/repaint/generate": {
|
|
12478
|
+
"post": {
|
|
12479
|
+
"operationId": "repaint_shot_video",
|
|
12480
|
+
"summary": "确认后对某镜做视频重绘",
|
|
12481
|
+
"description": "确认后对某镜做视频重绘。扣费上限 = 报价的 estimated_points(接力时为整条合计)。\n★参考图:不传 reference_image_url 时自动取本镜角色的(换装)定妆图——**不带参考图人也会被换掉**;auto_reference=false 表示明确不要参考图(只按描述画)。\n★keep_scene 缺省 true:把本镜场景/道具/动作补进描述,只换人与衣服;传 false = 连场景一起重画。\n★control:posebodyface(缺省,保口型,说话镜用它)/ posebody(不带脸,嘴不动)/ depth(按景深,纯色背景易出竖条纹)/ scribble(线稿)。strength 只收 0 或 1。\n★本镜绑了产品文字(需保留商品原文)时会被拒(重绘会重画画面里的字)。\n★与 edit_video_shot 的分工:edit 是按指令改画面(换背景/调色/局部改动);重绘/换装重绘是**以本镜现有视频为动作骨架,把人物与服装整体重画**,动作、口型时机、镜头运动跟原片走,音轨贴回原片。\n★**客户自己的视频也能转绘**:先 upload_shot_footage 把它登记成某镜的实拍素材(会抽出首尾帧、回写时长),再对该镜报价/发起即可;转绘结果写回后该镜不再是实拍素材镜。\n★时长:≤5 秒一单(按 5 秒计费);本剧开了长镜头接力(get_repaint_capabilities 的 relayMaxSegments>0)时 5~约14 秒自动切 ≤3 段接力,每段一单、报价是合计;再长先 split_shot。\n★异步:发起返回一条生成记录(接力时是段 1),用 get_repaint_status(storyboard_id, generation_id) 查到 completed/failed;接力进行中会带 relay.segments_done/segments。完成后本镜视频即换成转绘结果;不满意用 restore_repaint_original 切回原片(免费)。⚠️ 批量报价确认流程:先调对应的 quote_* 工具,把返回的 estimated_points 原样告诉用户,用户明确同意后,才用返回的 quote_id 调本工具。不要擅自确认。★**出图类报价(定妆图/场景图/出帧)给的是两个数**:estimated_points 是**上界**(按该模型参考图张数上限估,保证你不会按低了的预算开跑、出到一半 402 中断);同一响应里的 typical_points 是**通常花费**。两个都要告诉客户——只说上界会让人以为贵得多(满参考图的上界可达通常值的 2 倍以上),只说通常值又会让余额准备不足。固定价模型下两者相等,这时说一个数就行。出视频的报价与扣费同函数,不存在这个区间。",
|
|
11720
12482
|
"tags": [
|
|
11721
12483
|
"storyboards"
|
|
11722
12484
|
],
|
|
@@ -11738,46 +12500,43 @@
|
|
|
11738
12500
|
"schema": {
|
|
11739
12501
|
"type": "object",
|
|
11740
12502
|
"properties": {
|
|
11741
|
-
"
|
|
12503
|
+
"quote_id": {
|
|
11742
12504
|
"type": "string",
|
|
11743
|
-
"description": "
|
|
12505
|
+
"description": "来自 quote_repaint_shot_video"
|
|
11744
12506
|
},
|
|
11745
|
-
"
|
|
11746
|
-
"type": "string"
|
|
11747
|
-
},
|
|
11748
|
-
"side": {
|
|
12507
|
+
"prompt": {
|
|
11749
12508
|
"type": "string",
|
|
11750
|
-
"
|
|
11751
|
-
"left",
|
|
11752
|
-
"right"
|
|
11753
|
-
]
|
|
11754
|
-
},
|
|
11755
|
-
"duration_ms": {
|
|
11756
|
-
"type": "integer",
|
|
11757
|
-
"exclusiveMinimum": 0
|
|
12509
|
+
"description": "要画成什么样(人物外貌、服装、风格)。正向描述,别写「不要 X」"
|
|
11758
12510
|
},
|
|
11759
|
-
"
|
|
12511
|
+
"control": {
|
|
11760
12512
|
"type": "string",
|
|
11761
12513
|
"enum": [
|
|
11762
|
-
"
|
|
11763
|
-
"
|
|
11764
|
-
"
|
|
12514
|
+
"posebodyface",
|
|
12515
|
+
"posebody",
|
|
12516
|
+
"depth",
|
|
12517
|
+
"scribble"
|
|
11765
12518
|
]
|
|
11766
12519
|
},
|
|
11767
|
-
"
|
|
11768
|
-
"type": "
|
|
12520
|
+
"strength": {
|
|
12521
|
+
"type": "number",
|
|
11769
12522
|
"enum": [
|
|
11770
|
-
|
|
11771
|
-
|
|
12523
|
+
0,
|
|
12524
|
+
1
|
|
11772
12525
|
]
|
|
11773
12526
|
},
|
|
11774
|
-
"
|
|
11775
|
-
"type": "
|
|
11776
|
-
|
|
12527
|
+
"reference_image_url": {
|
|
12528
|
+
"type": "string"
|
|
12529
|
+
},
|
|
12530
|
+
"auto_reference": {
|
|
12531
|
+
"type": "boolean"
|
|
12532
|
+
},
|
|
12533
|
+
"keep_scene": {
|
|
12534
|
+
"type": "boolean"
|
|
11777
12535
|
}
|
|
11778
12536
|
},
|
|
11779
12537
|
"required": [
|
|
11780
|
-
"
|
|
12538
|
+
"quote_id",
|
|
12539
|
+
"prompt"
|
|
11781
12540
|
]
|
|
11782
12541
|
}
|
|
11783
12542
|
}
|
|
@@ -11811,11 +12570,58 @@
|
|
|
11811
12570
|
}
|
|
11812
12571
|
}
|
|
11813
12572
|
},
|
|
11814
|
-
"/storyboards/{storyboard_id}/
|
|
12573
|
+
"/storyboards/{storyboard_id}/repaint/quote": {
|
|
11815
12574
|
"post": {
|
|
11816
|
-
"operationId": "
|
|
11817
|
-
"summary": "
|
|
11818
|
-
"description": "
|
|
12575
|
+
"operationId": "quote_repaint_shot_video",
|
|
12576
|
+
"summary": "报价:对某镜做**视频重绘**(按描述 + 参考图重画人物与服装,保留原片动作)要多少点",
|
|
12577
|
+
"description": "报价:对某镜做**视频重绘**(按描述 + 参考图重画人物与服装,保留原片动作)要多少点。返回 quote_id。零扣费。本镜须已有视频。报价只认本镜当前这段视频——之后视频被换(重生/上传/编辑完成),发起会 409,重新报价即可。\n★与 edit_video_shot 的分工:edit 是按指令改画面(换背景/调色/局部改动);重绘/换装重绘是**以本镜现有视频为动作骨架,把人物与服装整体重画**,动作、口型时机、镜头运动跟原片走,音轨贴回原片。\n★**客户自己的视频也能转绘**:先 upload_shot_footage 把它登记成某镜的实拍素材(会抽出首尾帧、回写时长),再对该镜报价/发起即可;转绘结果写回后该镜不再是实拍素材镜。\n★时长:≤5 秒一单(按 5 秒计费);本剧开了长镜头接力(get_repaint_capabilities 的 relayMaxSegments>0)时 5~约14 秒自动切 ≤3 段接力,每段一单、报价是合计;再长先 split_shot。\n★异步:发起返回一条生成记录(接力时是段 1),用 get_repaint_status(storyboard_id, generation_id) 查到 completed/failed;接力进行中会带 relay.segments_done/segments。完成后本镜视频即换成转绘结果;不满意用 restore_repaint_original 切回原片(免费)。",
|
|
12578
|
+
"tags": [
|
|
12579
|
+
"storyboards"
|
|
12580
|
+
],
|
|
12581
|
+
"parameters": [
|
|
12582
|
+
{
|
|
12583
|
+
"name": "storyboard_id",
|
|
12584
|
+
"in": "path",
|
|
12585
|
+
"required": true,
|
|
12586
|
+
"schema": {
|
|
12587
|
+
"type": "integer",
|
|
12588
|
+
"exclusiveMinimum": 0
|
|
12589
|
+
}
|
|
12590
|
+
}
|
|
12591
|
+
],
|
|
12592
|
+
"responses": {
|
|
12593
|
+
"200": {
|
|
12594
|
+
"description": "StarReel envelope",
|
|
12595
|
+
"content": {
|
|
12596
|
+
"application/json": {
|
|
12597
|
+
"schema": {
|
|
12598
|
+
"type": "object",
|
|
12599
|
+
"properties": {
|
|
12600
|
+
"code": {
|
|
12601
|
+
"type": "integer"
|
|
12602
|
+
},
|
|
12603
|
+
"message": {
|
|
12604
|
+
"type": "string"
|
|
12605
|
+
},
|
|
12606
|
+
"data": {
|
|
12607
|
+
"description": "Operation result payload"
|
|
12608
|
+
}
|
|
12609
|
+
}
|
|
12610
|
+
}
|
|
12611
|
+
}
|
|
12612
|
+
}
|
|
12613
|
+
},
|
|
12614
|
+
"402": {
|
|
12615
|
+
"description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
|
|
12616
|
+
}
|
|
12617
|
+
}
|
|
12618
|
+
}
|
|
12619
|
+
},
|
|
12620
|
+
"/storyboards/{storyboard_id}/reskin/generate": {
|
|
12621
|
+
"post": {
|
|
12622
|
+
"operationId": "reskin_shot_video",
|
|
12623
|
+
"summary": "确认后对某镜做换装重绘",
|
|
12624
|
+
"description": "确认后对某镜做换装重绘。扣费上限 = 报价的 estimated_points。\n★first_frame_url 是**换好装的首帧**:必须与原片首帧**构图、人物姿势、道具位置逐一对齐**(只换衣服),否则整段会跑偏——实测失败都出在首帧。完成后它会成为本镜正式首帧。只收公网 https 图片(先 upload_image 拿)。\n★prompt 可留空(系统看首帧自动写);写的话别用「制服/军装」这类服装类别词,模型会自行加肩章条纹,直接描述颜色款式。\n★control:posebodyface(缺省,保口型)/ depth。本镜绑了产品文字时会被拒。\n★与 edit_video_shot 的分工:edit 是按指令改画面(换背景/调色/局部改动);重绘/换装重绘是**以本镜现有视频为动作骨架,把人物与服装整体重画**,动作、口型时机、镜头运动跟原片走,音轨贴回原片。\n★**客户自己的视频也能转绘**:先 upload_shot_footage 把它登记成某镜的实拍素材(会抽出首尾帧、回写时长),再对该镜报价/发起即可;转绘结果写回后该镜不再是实拍素材镜。\n★时长:≤5 秒一单(按 5 秒计费);本剧开了长镜头接力(get_repaint_capabilities 的 relayMaxSegments>0)时 5~约14 秒自动切 ≤3 段接力,每段一单、报价是合计;再长先 split_shot。\n★异步:发起返回一条生成记录(接力时是段 1),用 get_repaint_status(storyboard_id, generation_id) 查到 completed/failed;接力进行中会带 relay.segments_done/segments。完成后本镜视频即换成转绘结果;不满意用 restore_repaint_original 切回原片(免费)。⚠️ 批量报价确认流程:先调对应的 quote_* 工具,把返回的 estimated_points 原样告诉用户,用户明确同意后,才用返回的 quote_id 调本工具。不要擅自确认。★**出图类报价(定妆图/场景图/出帧)给的是两个数**:estimated_points 是**上界**(按该模型参考图张数上限估,保证你不会按低了的预算开跑、出到一半 402 中断);同一响应里的 typical_points 是**通常花费**。两个都要告诉客户——只说上界会让人以为贵得多(满参考图的上界可达通常值的 2 倍以上),只说通常值又会让余额准备不足。固定价模型下两者相等,这时说一个数就行。出视频的报价与扣费同函数,不存在这个区间。",
|
|
11819
12625
|
"tags": [
|
|
11820
12626
|
"storyboards"
|
|
11821
12627
|
],
|
|
@@ -11837,55 +12643,28 @@
|
|
|
11837
12643
|
"schema": {
|
|
11838
12644
|
"type": "object",
|
|
11839
12645
|
"properties": {
|
|
11840
|
-
"
|
|
12646
|
+
"quote_id": {
|
|
11841
12647
|
"type": "string",
|
|
11842
|
-
"
|
|
11843
|
-
"first_frame",
|
|
11844
|
-
"last_frame",
|
|
11845
|
-
"video_identity"
|
|
11846
|
-
]
|
|
11847
|
-
},
|
|
11848
|
-
"generation_id": {
|
|
11849
|
-
"anyOf": [
|
|
11850
|
-
{
|
|
11851
|
-
"type": "integer",
|
|
11852
|
-
"exclusiveMinimum": 0
|
|
11853
|
-
},
|
|
11854
|
-
{
|
|
11855
|
-
"type": "null"
|
|
11856
|
-
}
|
|
11857
|
-
]
|
|
11858
|
-
},
|
|
11859
|
-
"media_version": {
|
|
11860
|
-
"type": "string"
|
|
12648
|
+
"description": "来自 quote_reskin_shot_video"
|
|
11861
12649
|
},
|
|
11862
|
-
"
|
|
11863
|
-
"type": "string"
|
|
12650
|
+
"first_frame_url": {
|
|
12651
|
+
"type": "string",
|
|
12652
|
+
"description": "换好装的首帧 https URL,须与原片首帧构图对齐"
|
|
11864
12653
|
},
|
|
11865
|
-
"
|
|
12654
|
+
"prompt": {
|
|
11866
12655
|
"type": "string"
|
|
11867
12656
|
},
|
|
11868
|
-
"
|
|
11869
|
-
"type": "boolean"
|
|
11870
|
-
},
|
|
11871
|
-
"confirm_visual_review": {
|
|
11872
|
-
"type": "boolean",
|
|
11873
|
-
"const": true
|
|
11874
|
-
},
|
|
11875
|
-
"note": {
|
|
12657
|
+
"control": {
|
|
11876
12658
|
"type": "string",
|
|
11877
|
-
"
|
|
11878
|
-
|
|
12659
|
+
"enum": [
|
|
12660
|
+
"posebodyface",
|
|
12661
|
+
"depth"
|
|
12662
|
+
]
|
|
11879
12663
|
}
|
|
11880
12664
|
},
|
|
11881
12665
|
"required": [
|
|
11882
|
-
"
|
|
11883
|
-
"
|
|
11884
|
-
"image_url",
|
|
11885
|
-
"contract_hash",
|
|
11886
|
-
"passed",
|
|
11887
|
-
"confirm_visual_review",
|
|
11888
|
-
"note"
|
|
12666
|
+
"quote_id",
|
|
12667
|
+
"first_frame_url"
|
|
11889
12668
|
]
|
|
11890
12669
|
}
|
|
11891
12670
|
}
|
|
@@ -11919,11 +12698,11 @@
|
|
|
11919
12698
|
}
|
|
11920
12699
|
}
|
|
11921
12700
|
},
|
|
11922
|
-
"/storyboards/{storyboard_id}/
|
|
11923
|
-
"
|
|
11924
|
-
"operationId": "
|
|
11925
|
-
"summary": "
|
|
11926
|
-
"description": "
|
|
12701
|
+
"/storyboards/{storyboard_id}/reskin/quote": {
|
|
12702
|
+
"post": {
|
|
12703
|
+
"operationId": "quote_reskin_shot_video",
|
|
12704
|
+
"summary": "报价:对某镜做**换装重绘**(给一张已换好装的首帧,按原片动作把整段视频续成这身打扮)要多少点",
|
|
12705
|
+
"description": "报价:对某镜做**换装重绘**(给一张已换好装的首帧,按原片动作把整段视频续成这身打扮)要多少点。返回 quote_id。零扣费。本镜须已有视频;该功能按剧开放,先看 get_repaint_capabilities 的 reskin。\n★与 edit_video_shot 的分工:edit 是按指令改画面(换背景/调色/局部改动);重绘/换装重绘是**以本镜现有视频为动作骨架,把人物与服装整体重画**,动作、口型时机、镜头运动跟原片走,音轨贴回原片。\n★**客户自己的视频也能转绘**:先 upload_shot_footage 把它登记成某镜的实拍素材(会抽出首尾帧、回写时长),再对该镜报价/发起即可;转绘结果写回后该镜不再是实拍素材镜。\n★时长:≤5 秒一单(按 5 秒计费);本剧开了长镜头接力(get_repaint_capabilities 的 relayMaxSegments>0)时 5~约14 秒自动切 ≤3 段接力,每段一单、报价是合计;再长先 split_shot。\n★异步:发起返回一条生成记录(接力时是段 1),用 get_repaint_status(storyboard_id, generation_id) 查到 completed/failed;接力进行中会带 relay.segments_done/segments。完成后本镜视频即换成转绘结果;不满意用 restore_repaint_original 切回原片(免费)。",
|
|
11927
12706
|
"tags": [
|
|
11928
12707
|
"storyboards"
|
|
11929
12708
|
],
|
|
@@ -11966,11 +12745,11 @@
|
|
|
11966
12745
|
}
|
|
11967
12746
|
}
|
|
11968
12747
|
},
|
|
11969
|
-
"/storyboards/{storyboard_id}/
|
|
12748
|
+
"/storyboards/{storyboard_id}/split": {
|
|
11970
12749
|
"post": {
|
|
11971
|
-
"operationId": "
|
|
11972
|
-
"summary": "
|
|
11973
|
-
"description": "
|
|
12750
|
+
"operationId": "split_shot",
|
|
12751
|
+
"summary": "把某镜按首尾帧拆成两镜(结构操作)",
|
|
12752
|
+
"description": "把某镜按首尾帧拆成两镜(结构操作)。免费。",
|
|
11974
12753
|
"tags": [
|
|
11975
12754
|
"storyboards"
|
|
11976
12755
|
],
|
|
@@ -11985,31 +12764,6 @@
|
|
|
11985
12764
|
}
|
|
11986
12765
|
}
|
|
11987
12766
|
],
|
|
11988
|
-
"requestBody": {
|
|
11989
|
-
"required": true,
|
|
11990
|
-
"content": {
|
|
11991
|
-
"application/json": {
|
|
11992
|
-
"schema": {
|
|
11993
|
-
"type": "object",
|
|
11994
|
-
"properties": {
|
|
11995
|
-
"quote_id": {
|
|
11996
|
-
"type": "string",
|
|
11997
|
-
"description": "来自 quote_regenerate_shot_video"
|
|
11998
|
-
},
|
|
11999
|
-
"prompt": {
|
|
12000
|
-
"type": "string"
|
|
12001
|
-
},
|
|
12002
|
-
"replace_user_footage": {
|
|
12003
|
-
"type": "boolean"
|
|
12004
|
-
}
|
|
12005
|
-
},
|
|
12006
|
-
"required": [
|
|
12007
|
-
"quote_id"
|
|
12008
|
-
]
|
|
12009
|
-
}
|
|
12010
|
-
}
|
|
12011
|
-
}
|
|
12012
|
-
},
|
|
12013
12767
|
"responses": {
|
|
12014
12768
|
"200": {
|
|
12015
12769
|
"description": "StarReel envelope",
|
|
@@ -12038,11 +12792,11 @@
|
|
|
12038
12792
|
}
|
|
12039
12793
|
}
|
|
12040
12794
|
},
|
|
12041
|
-
"/storyboards/{storyboard_id}/
|
|
12042
|
-
"
|
|
12043
|
-
"operationId": "
|
|
12044
|
-
"summary": "
|
|
12045
|
-
"description": "
|
|
12795
|
+
"/storyboards/{storyboard_id}/trim": {
|
|
12796
|
+
"put": {
|
|
12797
|
+
"operationId": "trim_shot",
|
|
12798
|
+
"summary": "裁剪某镜时长(in_ms/out_ms)",
|
|
12799
|
+
"description": "裁剪某镜时长(in_ms/out_ms)。免费;返回后需 rerender_episode 重拼成片。",
|
|
12046
12800
|
"tags": [
|
|
12047
12801
|
"storyboards"
|
|
12048
12802
|
],
|
|
@@ -12064,14 +12818,13 @@
|
|
|
12064
12818
|
"schema": {
|
|
12065
12819
|
"type": "object",
|
|
12066
12820
|
"properties": {
|
|
12067
|
-
"
|
|
12068
|
-
"type": "
|
|
12069
|
-
"
|
|
12070
|
-
|
|
12071
|
-
|
|
12072
|
-
|
|
12073
|
-
|
|
12074
|
-
]
|
|
12821
|
+
"in_ms": {
|
|
12822
|
+
"type": "integer",
|
|
12823
|
+
"minimum": 0
|
|
12824
|
+
},
|
|
12825
|
+
"out_ms": {
|
|
12826
|
+
"type": "integer",
|
|
12827
|
+
"minimum": 0
|
|
12075
12828
|
}
|
|
12076
12829
|
}
|
|
12077
12830
|
}
|
|
@@ -12106,11 +12859,11 @@
|
|
|
12106
12859
|
}
|
|
12107
12860
|
}
|
|
12108
12861
|
},
|
|
12109
|
-
"/storyboards/{storyboard_id}/
|
|
12110
|
-
"
|
|
12111
|
-
"operationId": "
|
|
12112
|
-
"summary": "
|
|
12113
|
-
"description": "
|
|
12862
|
+
"/storyboards/{storyboard_id}/trim/recommend": {
|
|
12863
|
+
"get": {
|
|
12864
|
+
"operationId": "recommend_trim_window",
|
|
12865
|
+
"summary": "裁剪窗口动作QC:对「声明时长<真实视频时长」的独立生成镜,按片内活动检测推荐 in/out 裁剪窗口——供应商产片动作常在后半段,默认从 0 秒裁会截在半动作态(如抬手没打下去)",
|
|
12866
|
+
"description": "裁剪窗口动作QC:对「声明时长<真实视频时长」的独立生成镜,按片内活动检测推荐 in/out 裁剪窗口——供应商产片动作常在后半段,默认从 0 秒裁会截在半动作态(如抬手没打下去)。免费零扣费。组模式镜不适用(组切分已内容感知,返回 applicable=false)。拿到推荐后用 trim_shot 应用。",
|
|
12114
12867
|
"tags": [
|
|
12115
12868
|
"storyboards"
|
|
12116
12869
|
],
|
|
@@ -12153,11 +12906,11 @@
|
|
|
12153
12906
|
}
|
|
12154
12907
|
}
|
|
12155
12908
|
},
|
|
12156
|
-
"/storyboards/{storyboard_id}/
|
|
12157
|
-
"
|
|
12158
|
-
"operationId": "
|
|
12159
|
-
"summary": "
|
|
12160
|
-
"description": "
|
|
12909
|
+
"/storyboards/{storyboard_id}/vace-restore": {
|
|
12910
|
+
"post": {
|
|
12911
|
+
"operationId": "restore_repaint_original",
|
|
12912
|
+
"summary": "把某镜从转绘结果切回转绘前的原片(换装重绘连首帧一起恢复)",
|
|
12913
|
+
"description": "把某镜从转绘结果切回转绘前的原片(换装重绘连首帧一起恢复)。免费。generation_id = 本镜当前视频对应的那次转绘(接力取 get_repaint_status 的 relay.final_generation_id)。\n★409 = 之后本镜又出过别的视频,不覆盖(保护后来的结果);有视频任务在跑时也别切回,在跑那单会因源片不符被存档(白花钱)。",
|
|
12161
12914
|
"tags": [
|
|
12162
12915
|
"storyboards"
|
|
12163
12916
|
],
|
|
@@ -12173,21 +12926,20 @@
|
|
|
12173
12926
|
}
|
|
12174
12927
|
],
|
|
12175
12928
|
"requestBody": {
|
|
12176
|
-
"required":
|
|
12929
|
+
"required": true,
|
|
12177
12930
|
"content": {
|
|
12178
12931
|
"application/json": {
|
|
12179
12932
|
"schema": {
|
|
12180
12933
|
"type": "object",
|
|
12181
12934
|
"properties": {
|
|
12182
|
-
"
|
|
12183
|
-
"type": "integer",
|
|
12184
|
-
"minimum": 0
|
|
12185
|
-
},
|
|
12186
|
-
"out_ms": {
|
|
12935
|
+
"generation_id": {
|
|
12187
12936
|
"type": "integer",
|
|
12188
|
-
"
|
|
12937
|
+
"exclusiveMinimum": 0
|
|
12189
12938
|
}
|
|
12190
|
-
}
|
|
12939
|
+
},
|
|
12940
|
+
"required": [
|
|
12941
|
+
"generation_id"
|
|
12942
|
+
]
|
|
12191
12943
|
}
|
|
12192
12944
|
}
|
|
12193
12945
|
}
|
|
@@ -12220,11 +12972,11 @@
|
|
|
12220
12972
|
}
|
|
12221
12973
|
}
|
|
12222
12974
|
},
|
|
12223
|
-
"/storyboards/{storyboard_id}/
|
|
12975
|
+
"/storyboards/{storyboard_id}/vace/{generation_id}": {
|
|
12224
12976
|
"get": {
|
|
12225
|
-
"operationId": "
|
|
12226
|
-
"summary": "
|
|
12227
|
-
"description": "
|
|
12977
|
+
"operationId": "get_repaint_status",
|
|
12978
|
+
"summary": "查一次视频重绘/换装重绘的进度",
|
|
12979
|
+
"description": "查一次视频重绘/换装重绘的进度。generation_id 用发起时返回的 id(接力时就是段 1 的 id,返回的是整条链的状态)。免费。\n· status=processing:进行中;接力时带 relay.segments_done/segments。\n· status=completed:本镜视频已换成转绘结果(video_url / local_path);接力完成时带 relay.final_generation_id——**切回原片要用这个 final_generation_id**,不是段 1 的 id。\n· status=completed 但 errorMsg 含「未写回」:任务期间本镜视频被换掉,结果存档在这条记录里、没覆盖本镜。\n· status=failed:errorMsg 是中文原因(接力会说明第几段失败),镜头未改动,已扣的按规则退。",
|
|
12228
12980
|
"tags": [
|
|
12229
12981
|
"storyboards"
|
|
12230
12982
|
],
|
|
@@ -12237,6 +12989,16 @@
|
|
|
12237
12989
|
"type": "integer",
|
|
12238
12990
|
"exclusiveMinimum": 0
|
|
12239
12991
|
}
|
|
12992
|
+
},
|
|
12993
|
+
{
|
|
12994
|
+
"name": "generation_id",
|
|
12995
|
+
"in": "path",
|
|
12996
|
+
"required": true,
|
|
12997
|
+
"schema": {
|
|
12998
|
+
"type": "integer",
|
|
12999
|
+
"exclusiveMinimum": 0,
|
|
13000
|
+
"description": "repaint_shot_video / reskin_shot_video 返回的 id"
|
|
13001
|
+
}
|
|
12240
13002
|
}
|
|
12241
13003
|
],
|
|
12242
13004
|
"responses": {
|