@oh-story/dsh 0.1.4 → 0.1.6
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 +56 -12
- package/lib/client.js +2707 -268
- package/lib/client.js.map +4 -4
- package/lib/drama/manifest.json +136 -101
- package/lib/drama/skills/short-drama/SKILL.md +61 -1
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +7 -4
- package/lib/drama/skills/short-drama/references/creator-documents.md +133 -8
- package/lib/drama/skills/short-drama/references/creator-workflow.md +38 -2
- package/lib/drama/skills/short-drama/references/knowhow-index.md +3 -0
- package/lib/drama/skills/short-drama/references/reference-roles.md +10 -7
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +3 -0
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
- package/lib/drama/skills/short-drama-assets/SKILL.md +13 -3
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +2 -1
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +19 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +6 -2
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +4 -3
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +3 -1
- package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
- package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
- package/lib/drama/skills/short-drama-produce/SKILL.md +46 -10
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
- package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
- package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +12 -0
- package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +76 -7
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +6 -2
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +5 -2
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +16 -0
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +8 -3
- package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +81 -13
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +21 -1
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -6
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +11 -7
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +5 -2
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
- package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
- package/lib/drama/skills/short-drama-write/SKILL.md +3 -2
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
- package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
- package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
- package/lib/index.js +865 -33
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/LICENSE +21 -0
- package/lib/novel-to-game/README.md +180 -0
- package/lib/novel-to-game/README_ZH.md +178 -0
- package/lib/novel-to-game/VERSION +1 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
- package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
- package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
- package/lib/novel-to-game/manifest.json +508 -0
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
- package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
- package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
- package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
- package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
- package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
- package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
- package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
- package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
- package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
- package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
- package/lib/oh-story/manifest.json +415 -305
- package/lib/oh-story/roles/consistency-checker.md +1 -1
- package/lib/oh-story/roles/narrative-writer.md +32 -33
- package/lib/oh-story/roles/story-architect.md +16 -26
- package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
- package/lib/oh-story/skills/story/SKILL.md +16 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-import/SKILL.md +19 -10
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
- package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
- package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
- package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/{story-setup/references/agent-references/genre-core-mechanics.md → story-long-write/references/long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-long-write/references/long-reversal.md} +18 -32
- package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +14 -14
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-review/SKILL.md +26 -17
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
- package/lib/oh-story/skills/story-setup/SKILL.md +74 -33
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
- package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
- package/lib/oh-story/skills/{story-long-write/references/genre-core-mechanics.md → story-setup/references/agent-references/long-genre-mechanics.md} +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → long-reversal.md} +18 -32
- package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
- package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
- package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
- package/lib/oh-story/skills/{story-long-write/references/reversal-toolkit.md → story-setup/references/agent-references/short-reversal.md} +29 -23
- package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
- package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
- package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
- package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
- package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
- package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
- package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
- package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
- package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
- package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
- package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
- package/lib/types/client/drama-production-view.d.ts +34 -0
- package/lib/types/client/drama-production-view.d.ts.map +1 -0
- package/lib/types/client/drama-production.d.ts +92 -0
- package/lib/types/client/drama-production.d.ts.map +1 -0
- package/lib/types/client/file-activity.d.ts +4 -2
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-intents.d.ts +9 -0
- package/lib/types/client/production-intents.d.ts.map +1 -0
- package/lib/types/client/production-prompts.d.ts +9 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -0
- package/lib/types/client/production-runtime.d.ts +58 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -0
- package/lib/types/client/video-studio.d.ts +41 -0
- package/lib/types/client/video-studio.d.ts.map +1 -0
- package/lib/types/client/workbench-ui.d.ts +5 -0
- package/lib/types/client/workbench-ui.d.ts.map +1 -0
- package/lib/types/game-verification.d.ts +16 -0
- package/lib/types/game-verification.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/production-intent.d.ts +21 -0
- package/lib/types/production-intent.d.ts.map +1 -0
- package/lib/types/production-tool.d.ts +5 -0
- package/lib/types/production-tool.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts +7 -0
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts +42 -0
- package/lib/types/video-project.d.ts.map +1 -0
- package/lib/types/workspace-request-trust.d.ts +6 -0
- package/lib/types/workspace-request-trust.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts +20 -0
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +282 -0
- package/lib/video-recap/LICENSE +21 -0
- package/lib/video-recap/README.en.md +257 -0
- package/lib/video-recap/README.md +255 -0
- package/lib/video-recap/manifest.json +684 -0
- package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
- package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
- package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
- package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
- package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
- package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
- package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
- package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
- package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
- package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
- package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
- package/lib/video-recap/skills/video-script/SKILL.md +248 -0
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
- package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
- package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
- package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
- package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
- package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
- package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
- package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
- package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
- package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
- package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
- package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
- package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
- package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
- package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
- package/package.json +55 -40
- package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
- package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
- package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
- package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
- package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
- package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
- package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
- package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
- /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
- /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# MiniMax H3 提示词方言
|
|
2
|
+
|
|
3
|
+
只在目标档案明确写 `target_video_model: minimax-h3` 时使用。推荐档案:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"target_video_model": "minimax-h3",
|
|
8
|
+
"video_prompt_dialect": "minimax-h3",
|
|
9
|
+
"video_prompt_language": "en",
|
|
10
|
+
"native_duration_seconds": {"min": 4, "max": 15},
|
|
11
|
+
"supported_generation_modes": ["text", "first_frame", "first_last_frame", "reference"],
|
|
12
|
+
"audio_generation": "same_pass"
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
H3 的结构字段用英文;这不等于把中文对白翻成英文。每句中文对白保持原文并写成
|
|
17
|
+
`<d>[Chinese] 逐字台词</d>`,由稳定说话人 ID 引出。不要在对白前增加外语、语气词或未写入剧本的开场句。
|
|
18
|
+
|
|
19
|
+
点名 MiniMax H3 只选定模型与方言,不表示创作者选了文生视频。当镜头需要人物、场景、道具或起始构图一致性时,
|
|
20
|
+
先按主 Skill 完成真实图片发现与缺口列表。有任何必要图片仍缺失时,不因 H3 同时支持 Base 模式就默默改用文生视频。
|
|
21
|
+
|
|
22
|
+
## Base / 首帧 / 首尾帧
|
|
23
|
+
|
|
24
|
+
文生视频、首帧和首尾帧使用三段结构:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
integrated_multimodal_description: [Shot 1] ...
|
|
28
|
+
overall_soundscape: ...
|
|
29
|
+
non_diegetic_music: ...
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
- 画面段按 `[Shot 1]`、`[Shot 2]` 写动作和镜头;单镜也保留 `[Shot 1]`。
|
|
33
|
+
- 声音段闭合所有对白、环境声与音效。无配乐时写 `non_diegetic_music: N/A`,不要留空让模型补乐。
|
|
34
|
+
- 首帧模式从输入帧的可见姿态开始;首尾帧模式只能到达上游已接受终点,不发明过渡后的新状态。
|
|
35
|
+
|
|
36
|
+
## 选哪一种模式
|
|
37
|
+
|
|
38
|
+
模式由本镜「输入参考图」里各槽位的 `用途` 决定,不由“想不想用多模态”决定:
|
|
39
|
+
|
|
40
|
+
| 本镜绑定的图 | H3 模式 | 正文结构 |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| 没有图,且创作者已明确选择文生视频 | Base(文生) | 三段 |
|
|
43
|
+
| 只有一张 `用途:起始帧` | `first_frame` | 三段 |
|
|
44
|
+
| 一张 `用途:起始帧` + 一张 `用途:结束帧` | `first_last_frame` | 三段 |
|
|
45
|
+
| 其他任何组合(起始帧与人物/地点/道具图同时存在,或只有人物/地点/道具图) | `reference`(full-reference) | 六段 |
|
|
46
|
+
|
|
47
|
+
H3 官方另有只给尾帧、由模型推断开场的 L2VA 模式。本套件不使用它:开场由分镜已接受的起点决定,
|
|
48
|
+
把它交给模型推断会让 `SHOT-...` 的起点失去权威。因此 `结束帧` 只在同时绑定 `起始帧` 时出现。
|
|
49
|
+
|
|
50
|
+
第四行是最常见、也最容易写错的一种。H3 的首/尾帧输入与参考输入**互斥**,所以「起始帧 + 角色板 +
|
|
51
|
+
场景板」不能拆成 `first_frame` 加 `reference_image`:整组统一走 full-reference,起始帧也以
|
|
52
|
+
`reference_image` 送入,正文按下面的标签编号引用。用哪一种模式在《视频提示词.md》里由 `用途` 组合读出,
|
|
53
|
+
不写进「生成方式」字段——该字段仍只有「文生视频」和「图生视频」两个值。
|
|
54
|
+
|
|
55
|
+
## Full-reference
|
|
56
|
+
|
|
57
|
+
任何 `reference_image`、`reference_video` 或 `reference_audio` 进入任务时,改用六段结构,段名和正文说明均用英文:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
subject_definitions: ...
|
|
61
|
+
summary: ...
|
|
62
|
+
retention_analysis: ...
|
|
63
|
+
detailed_description: [Shot 1] ...
|
|
64
|
+
overall_soundscape: ...
|
|
65
|
+
non_diegetic_music: ...
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**这六段是一条提示词,一次整体提交。** 它们是同一个 `MOTION-...` 的可复制正文,从第一段到最后一段
|
|
69
|
+
一起放进那一次生成的提示词框,不是六次生成、也不是只提交第一段。三段结构的 Base / 首帧 / 首尾帧同理。
|
|
70
|
+
一镜一次生成,所以下一镜换成它自己那条完整正文。
|
|
71
|
+
|
|
72
|
+
### 素材标签怎么编号
|
|
73
|
+
|
|
74
|
+
正文用 `<Picture N>`、`<Video N>`、`<Audio N>` 指向本次 job 的实际素材,`<Subject N>` 指向可复用的可见内容。
|
|
75
|
+
**编号按同类素材在本镜「输入参考图」里的 `顺序` 递增**:第 1 张图片是 `<Picture 1>`,第 2 张是 `<Picture 2>`,
|
|
76
|
+
视频和音频各自从 1 开始。生产端 compiler 按同一顺序附加引用契约,所以文档里手写的编号必须和 `顺序` 一致;
|
|
77
|
+
两套编号不一致时模型会收到互相矛盾的素材说明,而接口不会报错。
|
|
78
|
+
|
|
79
|
+
因此写 full-reference 正文前,先把本镜的槽位按 `顺序` 列一遍,例如:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
REF-SHOT-START(顺序:1;用途:起始帧) -> <Picture 1>
|
|
83
|
+
REF-XIAOYU-SHEET(顺序:2;用途:身份) -> <Picture 2>
|
|
84
|
+
REF-STUDY-PLATE(顺序:3;用途:地理) -> <Picture 3>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`subject_definitions` 把每个主体绑到它的标签上,句式为
|
|
88
|
+
`<Subject 1> is the ... in <Picture 2>, with ...`;`retention_analysis` 逐条写保留强度和出现的镜次,
|
|
89
|
+
视觉素材用 `fully_preserved`、`partially_preserved`、`attribute_transfer`、`weak_reference`,
|
|
90
|
+
音频素材用 `fully_copy`、`partially_copy`、`reference`、`weak_reference`,例如
|
|
91
|
+
`<Subject 1> (appears in [Shot 1]): fully_preserved - 短发轮廓、连帽外套配色与鞋型保留`。
|
|
92
|
+
每个标签在六段里保持同一写法,不留下没有定义的标签。
|
|
93
|
+
|
|
94
|
+
### 每张图带什么、不带什么
|
|
95
|
+
|
|
96
|
+
`用途` 决定这一张在正文里被要求保留什么:`起始帧` 只锚定开场构图与姿态,`身份` 只锚定脸型体态,
|
|
97
|
+
`地理` 只锚定空间关系,`造型状态` 只锚定服装与损污。把这条差异写进 `retention_analysis`,
|
|
98
|
+
不要让角色板顺带决定构图,也不要让场景板顺带决定人物长相。
|
|
99
|
+
|
|
100
|
+
角色始终使用同一个说话人 ID;中文对白只出现在 `<d>[Chinese] ...</d>` 内。禁字幕写进可见文字约束,
|
|
101
|
+
与获准的画内文字分开。
|
|
102
|
+
不要为了“多模态”把所有资产图都带上;每镜只绑定它真正可见且需要保持的起始帧、人物、地点或关键道具图。
|
|
103
|
+
|
|
104
|
+
### 一个完整例子
|
|
105
|
+
|
|
106
|
+
分镜里的槽位(三张图:本镜起始帧、角色板、场景板):
|
|
107
|
+
|
|
108
|
+
```markdown
|
|
109
|
+
- 输入参考图:REF-SHOT002-START(顺序:1)· 剧集/EP001/制作成果/images/SHOT-EP001-002.png《SHOT-EP001-002 起始帧》(用途:起始帧;控制:起始构图、双人站位;不得控制:尚未发生的动作、终态);REF-XIAOYU-SHEET(顺序:2)· 输入/参考图/小雨定妆.png《小雨定妆照》(用途:身份;控制:脸型、发型剪影、身高比例;不得控制:构图、动作、表情);REF-STUDY-PLATE(顺序:3)· 输入/参考图/家庭书房.png《家庭书房场景图》(用途:地理;控制:书桌方位、书架墙、灯位;不得控制:人物身份、动作、道具状态)
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
对应的 full-reference 正文(`生成方式:图生视频`,模式为 `reference`):
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
subject_definitions: <Subject 1> is the elementary-school boy in <Picture 2>, with a round short black haircut and a light grey-blue hooded jacket over a white inner shirt. <Subject 2> is the home study in <Picture 3>, with the desk against the window wall, a full bookshelf on the left and a warm desk lamp. <Picture 1> is the opening composition of this shot.
|
|
116
|
+
summary: The boy leans over an open textbook at his desk and stops when he notices the printed map.
|
|
117
|
+
retention_analysis: <Picture 1> (appears in [Shot 1]): fully_preserved - overhead framing, desk edge position and the boy's seated placement open the shot exactly as supplied. <Subject 1> (appears in [Shot 1]): fully_preserved - face shape, hair silhouette and the jacket-over-shirt layering stay identical; his pose and expression are set by this shot, not by <Picture 2>. <Subject 2> (appears in [Shot 1]): partially_preserved - desk orientation, bookshelf wall and lamp position are kept; the props on the desk follow this shot.
|
|
118
|
+
detailed_description: [Shot 1] ...
|
|
119
|
+
overall_soundscape: ...
|
|
120
|
+
non_diegetic_music: N/A
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
三张图各自只负责一件事:`<Picture 1>` 给构图,`<Picture 2>` 给身份,`<Picture 3>` 给地理。
|
|
124
|
+
把这条差异写进 `retention_analysis`,角色板就不会顺带决定构图,场景板也不会顺带决定长相。
|
|
125
|
+
|
|
126
|
+
## 素材数量上限
|
|
127
|
+
|
|
128
|
+
一次生成最多 1 张首帧、1 张尾帧、9 张 `reference_image`、3 段 `reference_video`、3 段 `reference_audio`;
|
|
129
|
+
视频与音频每段 2–15 秒,且各自合计不超过 15 秒。分辨率取 `768P` 或 `2K`(`MiniMax-H3-Max` 另为 `480P`/`768P`)。
|
|
130
|
+
超过上限时在分镜阶段按重要性取舍,并写明放弃了哪些参考,不在正文里假装它们仍然生效。
|
|
131
|
+
|
|
132
|
+
本镜还没有起始帧图片时,它由 `$short-drama-produce` 从 `分镜.md` 的 `SHOT-...` 冻结关键帧生成;
|
|
133
|
+
拿到真实文件后由分镜 owner 绑成 `用途:起始帧` 的 `REF-...`,本阶段再原样抄入。
|
|
134
|
+
|
|
135
|
+
`输入参考图` 只登记参考**图片**。连续段需要的上一段实际视频与实际音频不走这个字段,由下面的
|
|
136
|
+
「连续段」小节和生产 job 的绑定承担;不要为了凑成一份清单把视频路径塞进 `REF-...`。
|
|
137
|
+
|
|
138
|
+
## 连续段
|
|
139
|
+
|
|
140
|
+
H3 的首/尾帧模式与 full-reference 模式互斥,不能在同一请求混用 `first_frame`/`last_frame` 和
|
|
141
|
+
`reference_image`/`reference_video`/`reference_audio`。连续段需要上一段实际视频和实际尾帧时,统一走
|
|
142
|
+
full-reference:
|
|
143
|
+
|
|
144
|
+
- 上一段实际视频:`reference_video`,正文称 `<Video 1>`,控制动作、节奏和声音连续;
|
|
145
|
+
- 该视频的实际尾帧:`reference_image`,正文称 `<Picture 1>`,只作为新段开场的可见姿态与构图锚点。
|
|
146
|
+
|
|
147
|
+
不要把尾帧标成 `first_frame`。这不是措辞偏好,而是 H3 官方接口的互斥输入契约。
|
|
148
|
+
|
|
149
|
+
## 时长
|
|
150
|
+
|
|
151
|
+
MiniMax-H3 的整数时长是 4–15 秒,`MiniMax-H3-Max` 是 5–15 秒(不支持 4 秒)。短动作在至少 4 秒的镜头内完成并 hold 已接受终点;超过 15 秒的
|
|
152
|
+
镜头在分镜阶段按闭合状态拆开。本阶段不偷改镜头秒数。
|
|
153
|
+
|
|
154
|
+
依据:MiniMax-H3 官方 base/ref prompt writing guides 与 MiniMax v2 video generation API。
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
运动规格只实现这个区间,不能改写它。
|
|
15
15
|
- `VID-02` — 按需填写起点、有序动作、表演变化、摄影机、环境/声音和时间,
|
|
16
16
|
最后输出结束报告。
|
|
17
|
-
- `VID-03` —
|
|
18
|
-
|
|
17
|
+
- `VID-03` — 先区分文生视频与图生视频。只有真实参考帧已作为输入时,运动提示词才可省略它已
|
|
18
|
+
说明的外观和构图;没有真实图片时必须把静态视觉锚点写进可复制正文,不得假设执行端看过分镜。
|
|
19
19
|
- `VID-12` — 补拍版/替代版逐项绑定原文要求,说明本版本没有承担哪些内容,
|
|
20
20
|
并明确它是补充母版,还是请求经审查后替代母版;范围变小不等于完整覆盖。
|
|
21
21
|
|
|
@@ -48,7 +48,8 @@
|
|
|
48
48
|
|
|
49
49
|
### 参考图用途与补拍范围
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
每张参考声明准确的稳定 `REF-...` 槽位、顺序、项目相对路径、中文名称、用途、允许控制、不得控制与观察状态,
|
|
52
|
+
且视频文档必须与分镜原文一致。起始帧可以决定本镜起始构图和
|
|
52
53
|
可见状态,却不能
|
|
53
54
|
提供尚未发生的终点;构图、尺度、效果参考也不能带入图中没有来源的人物、文字、
|
|
54
55
|
道具或事件。只有创作者/参考图权利人的可核对说明,或运行环境获授权后形成的准确
|
|
@@ -78,12 +79,13 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
|
|
|
78
79
|
写提示词前先做内部卡片:
|
|
79
80
|
|
|
80
81
|
```text
|
|
81
|
-
镜头/关键帧:准确的 `SHOT-...`
|
|
82
|
+
镜头/关键帧:准确的 `SHOT-...`;`IMG-...` 只定位图片提示词条目,不表示已有关键帧图片
|
|
82
83
|
镜头目的:观众的注意、信息或情绪要怎样改变
|
|
83
84
|
时长:已确认时长
|
|
84
85
|
起点:姿态 / 重心 / 目光 / 双手 / 持物 / 空间关系
|
|
85
86
|
终点:同一组字段的已确认 `end_boundary`
|
|
86
87
|
对白/声音:准确来源引用 + 已确认的表演或声源要求
|
|
88
|
+
持续关系:限制本镜动作空间的身体—物件—空间关系及有效范围
|
|
87
89
|
下一镜:下一镜起点引用(只用于比较)
|
|
88
90
|
```
|
|
89
91
|
|
|
@@ -97,8 +99,10 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
|
|
|
97
99
|
- 与门、桌、人等行动相关对象的距离/方位;
|
|
98
100
|
- 正在持续的运动(若关键帧冻结的是运动中瞬间)。
|
|
99
101
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
真实参考帧已作为输入并包含脸、服装全貌、墙面材料等内容时不重复。**`craft_default`** 是“图生视频
|
|
103
|
+
只重述动作所需条件,不重述整份视觉设定”。文生视频没有这种省略资格,必须提供足以独立建立本镜
|
|
104
|
+
人物、造型、地点、构图与光线的静态视觉锚点;若提示词离开参考帧会把左右手或物体搞错,图生视频
|
|
105
|
+
也应保留这些局部事实。
|
|
102
106
|
|
|
103
107
|
## 3. 运动说明的七个部分
|
|
104
108
|
|
|
@@ -124,6 +128,11 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
|
|
|
124
128
|
“缓缓、自然、电影感”不能替代路径与结果。只描述画面内可见动作;心理词要落为呼吸、
|
|
125
129
|
注视、肌肉张力、停顿、话语节奏或明确的画外音。
|
|
126
130
|
|
|
131
|
+
先把起点中的持续关系翻译成动作自由度:用正向状态写清贯穿本镜的支撑、固定、接触或空间关系,
|
|
132
|
+
再只安排允许的身体/物件通道。关系变化必须来自已接受动作并落到已接受终点;否则按 `VID-01`
|
|
133
|
+
保持只读。可复制正文只写持续状态和允许动作,不用 `no/not/without + 动作` 复述边界。
|
|
134
|
+
成稿后在正文内直接改掉残留的这类否定结构,不另建检查步骤或报告。
|
|
135
|
+
|
|
127
136
|
**`craft_default`**:一条运动提示词优先只有一个主导的戏剧变化,必要反应、环境与摄影
|
|
128
137
|
都服务这项变化;这不是固定动作数量。若同一镜必须同时完成互不依赖的交接、追逐、身份
|
|
129
138
|
揭示和大范围效果,先向 storyboard 请求按注意或力学边界拆镜。反过来,也不能为了变短
|
|
@@ -158,6 +167,15 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
|
|
|
158
167
|
不要给每个背景物同时加动作。声音部分引用准确的对白、画外音和音效,说明表演方式、同步要求、
|
|
159
168
|
空间声源和层级,不改台词。
|
|
160
169
|
|
|
170
|
+
目标执行端同轨生成声音时,把音频写成一个完整时间线:
|
|
171
|
+
|
|
172
|
+
1. 按发生顺序列出本镜全部对白、VO、OS、必要非语言发声和 SFX;
|
|
173
|
+
2. 每条台词同时标说话人、声源性质、口语语言和逐字文本,发声从原文首字开始、到末字结束;
|
|
174
|
+
3. 所列事件之外只保留已声明的 ambience 或静默;相邻两句之间若有停顿,也明确回到这一底声;
|
|
175
|
+
4. 声明时间线完整并结束声音段落,不再列出或否定集合外的语言、语气或声源。
|
|
176
|
+
|
|
177
|
+
确有叹气、吸气、笑声或重叠说话时,把它作为有来源的事件列入。声音不同轨时仍只写后期职责。
|
|
178
|
+
|
|
161
179
|
### 3.6 时间 `timing_plan`
|
|
162
180
|
|
|
163
181
|
默认把这几秒写成一条读得出先后的节拍链:
|
|
@@ -184,22 +184,26 @@
|
|
|
184
184
|
|
|
185
185
|
## 五、文字与缺陷约束
|
|
186
186
|
|
|
187
|
-
1.
|
|
187
|
+
1. **字幕层默认关闭**:除非剧本或创作者明确要求字幕、caption 或对白文字叠加,每条视频正文都
|
|
188
|
+
用项目提示词语言直接声明全镜任何时刻都不生成这些内容,让对白只通过声音与口型发生;不能只写
|
|
189
|
+
抽象的“文字层为空”。这个默认与旗帜、标牌、屏幕等画内文字政策独立;有 `exact-readable` 时
|
|
190
|
+
仍然直接禁止字幕层。
|
|
191
|
+
2. **画内无文字要求**(项目确实没有可读文字义务时):
|
|
188
192
|
`画面不要出现任何文字`。若上游或资产要求 `exact-readable`,改为列出唯一允许
|
|
189
193
|
字段与受控显示位置,禁止同时写全局 `no-text`。
|
|
190
|
-
|
|
194
|
+
3. **参考图检查**:提示词中的无文字要求只约束生成意图,不能擦除参考图像素。人物、场景、道具
|
|
191
195
|
或关键帧参考若带未批准标牌、界面、号码、水印、字幕或伪字,先**裁切、清理、
|
|
192
196
|
遮罩或替换**;会破坏身份、地理或构图时退回参考图归属方决策。`exact-readable`
|
|
193
197
|
镜头只允许批准的显示位置和文字版本,不让旧字样从参考图回流。
|
|
194
|
-
|
|
195
|
-
|
|
198
|
+
4. **文字要求一致**:只复述已选择的文字策略;不能用`【不出现任何文字字幕】`抹掉证据文字。
|
|
199
|
+
5. **语言与文字分别守上游要求**:对白保留原语言;字幕、屏显或无字策略读取已接受的
|
|
196
200
|
文字方案,不把“出海”自动等同于无字幕,也不让翻译覆盖逐字对白。
|
|
197
|
-
|
|
201
|
+
6. **模型条件只来自已记录观察**:若创作者提供的项目反馈指出身份混淆、比例漂移
|
|
198
202
|
或其他具体风险,针对该操作补最少的正向状态说明与保持项;不复制通用缺陷补丁,
|
|
199
203
|
不靠首尾重复同一句增加权重。
|
|
200
|
-
|
|
204
|
+
7. **后处理不在本技能执行**:若项目已有受控文字层或清理决定,只在文本中保留其
|
|
201
205
|
归属方引用和交接说明;不把未来清理能力当成当前参考图已检查的证据。
|
|
202
|
-
|
|
206
|
+
8. **不要用词表判断审美**:项目已知能力若明确某种表达不可执行,记录它为什么失败、当前
|
|
203
207
|
替代表达和适用范围;不把一串形容词或生理细节词提升为跨题材禁用清单(VID-10)。
|
|
204
208
|
|
|
205
209
|
## 六、决策规则
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Seedance 2.0 提示词方言
|
|
2
|
+
|
|
3
|
+
只在目标档案明确写 `target_video_model: seedance-2.0` 时使用。推荐档案:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"target_video_model": "seedance-2.0",
|
|
8
|
+
"video_prompt_dialect": "seedance-2.0",
|
|
9
|
+
"video_prompt_language": "zh-CN",
|
|
10
|
+
"native_duration_seconds": {"min": 4, "max": 15},
|
|
11
|
+
"supported_generation_modes": ["text", "reference", "extend"],
|
|
12
|
+
"audio_generation": "same_pass"
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
这是正文方言,不是固定模板。仍以分镜的起点、唯一动作和终点为内容权威。
|
|
17
|
+
|
|
18
|
+
## 正文组织
|
|
19
|
+
|
|
20
|
+
- 用中文写“主体 + 动作细节 + 场景 + 光色 + 运镜 + 视觉形态 + 约束”。具体可见事实优先,质量词只保留必要项。
|
|
21
|
+
- 单镜直接按动作先后写。一次生成含多个镜头时才用 `镜头1:`、`镜头2:`;每个内部镜头都写
|
|
22
|
+
“谁、在哪、做什么、镜头怎么动”,不强塞逐秒时间码。
|
|
23
|
+
- 每个可辨对白事件都必须写成 `{角色用中文说:“逐字台词”}`,不能只留下普通引号或把说话要求散落
|
|
24
|
+
在括号外;对白全文只用一种口语语言,专名除外,不在台词前增加外语暖场。
|
|
25
|
+
- 每个音效事件写 `<声音>`,音乐写 `(音乐)`。字幕只有创作者明确开启时才用 `【字幕】`;默认禁字幕时正文
|
|
26
|
+
明写“全程保持无字幕,不生成对白文字叠加”,并且不出现任何 `【】` 字幕指令。画内获准文字仍逐字说明承载面和位置。
|
|
27
|
+
|
|
28
|
+
## 参考与续写
|
|
29
|
+
|
|
30
|
+
- 每次提及素材都重复绑定:`人物 @图片1`、`参考 @视频1 的运镜`、`参考 @音频1 的音色`,不要只在开头列素材清单。
|
|
31
|
+
- 普通参考任务才写“参考 @视频1”。若任务是接着上一段实际结果生成,写“向后延长 @视频1”,并用
|
|
32
|
+
`@图片1` 指向该视频的实际尾帧,说明它是新段开场的可见状态;不要再把任务写成“参考上一段视频”。
|
|
33
|
+
- 实际视频与实际尾帧缺一时不宣称连续生成。素材序号来自当次 job 的真实绑定,不沿用文档里的 REF ID 猜序号。
|
|
34
|
+
|
|
35
|
+
## 时长与边界
|
|
36
|
+
|
|
37
|
+
Seedance 2.0 原生整数时长是 4–15 秒。镜头进入本阶段前就应落在区间内。短于 4 秒的叙事动作放进
|
|
38
|
+
至少 4 秒的镜头,并让终点成为可见 hold;长于 15 秒的动作在分镜阶段按状态闭合点拆开,不能在这里
|
|
39
|
+
截断或跨镜省略交接。
|
|
40
|
+
|
|
41
|
+
依据:Seedance 2.0 官方提示词指南与火山引擎视频生成 API。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Seedance 2.5 提示词方言
|
|
2
|
+
|
|
3
|
+
只在目标档案明确写 `target_video_model: seedance-2.5` 时使用。推荐档案:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"target_video_model": "seedance-2.5",
|
|
8
|
+
"video_prompt_dialect": "seedance-2.5",
|
|
9
|
+
"video_prompt_language": "zh-CN",
|
|
10
|
+
"native_duration_seconds": {"min": 4, "max": 30},
|
|
11
|
+
"supported_generation_modes": ["text", "reference", "edit", "extend"],
|
|
12
|
+
"audio_generation": "same_pass"
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
2.5 沿用中文自然指令和 `@图片N`、`@视频N`、`@音频N` 绑定,但不能直接套 2.0:它支持 30 秒长叙事、
|
|
17
|
+
基于时间戳的精确控制,以及明确的参考、编辑、延长三类全模态任务。
|
|
18
|
+
|
|
19
|
+
## 生成与参考
|
|
20
|
+
|
|
21
|
+
- 短单镜按“主体 + 动作 + 场景 + 光色 + 运镜 + 风格 + 约束”写。
|
|
22
|
+
- 多镜或长叙事按 `镜头 1 [0:00–0:03]:` 顺序写;每段时间不重叠、不留无意空档,最后一个终点
|
|
23
|
+
等于总时长。时间戳服务于 2.5 的长叙事控制,不能反过来改写上游镜头状态链。
|
|
24
|
+
- 每次使用素材时重复绑定 `人物 @图片1`、`@视频1 的表演节奏` 等具体职责。普通参考任务说明保留和
|
|
25
|
+
借用什么,不让一个素材顺手控制身份、动作、构图等所有维度。
|
|
26
|
+
|
|
27
|
+
## 编辑与延长不是普通参考
|
|
28
|
+
|
|
29
|
+
提示词意图必须与 job 的 `omni_reference_task_type` 一致:
|
|
30
|
+
|
|
31
|
+
- `reference`:基于素材生成新视频,写“参考 @视频1 的运镜/动作”或具体素材职责。
|
|
32
|
+
- `edit`:直接点名 @视频1,写“保留 A、B,只修改 C”;不写成“参考它生成另一段”。该模式的 API
|
|
33
|
+
参数必须是 `ratio: adaptive`、`duration: -1`。
|
|
34
|
+
- `extend`:写“在 @视频1 的基础上续写 N 秒”,再从输入视频的实际终点描述唯一动作和新终点;
|
|
35
|
+
API 使用 `ratio: adaptive`。连续创作可另绑实际尾帧为 `@图片1`,只控制新段开场可见状态。
|
|
36
|
+
|
|
37
|
+
若提示词写的是编辑而 job 标成参考,或反过来,2.5 仍会根据语义复判并报任务类型不匹配;因此任务
|
|
38
|
+
类型是创作选择,不由 adapter 从若干关键词猜。
|
|
39
|
+
|
|
40
|
+
## 对白、声音与文字
|
|
41
|
+
|
|
42
|
+
- 每个可辨对白事件都必须整体写进 `{角色用中文说:“逐字台词”}`,不能只用普通引号;同一句带花括号
|
|
43
|
+
的逐字对白在单镜正文只出现一次,放进完整声音时间线。视觉时间线只写口型同步这一事件,不再重复
|
|
44
|
+
花括号和台词。每个音效事件写进 `<声音>`,音乐写进 `(音乐)`。明确开启的字幕才用 `【字幕】`。
|
|
45
|
+
中文对白不添加语言前缀;非中文对白才在台词前明确语言。
|
|
46
|
+
- 同轨声音按事件闭合。上游已限定只有中文并明确排除外语前导、语气词、额外人声或重复时,在完整
|
|
47
|
+
声音时间线末尾直接写“对白直接从指定中文首字开始;不生成外语前导、语气词、额外人声或重复对白”,
|
|
48
|
+
只写一次。没有这些上游边界时不自行追加固定负面后缀。
|
|
49
|
+
- 默认禁字幕时明确写“全程无字幕、无对白文字叠加”,且正文不出现 `【】`;画内获准文字仍独立说明。
|
|
50
|
+
|
|
51
|
+
## 连续容器
|
|
52
|
+
|
|
53
|
+
同一连续时空的相邻正式生成段默认组成连续链;`one-shot-per-generation` 只表示每次提交一个镜头,
|
|
54
|
+
不取消连续关系。第一段按已接受起点生成,第二段起固定走 `extend`,不能因上一段尚未生成就改成
|
|
55
|
+
独立文生视频。创作者明确要求独立重生成,或上游存在时间/地点跳变时才重新起链。
|
|
56
|
+
真实输入尚不存在时,在容器元信息写“待续接、不可提交:等待上一容器实际视频与从该视频抽取的实际
|
|
57
|
+
尾帧”,正文只作为下一段内容草案;不绑定 `@视频1`、`@图片1`,也不声称已经延长。两项真实素材
|
|
58
|
+
存在后才把正文转成可提交版本:写“在 @视频1 的基础上续写 N 秒”,并明确 `@图片1` 只控制新段开场
|
|
59
|
+
可见状态。逐镜提示词是容器成员依据,不是另一条生产路由。
|
|
60
|
+
|
|
61
|
+
## 时长
|
|
62
|
+
|
|
63
|
+
Seedance 2.5 原生整数时长是 4–30 秒。项目采用一镜一生成时每镜均落在此区间;采用 30 秒多镜容器时,
|
|
64
|
+
先按交付形态确认容器,不把若干独立镜头擅自合并。短动作到达终点后 hold,超长动作按状态闭合点拆分。
|
|
65
|
+
|
|
66
|
+
依据:火山引擎《Doubao Seedance 2.5 教程》《Doubao Seedance 2.5 提示词指南》和视频生成 API。
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|---|---|---|
|
|
15
15
|
| VID-01 | structural_invariant | Motion reads but cannot rewrite shot start/end/duration/dialogue and next-shot state. |
|
|
16
16
|
| VID-02 | craft_default | Write start anchor, ordered subject motion, camera behavior, timing, and end report; add performance change and environment/audio only when this shot actually carries them. |
|
|
17
|
-
| VID-03 |
|
|
17
|
+
| VID-03 | structural_invariant | Choose image-to-video only when the matching storyboard's reference set is complete, declares readable REF inputs, and is copied unchanged. No REF is not by itself consent to text-to-video: first discover and bind matching real project images; preserve any verified partial bindings, but if required images remain missing, report them and stop before the final motion document. Choose text-to-video only after the creator explicitly selects it, and carry a non-empty static visual anchor in the copyable text. Only image-to-video may omit appearance/composition already carried by its real reference frame. |
|
|
18
18
|
| VID-04 | structural_invariant | Explicit segment timing sums exactly to its shot's accepted duration—neither exceeding it nor leaving an unallocated remainder. |
|
|
19
19
|
| VID-05 | reviewed_invariant | Untimed action load must be feasible enough to preserve the intended performance and story change. |
|
|
20
20
|
| VID-06 | structural_invariant | Locked and moving camera instructions cannot govern the same interval without an explicit transition. |
|
|
@@ -33,7 +33,9 @@
|
|
|
33
33
|
| VID-19 | reviewed_invariant | When the creator profile declares required literal tokens for a delivery route, that route's delivery text preserves them byte-for-byte and outside the verbatim-dialogue fence. Paraphrase, translation, reordering, or omission is treated as a defect because a literal-matching surface has no reason to reject the rewritten text—the failure is silent rather than reported. The suite asserts no specific surface's behaviour, and whether a given result took the route is returned adherence, provable only by a bound production observation. Tokens declare a route and never substitute for the start state, action, or endpoint. Absent a declared token list the suite invents none; until the profile exposes a machine-readable list at a pinned field path, the reviewer cites the profile against the delivery text rather than claiming mechanical enforcement. |
|
|
34
34
|
| VID-20 | reviewed_invariant | Packing routes change delivery granularity only, leaving shot boundaries, shot purpose, and per-shot reviewability intact. A single long-form generation carrying several accepted shots *is* a multi-shot container and is billed under VID-13 and VID-15; it introduces no separate accounting and no exemption from the contiguity, binding-chain, and scene-boundary constraints. A continuation route instead starts from a previously generated result, which is observation evidence and not an accepted artifact: the accepted shot start boundary stays the sole authority, and any claim about the observed state binds a production observation record or remains `unverified`. |
|
|
35
35
|
| VID-21 | craft_default | When the project's accepted production profile has generated imagery carry the frame, actions are written as high-frequency, whole-body or single-limb movements common in everyday footage; precise interception, invisible internal states, negative actions, and three-or-more-step two-handed choreography are rewritten into equivalent common-action combinations, with the dramatic information carried by combination and timing. The rule is inactive for live action or an undeclared profile, and a rewrite may never change accepted shot boundaries, terminal states, or screenplay fact. |
|
|
36
|
-
| VID-22 | reviewed_invariant | Copyable text carries only what will be filmed. IDs, workflow status, hashes, file paths and craft notes stay outside the prompt; negative intent is rewritten as a visible positive state. A prompt that only recites constraints renders as nothing. |
|
|
36
|
+
| VID-22 | reviewed_invariant | Copyable text carries only what will be filmed. IDs, workflow status, hashes, file paths and craft notes stay outside the prompt; negative action intent is rewritten as a visible positive state. Unless explicitly authored, the copyable prompt directly prohibits non-diegetic subtitles, captions and dialogue-text overlays at every moment rather than naming an abstract empty layer; this never erases an exact-readable in-scene text obligation, which stays a closed allow-list of exact glyph, language, carrier and placement. A prompt that only recites constraints renders as nothing. |
|
|
37
|
+
| VID-23 | reviewed_invariant | When the target model is declared to generate audio in the same pass, the copyable body treats all allowed dialogue, VO, OS, non-verbal vocalization, SFX, ambience and silence as a closed event set. Each spoken event keeps its source, speaker, spoken language and verbatim text boundary; gaps return to declared ambience or silence instead of leaving an undefined vocal channel for the execution end to fill. |
|
|
38
|
+
| VID-24 | structural_invariant | An image-to-video shot carries the storyboard's REF slots unchanged, each with its 用途, so the motion document itself answers which start frame and which identity, geography, and prop pictures this shot sends. The reference mode — first frame, first and last frame, or multi-slot reference — is read from that 用途 combination and translated by the matched model dialect; where a model makes frame and reference conditioning mutually exclusive, the start frame joins the reference group rather than splitting the request. |
|
|
37
39
|
|
|
38
40
|
### `CON`
|
|
39
41
|
|
|
@@ -45,6 +47,7 @@
|
|
|
45
47
|
| CON-04 | structural_invariant | A continuity change states before, after, cause/source scene, effective range, and affected visible IDs. |
|
|
46
48
|
| CON-05 | taste_option | Declared montage, ellipsis, dream, or subjective imagery may intentionally break ordinary continuity. |
|
|
47
49
|
| CON-06 | structural_invariant | A continuity change names every existing downstream document it affects; future work is described, not pre-created. |
|
|
50
|
+
| CON-07 | structural_invariant | A continuity lock declared in `视觉设定.md` fixes one verbatim surface plus its shot and image scope; every in-scope frozen keyframe, motion prompt, and named image prompt carries that surface unchanged. |
|
|
48
51
|
|
|
49
52
|
规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
|
|
50
53
|
`reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# 目标模型能力档案
|
|
2
|
+
|
|
3
|
+
## 目录
|
|
4
|
+
|
|
5
|
+
- [这份档案解决什么](#这份档案解决什么)
|
|
6
|
+
- [九条会改变正文的能力轴](#九条会改变正文的能力轴)
|
|
7
|
+
- [声音同轨生成](#声音同轨生成)
|
|
8
|
+
- [参考条件方式](#参考条件方式)
|
|
9
|
+
- [未声明时怎么写](#未声明时怎么写)
|
|
10
|
+
- [自检](#自检)
|
|
11
|
+
|
|
12
|
+
## 这份档案解决什么
|
|
13
|
+
|
|
14
|
+
本套件的模型相关规则一律写成“按目标模型确认”,但“确认”在实践中经常没有落点:没人知道要确认
|
|
15
|
+
哪几件事,于是提示词按最保守的写法交出去,执行端再靠自己补——补出来的往往就是漂移。
|
|
16
|
+
|
|
17
|
+
本文只做一件事:把**需要确认什么**列成有限的几条。通用档案不猜供应商能力;已核对官方契约的
|
|
18
|
+
模型可以由本技能的版本化方言文件提供推荐值。每一条取值都由创作者按自己接入的执行端声明一次,
|
|
19
|
+
本集共用。生产端具体接哪个供应商、用什么字段,属于 `$short-drama-produce` 的 adapter 档案,不进入创作文档。
|
|
20
|
+
|
|
21
|
+
**`craft_default`**: 能力轴是**声明**出来的,不是推断出来的。没有声明就按“未声明时怎么写”写;
|
|
22
|
+
不要因为某个执行端“据说支持”某种写法就改写已接受的镜头边界、时长或起止状态。
|
|
23
|
+
|
|
24
|
+
档案写在 `short-drama.json#/creator_authority/production_profile/choices`。最小结构如下;未知字段留空,
|
|
25
|
+
不能从模型简称补全:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"target_video_model": "versioned-model-profile",
|
|
30
|
+
"video_prompt_dialect": "dialect-id",
|
|
31
|
+
"video_prompt_language": "zh-CN",
|
|
32
|
+
"native_duration_seconds": {"min": 4, "max": 15},
|
|
33
|
+
"supported_generation_modes": ["text", "reference"],
|
|
34
|
+
"audio_generation": "same_pass"
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 九条会改变正文的能力轴
|
|
39
|
+
|
|
40
|
+
| 能力轴 | 声明什么 | 声明后正文允许怎么变 |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| 模型版本 | 项目使用的版本化模型档案键;账号侧 Endpoint / model ID 留在生产配置 | 只路由到该版本的方言;不因名称相近套用另一版本 |
|
|
43
|
+
| 提示词方言 | 通用自然语言 / 目标原生结构及版本 | 命中已有方言时按其字段、素材标记和声音语法写;语言标签不能代替方言 |
|
|
44
|
+
| 单次原生时长 | 一次生成能覆盖的最短与最长秒数 | 分镜规划时就让每个投产镜头落在区间内;短动作在合法镜长内到达终点后 hold,长动作按闭合状态拆镜 |
|
|
45
|
+
| 参考条件方式 | 无 / 首帧 / 首尾帧 / 多槽参考(及槽位数上限) | 见下节 |
|
|
46
|
+
| 声音是否同轨生成 | `same_pass` 或 `separate` | 见下节 |
|
|
47
|
+
| 画幅与分辨率 | 执行端实际接受的画幅与分辨率集合 | 只写项目已接受的那一个;不在正文里罗列备选 |
|
|
48
|
+
| 正文长度上限 | 一次能接受的字符数 | 超限时先删已被真实参考帧承载的重复描述;《视觉设定.md》连续性锁的锁面、逐字对白和已批准文字显示位置不得删 |
|
|
49
|
+
| 运镜词汇 | 执行端是否接受具名运镜术语 | 不接受时把运镜写成可见的画面关系变化(主体占画比、边缘进出、前后景遮挡关系),不是换一个术语 |
|
|
50
|
+
| 视频提示词正文语言 | 目标视频模型本次使用 `zh-CN`、`en` 或其他明确语言 | 视频可复制正文使用该语言;逐字对白、VO、OS 仍保留原口语语言,不翻译、不加外语开场 |
|
|
51
|
+
|
|
52
|
+
## 声音同轨生成
|
|
53
|
+
|
|
54
|
+
有些执行端只产出画面,声音在后期补;有些执行端在同一次生成里同时产出对白、环境声与音乐。
|
|
55
|
+
两者对正文的要求不同,而且**这是本套件里最容易被忽略的一条**:
|
|
56
|
+
|
|
57
|
+
- **不同轨**(默认假设):声音段落写本镜的声音**职责**——谁说话、什么环境声承担信息、
|
|
58
|
+
转场声落在哪里。它服务于后期与审查,不需要写成可执行指令。
|
|
59
|
+
- **同轨**:声音段落变成会被真的生成出来的东西。可复制正文写完本镜的完整声音时间线:需要的
|
|
60
|
+
对白、VO、OS、非语言发声、SFX 与相对时机,以及各事件之间承接的 ambience 或静默。逐字对白
|
|
61
|
+
仍按 [交付形态](delivery-profile.md) 的围栏处理。没有定义的时间与通道会被执行端自行填满,
|
|
62
|
+
和没写终点的动作会被自行补动作是同一件事。
|
|
63
|
+
|
|
64
|
+
有对白、VO 或 OS 时,把本镜所有允许的发声列成封闭事件集合,每句带口语语言和逐字起止边界,
|
|
65
|
+
事件间及首尾明确回到已声明环境声或静默。必要的叹气、笑声、拟声或重叠也必须有来源并进入集合。
|
|
66
|
+
Brief、剧本或声音方向若已经点名排除外语前导、语气词、额外人声、重复或其他发声,完整时间线末尾
|
|
67
|
+
必须用正文语言把这些已确认边界合并写一次;“允许事件只有这些”不能替代模型需要的直接指令。
|
|
68
|
+
一句“以上为完整声音时间线”闭合并结束声音段落;其后不再重复同一组排除项,也不自行添加上游没有
|
|
69
|
+
提出的声音禁令。
|
|
70
|
+
|
|
71
|
+
非画内字幕、caption 和对白文字叠加是独立文字层:除非剧本或创作者明确要求,每条可复制正文
|
|
72
|
+
都用项目提示词语言直接声明全镜任何时刻不生成这些内容,不能只写抽象的“文字层为空”,让对白只
|
|
73
|
+
通过声音与口型发生。这个默认不受画内文字影响。旗帜、标牌、
|
|
74
|
+
屏幕等表面确有 `exact_readable` 义务时,正文逐字保留准确字符、语言、承载面和位置,同时继续关闭
|
|
75
|
+
字幕层;没有画内可读文字义务时,才使用全局无文字要求(`VID` 与 `IMG` 的文字策略优先级不变)。
|
|
76
|
+
|
|
77
|
+
本套件不规定这些排除写成什么字样。字样属于本镜和项目已声明的提示词语言;不要跨项目搬运一句
|
|
78
|
+
固定后缀,也不要把它当成质量分。
|
|
79
|
+
|
|
80
|
+
## 参考条件方式
|
|
81
|
+
|
|
82
|
+
| 声明 | 正文承担什么 |
|
|
83
|
+
|---|---|
|
|
84
|
+
| 无参考 | 文生视频:静态视觉锚点必须自足,写清人物、造型、地点、构图与光线中本镜必要的事实 |
|
|
85
|
+
| 首帧 | 只写从该起点开始的变化;静态外观由参考帧与视觉设定共同拥有 |
|
|
86
|
+
| 首尾帧 | 终点帧只能投影 `SHOT-...` 已写明的终点,不得发明新结果 |
|
|
87
|
+
| 多槽参考 | 每张按 `REF-...` 槽位记账,绑定顺序、路径、中文名、用途与控制/不得控制范围;槽位数不超过声明上限,超出时按重要性取舍并写明放弃了哪些 |
|
|
88
|
+
|
|
89
|
+
无论哪一种,《视觉设定.md》连续性锁的锁面都留在正文里:参考帧只约束它自己画到的部分,
|
|
90
|
+
跨镜不变的颜色、材质与形制仍然要逐镜带走。
|
|
91
|
+
|
|
92
|
+
参考条件方式由本镜各槽位的 `用途` 读出,不由“想不想用多模态”决定:只有一张 `起始帧` 是首帧,
|
|
93
|
+
`起始帧` 加 `结束帧` 是首尾帧,`起始帧` 与身份/地理/道具图同时存在或只有这些图时是多槽参考。
|
|
94
|
+
不少执行端把首/尾帧输入与多槽参考输入设为互斥,这时整组统一走多槽参考,起始帧也按参考素材送入——
|
|
95
|
+
不要把一次请求拆成“首帧 + 参考图”。正文里的素材标签按同类素材的 `顺序` 编号,与生产端绑定顺序一致;
|
|
96
|
+
文档手写编号和执行端实际编号不一致时,模型收到的是两套互相矛盾的素材说明,而接口通常不会报错。
|
|
97
|
+
|
|
98
|
+
“上一段实际视频”和“实际尾帧”描述的是两个通用职责,不等于供应商 role。命中版本化方言时再翻译:
|
|
99
|
+
例如 H3 的 full-reference 使用 `reference_video + reference_image`,不能把实际尾帧误写成与参考模式
|
|
100
|
+
互斥的 `first_frame`。生产 adapter 必须执行同一翻译,不能让文档和请求体使用两套模式。
|
|
101
|
+
|
|
102
|
+
## 未声明时怎么写
|
|
103
|
+
|
|
104
|
+
按已接受的镜头边界写完整、自足、不依赖任何执行端特性的正文:视频正文语言回退到项目
|
|
105
|
+
`format.prompt_language`;独立任务没有项目配置时沿用用户当前语言,不固定为英文。写声音职责而不是可执行声音指令,
|
|
106
|
+
不做分段,不罗列画幅备选,用可见的画面关系而不是术语描述运镜。这样的正文在任何执行端上都成立,
|
|
107
|
+
只是没有针对性收敛。**未声明不是缺陷**,不能作为审查阻断理由。
|
|
108
|
+
|
|
109
|
+
## 自检
|
|
110
|
+
|
|
111
|
+
- 每条能力轴的取值是创作者声明的,还是我推断的?
|
|
112
|
+
- 视频正文语言来自目标模型档案还是项目回退值?逐字人声是否仍保留原口语语言?
|
|
113
|
+
- 声音同轨时,允许的声音事件、口语语言及事件间底声/静默是否组成完整时间线?
|
|
114
|
+
- 收敛写法有没有顺手改掉已接受的时长、起点或终点?
|
|
115
|
+
- 删重复描述时,锁面、逐字对白和已批准文字显示位置留住了吗?
|
|
@@ -321,7 +321,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
321
321
|
except CheckError as error:
|
|
322
322
|
print(f"{type(error).__name__}: {error}", file=sys.stderr)
|
|
323
323
|
return 2
|
|
324
|
-
print(json.dumps(result, ensure_ascii=
|
|
324
|
+
print(json.dumps(result, ensure_ascii=True, sort_keys=True))
|
|
325
325
|
return 0 if result["status"] == "pass" else 1
|
|
326
326
|
|
|
327
327
|
|
|
@@ -319,7 +319,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
319
319
|
except (OSError, UnicodeError, ValidationError) as exc:
|
|
320
320
|
print(str(exc), file=sys.stderr)
|
|
321
321
|
return 2
|
|
322
|
-
print(json.dumps(result, ensure_ascii=
|
|
322
|
+
print(json.dumps(result, ensure_ascii=True, sort_keys=True))
|
|
323
323
|
return 0
|
|
324
324
|
|
|
325
325
|
|
|
@@ -55,9 +55,9 @@ license: MIT
|
|
|
55
55
|
可以分别读取,但不遍历无关引用:
|
|
56
56
|
|
|
57
57
|
- 阶段边界与规则分级:[阶段契约](references/stage-contract.md)
|
|
58
|
-
-
|
|
58
|
+
- 场景标题、对白和生产标签语法,或把创作者带来的现成剧本[规范化](references/screenplay-format.md#7-现有文本的规范化入口):[剧本格式](references/screenplay-format.md)
|
|
59
59
|
- 项目特有的制作稿方言:[制作格式方言](references/production-format-dialect.md)
|
|
60
|
-
-
|
|
60
|
+
- 输入含[核心选择](references/script-craft.md#35-把一拍写成艰难选择时两个方向都要活着)、[有限次数/轮次/呼吸/节拍](references/script-craft.md#64-有限单位按完成状态计数)、[精确倒计时](references/script-craft.md#63-倒计时先算动作不要只写数字)或[会改变人物判断的关键物证](references/script-craft.md#53-证据先改变判断再改变关系):[剧作手艺](references/script-craft.md)
|
|
61
61
|
- 过去关系必须通过对白进入,或关键人物容易只剩说明功能:[对白手艺](references/dialogue-craft.md)
|
|
62
62
|
- 声源、留白与 sound bridge:[场景声音戏剧](references/scene-sound-dramaturgy.md)
|
|
63
63
|
- 同一故事义务的不同可拍实现:[可替代实现](references/substitutable-realization.md)
|
|
@@ -83,6 +83,7 @@ python3 "{技能目录}/scripts/duration_estimate.py" "剧集/EP001/剧本.md" -
|
|
|
83
83
|
|
|
84
84
|
点名范围已写入、场景因果连贯、对白与行动可表演、承诺有兑现或有意延迟、结尾完成本集预定的戏剧或情绪功能,即完成。最后一拍可以推进,也可以安静收束、形成余韵或让既有动作变义;判断它是否有效,不用“是否又发生一件事”代替。
|
|
85
85
|
资产、分镜、审查与生产只有用户点名时开始。
|
|
86
|
+
五份创作文档齐备后,可转 `$short-drama` 对跨文档结构做一次机械核对;内容质量仍由创作者审查。
|
|
86
87
|
|
|
87
88
|
## 安装维护
|
|
88
89
|
|
|
@@ -298,7 +298,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
298
298
|
raise SystemExit("{}: {}".format(args.index, error))
|
|
299
299
|
|
|
300
300
|
report = estimate(screenplay, blocks, project, review)
|
|
301
|
-
print(json.dumps(report, ensure_ascii=
|
|
301
|
+
print(json.dumps(report, ensure_ascii=True, indent=2, sort_keys=True))
|
|
302
302
|
# An estimate is never a verdict, so this exits successfully even when the
|
|
303
303
|
# episode lands far from its target. Blocking here would turn a reported
|
|
304
304
|
# number into the cross-project threshold this suite refuses to carry.
|
|
@@ -1079,9 +1079,9 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
1079
1079
|
no_previous=args.no_previous,
|
|
1080
1080
|
)
|
|
1081
1081
|
except (OSError, UnicodeDecodeError, ValueError) as error:
|
|
1082
|
-
print(json.dumps({"error": str(error)}, ensure_ascii=
|
|
1082
|
+
print(json.dumps({"error": str(error)}, ensure_ascii=True), file=sys.stderr)
|
|
1083
1083
|
return 1
|
|
1084
|
-
print(json.dumps(summary, ensure_ascii=
|
|
1084
|
+
print(json.dumps(summary, ensure_ascii=True, sort_keys=True))
|
|
1085
1085
|
if args.fail_on_review and summary["review_status"] != "clean":
|
|
1086
1086
|
return 2
|
|
1087
1087
|
return 0
|
|
@@ -408,7 +408,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
408
408
|
except (CheckError, OSError) as error:
|
|
409
409
|
print(f"{type(error).__name__}: {error}", file=sys.stderr)
|
|
410
410
|
return 2
|
|
411
|
-
print(json.dumps(result, ensure_ascii=
|
|
411
|
+
print(json.dumps(result, ensure_ascii=True, sort_keys=True))
|
|
412
412
|
return 0 if result["status"] == "pass" else 1
|
|
413
413
|
|
|
414
414
|
|