@oh-story/dsh 0.1.15 → 0.1.17
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 +17 -15
- package/lib/client.js +26 -15
- package/lib/client.js.map +2 -2
- package/lib/drama/manifest.json +284 -364
- package/lib/drama/package.json +4 -0
- package/lib/drama/skills/short-drama/SKILL.md +13 -14
- package/lib/drama/skills/short-drama/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama/references/audience-reveal.md +4 -4
- package/lib/drama/skills/short-drama/references/contract-and-ownership.md +2 -2
- package/lib/drama/skills/short-drama/references/creator-documents.md +12 -10
- package/lib/drama/skills/short-drama/references/creator-workflow.md +6 -5
- package/lib/drama/skills/short-drama/references/form-cards/Q/347/211/210/350/241/250/350/276/276.md +8 -8
- package/lib/drama/skills/short-drama/references/form-cards//344/272/214/347/273/264/345/212/250/346/200/201/346/274/253.md +5 -5
- package/lib/drama/skills/short-drama/references/form-cards//345/233/275/346/274/253/344/272/214/346/254/241/345/205/203.md +5 -6
- package/lib/drama/skills/short-drama/references/form-cards//345/256/236/346/213/215.md +6 -7
- package/lib/drama/skills/short-drama/references/form-cards//346/260/264/345/242/250/347/254/224/350/247/246.md +2 -3
- package/lib/drama/skills/short-drama/references/form-cards//351/243/216/346/240/274/345/214/226/344/270/211/347/273/264.md +6 -7
- package/lib/drama/skills/short-drama/references/knowhow-index.md +6 -7
- package/lib/drama/skills/short-drama/references/look-development.md +5 -7
- package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +6 -3
- package/lib/drama/skills/short-drama/references/production-form-profiles.md +14 -16
- package/lib/drama/skills/short-drama/references/reference-roles.md +5 -3
- package/lib/drama/skills/short-drama/references/runtime-preflight.md +2 -1
- package/lib/drama/skills/short-drama-assets/SKILL.md +8 -8
- package/lib/drama/skills/short-drama-assets/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +26 -27
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +22 -22
- package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +4 -4
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +4 -4
- package/lib/drama/skills/short-drama-assets/references/era-anchors.md +3 -3
- package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +5 -5
- package/lib/drama/skills/short-drama-assets/references/location-and-view.md +6 -7
- package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -9
- package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +8 -11
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +22 -22
- package/lib/drama/skills/short-drama-develop/SKILL.md +6 -6
- package/lib/drama/skills/short-drama-develop/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +2 -2
- package/lib/drama/skills/short-drama-develop/assets/story-engine.md +2 -2
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +13 -12
- package/lib/drama/skills/short-drama-develop/references/creative-reference-intake.md +7 -7
- package/lib/drama/skills/short-drama-develop/references/director-brief-craft.md +7 -8
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +20 -24
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +7 -7
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/272/262/345/255/220/351/232/220/347/247/230.md +4 -5
- package/lib/drama/skills/short-drama-develop/references/genre-cards//344/273/231/344/276/240/344/277/256/347/234/237.md +2 -2
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/212/250/344/275/234/344/273/273/345/212/241.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/217/244/350/243/205/346/235/203/350/260/213.md +2 -2
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//345/256/266/345/272/255/345/205/263/347/263/273.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//346/202/254/347/226/221/350/247/204/345/210/231.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/224/237/346/264/273/346/265/201.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//347/240/264/351/225/234/351/207/215/345/234/206.md +4 -5
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/261/252/351/227/250/345/251/232/346/201/213.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//350/272/253/344/273/275/351/224/231/344/275/215.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +1 -1
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +2 -2
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +4 -4
- package/lib/drama/skills/short-drama-develop/references/mechanism-loop.md +6 -7
- package/lib/drama/skills/short-drama-develop/references/multi-episode-intake.md +19 -17
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +5 -5
- package/lib/drama/skills/short-drama-develop/references/reveal-reversal-payoff.md +6 -5
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -4
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +7 -9
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +8 -10
- package/lib/drama/skills/short-drama-edit/SKILL.md +11 -14
- package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +12 -19
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +2 -2
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +5 -4
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +1 -1
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +6 -4
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +5 -5
- package/lib/drama/skills/short-drama-edit/references/still-cuts.md +1 -1
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +7 -2
- package/lib/drama/skills/short-drama-image-prompts/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +4 -5
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +17 -17
- package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +10 -9
- package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +11 -12
- package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +6 -5
- package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +2 -2
- package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +6 -6
- package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +8 -8
- package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +5 -4
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +17 -24
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +3 -4
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +5 -10
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +4 -6
- package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +9 -13
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +3 -7
- package/lib/drama/skills/short-drama-produce/SKILL.md +43 -42
- package/lib/drama/skills/short-drama-produce/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +31 -18
- package/lib/drama/skills/short-drama-produce/references/providers/gpt-image-2.md +1 -1
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +11 -6
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-music.md +2 -2
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +7 -5
- package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +14 -8
- package/lib/drama/skills/short-drama-review/SKILL.md +9 -9
- package/lib/drama/skills/short-drama-review/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -11
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +24 -23
- package/lib/drama/skills/short-drama-review/references/project-calibration.md +17 -16
- package/lib/drama/skills/short-drama-review/references/review-method.md +8 -6
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +7 -6
- package/lib/drama/skills/short-drama-review/references/rubric-source-analysis.md +17 -10
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +29 -25
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +11 -11
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -2
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +8 -10
- package/lib/drama/skills/short-drama-storyboard/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +8 -11
- package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +11 -12
- package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +4 -5
- package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +19 -24
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +26 -29
- package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +6 -5
- package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +2 -2
- package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +4 -4
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -8
- package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +3 -3
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +10 -7
- package/lib/drama/skills/short-drama-video-prompts/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +63 -61
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +20 -18
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +12 -12
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +4 -3
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +38 -40
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +36 -36
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +17 -21
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +10 -11
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +1 -1
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +2 -2
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +6 -12
- package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +2 -1
- package/lib/drama/skills/short-drama-write/SKILL.md +15 -15
- package/lib/drama/skills/short-drama-write/agents/openai.yaml +1 -1
- package/lib/drama/skills/short-drama-write/assets/screenplay.md +3 -4
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +20 -22
- package/lib/drama/skills/short-drama-write/references/production-format-dialect.md +20 -22
- package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +10 -10
- package/lib/drama/skills/short-drama-write/references/scene-sound-dramaturgy.md +11 -9
- package/lib/drama/skills/short-drama-write/references/screenplay-format.md +11 -10
- package/lib/drama/skills/short-drama-write/references/script-craft.md +41 -47
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +7 -5
- package/lib/drama/skills/short-drama-write/references/substitutable-realization.md +19 -25
- package/lib/index.js +120 -31
- package/lib/index.js.map +3 -3
- package/lib/novel-to-game/README.md +10 -11
- package/lib/novel-to-game/README_ZH.md +14 -15
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/manifest.json +34 -29
- package/lib/novel-to-game/package.json +4 -0
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +2 -2
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +4 -0
- package/lib/novel-to-game/skills/game-build/SKILL.md +9 -1
- package/lib/novel-to-game/skills/game-build/references/baked-sprite-workflow.md +19 -0
- package/lib/novel-to-game/skills/game-concept/SKILL.md +1 -1
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +4 -1
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +1 -1
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +1 -1
- package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +1 -1
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +6 -3
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +13 -2
- package/lib/oh-story/manifest.json +628 -803
- package/lib/oh-story/package.json +4 -0
- package/lib/oh-story/roles/chapter-extractor.md +13 -12
- package/lib/oh-story/roles/character-designer.md +20 -101
- package/lib/oh-story/roles/consistency-checker.md +7 -9
- package/lib/oh-story/roles/narrative-writer.md +22 -22
- package/lib/oh-story/roles/story-architect.md +22 -32
- package/lib/oh-story/roles/story-explorer.md +11 -14
- package/lib/oh-story/roles/story-researcher.md +13 -14
- package/lib/oh-story/skills/browser-cdp/SKILL.md +38 -26
- package/lib/oh-story/skills/story/SKILL.md +98 -63
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story-cover/SKILL.md +46 -234
- package/lib/oh-story/skills/story-cover/references/api-fallback.md +128 -0
- package/lib/oh-story/skills/story-cover/references/cover-styles.md +61 -93
- package/lib/oh-story/skills/story-deslop/SKILL.md +75 -212
- package/lib/oh-story/skills/story-deslop/references/agent-calls.md +17 -3
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +61 -151
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +23 -160
- package/lib/oh-story/skills/story-deslop/references/expression.md +83 -0
- package/lib/oh-story/skills/story-deslop/references/narrative-focus.md +63 -0
- package/lib/oh-story/skills/story-deslop/references/story-logic.md +65 -0
- package/lib/oh-story/skills/story-deslop/references/style-resolution.md +5 -5
- package/lib/oh-story/skills/story-import/SKILL.md +18 -22
- package/lib/oh-story/skills/story-import/references/benchmark-sync.md +50 -0
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +9 -9
- package/lib/oh-story/skills/story-import/references/deep-analysis.md +7 -8
- package/lib/oh-story/skills/story-import/references/import-report.md +9 -8
- package/lib/oh-story/skills/story-import/references/import-special-cases.md +7 -17
- package/lib/oh-story/skills/story-import/references/import-tracking.md +6 -6
- package/lib/oh-story/skills/story-import/references/length-routing.md +10 -60
- package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +10 -10
- package/lib/oh-story/skills/story-import/references/outline-reverse.md +3 -3
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +120 -132
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +77 -92
- package/lib/oh-story/skills/story-import/references/tracking-initialization.md +2 -2
- package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +36 -59
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +5 -1
- package/lib/oh-story/skills/story-import/scripts/outline_view.py +286 -0
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +41 -78
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +28 -30
- package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +9 -17
- package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +9 -3
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +23 -10
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +13 -20
- package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +28 -29
- package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +74 -162
- package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +124 -309
- package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +49 -164
- package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +12 -13
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +114 -35
- package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +16 -6
- package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +3 -1
- package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +5 -1
- package/lib/oh-story/skills/story-long-scan/SKILL.md +54 -82
- package/lib/oh-story/skills/story-long-scan/references/genre-trends.md +47 -181
- package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +24 -7
- package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +24 -22
- package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +25 -13
- package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +41 -27
- package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +26 -16
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +31 -34
- package/lib/oh-story/skills/story-long-write/SKILL.md +12 -13
- package/lib/oh-story/skills/story-long-write/references/agent-calls.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +53 -26
- package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +9 -7
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +6 -6
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +61 -151
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/character-basics.md +57 -95
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +120 -270
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +26 -29
- package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +9 -9
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +38 -298
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +33 -73
- package/lib/oh-story/skills/story-long-write/references/female-audience-writing.md +42 -89
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/271/264/344/273/243.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//345/277/253/347/251/277.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +7 -7
- package/lib/oh-story/skills/story-long-write/references/genre-readers.md +99 -172
- package/lib/oh-story/skills/story-long-write/references/long-chapter-hooks.md +40 -120
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +39 -91
- package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +82 -311
- package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +115 -326
- package/lib/oh-story/skills/story-long-write/references/long-reversal.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/long-suspense.md +11 -13
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +38 -334
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +128 -281
- package/lib/oh-story/skills/story-long-write/references/plot-core-methods.md +58 -499
- package/lib/oh-story/skills/story-long-write/references/project-files.md +12 -16
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +29 -84
- package/lib/oh-story/skills/story-long-write/references/revision-diagnosis.md +31 -0
- package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +15 -22
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +4 -172
- package/lib/oh-story/skills/story-long-write/references/style-resolution.md +5 -5
- package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +10 -8
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +47 -47
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +10 -10
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +5 -10
- package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +72 -98
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +77 -132
- package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +38 -18
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +23 -11
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +5 -1
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +1 -1
- package/lib/oh-story/skills/story-review/SKILL.md +41 -54
- package/lib/oh-story/skills/story-review/references/agent-prompts.md +20 -18
- package/lib/oh-story/skills/story-review/references/banned-words.md +61 -151
- package/lib/oh-story/skills/story-review/references/batch-review.md +4 -4
- package/lib/oh-story/skills/story-review/references/expression.md +83 -0
- package/lib/oh-story/skills/story-review/references/narrative-focus.md +63 -0
- package/lib/oh-story/skills/story-review/references/quality-rubric.md +11 -11
- package/lib/oh-story/skills/story-review/references/review-tracking.md +6 -5
- package/lib/oh-story/skills/story-review/references/rubrics/fanqie.md +10 -10
- package/lib/oh-story/skills/story-review/references/rubrics/qidian.md +10 -11
- package/lib/oh-story/skills/story-review/references/rubrics/zhihu.md +12 -12
- package/lib/oh-story/skills/story-review/references/solo.md +8 -7
- package/lib/oh-story/skills/story-review/references/story-logic.md +65 -0
- package/lib/oh-story/skills/story-review/references/style-resolution.md +5 -5
- package/lib/oh-story/skills/story-review/references/tracking-initialization.md +2 -2
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +2 -2
- package/lib/oh-story/skills/story-setup/SKILL.md +29 -36
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +14 -16
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +61 -151
- package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +10 -10
- package/lib/oh-story/skills/story-setup/references/agent-references/character-basics.md +57 -95
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +120 -270
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +23 -160
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +26 -29
- package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +9 -9
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +38 -298
- package/lib/oh-story/skills/story-setup/references/agent-references/expression.md +83 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/female-audience-writing.md +141 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +11 -11
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/271/264/344/273/243.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//345/277/253/347/251/277.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +7 -7
- package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +99 -172
- package/lib/oh-story/skills/story-setup/references/agent-references/long-chapter-hooks.md +40 -120
- package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +34 -74
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +82 -311
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +115 -326
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/long-reversal.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/long-suspense.md +11 -13
- package/lib/oh-story/skills/story-setup/references/agent-references/narrative-focus.md +63 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +38 -334
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +128 -281
- package/lib/oh-story/skills/story-setup/references/agent-references/plot-core-methods.md +58 -499
- package/lib/oh-story/skills/story-setup/references/agent-references/short-chapter-hooks.md +64 -192
- package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +15 -69
- package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +46 -58
- package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +6 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +23 -48
- package/lib/oh-story/skills/story-setup/references/agent-references/story-logic.md +65 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +15 -22
- package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +4 -172
- package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +5 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +77 -132
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +44 -103
- package/lib/oh-story/skills/story-short-analyze/references/analysis-characters.md +66 -0
- package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +7 -7
- package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +1 -3
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +22 -21
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +7 -6
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +6 -6
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +2 -2
- package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +6 -6
- package/lib/oh-story/skills/story-short-analyze/references/analysis-submission.md +52 -0
- package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +23 -73
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +38 -50
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +20 -38
- package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +24 -175
- package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +53 -38
- package/lib/oh-story/skills/story-short-analyze/references/stage4-6-reversal-summary.md +54 -83
- package/lib/oh-story/skills/story-short-scan/SKILL.md +56 -73
- package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +16 -12
- package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +10 -4
- package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +15 -6
- package/lib/oh-story/skills/story-short-scan/references/real-market-data.md +36 -75
- package/lib/oh-story/skills/story-short-scan/references/topic-match.md +35 -15
- package/lib/oh-story/skills/story-short-write/SKILL.md +23 -26
- package/lib/oh-story/skills/story-short-write/references/agent-calls.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +9 -7
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +6 -6
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +61 -151
- package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +17 -22
- package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +22 -37
- package/lib/oh-story/skills/story-short-write/references/deslop-gates.md +34 -0
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +26 -29
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +15 -69
- package/lib/oh-story/skills/story-short-write/references/expression.md +83 -0
- package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +12 -12
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +21 -21
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +17 -17
- package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +17 -17
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +19 -19
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +16 -16
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +17 -16
- package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +17 -17
- package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +11 -11
- 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 +22 -22
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +46 -58
- package/lib/oh-story/skills/story-short-write/references/hooks-chapter.md +64 -192
- package/lib/oh-story/skills/story-short-write/references/narrative-focus.md +63 -0
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +14 -16
- package/lib/oh-story/skills/story-short-write/references/scene-craft.md +8 -7
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +22 -43
- package/lib/oh-story/skills/story-short-write/references/short-deslop.md +12 -125
- package/lib/oh-story/skills/story-short-write/references/short-format.md +19 -43
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +23 -48
- package/lib/oh-story/skills/story-short-write/references/story-logic.md +65 -0
- package/lib/oh-story/skills/story-short-write/references/style-resolution.md +5 -5
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +29 -19
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +23 -30
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +69 -26
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +19 -20
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +52 -70
- package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +21 -16
- package/lib/types/client/file-activity.d.ts +10 -0
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/native-hooks.d.ts.map +1 -1
- package/lib/types/role-tool.d.ts +42 -2
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +8 -0
- package/lib/video-recap/README.en.md +8 -10
- package/lib/video-recap/README.md +8 -8
- package/lib/video-recap/manifest.json +48 -48
- package/lib/video-recap/package.json +4 -0
- package/lib/video-recap/skills/video-assemble/SKILL.md +5 -8
- package/lib/video-recap/skills/video-assemble/references/audio-modes.md +3 -3
- package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +1 -2
- package/lib/video-recap/skills/video-assemble/references/packaging.md +1 -2
- package/lib/video-recap/skills/video-assemble/references/source-score.md +5 -6
- package/lib/video-recap/skills/video-cut/SKILL.md +3 -7
- package/lib/video-recap/skills/video-cut/references/shot-review.md +1 -1
- package/lib/video-recap/skills/video-recap/SKILL.md +7 -11
- package/lib/video-recap/skills/video-recap/references/audio-routing.md +1 -2
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +5 -7
- package/lib/video-recap/skills/video-recap/references/data-schema.md +8 -8
- package/lib/video-recap/skills/video-recap/references/resource-library.md +2 -2
- package/lib/video-recap/skills/video-reference/SKILL.md +4 -8
- package/lib/video-recap/skills/video-reference/references/reference-schema.md +1 -1
- package/lib/video-recap/skills/video-script/SKILL.md +4 -13
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +2 -2
- package/lib/video-recap/skills/video-understanding/SKILL.md +10 -6
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +2 -2
- package/lib/video-recap/skills/video-voiceover/SKILL.md +3 -11
- package/lib/video-recap/skills/video-voiceover/references/index-tts.md +1 -2
- package/package.json +25 -24
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompt-spec.jsonl.md +0 -187
- package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +0 -42
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-frame-spec.jsonl.md +0 -128
- package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +0 -34
- package/lib/drama/skills/short-drama-storyboard/assets/coverage-template.json +0 -49
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +0 -36
- package/lib/drama/skills/short-drama-storyboard/assets/keyframe-template.jsonl +0 -2
- package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +0 -2
- package/lib/drama/skills/short-drama-video-prompts/assets/delivery-container.jsonl.md +0 -101
- package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +0 -217
- package/lib/drama/skills/short-drama-video-prompts/assets/music-spec.jsonl.md +0 -31
- package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +0 -67
- package/lib/drama/skills/short-drama-write/assets/beats.jsonl +0 -2
- package/lib/drama/skills/short-drama-write/assets/episode-card-standalone.json +0 -120
- package/lib/drama/skills/short-drama-write/assets/episode-card.json +0 -55
- package/lib/drama/skills/short-drama-write/assets/voice-record-sheet.jsonl.md +0 -89
- package/lib/oh-story/skills/story/references/author-memory-maintenance.md +0 -75
- package/lib/oh-story/skills/story/references/author-memory.md +0 -117
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +0 -1638
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +0 -556
- package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +0 -75
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +0 -117
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +0 -1638
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +0 -168
- package/lib/oh-story/skills/story-import/references/state-tracking.md +0 -43
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +0 -146
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +0 -270
- package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +0 -84
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +0 -133
- package/lib/oh-story/skills/story-long-scan/references/publishing-guide.md +0 -114
- package/lib/oh-story/skills/story-long-scan/references/reader-profiling.md +0 -105
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +0 -556
- package/lib/oh-story/skills/story-long-write/references/character-design-methods.md +0 -428
- package/lib/oh-story/skills/story-long-write/references/commercial-core-methods.md +0 -502
- package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +0 -171
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +0 -457
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +0 -389
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +0 -273
- package/lib/oh-story/skills/story-long-write/references/plot-emotion-system.md +0 -354
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +0 -711
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +0 -622
- package/lib/oh-story/skills/story-long-write/references/style-craft.md +0 -327
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +0 -556
- package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +0 -75
- package/lib/oh-story/skills/story-review/references/author-memory.md +0 -117
- package/lib/oh-story/skills/story-review/references/character-relations.md +0 -433
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +0 -288
- package/lib/oh-story/skills/story-review/references/plot-core-methods.md +0 -522
- package/lib/oh-story/skills/story-review/references/review-quality.md +0 -246
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +0 -1638
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +0 -556
- package/lib/oh-story/skills/story-setup/references/agent-references/character-design-methods.md +0 -428
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +0 -457
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +0 -389
- package/lib/oh-story/skills/story-setup/references/agent-references/short-paragraph-hooks.md +0 -146
- package/lib/oh-story/skills/story-setup/references/agent-references/short-suspense.md +0 -352
- package/lib/oh-story/skills/story-short-analyze/references/analysis-character-basics.md +0 -453
- package/lib/oh-story/skills/story-short-analyze/references/analysis-character-design.md +0 -438
- package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +0 -395
- package/lib/oh-story/skills/story-short-analyze/references/analysis-paragraph-hooks.md +0 -146
- package/lib/oh-story/skills/story-short-analyze/references/analysis-reader-profile.md +0 -245
- package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +0 -477
- package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +0 -79
- package/lib/oh-story/skills/story-short-analyze/references/real-market-data.md +0 -90
- package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +0 -54
- package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +0 -490
- package/lib/oh-story/skills/story-short-write/references/hooks-paragraph.md +0 -146
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +0 -127
- package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +0 -224
- package/lib/oh-story/skills/story-short-write/references/short-suspense.md +0 -352
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +0 -50
|
@@ -6,272 +6,90 @@ metadata: {"openclaw":{"requires":{"env":["GPT_IMAGE_API_KEY"],"bins":["curl","j
|
|
|
6
6
|
---
|
|
7
7
|
# story-cover:小说封面生成
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
**核心原则:封面是读者的第一印象,一眼传达题材和氛围。**
|
|
9
|
+
根据书名和题材生成包含书名、笔名的完整封面,让读者一眼看出题材和氛围。
|
|
12
10
|
|
|
13
11
|
---
|
|
14
12
|
|
|
15
13
|
## 生成通路
|
|
16
14
|
|
|
17
|
-
- **Codex 内置(优先)**:当前 Codex CLI 会话可调用 `$imagegen` / `image_gen`
|
|
18
|
-
- **API 回退**:仅在会话没有内置工具或用户明确指定 API 时使用,需要 `GPT_IMAGE_API_KEY
|
|
19
|
-
|
|
20
|
-
## 输出参数与 API 回退环境变量
|
|
21
|
-
|
|
22
|
-
| 变量 | 必填 | 默认 | 说明 |
|
|
23
|
-
|:-----|:----:|:-----|:-----|
|
|
24
|
-
| `GPT_IMAGE_API_KEY` | API 回退必填 | — | OpenAI 或兼容代理的 API Key;Codex 内置通路不用 |
|
|
25
|
-
| `GPT_IMAGE_BASE_URL` | | `https://api.openai.com/v1` | 兼容代理时改这个 |
|
|
26
|
-
| `GPT_IMAGE_MODEL` | | `gpt-image-2` | 仅在测试新模型时覆盖 |
|
|
27
|
-
| `GPT_IMAGE_SIZE` | | `1024x1536` | API 回退的目标比例提示(番茄 3:4→`768x1024`,默认 2:3→`1024x1536`)。官方 gpt-image-2 认任意 16 倍数尺寸(比例≤3:1),但**很多中转代理会忽略 size、按预设返回约 2:3**(已实测)——平台尺寸不靠它,由「导出平台上传尺寸」步骤兜底 |
|
|
28
|
-
| `UPLOAD_SIZE` | | — | 平台固定上传像素(番茄 `600x800`);设置后由「导出平台上传尺寸」步骤居中裁剪+缩放出上传版(不变形、不依赖出图尺寸) |
|
|
29
|
-
| `BOOK_DIR` | ✅ | — | 输出目录,建议 `./covers/<书名>` |
|
|
30
|
-
| `REF_IMAGE` | | — | 参考图本地路径或 URL;内置通路先把图片载入会话,API 回退走 `images/edits` 图生图 |
|
|
31
|
-
|
|
32
|
-
---
|
|
15
|
+
- **Codex 内置(优先)**:当前 Codex CLI 会话可调用 `$imagegen` / `image_gen` 时,直接调用工具生成并保存,无需 `OPENAI_API_KEY` 或 `GPT_IMAGE_API_KEY`,不运行 `curl`。
|
|
16
|
+
- **API 回退**:仅在会话没有内置工具或用户明确指定 API 时使用,需要 `GPT_IMAGE_API_KEY`;环境变量和命令在 [references/api-fallback.md](references/api-fallback.md),走这条通路时再读。工具缺失不等于 Codex 订阅不支持生图;内置调用失败时先报告错误,不静默切换到可能收费的 API。
|
|
33
17
|
|
|
34
18
|
## 生成流程
|
|
35
19
|
|
|
36
20
|
### Step 1:收集信息
|
|
37
21
|
|
|
38
|
-
|
|
39
|
-
选填:参考图 `REF_IMAGE`(本地路径或 URL,设置后切换到图生图)、风格偏好、尺寸
|
|
40
|
-
|
|
41
|
-
> **书名和笔名是封面必需信息**:缺任一必须先用 AskUserQuestion 问用户补全,不得编造或留空。
|
|
22
|
+
先找当前书:项目根 `.active-book` 指向项目内现有目录时就是当前书;否则从项目根往下最多 4 层找(跳过 `.` 开头的目录、`node_modules`、`拆文库/`、`对标/`),含 `追踪/`、`正文/`、`设定/` 子目录或 `正文.md`、`设定.md` 文件的是书目录,找到多本时请作者选择。有 `正文/` 或 `设定/` 子目录的是长篇,有 `正文.md` 或 `设定.md` 的是短篇。找到后读:
|
|
42
23
|
|
|
43
|
-
|
|
24
|
+
- 长篇:`设定/题材定位.md`「基本信息」的书名、题材类型、目标平台、核心梗;
|
|
25
|
+
- 短篇:`设定.md`「基本信息」的标题、目标平台、目标情绪,以及「一句话梗概」「题材招式」。
|
|
44
26
|
|
|
45
|
-
|
|
46
|
-
|:-----|:--------|:-----|:-------------------|
|
|
47
|
-
| 番茄小说 | 600×800 | 3:4 | `768x1024` |
|
|
48
|
-
| 其他平台(默认竖版) | 按平台规格 | 2:3 | `1024x1536` |
|
|
27
|
+
已有字段不再问;笔名不在这些文件里,每次都要问。没有书目录或缺项时,用宿主可用的提问方式一次问齐:书名、笔名、目标平台。
|
|
49
28
|
|
|
50
|
-
|
|
29
|
+
> **书名和笔名是封面必需信息**:缺任一时先请作者补全,不得编造或留空。
|
|
51
30
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
扫描书名(必要时简介)中的关键词,对照 [references/cover-styles.md](references/cover-styles.md) 的「题材推断规则」表选定题材。
|
|
55
|
-
|
|
56
|
-
- 单题材命中 → 直接采用
|
|
57
|
-
- 多题材命中 → 按优先级取一:仙侠 > 西幻 > 古言 > 现言 > 都市 > 悬疑 > 科幻 > 历史 > 灵异 > 轻小说
|
|
58
|
-
- 零命中 → 默认 `都市`
|
|
59
|
-
|
|
60
|
-
### Step 3:构建提示词
|
|
31
|
+
选填:参考图 `REF_IMAGE`(本地路径或 URL)、风格偏好;参考图的用法见 Step 4。
|
|
61
32
|
|
|
62
|
-
|
|
33
|
+
**保存位置**:有书目录时存到 `{书目录}/封面/`,不用问;没有书目录时用 `./covers/{书名}/封面/`。下文 `BOOK_DIR` 指 `封面/` 的上一层。
|
|
63
34
|
|
|
64
|
-
|
|
35
|
+
**按目标平台定比例和上传尺寸**:番茄上传 600×800,比例 **3:4**,出图比例不符时平台再次裁剪可能切掉书名或笔名;其他平台按竖版 2:3 交付,作者给出平台上传像素时按该尺寸导出。各平台的画风关键词见 [references/cover-styles.md](references/cover-styles.md)「平台风格」。
|
|
65
36
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
Title text '书名' at top center in [书名字体风格].
|
|
70
|
-
Author name '作者名' at bottom center in [作者名字体风格].
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
#### 书名字体风格
|
|
74
|
-
|
|
75
|
-
| 题材 | 描述关键词 |
|
|
76
|
-
|:-----|:-----------|
|
|
77
|
-
| 玄幻/仙侠 | `bold golden brush calligraphy with metallic glow and sharp strokes` |
|
|
78
|
-
| 都市 | `modern bold sans-serif with metallic silver finish` |
|
|
79
|
-
| 古言/宫斗 | `elegant golden traditional Kai script with ornate decoration` |
|
|
80
|
-
| 现言/甜宠 | `soft rounded handwritten style in white with pink glow` |
|
|
81
|
-
| 悬疑/推理 | `distorted bold cracked letters in blood red` |
|
|
82
|
-
| 科幻/末世 | `neon glowing futuristic font in electric blue` |
|
|
83
|
-
| 西幻 | `metallic embossed fantasy lettering with glow effect` |
|
|
84
|
-
| 历史/军事 | `heavy stone-carved seal script in deep red` |
|
|
85
|
-
| 灵异/恐怖 | `eerie dripping handwritten font in sickly green` |
|
|
86
|
-
| 轻小说 | `colorful cartoon outlined bubbly font` |
|
|
87
|
-
|
|
88
|
-
#### 作者名字体风格(重点:作者名必须精心设计,不能只是"小字")
|
|
89
|
-
|
|
90
|
-
作者名虽小,但是封面专业感的关键。必须指定:**字体 + 颜色 + 装饰元素**,让作者名与书名风格呼应但不抢焦点。
|
|
37
|
+
### Step 2:题材判定
|
|
91
38
|
|
|
92
|
-
|
|
93
|
-
|:-----|:----------------|
|
|
94
|
-
| 玄幻/仙侠 | `small refined white serif text with faint golden glow, flanked by delicate cloud-scroll ornaments on both sides, resting on a thin horizontal gold line` |
|
|
95
|
-
| 都市 | `small clean white modern text with subtle drop shadow, positioned above a thin silver horizontal divider line` |
|
|
96
|
-
| 古言/宫斗 | `small elegant dark red traditional text inside a thin golden rectangular border frame with corner decorations` |
|
|
97
|
-
| 现言/甜宠 | `small soft pink-white handwritten text with a tiny heart motif on the left side, light sparkle effect` |
|
|
98
|
-
| 悬疑/推理 | `small pale grey text with slight blur effect, almost hidden in the shadows, a thin cracked line underneath` |
|
|
99
|
-
| 科幻/末世 | `small crisp white monospace text with subtle cyan scanline overlay, flanked by small geometric brackets` |
|
|
100
|
-
| 西幻 | `small bronze medieval script text with aged parchment texture, enclosed in a small decorative shield or banner shape` |
|
|
101
|
-
| 历史/军事 | `small dignified white Song typeface text above a double horizontal line in dark red` |
|
|
102
|
-
| 灵异/恐怖 | `small faded grey-green text slightly tilted, with a thin dripping ink line above` |
|
|
103
|
-
| 轻小说 | `small playful rounded white text with pastel color outline, tiny star decorations on both sides` |
|
|
39
|
+
在 [references/cover-styles.md](references/cover-styles.md) 的「风格库」里选一个题材:
|
|
104
40
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- 必须有装饰元素:线条/边框/小图标/光效中至少一种
|
|
109
|
-
- 颜色与背景形成对比但不刺眼
|
|
41
|
+
1. 有「题材类型」(长篇)或梗概、题材招式(短篇)时,按内容选风格库中最接近的一节。
|
|
42
|
+
2. 没有,或对不上风格库任何一节(如年代、种田、无限流、电竞)时,用书名(必要时简介)对照「题材推断规则」:只命中一个题材就用它;命中多个按该表下方的优先级取一;都没命中先用「都市」。
|
|
43
|
+
3. 第 2 条推断出的题材,在 Step 4 给作者看方案时一并说出来,作者可以改。
|
|
110
44
|
|
|
111
|
-
|
|
45
|
+
### Step 3:构建提示词
|
|
112
46
|
|
|
113
|
-
|
|
47
|
+
提示词 = **文字层** + **风格层** + **画面层**。设计指令用英文,书名和笔名保留作者提供的原文。所选题材的字体、标签、色彩、人物、背景、光效都在「风格库」同一节里查。
|
|
114
48
|
|
|
115
|
-
|
|
49
|
+
**文字层**:GPT-Image-2 可直接渲染中文。书名在上方居中,用该题材的书名字体;笔名在下方居中,用该题材的笔名字体。笔名要和书名风格呼应、清晰可读而不抢焦点:
|
|
116
50
|
|
|
117
|
-
|
|
51
|
+
- 大小用 `small`;位置 `at bottom center`,与画面底部留出间距;
|
|
52
|
+
- 必须带一种装饰:线条、边框、小图标或光效;
|
|
53
|
+
- 颜色与背景形成对比但不刺眼。
|
|
118
54
|
|
|
119
|
-
|
|
55
|
+
**风格层**:目标平台在「平台风格」表里有对应时,取它的关键词串;没有对应(如黑岩、红果、小程序)时省掉这一层,只靠题材风格。
|
|
120
56
|
|
|
121
|
-
|
|
122
|
-
|:-----|:-----|:---------|
|
|
123
|
-
| A | 人物特写 + 场景 | 全题材通用 |
|
|
124
|
-
| B | 全身像 + 动态姿势 | 玄幻、都市、西幻 |
|
|
125
|
-
| C | 纯场景/氛围图 | 悬疑、科幻、历史 |
|
|
57
|
+
**画面层**:题材的风格标签、人物、背景、色彩、光效,加上一种构图(见「构图变体」)。
|
|
126
58
|
|
|
127
|
-
|
|
59
|
+
完整提示词模板(唯一一份,示例和改版都按它拼):
|
|
128
60
|
|
|
129
61
|
```
|
|
130
62
|
Chinese web novel cover design, [平台风格].
|
|
131
|
-
Title text '{书名}' at top center in [
|
|
132
|
-
Author name '{
|
|
133
|
-
[题材风格标签]. [人物描述]. [背景描述].
|
|
63
|
+
Title text '{书名}' at top center in [书名字体].
|
|
64
|
+
Author name '{笔名}' at bottom center in [笔名字体].
|
|
65
|
+
[题材风格标签]. [构图关键词]. [人物描述]. [背景描述].
|
|
134
66
|
[色彩指令]. [光效指令].
|
|
135
67
|
Professional book cover, high detail digital painting, portrait [平台比例:番茄=3:4,默认=2:3] ratio, keep title and author name inside the central safe area away from edges (inner ~85%), no watermark
|
|
136
68
|
```
|
|
137
69
|
|
|
138
|
-
|
|
70
|
+
写法要点:
|
|
71
|
+
- 人物描述写清服饰、姿态、发型、表情、道具,不要只写 `a man`;
|
|
72
|
+
- 背景分三层:前景人物或道具,中景场景,远景氛围;
|
|
73
|
+
- 光效写清光源方向和颜色,如 `dramatic golden light from above`;
|
|
74
|
+
- 用 `digital painting style`,不用 `photo`,避免真人照片感。
|
|
139
75
|
|
|
140
|
-
|
|
141
|
-
- 背景分层:前景(人物)→ 中景(场景)→ 远景(氛围)
|
|
142
|
-
- 光效是指定光源方向 + 颜色(如 `dramatic golden light from above`)
|
|
143
|
-
- 用 `digital painting style` 而非 `photo`,避免真人照片感
|
|
76
|
+
### Step 4:选方案并生成
|
|
144
77
|
|
|
145
|
-
|
|
78
|
+
先从「构图变体」里挑 2-3 种适合本题材的构图,每种用一句话描述画面(构图、主色、书名字体),连同 Step 2 定的题材一起给作者挑。作者选定后只生成那一张;作者说「都出」时每个方案单独生成一次。
|
|
146
79
|
|
|
147
80
|
#### Codex 内置 ImageGen(优先)
|
|
148
81
|
|
|
149
82
|
1. 用 Step 3 的完整提示词调用 `image_gen`。比例和安全区写进提示词,不传 `GPT_IMAGE_MODEL`、`GPT_IMAGE_SIZE`、`response_format` 等 API 参数。
|
|
150
83
|
2. 有 `REF_IMAGE` 时,本地文件先用图片查看工具载入会话;URL 先下载再载入。说明它是编辑目标还是风格参考,并列出必须保持的内容。
|
|
151
|
-
3.
|
|
84
|
+
3. 先创建 `BOOK_DIR/封面/`,再把工具返回的图片复制为 `封面_vN.png`,`N` 自增且不覆盖旧版;保留 `$CODEX_HOME/generated_images/` 原文件,同时保存同名 `.prompt.txt`,有参考图再保存 `.ref.txt`。确认图片可读,并把原图绝对路径交给 Step 5。
|
|
152
85
|
|
|
153
86
|
#### API 回退
|
|
154
87
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
两种调用方式二选一:未设置 `REF_IMAGE` → 走「文生图」;设置了 → 走「图生图」。
|
|
158
|
-
|
|
159
|
-
#### 文生图(默认)
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
set -euo pipefail
|
|
163
|
-
: "${GPT_IMAGE_API_KEY:?请设置 export GPT_IMAGE_API_KEY=你的key}"
|
|
164
|
-
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}"
|
|
165
|
-
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}"
|
|
166
|
-
MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}"
|
|
167
|
-
SIZE="${GPT_IMAGE_SIZE:-1024x1536}"
|
|
168
|
-
BOOK_DIR="${BOOK_DIR:?请先 export BOOK_DIR=./covers/<书名>}"
|
|
169
|
-
|
|
170
|
-
mkdir -p "$BOOK_DIR/封面"
|
|
171
|
-
|
|
172
|
-
# 自增版本号,避免覆盖之前生成的封面
|
|
173
|
-
i=1
|
|
174
|
-
while [ -f "$BOOK_DIR/封面/封面_v${i}.png" ]; do i=$((i+1)); done
|
|
175
|
-
OUT="$BOOK_DIR/封面/封面_v${i}.png"
|
|
176
|
-
RESP=$(mktemp)
|
|
177
|
-
trap 'rm -f "$RESP"' EXIT
|
|
178
|
-
|
|
179
|
-
# 用 jq 拼 JSON 体,避免 PROMPT 里的引号/换行/中文把 shell 字符串撑破
|
|
180
|
-
BODY=$(jq -n \
|
|
181
|
-
--arg m "$MODEL" \
|
|
182
|
-
--arg p "$PROMPT" \
|
|
183
|
-
--arg s "$SIZE" \
|
|
184
|
-
'{model:$m, prompt:$p, size:$s}')
|
|
185
|
-
|
|
186
|
-
curl -fsS --max-time 180 --retry 2 --retry-delay 5 \
|
|
187
|
-
"$BASE_URL/images/generations" \
|
|
188
|
-
-H "Authorization: Bearer $GPT_IMAGE_API_KEY" \
|
|
189
|
-
-H "Content-Type: application/json" \
|
|
190
|
-
-d "$BODY" > "$RESP"
|
|
191
|
-
|
|
192
|
-
# API 出错时早退,避免把 error JSON 当成 base64 写成损坏 PNG
|
|
193
|
-
if jq -e '.error' "$RESP" >/dev/null 2>&1; then
|
|
194
|
-
echo "API error:" >&2
|
|
195
|
-
jq '.error' "$RESP" >&2
|
|
196
|
-
exit 1
|
|
197
|
-
fi
|
|
198
|
-
|
|
199
|
-
# `// empty` 让缺失字段输出空串而非 "null",配合下面的 -s 检查避免写出 3 字节假 PNG
|
|
200
|
-
jq -er '.data[0].b64_json // empty' "$RESP" | base64 --decode > "$OUT"
|
|
201
|
-
[ -s "$OUT" ] || { echo "empty or malformed output: $OUT" >&2; head -c 300 "$RESP" >&2; exit 1; }
|
|
202
|
-
|
|
203
|
-
# 落地提示词副本,方便迭代时基于上一次微调
|
|
204
|
-
printf '%s\n' "$PROMPT" > "${OUT%.png}.prompt.txt"
|
|
205
|
-
|
|
206
|
-
file "$OUT"
|
|
207
|
-
ls -lt "$BOOK_DIR/封面/"
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
#### 图生图(提供参考图时)
|
|
211
|
-
|
|
212
|
-
`/v1/images/edits` 走 `multipart/form-data`,**不能** 用 `Content-Type: application/json`。文本字段用 `--form-string`(避免 `@` 被误判为文件引用),图片字段用 `-F image=@path`。
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
set -euo pipefail
|
|
216
|
-
: "${GPT_IMAGE_API_KEY:?请设置 export GPT_IMAGE_API_KEY=你的key}"
|
|
217
|
-
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}"
|
|
218
|
-
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}"
|
|
219
|
-
MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}"
|
|
220
|
-
SIZE="${GPT_IMAGE_SIZE:-1024x1536}"
|
|
221
|
-
BOOK_DIR="${BOOK_DIR:?请先 export BOOK_DIR=./covers/<书名>}"
|
|
222
|
-
REF_IMAGE="${REF_IMAGE:?请先 export REF_IMAGE=本地路径或 URL}"
|
|
223
|
-
|
|
224
|
-
mkdir -p "$BOOK_DIR/封面"
|
|
225
|
-
|
|
226
|
-
# 自增版本号
|
|
227
|
-
i=1
|
|
228
|
-
while [ -f "$BOOK_DIR/封面/封面_v${i}.png" ]; do i=$((i+1)); done
|
|
229
|
-
OUT="$BOOK_DIR/封面/封面_v${i}.png"
|
|
230
|
-
RESP=$(mktemp)
|
|
231
|
-
REF_TMP=""
|
|
232
|
-
trap '[ -n "$REF_TMP" ] && rm -f "$REF_TMP"; rm -f "$RESP"' EXIT
|
|
233
|
-
|
|
234
|
-
# URL 先下载到临时文件,本地路径直接用。用裸 mktemp 以保证 macOS/Linux 行为一致。
|
|
235
|
-
case "$REF_IMAGE" in
|
|
236
|
-
http://*|https://*)
|
|
237
|
-
REF_TMP=$(mktemp)
|
|
238
|
-
curl -fsSL --max-time 60 -o "$REF_TMP" "$REF_IMAGE"
|
|
239
|
-
REF_LOCAL="$REF_TMP"
|
|
240
|
-
;;
|
|
241
|
-
*)
|
|
242
|
-
[ -f "$REF_IMAGE" ] || { echo "参考图不存在: $REF_IMAGE" >&2; exit 1; }
|
|
243
|
-
REF_LOCAL="$REF_IMAGE"
|
|
244
|
-
;;
|
|
245
|
-
esac
|
|
246
|
-
|
|
247
|
-
curl -fsS --max-time 240 --retry 2 --retry-delay 5 \
|
|
248
|
-
"$BASE_URL/images/edits" \
|
|
249
|
-
-H "Authorization: Bearer $GPT_IMAGE_API_KEY" \
|
|
250
|
-
--form-string "model=$MODEL" \
|
|
251
|
-
--form-string "size=$SIZE" \
|
|
252
|
-
--form-string "prompt=$PROMPT" \
|
|
253
|
-
-F "image=@$REF_LOCAL" > "$RESP"
|
|
254
|
-
|
|
255
|
-
if jq -e '.error' "$RESP" >/dev/null 2>&1; then
|
|
256
|
-
echo "API error:" >&2
|
|
257
|
-
jq '.error' "$RESP" >&2
|
|
258
|
-
exit 1
|
|
259
|
-
fi
|
|
260
|
-
|
|
261
|
-
# `// empty` 让缺失字段输出空串而非 "null",配合 -s 检查避免写出 3 字节假 PNG
|
|
262
|
-
jq -er '.data[0].b64_json // empty' "$RESP" | base64 --decode > "$OUT"
|
|
263
|
-
[ -s "$OUT" ] || { echo "empty or malformed output: $OUT" >&2; head -c 300 "$RESP" >&2; exit 1; }
|
|
264
|
-
|
|
265
|
-
printf '%s\n' "$PROMPT" > "${OUT%.png}.prompt.txt"
|
|
266
|
-
printf '%s\n' "$REF_IMAGE" > "${OUT%.png}.ref.txt"
|
|
267
|
-
|
|
268
|
-
file "$OUT"
|
|
269
|
-
ls -lt "$BOOK_DIR/封面/"
|
|
270
|
-
```
|
|
88
|
+
读 [references/api-fallback.md](references/api-fallback.md),按其中的环境变量和命令生成;没有参考图走文生图,有参考图走图生图。生成后把原图绝对路径交给 Step 5。
|
|
271
89
|
|
|
272
90
|
### Step 5:导出平台上传尺寸(平台有固定像素时)
|
|
273
91
|
|
|
274
|
-
平台有固定上传像素(番茄 600×800
|
|
92
|
+
平台有固定上传像素(番茄 600×800)时,把原图**居中裁剪+缩放**到精确尺寸,保持画面比例,原图保留并另存 `_上传` 版。`SRC` 填 Step 4 的原图绝对路径,`TARGET` 填 Step 1 的上传尺寸,不依赖上一段 shell 的临时变量:
|
|
275
93
|
|
|
276
94
|
```bash
|
|
277
95
|
SRC='<Step 4 生成的原图绝对路径>'
|
|
@@ -297,19 +115,19 @@ if [ -n "$TARGET" ] && [ -f "$SRC" ]; then
|
|
|
297
115
|
fi
|
|
298
116
|
```
|
|
299
117
|
|
|
300
|
-
>
|
|
118
|
+
> 提示词中的中心安全区用于减少裁切风险;导出后仍按 Step 6 检查书名和笔名是否完整。
|
|
301
119
|
|
|
302
120
|
### Step 6:质量检查 + 迭代
|
|
303
121
|
|
|
304
122
|
| 检查项 | 标准 |
|
|
305
123
|
|:-------|:-----|
|
|
306
|
-
| 文字渲染 |
|
|
307
|
-
| 题材匹配 |
|
|
124
|
+
| 文字渲染 | 书名、笔名清晰可辨,字体风格匹配题材 |
|
|
125
|
+
| 题材匹配 | 视觉风格与本书题材一致 |
|
|
308
126
|
| 构图合理 | 主体突出,文字不遮挡核心画面 |
|
|
309
|
-
| 平台适配 |
|
|
127
|
+
| 平台适配 | 符合目标平台的封面风格 |
|
|
310
128
|
| 平台尺寸 | 比例与平台一致;缩放到上传尺寸后书名、笔名完整可见、未被裁切 |
|
|
311
129
|
|
|
312
|
-
|
|
130
|
+
未达标或作者希望调整时,可更换构图、色调、字体或平台风格,改完重新生成一张。
|
|
313
131
|
|
|
314
132
|
交付时这样告诉作者;命令、环境变量和接口报错不贴给作者,失败时用一句话说原因和办法(如「生图接口没配好,需要先设置 API Key」):
|
|
315
133
|
|
|
@@ -324,13 +142,7 @@ fi
|
|
|
324
142
|
|
|
325
143
|
## 参考资料
|
|
326
144
|
|
|
327
|
-
| 文件 |
|
|
145
|
+
| 文件 | 何时读 |
|
|
328
146
|
|:-----|:---------|
|
|
329
|
-
| [references/cover-styles.md](references/cover-styles.md) |
|
|
330
|
-
|
|
331
|
-
---
|
|
332
|
-
|
|
333
|
-
## 语言
|
|
334
|
-
|
|
335
|
-
- 跟随用户的语言回复,用户用什么语言就用什么语言回复
|
|
336
|
-
- 中文回复遵循《中文文案排版指北》
|
|
147
|
+
| [references/cover-styles.md](references/cover-styles.md) | Step 1 定平台风格、Step 2 定题材、Step 3 查字体和画面时 |
|
|
148
|
+
| [references/api-fallback.md](references/api-fallback.md) | Step 4 走 API 回退时 |
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# API 回退生图
|
|
2
|
+
|
|
3
|
+
只在会话没有内置生图工具或作者明确要求走 API 时使用。`gpt-image-2` 返回 base64,请求体不带 `response_format`。无参考图走文生图,有参考图走图生图。
|
|
4
|
+
|
|
5
|
+
## 环境变量
|
|
6
|
+
|
|
7
|
+
| 变量 | 必填 | 默认 | 说明 |
|
|
8
|
+
|:-----|:----:|:-----|:-----|
|
|
9
|
+
| `GPT_IMAGE_API_KEY` | 是 | — | OpenAI 或兼容代理的 API Key |
|
|
10
|
+
| `GPT_IMAGE_BASE_URL` | | `https://api.openai.com/v1` | 用兼容代理时改这个 |
|
|
11
|
+
| `GPT_IMAGE_MODEL` | | `gpt-image-2` | 只在测试新模型时覆盖 |
|
|
12
|
+
| `GPT_IMAGE_SIZE` | | `1024x1536` | 请求尺寸:番茄 3:4 用 `768x1024`,默认 2:3 用 `1024x1536`。实际尺寸以出图结果为准,上传像素由入口的导出步骤保证 |
|
|
13
|
+
| `BOOK_DIR` | 是 | — | `封面/` 的上一层,按入口「收集信息」定的保存位置 |
|
|
14
|
+
| `PROMPT` | 是 | — | 入口按模板拼好的完整提示词 |
|
|
15
|
+
| `REF_IMAGE` | | — | 参考图本地路径或 URL;设置后走图生图 |
|
|
16
|
+
|
|
17
|
+
## 文生图(没有参考图)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
: "${GPT_IMAGE_API_KEY:?请设置 export GPT_IMAGE_API_KEY=你的key}"
|
|
22
|
+
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}"
|
|
23
|
+
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}"
|
|
24
|
+
MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}"
|
|
25
|
+
SIZE="${GPT_IMAGE_SIZE:-1024x1536}"
|
|
26
|
+
BOOK_DIR="${BOOK_DIR:?请先 export BOOK_DIR=书目录或 ./covers/<书名>}"
|
|
27
|
+
|
|
28
|
+
mkdir -p "$BOOK_DIR/封面"
|
|
29
|
+
|
|
30
|
+
# 自增版本号,避免覆盖之前生成的封面
|
|
31
|
+
i=1
|
|
32
|
+
while [ -f "$BOOK_DIR/封面/封面_v${i}.png" ]; do i=$((i+1)); done
|
|
33
|
+
OUT="$BOOK_DIR/封面/封面_v${i}.png"
|
|
34
|
+
RESP=$(mktemp)
|
|
35
|
+
trap 'rm -f "$RESP"' EXIT
|
|
36
|
+
|
|
37
|
+
# 用 jq 拼 JSON 体,避免 PROMPT 里的引号/换行/中文把 shell 字符串撑破
|
|
38
|
+
BODY=$(jq -n \
|
|
39
|
+
--arg m "$MODEL" \
|
|
40
|
+
--arg p "$PROMPT" \
|
|
41
|
+
--arg s "$SIZE" \
|
|
42
|
+
'{model:$m, prompt:$p, size:$s}')
|
|
43
|
+
|
|
44
|
+
curl -fsS --max-time 180 --retry 2 --retry-delay 5 \
|
|
45
|
+
"$BASE_URL/images/generations" \
|
|
46
|
+
-H "Authorization: Bearer $GPT_IMAGE_API_KEY" \
|
|
47
|
+
-H "Content-Type: application/json" \
|
|
48
|
+
-d "$BODY" > "$RESP"
|
|
49
|
+
|
|
50
|
+
# API 出错时早退,避免把 error JSON 当成 base64 写成损坏 PNG
|
|
51
|
+
if jq -e '.error' "$RESP" >/dev/null 2>&1; then
|
|
52
|
+
echo "API error:" >&2
|
|
53
|
+
jq '.error' "$RESP" >&2
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# `// empty` 让缺失字段输出空串而非 "null",配合下面的 -s 检查避免写出 3 字节假 PNG
|
|
58
|
+
jq -er '.data[0].b64_json // empty' "$RESP" | base64 --decode > "$OUT"
|
|
59
|
+
[ -s "$OUT" ] || { echo "empty or malformed output: $OUT" >&2; head -c 300 "$RESP" >&2; exit 1; }
|
|
60
|
+
|
|
61
|
+
# 落地提示词副本,方便迭代时基于上一次微调
|
|
62
|
+
printf '%s\n' "$PROMPT" > "${OUT%.png}.prompt.txt"
|
|
63
|
+
|
|
64
|
+
file "$OUT"
|
|
65
|
+
ls -lt "$BOOK_DIR/封面/"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 图生图(有参考图)
|
|
69
|
+
|
|
70
|
+
下面的 `/v1/images/edits` 命令通过 `multipart/form-data` 上传本地图片,不加 `Content-Type: application/json`。文本字段用 `--form-string`,图片字段用 `-F image=@path`。
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
set -euo pipefail
|
|
74
|
+
: "${GPT_IMAGE_API_KEY:?请设置 export GPT_IMAGE_API_KEY=你的key}"
|
|
75
|
+
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}"
|
|
76
|
+
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}"
|
|
77
|
+
MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}"
|
|
78
|
+
SIZE="${GPT_IMAGE_SIZE:-1024x1536}"
|
|
79
|
+
BOOK_DIR="${BOOK_DIR:?请先 export BOOK_DIR=书目录或 ./covers/<书名>}"
|
|
80
|
+
REF_IMAGE="${REF_IMAGE:?请先 export REF_IMAGE=本地路径或 URL}"
|
|
81
|
+
|
|
82
|
+
mkdir -p "$BOOK_DIR/封面"
|
|
83
|
+
|
|
84
|
+
# 自增版本号
|
|
85
|
+
i=1
|
|
86
|
+
while [ -f "$BOOK_DIR/封面/封面_v${i}.png" ]; do i=$((i+1)); done
|
|
87
|
+
OUT="$BOOK_DIR/封面/封面_v${i}.png"
|
|
88
|
+
RESP=$(mktemp)
|
|
89
|
+
REF_TMP=""
|
|
90
|
+
trap '[ -n "$REF_TMP" ] && rm -f "$REF_TMP"; rm -f "$RESP"' EXIT
|
|
91
|
+
|
|
92
|
+
# URL 先下载到临时文件,本地路径直接用。用裸 mktemp 以保证 macOS/Linux 行为一致。
|
|
93
|
+
case "$REF_IMAGE" in
|
|
94
|
+
http://*|https://*)
|
|
95
|
+
REF_TMP=$(mktemp)
|
|
96
|
+
curl -fsSL --max-time 60 -o "$REF_TMP" "$REF_IMAGE"
|
|
97
|
+
REF_LOCAL="$REF_TMP"
|
|
98
|
+
;;
|
|
99
|
+
*)
|
|
100
|
+
[ -f "$REF_IMAGE" ] || { echo "参考图不存在: $REF_IMAGE" >&2; exit 1; }
|
|
101
|
+
REF_LOCAL="$REF_IMAGE"
|
|
102
|
+
;;
|
|
103
|
+
esac
|
|
104
|
+
|
|
105
|
+
curl -fsS --max-time 240 --retry 2 --retry-delay 5 \
|
|
106
|
+
"$BASE_URL/images/edits" \
|
|
107
|
+
-H "Authorization: Bearer $GPT_IMAGE_API_KEY" \
|
|
108
|
+
--form-string "model=$MODEL" \
|
|
109
|
+
--form-string "size=$SIZE" \
|
|
110
|
+
--form-string "prompt=$PROMPT" \
|
|
111
|
+
-F "image=@$REF_LOCAL" > "$RESP"
|
|
112
|
+
|
|
113
|
+
if jq -e '.error' "$RESP" >/dev/null 2>&1; then
|
|
114
|
+
echo "API error:" >&2
|
|
115
|
+
jq '.error' "$RESP" >&2
|
|
116
|
+
exit 1
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# `// empty` 让缺失字段输出空串而非 "null",配合 -s 检查避免写出 3 字节假 PNG
|
|
120
|
+
jq -er '.data[0].b64_json // empty' "$RESP" | base64 --decode > "$OUT"
|
|
121
|
+
[ -s "$OUT" ] || { echo "empty or malformed output: $OUT" >&2; head -c 300 "$RESP" >&2; exit 1; }
|
|
122
|
+
|
|
123
|
+
printf '%s\n' "$PROMPT" > "${OUT%.png}.prompt.txt"
|
|
124
|
+
printf '%s\n' "$REF_IMAGE" > "${OUT%.png}.ref.txt"
|
|
125
|
+
|
|
126
|
+
file "$OUT"
|
|
127
|
+
ls -lt "$BOOK_DIR/封面/"
|
|
128
|
+
```
|