@oh-story/dsh 0.1.9 → 0.1.11
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 +14 -14
- package/lib/client.js +209 -73
- package/lib/client.js.map +3 -3
- package/lib/drama/manifest.json +248 -168
- package/lib/drama/skills/short-drama/SKILL.md +16 -4
- package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
- package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
- package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
- package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
- package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
- package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
- package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
- package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
- package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
- package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
- package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
- package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
- package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
- package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
- package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
- package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
- package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
- package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
- 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//347/263/273/347/273/237/346/265/201.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
- package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
- package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
- package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
- package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
- package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
- package/lib/drama/skills/short-drama-edit/SKILL.md +65 -44
- package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
- package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
- package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
- package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +6 -4
- package/lib/drama/skills/short-drama-edit/references/cut-craft.md +26 -67
- package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +31 -56
- package/lib/drama/skills/short-drama-edit/references/generated-footage.md +42 -78
- package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +44 -92
- package/lib/drama/skills/short-drama-edit/references/stage-contract.md +14 -16
- package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1272 -125
- package/lib/drama/skills/short-drama-edit/scripts/selftest.py +113 -9
- package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
- package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
- package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
- package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
- package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
- package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
- package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
- package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
- package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
- package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
- package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
- package/lib/drama/skills/short-drama-review/SKILL.md +4 -5
- package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
- package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
- package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
- package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
- package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +24 -35
- package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
- package/lib/drama/skills/short-drama-storyboard/SKILL.md +23 -11
- package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
- package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
- package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
- package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +139 -34
- package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +5 -3
- package/lib/drama/skills/short-drama-video-prompts/SKILL.md +15 -12
- package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +29 -0
- package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
- package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
- package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +52 -39
- package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -21
- package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +9 -23
- package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +14 -26
- package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
- package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
- package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -2
- package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
- package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
- package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
- package/lib/drama/skills/short-drama-write/SKILL.md +10 -7
- package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
- package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
- package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
- package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
- package/lib/index.js +346 -98
- package/lib/index.js.map +4 -4
- package/lib/novel-to-game/README.md +299 -59
- package/lib/novel-to-game/README_ZH.md +299 -56
- package/lib/novel-to-game/VERSION +1 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
- package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
- package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
- package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
- package/lib/novel-to-game/manifest.json +77 -87
- package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
- package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
- package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
- package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
- package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
- package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
- package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
- package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
- package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
- package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
- package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
- package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
- package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
- package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
- package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
- package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
- package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
- package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
- package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
- package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
- package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
- package/lib/oh-story/manifest.json +607 -327
- package/lib/oh-story/roles/chapter-extractor.md +177 -237
- package/lib/oh-story/roles/character-designer.md +1 -2
- package/lib/oh-story/roles/consistency-checker.md +15 -13
- package/lib/oh-story/roles/narrative-writer.md +36 -38
- package/lib/oh-story/roles/story-architect.md +9 -61
- package/lib/oh-story/roles/story-explorer.md +20 -125
- package/lib/oh-story/roles/story-researcher.md +0 -1
- package/lib/oh-story/skills/story/SKILL.md +15 -9
- package/lib/oh-story/skills/story/VERSION +1 -1
- package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
- package/lib/oh-story/skills/story-deslop/SKILL.md +59 -73
- package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
- package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-deslop/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +22 -5
- package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-import/SKILL.md +64 -584
- package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
- package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
- package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
- package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
- package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
- package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
- package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
- package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
- package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
- package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
- package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +98 -92
- package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
- package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-import/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
- package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +132 -27
- package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-long-analyze/SKILL.md +81 -270
- package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +252 -0
- package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +3 -3
- package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
- package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
- package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
- package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +138 -64
- package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
- package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +55 -128
- package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +6 -6
- package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1145 -0
- package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
- package/lib/oh-story/skills/story-long-scan/SKILL.md +45 -194
- package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
- package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
- package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
- package/lib/oh-story/skills/story-long-write/SKILL.md +49 -81
- package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
- package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +24 -202
- package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-long-write/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +7 -11
- package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
- package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
- package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
- package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
- package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +7 -15
- package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
- package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
- package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
- package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
- package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
- package/lib/oh-story/skills/story-long-write/references/project-files.md +19 -13
- package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +13 -5
- package/lib/oh-story/skills/story-long-write/references/reference-index.md +5 -6
- package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
- package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
- package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +81 -121
- package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +41 -139
- package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
- package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +57 -67
- package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -253
- package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
- package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +6 -4
- package/lib/oh-story/skills/story-long-write/references/writing-craft.md +19 -65
- package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
- package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +226 -25
- package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +132 -27
- package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
- package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +7 -4
- package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +304 -46
- package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-review/SKILL.md +31 -302
- package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
- package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-review/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
- package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-review/references/review-quality.md +6 -11
- package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
- package/lib/oh-story/skills/story-review/references/solo.md +52 -0
- package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
- package/lib/oh-story/skills/story-review/references/tracking-transaction.md +15 -11
- package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +478 -15
- package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +182 -23
- package/lib/oh-story/skills/story-setup/SKILL.md +71 -452
- package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +12 -11
- package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +22 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
- package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
- package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
- 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/long-emotional-methods.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
- package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
- package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
- package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
- package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
- package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
- 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/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +19 -65
- package/lib/oh-story/skills/story-setup/references/diagnostics.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/SKILL.md +56 -110
- package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
- package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
- package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
- package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
- package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
- package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
- package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
- package/lib/oh-story/skills/story-short-analyze/references/stage4-6-reversal-summary.md +611 -0
- package/lib/oh-story/skills/story-short-scan/SKILL.md +35 -65
- package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
- package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
- package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
- package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
- package/lib/oh-story/skills/story-short-write/SKILL.md +23 -175
- package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
- package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
- package/lib/oh-story/skills/story-short-write/references/author-memory.md +46 -94
- package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
- package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
- package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
- package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
- package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
- package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -47
- package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
- package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
- package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
- package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
- package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
- package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
- package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
- package/lib/oh-story/skills/story-short-write/references/workflow-design.md +21 -13
- package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +116 -0
- package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +99 -0
- package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
- package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
- package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
- package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
- package/lib/types/client/drama-production-view.d.ts.map +1 -1
- package/lib/types/client/file-activity.d.ts +19 -1
- package/lib/types/client/file-activity.d.ts.map +1 -1
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/production-prompts.d.ts +7 -0
- package/lib/types/client/production-prompts.d.ts.map +1 -1
- package/lib/types/client/production-runtime.d.ts +16 -0
- package/lib/types/client/production-runtime.d.ts.map +1 -1
- package/lib/types/client/video-studio.d.ts.map +1 -1
- package/lib/types/drama-adapters.d.ts +5 -3
- package/lib/types/drama-adapters.d.ts.map +1 -1
- package/lib/types/native-hooks.d.ts +53 -1
- package/lib/types/native-hooks.d.ts.map +1 -1
- package/lib/types/role-identity.d.ts +17 -0
- package/lib/types/role-identity.d.ts.map +1 -0
- package/lib/types/role-tool.d.ts.map +1 -1
- package/lib/types/skill-provider.d.ts.map +1 -1
- package/lib/types/video-project.d.ts.map +1 -1
- package/lib/types/workspace-route.d.ts.map +1 -1
- package/lib/video-recap/CHANGELOG.md +60 -1
- package/lib/video-recap/README.en.md +348 -137
- package/lib/video-recap/README.md +340 -136
- package/lib/video-recap/manifest.json +406 -251
- package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
- package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
- package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
- package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
- package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
- package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
- package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
- package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
- package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
- package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
- package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
- package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
- package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
- package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
- package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
- package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
- package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
- package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
- package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
- package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
- package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
- package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
- package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
- package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
- package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
- package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
- package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
- package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
- package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
- package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
- package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
- package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
- package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
- package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
- package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
- package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
- package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
- package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
- package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
- package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
- package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
- package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
- package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
- package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
- package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
- package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
- package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
- package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
- package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
- package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
- package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
- package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
- package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
- package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
- package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
- package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
- package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
- package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
- package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
- package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
- package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
- package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
- package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
- package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
- package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
- package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
- package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
- package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
- package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
- package/lib/video-recap/skills/video-script/SKILL.md +16 -13
- package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
- package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
- package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
- package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
- package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
- package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
- package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
- package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
- package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
- package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
- package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
- package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
- package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
- package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
- package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
- package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
- package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
- package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
- package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
- package/lib/video-recap/skills/{video-script/scripts/agent_brief.py → video-understanding/scripts/briefing/builder.py} +38 -35
- package/lib/video-recap/skills/video-understanding/scripts/{brief_context.py → briefing/context.py} +4 -35
- package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
- package/lib/video-recap/skills/{video-script/scripts/brief_timeline.py → video-understanding/scripts/briefing/timeline.py} +5 -6
- package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
- package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
- package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
- package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
- package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
- package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
- package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
- package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
- package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
- package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
- package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
- package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
- package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
- package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
- package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
- package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
- package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
- package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
- package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
- package/package.json +45 -45
- package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
- package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
- package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
- package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -530
- package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -559
- package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
- package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
- package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +0 -678
- package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
- package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
- package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
- package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
- package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
- package/lib/video-recap/skills/video-script/scripts/brief_context.py +0 -348
- package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
- package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +0 -399
- package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
- package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +0 -327
- /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
- /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
- /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
|
@@ -32,7 +32,7 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
32
32
|
|
|
33
33
|
### Phase 1:确认平台和方向
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
问用户:**「你想看哪个平台?(起点/番茄/晋江/七猫/刺猬猫/其他)有没有关注的题材方向?」**
|
|
36
36
|
|
|
37
37
|
关键判断:
|
|
38
38
|
- 用户已有方向 → 针对该方向做深度扫榜
|
|
@@ -53,227 +53,75 @@ metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudec
|
|
|
53
53
|
|
|
54
54
|
#### 脚本采集模式
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
3. 需要补充数据时(标签、简介、最新更新),进入详情页提取
|
|
62
|
-
4. 按规范格式写入 Markdown 文件
|
|
63
|
-
5. 多榜单/多题材时,逐组采集并保存
|
|
64
|
-
|
|
65
|
-
**输出规范**:详见 [references/scan-output-format.md](references/scan-output-format.md),包含各平台字段定义、输出模板。
|
|
66
|
-
|
|
67
|
-
**起点采集目标**(优先运行 `node scripts/qidian-rank-scraper.js --type {榜单} --outdir {输出目录}`;默认 `--mode auto` 会先用 `https://m.qidian.com` 移动端 SSR,PC/CDP 只作回退):
|
|
68
|
-
|
|
69
|
-
| 榜单 | URL | 核心字段 |
|
|
70
|
-
|------|-----|----------|
|
|
71
|
-
| 新人签约新书榜 | qidian.com/rank/newsign/ | 作者·题材·签约·免费/VIP·字数·总推荐·标签·简介 |
|
|
72
|
-
| 签约作者新书榜 | qidian.com/rank/signnewbook/ | 已签约作者新书,新风向信号 |
|
|
73
|
-
| 公众作者新书榜 | qidian.com/rank/pubnewbook/ | 公众作者新书,发现潜力作者 |
|
|
74
|
-
| 新人作者新书榜 | qidian.com/rank/newauthor/ | 新人作品,新人赛道风向 |
|
|
75
|
-
| 三江推荐 | qidian.com/sanjiang/ | 编辑推荐,按周分组(注意:非 /rank/ 路径) |
|
|
76
|
-
| 月票榜 | qidian.com/rank/yuepiao/ | 付费认可度最高指标 |
|
|
77
|
-
| 畅销榜 | qidian.com/rank/hotsales/ | 真金白银投票 |
|
|
78
|
-
| 阅读指数榜 | qidian.com/rank/readindex/ | 阅读量综合指标 |
|
|
79
|
-
| 收藏榜 | qidian.com/rank/collect/ | 读者关注热度 |
|
|
80
|
-
| 原创推荐榜 | qidian.com/rank/recom/ | |
|
|
81
|
-
|
|
82
|
-
**番茄采集目标**:
|
|
83
|
-
|
|
84
|
-
| 榜单 | URL格式 | 核心字段 |
|
|
85
|
-
|------|---------|----------|
|
|
86
|
-
| 男频阅读榜 | fanqienovel.com/rank/1_2_{cat_id} | 按题材逐页采集,在读数为核心指标 |
|
|
87
|
-
| 女频阅读榜 | fanqienovel.com/rank/0_2_{cat_id} | 按题材逐页采集 |
|
|
88
|
-
| 男频新书榜 | fanqienovel.com/rank/1_1_{cat_id} | 新风向信号 |
|
|
89
|
-
| 女频新书榜 | fanqienovel.com/rank/0_1_{cat_id} | 新风向信号 |
|
|
90
|
-
|
|
91
|
-
URL 参数:`/rank/{channel}_{type}_{cat_id}`,channel 0=女频/1=男频,type 1=新书榜/2=阅读榜。番茄列表页有字体反爬,须用 `scripts/fanqie-rank-scraper.js` 从详情页多策略解码书名/作者/题材/评分/标签/简介,配合 browser-cdp 使用:
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
node scripts/fanqie-rank-scraper.js --channel 1 --type 2 --outdir {输出目录} # 男频阅读榜
|
|
95
|
-
node scripts/fanqie-rank-scraper.js --channel all --top 15 --outdir {输出目录} # 男女频,每题材前 15 本
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
> **番茄采集后必查文件头 `数据质量`**,异常排查步骤见 [references/scan-output-format.md](references/scan-output-format.md)。
|
|
99
|
-
|
|
100
|
-
**七猫采集目标**:
|
|
101
|
-
|
|
102
|
-
| 榜单 | URL | 核心字段 |
|
|
103
|
-
|------|-----|----------|
|
|
104
|
-
| 排行榜总入口 | qimao.com/paihang | 大热榜/新书榜/完结榜,热度为核心指标 |
|
|
105
|
-
|
|
106
|
-
榜单类型:大热榜(日榜/月榜)、新书榜、完结榜、收藏榜、更新榜,支持男生榜/女生榜切换。
|
|
107
|
-
|
|
108
|
-
大热榜用 `--period day|month|all` 显式选择日榜、月榜或两者(默认 `day`);周期会进入文件头与文件名。非大热榜不区分周期,`--period` 不会重复采集。
|
|
109
|
-
|
|
110
|
-
**晋江采集目标**(`scripts/jjwxc-rank-scraper.js`,默认列表 + 详情两步走):
|
|
111
|
-
|
|
112
|
-
| 榜单 | URL | 核心字段 |
|
|
113
|
-
|------|-----|----------|
|
|
114
|
-
| 收入金榜 | jjwxc.net/topten.php?orderstr=12&t=0 | 收藏数、营养液、积分、字数、状态(详情页 `onebook.php` 补采) |
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
node scripts/jjwxc-rank-scraper.js --type 12 --outdir {输出目录} # 列表+详情(默认每频道前10,详情上限100)
|
|
118
|
-
node scripts/jjwxc-rank-scraper.js --type 12 --top 15 --detail-limit 60 # 调整每频道本数/详情总量
|
|
119
|
-
node scripts/jjwxc-rank-scraper.js --type 12 --list-only # 只采列表(快,无核心指标)
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
> **晋江硬性要求**:必须有详情页核心指标(收藏数/营养液/积分/字数),脚本默认已补采;采集要点见 [references/scan-output-format.md](references/scan-output-format.md)。
|
|
123
|
-
|
|
124
|
-
**文件命名**:`{平台}{榜单名称}_{YYYYMMDD}.md`,例:`起点新人签约新书榜_20260425.md`
|
|
125
|
-
|
|
126
|
-
#### 采集质量检查(「确定数据来源」完成后必须执行)
|
|
127
|
-
|
|
128
|
-
每完成一个榜单的采集,立即执行以下检查。发现问题当场修复,不留给后续分析。详细规则见 [references/scan-output-format.md](references/scan-output-format.md)「数据清洗与字段约束」。
|
|
129
|
-
|
|
130
|
-
**1. 数据完整性**
|
|
131
|
-
|
|
132
|
-
| 检查项 | 标准 | 处理 |
|
|
133
|
-
|--------|------|------|
|
|
134
|
-
| 条目数量 | >= 15 条有效数据(小平台 >= 10) | 不足则在文件头注明 `[数据稀疏] 实际采集 N 条` |
|
|
135
|
-
| 必填字段 | 排名、书名、作者(缺任一项视为无效) | 无效条目移除,条目数重新计算 |
|
|
136
|
-
| 字段一致性 | 同一榜单内所有条目字段集必须一致 | 不一致条目标记 `[字段缺失: {字段名}]` |
|
|
137
|
-
|
|
138
|
-
**2. 数据清洗**
|
|
139
|
-
|
|
140
|
-
| 污染类型 | 处理 |
|
|
141
|
-
|----------|------|
|
|
142
|
-
| 平台模板文本(番茄「提供XXX完整版在线免费阅读」、七猫「上一页」等) | 删除模板文本,保留正文 |
|
|
143
|
-
| 解析串行(同一条目出现两个不同作品的数据) | 标记 `[解析异常]`,删除并重新采集 |
|
|
144
|
-
| 空字段(空白、`--`、`未知`) | 标记 `[待补]`,优先通过详情页补采 |
|
|
145
|
-
|
|
146
|
-
**3. 简介截断**
|
|
147
|
-
|
|
148
|
-
- 清洗后超过 100 字的简介,在最近的句号/问号/感叹号处截断,加 `...`
|
|
149
|
-
- 平台模板文本不计入 100 字限制(先删除模板,再截断)
|
|
150
|
-
|
|
151
|
-
**4. 文件头质量状态**
|
|
152
|
-
|
|
153
|
-
每个采集文件头部必须包含:
|
|
154
|
-
|
|
155
|
-
```
|
|
156
|
-
- 数据质量:[OK / 存在问题]
|
|
157
|
-
- 有效条目:{N} / {总数}
|
|
158
|
-
- 问题摘要:{无 / 具体问题描述}
|
|
159
|
-
```
|
|
56
|
+
1. 只读所选平台那一份:[起点](references/platform-qidian.md) / [番茄](references/platform-fanqie.md) / [七猫](references/platform-qimao.md) / [晋江](references/platform-jjwxc.md) / [刺猬猫](references/platform-ciweimao.md)。里面有榜单网址、命令、字段、默认组合、故障排查和该平台的分析维度;需要浏览器态的平台先 `/browser-cdp` 启动 Chrome。
|
|
57
|
+
2. 每次扫榜新建输出目录 `扫榜/{YYYYMMDD}/`(同日再扫加 `-2`),存本次榜单,不往旧目录追加(聚合会混进旧榜);文件名 `{平台}{榜单}_{YYYYMMDD}.md`。脚本已做清洗和质量标注。
|
|
58
|
+
3. 聚合:`node scripts/aggregate-rank.js {输出目录} --out {输出目录}/扫榜聚合.md`(小平台加 `--sparse 10`)。**主会话只读这份聚合**,不整份读原始榜单:题材分布、本数占比、热度与字数中位、标签热词、书名常见词、多榜重合、每题材前 3 本代表作。
|
|
59
|
+
4. 看聚合的「采集情况」:标了问题(书名没解出来、没采到、只有书单)的榜单按平台参考排查重采;重采不了就在报告里说明结论不含它。同方向不到 15 本(小平台 10 本)标「少」,等同 `[数据稀疏]`。
|
|
60
|
+
5. 要看原始条目(开篇卖点、新人设、新桥段)时按需抽样:`node scripts/aggregate-rank.js {输出目录} --sample {题材/标签/书名词} --n 5`,一次一个方向。
|
|
160
61
|
|
|
161
62
|
#### 其他数据来源
|
|
162
63
|
|
|
163
|
-
|
|
164
|
-
- 用户提供已有的扫描结果文件路径 → 直接加载进入「数据分析」
|
|
165
|
-
- 用户提供链接 → 用 WebFetch 抓取
|
|
166
|
-
- 用户粘贴/截图 → 手动解析进入分析
|
|
64
|
+
**用户提供:** 已有扫描结果文件 → 直接聚合;链接 → 用 WebFetch 抓取;粘贴/截图 → 整理成 `# {平台} · {榜单名}` 标题、每本一段 `### #{排名} {书名}` 加一行 `*作者 · 题材 · 连载中 · 120万字 · 3.5万收藏*`(热度写「数字+口径」;有标签再加 `**标签:** a、b`)存进输出目录,再同样聚合。
|
|
167
65
|
|
|
168
|
-
|
|
169
|
-
- 加载 `references/genre-trends.md`
|
|
170
|
-
- 明确标注:「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的榜单。
|
|
66
|
+
**内置知识:** 加载 `references/genre-trends.md`,明确标注「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的榜单。
|
|
171
67
|
|
|
172
68
|
---
|
|
173
69
|
|
|
174
70
|
### Phase 3:数据分析
|
|
175
71
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
#### 起点中文网分析维度
|
|
179
|
-
|
|
180
|
-
| 维度 | 看什么 |
|
|
181
|
-
|---|---|
|
|
182
|
-
| 月票榜/推荐票榜 | 付费用户认可度高、持续追读强 |
|
|
183
|
-
| 畅销榜 | 真金白银投票,最硬核的指标 |
|
|
184
|
-
| 签约作者新书榜 | 已签约作者的新作风向 |
|
|
185
|
-
| 公众作者新书榜 | 公众作者的新作,发现潜力股 |
|
|
186
|
-
| 新人作者新书榜 | 新作者作品与新题材信号 |
|
|
187
|
-
| 三江推荐 | 编辑精选推荐,按周分组,发现平台力推作品 |
|
|
188
|
-
| 分类榜单 | 各垂直题材的竞争格局 |
|
|
189
|
-
| 追读率 | 核心指标,决定推荐位分配 |
|
|
190
|
-
|
|
191
|
-
#### 番茄小说分析维度
|
|
192
|
-
|
|
193
|
-
| 维度 | 看什么 |
|
|
194
|
-
|---|---|
|
|
195
|
-
| 阅读榜 | 流量与读者规模,在读数为核心指标 |
|
|
196
|
-
| 新书榜 | 新题材、新风向的早期信号 |
|
|
197
|
-
| 题材分布 | 各品类在读数集中度 |
|
|
198
|
-
| 在读数趋势 | 同题材不同作品的流量差距 |
|
|
199
|
-
| 标签热词 | 简介开头【】内的标签组合,揭示题材细分卖点(如「种田+慢热+西幻」) |
|
|
200
|
-
|
|
201
|
-
#### 七猫小说分析维度
|
|
202
|
-
|
|
203
|
-
| 维度 | 看什么 |
|
|
204
|
-
|---|---|
|
|
205
|
-
| 大热榜 | 热度排名,反映流量集中度 |
|
|
206
|
-
| 新书榜 | 新流量风口 |
|
|
207
|
-
| 完结榜 | 长尾价值作品 |
|
|
208
|
-
| 热度指标 | 七猫核心指标,反映读者活跃度 |
|
|
209
|
-
|
|
210
|
-
#### 晋江文学城分析维度
|
|
72
|
+
以聚合结果为主,按所选平台参考里的「分析维度」看,再提取通用维度:
|
|
211
73
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
| 收藏/营养液 | 女频市场的核心指标 |
|
|
220
|
-
|
|
221
|
-
#### 通用分析维度
|
|
222
|
-
|
|
223
|
-
对每个平台的榜单数据,提取:
|
|
224
|
-
|
|
225
|
-
1. **题材分布**:当前榜上哪些题材最多
|
|
226
|
-
2. **新题材信号**:最近新出现的题材类型
|
|
227
|
-
3. **经典题材变化**:老牌题材的走势(上升/稳定/下降)
|
|
228
|
-
4. **字数与更新**:上榜作品的字数区间和更新频率
|
|
229
|
-
5. **书名模式**:上榜作品的命名规律
|
|
230
|
-
6. **开头卖点**:简介/标签中反复出现的关键词
|
|
231
|
-
7. **新元素对比**:与上期/同类榜单对比,标注新出现的人物设定、开篇切入点、桥段套路
|
|
74
|
+
1. **题材分布**:题材表的本数、占比与热度中位
|
|
75
|
+
2. **新题材信号**:新书榜列、多榜重合;`扫榜/` 下上一次的日期目录里有 `扫榜聚合.md` 就对比
|
|
76
|
+
3. **经典题材变化**:老牌题材的走势(上升/稳定/下降),没有上期数据就只写现状
|
|
77
|
+
4. **字数**:字数分布与各题材字数中位
|
|
78
|
+
5. **书名模式**:书名常见词 + 代表作书名
|
|
79
|
+
6. **开头卖点**:标签热词 + 代表作简介
|
|
80
|
+
7. **新元素**:对候选方向抽样原始条目,标出新的人物设定、开篇切入点、桥段套路
|
|
232
81
|
|
|
233
82
|
---
|
|
234
83
|
|
|
235
84
|
### Phase 4:输出扫榜报告
|
|
236
85
|
|
|
237
|
-
|
|
238
|
-
# 长篇网文扫榜报告:{平台名称}
|
|
86
|
+
报告写给作者:讲市场结论和能写的方向。脚本名、命令和采集状态码不进报告;某个榜没采到,就说一句「XX 榜这次没拿到(原因),结论不含它」。
|
|
239
87
|
|
|
240
|
-
|
|
88
|
+
报告展示给作者,同时写进输出目录的 `选题决策.md`:文件不存在就先按 [references/topic-decision.md](references/topic-decision.md) 的模板写文件头,再把报告作为「扫榜结论」一节写入(已存在同名一节就整节替换)。作者只扫榜不选题,结论也已落盘。
|
|
89
|
+
|
|
90
|
+
<!-- author-report -->
|
|
91
|
+
```md
|
|
92
|
+
## 扫榜结论:{平台名称}
|
|
93
|
+
|
|
94
|
+
### 市场概况
|
|
241
95
|
- 扫榜时间:{日期}
|
|
242
96
|
- 核心发现:{一句话总结}
|
|
243
97
|
|
|
244
|
-
|
|
98
|
+
### 题材热度排行
|
|
245
99
|
| 排名 | 题材 | 榜上数量 | 趋势 | 代表作 |
|
|
246
100
|
|------|------|----------|------|--------|
|
|
247
101
|
| 1 | {题材} | {N本} | ↑/→/↓ | {书名} |
|
|
248
102
|
|
|
249
|
-
|
|
103
|
+
### 新题材信号
|
|
250
104
|
- {新出现或正在上升的题材,附依据}
|
|
251
105
|
|
|
252
|
-
|
|
106
|
+
### 经典题材动态
|
|
253
107
|
- {老牌题材的现状,附依据}
|
|
254
108
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
- {
|
|
258
|
-
|
|
259
|
-
### 新开篇切入点
|
|
260
|
-
- {新切入点描述 + 代表作}
|
|
109
|
+
### 新元素提取
|
|
110
|
+
- 新人物设定:{新模式描述 + 代表作}
|
|
111
|
+
- 新开篇切入点:{新切入点描述 + 代表作}
|
|
112
|
+
- 新桥段/套路:{新桥段描述 + 代表作}
|
|
261
113
|
|
|
262
|
-
###
|
|
263
|
-
- {新桥段描述 + 代表作}
|
|
264
|
-
|
|
265
|
-
## 关键数据洞察
|
|
114
|
+
### 关键数据洞察
|
|
266
115
|
- 字数区间:上榜作品集中在 {X}-{Y} 万字
|
|
267
|
-
- 更新频率:日均 {X} 字为主流
|
|
268
116
|
- 书名特征:{命名模式总结}
|
|
269
117
|
- 标签热词:{高频标签词}
|
|
270
118
|
|
|
271
|
-
|
|
119
|
+
### 值得关注的方向
|
|
272
120
|
1. {方向 + 为什么值得关注 + 可行性评估}
|
|
273
121
|
2. {方向 + 为什么值得关注 + 可行性评估}
|
|
274
122
|
3. {方向 + 为什么值得关注 + 可行性评估}
|
|
275
123
|
|
|
276
|
-
|
|
124
|
+
### 一句话
|
|
277
125
|
{犀利的总结}
|
|
278
126
|
```
|
|
279
127
|
|
|
@@ -283,12 +131,14 @@ node scripts/jjwxc-rank-scraper.js --type 12 --list-only # 只
|
|
|
283
131
|
|
|
284
132
|
把扫榜结果变成能直接用的选题建议,产出 `选题决策.md`。完整方法(选题四步 + 可行性判断 + 输出模板)见 [references/topic-decision.md](references/topic-decision.md)。
|
|
285
133
|
|
|
134
|
+
**从文件接上:** 先读 `{outdir}/选题决策.md` 的「扫榜结论」和 `扫榜聚合.md`,不靠对话记忆;两者都没有就回 Phase 2。
|
|
135
|
+
|
|
286
136
|
**如信息不足,向用户补齐项目条件:**「目标平台、已有素材、擅长题材/写作约束、计划篇幅是什么?」
|
|
287
137
|
|
|
288
|
-
按 `topic-decision.md` 的选题四步产出 2-3 个推荐选题(能爆的原因 → 市场验证 → 差异化定位 → 可行性+失败风险+验证动作),写入**本次扫榜输出目录** `{outdir}/选题决策.md`
|
|
138
|
+
按 `topic-decision.md` 的选题四步产出 2-3 个推荐选题(能爆的原因 → 市场验证 → 差异化定位 → 可行性+失败风险+验证动作),写入**本次扫榜输出目录** `{outdir}/选题决策.md` 的「推荐选题」一节,保留「扫榜结论」。
|
|
289
139
|
|
|
290
140
|
**硬规则:**
|
|
291
|
-
- 可行性上限:背靠榜单标了 `[数据稀疏]
|
|
141
|
+
- 可行性上限:背靠榜单标了 `[数据稀疏]`、聚合表标「少」或同方向样本 <15(小平台<10)⇒ 不许给"高",强制降到"中" + 写明先验证;内置知识模式一律给"中"。
|
|
292
142
|
- 不输出项目素材无法支撑的题材;不只看热度,必须给可行性和失败风险;不忽略平台调性差异(起点男频和晋江女频审美完全不同)。
|
|
293
143
|
|
|
294
144
|
---
|
|
@@ -326,13 +176,14 @@ node scripts/jjwxc-rank-scraper.js --type 12 --list-only # 只
|
|
|
326
176
|
| [references/reader-profiling.md](references/reader-profiling.md) | 需要分析目标读者画像时 |
|
|
327
177
|
| [references/genre-trends.md](references/genre-trends.md) | 查看题材趋势候选、切入约束和样本校验规则时 |
|
|
328
178
|
| [references/publishing-guide.md](references/publishing-guide.md) | 平台适配+推荐机制校验+数据指标+简介设计 |
|
|
329
|
-
|
|
|
179
|
+
| 五份平台参考(链接见「脚本采集模式」第 1 步) | 「确定数据来源」:只读所选平台那份——榜单网址、命令、字段、故障排查、平台分析维度 |
|
|
180
|
+
| [scripts/aggregate-rank.js](scripts/aggregate-rank.js) | 把输出目录里的原始榜单聚合成短表(`--out` 落盘,`--sample` 抽原始条目,`--json` 机读),主会话只读它 |
|
|
330
181
|
| [scripts/cdp-utils.js](scripts/cdp-utils.js) | CDP 公共工具函数(ab/sleep/evalJSON/safeStr/scrollLoad/getArg),各采集脚本共用 |
|
|
331
|
-
| [scripts/fanqie-rank-scraper.js](scripts/fanqie-rank-scraper.js) |
|
|
332
|
-
| [scripts/qidian-rank-scraper.js](scripts/qidian-rank-scraper.js) |
|
|
333
|
-
| [scripts/qimao-rank-scraper.js](scripts/qimao-rank-scraper.js) |
|
|
334
|
-
| [scripts/jjwxc-rank-scraper.js](scripts/jjwxc-rank-scraper.js) |
|
|
335
|
-
| [scripts/ciweimao-rank-scraper.js](scripts/ciweimao-rank-scraper.js) |
|
|
182
|
+
| [scripts/fanqie-rank-scraper.js](scripts/fanqie-rank-scraper.js) | 番茄榜单采集,用法见番茄参考 |
|
|
183
|
+
| [scripts/qidian-rank-scraper.js](scripts/qidian-rank-scraper.js) | 起点榜单采集,用法见起点参考 |
|
|
184
|
+
| [scripts/qimao-rank-scraper.js](scripts/qimao-rank-scraper.js) | 七猫榜单采集,用法见七猫参考 |
|
|
185
|
+
| [scripts/jjwxc-rank-scraper.js](scripts/jjwxc-rank-scraper.js) | 晋江榜单采集,用法见晋江参考 |
|
|
186
|
+
| [scripts/ciweimao-rank-scraper.js](scripts/ciweimao-rank-scraper.js) | 刺猬猫榜单采集,用法见刺猬猫参考 |
|
|
336
187
|
|
|
337
188
|
---
|
|
338
189
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 刺猬猫:采集与分析
|
|
2
|
+
|
|
3
|
+
作者选了刺猬猫才读本文。需先用 `/browser-cdp` 启动 Chrome。rank-index 单页展示全部榜单,脚本按文本解析,按书名归一回填作品页链接,带连通性自检与空结果重试。
|
|
4
|
+
|
|
5
|
+
## 榜单与命令
|
|
6
|
+
|
|
7
|
+
`node scripts/ciweimao-rank-scraper.js --type {榜单} --outdir {输出目录}`:click 点击榜 / favor 收藏榜 / recommend 推荐榜 / subscribe 订阅榜 / monthly 月票榜 / tsukkomi 吐槽榜 / newbook 新书榜 / blade 刀片榜 / all 全部(默认)。
|
|
8
|
+
|
|
9
|
+
## 字段
|
|
10
|
+
|
|
11
|
+
排名、书名、作者(仅榜首条目带)、题材(其余条目带)、榜单值(聚合的热度口径;各榜含义不同,不跨榜比较)、作品页链接。刺猬猫是小平台:同方向不到 10 本才算稀疏,聚合时加 `--sparse 10`。
|
|
12
|
+
|
|
13
|
+
## 分析维度
|
|
14
|
+
|
|
15
|
+
| 维度 | 看什么 |
|
|
16
|
+
|---|---|
|
|
17
|
+
| 月票/订阅榜 | 付费认可 |
|
|
18
|
+
| 新书榜 | 二次元新梗与新设定 |
|
|
19
|
+
| 吐槽/刀片榜 | 读者互动强度与争议点 |
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 番茄:采集与分析
|
|
2
|
+
|
|
3
|
+
作者选了番茄才读本文。番茄列表页有字体反爬,须先用 `/browser-cdp` 启动 Chrome,再由脚本从详情页(内嵌 JSON `bookName`/`author`/`abstract`/`categoryV2` + `<title>` + og:meta)多策略解码书名、作者、题材、标签、简介。
|
|
4
|
+
|
|
5
|
+
## 榜单与命令
|
|
6
|
+
|
|
7
|
+
URL `fanqienovel.com/rank/{channel}_{type}_{cat_id}`:channel 0=女频/1=男频,type 1=新书榜/2=阅读榜。
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node scripts/fanqie-rank-scraper.js --channel 1 --type 2 --outdir {输出目录} # 男频阅读榜(默认)
|
|
11
|
+
node scripts/fanqie-rank-scraper.js --channel all --top 15 --outdir {输出目录} # 男女频,每题材前 15 本
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
脚本逐题材采集(每题材上限约 20,`--top N` 可调),每 5 本一批请求详情页。默认组合:男频阅读榜全题材 + 女频阅读榜全题材;要看新风向再加新书榜(`--type 1`)或下面的书库「最热」。文件名 `番茄{频道}{榜单}_全题材_{YYYYMMDD}.md`。一份全题材就是七百来条,只读聚合结果,不整份读原始文件。
|
|
15
|
+
|
|
16
|
+
题材 cat_id —— 男频 19 个:西方奇幻(1141) / 东方仙侠(1140) / 科幻末世(8) / 都市日常(261) / 都市修真(124) / 都市高武(1014) / 历史古代(273) / 战神赘婿(27) / 都市种田(263) / 传统玄幻(258) / 历史脑洞(272) / 悬疑脑洞(539) / 都市脑洞(262) / 玄幻脑洞(257) / 悬疑灵异(751) / 抗战谍战(504) / 游戏体育(746) / 动漫衍生(718) / 男频衍生(1016);女频 18 个:古风世情(1139) / 科幻末世(8) / 游戏体育(746) / 女频衍生(1015) / 玄幻言情(248) / 种田(23) / 年代(79) / 现言脑洞(267) / 宫斗宅斗(246) / 悬疑脑洞(539) / 古言脑洞(253) / 快穿(24) / 青春甜宠(749) / 星光璀璨(745) / 女频悬疑(747) / 职场婚恋(750) / 豪门总裁(748) / 民国言情(1017)。
|
|
17
|
+
|
|
18
|
+
### 书库「最热」
|
|
19
|
+
|
|
20
|
+
URL `fanqienovel.com/library/{筛选}/page_{n}?sort=hottes`:筛选段 `audience1`=男生、`audience0`=女生(不写=不分男女),`stat1`=连载中、`stat0`=已完结,`count0`=30 万字以下(`count1`-`count4` 依次 30-50 万、50-100 万、100-200 万、200 万以上),全不选时是 `all`。每页 18 本,按热度排。
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
node scripts/fanqie-rank-scraper.js --source library --channel all --outdir {输出目录} # 男、女各一份:连载中、30 万字以下、前 3 页
|
|
24
|
+
node scripts/fanqie-rank-scraper.js --source library --channel mix --pages 5 --outdir {输出目录} # 不分男女
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`--stat 1|0|any`、`--count 0-4|any` 改筛选。默认组合(连载中、30 万字以下)是**正在起量的新书**:阅读榜被老书占住时,看它才知道新书里什么题材在冒头,文件名与列表名带「新书」,聚合时算进「新书榜」列。列表页书名和数字都被字体反爬,脚本只按页面顺序取 bookId,书名、题材、在读、字数都由详情页解码。
|
|
28
|
+
|
|
29
|
+
## 字段
|
|
30
|
+
|
|
31
|
+
排名、书名、作者、题材(详情页 categoryV2)、状态、在读(核心指标,聚合的热度口径)、字数、标签(简介开头 `【种田+慢热+西幻】`,题材细分的真实信号)、最新更新、bookId、作品页链接、简介。详情页没有数字评分,不输出评分。解码失败的书名显示 `(标题待解析)`,bookId 与链接保留供回查。
|
|
32
|
+
|
|
33
|
+
## 故障排查
|
|
34
|
+
|
|
35
|
+
文件头 `数据质量` 标 `[标题解析异常]`(书名多为 `(标题待解析)`):多为详情页结构变动或被登录/验证页拦截。在已登录的 Chrome 里手动打开任一 `https://fanqienovel.com/page/{bookId}`,确认页面正常、不是验证页;控制台报 `CDP 无响应` 就按 browser-cdp 重新启动 Chrome。确认正常后重采。
|
|
36
|
+
|
|
37
|
+
## 分析维度
|
|
38
|
+
|
|
39
|
+
| 维度 | 看什么 |
|
|
40
|
+
|---|---|
|
|
41
|
+
| 阅读榜 | 流量与读者规模,在读数为核心指标 |
|
|
42
|
+
| 新书榜 | 新题材、新风向的早期信号(聚合表的「新书榜」列) |
|
|
43
|
+
| 题材分布 | 各品类在读数集中度(热度中位对照本数) |
|
|
44
|
+
| 在读数差距 | 同题材头部与腰部的流量差 |
|
|
45
|
+
| 标签热词 | 【】内标签组合揭示细分卖点 |
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# 晋江:采集与分析
|
|
2
|
+
|
|
3
|
+
作者选了晋江才读本文。需先用 `/browser-cdp` 启动 Chrome。脚本两步走:① 列表页 `topten.php` 取频道分组与书名/作者,从书名链接取 `novelid`(排除「X 向《书名》投了 Y」霸王票记录);② 进 `onebook.php?novelid=` 详情页补采核心指标。晋江是 gb18030 编码,脚本已按此解码;详情指标公开,无需登录。
|
|
4
|
+
|
|
5
|
+
## 榜单与命令
|
|
6
|
+
|
|
7
|
+
URL `jjwxc.net/topten.php?orderstr={榜单ID}&t={频道ID}`(t=0 全站)。orderstr:收入金榜 12 / 月榜 7 / 季度榜 8 / 完结金榜 14 / 新手金榜 15 / 千字金榜 17。
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node scripts/jjwxc-rank-scraper.js --type 12 --outdir {输出目录} # 列表+详情(默认每频道前 10,详情上限 100)
|
|
11
|
+
node scripts/jjwxc-rank-scraper.js --type 12 --top 15 --detail-limit 60 # 调整每频道本数/详情总量
|
|
12
|
+
node scripts/jjwxc-rank-scraper.js --type 12 --list-only # 只采列表(快,无核心指标)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
默认组合:收入金榜 + 月榜。
|
|
16
|
+
|
|
17
|
+
## 字段与硬性要求
|
|
18
|
+
|
|
19
|
+
频道(聚合时当题材)、排名、书名、作者、novelid、收藏数(核心,聚合的热度口径)、营养液、积分、字数、状态、作品页链接。必须有详情页核心指标(收藏、营养液或积分、字数):用了 `--list-only` 或文件头标 `[仅列表-无核心指标]` 的数据撑不起下面的分析,视为不合格,要重采。
|
|
20
|
+
|
|
21
|
+
## 分析维度
|
|
22
|
+
|
|
23
|
+
| 维度 | 看什么 |
|
|
24
|
+
|---|---|
|
|
25
|
+
| 金榜 | 综合热度最高 |
|
|
26
|
+
| 季度榜 | 中期趋势 |
|
|
27
|
+
| 红字/黑字 | 积分与负面评价 |
|
|
28
|
+
| 收藏/营养液 | 女频市场的核心指标 |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 起点:采集与分析
|
|
2
|
+
|
|
3
|
+
作者选了起点才读本文。默认不需要 Chrome:脚本先读 `https://m.qidian.com` 移动端 SSR pageContext,移动端不可用时才回退 CDP/PC 页面,文件头 `抓取方式` 标 `mobile-ssr` 或 `cdp-pc`。
|
|
4
|
+
|
|
5
|
+
## 榜单与命令
|
|
6
|
+
|
|
7
|
+
`node scripts/qidian-rank-scraper.js --type {榜单} --outdir {输出目录}`(`--type all` 全采;`--mode mobile|cdp` 强制一种方式;`--detail yes` 进详情页补标签、简介、最新更新)
|
|
8
|
+
|
|
9
|
+
| 榜单 | --type | URL | 看什么 |
|
|
10
|
+
|------|--------|-----|--------|
|
|
11
|
+
| 新人签约新书榜 | newsign | qidian.com/rank/newsign/ | 新人签约作品,新风向 |
|
|
12
|
+
| 签约作者新书榜 | signnewbook | qidian.com/rank/signnewbook/ | 已签约作者新作风向 |
|
|
13
|
+
| 公众作者新书榜 | pubnewbook | qidian.com/rank/pubnewbook/ | 发现潜力作者 |
|
|
14
|
+
| 新人作者新书榜 | newauthor | qidian.com/rank/newauthor/ | 新人赛道 |
|
|
15
|
+
| 三江推荐 | sanjiang | qidian.com/sanjiang/ | 编辑精选,按周分组(非 /rank/ 路径) |
|
|
16
|
+
| 月票榜 | yuepiao | qidian.com/rank/yuepiao/ | 付费认可度最高 |
|
|
17
|
+
| 畅销榜 | hotsales | qidian.com/rank/hotsales/ | 真金白银投票 |
|
|
18
|
+
| 阅读指数榜 | readindex | qidian.com/rank/readindex/ | 阅读量综合 |
|
|
19
|
+
| 收藏榜 | collect | qidian.com/rank/collect/ | 读者关注热度 |
|
|
20
|
+
| 原创推荐榜 | recom | qidian.com/rank/recom/ | 平台推荐 |
|
|
21
|
+
|
|
22
|
+
默认组合:新人签约新书榜 + 签约作者新书榜 + 月票榜 + 畅销榜。文件名 `起点{榜单}_{YYYYMMDD}.md`。
|
|
23
|
+
|
|
24
|
+
## 字段
|
|
25
|
+
|
|
26
|
+
排名、书名、作者、题材(主类·子类;聚合时主类作题材、子类进标签)、状态、签约、收费模式、字数、总推荐(聚合的热度口径)、标签/最新更新/简介(详情页)、作品页链接。额外必填:题材、字数、总推荐,缺的写 `[待补]`。
|
|
27
|
+
|
|
28
|
+
## 分析维度
|
|
29
|
+
|
|
30
|
+
| 维度 | 看什么 |
|
|
31
|
+
|---|---|
|
|
32
|
+
| 月票榜/畅销榜 | 付费认可与持续追读,最硬的指标 |
|
|
33
|
+
| 各新书榜 | 新作者、新题材的早期信号;和月票/畅销榜的题材占比对照 |
|
|
34
|
+
| 三江推荐 | 平台力推方向 |
|
|
35
|
+
| 追读率 | 决定推荐位分配(榜单上看不到,只能从月票/畅销间接推断) |
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 七猫:采集与分析
|
|
2
|
+
|
|
3
|
+
作者选了七猫才读本文。需先用 `/browser-cdp` 启动 Chrome;页面无明显反爬,脚本滚动加载,男生榜/女生榜 tab 切换(失败重试)。
|
|
4
|
+
|
|
5
|
+
## 榜单与命令
|
|
6
|
+
|
|
7
|
+
入口 qimao.com/paihang:大热榜(日榜/月榜)、新书榜、完结榜、收藏榜、更新榜。
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node scripts/qimao-rank-scraper.js --channel male --type hot --period day --outdir {输出目录} # 男生大热榜日榜
|
|
11
|
+
node scripts/qimao-rank-scraper.js --channel all --type all --outdir {输出目录} # 全部
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
大热榜用 `--period day|month|all` 选日榜、月榜或两者(默认 day),周期进文件头与文件名;其他榜不分周期。默认组合:男频大热榜日榜 + 女频大热榜日榜。
|
|
15
|
+
|
|
16
|
+
## 字段
|
|
17
|
+
|
|
18
|
+
排名、书名、作者、题材、分类标签(聚合时进标签)、状态、字数(万字)、热度(核心指标,聚合的热度口径)、最新更新、作品页链接、简介。文件头带 `数据质量`、`有效条目`、`问题摘要`、链接与热度命中数;热度缺失写 `[待补]`。
|
|
19
|
+
|
|
20
|
+
## 分析维度
|
|
21
|
+
|
|
22
|
+
| 维度 | 看什么 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| 大热榜 | 热度排名,流量集中度 |
|
|
25
|
+
| 新书榜 | 新流量风口 |
|
|
26
|
+
| 完结榜 | 长尾价值作品 |
|
|
27
|
+
| 热度 | 七猫核心指标,读者活跃度 |
|
|
@@ -49,6 +49,10 @@ Phase 5 用本文方法产出 `选题决策.md`——市场角度的选题初稿
|
|
|
49
49
|
# 选题决策:{平台/方向}
|
|
50
50
|
- 扫榜日期:{YYYYMMDD} # 数据新鲜度;写作读取时若过期会提示复扫
|
|
51
51
|
- 数据来源:{榜单文件名 / 内置知识}
|
|
52
|
+
- 聚合表:扫榜聚合.md # 同目录;内置知识模式写「无」
|
|
53
|
+
|
|
54
|
+
## 扫榜结论:{平台名称}
|
|
55
|
+
{Phase 4 报告正文,Phase 4 写入;Phase 5 只读不改}
|
|
52
56
|
|
|
53
57
|
## 推荐选题
|
|
54
58
|
|
|
@@ -73,6 +77,6 @@ Phase 5 用本文方法产出 `选题决策.md`——市场角度的选题初稿
|
|
|
73
77
|
|
|
74
78
|
## 交付
|
|
75
79
|
|
|
76
|
-
1.
|
|
77
|
-
2.
|
|
80
|
+
1. 写到本次扫榜的输出目录 `扫榜/{YYYYMMDD}/`(和榜单、`扫榜聚合.md` 同目录):`{outdir}/选题决策.md`。Phase 4 先写文件头和「扫榜结论」,Phase 5 再写「推荐选题」;重跑时整节替换,不追加第二份。扫榜常在还没有小说项目的目录下跑,所以产物落在这里,不直接写进项目。
|
|
81
|
+
2. 告知用户路径,并说明下一步:「开书时如果小说项目就建在扫榜时所在的文件夹里、或和它同级,`/story-long-write` 会自动找到并让你确认;隔得更远就把 `选题决策.md` 复制到小说项目根目录,或开书时把路径粘给它。想确认"能爆的原因"就先 `/story-long-analyze` 拆对标书,拆完会回填。」
|
|
78
82
|
3. 后续衔接(本文件不执行,仅说明):拆文在汇总报告产出后回填对应选题的"能爆的原因";写作 Phase 1 读取 `选题决策.md` 作为开书起点。
|