@oh-story/dsh 0.1.4 → 0.1.5
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 +2692 -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,116 @@
|
|
|
1
|
+
# 跨镜一致性锁
|
|
2
|
+
|
|
3
|
+
## 目录
|
|
4
|
+
|
|
5
|
+
- [为什么识别锚点还不够](#为什么识别锚点还不够)
|
|
6
|
+
- [什么值得上锁](#什么值得上一把锁)
|
|
7
|
+
- [锁面怎么写](#锁面怎么写)
|
|
8
|
+
- [语法](#语法)
|
|
9
|
+
- [谁负责把锁面带走](#谁负责把锁面带走)
|
|
10
|
+
- [反例](#反例)
|
|
11
|
+
- [校验](#校验)
|
|
12
|
+
|
|
13
|
+
## 为什么识别锚点还不够
|
|
14
|
+
|
|
15
|
+
识别锚点是写给创作者读的事实;执行端读不到它,只读得到每条提示词自己的正文。同一件毛衣第一镜
|
|
16
|
+
织的是蓝色、第二镜变成红色,通常不是资产写错了,而是**没有任何一条提示词把颜色带进去**:视觉
|
|
17
|
+
设定写了,关键帧写了一半,运动提示词以为参考帧已经交代过就把重复描述删掉了。
|
|
18
|
+
|
|
19
|
+
参考图也补不上这一层。一张角色板只能约束它自己画到的部分;正在编织、只成形一半的毛衣,被手挡住
|
|
20
|
+
的道具,每镜重新构图的服装细节,都落在身份参考“默认不能控制”的一侧。
|
|
21
|
+
|
|
22
|
+
一致性锁补的就是这一段:把跨镜不变的那几个字固定下来,并要求它原样出现在每条受影响的提示词里。
|
|
23
|
+
|
|
24
|
+
## 什么值得上一把锁
|
|
25
|
+
|
|
26
|
+
三条同时成立才值得上锁:
|
|
27
|
+
|
|
28
|
+
1. 这个可见事实在本集出现于两个以上镜头,或一个镜头加一张资产板;
|
|
29
|
+
2. 观众能直接看出前后不一致;
|
|
30
|
+
3. 它不随剧情改变——会变的是状态,**状态不上锁**。
|
|
31
|
+
|
|
32
|
+
典型:服装主色与形制、道具主色与材质、发型长度、伤口位置与形状、招牌或界面的形制配色。
|
|
33
|
+
不典型:情绪、姿势、左右手、镜头角度、时段光线、破损进度、持有人——这些是状态或镜头瞬态,
|
|
34
|
+
分别归 `本集状态` 与分镜。
|
|
35
|
+
|
|
36
|
+
**`craft_default`**: 一集里的锁通常是个位数。把每条识别锚点都升级成锁,每条提示词都会被同一串
|
|
37
|
+
名词短语撑满,反而挤掉本镜真正要执行的动作。
|
|
38
|
+
|
|
39
|
+
## 锁面怎么写
|
|
40
|
+
|
|
41
|
+
`锁面` 是**要被逐字带进提示词正文的那一小段字**,不是描述,也不是给人读的说明:
|
|
42
|
+
|
|
43
|
+
- 用项目的提示词语言写(`short-drama.json#/format/prompt_language`,没有配置时是 `en`),
|
|
44
|
+
因为它要落进可复制正文,不是落进创作者说明;
|
|
45
|
+
- 只保留最小可辨识名词短语,通常是「颜色 + 材质/形制 + 物体」,例如
|
|
46
|
+
`pale blue chunky knit wool sweater`;
|
|
47
|
+
- 不含句号、动作、状态、数量、镜头信息和剧情;
|
|
48
|
+
- 不写会随镜头变化的词(`in her hands`、`half-finished`、`on the sofa`);
|
|
49
|
+
- 一个实体一把锁;同一实体的两种造型是两把锁,各写各的生效镜头。
|
|
50
|
+
|
|
51
|
+
比较时忽略大小写,换行按空格处理(可复制正文本来就渲染成一段,硬折行不影响匹配),其余字符
|
|
52
|
+
逐字比较。提示词可以在锁面前后接语法(`she keeps knitting the pale blue chunky knit wool
|
|
53
|
+
sweater`),但不能改写锁面内部——少一个 `stand-collar`、多一个逗号都算漂移。
|
|
54
|
+
|
|
55
|
+
还有两处刻意不算数,因为它们看起来命中、实际并没有把事实写进画面:
|
|
56
|
+
|
|
57
|
+
- **粘在词上的匹配不算**。锁面首尾是字母数字时,紧挨着的字母数字或连字符会让它落空:
|
|
58
|
+
`chipped white enamel mug` 不被 `unchipped white enamel mug` 满足,
|
|
59
|
+
`pale blue knit` 不被 `pale blue knitwear-print fleece` 满足。锁面要能作为一个完整的词组读出来。
|
|
60
|
+
- **负面提示词里的匹配不算**。写在 `no`/`not`/`without`/`avoid` 或 `不要`/`不能`/`没有`/`避免`
|
|
61
|
+
之后的锁面说的是「不要出现它」,正好与锁的目的相反;`..., no pale blue chunky knit wool
|
|
62
|
+
sweater` 不能作为锁面在场的证据。锁面必须出现在描述画面内容的正文里。
|
|
63
|
+
「粘在词上」只对 ASCII 词生效——中文本来不分词,`织着浅蓝色粗棒针毛线` 正常命中。
|
|
64
|
+
|
|
65
|
+
## 语法
|
|
66
|
+
|
|
67
|
+
写在 `视觉设定.md` 对应资产条目下,与识别锚点并列:
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
## 道具 · 织了一半的毛衣
|
|
71
|
+
|
|
72
|
+
- 识别锚点:浅蓝色粗棒针手织毛线,竹制棒针两根,衣身只织到胸口。
|
|
73
|
+
- 本集状态:SC002 起衣身加长约一掌;颜色与针法不变。
|
|
74
|
+
- 连续性锁:LOCK-KNIT《织了一半的毛衣》(镜头:全集;图片提示词项:IMG-PROP-KNIT)· 锁面:pale blue chunky knit wool sweater
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- 列表记号写 `-`、`*` 还是 `+`,缩进几格,都不影响识别;一条看起来像锁却写不完整的行会被
|
|
78
|
+
报成语法错误,不会被悄悄跳过——锁不能变成空转;
|
|
79
|
+
- `LOCK-...`:本集唯一稳定 ID,与 `IMG-...`、`REF-...`、`SHOT-...` 互不混用;
|
|
80
|
+
- `《中文名》`:给创作者读的名称,必须含中文;
|
|
81
|
+
- `镜头:`:`全集`,或 `、` 分隔的 `SHOT-...` 列表;两者不能混写;
|
|
82
|
+
- `图片提示词项:`:可选,`、` 分隔的 `IMG-...` 列表,整段省略即表示不约束图片提示词;
|
|
83
|
+
- `锁面:`:被逐字带走的那段字,写在行尾。
|
|
84
|
+
|
|
85
|
+
## 谁负责把锁面带走
|
|
86
|
+
|
|
87
|
+
| 文档 | 义务 |
|
|
88
|
+
|---|---|
|
|
89
|
+
| `图片提示词.md` | 被点名的 `IMG-...` 可复制正文含锁面,让参考图本身就是对的 |
|
|
90
|
+
| `分镜.md` | 生效镜头的冻结关键帧提示词含锁面 |
|
|
91
|
+
| `视频提示词.md` | 对应 `MOTION-...` 可复制正文含锁面 |
|
|
92
|
+
|
|
93
|
+
**`structural_invariant` CON-07**: 锁面在生效范围内不得以“参考帧已经交代过”为由删除。图生视频
|
|
94
|
+
删掉重复的静态描述是常规做法,但锁面是这条常规做法写明的例外——它正是为了挡住跨镜漂移才存在。
|
|
95
|
+
|
|
96
|
+
状态变化不进锁面:毛衣越织越长写在 `本集状态`,颜色和针法写在锁面。两者同时存在时,提示词自己
|
|
97
|
+
写长度,锁面负责颜色和针法。
|
|
98
|
+
|
|
99
|
+
## 反例
|
|
100
|
+
|
|
101
|
+
- `锁面:蓝色毛衣`——提示词正文是英文时永远匹配不上,且“蓝色”分不出浅蓝和藏青;
|
|
102
|
+
- `锁面:a pale blue sweater that she has been knitting since the first scene`——含剧情和时态,
|
|
103
|
+
下一镜必须改写它,锁当场失效;
|
|
104
|
+
- `锁面:high quality, detailed`——不是可辨识事实,锁住了也证明不了一致;
|
|
105
|
+
- 只把锁的 `镜头` 范围写到「文字已经对的那几镜」——范围要按这个事实**实际出现在哪几镜**来写,
|
|
106
|
+
按已经写对的地方来写,等于把校验器指向没有风险的位置;
|
|
107
|
+
- 把 `镜头:全集` 用在只出现两镜的道具上——其余镜头会被迫写入与本镜无关的名词。
|
|
108
|
+
|
|
109
|
+
## 校验
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
python3 <core 技能目录>/scripts/creator_markdown_check.py 剧集/<EP> --project-root .
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
它只机械核对语法、范围可解析,以及锁面是否真的出现在被点名的正文里。该不该上这把锁、锁面写得
|
|
116
|
+
准不准,仍由创作者和审查判断。
|
|
@@ -57,7 +57,8 @@
|
|
|
57
57
|
- 它能否只写差异,而不篡改基础身份?新版本只写变化,不重写成另一个身份。
|
|
58
58
|
|
|
59
59
|
在 `视觉设定.md` 中把基础身份与当前变体放在同一项目下。变体只写相对基础身份发生的变化;
|
|
60
|
-
|
|
60
|
+
跨文档需要引用视觉事实时直接使用该项目标题;只有引用《图片提示词.md》的可见提示词条目时才使用
|
|
61
|
+
稳定 `IMG-...` ID。`IMG-...` 不表示真实图片,不建立隐藏的来源声明。
|
|
61
62
|
|
|
62
63
|
### D. 只有持续身份不同才建新资产
|
|
63
64
|
|
|
@@ -39,6 +39,10 @@ State 记录可变而需跟踪的事实:
|
|
|
39
39
|
- 组装、封条、消耗量或功能状态;
|
|
40
40
|
- 变化原因与有效范围。
|
|
41
41
|
|
|
42
|
+
物件若持续承担人物的支撑、固定、负重或行动条件,状态同时记录**人物—物件关系**与有效范围,
|
|
43
|
+
再由分镜投影到起终边界;不能只写物件存在或只在角色板中画出。短暂坐下、靠墙或伸手接触仍是
|
|
44
|
+
镜头瞬态,不为此制造长期状态。
|
|
45
|
+
|
|
42
46
|
**`craft_default` AST-03**: 同一物体的转手、开合、破损、内容与文字变化优先做
|
|
43
47
|
记录状态变化,不重复创建道具。
|
|
44
48
|
|
|
@@ -67,6 +71,21 @@ State 记录可变而需跟踪的事实:
|
|
|
67
71
|
若剧情出现网址、号码、合同内容等敏感屏显,必须写明来源、准确屏显文字和创作者确认的处理方式;
|
|
68
72
|
不能把本地引用路径或内部地址带入交付。
|
|
69
73
|
|
|
74
|
+
**`craft_default`**: 可读文字或标识指向**现实中存在的品牌、商标、机构或人物**时,四个选项里
|
|
75
|
+
选哪一个不是资产环节的默认动作,而是创作者的决定。改编常把这类专名从原著原样带下来,此时
|
|
76
|
+
保留原名、只留形制而不留标识、换一个虚构名都可能是对的,取决于创作者对权利、题材真实感和
|
|
77
|
+
交付渠道的判断。
|
|
78
|
+
|
|
79
|
+
这里未定的是**政策本身**,不是文字内容,所以不要挪用 `pending_creator_text`(那一条针对
|
|
80
|
+
"剧本要求文字但内容未定")。按已有的未决决定写:`decisions.jsonl` 里一条
|
|
81
|
+
`decision_kind: unresolved`,把三种处理列进 `candidate_bindings` 并各写 support/conflict,
|
|
82
|
+
`creator_question` 问创作者选哪一种,`downstream_impact` 列出会被挡住的下游,
|
|
83
|
+
`creator_acceptance.status` 保持 `pending_choice`。`text_policy.mode` 在创作者选定前不改写,
|
|
84
|
+
原文来源位置照常保留;不替创作者定案,也不擅自改名——擅自改名同样是改写上游事实。
|
|
85
|
+
|
|
86
|
+
本套件不判断合规、不给禁令、不内置品牌清单;它只保证这个选择有人做、被记下来,而不是在
|
|
87
|
+
生成被拒之后由执行端顺手改掉。
|
|
88
|
+
|
|
70
89
|
## 内容物与知识是两条连续性
|
|
71
90
|
|
|
72
91
|
盒中始终有号牌,是道具内容状态;顾禾在打开盒子后才知道号牌存在,是人物获得了新信息。
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
| AST-10 | structural_invariant | One accepted pronunciation of a proper noun uses one spelling throughout `视觉设定.md`. |
|
|
25
25
|
| AST-11 | reviewed_invariant | Characters designed together are not bound to confusable references; each names the audible trait telling it apart from its nearest neighbour, and names that character. |
|
|
26
26
|
| AST-12 | craft_default | Selection criteria are few, audible and counter-exampled; they judge a candidate reference or a clone result, they do not stand in for one. |
|
|
27
|
+
| AST-13 | structural_invariant | When the project's prompt language is not the language of the entry headings, every 人物 entry a shot's 视觉依据 references reaches a stated conclusion: `画面代称` carrying the exact spelling prompt bodies use, or `画面代称:无` when no body names it. One accepted name uses one spelling, case included. 地点/道具 declare one only when a body names them. |
|
|
27
28
|
|
|
28
29
|
### `CON`
|
|
29
30
|
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
| CON-04 | structural_invariant | A continuity change states before, after, cause/source scene, effective range, and affected visible IDs. |
|
|
36
37
|
| CON-05 | taste_option | Declared montage, ellipsis, dream, or subjective imagery may intentionally break ordinary continuity. |
|
|
37
38
|
| CON-06 | structural_invariant | A continuity change names every existing downstream document it affects; future work is described, not pre-created. |
|
|
39
|
+
| 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. |
|
|
38
40
|
|
|
39
41
|
规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
|
|
40
42
|
`reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、
|
|
@@ -259,7 +259,7 @@ def main() -> int:
|
|
|
259
259
|
except (OSError, ValidationError) as exc:
|
|
260
260
|
print(f"asset check failed: {exc}", file=sys.stderr)
|
|
261
261
|
return 2
|
|
262
|
-
print(json.dumps(result, ensure_ascii=
|
|
262
|
+
print(json.dumps(result, ensure_ascii=True, indent=2))
|
|
263
263
|
return 0
|
|
264
264
|
|
|
265
265
|
|
|
@@ -8,6 +8,7 @@ license: MIT
|
|
|
8
8
|
|
|
9
9
|
把视觉事实写成可复用、可修改、可直接复制的角色板、场景板、道具板或状态图提示词,统一保存到
|
|
10
10
|
`剧集/<EP>/图片提示词.md`。每项用 `IMG-...` 标题,正文放在 `### 可复制提示词` 引用块。
|
|
11
|
+
`IMG-...` 只是该提示词条目的稳定 ID,不声明图片已生成或可用;实际图片只能来自创作者已提供的输入,或经确认后的生产结果。
|
|
11
12
|
|
|
12
13
|
## Quick Start
|
|
13
14
|
|
|
@@ -29,7 +30,7 @@ license: MIT
|
|
|
29
30
|
1. 锁定这一张图要固定的身份、状态、空间或比较变量。
|
|
30
31
|
2. 只读所需资产事实、视觉方向、负面约束和已提供参考图。
|
|
31
32
|
3. 按“主体与身份锚点 → 当前变体 → 构图/视角 → 光色/材质 → 背景边界 → 禁止项”写正文。
|
|
32
|
-
4.
|
|
33
|
+
4. 每张参考只控制身份、造型、地理、构图或风格中的明确部分,并在 `REF-...` 槽位里写出封闭词表中的 `用途`。
|
|
33
34
|
5. 检查身份与变体、文字政策、视角和光线是否冲突。
|
|
34
35
|
6. 用户要全部资产就完成全部,资产组只是内部批次。
|
|
35
36
|
|
|
@@ -38,6 +39,7 @@ license: MIT
|
|
|
38
39
|
- 开头先写对象和用途,不用风格词淹没身份。
|
|
39
40
|
- 只包含当前图能同时满足的要求;多视图/状态对照写清版面关系。
|
|
40
41
|
- 保留稳定识别锚点,变体只改允许变化的部分。
|
|
42
|
+
- 被《视觉设定.md》连续性锁点名的条目,锁面原样出现在可复制正文里,让这张参考图本身就把跨镜事实定住。
|
|
41
43
|
- 避免无验证作用的质量词堆砌。
|
|
42
44
|
- 可见文字、logo、水印、界面和字幕明确允许或禁止。
|
|
43
45
|
- 正文可直接复制,不含占位符、流程说明、文件路径或 QA 结论。
|
|
@@ -59,8 +61,10 @@ license: MIT
|
|
|
59
61
|
|
|
60
62
|
## 完成与投产
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
每个点名对象都有明确用途、可复制正文、参考边界和禁止项,且相互不矛盾,即完成。本次请求同时
|
|
65
|
+
修改图片提示词与分镜时,当轮刷新受影响镜头的「图片提示词项」,不另建对账产物。实际生成必须
|
|
63
66
|
转 `$short-drama-produce`,展示精确任务并取得显式确认;本技能不调用外部服务。
|
|
67
|
+
五份创作文档齐备后,可转 `$short-drama` 对跨文档结构做一次机械核对;内容质量仍由创作者审查。
|
|
64
68
|
|
|
65
69
|
## 安装维护
|
|
66
70
|
|
|
@@ -175,9 +175,10 @@
|
|
|
175
175
|
|
|
176
176
|
### 参考图可以决定哪些内容(`IMG-09`)
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
每张真实参考图使用稳定 `REF-...` 槽位;槽位在创作文档里逐字写成 `REF-<slot>(顺序:<n>)· <项目相对路径>《<中文名称>》(用途:<用途>;控制:<范围>;不得控制:<范围>)`,并另行说明观察状态与未决风险。
|
|
179
|
+
调整顺序或插入新参考不能改变已有槽位的语义;换图时在同一槽位明确修订 locator,不把旧图的控制边界静默转给新槽位。`IMG-...` 只定位当前《图片提示词.md》的提示词条目。`用途` 是封闭词表,只能取 `身份`、`造型状态`、
|
|
180
|
+
`地理`、`构图`、`尺度`、`效果`、`起始帧`、`结束帧`、`风格` 之一;一张图承担两件事就拆成两个槽位,
|
|
181
|
+
不写「全参考」,也不自造新用途。资产板通常只用到前六个——`起始帧` 和 `结束帧` 属于镜头,不属于资产板。
|
|
181
182
|
|
|
182
183
|
- 身份参考不自动决定姿势、构图或临时造型;
|
|
183
184
|
- 构图/尺度参考只借用占比、机位所在一侧、留白或相对尺度,不带入图中人物与事件;
|
|
@@ -22,7 +22,7 @@ Lookdev 风格帧把 `视觉设定.md` 中项目级视觉方向投影成可比
|
|
|
22
22
|
|
|
23
23
|
- “允许控制”只列色彩层级、材质处理、阴影边缘、景深倾向、画面密度等本次准许内容;
|
|
24
24
|
- “不得控制”保护角色身份、固定场景地理、剧情状态、人数、持物与道具文字;
|
|
25
|
-
-
|
|
25
|
+
- 每张真实参考图使用稳定 `REF-...` 槽位,绑定可见项目相对路径或其他明确 artifact locator、中文名称、显式顺序和封闭词表里的用途(风格帧通常是 `风格`);换图时显式修订槽位的 locator,不把旧图的控制语义静默转给新槽位。`IMG-...` 仅用于当前《图片提示词.md》的提示词条目。
|
|
26
26
|
|
|
27
27
|
角色、地点或压力场景的事实仍来自它们各自 owner。高压力测试帧不得为了“更有冲击力”提前
|
|
28
28
|
泄露身份、发明动作结果或改变文字政策。
|
|
@@ -38,7 +38,7 @@ Finding 的修复必须可执行,例如“补回安全门相对检修台的位
|
|
|
38
38
|
- 人物、地点或道具的当前变体与有效范围没有冲突;
|
|
39
39
|
- 可读文字与全局禁字没有同时出现;
|
|
40
40
|
- 局部编辑包含目标、变化、保持项和连续性影响;
|
|
41
|
-
-
|
|
41
|
+
- 每张真实参考图用独立稳定的 `REF-...` 槽位绑定顺序、项目相对路径/明确 artifact locator 和中文名称,并写明封闭词表里的用途、允许控制、不得控制与未验证风险;
|
|
42
42
|
- 可复制正文不含 ID、文件路径、占位符、流程说明或 QA 结论。
|
|
43
43
|
|
|
44
44
|
只有本地可证明的结构冲突直接阻断。语义问题由 reviewer 引用来源与正文后给 `REVISE`;默认做法与
|
|
@@ -23,7 +23,9 @@
|
|
|
23
23
|
| IMG-09 | reviewed_invariant | Each reference states its purpose, what may be copied, and what must not be copied; a composition-, scale-, or effect-only reference cannot redefine identity, content, text, or story state. |
|
|
24
24
|
| IMG-10 | reviewed_invariant | Views of one Location in the same time/weather state share key-light source, colour-temperature relation, and contrast direction; any difference cites a recorded cause and its delta. |
|
|
25
25
|
| IMG-11 | reviewed_invariant | A lookdev frame binds accepted visual direction and production profile across a declared character-expression, core-location, or high-pressure test axis; a high-pressure frame also binds exact screenplay blocks for story state and information permission, while style references may control only declared surface treatment and never identity, fixed geography, story state, cast count, or prop text. |
|
|
26
|
-
| IMG-12 | reviewed_invariant |
|
|
26
|
+
| IMG-12 | reviewed_invariant | Each real input reference has a stable `REF-...` slot binding explicit order, a visible project-relative path or other unambiguous artifact locator, a Chinese label, and may-control/must-not-control scope. Reordering preserves slot identity; replacing media explicitly revises that slot's locator. `IMG-...` remains reserved for image-prompt headings. |
|
|
27
|
+
| IMG-13 | structural_invariant | An `IMG-...` item named by a continuity lock in `视觉设定.md` carries that lock's surface verbatim in its copyable prompt. |
|
|
28
|
+
| IMG-14 | structural_invariant | Every `REF-...` slot an image-prompt item declares carries one 用途 from the closed set 身份/造型状态/地理/构图/尺度/效果/起始帧/结束帧/风格, the same vocabulary the storyboard uses, so one picture answers one question. An asset board normally uses the first six; 起始帧 and 结束帧 belong to a shot. |
|
|
27
29
|
|
|
28
30
|
规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
|
|
29
31
|
`reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、
|
|
@@ -106,17 +106,17 @@ def resolve_ref(
|
|
|
106
106
|
|
|
107
107
|
SKILL_ROOT = Path(__file__).resolve().parents[1]
|
|
108
108
|
HASH_RE = re.compile(r"[0-9a-f]{64}")
|
|
109
|
-
# `common-recipe.md` forbids weight syntax and any one engine's control words
|
|
110
|
-
#
|
|
111
|
-
#
|
|
109
|
+
# `common-recipe.md` forbids weight syntax and any one engine's control words: a
|
|
110
|
+
# generic prompt that carries provider control syntax has stopped being generic.
|
|
111
|
+
# This checks syntax only. Whether the prose leans on generic quality language is
|
|
112
|
+
# `IMG-02`, a `craft_default` a creator may override with a reason, so it is a
|
|
113
|
+
# reviewer's call citing what the description actually lacks — see
|
|
114
|
+
# `common-recipe.md`, which forbids blocking delivery on a fixed word list.
|
|
112
115
|
ENGINE_SYNTAX_RE = re.compile(
|
|
113
116
|
r"(?:^|[\s,,((])--(?:ar|v|q|niji|style|no|seed|cref|sref)\b"
|
|
114
117
|
r"|::-?\d"
|
|
115
118
|
# Weight syntax is written (x:1.2); prose writes "(aperture: 1.8)" with a space.
|
|
116
|
-
r"|:[01]\.\d\s*[))]"
|
|
117
|
-
# Quality words only count in a tag slot. A 4K monitor in shot is content.
|
|
118
|
-
r"|(?:^|,\s*)(?:8k|4k|uhd)\s*(?=,|$)"
|
|
119
|
-
r"|(?:^|,\s*)(?:masterpiece|best quality|ultra[- ]detailed|trending on artstation)\s*(?=,|$)",
|
|
119
|
+
r"|:[01]\.\d\s*[))]",
|
|
120
120
|
re.IGNORECASE,
|
|
121
121
|
)
|
|
122
122
|
PURPOSES = {
|
|
@@ -435,7 +435,7 @@ def main() -> int:
|
|
|
435
435
|
except (OSError, ValidationError) as exc:
|
|
436
436
|
print(f"image prompt check failed: {exc}", file=sys.stderr)
|
|
437
437
|
return 2
|
|
438
|
-
print(json.dumps(result, ensure_ascii=
|
|
438
|
+
print(json.dumps(result, ensure_ascii=True, indent=2))
|
|
439
439
|
return 0
|
|
440
440
|
|
|
441
441
|
|
|
@@ -51,9 +51,11 @@ def main() -> int:
|
|
|
51
51
|
leaked[0]["provider"] = "example"
|
|
52
52
|
fail(leaked, sources, "provider execution fields")
|
|
53
53
|
|
|
54
|
-
# A/B Round 2: the suite forbids
|
|
54
|
+
# A/B Round 2: the suite forbids provider control syntax in a generic prompt,
|
|
55
55
|
# but nothing enforced it — the only prompt check was for leaked hashes.
|
|
56
|
-
|
|
56
|
+
# Generic quality language is `IMG-02`, a `craft_default`; it is not checked
|
|
57
|
+
# here, because a validator cannot block delivery on a fixed word list.
|
|
58
|
+
for syntax in ("--ar 9:16", "(red coat:1.2)", "cat::2"):
|
|
57
59
|
engine_syntax = copy.deepcopy(records)
|
|
58
60
|
engine_syntax[0]["generic_prompt"] += f" {syntax}"
|
|
59
61
|
fail(engine_syntax, sources, "engine-specific syntax")
|
|
@@ -14,7 +14,17 @@ license: MIT
|
|
|
14
14
|
|
|
15
15
|
只在用户明确要求实际生成后,从当前 `图片提示词.md`、`分镜.md` 或 `视频提示词.md` 中
|
|
16
16
|
取出本次提示词,建立一个有边界的运行 job。creator-first job 的 `source` 必须指向拥有这条提示词的
|
|
17
|
-
当前 Markdown
|
|
17
|
+
当前 Markdown,`source_entry` 必须点名该文档允许的二级标题:`图片提示词.md` 用 `IMG-*`,
|
|
18
|
+
`视频提示词.md` 用 `MOTION-*`,`分镜.md` 用 `SHOT-*`(modality 为 `image`,正文取该镜的
|
|
19
|
+
`### 冻结关键帧提示词`)。分镜这一路是本套件里唯一能把某一镜的起始画面渲染成文件的入口;
|
|
20
|
+
产出落在 `剧集/<EP>/制作成果/images/` 后,分镜 owner 才能把它绑成 `用途:起始帧` 的 `REF-...`。存在真实参考图时,
|
|
21
|
+
还必须逐张填写 `reference_bindings` 的槽位、顺序、路径、中文名、用途以及允许/禁止控制范围;
|
|
22
|
+
内置视频 adapter 把这里的 `用途` 字段读成供应商自己的 role,只接受它公布的取值
|
|
23
|
+
(MiniMax 为 `first_frame`/`last_frame`/`reference_image`/`reference_video`/`reference_audio`,
|
|
24
|
+
Seedance 为三个 `reference_*`);带参考图却没有绑定的 job 会直接失败,不替它猜一个 role。
|
|
25
|
+
本地图片由内置 adapter 按 base64 data URI 直接送出,不需要自建上传服务。
|
|
26
|
+
`references` 可以省略并由绑定顺序生成,也可以作为相同顺序的显式镜像。输出放在
|
|
27
|
+
`剧集/<EP>/制作成果/`;这个 job 是生产工具的临时输入,不是第六份创作文档:
|
|
18
28
|
|
|
19
29
|
```bash
|
|
20
30
|
python3 {技能目录}/scripts/production_tool.py prepare <project> --job <临时-job.json>
|
|
@@ -27,8 +37,9 @@ python3 {技能目录}/scripts/production_tool.py prepare <project> --job <临
|
|
|
27
37
|
每次生产都必须经过以下四步,顺序不可合并:
|
|
28
38
|
|
|
29
39
|
1. 建立一个有边界的 job:一种 modality、明确数量、完整 prompt/spec、参考文件、参数、输出路径和 adapter profile。
|
|
30
|
-
2. 运行 `prepare`,把返回的完整预览展示给创作者,尤其是数量、prompt、
|
|
31
|
-
overwrite 与 adapter。
|
|
40
|
+
2. 运行 `prepare`,把返回的完整预览展示给创作者,尤其是数量、prompt、source entry、
|
|
41
|
+
reference bindings、references、outputs、overwrite 与 adapter。creator-first job 会在这一步机械核对
|
|
42
|
+
所选标题里的可复制提示词,以及参考图槽位、顺序、路径、中文名和控制边界;任一漂移都 fail closed。
|
|
32
43
|
3. 等创作者在**看到这份预览之后**明确确认。只有明确同意这项当前任务,才运行 `confirm`;
|
|
33
44
|
“继续”“都做完”“预算没问题”、上游内容已接受或之前确认过另一版,都不算本次生产确认。
|
|
34
45
|
4. 运行 `run`。它会在启动 adapter 前消费一次确认;成功或失败后再次执行都必须重新确认,
|
|
@@ -37,9 +48,21 @@ python3 {技能目录}/scripts/production_tool.py prepare <project> --job <临
|
|
|
37
48
|
job、prompt、参数、输出路径或直接输入任一变化,旧确认立即失效。不得代替创作者填写确认。
|
|
38
49
|
当前已确认 job 是本轮唯一工作单元;运行结束后回报结果并交还控制权,不自动准备下一批或启动审查。
|
|
39
50
|
|
|
51
|
+
`分镜.md` 的「输入参考图」路径只是创作阶段的可读依据与使用意图,不是生产输入快照。进入生产时,
|
|
52
|
+
creator-first job 必须从 `图片提示词.md` 或 `视频提示词.md` 的对应条目建立绑定;`prepare` 展示的
|
|
53
|
+
`reference_bindings`、`references` 与已确认 job 才是本次 adapter 实际读取哪些文件字节、各自允许
|
|
54
|
+
影响什么的权威。非 creator 的结构化规格可不填 `source_entry`/`reference_bindings`,继续只使用显式
|
|
55
|
+
`references`;但新的 image/video job 只要 `source` 指向 canonical `图片提示词.md` 或
|
|
56
|
+
`视频提示词.md` 就强制使用对应 selector,不能靠省略字段降级绕过。升级前已经 prepare 并落盘的
|
|
57
|
+
旧 job 仍可按原指纹读取。
|
|
58
|
+
新生产结果不自动回填或刷新分镜;需要把它改为后续输入时,由分镜 owner 修订文档,再建立新 job
|
|
59
|
+
并重新预览、确认。
|
|
60
|
+
|
|
40
61
|
## 命令
|
|
41
62
|
|
|
42
|
-
只在进入生产边界后把当前提示词和运行参数写成临时 JSON
|
|
63
|
+
只在进入生产边界后把当前提示词和运行参数写成临时 JSON;视频与图片 job 的
|
|
64
|
+
`parameters.prompt_language` 跟随当前可复制正文已经解析出的提示词语言,使 adapter 追加的参考约束
|
|
65
|
+
使用同一种语言,而不是重新回退成固定英文。不要在创作阶段为每条提示词预建 job。
|
|
43
66
|
格式和 adapter 契约见
|
|
44
67
|
[adapter-contract.md](references/adapter-contract.md)。命令由
|
|
45
68
|
[production_tool.py](scripts/production_tool.py) 提供,然后运行:
|
|
@@ -59,9 +82,15 @@ python3 <本技能目录>/scripts/production_tool.py audit <project>
|
|
|
59
82
|
|
|
60
83
|
## 输入选择
|
|
61
84
|
|
|
62
|
-
- **image**:读取 `图片提示词.md`
|
|
63
|
-
-
|
|
64
|
-
|
|
85
|
+
- **image**:读取 `图片提示词.md` 的当前 `IMG-*` 可复制正文,或 `分镜.md` 的当前 `SHOT-*`
|
|
86
|
+
冻结关键帧正文,加上必要参考图和明确的输出尺寸/数量;creator-first job 使用 `source_entry`
|
|
87
|
+
锁定这一条。资产板走 `IMG-*`,某一镜的起始画面走 `SHOT-*`;两者不互相替代。
|
|
88
|
+
- **video**:读取 `视频提示词.md` 的当前 `MOTION-*` 可复制正文,并核对 `分镜.md` 中对应镜头、
|
|
89
|
+
冻结关键帧、时长与画幅;creator-first job 使用 `source_entry` 锁定这一条。连续段选择从上一段
|
|
90
|
+
生成结果续接时,下一段 job 同时绑定上一段实际视频和从该视频取得的实际尾帧,并保留
|
|
91
|
+
`continuity_video`、`actual_tail_frame` 的不同职责;供应商 role 由目标模型 adapter 翻译。H3 的这组
|
|
92
|
+
输入统一译为 `reference_video + reference_image`,不能混成 `reference_video + first_frame`;不以
|
|
93
|
+
计划尾帧或文字描述代替真实文件。
|
|
65
94
|
- **tts**:从 `剧本.md` 读取原句与表演要求,声音参考由用户或现有媒体明确提供。不得在生产 job
|
|
66
95
|
中改词,也不为 TTS 新建第六份创作文档。
|
|
67
96
|
- **music**:读取 `视频提示词.md` 中创作者已确认的时间线音乐章节;主题曲使用已确认歌词,纯配乐
|
|
@@ -80,14 +109,21 @@ adapter 配置必须在项目外,只包含 argv 命令和超时;凭据由 ad
|
|
|
80
109
|
接受与已确认 targets 完全一致的结果,并把完整文件原子复制到项目的 `剧集/<EP>/制作成果/`
|
|
81
110
|
目录。项目和上游 Skill 不写死供应商、模型或即将变化的 API。
|
|
82
111
|
|
|
83
|
-
|
|
112
|
+
内置图片/视频 compiler 会根据已确认的 `reference_bindings`,按顺序向供应商 prompt 附加一段确定性的
|
|
113
|
+
引用语义说明(中文名、用途、允许控制与不得控制范围);不会把槽位名误当成要渲染进画面的文字。
|
|
114
|
+
外部 adapter 也必须保留这组语义或明确拒绝,不能只上传文件而静默丢失控制边界。
|
|
115
|
+
|
|
116
|
+
本技能可选提供四个 stdlib adapter,均通过项目外 adapter config 选择,凭据只从运行环境读取:
|
|
84
117
|
|
|
85
|
-
- [Seedance](references/providers/seedance.md):模型/Endpoint ID
|
|
86
|
-
|
|
118
|
+
- [Seedance](references/providers/seedance.md):模型/Endpoint ID 必须由账号显式配置;compiler 支持
|
|
119
|
+
官方图片、视频和音频参考 role,内置 runtime 未配置可信上传时仍拒绝本地参考文件。
|
|
87
120
|
- [GPT Image 2](references/providers/gpt-image-2.md):无参考图走 generation,有参考图走 edit;
|
|
88
121
|
固定高保真引用并校验尺寸、格式与透明背景限制。
|
|
89
122
|
- [MiniMax Music](references/providers/minimax-music.md):使用 `music-3.0` 与 hex 结果,区分主题曲
|
|
90
123
|
和纯配乐,不伪造时长请求字段。
|
|
124
|
+
- [MiniMax H3 视频](references/providers/minimax-h3-video.md):模型 ID、分辨率集合与时长区间必须
|
|
125
|
+
由账号显式配置;提示词进 `content` 的 text 项,参考图按显式 role 绑定,本地参考在没有可信上传时
|
|
126
|
+
fail closed。该模型与画面同一次生成声音,写法影响见视频提示词技能的目标模型能力档案。
|
|
91
127
|
|
|
92
128
|
这些 adapter 是已验证请求契约,不是账号可用性或生成质量保证;正式生产仍必须通过上面的本次
|
|
93
129
|
确认闸门,并由审查 Skill 判断产物质量。
|
|
@@ -5,14 +5,26 @@
|
|
|
5
5
|
```json
|
|
6
6
|
{
|
|
7
7
|
"schema_version": "1.0",
|
|
8
|
-
"job_id": "EP001-
|
|
9
|
-
"modality": "
|
|
10
|
-
"adapter": "studio-
|
|
11
|
-
"prompt": "the
|
|
12
|
-
"source": "剧集/EP001
|
|
8
|
+
"job_id": "EP001-MOTION001-video",
|
|
9
|
+
"modality": "video",
|
|
10
|
+
"adapter": "studio-video",
|
|
11
|
+
"prompt": "the exact copyable prompt from MOTION-EP001-001",
|
|
12
|
+
"source": "剧集/EP001/视频提示词.md",
|
|
13
|
+
"source_entry": "MOTION-EP001-001",
|
|
14
|
+
"reference_bindings": [
|
|
15
|
+
{
|
|
16
|
+
"slot_id": "REF-HERO",
|
|
17
|
+
"order": 1,
|
|
18
|
+
"path": "输入/approved-character-reference.png",
|
|
19
|
+
"label": "女主定妆照",
|
|
20
|
+
"role": "reference_image",
|
|
21
|
+
"may_control": ["身份", "造型"],
|
|
22
|
+
"must_not_control": ["构图", "动作"]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
13
25
|
"references": ["输入/approved-character-reference.png"],
|
|
14
|
-
"outputs": ["剧集/EP001/制作成果/
|
|
15
|
-
"parameters": {"
|
|
26
|
+
"outputs": ["剧集/EP001/制作成果/video/SHOT-EP001-001.mp4"],
|
|
27
|
+
"parameters": {"duration": 5, "ratio": "9:16", "prompt_language": "zh-CN"},
|
|
16
28
|
"overwrite": false
|
|
17
29
|
}
|
|
18
30
|
```
|
|
@@ -21,16 +33,53 @@
|
|
|
21
33
|
utterance; `music` is a separately accepted timeline-level cue or song and
|
|
22
34
|
must not be smuggled into every shot's video job.
|
|
23
35
|
- `source`: optional current project text/spec that owns the prompt.
|
|
36
|
+
- `source_entry`: for a creator-first job, the exact uppercase H2 ID inside a
|
|
37
|
+
canonical `剧集|episodes/<EP>/` creator document, matched to that document:
|
|
38
|
+
`图片提示词.md` takes `IMG-*` (image), `视频提示词.md` takes `MOTION-*` (video),
|
|
39
|
+
and `分镜.md` takes `SHOT-*` (image, whose prompt is the shot's
|
|
40
|
+
`### 冻结关键帧提示词` body rather than `### 可复制提示词`). A new image/video job pointing to either canonical filename must
|
|
41
|
+
provide the matching selector; an arbitrary Markdown file cannot impersonate a
|
|
42
|
+
creator source. `prepare` selects that section and requires `prompt` to exactly
|
|
43
|
+
equal its copyable prompt after Markdown quote markers are removed.
|
|
44
|
+
- `reference_bindings`: zero to sixteen ordered semantic bindings. Every entry has
|
|
45
|
+
exactly `slot_id`, contiguous `order`, project-relative `path`, Chinese `label`,
|
|
46
|
+
non-empty `role`, and non-empty `may_control` / `must_not_control` lists. When
|
|
47
|
+
`source_entry` is present, these fields must exactly match that entry's
|
|
48
|
+
`参考` (IMG) or `输入参考图` (SHOT/MOTION) declaration (except `role`, which is
|
|
49
|
+
production metadata). Allowed and prohibited scopes may not overlap.
|
|
50
|
+
The creator declaration also carries a `用途` — what this picture decides in
|
|
51
|
+
this shot, from the closed set in the storyboard skill. `role` is its
|
|
52
|
+
production-side translation and is chosen per provider, so the two are not
|
|
53
|
+
compared; a binding whose `role` contradicts the declared `用途` is a defect
|
|
54
|
+
the creator document, not this schema, is the authority on. This schema keeps
|
|
55
|
+
`role` free-form because an external adapter names its own inputs, but the
|
|
56
|
+
bundled video adapters read it as the provider's own role and accept only
|
|
57
|
+
their published vocabulary: `first_frame`, `last_frame`, `reference_image`,
|
|
58
|
+
`reference_video`, `reference_audio` for MiniMax, and the three `reference_*`
|
|
59
|
+
values for Seedance. A video job carrying references without bindings fails
|
|
60
|
+
closed there rather than having a role guessed for it.
|
|
24
61
|
- `references`: zero to sixteen current project files actually sent to production.
|
|
62
|
+
It may be omitted when `reference_bindings` is present, in which case the paths
|
|
63
|
+
are derived in binding order. If both are present, they must match exactly.
|
|
25
64
|
- `outputs`: one to sixteen unique paths rooted at top-level `production/` or
|
|
26
65
|
`剧集|episodes/<EP>/制作成果|production/`; extensions must match the modality.
|
|
27
66
|
A nested directory merely named `production` does not grant write access to
|
|
28
67
|
protected input or delivery trees.
|
|
29
|
-
- `parameters`: provider-neutral public settings only.
|
|
68
|
+
- `parameters`: provider-neutral public settings only. Image/video jobs carry the resolved
|
|
69
|
+
`prompt_language` so a bundled compiler writes its appended reference contract in the same
|
|
70
|
+
language as the copyable prompt; this execution-only setting is not forwarded as a provider
|
|
71
|
+
request field. Secret-like keys are rejected.
|
|
30
72
|
- `overwrite`: must be explicitly true to replace an existing result.
|
|
31
73
|
|
|
32
74
|
`prepare` records internal digests of source/reference bytes and returns the exact confirmation phrase. Callers never
|
|
33
75
|
calculate those digests. A changed input requires prepare and confirmation again.
|
|
76
|
+
Jobs already prepared and stored before this contract remain readable under their
|
|
77
|
+
original fingerprint. New non-creator structured jobs remain valid without
|
|
78
|
+
`source_entry` and `reference_bindings`; they still receive the existing
|
|
79
|
+
path/digest/confirmation checks. A `music` job may continue to use the timeline
|
|
80
|
+
music section of canonical `视频提示词.md` without pretending that section is a
|
|
81
|
+
`MOTION-*` entry; other new image/video jobs using canonical creator paths must use
|
|
82
|
+
their matching selector.
|
|
34
83
|
|
|
35
84
|
## Adapter config
|
|
36
85
|
|
|
@@ -70,6 +119,14 @@ provider adapters under `scripts/` document and implement known translations;
|
|
|
70
119
|
the project job remains provider-neutral, and adapter selection, model access,
|
|
71
120
|
polling and credentials stay in the external runtime configuration.
|
|
72
121
|
|
|
122
|
+
The confirmed document includes `source_entry` and `reference_bindings`. Bundled
|
|
123
|
+
image/video compilers append an ordered reference contract to the provider prompt so the Chinese
|
|
124
|
+
label, role, allowed controls, and prohibited controls survive the handoff. Its prose follows
|
|
125
|
+
`parameters.prompt_language`; model-native compilers also use that model's actual reference tokens,
|
|
126
|
+
such as Seedance `@图片1` or H3 `<Picture 1>`, rather than adding a second generic numbering scheme.
|
|
127
|
+
External adapters must preserve equivalent semantics
|
|
128
|
+
or reject the job; silently reducing the input to an unlabelled file list is invalid.
|
|
129
|
+
|
|
73
130
|
## Adapter stdout
|
|
74
131
|
|
|
75
132
|
On success, write one bounded UTF-8 JSON object to stdout. Portable adapters
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# MiniMax H3 video adapter
|
|
2
|
+
|
|
3
|
+
Adapter command:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{"command": ["python3", "/absolute/path/provider_adapters.py", "minimax-h3"], "timeout_seconds": 3600}
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Required environment:
|
|
10
|
+
|
|
11
|
+
- `MINIMAX_API_KEY`: MiniMax API key.
|
|
12
|
+
- `MINIMAX_VIDEO_MODEL`: the exact enabled model ID. There is intentionally no default; the adapter
|
|
13
|
+
never assumes which MiniMax video release an account has.
|
|
14
|
+
- `MINIMAX_VIDEO_RESOLUTIONS`: comma-separated subset the configured model actually accepts, drawn
|
|
15
|
+
from `480P`, `768P`, `2K`. The published envelopes differ per release, so this is configuration,
|
|
16
|
+
not a constant.
|
|
17
|
+
- `MINIMAX_VIDEO_MIN_DURATION` and `MINIMAX_VIDEO_MAX_DURATION`: the configured model's explicit
|
|
18
|
+
inclusive duration range in whole seconds. Set both or neither; a job carrying `duration` without
|
|
19
|
+
the profile fails closed.
|
|
20
|
+
|
|
21
|
+
Optional environment:
|
|
22
|
+
|
|
23
|
+
- `MINIMAX_VIDEO_BASE_URL` (default `https://api.minimax.io/v2`)
|
|
24
|
+
- `MINIMAX_VIDEO_RATIOS`: comma-separated subset of `adaptive`, `1:1`, `3:4`, `4:3`, `9:16`, `16:9`,
|
|
25
|
+
`21:9`.
|
|
26
|
+
- `MINIMAX_VIDEO_POLL_INTERVAL` (default `5` seconds)
|
|
27
|
+
- `MINIMAX_VIDEO_TIMEOUT_SECONDS` (default `1800` seconds)
|
|
28
|
+
|
|
29
|
+
The job must have modality `video` and exactly one `.mp4` output. `duration` and `resolution` are
|
|
30
|
+
required and are only accepted when the runtime profile above permits their values. `ratio` is
|
|
31
|
+
optional for reference-conditioned jobs and **required** for text-to-video, where `adaptive` is
|
|
32
|
+
refused because there is no reference frame to adapt to.
|
|
33
|
+
|
|
34
|
+
The prompt is compiled into one `text` item of the multimodal `content` array and is refused above
|
|
35
|
+
7000 characters. Each declared reference becomes one further `content` item carrying an explicit
|
|
36
|
+
`role`: `first_frame`, `last_frame`, `reference_image`, `reference_video`, or `reference_audio`.
|
|
37
|
+
Set the job's `parameters.prompt_language` to the resolved video-prompt language; the compiler
|
|
38
|
+
consumes it when appending reference semantics and does not send it as a MiniMax request field.
|
|
39
|
+
`first_frame` and `last_frame` may each appear once. The published envelope also caps reference
|
|
40
|
+
conditioning at 9 `reference_image`, 3 `reference_video` and 3 `reference_audio` items, with video and
|
|
41
|
+
audio clips between 2 and 15 seconds each and at most 15 seconds in total per modality; the compiler
|
|
42
|
+
does not count them, so a configuration that can exceed those numbers has to bound them itself.
|
|
43
|
+
frame conditioning (`first_frame` / `last_frame`) and full-reference conditioning
|
|
44
|
+
(`reference_image` / `reference_video` / `reference_audio`) are mutually exclusive in one request.
|
|
45
|
+
For continuation, bind the previous actual video as `reference_video` and its actual tail as
|
|
46
|
+
`reference_image`; the compiler labels them `<Video 1>` and `<Picture 1>` in its appended contract.
|
|
47
|
+
Never relabel that tail as `first_frame` while a reference video is present. Reference URLs may be HTTPS, `mm_file://{file_id}`, or a `data:<mime>;base64,<...>` URI — all three
|
|
48
|
+
are documented inputs. A project-relative reference in the confirmed job is read from disk and sent
|
|
49
|
+
inline as a data URI, so binding an image in the creator documents is enough to run the job; no
|
|
50
|
+
upload service is required. Each file's bytes must match the media type its extension claims, and
|
|
51
|
+
the published per-modality caps apply: 30MB per image, 50MB per video, 15MB per audio clip, and 64MB
|
|
52
|
+
for the whole request measured after base64 expansion. A reference past those caps fails closed with
|
|
53
|
+
an explicit message; host it and bind an HTTPS URL instead of splitting it.
|
|
54
|
+
|
|
55
|
+
Each reference takes its provider role from the confirmed job's `reference_bindings[].role`, which is
|
|
56
|
+
where the creator document's `用途` is translated for this provider. A job that carries references
|
|
57
|
+
without those bindings fails closed rather than guessing a role.
|
|
58
|
+
|
|
59
|
+
The adapter creates an asynchronous task with `POST {base}/video_generation`, polls
|
|
60
|
+
`GET {base}/query/video_generation/{task_id}` until a terminal state, and downloads `task.content.url` into a private temporary directory. Any unknown
|
|
61
|
+
status fails closed.
|
|
62
|
+
|
|
63
|
+
## What this model changes for the prompt itself
|
|
64
|
+
|
|
65
|
+
This release generates audio in the same pass as the picture. Its direct prompt dialect is also
|
|
66
|
+
structured: base/first-frame/first-last-frame tasks use `integrated_multimodal_description`,
|
|
67
|
+
`overall_soundscape`, and `non_diegetic_music`; full-reference tasks use the six-section H3 reference
|
|
68
|
+
form. Chinese dialogue remains exact inside `<d>[Chinese] ...</d>`. Full details live in the
|
|
69
|
+
video-prompt skill's `references/minimax-h3.md`.
|
|
70
|
+
|
|
71
|
+
Audio generation is a **capability**, not a style:
|
|
72
|
+
what changes upstream is only which axes of the target-model profile a project declares — see the
|
|
73
|
+
video-prompt skill's target-model profile. Two consequences are worth stating here because they
|
|
74
|
+
show up as production defects rather than as API errors:
|
|
75
|
+
|
|
76
|
+
- an unstated audio channel is not a silent one. A shot that says nothing about music or speech can
|
|
77
|
+
come back with invented score and invented lines, so the shot's own sound intent, including what
|
|
78
|
+
must **not** be produced, has to be in the copyable body;
|
|
79
|
+
- readable on-screen text is likewise produced unless it is excluded, so a shot with no readable-text
|
|
80
|
+
obligation states that exclusion instead of relying on the model to omit it.
|
|
81
|
+
|
|
82
|
+
Neither is written here as a fixed phrase, and this suite never injects one. The wording belongs to
|
|
83
|
+
the shot and to the project's declared prompt language.
|
|
84
|
+
|
|
85
|
+
Protocol reference: [MiniMax video generation API](https://platform.minimax.io/docs/api-reference/video-generation-v2-create).
|