@oh-story/dsh 0.1.9 → 0.1.10
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/README.md +12 -12
- package/lib/client.js +204 -72
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +84 -74
- package/lib/drama/skills/short-drama/SKILL.md +2 -2
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
- package/lib/drama/skills/short-drama-edit/SKILL.md +27 -29
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +2 -2
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +24 -67
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +27 -56
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +37 -79
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +39 -92
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +12 -16
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +126 -11
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +64 -0
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
- package/lib/drama/skills/short-drama-review/SKILL.md +2 -3
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +9 -35
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +10 -6
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +58 -21
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +10 -9
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +12 -38
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +4 -7
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -22
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -19
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +2 -2
- package/lib/drama/skills/short-drama-write/SKILL.md +2 -4
- package/lib/index.js +289 -91
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/README.md +299 -59
- package/lib/novel-to-game/README_ZH.md +299 -56
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
- package/lib/novel-to-game/manifest.json +77 -87
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
- package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
- package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
- package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
- package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
- package/lib/oh-story/manifest.json +230 -185
- package/lib/oh-story/roles/chapter-extractor.md +177 -237
- package/lib/oh-story/roles/consistency-checker.md +4 -4
- package/lib/oh-story/roles/narrative-writer.md +24 -25
- package/lib/oh-story/roles/story-architect.md +5 -5
- package/lib/oh-story/roles/story-explorer.md +11 -11
- package/lib/oh-story/skills/story/SKILL.md +13 -7
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +40 -53
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +1 -1
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-import/SKILL.md +77 -81
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
- package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +8 -6
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +34 -16
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
- package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
- package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +38 -29
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +25 -20
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +4 -13
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/project-files.md +9 -7
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +1 -2
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +8 -6
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +86 -115
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -120
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +66 -68
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +4 -12
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +139 -18
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +34 -16
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +5 -3
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-review/SKILL.md +68 -85
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-review/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-review/references/review-quality.md +4 -10
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +8 -6
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +50 -42
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +11 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +4 -12
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
- package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +6 -147
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +54 -24
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +2 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +3 -2
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/file-activity.d.ts +19 -1
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts +7 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +16 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/drama-adapters.d.ts +5 -3
- package/lib/types/drama-adapters.d.ts.map +1 -1
- package/lib/types/native-hooks.d.ts +52 -0
- package/lib/types/native-hooks.d.ts.map +1 -1
- package/lib/types/role-identity.d.ts +17 -0
- package/lib/types/role-identity.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/package.json +45 -45
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
package/lib/drama/manifest.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"upstream": {
|
|
4
4
|
"repository": "https://github.com/zenstory-ai/drama-skills.git",
|
|
5
|
-
"commit": "
|
|
5
|
+
"commit": "795cb805c88a71ebc32d1cdcf624cd84944d8710"
|
|
6
6
|
},
|
|
7
|
-
"generatedAt": "2026-09-
|
|
7
|
+
"generatedAt": "2026-09-26T03:08:35.107Z",
|
|
8
8
|
"skills": [
|
|
9
9
|
"short-drama",
|
|
10
10
|
"short-drama-assets",
|
|
@@ -81,8 +81,8 @@
|
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"path": "skills/short-drama-assets/references/character-and-look.md",
|
|
84
|
-
"sha256": "
|
|
85
|
-
"bytes":
|
|
84
|
+
"sha256": "bb7535e28dfc616a8f101f69b457f57439792515c65b1eb78d020ac786d81b43",
|
|
85
|
+
"bytes": 11757
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
"path": "skills/short-drama-assets/references/continuity-delta.md",
|
|
@@ -91,8 +91,8 @@
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"path": "skills/short-drama-assets/references/continuity-lock.md",
|
|
94
|
-
"sha256": "
|
|
95
|
-
"bytes":
|
|
94
|
+
"sha256": "8099cee42ee3de35a0c7ce22908f6cb79bdaf61c0cdbecb39907a15e249d39d8",
|
|
95
|
+
"bytes": 7315
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
"path": "skills/short-drama-assets/references/identity-vs-variant.md",
|
|
@@ -121,8 +121,8 @@
|
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
123
|
"path": "skills/short-drama-assets/references/voice-direction.md",
|
|
124
|
-
"sha256": "
|
|
125
|
-
"bytes":
|
|
124
|
+
"sha256": "231eb47a9c84917777250a4e4f7f35ecf2d8fef39c12e846ec4b932f3e89a5f1",
|
|
125
|
+
"bytes": 9819
|
|
126
126
|
},
|
|
127
127
|
{
|
|
128
128
|
"path": "skills/short-drama-assets/scripts/asset_check.py",
|
|
@@ -301,8 +301,8 @@
|
|
|
301
301
|
},
|
|
302
302
|
{
|
|
303
303
|
"path": "skills/short-drama-edit/SKILL.md",
|
|
304
|
-
"sha256": "
|
|
305
|
-
"bytes":
|
|
304
|
+
"sha256": "2e53700bceae46e735d0d018324cec936ed6745a234763119735105947b1517e",
|
|
305
|
+
"bytes": 10416
|
|
306
306
|
},
|
|
307
307
|
{
|
|
308
308
|
"path": "skills/short-drama-edit/agents/openai.yaml",
|
|
@@ -356,48 +356,48 @@
|
|
|
356
356
|
},
|
|
357
357
|
{
|
|
358
358
|
"path": "skills/short-drama-edit/assets/剪辑单.md",
|
|
359
|
-
"sha256": "
|
|
360
|
-
"bytes":
|
|
359
|
+
"sha256": "3a99c2d7c587702e3bd06588e550faa6b62b905b8432df3bf6263e91524f3e37",
|
|
360
|
+
"bytes": 1930
|
|
361
361
|
},
|
|
362
362
|
{
|
|
363
363
|
"path": "skills/short-drama-edit/references/cut-craft.md",
|
|
364
|
-
"sha256": "
|
|
365
|
-
"bytes":
|
|
364
|
+
"sha256": "25d970ca8100232cb7d4b823aacec4bce9cda9f8cc6e5e26c396251d2b596ac6",
|
|
365
|
+
"bytes": 2261
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
"path": "skills/short-drama-edit/references/delivery-verify.md",
|
|
369
|
-
"sha256": "
|
|
370
|
-
"bytes":
|
|
369
|
+
"sha256": "ee097b3166c2b044fdc0db34aa84ef02d9a86c3862d146f12b52dc441e3a7dcb",
|
|
370
|
+
"bytes": 1821
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "skills/short-drama-edit/references/generated-footage.md",
|
|
374
|
-
"sha256": "
|
|
375
|
-
"bytes":
|
|
374
|
+
"sha256": "d8d45c18d993721079d828a743f79680a54e61e53ed7c664f15e188d42cbaffc",
|
|
375
|
+
"bytes": 2862
|
|
376
376
|
},
|
|
377
377
|
{
|
|
378
378
|
"path": "skills/short-drama-edit/references/sound-and-subtitles.md",
|
|
379
|
-
"sha256": "
|
|
380
|
-
"bytes":
|
|
379
|
+
"sha256": "99d8d38f678c048765a41a33b512e0db6aea53dfdb0d81d7f60cb7b57b25227d",
|
|
380
|
+
"bytes": 3280
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"path": "skills/short-drama-edit/references/stage-contract.md",
|
|
384
|
-
"sha256": "
|
|
385
|
-
"bytes":
|
|
384
|
+
"sha256": "21e7fc92c708b8aeed3611b3f11fa14620595328be383302c3be7ede56ed1773",
|
|
385
|
+
"bytes": 5287
|
|
386
386
|
},
|
|
387
387
|
{
|
|
388
388
|
"path": "skills/short-drama-edit/scripts/edit_tool.py",
|
|
389
|
-
"sha256": "
|
|
390
|
-
"bytes":
|
|
389
|
+
"sha256": "5863aed017019a4d8a7de9e4b81946212f503ff05d0059c2d2c28fcb3364f727",
|
|
390
|
+
"bytes": 47616
|
|
391
391
|
},
|
|
392
392
|
{
|
|
393
393
|
"path": "skills/short-drama-edit/scripts/selftest.py",
|
|
394
|
-
"sha256": "
|
|
395
|
-
"bytes":
|
|
394
|
+
"sha256": "490504c562c54c9acf8385f3eed23dd35bd6164eb5bbbff7b870b41a48bff836",
|
|
395
|
+
"bytes": 22100
|
|
396
396
|
},
|
|
397
397
|
{
|
|
398
398
|
"path": "skills/short-drama-image-prompts/SKILL.md",
|
|
399
|
-
"sha256": "
|
|
400
|
-
"bytes":
|
|
399
|
+
"sha256": "95f0bd1da8a53d887b2d9a98ea085518f1d746390cba275fee0766172f04110b",
|
|
400
|
+
"bytes": 4510
|
|
401
401
|
},
|
|
402
402
|
{
|
|
403
403
|
"path": "skills/short-drama-image-prompts/agents/openai.yaml",
|
|
@@ -436,8 +436,8 @@
|
|
|
436
436
|
},
|
|
437
437
|
{
|
|
438
438
|
"path": "skills/short-drama-image-prompts/references/common-recipe.md",
|
|
439
|
-
"sha256": "
|
|
440
|
-
"bytes":
|
|
439
|
+
"sha256": "4558ebe60a64cbfe0a2a58a0137e46c12899d36e116a240d883233f4cab92d72",
|
|
440
|
+
"bytes": 15748
|
|
441
441
|
},
|
|
442
442
|
{
|
|
443
443
|
"path": "skills/short-drama-image-prompts/references/edit-and-revision.md",
|
|
@@ -541,8 +541,8 @@
|
|
|
541
541
|
},
|
|
542
542
|
{
|
|
543
543
|
"path": "skills/short-drama-produce/SKILL.md",
|
|
544
|
-
"sha256": "
|
|
545
|
-
"bytes":
|
|
544
|
+
"sha256": "90716253be3e28eacd98071465faa8313de2b6598b6d1bc8b64b4fc8616a350e",
|
|
545
|
+
"bytes": 14398
|
|
546
546
|
},
|
|
547
547
|
{
|
|
548
548
|
"path": "skills/short-drama-produce/agents/openai.yaml",
|
|
@@ -551,8 +551,8 @@
|
|
|
551
551
|
},
|
|
552
552
|
{
|
|
553
553
|
"path": "skills/short-drama-produce/references/adapter-contract.md",
|
|
554
|
-
"sha256": "
|
|
555
|
-
"bytes":
|
|
554
|
+
"sha256": "34f4e51c8b76aebed3b49e35c15cab0372d55084f89423deee646f4be13fee5e",
|
|
555
|
+
"bytes": 11062
|
|
556
556
|
},
|
|
557
557
|
{
|
|
558
558
|
"path": "skills/short-drama-produce/references/providers/gpt-image-2.md",
|
|
@@ -561,14 +561,19 @@
|
|
|
561
561
|
},
|
|
562
562
|
{
|
|
563
563
|
"path": "skills/short-drama-produce/references/providers/minimax-h3-video.md",
|
|
564
|
-
"sha256": "
|
|
565
|
-
"bytes":
|
|
564
|
+
"sha256": "b9e81b0be63f48e661ee6afa6ca6cbc3a8bd7ce48afce2b5258c5c05f6555c30",
|
|
565
|
+
"bytes": 5538
|
|
566
566
|
},
|
|
567
567
|
{
|
|
568
568
|
"path": "skills/short-drama-produce/references/providers/minimax-music.md",
|
|
569
569
|
"sha256": "ef1d00a430edf31a451b3ed588b5e5775a7f61376a4f74d6fe75139f8f1c49cc",
|
|
570
570
|
"bytes": 1361
|
|
571
571
|
},
|
|
572
|
+
{
|
|
573
|
+
"path": "skills/short-drama-produce/references/providers/minimax-speech.md",
|
|
574
|
+
"sha256": "5eee1a47e4916f4048bddd5e4714fc66b0c877def3cf5af80d4d97971d6d2d23",
|
|
575
|
+
"bytes": 2139
|
|
576
|
+
},
|
|
572
577
|
{
|
|
573
578
|
"path": "skills/short-drama-produce/references/providers/seedance.md",
|
|
574
579
|
"sha256": "76bfd27a1b1181c0e0079c49ba4ae926012e638794c9bec3c046aaa1846e1c8d",
|
|
@@ -586,8 +591,8 @@
|
|
|
586
591
|
},
|
|
587
592
|
{
|
|
588
593
|
"path": "skills/short-drama-produce/scripts/provider_adapters.py",
|
|
589
|
-
"sha256": "
|
|
590
|
-
"bytes":
|
|
594
|
+
"sha256": "b311b155947f22ecce3f39d783f214aad84291db7966090a64f466259f9f76bf",
|
|
595
|
+
"bytes": 70329
|
|
591
596
|
},
|
|
592
597
|
{
|
|
593
598
|
"path": "skills/short-drama-produce/scripts/selftest.py",
|
|
@@ -596,8 +601,8 @@
|
|
|
596
601
|
},
|
|
597
602
|
{
|
|
598
603
|
"path": "skills/short-drama-review/SKILL.md",
|
|
599
|
-
"sha256": "
|
|
600
|
-
"bytes":
|
|
604
|
+
"sha256": "251364f35886455bded0310ac980927a93dd7563dcad53bd5271f83ea211a7c9",
|
|
605
|
+
"bytes": 5194
|
|
601
606
|
},
|
|
602
607
|
{
|
|
603
608
|
"path": "skills/short-drama-review/agents/openai.yaml",
|
|
@@ -636,8 +641,8 @@
|
|
|
636
641
|
},
|
|
637
642
|
{
|
|
638
643
|
"path": "skills/short-drama-review/references/production-quality-gates.md",
|
|
639
|
-
"sha256": "
|
|
640
|
-
"bytes":
|
|
644
|
+
"sha256": "918f7a2ffc65051b71041e920040181e75908342dc8d5ea0aa411197ee782f44",
|
|
645
|
+
"bytes": 19154
|
|
641
646
|
},
|
|
642
647
|
{
|
|
643
648
|
"path": "skills/short-drama-review/references/project-calibration.md",
|
|
@@ -666,8 +671,8 @@
|
|
|
666
671
|
},
|
|
667
672
|
{
|
|
668
673
|
"path": "skills/short-drama-review/references/rubric-visual-motion.md",
|
|
669
|
-
"sha256": "
|
|
670
|
-
"bytes":
|
|
674
|
+
"sha256": "3f594c34c003f7d81aee6cf80adedc6c04c7605703cbf156224b2d4e4cc38e37",
|
|
675
|
+
"bytes": 10517
|
|
671
676
|
},
|
|
672
677
|
{
|
|
673
678
|
"path": "skills/short-drama-review/references/stage-contract.md",
|
|
@@ -686,8 +691,8 @@
|
|
|
686
691
|
},
|
|
687
692
|
{
|
|
688
693
|
"path": "skills/short-drama-storyboard/SKILL.md",
|
|
689
|
-
"sha256": "
|
|
690
|
-
"bytes":
|
|
694
|
+
"sha256": "f893fb81cb45f02affd985fcb225cfa7a261f3020c33c4de4ce48c5669299944",
|
|
695
|
+
"bytes": 17622
|
|
691
696
|
},
|
|
692
697
|
{
|
|
693
698
|
"path": "skills/short-drama-storyboard/agents/openai.yaml",
|
|
@@ -749,6 +754,11 @@
|
|
|
749
754
|
"sha256": "02c095439f73211817a3f75ae2af264459356060755eecaf51ce11c1512ce2ca",
|
|
750
755
|
"bytes": 10255
|
|
751
756
|
},
|
|
757
|
+
{
|
|
758
|
+
"path": "skills/short-drama-storyboard/references/lighting-craft.md",
|
|
759
|
+
"sha256": "62b7fe6bfb3a87fc94732d4723d3b6c9fe1b5432c08cdbd4edca72e590216719",
|
|
760
|
+
"bytes": 2118
|
|
761
|
+
},
|
|
752
762
|
{
|
|
753
763
|
"path": "skills/short-drama-storyboard/references/production-shot-grammar.md",
|
|
754
764
|
"sha256": "c8723d9f628ea7b546a2e4a558f9d5463da8296286c15a1eeb146e492b6fe04f",
|
|
@@ -771,8 +781,8 @@
|
|
|
771
781
|
},
|
|
772
782
|
{
|
|
773
783
|
"path": "skills/short-drama-storyboard/references/shot-craft.md",
|
|
774
|
-
"sha256": "
|
|
775
|
-
"bytes":
|
|
784
|
+
"sha256": "19f33418eb236fc9a2c0c650fcce1d46b2682ce49b03e7e4891a3f1c740bfe55",
|
|
785
|
+
"bytes": 16549
|
|
776
786
|
},
|
|
777
787
|
{
|
|
778
788
|
"path": "skills/short-drama-storyboard/references/shot-revision-identity.md",
|
|
@@ -781,8 +791,8 @@
|
|
|
781
791
|
},
|
|
782
792
|
{
|
|
783
793
|
"path": "skills/short-drama-storyboard/references/stage-contract.md",
|
|
784
|
-
"sha256": "
|
|
785
|
-
"bytes":
|
|
794
|
+
"sha256": "afc5fc4dc60c49e37cb71955f345a2049720f5f94ecf58eae1cc9cd92eaea745",
|
|
795
|
+
"bytes": 10181
|
|
786
796
|
},
|
|
787
797
|
{
|
|
788
798
|
"path": "skills/short-drama-storyboard/scripts/selftest.py",
|
|
@@ -796,8 +806,8 @@
|
|
|
796
806
|
},
|
|
797
807
|
{
|
|
798
808
|
"path": "skills/short-drama-video-prompts/SKILL.md",
|
|
799
|
-
"sha256": "
|
|
800
|
-
"bytes":
|
|
809
|
+
"sha256": "e9ab120687deabf1fa34404bf8d09b46f30f7c3b209e0ab5e583dab3482bacc4",
|
|
810
|
+
"bytes": 15825
|
|
801
811
|
},
|
|
802
812
|
{
|
|
803
813
|
"path": "skills/short-drama-video-prompts/agents/openai.yaml",
|
|
@@ -846,8 +856,8 @@
|
|
|
846
856
|
},
|
|
847
857
|
{
|
|
848
858
|
"path": "skills/short-drama-video-prompts/references/camera-audio-continuity.md",
|
|
849
|
-
"sha256": "
|
|
850
|
-
"bytes":
|
|
859
|
+
"sha256": "f712304e82f1848f74b11312ad94d723a63d82f8d39da1b02b776524c30e7b55",
|
|
860
|
+
"bytes": 14317
|
|
851
861
|
},
|
|
852
862
|
{
|
|
853
863
|
"path": "skills/short-drama-video-prompts/references/delivery-profile.md",
|
|
@@ -861,23 +871,23 @@
|
|
|
861
871
|
},
|
|
862
872
|
{
|
|
863
873
|
"path": "skills/short-drama-video-prompts/references/minimax-h3.md",
|
|
864
|
-
"sha256": "
|
|
865
|
-
"bytes":
|
|
874
|
+
"sha256": "74fe472646f9eb09ae14eb2a5e3563e5c6334aacd0520e03733b3f171298898f",
|
|
875
|
+
"bytes": 16957
|
|
866
876
|
},
|
|
867
877
|
{
|
|
868
878
|
"path": "skills/short-drama-video-prompts/references/motion-recipe.md",
|
|
869
|
-
"sha256": "
|
|
870
|
-
"bytes":
|
|
879
|
+
"sha256": "7a792afb82186ebd6b64f0758655a6d275766a8619b4714e0597d80c8b471af1",
|
|
880
|
+
"bytes": 20452
|
|
871
881
|
},
|
|
872
882
|
{
|
|
873
883
|
"path": "skills/short-drama-video-prompts/references/performance-action-timing.md",
|
|
874
|
-
"sha256": "
|
|
875
|
-
"bytes":
|
|
884
|
+
"sha256": "7e9504ceeff949d13179d3137d5d010982ca8c23e8977598a58c24e5730fe4d6",
|
|
885
|
+
"bytes": 12802
|
|
876
886
|
},
|
|
877
887
|
{
|
|
878
888
|
"path": "skills/short-drama-video-prompts/references/production-prompt-grammar.md",
|
|
879
|
-
"sha256": "
|
|
880
|
-
"bytes":
|
|
889
|
+
"sha256": "558c011dbbad162d7e6b76906f3c35e44225911d87f10124580d44b053ba127e",
|
|
890
|
+
"bytes": 21937
|
|
881
891
|
},
|
|
882
892
|
{
|
|
883
893
|
"path": "skills/short-drama-video-prompts/references/review-and-fixtures.md",
|
|
@@ -886,18 +896,18 @@
|
|
|
886
896
|
},
|
|
887
897
|
{
|
|
888
898
|
"path": "skills/short-drama-video-prompts/references/seedance-2.0.md",
|
|
889
|
-
"sha256": "
|
|
890
|
-
"bytes":
|
|
899
|
+
"sha256": "00a81382de7137ce33ca602935087948cde9df499dd1d666f2602ef649b78f4b",
|
|
900
|
+
"bytes": 3460
|
|
891
901
|
},
|
|
892
902
|
{
|
|
893
903
|
"path": "skills/short-drama-video-prompts/references/seedance-2.5.md",
|
|
894
|
-
"sha256": "
|
|
895
|
-
"bytes":
|
|
904
|
+
"sha256": "cb7276819941ab6dcc3159c605402d04ad97c3d1d6ff30ae8092c695ba400e52",
|
|
905
|
+
"bytes": 8652
|
|
896
906
|
},
|
|
897
907
|
{
|
|
898
908
|
"path": "skills/short-drama-video-prompts/references/stage-contract.md",
|
|
899
|
-
"sha256": "
|
|
900
|
-
"bytes":
|
|
909
|
+
"sha256": "3680ba91f61eb63af1a3f2e9a63f91544f181716fdfe9371d3bf7767e0a5ed4c",
|
|
910
|
+
"bytes": 11089
|
|
901
911
|
},
|
|
902
912
|
{
|
|
903
913
|
"path": "skills/short-drama-video-prompts/references/target-model-profile.md",
|
|
@@ -926,8 +936,8 @@
|
|
|
926
936
|
},
|
|
927
937
|
{
|
|
928
938
|
"path": "skills/short-drama-write/SKILL.md",
|
|
929
|
-
"sha256": "
|
|
930
|
-
"bytes":
|
|
939
|
+
"sha256": "f0a74465dbdd12c06ee7a37b2eda84423d1c8d03d364f0ef42c1e04b586f81cc",
|
|
940
|
+
"bytes": 9427
|
|
931
941
|
},
|
|
932
942
|
{
|
|
933
943
|
"path": "skills/short-drama-write/agents/openai.yaml",
|
|
@@ -1021,8 +1031,8 @@
|
|
|
1021
1031
|
},
|
|
1022
1032
|
{
|
|
1023
1033
|
"path": "skills/short-drama/SKILL.md",
|
|
1024
|
-
"sha256": "
|
|
1025
|
-
"bytes":
|
|
1034
|
+
"sha256": "a8efa0cc1f73a4cbc55ee1f1aa05491b2f43fba89a43fb87a21aef5f2b612784",
|
|
1035
|
+
"bytes": 10088
|
|
1026
1036
|
},
|
|
1027
1037
|
{
|
|
1028
1038
|
"path": "skills/short-drama/agents/openai.yaml",
|
|
@@ -1131,8 +1141,8 @@
|
|
|
1131
1141
|
},
|
|
1132
1142
|
{
|
|
1133
1143
|
"path": "skills/short-drama/scripts/creator_markdown_check.py",
|
|
1134
|
-
"sha256": "
|
|
1135
|
-
"bytes":
|
|
1144
|
+
"sha256": "21f0af79598d6161cec8c7bf720fe9acbe4d4de4319c9eb1499c8e5a77277e97",
|
|
1145
|
+
"bytes": 61927
|
|
1136
1146
|
},
|
|
1137
1147
|
{
|
|
1138
1148
|
"path": "skills/short-drama/scripts/project_tool.py",
|
|
@@ -37,8 +37,8 @@ license: MIT
|
|
|
37
37
|
现成剧本可直接拆资产;已有视觉事实可直接写图片提示词或分镜;已有分镜可直接写视频提示词。
|
|
38
38
|
不要为补齐名义流水线伪造上游。
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
五份创作文档记录剧本、视觉与提示词;剪辑单在素材生产后记录取舍和后期处理。
|
|
41
|
+
修改故事、镜头职责或上游时长声明时,回到负责该内容的文档。
|
|
42
42
|
|
|
43
43
|
## 执行请求
|
|
44
44
|
|
|
@@ -1284,6 +1284,20 @@ def validate_episode(episode: Path, project_root: Optional[Path] = None) -> list
|
|
|
1284
1284
|
_check_named_coverage(
|
|
1285
1285
|
keyframe, shot_id, "冻结关键帧提示词", basis, visual_entries, errors
|
|
1286
1286
|
)
|
|
1287
|
+
# The closing keyframe is optional — many shots end where they began —
|
|
1288
|
+
# but a heading that is present and malformed is a defect, not a shot
|
|
1289
|
+
# that quietly has no closing frame.
|
|
1290
|
+
if re.search(r"^### 收尾关键帧提示词\s*$", shot_body, re.MULTILINE):
|
|
1291
|
+
closing = _copyable_prompt(shot_body, heading=r"收尾关键帧提示词")
|
|
1292
|
+
if closing is None:
|
|
1293
|
+
errors.append(
|
|
1294
|
+
f"{shot_id}: 收尾关键帧提示词不是唯一且非空的可复制正文"
|
|
1295
|
+
+ _copyable_prompt_cause(shot_body, heading=r"收尾关键帧提示词")
|
|
1296
|
+
)
|
|
1297
|
+
elif basis.parsed:
|
|
1298
|
+
_check_named_coverage(
|
|
1299
|
+
closing, shot_id, "收尾关键帧提示词", basis, visual_entries, errors
|
|
1300
|
+
)
|
|
1287
1301
|
if basis.parsed and source_value:
|
|
1288
1302
|
# A shot's 来源 is its claim on the screenplay: whatever it quotes,
|
|
1289
1303
|
# this shot is the one that films it. Quoting an action performed by
|
|
@@ -128,6 +128,16 @@ Character 拥有,换鞋、加厚外套、盘发都不改写它(那些属于
|
|
|
128
128
|
| 剪影与线条 | 轮廓与肩背重心、发型剪影与发际形状、固定配饰外形、服装廓形、步态负重 | 细微的五官不对称、浅色小痣、依赖真实皮肤纹理的痕迹 |
|
|
129
129
|
| 材质与表面 | 皮肤/毛发/布料的可比较表面状态、长期使用痕迹 | 需要柔和过渡才能读出的体积差 |
|
|
130
130
|
|
|
131
|
+
### 写实细节与身份连续性
|
|
132
|
+
|
|
133
|
+
**`craft_default`**:写实项目可以在稳定识别特征之外,补充皮肤纹理、自然不对称或使用痕迹。
|
|
134
|
+
远景中不易读出的细节,不宜单独承担跨镜识别。
|
|
135
|
+
|
|
136
|
+
痣、疤和牙齿形态等如果是人物既定特征,仍须保持;不能因它们难生成就允许随镜变化。
|
|
137
|
+
毛孔、细纹等微观纹理不必逐像素一致。是否需要这些细节由画面尺度与已接受风格决定。
|
|
138
|
+
|
|
139
|
+
**`taste_option`**:偶像化、漫画或其他风格可采用更平滑的表面,不以写实程度判错。
|
|
140
|
+
|
|
131
141
|
### 边界:形态选通道,身份定事实
|
|
132
142
|
|
|
133
143
|
- **`reviewed_invariant`**:形态可以改变锚点的**表达通道与颗粒度**,不得改写身份事实本身。
|
|
@@ -42,15 +42,12 @@
|
|
|
42
42
|
|
|
43
43
|
- 锁面必须**逐字出现在它管到的每一份可复制正文里**。校验器会在三处查同一个字符串:
|
|
44
44
|
图片提示词正文、冻结关键帧提示词、视频提示词正文。
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- 确实需要自然语言描述时,把锁的 `镜头:` / `图片:` 范围收窄到语言一致的那些正文,
|
|
52
|
-
另一侧的同一事实另立一条锁,不要用一条锁去跨语言。
|
|
53
|
-
因为它要落进可复制正文,不是落进创作者说明;
|
|
45
|
+
- 图片与冻结关键帧使用 `format/prompt_language`,视频可能使用另选的 `video_prompt_language`。
|
|
46
|
+
语言不同时,优先使用确实适合各份正文的共同色值、型号或专名。
|
|
47
|
+
当前 `镜头:` 同时约束本镜首帧与视频正文,不能靠拆成两把锁分别约束两种语言。
|
|
48
|
+
没有合适共同词组时,在视觉设定中保留事实并报告此限制,暂不声明这把逐字锁;
|
|
49
|
+
不缩小事实实际出现的镜头范围来绕过检查,也不自行改变用户选择的正文语言。
|
|
50
|
+
|
|
54
51
|
- 只保留最小可辨识名词短语,通常是「颜色 + 材质/形制 + 物体」,例如
|
|
55
52
|
`pale blue chunky knit wool sweater`;
|
|
56
53
|
- 不含句号、动作、状态、数量、镜头信息和剧情;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
## 目录
|
|
4
4
|
|
|
5
5
|
- [参考音频是载体](#参考音频是载体)
|
|
6
|
+
- [参考可以是合成出来的](#参考可以是合成出来的)
|
|
6
7
|
- [身份与表演的界线](#身份与表演的界线)
|
|
7
8
|
- [一段参考音频可以决定什么](#一段参考音频可以决定什么)
|
|
8
9
|
- [绑定不等于听过](#绑定不等于听过)
|
|
@@ -27,6 +28,20 @@
|
|
|
27
28
|
`reference: null` 并写明「待选型」——**不要用一段文字描述冒充音色身份**。
|
|
28
29
|
下游拿着一段形容词去找声音,找回来的每次都不一样,而记录看起来是完整的。
|
|
29
30
|
|
|
31
|
+
### 参考可以是合成出来的
|
|
32
|
+
|
|
33
|
+
使用声音库时,确认所选音色及其使用范围符合供应商提供的许可。
|
|
34
|
+
项目没有配音演员、也不打算克隆谁的时候,这条路是让 `reference` 从 `待选型` 变成实际路径的
|
|
35
|
+
办法——**挑一个预置音色,合成一条,绑上去**。合成由 `$short-drama-produce` 的 `tts` 模态执行。
|
|
36
|
+
|
|
37
|
+
合成出来的参考和录音来的参考在本文档里受同样的约束:它一样要写用途边界,一样要有
|
|
38
|
+
`admission_status`,一样不能用形容词代替。差别只有一处——**它的选型判据是拿来挑预置音色的,
|
|
39
|
+
不是拿来判克隆像不像的**,所以「与谁最易混」这条要在同一批预置音色里回答,而不是在角色之间
|
|
40
|
+
凭空回答。预置库里两个音色听起来就是同一个人时,换一个,不要靠判据文字假装区分。
|
|
41
|
+
|
|
42
|
+
音色 ID 本身写进 `reference` 那一行,和路径、用途边界一起。它是创作决定:同一个角色在两集之间
|
|
43
|
+
换 ID 就是换人说话,这件事必须在文档里看得见、diff 里查得出。
|
|
44
|
+
|
|
30
45
|
## 身份与表演的界线
|
|
31
46
|
|
|
32
47
|
一句话判定:**这个特征在角色安静地坐着说一句无关紧要的话时还在吗**?
|
|
@@ -115,6 +130,15 @@ CHAR-A 与 CHAR-B 最易混:两条参考同为中低音区、语速偏慢。
|
|
|
115
130
|
|
|
116
131
|
角色多时按易混组分批选型,而不是按出场顺序。
|
|
117
132
|
|
|
133
|
+
### 对比选择预置音色
|
|
134
|
+
|
|
135
|
+
用同一组有代表性的台词试听候选,比较角色间是否易混,以及同一角色在不同情绪下是否稳定。
|
|
136
|
+
音色名称仅供检索,选择依据是实际声音。
|
|
137
|
+
|
|
138
|
+
需要测量时,F0 和谱特征可辅助定位近似音色;同一候选应有多句样本,才能估计自身变化。
|
|
139
|
+
不把音高间距或「组间距离大于组内极差」设为通用门槛。最终按角色需求与回听结果选择,
|
|
140
|
+
不为追求数字分离而改变已接受的声音方向。
|
|
141
|
+
|
|
118
142
|
## 专名发音
|
|
119
143
|
|
|
120
144
|
已接受的专名发音只能有一种拼法(`AST-10`)。
|
|
@@ -149,3 +173,7 @@ CHAR-A 与 CHAR-B 最易混:两条参考同为中低音区、语速偏慢。
|
|
|
149
173
|
|
|
150
174
|
临时情绪、呼吸、重音、音量和空间混响仍由剧本/镜头/视频提示词拥有。声音方向是生产输入,不是
|
|
151
175
|
合成结果保证;实际 TTS 仍由 `$short-drama-produce` 在精确预览并显式确认后执行。
|
|
176
|
+
|
|
177
|
+
参考音频落地之后,它在下游有两个去处:作为视频模型的音色参考绑定(见目标模型的方言文档),
|
|
178
|
+
以及作为配音本的实际人声。配音使用同一已选音色逐句合成;参考音频用于选型或模型绑定,不能直接充当不同台词的成品音轨。
|
|
179
|
+
是否保持角色声音,仍需在生成后回听确认。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: short-drama-edit
|
|
3
|
-
description:
|
|
3
|
+
description: 将已生成的短剧镜头剪成成片,记录入出点、镜序、声音、字幕与交付规格。用于套剪、加字幕、统一响度、调整节奏或导出精修素材;需要补素材或修改故事时转回对应创作阶段。
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -9,9 +9,7 @@ license: MIT
|
|
|
9
9
|
把 `剧集/<EP>/制作成果/` 里的逐镜素材装配成一条成片,取舍写进 `剧集/<EP>/剪辑单.md`。
|
|
10
10
|
每段使用二级标题 `## CUT-...`,各自绑定一个 `MOTION-...` 和一个真实媒体文件。
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
应该是什么」;只有到这里,才第一次能回答「生成出来的这一段,哪一部分真的能用」。这两件事经常
|
|
14
|
-
不一致,而处理这个不一致正是剪辑的工作,不是缺陷。
|
|
12
|
+
根据实际素材选择可用片段,按剧本与分镜核对叙事。素材与意图不一致时,记录取舍和缺口。
|
|
15
13
|
|
|
16
14
|
## Quick Start
|
|
17
15
|
|
|
@@ -24,12 +22,15 @@ license: MIT
|
|
|
24
22
|
进入条件是**素材已经存在且可读**:`剧集/<EP>/制作成果/` 里有本次要用的视频文件。
|
|
25
23
|
提示词写完、job 确认过、adapter 返回成功,都不等于素材可用;本阶段只认当前能打开的文件字节。
|
|
26
24
|
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
素材不全时可以先剪已有连续段落;用户要求完整成片时,将这一版标为片段并列出缺口。
|
|
26
|
+
在「未采用镜头」说明缺文件、质量不可用或叙事取舍。
|
|
29
27
|
|
|
30
28
|
`剧集/<EP>/分镜.md` 与 `视频提示词.md` 是镜序和职责的来源。剪辑可以**取舍**它们,不能**改写**
|
|
31
29
|
它们:删一镜、缩一镜、换顺序都属于本阶段;改台词、改镜头职责、改起终状态要回上游发修订请求。
|
|
32
30
|
|
|
31
|
+
内置渲染直接拼接编码后的分段,输入素材的画幅与帧率须一致。`check` 在可探测媒体时核对;
|
|
32
|
+
不同规格先通过外部工具按交付要求统一,保留构图并记录裁切或留边,再更新剪辑单的路径与时间。
|
|
33
|
+
|
|
33
34
|
渲染与测量需要 `ffmpeg` / `ffprobe` 在 PATH 上。没有时 `edit_tool.py` 直接失败并说明,
|
|
34
35
|
不用别的手段近似,也不把「没测」写成「通过」。
|
|
35
36
|
|
|
@@ -38,17 +39,15 @@ license: MIT
|
|
|
38
39
|
1. **逐段看完整素材,先标可用带,再谈剪辑。** 每个文件从头到尾看一遍,写下它实际能用的时间
|
|
39
40
|
区间,以及区间之外发生了什么(起势静止、结尾漂移、发白、动作回弹、多余的重复表演)。
|
|
40
41
|
这一步的产出是事实,不是决定。做法见 [生成素材的可用带](references/generated-footage.md)。
|
|
41
|
-
2.
|
|
42
|
-
|
|
43
|
-
3.
|
|
42
|
+
2. **有台词的镜先定位发声区间。** 保留完整字音和所需停顿。内置工具同步切画面与声音;
|
|
43
|
+
需要在连续对白上换画面时,使用外部剪辑工具分开处理。
|
|
44
|
+
3. **在可用区间内选叙事入出点。** 按动作、反应或停顿的需要选择入点,出点取信息完成之后、缺陷
|
|
44
45
|
开始之前。逐段写清入点理由和出点理由。做法见 [入出点与镜序](references/cut-craft.md)。
|
|
45
|
-
4. **排镜序并检查相邻关系。**
|
|
46
|
-
|
|
47
|
-
5. **对一遍相邻段的画面。** 逐镜生成的素材会漂移:同一个人、同一张桌子的两条,
|
|
48
|
-
回来可能差一档曝光、半步白平衡。差得看得出来时,在那一段写一行 `画面`。
|
|
46
|
+
4. **排镜序并检查相邻关系。** 检查动作、空间、揭示与声音是否连贯;重复信息没有新增作用时再删。
|
|
47
|
+
5. **比较相邻段的画面。** 按同场景、同光态比较可比区域;有可见偏差时在对应段写 `画面`。
|
|
49
48
|
做法见 [接镜与色彩一致性](references/generated-footage.md#接镜与色彩一致性)。
|
|
50
|
-
6. **处理声音接缝与响度。**
|
|
51
|
-
|
|
49
|
+
6. **处理声音接缝与响度。** 拼接后回听;需要混音时通过外部工具执行并记录。
|
|
50
|
+
做法见 [声音、字幕与音乐](references/sound-and-subtitles.md)。
|
|
52
51
|
7. **写字幕。** 字幕的每一个字都取自 `剧本.md` 的台词原文,不取自转写结果;标点可按字幕惯例调整,
|
|
53
52
|
字不能改。转写只用来定位时间。
|
|
54
53
|
8. **写出 `剪辑单.md`,再渲染。** 先有文档后有成片:文档是可审查、可修订、可复现的那一份,
|
|
@@ -58,7 +57,7 @@ license: MIT
|
|
|
58
57
|
## 剪辑单要求
|
|
59
58
|
|
|
60
59
|
- 正文开头写交付规格:`成片目标时长`、`画幅与帧率`、`交付响度`、`字幕`。目标时长是意图,
|
|
61
|
-
|
|
60
|
+
实际时长与目标的差写在报告里。用户明确要求固定时长时,应满足要求或报告缺少的素材。
|
|
62
61
|
- 每段一个 `## CUT-<EP>-<序号> · <中文名称>`,块内逐行写:
|
|
63
62
|
|
|
64
63
|
- `- 来源:<MOTION-...> · <项目相对路径>`——`MOTION-...` 必须是 `视频提示词.md` 里真实存在
|
|
@@ -66,18 +65,17 @@ license: MIT
|
|
|
66
65
|
- `- 入点:<秒>` / `- 出点:<秒>` / `- 时长:<秒>`——三者必须自洽,`出点 - 入点 == 时长`。
|
|
67
66
|
全部用秒,保留两位小数,不写时间码,不写帧号。
|
|
68
67
|
- `- 取舍:入点=<理由>;出点=<理由>`——理由写画面上发生了什么,不写「节奏需要」。
|
|
69
|
-
|
|
70
|
-
- `-
|
|
68
|
+
理由应能对应实际素材与本镜叙事需要。
|
|
69
|
+
- `- 声音:<本段声音怎么处理>`——记录保留原声或外部处理。此行不驱动内置 render 的混音。
|
|
71
70
|
- `- 画面:<接镜校正>` 或 `- 画面:无`——只在这一段与相邻段明显对不上时写,
|
|
72
71
|
格式是「亮度 <数>」「饱和 <数>」「色温 <数>」三项的任意组合,用 `;` 分隔。
|
|
73
72
|
详见 [接镜与色彩一致性](references/generated-footage.md#接镜与色彩一致性)。
|
|
74
73
|
- `- 字幕:<逐字台词原文>` 或 `- 字幕:无`。本段有多句台词时改用编号写法,
|
|
75
|
-
每句自带时间:`- 字幕 1:0.20-1.50
|
|
76
|
-
编号从 1
|
|
77
|
-
只写一条字幕会让另外两句在成片上无声地消失。
|
|
74
|
+
每句自带时间:`- 字幕 1:0.20-1.50 请进`、`- 字幕 2:2.30-4.30 门没有锁`。
|
|
75
|
+
编号从 1 连续,时间相对本 CUT 入点,且不得重叠。
|
|
78
76
|
- 素材里没有被采用的镜头,在正文开头写一行 `- 未采用镜头:<MOTION-...>(理由:……)`,
|
|
79
77
|
多项用 `;` 连接。理由区分两类:**文件缺失**(还没生产 / 生产失败)和**质量不可用**
|
|
80
|
-
|
|
78
|
+
(生成结果不能用),也可说明叙事取舍。补素材前先判断需要重出还是修订上游。
|
|
81
79
|
- 同一个 `MOTION-...` 可以拆成多个 `CUT-...`(同一段素材的两处分别使用),也可以整段不用。
|
|
82
80
|
不能凭空出现没有素材来源的 `CUT-...`。
|
|
83
81
|
- 一段素材被用两次时,两个 `CUT-...` 的区间不得重叠:同一批帧在成片里出现两次是重复镜头,
|
|
@@ -89,11 +87,10 @@ license: MIT
|
|
|
89
87
|
回 `$short-drama-video-prompts` 或 `$short-drama-image-prompts`。
|
|
90
88
|
- **不改上游语义。** 剪辑单可以让某句台词不出现在成片里(整镜未采用),不能改这句台词是什么。
|
|
91
89
|
发现剧本层面的问题就点名报告,交回 `$short-drama-write`。
|
|
92
|
-
-
|
|
93
|
-
另一种产品形态,不在本套件的目标里。
|
|
90
|
+
- **沿用剧本的声音设计。** 保留已有对白、VO 和 OS,不自行增加解说;需要新增叙述时回写作阶段。
|
|
94
91
|
- **不把技术成功写成质量结论。** 渲染完成、时长对上、文件存在,都不是「这条片子能看」。
|
|
95
92
|
成片质量的判断交给 `$short-drama-review`,或交给创作者本人。
|
|
96
|
-
-
|
|
93
|
+
- **按已授权目标完成。** 继续修复影响交付的问题;新增创作方向或补素材需求交给创作者决定。
|
|
97
94
|
|
|
98
95
|
## 命令
|
|
99
96
|
|
|
@@ -111,18 +108,19 @@ python3 <本技能目录>/scripts/edit_tool.py verify <剧集/EP001> --project-r
|
|
|
111
108
|
输出 `剧集/<EP>/制作成果/成片/`。`verify` 只测量已经渲染出来的成片并回报数字,不改文件、
|
|
112
109
|
不给质量结论。
|
|
113
110
|
|
|
114
|
-
|
|
111
|
+
字幕默认由带 libass 的 ffmpeg 烧录。`--subtitles remotion` 换成一条排版可调的
|
|
115
112
|
路线,代价是装一次 Node 依赖,而且叠层要**逐帧过无头浏览器**渲整部成片——慢且吃内存,
|
|
116
113
|
并发默认压在 2(`--remotion-concurrency` 可调,调高前先量本机)。取舍见
|
|
117
114
|
[声音、字幕与音乐](references/sound-and-subtitles.md),装法见
|
|
118
115
|
[Remotion 字幕叠层](assets/remotion/README.md)。
|
|
119
116
|
|
|
120
|
-
`render`
|
|
121
|
-
|
|
117
|
+
`render` 保留切好的中间文件。它只切段、硬拼接、统一字幕样式、接镜校正和整片响度,
|
|
118
|
+
不执行 `声音` 行中的混音方案,也不按交付规格自动缩放或改帧率。需要混音、逐镜字幕避让、
|
|
119
|
+
转场或画幅转换时用外部工具完成并记录,验收实际交付文件。
|
|
122
120
|
|
|
123
121
|
## 按需知识
|
|
124
122
|
|
|
125
|
-
|
|
123
|
+
先读本 SKILL、当前分镜、视频提示词和素材;有字幕时读取剧本原文。按需要打开参考资料:
|
|
126
124
|
|
|
127
125
|
- 阶段边界与规则分级:[阶段契约](references/stage-contract.md)
|
|
128
126
|
- 可用带、生成缺陷与逐镜取舍:[生成素材的可用带](references/generated-footage.md)
|