{"slug":"wechat-director","title":"\u516c\u4f17\u53f7\u89c6\u89c9\u5bfc\u6f14","description":"\u4e3a\u516c\u4f17\u53f7\u6587\u7ae0\u8bbe\u8ba1\u54c1\u724c\u4e00\u81f4\u7684\u5206\u955c\u4e0e\u914d\u56fe\uff1a\u9ed8\u8ba4\u7535\u5f71\u611f\u955c\u5934\u52a0\u4e00\u5f20\u8ba4\u77e5\u8349\u56fe\uff0c\u8f93\u51fa\u53ef\u76f4\u63a5\u751f\u56fe\u7684\u753b\u9762\u8bf4\u660e\u3002","category":"\u526a\u8f91\u4e0e\u5305\u88c5","tags":["\u914d\u56fe","\u5206\u955c","\u89c6\u89c9"],"author":"DavidLam","source_url":"https://github.com/DavidLam-oss/wechat-writing-team/blob/main/skills/wechat-director/SKILL.md","license":"MIT","status":"published","verification":"source_reviewed","verification_notes":"\u6765\u6e90 DavidLam-oss/wechat-writing-team\uff08skills/wechat-director/SKILL.md\uff09\uff0c\u672c\u5730\u6253\u5305\u4e0a\u4f20\uff1b\u81ea\u8bc4 4/5\uff5c\u628a\u300c\u56fe\u6587\u914d\u56fe\u300d\u62c6\u6210\u955c\u5934\u8bed\u8a00\uff0c\u9002\u5408\u505a\u7edf\u4e00\u89c6\u89c9\u7684\u957f\u6587\u8d26\u53f7\u3002 \u672a\u6267\u884c\u5305\u5185\u811a\u672c\u3002","revision":"dec10a9ce3e04d25afe4fcdbf6a09dfb","created_at":"2026-10-29T05:44:45+00:00","updated_at":"2026-10-29T05:44:56+00:00","source_repo":"","source_path":"","source_commit":"","source_updated_at":"","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","usage_guide":{},"read_url":"https://shiliuai.cn/api/v2/skills/wechat-director","skill_url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/SKILL.md","download_url":"https://shiliuai.cn/api/v2/skills/wechat-director/download","install_url":"https://shiliuai.cn/api/v2/skills/wechat-director/install","files":[{"path":"SKILL.md","bytes":12273,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/SKILL.md"},{"path":"agents/openai.yaml","bytes":226,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/agents/openai.yaml"},{"path":"assets/IP_Reference.png","bytes":103127,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/assets/IP_Reference.png"},{"path":"references/io_schema.md","bytes":3543,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/references/io_schema.md"},{"path":"references/visual_prompts.md","bytes":4754,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/references/visual_prompts.md"},{"path":"scripts/brief_parser.py","bytes":4550,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/brief_parser.py"},{"path":"scripts/config_check.py","bytes":5633,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/config_check.py"},{"path":"scripts/console_encoding.py","bytes":354,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/console_encoding.py"},{"path":"scripts/director_core.py","bytes":4104,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/director_core.py"},{"path":"scripts/image_validation.py","bytes":4765,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/image_validation.py"},{"path":"scripts/obsidian_bridge.py","bytes":3992,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/obsidian_bridge.py"},{"path":"scripts/providers/__init__.py","bytes":47,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/providers/__init__.py"},{"path":"scripts/providers/gemini.py","bytes":8001,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/providers/gemini.py"},{"path":"scripts/providers/gpt_image2.py","bytes":8259,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/providers/gpt_image2.py"},{"path":"scripts/providers/siliconflow.py","bytes":1231,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/providers/siliconflow.py"},{"path":"scripts/validate_images.py","bytes":2729,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/validate_images.py"},{"path":"scripts/visualize.py","bytes":24212,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/visualize.py"},{"path":"scripts/workspace.py","bytes":4261,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/scripts/workspace.py"},{"path":"tests/fixtures/case_plain/Storyboard.md","bytes":3516,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/tests/fixtures/case_plain/Storyboard.md"},{"path":"tests/fixtures/case_titled/Storyboard.md","bytes":5296,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/tests/fixtures/case_titled/Storyboard.md"},{"path":"tests/fixtures/expected_parse.json","bytes":10716,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/tests/fixtures/expected_parse.json"},{"path":"tests/test_visualize.py","bytes":23709,"url":"https://shiliuai.cn/api/v2/skills/wechat-director/files/tests/test_visualize.py"}],"content":"---\nname: wechat-director\nversion: 2.5.1\ndescription: \u89c6\u89c9\u5bfc\u6f14 Skill\uff0c\u8d1f\u8d23\u4e3a\u6587\u7ae0\u8bbe\u8ba1\u54c1\u724c\u4e00\u81f4\u7684\u5206\u955c\u4e0e\u914d\u56fe\u3002\u5305\u542b\u9ed8\u8ba4\u7535\u5f71\u611f\u955c\u5934\u4e0e\u8ba4\u77e5\u8349\u56fe\u7b2c\u4e8c\u955c\u5934\uff0c\u8f93\u51fa Storyboard.md \u5e76\u53ef\u8c03\u7528\u7ed8\u56fe\u811a\u672c\u3002\ntriggers:\n  - /draw\n  - /visual\n  - /\u914d\u56fe\nparameters:\n  - name: input_file\n    type: string\n    required: true\n    description: \u6587\u7ae0\u8349\u7a3f\u6587\u4ef6\u8def\u5f84 (Draft) \u6216\u5df2\u5f52\u6863\u6587\u7ae0\u8def\u5f84\n---\n# \u89c6\u89c9\u5bfc\u6f14\u7cfb\u7edf (WeChat Director)\n\n**\u6838\u5fc3\u4f7f\u547d**: \u4e3a\u6587\u7ae0\u8d4b\u4e88**\u54c1\u724c\u4e00\u81f4\u7684\u89c6\u89c9\u53d9\u4e8b**\u3002\u5c01\u9762\u4fdd\u6301\u7535\u5f71\u611f\uff0c\u6b63\u6587\u56fe\u53ef\u4ee5\u5728\u9ed8\u8ba4\u7535\u5f71\u611f\u955c\u5934\u4e0e\u8ba4\u77e5\u8349\u56fe\u7b2c\u4e8c\u955c\u5934\u4e4b\u95f4\u81ea\u52a8\u5207\u6362\u3002\n\n> **Tip**: \u5efa\u8bae\u5728 **\u5f52\u6863\u524d** (Stage 3) \u8fd0\u884c\u672c Skill\uff0c\u9ed8\u8ba4\u5c06\u56fe\u7247\u4fdd\u5b58\u5728\u9879\u76ee `zpicture.assets/` \u76ee\u5f55\u3002\u82e5\u5728\u5f52\u6863\u540e\u8fd0\u884c\uff0c\u8bf7\u52a1\u5fc5\u6307\u5b9a `--output-dir` \u4ee5\u514d\u8def\u5f84\u9519\u8bef\u3002\n\n> **\u8fd0\u884c\u73af\u5883**\uff1a\n> - \u811a\u672c\u9700\u8981 **Python 3.10+**\uff1b\u56fe\u7247\u62fc\u63a5\u4e0e\u5c3a\u5bf8\u9a8c\u6536\u9700\u8981 **Pillow**\u3002\n> - `--brief` / `--draft` \u7b49 CLI \u8def\u5f84\u76f8\u5bf9**\u5f53\u524d\u8c03\u7528\u76ee\u5f55**\uff1b\u6280\u80fd\u8d44\u6e90\uff08`assets/`\u3001`providers/`\uff09\u4ee5**\u6280\u80fd\u81ea\u8eab\u76ee\u5f55**\u4e3a\u57fa\u51c6\u89e3\u6790\uff0c\u4e0d\u4f7f\u7528\u673a\u5668\u7edd\u5bf9\u8def\u5f84\uff0cmacOS / Windows / Linux \u901a\u7528\u3002\n> - \u6587\u7ae0\u5de5\u4f5c\u533a\u6839\uff08`conductor/api_keys.json` \u7684\u57fa\u51c6\uff09\u7531 `scripts/workspace.py` \u89e3\u6790\uff1a**`--workspace` \u663e\u5f0f > `WECHAT_WORKSPACE` \u73af\u5883\u53d8\u91cf > \u5f53\u524d\u76ee\u5f55\u7ed3\u6784\u6807\u8bb0 > `--brief` \u5411\u4e0a\u7ed3\u6784\u6807\u8bb0 > \u62a5\u9519**\u3002\u5b9a\u4f4d\u4e0d\u660e\u65f6\u8bf7\u663e\u5f0f\u4f20 `--workspace`\u3002\n\n## \ud83c\udfad \u6838\u5fc3\u89d2\u8272: \u5f20\u827a\u8c0b (Visual Director)\n\n*   **\u98ce\u683c**: Flat Vector Illustration with Sticker Style (\u6241\u5e73\u77e2\u91cf\u63d2\u753b + \u8d34\u7eb8\u98ce\u683c)\n*   **IP \u5f62\u8c61**:\n    *   **\u63cf\u8ff0**: A bald Asian male (early 30s), wearing **signature bright red round-framed glasses**, neat goatee beard on chin. Character has **thick white outlines** around the entire silhouette (sticker style).\n    *   **\u4e00\u81f4\u6027**: \u7ea2\u8272\u5706\u6846\u773c\u955c\u3001\u5149\u5934\u3001\u5c71\u7f8a\u80e1\u3001\u767d\u8272\u63cf\u8fb9\u5fc5\u987b\u4fdd\u6301\u4e00\u81f4\u3002\n    *   **\u53c2\u8003\u56fe**: `assets/IP_Reference.png`\uff08\u76f8\u5bf9**\u6280\u80fd\u6839\u76ee\u5f55**\uff1b\u811a\u672c\u4ee5\u6280\u80fd\u76ee\u5f55\u5411\u4e0a\u89e3\u6790\uff0c\u6280\u80fd\u88ab\u590d\u5236\u5230\u4efb\u610f\u4f4d\u7f6e\u4ecd\u6b63\u786e\uff0c\u4e0d\u4f7f\u7528\u673a\u5668\u7edd\u5bf9\u8def\u5f84\uff09\u3002\n\n## \ud83c\udfa5 \u53cc\u955c\u5934\u7cfb\u7edf (Visual Lenses)\n\n### 1. \u9ed8\u8ba4\u7535\u5f71\u611f\u955c\u5934 (Default Cinematic)\n\n*   **\u9002\u7528**: \u4e3b\u89c6\u89c9\u5c01\u9762\u3001\u4e2a\u4eba\u6545\u4e8b\u3001\u60c5\u7eea\u8f6c\u6298\u3001\u590d\u76d8\u611f\u609f\u3001\u9700\u8981\u6c1b\u56f4\u4e0e\u573a\u666f\u7684\u6bb5\u843d\u3002\n*   **\u6c14\u8d28**: \u7535\u5f71\u6784\u56fe\u3001\u6e29\u6696\u6280\u672f\u611f\u3001\u6241\u5e73\u77e2\u91cf\u8d34\u7eb8\u3001\u573a\u666f\u5316\u53d9\u4e8b\u3002\n*   **\u89c4\u5219**: Part A \u4e3b\u89c6\u89c9\u4e0e Part B \u4fa7\u8fb9\u680f\u9ed8\u8ba4\u4f7f\u7528\u672c\u955c\u5934\uff0c\u4fdd\u6301\u8bfb\u8005\u719f\u6089\u7684\u54c1\u724c\u95e8\u9762\u3002\n\n### 2. \u8ba4\u77e5\u8349\u56fe\u7b2c\u4e8c\u955c\u5934 (Cognitive Sketch)\n\n*   **\u9002\u7528**: \u6559\u7a0b\u3001\u65b9\u6cd5\u8bba\u3001\u63d2\u4ef6\u4ecb\u7ecd\u3001\u5de5\u4f5c\u6d41\u3001\u5e38\u89c1\u5751\u3001\u5224\u65ad\u6807\u51c6\u3001\u62bd\u8c61\u6982\u5ff5\u89e3\u91ca\u3002\n*   **\u6c14\u8d28**: \u539f\u98ce\u683c\u5185\u7684\u767d\u677f\u89e3\u91ca\u89c6\u89d2\uff0c\u800c\u4e0d\u662f\u6362\u753b\u5e08\u3002\u4fdd\u7559\u7ea2\u773c\u955c IP\u3001\u6241\u5e73\u63d2\u753b\u3001\u767d\u8272\u8d34\u7eb8\u63cf\u8fb9\u548c 3:4 \u6b63\u6587\u5c3a\u5bf8\u3002\n*   **\u753b\u6cd5**: \u4e00\u5f20\u56fe\u53ea\u8bb2\u4e00\u4e2a\u6838\u5fc3\u52a8\u4f5c\u6216\u7ed3\u6784\u3002\u5c11\u80cc\u666f\u3001\u5c11\u9053\u5177\u3001\u77ed\u4e2d\u6587\u6807\u6ce8\uff0c\u7528\u4e00\u4e2a\u4f4e\u79d1\u6280\u9690\u55bb\u89e3\u91ca\u590d\u6742\u6982\u5ff5\u3002\n*   **IP \u8981\u6c42**: IP \u5fc5\u987b\u627f\u62c5\u6838\u5fc3\u52a8\u4f5c\uff0c\u4f8b\u5982\u62c9\u7ebf\u3001\u5206\u62e3\u3001\u4fee\u8865\u3001\u642d\u6865\u3001\u79f0\u91cd\u3001\u5b88\u95e8\u3001\u62c6\u5305\u3001\u628a\u5185\u5bb9\u585e\u8fdb\u4e00\u4e2a\u602a\u88c5\u7f6e\uff1b\u4e0d\u80fd\u53ea\u662f\u7ad9\u5728\u89d2\u843d\u91cc\u6446 pose\u3002\n*   **\u7981\u6b62**: \u4e0d\u8981\u5207\u6362\u6210\u5176\u5b83 IP\u3001\u9ed1\u8272\u5c0f\u602a\u7269\u3001\u7eaf\u624b\u7ed8\u7ebf\u7a3f\u6216 PPT \u4fe1\u606f\u56fe\u3002\n\n### \u81ea\u52a8\u5224\u65ad\u4e0e\u624b\u52a8\u8986\u76d6\n\n*   **\u9ed8\u8ba4\u7b56\u7565**: \u81ea\u52a8\u5224\u65ad\u6b63\u6587\u56fe\u955c\u5934\u3002\u5c01\u9762\u4fdd\u6301\u9ed8\u8ba4\u7535\u5f71\u611f\uff0c\u6b63\u6587\u56fe\u6839\u636e\u6587\u7ae0\u5185\u5bb9\u9009\u62e9\u3002\n*   **\u4f18\u5148\u8ba4\u77e5\u8349\u56fe**: \u5b89\u88c5/\u914d\u7f6e/\u6392\u9519/\u6b65\u9aa4\u6559\u7a0b\u3001\u529f\u80fd\u89e3\u91ca\u3001\u6d41\u7a0b\u95ed\u73af\u3001\u5e38\u89c1\u5751\u3001\u65b9\u6cd5\u5206\u5c42\u3001\u62bd\u8c61\u6982\u5ff5\u53ef\u89c6\u5316\u3002\n*   **\u4f18\u5148\u9ed8\u8ba4\u7535\u5f71\u611f**: \u4eba\u7269\u60c5\u7eea\u3001\u751f\u6d3b\u573a\u666f\u3001\u6545\u4e8b\u63a8\u8fdb\u3001\u611f\u609f\u590d\u76d8\u3001\u9700\u8981\u6c1b\u56f4\u7559\u767d\u7684\u6bb5\u843d\u3002\n*   **\u624b\u52a8\u8986\u76d6**: \u82e5\u7528\u6237\u6307\u5b9a\"\u6b63\u6587\u56fe\u7528\u8ba4\u77e5\u8349\u56fe\u6a21\u5f0f\"\u3001\"\u4fdd\u6301\u9ed8\u8ba4\u89c6\u89c9\"\u3001\"\u63d2\u56fe 2 \u548c 3 \u7528\u8ba4\u77e5\u8349\u56fe\"\uff0c\u5fc5\u987b\u4f18\u5148\u670d\u4ece\u7528\u6237\u6307\u5b9a\u3002\n\n## \ud83d\ude80 \u5de5\u4f5c\u6d41\u7a0b\n\n### Step 1: \u5206\u955c\u8bbe\u8ba1 (Storyboard)\n\n\u9605\u8bfb\u8f93\u5165\u6587\u7ae0\uff0c\u6839\u636e**\u6587\u7ae0\u7bc7\u5e45**\u3001**\u60c5\u7eea\u8282\u594f**\u4e0e**\u8ba4\u77e5\u951a\u70b9**\uff0c\u8bbe\u8ba1**\u9002\u91cf**\u7684\u63d2\u56fe\u4f4d\u7f6e\uff0c\u5e76\u4e3a\u6bcf\u5f20\u56fe\u5224\u65ad\u89c6\u89c9\u955c\u5934\u3002\n\n*   **\u6570\u91cf\u539f\u5219**: **\u8ddf\u968f\u60c5\u7eea\uff0c\u4e0d\u8bbe\u9650**\u3002\u4e0d\u8981\u523b\u610f\u8ba1\u7b97\u5b57\u6570\u3002\u5728\u6bcf\u4e2a\u9700\u8981\"\u89c6\u89c9\u547c\u5438\"\u7684**\u7559\u767d\u5904**\u6216**\u60c5\u7eea\u8f6c\u6298\u70b9** (Emotional Twist) \u63d2\u5165\u3002\u5bf9\u4e8e 1500-2000 \u5b57\u7684\u6587\u7ae0\uff0c\u901a\u5e38 4-6 \u5f20\u4e3a\u5b9c\u3002\n*   **\u6838\u5fc3\u76ee\u6807**: \u7528\u753b\u9762\u53bb\u627f\u63a5\u6587\u5b57\u65e0\u6cd5\u8868\u8fbe\u7684\u7559\u767d\uff1b\u6559\u7a0b/\u65b9\u6cd5\u8bba\u5185\u5bb9\u5219\u4f18\u5148\u628a\u5173\u952e\u5224\u65ad\u3001\u6d41\u7a0b\u3001\u72b6\u6001\u6216\u9690\u55bb\u753b\u6210\u4e00\u4e2a\u6e05\u6670\u52a8\u4f5c\u3002\n\n**\u8f93\u51fa\u4ea4\u4ed8\u7269**: `Storyboard.md`\u3002\n\n> \u26a0\ufe0f **\u91cd\u8981**: \u8f93\u51fa\u683c\u5f0f\u5fc5\u987b\u4e25\u683c\u9075\u5faa `references/io_schema.md` \u4e2d\u5b9a\u4e49\u7684 Markdown \u7ed3\u6784\u4e0e Regex \u89c4\u5219\u3002\n\n**\u8bbe\u8ba1\u8981\u6c42**:\n1.  **IP \u6807\u8bb0**: \u6bcf\u4e2a Code Block \u524d\u5fc5\u987b\u6839\u636e\u5185\u5bb9\u5224\u65ad\u662f\u5426\u9700\u8981 IP \u5f62\u8c61 (`(IP\u5f62\u8c61: \u662f/\u5426)`)\u3002\n    *   **\u91cd\u8981**: \u82e5\u6807\u8bb0\u4e3a `(IP\u5f62\u8c61: \u662f)`\uff0c\u5219\u751f\u6210\u7684 Prompt **\u5fc5\u987b\u5305\u542b**\u4e0a\u65b9\u5b9a\u4e49\u7684\u5b8c\u6574 IP \u5f62\u8c61\u63cf\u8ff0 (A bald Asian male...)\u3002\n2.  **\u89c6\u89c9\u6a21\u5f0f\u6807\u8bb0**: Part C \u6bcf\u5f20\u5185\u6587\u914d\u56fe\u5efa\u8bae\u5728 IP \u6807\u8bb0\u540e\u589e\u52a0 `(\u89c6\u89c9\u6a21\u5f0f: \u9ed8\u8ba4\u7535\u5f71\u611f)` \u6216 `(\u89c6\u89c9\u6a21\u5f0f: \u8ba4\u77e5\u8349\u56fe)`\u3002\n    *   **\u81ea\u52a8\u5224\u65ad**: \u672a\u624b\u52a8\u6307\u5b9a\u65f6\uff0c\u6839\u636e\u6587\u7ae0\u7c7b\u578b\u4e0e\u6bb5\u843d\u5185\u5bb9\u81ea\u52a8\u9009\u62e9\u3002\n    *   **\u54c1\u724c\u4e00\u81f4\u6027**: \u8ba4\u77e5\u8349\u56fe\u4ecd\u5fc5\u987b\u4fdd\u7559\u7ea2\u773c\u955c IP \u4e0e\u6241\u5e73\u8d34\u7eb8\u4f53\u7cfb\uff0c\u4e0d\u5f97\u6362\u6210\u5176\u5b83\u89d2\u8272\u6216\u5b8c\u5168\u4e0d\u540c\u753b\u98ce\u3002\n3.  **\u5c3a\u5bf8\u89c4\u8303 (Aspect Ratio)**:\n    *   **Part A (\u4e3b\u89c6\u89c9)**: \u5fc5\u987b\u5728\u5f00\u5934\u6807\u660e `movie composition, 2.35:1 aspect ratio`\uff0c\u5e76\u5728\u7ed3\u5c3e\u4f7f\u7528 `--ar 2.35:1`\u3002**\u7981\u6b62\u63d0\u4f9b Context \u5b57\u6bb5** (No Context needed)\u3002\n    *   **Part B (\u4fa7\u8fb9\u680f)**: \u7eaf\u8272\u80cc\u666f (\u9700\u63d0\u53d6\u4e3b\u89c6\u89c9\u4e3b\u8272)\uff0c\u5fc5\u987b\u6807\u660e `1:1 aspect ratio`\u3002**\u7981\u6b62\u63d0\u4f9b Context \u5b57\u6bb5** (No Context needed)\u3002\n    *   **Part C (\u914d\u56fe)**: \u5fc5\u987b\u5728\u5f00\u5934\u6807\u660e `portrait composition, 3:4 aspect ratio`\u3002\u8fd9\u662f\u624b\u673a\u9605\u8bfb\u6700\u4f73\u6bd4\u4f8b\u3002\n    *   **Context (\u951a\u70b9)**: \u6bcf\u4e00\u5f20**\u5185\u6587\u914d\u56fe (Part C)** \u90fd\u5fc5\u987b\u63d0\u4f9b `Context` \u5b57\u6bb5\u3002\n        *   **\u5b9a\u4e49**: \u8be5\u56fe\u7247\u5e94\u63d2\u5165\u4f4d\u7f6e\u7684**\u4e0a\u4e00\u6bb5\u843d\u7684\u6700\u540e\u4e00\u53e5\u8bdd**\u3002\n        *   **\u8981\u6c42**: \u5fc5\u987b\u662f\u539f\u6587\u4e2d\u7684\u539f\u53e5\uff0c\u786e\u4fdd\u552f\u4e00\u6027\u3002\n        *   **\u683c\u5f0f**: `> Context: \"\u539f\u6587\u53e5\u5b50...\"`\n\n4.  **\u4fa7\u8fb9\u680f\u5185\u5bb9 (Part B)**: \u7eaf\u8272\u80cc\u666f + **\u5fc5\u987b\u4f7f\u7528\u4e2d\u6587** (Must use Chinese characters)\u3002\n    *   **\u5b57\u6570\u9650\u5236**: \u603b\u5171 **4-6\u4e2a\u6c49\u5b57**\u7684\u6838\u5fc3\u77ed\u8bed (e.g., \"AI\u7f16\u7a0b / \u4e00\u6b21\u8fc7\")\u3002\n    *   **\u6392\u7248**: \u5fc5\u987b\u6309\u8bed\u4e49\u62c6\u5206\u4e3a **\u4e0a\u4e0b\u4e24\u884c** \u8fdb\u884c\u6392\u7248 (Split into two lines)\u3002\n    *   **\u7981\u6b62**: \u7edd\u5bf9\u7981\u6b62\u51fa\u73b0\u82f1\u6587\u5355\u8bcd (No English allowed)\u3002\n\n### Step 2: \u51fa\u56fe\u524d\u51b3\u7b56 (Check) \u2014\u2014 \u5f3a\u5236\u786e\u8ba4\uff0c\u4e0d\u53ef\u8df3\u8fc7\n\n**\u7981\u6b62**\u56e0\u4e3a\"\u53ea\u6709\u4e00\u4e2a\u53ef\u7528 provider\"\u5c31\u81ea\u52a8\u9009\u9ed8\u8ba4\u503c\u3002\u6bcf\u6b21\u8fd0\u884c `/draw` \u90fd\u5fc5\u987b\u91cd\u65b0\u8bfb\u53d6 `conductor/api_keys.json` \u5e76\u91cd\u65b0\u5411\u7528\u6237\u5c55\u793a\u6e20\u9053\u5217\u8868\uff0c\u7b49\u5f85\u7528\u6237\u663e\u5f0f\u9009\u62e9\u540e\u518d\u6267\u884c\u3002\n\n**\u6d41\u7a0b**\uff1a\n1. \u8fd0\u884c `scripts/config_check.py` \u6216 `scripts/visualize.py --list-providers` \u5c55\u793a\u5f53\u524d\u53ef\u7528\u6e20\u9053\uff08\u53ea\u8bfb\uff0c\u4e0d\u751f\u6210\u3001\u4e0d\u6536\u8d39\uff09\u3002\n2. \u5411\u7528\u6237\u5c55\u793a\u9009\u9879\u4e0e\u5f71\u54cd\uff0c\u7b49\u5f85\u9009\u62e9\uff1a\n   - \u5f53\u524d Agent / \u5e73\u53f0\u5185\u7f6e\u751f\u56fe\u5de5\u5177\n   - \u5df2\u4fdd\u5b58\u7684\u7b2c\u4e09\u65b9 API\uff08\u6765\u81ea `conductor/api_keys.json`\uff09\n   - \u8f93\u5165\u65b0\u7684\u7b2c\u4e09\u65b9 API\uff08\u53ea\u9700 provider / base_url / model / api_key\uff09\n   - \u624b\u52a8\u586b\u5165\u56fe\u7247 URL\n3. \u7528\u6237\u786e\u8ba4\"\u7acb\u5373\u751f\u6210 / \u53ea\u4fdd\u7559\u5206\u955c / \u6682\u4e0d\u6267\u884c\"\u540e\u518d\u8fdb\u5165 Step 3\u3002\n\n\u65b0\u589e API \u5efa\u8bae\u5148\u6838\u5bf9\u5b98\u65b9\u6587\u6863\uff1b\u80fd\u529b\u4e0d\u660e\u786e\u65f6\uff0c\u5148\u8be2\u95ee\u662f\u5426\u8fdb\u884c\u53ef\u80fd\u6536\u8d39\u7684\u6700\u5c0f\u751f\u6210\u6d4b\u8bd5\u3002\n\n### Step 3: \u6267\u884c (Execution) - Optional\n\n\u8c03\u7528 `scripts/visualize.py` \u811a\u672c\u6279\u91cf\u751f\u6210\u56fe\u7247\u3002\n\n*   **\u5168\u6d41\u7a0b\u81ea\u52a8\u5316**: \u63a8\u8350\u540c\u65f6\u4f20\u5165 `--draft` \u53c2\u6570\uff0c\u811a\u672c\u5c06\u81ea\u52a8\u5b8c\u6210 \"\u751f\u6210 -> \u538b\u7f29 -> \u4e0a\u4f20COS -> \u63d2\u5165\u6b63\u6587\" \u7684\u5b8c\u6574\u95ed\u73af\u3002\n*   **\u7eaf\u4e0a\u4f20\u6a21\u5f0f (`--upload-only`)**: \u5f53\u914d\u56fe\u5df2\u901a\u8fc7\u539f\u751f\u751f\u56fe\u80fd\u529b\uff08\u5982 Antigravity / \u672c\u5730\u751f\u6210\uff09\u751f\u6210\u5b8c\u6bd5\u5e76\u5b58\u653e\u5728 `zpicture.assets/` \u65f6\uff0c\u4f20\u5165 `--upload-only` \u53ef\u8df3\u8fc7 API \u751f\u56fe\uff0c\u76f4\u63a5\u590d\u7528\u672c\u5730\u56fe\u6267\u884c\u538b\u7f29\u3001\u4e0a\u4f20\u817e\u8baf\u4e91 COS \u5e76\u81ea\u52a8\u5c06 COS \u5728\u7ebf\u94fe\u63a5\u6ce8\u5165\u6b63\u6587\u3002\n*   **Provider \u9009\u62e9**: `--provider` \u53ef\u9009 `auto`\uff08\u9ed8\u8ba4\uff09/ `gemini-web` / `gemini` / `gpt-image2`\u3002\n    `auto` \u7684\u5019\u9009\u987a\u5e8f\u56fa\u5b9a\u4e3a **`gpt-image2` \u2192 `gemini`**\uff0c\u9010\u4e2a\u5c1d\u8bd5\u3001\u5931\u8d25\u81ea\u52a8\u56de\u9000\u3002\n    vendored **`gemini-web` \u4e0d\u4f1a\u8fdb\u5165 `auto`**\uff0c\u5fc5\u987b\u663e\u5f0f `--provider gemini-web` \u624d\u4f1a\u4f7f\u7528\u3002\n*   **gemini-web \u524d\u7f6e\u6761\u4ef6**: \u9700\u8981\u6280\u80fd\u76ee\u5f55\u4e0b\u7684 `vendor/baoyu-danger-gemini-web` \u4e0e\u672c\u673a `bun`\uff0c\u7f3a\u4efb\u4e00\u9879\u4f1a\u5728\u8fd0\u884c\u65f6\u660e\u786e\u62a5\u9519\u3002\u5b83\u6309\u56fe\u9010\u6b21\u8c03\u7528\uff0c**\u6ca1\u6709\u300c\u5355\u6b21\u4f1a\u8bdd\u6279\u91cf\u751f\u56fe\u300d**\u3002\n*   **SiliconFlow**: `providers/siliconflow.py` \u4ecd\u5b58\u5728\uff0c\u4f46\u5f53\u524d**\u6ca1\u6709\u4efb\u4f55\u8def\u5f84\u80fd\u9009\u4e2d\u5b83**\uff08\u4e0d\u5728 `--provider` \u5019\u9009\uff0c\u4e5f\u4e0d\u5728 `auto` \u89e3\u6790\u91cc\uff09\u3002\n*   **\u9000\u51fa\u7801**: `0` = \u5168\u90e8\u4efb\u52a1\u4ea7\u51fa\u6210\u529f\uff1b`1` = \u8fd0\u884c\u671f\u5931\u8d25\uff08\u914d\u7f6e/\u6587\u4ef6/\u65e0\u4efb\u52a1/\u6709\u4efb\u52a1\u672a\u4ea7\u51fa\uff09\uff1b`2` = \u7528\u6cd5\u9519\u8bef\u3002\n*   **\u9996\u6b21\u767b\u5f55**: \u9996\u6b21\u4f7f\u7528 `gemini-web` \u524d\uff0c\u5148\u8fd0\u884c `python3 skills/wechat-director/scripts/visualize.py --gemini-web-login` \u5b8c\u6210\u72ec\u7acb\u767b\u5f55\u521d\u59cb\u5316\u3002\n*   **\u9694\u79bb\u539f\u5219**: `gemini-web` \u9ed8\u8ba4\u4f7f\u7528**\u7528\u6237\u4e3b\u76ee\u5f55**\u4e0b `.gemini/wechat-director/gemini-web/` \u7684\u72ec\u7acb runtime\uff0c\u4e0d\u590d\u7528\u65e5\u5e38 Chrome Profile\uff08\u53ef\u7528 `api_keys.json` \u7684 `gemini_web.runtime_dir` \u8986\u76d6\uff09\u3002\n*   **IP \u589e\u5f3a**: \u811a\u672c\u4f1a\u81ea\u52a8\u8bc6\u522b Storyboard \u4e2d\u7684 `(IP\u5f62\u8c61: \u662f)` \u6807\u8bb0\u3002\u82e5\u542f\u7528\uff0c\u5c06\u81ea\u52a8\u8bfb\u53d6\u6280\u80fd\u76ee\u5f55\u4e0b `assets/IP_Reference.png` \u4f5c\u4e3a Gemini Web / Gemini API \u7684\u53c2\u8003\u56fe\u8f93\u5165\u3002\n\n### Step 4: \u56fe\u7247\u4ea4\u4ed8\u9a8c\u6536\uff08Agent / \u5e73\u53f0\u51fa\u56fe\u65f6\u5fc5\u505a\uff09\n\n\u82e5\u56fe\u7247\u4e0d\u662f\u7531 `visualize.py` \u751f\u6210\uff08\u4f8b\u5982\u7528\u5f53\u524d Agent \u6216\u5e73\u53f0\u5de5\u5177\u51fa\u56fe\uff09\uff0c\u5728\u6ce8\u5165\u6b63\u6587\u3001\u4ea4\u7ed9 writer \u53d1\u5e03\u4e4b\u524d\uff0c\u5148\u8dd1\u4e00\u6b21\u9a8c\u6536\uff1a\n\n```bash\npython3 skills/wechat-director/scripts/validate_images.py <\u9879\u76ee>/zpicture.assets --brief <\u9879\u76ee>/Storyboard.md\n```\n\n\u5bf9\u7167\u5206\u955c\u786e\u8ba4\u9f50\u56fe\uff0c\u5e76\u68c0\u67e5\u5c3a\u5bf8 / \u6bd4\u4f8b / \u53ef\u8bfb\u6027\uff08\u7f3a\u56fe\u3001\u56fe\u7247\u635f\u574f\u3001\u5c3a\u5bf8\u4e0d\u8db3\u3001\u6bd4\u4f8b\u9519\u8bef\u3001\u7f3a\u5c11 Pillow \u90fd\u4f1a\u5931\u8d25\uff09\u3002\u9a8c\u6536\u901a\u8fc7\u540e\u518d\u6ce8\u5165\u6b63\u6587\u3002\n\n## \ud83d\udee0\ufe0f \u811a\u672c\u5de5\u5177\u7bb1\n\n> 2026-10-05 \u6309\u804c\u8d23\u62c6\u5206\uff1a`visualize.py` \u7531 1127 \u884c\u964d\u4e3a 534 \u884c\uff0c\n> \u5176\u4f59\u6309\u300c\u57fa\u7840\u8bbe\u65bd / \u89e3\u6790 / \u6865\u63a5 / \u751f\u56fe\u9002\u914d\u5668\u300d\u5206\u6a21\u5757\u3002\n> **\u8c03\u7528\u65b9\u5f0f\u5b8c\u5168\u4e0d\u53d8**\uff08\u4ecd\u662f\u4ece `scripts/visualize.py` \u8fdb\u5165\uff09\uff1b\n> `tests/` \u4e2d\u7684\u8868\u5f81\u6d4b\u8bd5\u5728\u62c6\u5206\u524d\u540e\u9010\u6761\u6bd4\u5bf9\u884c\u4e3a\uff08\u73b0\u6709 **32 \u6761**\uff09\u3002\n> \u540c\u65e5\u53e6\u4fee\uff1a\u8865\u9f50 `gemini-web` \u5206\u53d1\u5206\u652f\u3001\u9000\u51fa\u7801\u6539\u4e3a\u300c\u975e 0 \u8868\u793a\u6709\u4efb\u52a1\u672a\u4ea7\u51fa\u300d\u3002\n> 2026-10-06\uff1a\u5de5\u4f5c\u533a\u89e3\u6790\u6539\u4e3a\u8de8\u5e73\u53f0\u7ed3\u6784\u6807\u8bb0\uff08`scripts/workspace.py`\uff09\uff0c\n> \u65b0\u589e `--workspace` / `--list-providers`\uff0c\u8f93\u51fa\u76ee\u5f55\u7edf\u4e00\u4e3a `zpicture.assets/`\u3002\n\n| \u811a\u672c | \u529f\u80fd | I/O \u89c4\u8303 |\n|:---|:---|:---|\n| `scripts/visualize.py` | **CLI \u5165\u53e3** + \u7f16\u6392\uff08`VisualPipeline`\uff1a\u751f\u56fe/\u538b\u7f29/\u4e0a\u4f20/\u6ce8\u5165\uff09 | \u8bfb\u53d6 `Storyboard.md` \u4e2d\u7684 Prompt \u4ee3\u7801\u5757 |\n| `scripts/director_core.py` | \u57fa\u7840\u8bbe\u65bd\uff1a\u65e5\u5fd7\u3001\u5e38\u91cf\u8868\u3001\u8def\u5f84\u89e3\u6790\u3001\u914d\u7f6e\u52a0\u8f7d\u3001\u6587\u672c\u5de5\u5177 | \u88ab\u5176\u4ed6\u6a21\u5757 import\uff1b\u65e0\u5144\u5f1f\u4f9d\u8d56 |\n| `scripts/brief_parser.py` | Storyboard \u89e3\u6790\u5668\uff08\u542b Context \u63d0\u53d6\uff09 | \u8f93\u5165 `Storyboard.md` \u2192 `(title, tasks)` |\n| `scripts/obsidian_bridge.py` | Obsidian CLI \u6865\u63a5\uff08\u5199\u5c5e\u6027 / \u6253\u5f00\u9884\u89c8\uff09 | \u9700\u8981\u672c\u673a `obsidian` CLI |\n| `scripts/workspace.py` | \u5de5\u4f5c\u533a\u6839\u89e3\u6790\uff08\u663e\u5f0f > \u73af\u5883\u53d8\u91cf > \u7ed3\u6784\u6807\u8bb0\uff09 | \u88ab\u540c\u76ee\u5f55\u811a\u672c import |\n| `scripts/config_check.py` | \u73af\u5883\u4e0e\u6e20\u9053\u68c0\u6d4b\uff08Python / Pillow / Obsidian CLI / \u5df2\u914d\u7f6e provider\uff09 | \u53ea\u8bfb\uff0c\u4e0d\u751f\u6210\u3001\u4e0d\u6536\u8d39 |\n| `scripts/validate_images.py` | Agent/\u5e73\u53f0\u751f\u56fe\u540e\u7684\u72ec\u7acb\u9f50\u56fe\u4e0e\u89c4\u683c\u9a8c\u6536 | `image_validation.py` \u4e3a\u89c4\u683c\u5355\u4e00\u6765\u6e90 |\n| `scripts/image_validation.py` | \u56fe\u7247\u4ea4\u4ed8\u89c4\u683c\uff08\u5c3a\u5bf8\u53d6\u81ea `director_core.ASPECT_RATIOS`\uff09 | \u88ab `validate_images.py` import |\n| `scripts/providers/gemini.py` | Gemini \u751f\u56fe\u9002\u914d\u5668\uff08API \u4e0e Web \u4e24\u6761\u901a\u9053\uff09 | \u2014 |\n| `scripts/providers/gpt_image2.py` | GPT-Image-2 \u751f\u56fe\u9002\u914d\u5668 | \u2014 |\n| `scripts/providers/siliconflow.py` | SiliconFlow \u751f\u56fe\u9002\u914d\u5668\uff08\u26a0\ufe0f **\u5f53\u524d\u672a\u63a5\u5165\u4efb\u4f55\u9009\u4e2d\u8def\u5f84**\uff09 | \u2014 |\n| `tests/test_visualize.py` | \u884c\u4e3a\u62a4\u680f\uff0832 \u6761\uff1a\u7eaf\u51fd\u6570 / \u89e3\u6790\u5feb\u7167 / \u7f16\u6392 / CLI \u9000\u51fa\u7801 / IP \u8def\u5f84\uff09 | `cd tests && python3 -m unittest test_visualize` |\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"}
