{"slug":"liuluhaixiu-davinci-autoedit-agent-e49942","title":"DaVinci \u81ea\u52a8\u526a\u8f91\u5168\u6d41\u7a0b","description":"\u4ece\u7528\u6237\u6307\u5b9a\u7d20\u6750\u51fa\u53d1\uff0c\u7ecf\u5ba1\u6279\u95e8\u5b8c\u6210\u626b\u63cf\u3001\u62bd\u5e27\u5206\u6790\u3001\u811a\u672c\u3001\u53ef\u9009TTS\u3001\u526a\u8f91\u84dd\u56fe\u4e0eResolve\u65f6\u95f4\u7ebf\u6784\u5efa\u548c\u5ba1\u8ba1\uff0c\u5e76\u8f93\u51fa\u8865\u62cd\u5efa\u8bae\u3002\u5f3a\u8c03\u6e90\u6587\u4ef6\u53ea\u8bfb\u3001\u9010\u95e8\u5ba1\u6279\u3001\u914d\u7f6e\u7531\u7528\u6237\u63d0\u4f9b\uff1b\u4e0d\u5047\u5b9a\u9898\u6750\u3001\u5e73\u53f0\u6216API\u3002","category":"\u526a\u8f91\u4e0e\u5305\u88c5","tags":["liuluhaixiu","\u526a\u8f91\u4e0e\u5305\u88c5"],"author":"liuluhaixiu","source_url":"https://github.com/liuluhaixiu/DaVinci-AutoEdit-Agent/blob/93cf371fad21900a2d475b57daa84c380560183f/skills/davinci-autoedit-agent/SKILL.md","license":"MIT","status":"published","verification":"source_reviewed","verification_notes":"\u5df2\u6838\u5bf9\u539f\u59cb\u4ed3\u5e93\u3001\u56fa\u5b9a\u63d0\u4ea4\u3001\u8bb8\u53ef\u3001\u6280\u80fd\u6b63\u6587\u4e0e\u5305\u7ed3\u6784\uff0c\u5e76\u8865\u5145\u4e2d\u6587\u6267\u884c\u9a8c\u6536\u8bf4\u660e\uff1b\u672a\u8fd0\u884c\u5305\u5185\u811a\u672c\u3002","revision":"3e8fa5400f7647fab1df1afe86fcd4e4","created_at":"2026-11-02T14:47:08+00:00","updated_at":"2026-11-02T14:47:08+00:00","source_repo":"liuluhaixiu/DaVinci-AutoEdit-Agent","source_path":"skills/davinci-autoedit-agent/SKILL.md","source_commit":"93cf371fad21900a2d475b57daa84c380560183f","source_updated_at":"2026-11-02T14:46:04+00:00","stars":0,"proxy_score":null,"score":null,"grade":null,"dimensions":{},"evaluation":{},"installs":0,"platforms":[],"formats":[],"category_slug":"packaging","category_name":"\u526a\u8f91\u4e0e\u5305\u88c5","quality":{"review_type":"text_and_package_review","readiness":"requires_setup","reviewed_at":"2026-11-02T14:46:04+00:00","review_summary":"\u6d41\u7a0b\u4e0e\u5ba1\u6279\u95e8\u8bbe\u8ba1\u5177\u4f53\u3001\u4ea7\u7269\u53ef\u68c0\u67e5\uff0c\u9002\u5408\u4f5c\u4e3a\u7aef\u5230\u7aef\u526a\u8f91\u5de5\u4f5c\u6d41\uff1b\u4f46\u5173\u952e\u811a\u672c\u672a\u8fd0\u884c\u9a8c\u8bc1\uff0c\u4e14\u4f9d\u8d56\u4e24\u4e2a\u672a\u968f\u5305\u63d0\u4f9b\u7684\u5916\u90e8\u6280\u80fd\u4e0eFFmpeg/Resolve\u73af\u5883\uff0c\u9700\u7528\u6237\u81ea\u5907\u5e76\u9010\u9879\u786e\u8ba4\u540e\u624d\u80fd\u6267\u884c\u3002","cost_notes":"LLM\u4e0eTTS\u4e3a\u7b2c\u4e09\u65b9\u4ed8\u8d39API\uff0c\u8d39\u7528\u4e0e\u989d\u5ea6\u9700\u7528\u6237\u81ea\u884c\u786e\u8ba4\uff1b\u5305\u5185\u672a\u62a5\u4ef7\u3002Resolve Studio\u4e3a\u4ed8\u8d39\u8f6f\u4ef6\uff0c\u9700\u7528\u6237\u81ea\u5907\u8bb8\u53ef\u3002","source_sha256":"14cdf59f2541fa251388b5f2d18bb06bd95eee52deb3db05cef5e5c479bb0cc6","prerequisites":["Python 3 \u8fd0\u884c\u73af\u5883\uff08\u811a\u672c\u4e3a.py\uff09","FFmpeg/FFprobe\uff08\u626b\u63cf\u4e0e\u62bd\u5e27\uff0cSKILL.md\u63d0\u53ca\u4f46\u672a\u968f\u5305\u63d0\u4f9b\uff09","\u53ef\u9009\uff1aLLM API\u4e0eTTS API\u7684\u7aef\u70b9\u3001\u5bc6\u94a5\u3001\u6a21\u578b\u3001\u97f3\u8272\uff0c\u7531\u7528\u6237\u81ea\u884c\u914d\u7f6e","\u53ef\u9009\uff1aDaVinci Resolve Studio\uff0c\u5916\u90e8\u811a\u672c\u8bbe\u4e3aLocal\uff0cMCP\u670d\u52a1\u6216\u5b98\u65b9Python API"],"checks":["media-manifest.json \u7684\u6587\u4ef6\u8ba1\u6570\u3001\u6309\u7c7b\u578b\u603b\u65f6\u957f\u3001\u4e0d\u53ef\u8bfb\u6587\u4ef6\u4e0e\u6392\u9664\u9879\u4e0e\u7528\u6237\u7ed9\u5b9a\u8def\u5f84\u4e00\u81f4","material-review.md \u4e2d\u6bcf\u4e2a\u5f3a/\u5f31\u955c\u5934\u5224\u65ad\u90fd\u80fd\u5bf9\u5e94\u5230\u5177\u4f53\u5e27\u6216\u65f6\u95f4\u7801\uff0c\u800c\u975e\u6cdb\u6cdb\u63cf\u8ff0","edit-blueprint.json \u6bcf\u955c\u542b\u6e90\u8def\u5f84\u3001\u6e90\u5165\u51fa\u70b9\u3001\u65f6\u95f4\u7ebf\u5165\u51fa\u70b9\u3001\u7528\u9014\u3001\u97f3\u9891\u7b56\u7565\u3001\u7f6e\u4fe1\u5ea6\uff0c\u4e14\u6e90\u8303\u56f4\u4e0d\u8d85\u51fa\u7d20\u6750\u65f6\u957f","validate_blueprint.py \u5b9e\u9645\u8fd0\u884c\u901a\u8fc7\uff0c\u4e14\u84dd\u56fe\u65f6\u957f\u4e0e\u76ee\u6807\u65f6\u957f\u504f\u5dee\u5728\u7528\u6237\u53ef\u63a5\u53d7\u8303\u56f4","resolve/\u5ba1\u8ba1\u62a5\u544a\u7684\u9879\u76ee\u540d\u3001\u65f6\u95f4\u7ebf\u540d\u3001\u5404\u8f68\u6761\u76ee\u6570\u3001\u8d77\u59cb\u5e27\u3001\u95f4\u9699/\u91cd\u53e0\u4e0e\u6e90\u8303\u56f4\u56de\u8bfb\uff0c\u4e0e\u5f53\u524d\u4ea4\u4ed8\u65f6\u95f4\u7ebf\u4e00\u81f4\uff1b\u5931\u8d25\u62a5\u544a\u4e0d\u5f97\u5f53\u4f5c\u4ea4\u4ed8","pickup-shot-report \u7684P0\u9879\u5747\u7ed9\u51fa\u811a\u672c\u6bb5\u843d/\u65f6\u95f4\u7801\u3001\u7f3a\u5931\u4fe1\u606f\u3001\u65e0\u73b0\u6709\u7d20\u6750\u8986\u76d6\u7684\u8bc1\u636e\u4e0e\u66ff\u4ee3\u65b9\u6848"],"limitations":["\u5305\u5185\u811a\u672c\u672a\u8fd0\u884c\uff0c\u65e0\u6cd5\u786e\u8ba4scan_media.py\u3001extract_frames.py\u3001analyze_frames.py\u3001generate_tts.py\u3001build_resolve_timeline.py\u3001validate_blueprint.py\u5728\u771f\u5b9e\u73af\u5883\u7684\u884c\u4e3a\u4e0e\u517c\u5bb9\u6027","\u4f9d\u8d56\u7684viral-video-writer\u4e0edavinci-resolve-editor\u4e3a\u5916\u90e8\u6280\u80fd\uff0c\u672a\u968f\u5305\u63d0\u4f9b\uff0c\u7f3a\u5931\u65f6\u811a\u672c\u4e0e\u6545\u4e8b\u9636\u6bb5\u65e0\u6cd5\u6309\u63cf\u8ff0\u8854\u63a5","FFmpeg/FFprobe\u3001Resolve Studio\u3001MCP\u670d\u52a1\u5747\u672a\u968f\u5305\u63d0\u4f9b\uff0c\u5b9e\u9645\u53ef\u7528\u6027\u9700\u7528\u6237\u73af\u5883\u9a8c\u8bc1","\u62bd\u5e27\u4e3a\u56fa\u5b9a\u95f4\u9694\uff0c\u957f\u955c\u5934\u4e0e\u5feb\u901f\u8f6c\u573a\u53ef\u80fd\u6f0f\u91c7\uff0c\u5206\u6790\u8d28\u91cf\u53d7\u6240\u9009LLM\u4e0e\u63d0\u793a\u5f71\u54cd"],"issues":["SKILL.md\u58f0\u660e\u4f7f\u7528bundled\u7684viral-video-writer\u4e0edavinci-resolve-editor\uff0c\u4f46\u6587\u4ef6\u6e05\u5355\u4e2d\u65e0\u8fd9\u4e24\u4e2a\u6280\u80fd\uff0c\u5c5e\u5916\u90e8\u4f9d\u8d56\u672a\u968f\u5305\u63d0\u4f9b","check_setup.py\u4ec5880\u5b57\u8282\uff0c\u662f\u5426\u8986\u76d6LLM/TTS/Resolve\u5168\u90e8\u68c0\u67e5\u9879\u5f85\u6838\u5b9e","agents/openai.yaml\u4ec5258\u5b57\u8282\uff0c\u5176\u58f0\u660e\u7684\u5de5\u5177\u80fd\u529b\u4e0eMCP\u6ce8\u518c\u5173\u7cfb\u5f85\u6838\u5b9e"],"missing_files":[]},"quality_url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/SHILIU-QUALITY.md","usage_guide":{"task":"\u628a\u4e00\u6279\u7528\u6237\u9009\u5b9a\u7684\u89c6\u9891/\u97f3\u9891/\u56fe\u7247\u7d20\u6750\uff0c\u6309\u5ba1\u6279\u95e8\u9010\u6b65\u505a\u6210\u53ef\u5ba1\u8ba1\u7684DaVinci Resolve\u526a\u8f91\uff1a\u626b\u63cf\u6e05\u5355\u3001\u7d20\u6750\u5ba1\u9605\u3001\u6545\u4e8b\u811a\u672c\u3001\u53ef\u9009\u914d\u97f3\u3001\u9010\u955c\u84dd\u56fe\u3001\u65f6\u95f4\u7ebf\u6784\u5efa\u4e0e\u4ea4\u4ed8\u5ba1\u8ba1\u3001\u8865\u62cd\u6e05\u5355\u3002","inputs":"\u7d20\u6750\u6587\u4ef6\u6216\u76ee\u5f55\u8def\u5f84\uff1b\u4e3b\u9898\u3001\u76ee\u7684\u3001\u53d7\u4f17\u3001\u5e73\u53f0\u3001\u76ee\u6807\u65f6\u957f\u3001\u753b\u5e45\u3001\u8bed\u8a00\uff1b\u7528\u6237\u81ea\u6709\u8282\u594f/\u526a\u8f91\u89c4\u8303\uff08\u53ef\u9009\uff09\uff1b\u662f\u5426\u8981\u65c1\u767d/TTS\uff1b\u662f\u5426\u8981\u5b9e\u9645\u5efaResolve\u65f6\u95f4\u7ebf\uff1b\u53ef\u9009LLM/TTS API\u914d\u7f6e\u4e0eResolve Studio\u73af\u5883\u3002","outputs":"\u8fd0\u884c\u76ee\u5f55\u4e0b\uff1aproject-brief.json\u3001scan/media-manifest.json\u3001review/frames\u4e0eframe-analysis\u3001review/material-review.json/.md\u3001script/\u3001tts/\uff08\u542f\u7528\u65f6\uff09\u3001blueprint/edit-blueprint.json\uff08\u7ecfvalidate_blueprint.py\u6821\u9a8c\uff09\u3001resolve/\u6784\u5efa\u4e0e\u5ba1\u8ba1\u62a5\u544a\u3001review/pickup-shot-report.md/.json\u3002","example_input":"\u7d20\u6750\u5728 /data/footage/trip \u4e0b\uff0c\u505a\u4e00\u67613\u5206\u949f\u6a2a\u5c4f\u4e2d\u6587\u65c5\u884c\u77ed\u7247\uff0c\u53d7\u4f17\u662f\u666e\u901a\u89c2\u4f17\uff0c\u5e73\u53f0B\u7ad9\uff1b\u4e0d\u8981\u65c1\u767d\uff0c\u7528\u73b0\u573a\u58f0\u548c\u97f3\u4e50\uff1b\u5148\u53ea\u51fa\u84dd\u56fe\uff0c\u4e0d\u5efa\u65f6\u95f4\u7ebf\u3002","example_output":"\u793a\u610f\uff1aproject-brief.json\uff08\u542b\u4e3b\u9898/\u65f6\u957f/\u753b\u5e45/\u65c1\u767d\u5173\u95ed\uff09\uff1bmedia-manifest.json\uff08\u6587\u4ef6\u6570\u3001\u603b\u65f6\u957f\u3001\u4e0d\u53ef\u8bfb\u9879\uff09\uff1bmaterial-review.md\uff08\u65f6\u95f4\u987a\u5e8f\u6e05\u5355\u3001\u5f3a\u955c\u5934\u53ca\u7406\u7531\u3001\u5f31/\u91cd\u590d\u7d20\u6750\uff09\uff1bscript/draft-v1.md\uff1bblueprint/edit-blueprint.json\uff08\u6bcf\u955c\u542b\u6e90\u8def\u5f84\u3001\u6e90\u5165\u51fa\u70b9\u3001\u65f6\u95f4\u7ebf\u5165\u51fa\u70b9\u3001\u7528\u9014\u3001\u97f3\u9891\u7b56\u7565\u3001\u7f6e\u4fe1\u5ea6\uff09\uff1bvalidate_blueprint.py\u901a\u8fc7\u8bb0\u5f55\uff1bpickup-shot-report.md\uff08P0/P1/P2\u5206\u7ea7\uff0c\u6ce8\u660e\u65e0\u5145\u5206\u73b0\u6709\u7d20\u6750\u8986\u76d6\u7684\u8bc1\u636e\uff09\u3002\u4ee5\u4e0a\u4e3a\u7ed3\u6784\u793a\u610f\uff0c\u975e\u5b9e\u9645\u7ed3\u679c\u3002"},"read_url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942","skill_url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/SKILL.md","download_url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/download","install_url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/install","files":[{"path":"LICENSE","bytes":1068,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/LICENSE"},{"path":"SHILIU-QUALITY.md","bytes":2986,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/SHILIU-QUALITY.md"},{"path":"SKILL.md","bytes":11257,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/SKILL.md"},{"path":"agents/openai.yaml","bytes":258,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/agents/openai.yaml"},{"path":"references/blueprint-schema.md","bytes":1148,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/references/blueprint-schema.md"},{"path":"references/configuration.md","bytes":1511,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/references/configuration.md"},{"path":"references/editorial-best-practices.md","bytes":1504,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/references/editorial-best-practices.md"},{"path":"references/pickup-shot-report.md","bytes":3524,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/references/pickup-shot-report.md"},{"path":"references/resolve-pitfalls.md","bytes":1315,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/references/resolve-pitfalls.md"},{"path":"scripts/analyze_frames.py","bytes":3012,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/analyze_frames.py"},{"path":"scripts/build_resolve_timeline.py","bytes":3632,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/build_resolve_timeline.py"},{"path":"scripts/check_setup.py","bytes":880,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/check_setup.py"},{"path":"scripts/extract_frames.py","bytes":2518,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/extract_frames.py"},{"path":"scripts/generate_tts.py","bytes":2429,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/generate_tts.py"},{"path":"scripts/scan_media.py","bytes":3079,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/scan_media.py"},{"path":"scripts/validate_blueprint.py","bytes":2414,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/scripts/validate_blueprint.py"},{"path":"shiliu-quality.json","bytes":2671,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/shiliu-quality.json"},{"path":"shiliu-source.json","bytes":293,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/shiliu-source.json"},{"path":"usage.json","bytes":1602,"url":"https://shiliuai.cn/api/v2/skills/liuluhaixiu-davinci-autoedit-agent-e49942/files/usage.json"}],"content":"---\nname: davinci-autoedit-agent\ndescription: End-to-end, approval-gated video editing workflow for arbitrary user-selected video, audio, and optional image media. Use when Codex must scan footage, review and classify material, develop a topic into a script, optionally generate TTS, create an edit blueprint, or build and audit a DaVinci Resolve timeline without assuming a genre, drive, date, camera, platform, or API provider.\n---\n\n# DaVinci AutoEdit Agent\n\nRun a source-safe workflow from media intake to an audited edit. Use the\nbundled `viral-video-writer` for scripts and `davinci-resolve-editor` for\nResolve operations.\n\n## Opening Message\n\nStart by telling the user:\n\n> I can inspect your chosen media, build a review and tag map, develop the\n> story and script, optionally prepare TTS, create a shot-by-shot edit\n> blueprint, and then build and audit a DaVinci Resolve timeline. I will show\n> you each creative artifact for approval before writing it or using it in the\n> next stage. Your source files remain unchanged.\n\nThen collect only missing information:\n\n1. Media path or paths. Accept any accessible video/audio directory or file.\n2. Topic, purpose, audience, platform, target duration, aspect ratio, and\n   language. Do not impose a subject.\n3. Ask: \"Do you have your own pacing rules, editing practices, references, or\n   non-negotiables?\" If yes, record them. If no, offer the best-practice\n   profile in `references/editorial-best-practices.md`.\n4. Ask whether narration/TTS is wanted. Do not assume it.\n5. Ask whether Resolve timeline construction is wanted or only a blueprint.\n\nSummarize the brief in chat and obtain approval before writing `project-brief.json`.\n\n## Approval Contract\n\nRead-only inspection does not require repeated confirmation. Before creating\nor replacing an artifact, show a concise preview, list the intended path, and\nask for explicit approval.\n\nUse these gates:\n\n1. Project brief\n2. Scan scope and exclusions\n3. Material review and taxonomy\n4. Story direction and script\n5. TTS plan, only when enabled\n6. Edit blueprint\n7. Resolve project/timeline write\n8. Color, audio, render, or source-derivative operations\n9. Pickup-shot and missing-material report\n\nApproval for one gate does not authorize later gates. Never overwrite a\nprevious approved artifact; create a versioned file unless replacement was\nexplicitly requested.\n\n## Configuration\n\nBefore API-backed work, run:\n\n```bash\npython scripts/check_setup.py\n```\n\nIf an API is missing, ask whether the user wants to configure it.\n\n- If yes, read `references/configuration.md`, explain the minimum variables,\n  help create `.env`, test connectivity without printing secrets, and ask\n  before the first billable request.\n- If no LLM API, continue with Codex-native visual inspection where available,\n  or produce a manual review worksheet.\n- If no TTS API or the user declines configuration, set `tts.enabled=false`\n  and remove TTS from the plan. Do not keep asking.\n- If Resolve MCP is absent, offer blueprint-only delivery or the documented\n  Resolve Python fallback.\n\nAll endpoints, keys, models, voices, reference audio, media roots, music\nlibraries, LUTs, and output paths are user configuration. Never ship private\ndefaults.\n\n## Workflow\n\n### 1. Create The Run Folder\n\nAfter brief approval, create:\n\n```text\nworkspace/runs/<project-slug>/\n  project-brief.json\n  scan/\n  review/\n  script/\n  tts/\n  blueprint/\n  resolve/\n```\n\n### 2. Scan Media\n\nPreview the paths and extension policy, then run:\n\n```bash\npython scripts/scan_media.py --input \"<path>\" --output \"<run>/scan\"\n```\n\nPass `--input` repeatedly for multiple roots. Accept common video, audio, and\nimage formats. Use FFprobe metadata when available. Do not filter by date or\ncamera unless the user requests it.\n\nReview `media-manifest.json` and confirm:\n\n- file counts and total duration by media type\n- unreadable or missing files\n- source groups/cameras inferred only as provisional labels\n- duplicate candidates\n- explicit exclusions\n\nObtain approval before analysis derivatives such as extracted frames.\n\nAfter approval, a provider-neutral fixed-interval extractor is available:\n\n```bash\npython scripts/extract_frames.py --manifest \"<run>/scan/media-manifest.json\" --output \"<run>/review/frames\"\n```\n\n### 3. Analyze And Review\n\nFor video, sample enough frames to represent scene changes and long takes.\nFor audio, inspect duration, channels, loudness when tooling supports it, and\ntranscribe only with permission. Treat images as selectable visual assets.\n\nWhen the user approved an API-backed batch, run:\n\n```bash\npython scripts/analyze_frames.py --frames-index \"<run>/review/frames/frames-index.json\" --output \"<run>/review/frame-analysis.jsonl\" --topic \"<user topic>\"\n```\n\nUse evidence-based labels: scene, people, action, dialogue, emotion, quality,\ncontinuity, source group, narrative use, and visible text. Never reject an\nentire camera family because derivative files or early samples look weak.\n\nProduce a review preview with:\n\n- chronological inventory\n- strongest moments and why\n- weak/duplicate/technical-risk material\n- camera/source counts and usable-duration estimates\n- possible story beats\n- unanswered factual questions\n\nAfter approval, write `review/material-review.json` and `.md`.\n\n### 4. Write The Story\n\nInvoke `viral-video-writer`. Give it the approved brief and material review,\nnot imagined footage. Present:\n\n- one core idea\n- 2-3 story structures\n- intended emotional curve\n- narration policy\n- five title/hook options when relevant\n\nAfter the user chooses a direction, draft the full script. Show it in chat and\nwrite only after approval.\n\n### 5. Decide TTS\n\nIf narration is disabled, skip this stage and design around dialogue, natural\nsound, music, captions, or silence.\n\nIf enabled, confirm provider, endpoint, model, voice/reference audio, language,\nsegmenting, pronunciation, and output directory. Preview `tts-plan.json`\nbefore any request. Generate only after approval:\n\n```bash\npython scripts/generate_tts.py --script \"<approved.json>\" --output \"<run>/tts\"\n```\n\nAudit every output for duration, clipping, empty files, pronunciation, and\nsegment order. Never bundle or publish a user's voice samples.\n\n### 6. Build The Blueprint\n\nCreate a source-grounded JSON blueprint following\n`references/blueprint-schema.md`. Every clip must identify source path,\nsource in/out, timeline in/out, purpose, audio policy, and confidence.\n\nApply the user's editing practice. If none was supplied, use\n`references/editorial-best-practices.md`.\n\nAudit before presenting:\n\n- target duration and pacing\n- source range within media duration\n- no accidental adjacent repetition across section boundaries\n- meaningful source/camera diversity where available\n- dialogue/narration synchronization\n- still-image duration handling\n- music and LUT authorization\n\nWrite the blueprint only after approval.\n\nValidate it before Resolve:\n\n```bash\npython scripts/validate_blueprint.py \"<run>/blueprint/edit-blueprint.json\"\n```\n\n### 7. Build In Resolve\n\nInvoke `davinci-resolve-editor`. Confirm Resolve is open and the current\nproject/timeline identity. Prefer the registered MCP tools; configured files\nalone do not prove MCP availability.\n\nBefore writing, state the exact new project/timeline name and affected tracks.\nCreate a new project or duplicated timeline for every substantial revision.\nDo not modify user audio, grades, BGM, or existing tracks without approval.\n\nWhen MCP is unavailable but the official Python API is configured, use:\n\n```bash\npython scripts/build_resolve_timeline.py \"<run>/blueprint/edit-blueprint.json\"\n```\n\n### 8. Audit Delivery\n\nRead back the final Resolve state. Verify:\n\n- actual project and timeline names\n- expected item counts by track\n- timeline frame origin\n- gaps/overlaps and one-frame boundary errors\n- source paths and source range bounds\n- source/camera ratios and zero-use available groups\n- adjacent repeated source\n- LUT write and readback, when authorized\n- audio writes actually succeeded, when authorized\n- report belongs to the currently delivered timeline\n\nA failed build report is not a delivery. Save the report under `resolve/` and\nsummarize unresolved manual work honestly.\n\n### 9. Recommend Pickup Shots\n\nAfter the edit audit, compare three sources of truth:\n\n1. The approved script, including every factual, emotional, and explanatory\n   beat it asks the viewer to understand.\n2. The finished timeline, including the actual image and sound covering each\n   beat.\n3. The complete reviewed media inventory, so an unused existing shot is not\n   incorrectly labeled as missing.\n\nIdentify all necessary but absent material. A shot is necessary when its\nabsence causes at least one of these problems:\n\n- a script claim has no visual or audible evidence\n- a person, object, place, process, or result is introduced without orientation\n- an action cannot be understood because setup, key step, reaction, or outcome\n  is missing\n- continuity, geography, chronology, or screen direction becomes confusing\n- dialogue/narration is covered by visibly unrelated filler\n- a transition conceals a structural gap rather than serving the story\n- a required product, safety, legal, tutorial, or factual detail is not shown\n- the ending lacks the promised payoff or proof\n\nDo not call every aesthetic opportunity \"necessary.\" Separate the report into:\n\n- `P0 Required`: the cut is misleading, unclear, unsupported, or incomplete\n  without it\n- `P1 Strongly Recommended`: comprehension or emotional payoff is materially\n  weaker without it\n- `P2 Optional Enhancement`: texture, polish, rhythm, or alternate coverage\n\nFor each recommendation include:\n\n- related script paragraph/line and finished timeline timecode\n- exact missing information or story function\n- evidence that no adequate existing source covers it\n- concrete subject, action, framing, camera movement, duration, orientation,\n  location, time-of-day, sound, and continuity requirements\n- whether original participants/location/props are required\n- safe and practical capture notes\n- an alternative using existing media, graphics, text, archival material,\n  voiceover rewrite, or script deletion when reshooting is impossible\n- expected editorial placement and what it replaces\n\nUse `references/pickup-shot-report.md`. Preview the findings in chat and obtain\napproval before writing:\n\n```text\nreview/pickup-shot-report.md\nreview/pickup-shot-report.json\n```\n\nIf nothing necessary is missing, say so explicitly and list only genuinely\nuseful optional enhancements. Never invent continuity details merely to make a\npickup request sound precise.\n\n## Source Safety\n\n- Treat original media as immutable.\n- Write derivatives only under the approved run folder or staging directory.\n- Stop and inspect running FFmpeg/Python processes after interruptions.\n- Never delete original tracks after a partial audio bake.\n- Never expose API keys, private endpoints, personal paths, or voice samples.\n\n## References\n\n- Configuration: `references/configuration.md`\n- Best-practice edit profile: `references/editorial-best-practices.md`\n- Blueprint schema: `references/blueprint-schema.md`\n- Failure lessons and audits: `references/resolve-pitfalls.md`\n- Pickup-shot report: `references/pickup-shot-report.md`\n","usage":"\u8bfb\u53d6 SKILL.md\uff0c\u5e76\u6309\u9700\u8bfb\u53d6\u914d\u5957\u6587\u4ef6\uff1b\u4e0b\u8f7d ZIP \u83b7\u53d6\u5b8c\u6574\u5305\u3002\u6280\u80fd\u662f\u4efb\u52a1\u65b9\u6cd5\uff0c\u4e0d\u6388\u4e88\u65b0\u589e\u8d26\u6237\u3001\u4ed8\u8d39\u6216\u7cfb\u7edf\u6743\u9650\u3002"}
