{"id":"00eb74d4-5a9b-4027-a20a-b9d1fe9179ab","entityType":"agent","slug":"clawhub-tobewin-wechat-article-video-skill","name":"Wechat Article Video","canonicalUrl":"https://www.xpersona.co/agent/clawhub-tobewin-wechat-article-video-skill","canonicalPath":"/agent/clawhub-tobewin-wechat-article-video-skill","generatedAt":"2026-10-11T17:43:31.015Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T14:31:05.704Z","emptyReason":null},"description":"公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Skill: Wechat Article Video Owner: tobewin Summary: 公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-26T03:06:09.103Z | auto wechat-article-video-skill v0.1.0 - Initial release. - Converts WeChat public account articles and images into publish-ready vertical WeChat Channels videos (1080x1920, 30fps). - Supports detailed, fact-safe scripting, synchronized narration, burned-in subt","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s174rz3f0862tcfw7pzfh5w8kn83hv2z:wechat-article-video-skill","sourceUrl":"https://clawhub.ai/tobewin/wechat-article-video-skill","homepage":"https://clawhub.ai/tobewin/skills/wechat-article-video-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/tobewin/wechat-article-video-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/tobewin/skills/wechat-article-video-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Skill: Wechat Article Video Owner: tobewin Summary: 公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Tags: latest:0.1.0 Version history: v0.1"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:31:05.704Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:31:05.704Z","emptyReason":null},"stars":null,"forks":null,"downloads":1049,"packageName":null,"latestVersion":"0.1.0","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:31:05.690Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T14:31:05.704Z","lastCrawledAt":"2026-10-11T14:31:05.690Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T14:31:05.690Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.0","createdAt":"2026-08-26T03:06:09.103Z","changelog":"wechat-article-video-skill v0.1.0 - Initial release. - Converts WeChat public account articles and images into publish-ready vertical WeChat Channels videos (1080x1920, 30fps). - Supports detailed, fact-safe scripting, synchronized narration, burned-in subtitles, and medical/pharma compliance. - Offers multiple modes for video length and content focus, optimized for enterprise/product recommendations and daily production. - Generates a complete package: video, cover, voiceover, subtitles, storyboards, publishing copy, QA, and contact sheet. - Supports HyperFrames (default) and Remotion renderers, with specific workflow and validation steps for asset and fact integrity.","fileCount":19,"zipByteSize":30158}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s174rz3f0862tcfw7pzfh5w8kn83hv2z:wechat-article-video-skill","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T17:43:31.014Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-wechat-article-video-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T14:31:05.704Z","emptyReason":null},"readme":"Skill: Wechat Article Video\n\nOwner: tobewin\n\nSummary: 公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面\n\nTags: latest:0.1.0\n\nVersion history:\n\nv0.1.0 | 2026-08-26T03:06:09.103Z | auto\n\nwechat-article-video-skill v0.1.0\n\n- Initial release.\n- Converts WeChat public account articles and images into publish-ready vertical WeChat Channels videos (1080x1920, 30fps).\n- Supports detailed, fact-safe scripting, synchronized narration, burned-in subtitles, and medical/pharma compliance.\n- Offers multiple modes for video length and content focus, optimized for enterprise/product recommendations and daily production.\n- Generates a complete package: video, cover, voiceover, subtitles, storyboards, publishing copy, QA, and contact sheet.\n- Supports HyperFrames (default) and Remotion renderers, with specific workflow and validation steps for asset and fact integrity.\n\nArchive index:\n\nArchive v0.1.0: 19 files, 30158 bytes\n\nFiles: .gitignore (139b), agents (0b), agents/openai.yaml (315b), LICENSE (932b), README.md (1877b), references (0b), references/content-and-compliance.md (5376b), references/layout-system.md (5777b), references/qa.md (3387b), references/storyboard-schema.md (4792b), scripts (0b), scripts/edge_tts_generate.py (2149b), scripts/make_contact_sheet.py (4489b), scripts/qa_video.py (7310b), scripts/subtitles_to_timeline.py (6421b), scripts/validate_storyboard.py (10197b), skill-card.md (3070b), SKILL.md (10998b), _meta.json (145b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: wechat-article-video\ndescription: Convert Chinese WeChat public-account articles and supplied images into publish-ready vertical WeChat Channels videos. Use for 公众号转视频、图文转视频、医药或药械招商、企业和产品推荐、视频号日更、批量出片, including article analysis, fact-safe scripting, 9:16 layout direction, edge-tts narration, subtitle synchronization, HyperFrames or Remotion rendering, visible first-frame covers, and delivery QA.\n---\n\n# WeChat Article Video\n\nProduce a complete WeChat Channels package from an article and its images:\n\n- `video.mp4`: 1080x1920, 30 fps, H.264/AAC\n- `cover.jpg`: usable both as frame 0 and as the platform upload cover\n- `voiceover.mp3` and `voiceover.srt`\n- `storyboard.json` and `timeline.json`\n- `publish-copy.md`\n- `qa-report.json` and `contact-sheet.jpg`\n\nDefault to Chinese, `9:16`, `edge-tts`, synchronized burned-in captions, and a visible cover beginning at frame 0. Preserve medical disclaimers and never expand claims beyond the supplied source.\n\n## Choose The Production Mode\n\nChoose from the article's purpose, not its word count:\n\n| Mode | Duration | Use |\n| --- | ---: | --- |\n| `brief` | 15-25s | 招商快讯、活动提醒、单一行动 |\n| `compact-standard` | 30-40s | 企业/产品推荐的完整信息短版；视频号日更首选 |\n| `standard` | 40-75s | 企业入驻、产品推荐、平台宣传; default |\n| `detail` | 75-120s | 政策、专题或多产品解读 |\n\nDefault enterprise/product recommendations to `compact-standard` when the user wants a concise WeChat Channels video. Keep `standard` when the article needs more explanation or a calmer pace. Do not force an enterprise/product recommendation into 15 seconds.\n\nFor `compact-standard`, preserve the key-information matrix while compressing narration:\n\n- company identity plus the strongest date, capital, or scale fact\n- material qualification or domain credibility\n- every featured product name and dosage form\n- each product's main source-supported indication/use\n- material specifications when they distinguish the product\n- one platform action and the complete required disclaimer\n\nUse “core facts in voiceover + complete key points on screen.” Do not require every visible fact to be spoken. Target 34-38 seconds when an exact 30 seconds would require deleting key information or making text/voice unreadable.\n\n## Choose One Renderer\n\nUse one renderer per video. Both consume the same `storyboard.json` and `timeline.json`.\n\n- **HyperFrames, default**: use for one-off daily articles and visually tailored 30-90 second videos. Read the available `hyperframes`, `hyperframes-core`, `hyperframes-creative`, `hyperframes-animation`, and `hyperframes-cli` skills before authoring. Read HyperFrames Creative's `house-style.md` and `video-composition.md`; they specifically prevent web-card/PPT-looking frames.\n- **Remotion, batch-template option**: use when the user explicitly requests Remotion or when a stable React/TypeScript template is being parameterized for repeated batch production. Read `remotion-best-practices` and its `rules/video-layout.md` and `rules/subtitles.md` before editing Remotion code.\n\nDo not render a single composition through both engines. Do not claim a renderer is used unless the project source and render command actually use it.\n\n## Workflow\n\n### 1. Build A Source Bundle\n\nCreate a per-article project and preserve original files:\n\n```text\nsource/\n  article.md\n  images/\n  notes.md\nproduction/\nrelease/\n```\n\nCopy supplied assets into `source/images/`; never edit originals in place. Verify every copied file exists, then inspect it visually. Record its subject, crop safety, useful claim, and risks before writing the storyboard. Read [references/content-and-compliance.md](references/content-and-compliance.md).\n\nTreat missing or inaccessible supplied images as blocking. Ask the user to reattach them or use an already verified project copy. Do not create a renderable storyboard containing placeholder asset IDs, unverified candidate objects, or paths in temporary WeChat directories.\n\n### 2. Make An Evidence Map\n\nExtract:\n\n- article objective and one intended viewer action\n- company, product, dates, numbers, indications, specifications, and platform claims\n- source paragraph for every factual narration sentence\n- mandatory disclaimer\n- unsupported or illegible details that must not enter the video\n\nWrite `production/content-brief.json`. For medical/pharma content, factual traceability is mandatory.\n\n### 3. Write The Storyboard Before Code\n\nRead [references/storyboard-schema.md](references/storyboard-schema.md) and [references/layout-system.md](references/layout-system.md). Use 6-8 purposeful scenes for `compact-standard` and 4-8 for `standard`. Each scene must define:\n\n- narrative job\n- source references\n- layout template\n- focal asset and intended crop\n- on-screen text hierarchy\n- caption range\n- motion intent\n- first meaningful visual deadline\n\nUse these layout templates:\n\n- `cover`\n- `company-profile`\n- `product-hero`\n- `fact-focus`\n- `cta`\n\nDo not repeat the same template for adjacent product scenes without changing composition, focal position, or information structure.\n\nValidate before generating TTS:\n\n```bash\npython scripts/validate_storyboard.py \\\n  --input production/storyboard.json \\\n  --content-brief production/content-brief.json \\\n  --project-root .\n```\n\nDo not continue when validation reports inaccessible assets, blocked source status, unknown source references, or invalid asset field types.\n\n### 4. Generate One Continuous Voiceover\n\nWrite the complete spoken script to `production/voiceover.txt`. Keep punctuation deliberate because it controls cadence. Normalize symbols for speech while keeping display text faithful:\n\n- `1999年` may be spoken as `一九九九年`\n- `2ml` may be spoken as `二毫升`\n- brand symbols such as `®` normally stay on screen but are omitted from speech\n\nGenerate one continuous stream so voice, pacing, and loudness remain consistent:\n\n```bash\npython scripts/edge_tts_generate.py \\\n  --text production/voiceover.txt \\\n  --audio production/voiceover.mp3 \\\n  --subtitles production/voiceover.srt \\\n  --voice zh-CN-XiaoxiaoNeural \\\n  --rate +5%\n```\n\nUse another Edge voice/rate only when the user asks or the article tone clearly requires it. Do not silently switch to a paid TTS provider.\n\nFor `compact-standard`, start between `+12%` and `+20%`. Do not exceed `+20%` merely to hit 30 seconds. If narration still exceeds 40 seconds, remove connective/repeated wording, move supporting facts to on-screen text, preserve all critical claims, and accept 35-38 seconds instead of rushed speech.\n\n### 5. Let Subtitle Boundaries Drive Timing\n\nMap subtitle entries to scenes in `production/scene-map.json`, then build the shared timeline:\n\n```bash\npython scripts/subtitles_to_timeline.py \\\n  --subtitles production/voiceover.srt \\\n  --scene-map production/scene-map.json \\\n  --offset 1.5 \\\n  --tail 0.8 \\\n  --output production/timeline.json\n```\n\nThe default 1.5-second lead-in gives the cover a readable silent beat. Place the full voiceover at `timeline.audio_start_sec`; captions and narration scenes use the shifted timestamps from `timeline.json`. Never estimate caption timing by character count after real Edge boundaries exist.\n\n### 6. Author Layout Before Animation\n\nCreate the complete static end-state of every scene first. A frame must remain useful with all animation disabled. Then add restrained, seek-safe motion.\n\nHard layout rules:\n\n- frame 0 is a complete cover, never a black-to-image fade\n- main content occupies the visual field; do not leave the lower half unused\n- product imagery is usually 60-80% of frame width\n- cover headlines are normally 84-108 px at 1080x1920\n- scene headlines are normally 72-96 px\n- body text is normally 36-48 px; captions 44-54 px\n- captions sit in a dedicated safe zone and never cover packaging, QR codes, CTA, or disclaimers\n- meaningful scene content is visible within 0.4 seconds\n- animation emphasizes existing content; it must not create an initially empty frame\n- avoid nested cards, repeated equal cards, tiny UI labels, and generic website layouts\n\nHyperFrames: keep media as direct children of the composition root, start the voiceover at `timeline.audio_start_sec`, register one paused seekable timeline, use deterministic assets, and run `npx hyperframes check`.\n\nRemotion: convert seconds to frames with the composition FPS; convert captions to Remotion's `Caption` type in milliseconds. Use frame-derived `interpolate()` animation, `<Sequence>` for timing, `<Img>`/`<Audio>` for media, and no CSS transitions or CSS animations.\n\n### 7. Preview And Inspect The Whole Video\n\nBefore final render, inspect at least the start, middle, and end of every scene. For HyperFrames use snapshots; for Remotion render stills. Build a contact sheet after rendering:\n\n```bash\npython scripts/make_contact_sheet.py \\\n  --video release/video.mp4 \\\n  --timeline production/timeline.json \\\n  --output release/contact-sheet.jpg\n```\n\nReject the layout when:\n\n- a scene looks empty at entry\n- the product resembles a thumbnail\n- more than roughly one third of the frame is purposeless blank space\n- adjacent scenes share the same visual silhouette\n- text hierarchy cannot be understood in one second\n- captions are tiny or visually detached from the narration\n\n### 8. Run Delivery QA\n\nRead [references/qa.md](references/qa.md), then run:\n\n```bash\npython scripts/qa_video.py \\\n  --video release/video.mp4 \\\n  --timeline production/timeline.json \\\n  --cover release/cover.jpg \\\n  --report release/qa-report.json\n```\n\nQA must confirm:\n\n- video and audio streams begin correctly\n- first encoded frame is visible and non-black\n- cover is built into the video and exported separately\n- dimensions, codec, pixel format, fps, duration, and fast-start are suitable\n- captions follow real Edge timing\n- every `critical_claim_id` is represented in the storyboard and final contact sheet\n- opening, middle, and closing frames were visually inspected\n- medical facts and disclaimer match the article\n\nDo not prepend a still with stream-copy concat. If post-processing is unavoidable, fully re-encode and rerun first-frame QA.\n\n## Reference Routing\n\n- Read [references/content-and-compliance.md](references/content-and-compliance.md) for article compression, evidence mapping, medical copy, and publish copy.\n- Read [references/layout-system.md](references/layout-system.md) before designing any scene.\n- Read [references/storyboard-schema.md](references/storyboard-schema.md) before creating or validating `storyboard.json`.\n- Read [references/qa.md](references/qa.md) before final render and delivery.\n\n## Final Handoff\n\nReturn links to the MP4 and cover plus resolution, duration, renderer, voice, synchronization status, first-frame verification, and any compliance caveat. Keep editable project files with the release so the next daily article can reuse the design system.\n\nFile v0.1.0:README.md\n\n# WeChat Article Video Skill\n\nTurn Chinese WeChat public-account articles and supplied images into polished\nvertical videos for WeChat Channels.\n\nThe skill defines a reusable production workflow for:\n\n- article analysis and evidence mapping\n- information-complete 30-40 second edits\n- 9:16 mobile-first layouts\n- Edge TTS narration and subtitle synchronization\n- HyperFrames or Remotion rendering\n- visible first-frame covers\n- medical-content safeguards and delivery QA\n\n## Highlights\n\n- Defaults to a `compact-standard` 30-40 second format for daily publishing.\n- Preserves critical company, product, indication, specification, CTA, and\n  disclaimer information.\n- Uses real subtitle boundaries to synchronize scenes, captions, and narration.\n- Requires a useful, non-black first encoded frame and a separate upload cover.\n- Includes storyboard validation, contact-sheet generation, and video QA tools.\n\n## Install\n\nClone the repository into your agent's skills directory:\n\n```bash\ngit clone https://github.com/ToBeWin/wechat-article-video-skill.git\n```\n\nThen read `SKILL.md` and follow the workflow described there. The scripts expect\nPython 3, FFmpeg/FFprobe, and `edge-tts`. HyperFrames or Remotion is required\nonly when that renderer is selected.\n\n## Contents\n\n```text\nSKILL.md\nagents/openai.yaml\nreferences/\nscripts/\n```\n\nThe repository intentionally contains only the reusable skill source. It does\nnot include private article drafts, customer materials, generated media,\ncredentials, local filesystem paths, or environment files.\n\n## Privacy And Compliance\n\n- Review article text before sending it to any network TTS service.\n- Keep API keys in environment variables and never commit them.\n- Use only supplied or licensed visual assets.\n- Preserve mandatory medical disclaimers and do not expand claims beyond the\n  source material.\n\n## License\n\nMIT-0. See `LICENSE`.\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn75z6gevjsyrznm7dg2ez6sen82h8sz\",\n  \"slug\": \"wechat-article-video-skill\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1787713569103\n}\n\nFile v0.1.0:references/content-and-compliance.md\n\n# Content And Compliance\n\n## Contents\n\n1. Article objective\n2. Compression by mode\n3. Compact-standard coverage\n4. Evidence map\n5. Medical and pharma rules\n6. Voiceover style\n7. Publish package\n\n## Article Objective\n\nWrite one sentence before scripting:\n\n```text\nAfter watching, the intended viewer should ______.\n```\n\nExamples:\n\n- 厂家完成免费入驻\n- 行业用户进入小程序查看联系人\n- 医学专业人士了解本期企业和重点品种\n\nKeep no more than three supporting messages. Background that does not change the viewer's next action belongs in the article, not necessarily in the video.\n\n## Compression By Mode\n\n### Brief: 15-25 seconds\n\n- one hook\n- one or two benefits/facts\n- one action\n\n### Compact-standard: 30-40 seconds\n\n- complete cover and one intended action\n- company identity plus 1-2 strongest credibility facts\n- material qualification/domain evidence\n- every featured product, dosage form, and main indication/use\n- differentiating specifications when material\n- complete disclaimer\n- normally 6-8 scenes, with 34-38 seconds preferred over unreadable compression\n\nTreat this as a complete-information short version, not a brief teaser. Preserve key facts on screen even when only the core sentence is narrated.\n\n### Standard: 40-75 seconds\n\n- cover/hook\n- company or event context\n- two or three evidence/product beats\n- platform action\n- disclaimer when required\n\n### Detail: 75-120 seconds\n\n- clear chapter progression\n- additional qualification, specification, or policy detail\n- visual breathing beats between dense sections\n\nAvoid reading dosage instructions, long specification lists, or every qualification unless the user explicitly wants a detailed professional explainer.\n\n## Compact-Standard Coverage\n\nClassify source claims as `critical`, `supporting`, or `article_only`. Add every critical claim ID to `critical_claim_ids` in `content-brief.json`. A compact-standard storyboard is invalid until every critical claim's source reference appears in at least one scene.\n\nDo not reduce duration by dropping a featured product, removing its dosage form or main indication/use, omitting a material specification, deleting the CTA/disclaimer, shrinking text below readable sizes, or raising Edge TTS above `+20%`.\n\nReduce duration by shortening connective language, combining the platform CTA, and moving supporting facts from voiceover to the frame.\n\n## Evidence Map\n\nUse this shape for `content-brief.json`:\n\n```json\n{\n  \"title\": \"文章标题\",\n  \"mode\": \"standard\",\n  \"objective\": \"医学专业人士进入行业平台小程序查看联系人和更多信息\",\n  \"audience\": \"医药行业及医学专业人士\",\n  \"critical_claim_ids\": [\"c01\"],\n  \"claims\": [\n    {\n      \"id\": \"c01\",\n      \"text\": \"示例药企成立于2001年\",\n      \"source_ref\": \"section-1-paragraph-1\",\n      \"priority\": \"critical\",\n      \"allowed_in_voiceover\": true,\n      \"allowed_on_screen\": true\n    }\n  ],\n  \"required_disclaimer\": \"仅供医学人士学习、交流使用，不具有任何商业用途\",\n  \"cta\": \"点击行业平台小程序链接免费获取联系人及更多详细信息\",\n  \"assets\": [\n    {\n      \"path\": \"source/images/company.jpg\",\n      \"status\": \"ready\",\n      \"subject\": \"企业厂区正门和办公生产建筑\",\n      \"crop_safety\": \"safe\",\n      \"risks\": []\n    }\n  ],\n  \"production_status\": \"ready\"\n}\n```\n\nEvery number, qualification, product name, indication, dosage, specification, exposure count, and platform promise needs a source reference. Image recognition may identify candidate text but is not a factual source.\n\nSet `production_status` to `blocked` when any required supplied asset cannot be copied or visually inspected. A blocked content brief must not pass storyboard validation.\n\n## Medical And Pharma Rules\n\n- Preserve generic names, dosage forms, indications, specifications, and disclaimers exactly enough to remain faithful.\n- Do not introduce words such as 治愈、根治、特效、最佳、绝对安全 unless the source explicitly and lawfully contains them.\n- Do not convert professional indications into consumer treatment advice.\n- Do not invent a hospital, formal notice, attachment, prescription requirement, or approval status.\n- Keep the audience qualifier visible where the source limits use to medical professionals.\n- When a product image is too small to read, do not infer packaging details from it.\n- Separate platform CTA from product efficacy statements.\n\n## Voiceover Style\n\n- Use spoken Chinese, but keep facts conservative.\n- Prefer short clauses and deliberate punctuation.\n- Speak one information unit at a time.\n- Read long numbers in a way that is easy to understand.\n- Avoid exaggerated sales delivery for medical content.\n- Keep one continuous Edge TTS render; do not synthesize each scene separately.\n- For compact-standard, use `+12%` to `+20%`; prefer 35-38 seconds over faster speech.\n- Let supporting facts remain visible without forcing them into narration.\n\n## Publish Package\n\nCreate `publish-copy.md` containing:\n\n- video title: usually 16-28 Chinese characters\n- cover title: ideally no more than two lines and 18 Chinese characters\n- 1-2 sentence post copy\n- CTA\n- required disclaimer\n- relevant tags, kept restrained\n\nThe cover title is a click decision, not the full article title. It must identify the company/product or literal offer in the first viewport.\n\nFile v0.1.0:references/layout-system.md\n\n# Vertical Layout System\n\n## Contents\n\n1. Canvas and safe zones\n2. Global visual rules\n3. Layout templates\n4. Typography\n5. Image treatment\n6. Motion and transitions\n7. Layout rejection checklist\n\n## Canvas And Safe Zones\n\nDesign at 1080x1920 and 30 fps.\n\n```text\ny=0-120       top platform safety\ny=120-330     title / section identity\ny=330-1380    primary visual and evidence\ny=1380-1620   supporting facts / CTA\ny=1620-1780   burned-in caption zone\ny=1780-1920   bottom platform safety\n```\n\nThese are guides, not equal-height boxes. Let a strong product or factory image cross zones when it improves composition. Keep essential text, QR codes, logos, and packaging names inside x=80-1000.\n\n## Global Visual Rules\n\n- Use at least two focal points: for example headline then product, or factory then founding year.\n- Anchor content to an edge or a clear grid. Avoid centered floating stacks.\n- Aim for a visually occupied frame. Blank space is intentional only when it directs attention.\n- Use one tinted neutral background, one dark text color, and one or two brand accents.\n- Avoid generic blue glow circles, nested cards, identical card grids, thin web borders, and tiny interface labels.\n- Cards are allowed only when they represent a real information unit. They are not the default page structure.\n- Give adjacent scenes different silhouettes.\n- Keep source photography and packaging legible; do not blur it into atmosphere.\n\nFor `compact-standard`, shorten scene holds without shrinking the design:\n\n- use 6-8 scenes with one information job each\n- keep the same typography and product-image minimums as standard mode\n- place supporting critical facts on screen when narration omits them\n- never solve duration pressure by stacking more text into one frame\n\n## Layout Templates\n\n### Cover\n\nPurpose: earn the click and provide a valid frame-0 poster.\n\n- brand/platform marker: 5-8%\n- headline: two lines maximum, 64-96 px\n- supporting line: one concise benefit or product family\n- primary visual: factory, product pair, or article key art occupying 40-55% of the frame\n- CTA/trust line: clear, not a tiny button\n\nThe cover must be complete at frame 0. Ambient motion may begin later, but no essential element may start at opacity 0.\n\n### Company Profile\n\nPurpose: establish credibility without producing a blank corporate slide.\n\nPreferred compositions:\n\n- factory image across 45-55% of the frame plus a strong fact rail\n- split frame with image on one side and 2-3 large facts on the other\n- large founding year as a visual anchor with the company image behind or beside it\n\nDo not show only the company name at the top while waiting for later animation.\n\n### Product Hero\n\nPurpose: make the actual product inspectable.\n\n- product image width: normally 65-80% of frame\n- remove excessive source-image white margins before placement\n- product name and dosage form are separate hierarchy levels\n- show at most 2-3 concise fact tags\n- alternate left/right or top/bottom composition for adjacent products\n\nDo not place a small product image inside a large empty white card.\n\n### Fact Focus\n\nPurpose: communicate a number, qualification, platform benefit, or comparison.\n\n- one large number or statement\n- one evidence line\n- optional supporting image or diagram\n- structural rule, marker, or data rail for depth\n\nDo not turn three unrelated facts into three equal cards by habit.\n\n### CTA\n\nPurpose: make the next action unmistakable.\n\n- CTA is the primary focal point\n- platform/miniprogram identity is visible\n- QR or entry image, when supplied, stays unobstructed\n- disclaimer has its own readable zone\n- use a strong compositional ending rather than a generic centered card\n\n## Typography\n\nAt 1080x1920:\n\n| Role | Typical size |\n| --- | ---: |\n| Cover headline | 84-108 px |\n| Scene headline | 72-96 px |\n| Product name | 76-104 px |\n| Large number | 112-180 px |\n| Body / fact | 36-48 px |\n| Label | 30-34 px |\n| Captions | 44-54 px |\n| Disclaimer | 28-34 px |\n\nUse strong weight contrast. Keep body lines short. Fit long Chinese names dynamically instead of shrinking every title globally.\n\n## Image Treatment\n\nFor each asset record:\n\n```json\n{\n  \"path\": \"source/images/product.jpg\",\n  \"subject\": \"示例滴眼液包装和滴眼瓶\",\n  \"crop\": \"contain\",\n  \"vertical_safety\": \"safe\",\n  \"focal_point\": \"center\",\n  \"minimum_width_pct\": 68,\n  \"risks\": [\"source contains wide white margins\"]\n}\n```\n\n- `contain`: packaging, screenshots, charts, QR codes\n- `cover`: factory/environment photos where cropping is acceptable\n- `cutout`: product assets with removable white background\n\nWhen source images have large white margins, crop the margins nondestructively before layout. Never stretch a horizontal image to 9:16.\n\n## Motion And Transitions\n\n- Main information must be visible by 0.4 seconds.\n- Keep product visible from scene entry; animate scale or position for emphasis.\n- Use 0.3-0.6 second entrances with overlap.\n- Alternate motion direction and emphasis across scenes.\n- Keep captions stable while visuals move.\n- Use 0.2-0.45 second transitions; transitions must not create black frames.\n- Every scene's static end-state must already be a good poster.\n\n## Layout Rejection Checklist\n\nReject and revise when any answer is yes:\n\n- Is the lower half of the frame mostly unused?\n- Does the product look like a thumbnail?\n- Does the first half-second show only a label or heading?\n- Are two adjacent scenes compositionally identical?\n- Does the page resemble a website card stack or presentation slide?\n- Is the subtitle smaller than surrounding secondary copy?\n- Does the subtitle cover packaging, QR, CTA, or disclaimer?\n- Is important text within 80 px of the left/right edge or 120 px of top/bottom?\n- Does animation need to finish before the frame makes sense?\n\nFile v0.1.0:references/qa.md\n\n# Delivery QA\n\n## Machine Checks\n\nRun:\n\n```bash\npython scripts/qa_video.py \\\n  --video release/video.mp4 \\\n  --timeline production/timeline.json \\\n  --cover release/cover.jpg \\\n  --report release/qa-report.json\n```\n\nThe report must verify:\n\n- H.264 video and AAC audio\n- 1080x1920, 30 fps, `yuv420p`\n- stream and container start times near zero\n- expected duration within tolerance\n- non-black encoded first frame\n- MP4 `moov` atom before `mdat` (`faststart`)\n- standalone cover exported from the first encoded frame\n\nRun `ffprobe` manually when a check is unclear:\n\n```bash\nffprobe -v error -show_streams -show_format -of json release/video.mp4\n```\n\n## Visual Contact Sheet\n\nGenerate three samples per scene:\n\n```bash\npython scripts/make_contact_sheet.py \\\n  --video release/video.mp4 \\\n  --timeline production/timeline.json \\\n  --output release/contact-sheet.jpg\n```\n\nInspect every tile at a small size. Thumbnail inspection exposes weak hierarchy and empty frames faster than full-screen playback.\n\nReject when:\n\n- frame 0 is black, incomplete, or missing the article subject\n- a scene is blank while waiting for animation\n- the lower half remains purposelessly empty\n- the product cannot be inspected\n- adjacent scenes have the same silhouette\n- captions overlap key visuals or fall outside the safe zone\n- the CTA or disclaimer is unreadable\n\n## Synchronization Checks\n\nInspect at least:\n\n- first spoken sentence\n- one sentence near the middle\n- final CTA and disclaimer\n\nThe caption must change at the Edge subtitle boundary, not at a character-count estimate. Check that visual emphasis occurs during the matching sentence, not before or after it.\n\n## Medical Fact Check\n\nCompare the final narration and on-screen text with `content-brief.json`:\n\n- names and dosage forms\n- dates and registered capital\n- indications and specifications\n- platform reach or service claims\n- CTA\n- disclaimer\n\nNo unsupported sentence may remain because it “sounds better.”\n\n## Key-Information Coverage\n\nFor `compact-standard`, build a final coverage table before delivery:\n\n| Critical claim | Voiceover | On screen | Contact-sheet tile | Result |\n| --- | --- | --- | --- | --- |\n| Company date/capital | yes/no | yes/no | scene id | pass/fail |\n| Qualification/domain evidence | yes/no | yes/no | scene id | pass/fail |\n| Product name/dosage form | yes/no | yes/no | scene id | pass/fail |\n| Main indication/use | yes/no | yes/no | scene id | pass/fail |\n| Material specification | yes/no | yes/no | scene id | pass/fail |\n| CTA | yes/no | yes/no | scene id | pass/fail |\n| Disclaimer | yes/no | yes/no | scene id | pass/fail |\n\nEvery `critical_claim_id` must be visible on screen or spoken, traceable to a scene, and readable in the contact sheet. Reject a short video that reaches its duration by dropping a critical row.\n\nConfirm compact-standard duration policy:\n\n- ideal output: 30-40 seconds\n- preferred information-complete result: 34-38 seconds\n- Edge TTS rate: no faster than `+20%`\n- exact 30 seconds is not required when it harms readability or coverage\n\n## Encoding Notes\n\n- Build the cover inside the rendered composition at `0.0s`.\n- Do not prepend a JPEG using `concat -c copy`.\n- Encode with `-movflags +faststart` when FFmpeg is part of the pipeline.\n- If the user reports a black idle preview, extract encoded frame 0 and inspect stream start times before changing the design.\n\nFile v0.1.0:references/storyboard-schema.md\n\n# Storyboard And Timeline Schema\n\n## Storyboard\n\nUse this shape for `storyboard.json`:\n\n```json\n{\n  \"version\": 2,\n  \"title\": \"本期推荐｜示例药企入驻行业平台\",\n  \"mode\": \"compact-standard\",\n  \"renderer\": \"hyperframes\",\n  \"canvas\": {\"width\": 1080, \"height\": 1920, \"fps\": 30},\n  \"voice\": {\n    \"provider\": \"edge-tts\",\n    \"name\": \"zh-CN-XiaoxiaoNeural\",\n    \"rate\": \"+18%\"\n  },\n  \"required_disclaimer\": \"仅供医学人士学习、交流使用，不具有任何商业用途\",\n  \"scenes\": [\n    {\n      \"id\": \"s00\",\n      \"type\": \"cover\",\n      \"layout\": \"cover\",\n      \"narrative_job\": \"首帧说明本期企业和两款重点产品\",\n      \"source_refs\": [\"title\"],\n      \"caption_entries\": [],\n      \"headline\": \"示例药企入驻行业平台\",\n      \"supporting_text\": \"携产品甲、产品乙重点品种\",\n      \"focal_asset\": \"source/images/company.jpg\",\n      \"secondary_assets\": [\n        \"source/images/eye-drops.jpg\",\n        \"source/images/gel.jpg\"\n      ],\n      \"asset_fit\": \"cover\",\n      \"asset_width_pct\": 78,\n      \"first_meaningful_sec\": 0,\n      \"motion\": \"still-then-slow-push\"\n    },\n    {\n      \"id\": \"s01\",\n      \"type\": \"company\",\n      \"layout\": \"company-profile\",\n      \"narrative_job\": \"建立企业资质和领域积累\",\n      \"source_refs\": [\"section-1-paragraph-1\", \"section-1-paragraph-2\"],\n      \"caption_entries\": [1, 2, 3],\n      \"headline\": \"示例药企\",\n      \"facts\": [\"成立于2001年\", \"注册资本5,000万元\", \"长期专注重点领域\"],\n      \"focal_asset\": \"source/images/company.jpg\",\n      \"asset_fit\": \"cover\",\n      \"asset_width_pct\": 100,\n      \"first_meaningful_sec\": 0,\n      \"motion\": \"image-hold-fact-reveal\"\n    }\n  ]\n}\n```\n\n## Required Top-Level Fields\n\n- `version`: must be `2`\n- `mode`: `brief`, `compact-standard`, `standard`, or `detail`\n- `renderer`: `hyperframes` or `remotion`\n- `canvas`: default 1080x1920 at 30 fps\n- `voice.provider`: must default to `edge-tts`\n- `scenes`: ordered scene list\n\n## Required Scene Fields\n\n- `id`\n- `type`\n- `layout`\n- `narrative_job`\n- `source_refs`\n- `caption_entries`\n- `headline`\n- `first_meaningful_sec`\n- `motion`\n\n`caption_entries` are one-based subtitle entry numbers. The cover usually has no caption entry and receives its duration from `scene-map.json`.\n\n`focal_asset` must be one verified project-relative path string. Put additional verified path strings in `secondary_assets`. Do not put asset candidates, selection rules, or placeholder IDs into these fields; make those decisions during content briefing.\n\n## Scene Map\n\nUse this input for `subtitles_to_timeline.py`:\n\n```json\n{\n  \"cover\": {\n    \"id\": \"s00\",\n    \"duration_sec\": 1.5\n  },\n  \"scenes\": [\n    {\"id\": \"s01\", \"caption_start\": 1, \"caption_end\": 3},\n    {\"id\": \"s02\", \"caption_start\": 4, \"caption_end\": 5},\n    {\"id\": \"s03\", \"caption_start\": 6, \"caption_end\": 7},\n    {\"id\": \"s04\", \"caption_start\": 8, \"caption_end\": 9},\n    {\"id\": \"s05\", \"caption_start\": 10, \"caption_end\": 11}\n  ]\n}\n```\n\nCaption ranges must be contiguous, ordered, non-overlapping, and cover every narration caption exactly once.\n\n## Timeline\n\nThe generated `timeline.json` contains:\n\n```json\n{\n  \"version\": 2,\n  \"audio_start_sec\": 1.5,\n  \"audio_duration_sec\": 69.519,\n  \"total_duration_sec\": 71.819,\n  \"captions\": [\n    {\"index\": 1, \"start_sec\": 1.6, \"end_sec\": 8.264, \"text\": \"字幕\"}\n  ],\n  \"scenes\": [\n    {\"id\": \"s00\", \"start_sec\": 0, \"end_sec\": 1.5, \"duration_sec\": 1.5},\n    {\"id\": \"s01\", \"start_sec\": 1.6, \"end_sec\": 36.357, \"duration_sec\": 34.757}\n  ]\n}\n```\n\nRenderers use the generated numbers directly. Do not maintain a second hand-authored timing table in HTML or TypeScript.\n\n## Critical Claim Coverage\n\nWhen `content-brief.json` declares `critical_claim_ids`, every referenced claim must exist in `claims`, and that claim's `source_ref` must appear in at least one storyboard scene. This is mandatory for `compact-standard`.\n\nUse scene text hierarchy to decide whether a critical claim is narrated or only displayed. Coverage does not mean every critical claim must be spoken.\n\n## Renderer Adapters\n\nHyperFrames uses timeline seconds directly:\n\n- scene clip `data-start` and `data-duration`\n- root `data-duration = total_duration_sec`\n- voiceover `<audio>` as a direct root child at `audio_start_sec`\n- caption clips from each caption's `start_sec` and `end_sec`\n\nRemotion converts timeline values at the adapter boundary:\n\n```ts\nconst toFrame = (seconds: number, fps: number) => Math.round(seconds * fps);\n\nconst remotionCaptions = timeline.captions.map((caption) => ({\n  text: caption.text,\n  startMs: Math.round(caption.start_sec * 1000),\n  endMs: Math.round(caption.end_sec * 1000),\n  timestampMs: null,\n  confidence: null,\n}));\n```\n\nDo not recalculate timing from narration character counts inside either renderer.\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nConvert Chinese WeChat public-account articles and supplied images into publish-ready vertical WeChat Channels videos, including article analysis, fact-safe scripting, 9:16 layout direction, edge-tts narration, subtitle synchronization, HyperFrames or Remotion rendering, visible first-frame covers, and delivery QA.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[tobewin](https://clawhub.ai/user/tobewin)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, content-production teams, and WeChat operations teams use this skill to convert Chinese public-account articles and supplied images into vertical WeChat Channels video packages with narration, captions, covers, publishing copy, and QA artifacts. It is especially suited to enterprise, product-recommendation, medical, and pharma article workflows that require source-grounded claims and mandatory disclaimers.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The workflow may run local media tooling and an unpinned external HyperFrames command through npx.\n\nMitigation: Pin or locally install HyperFrames, use npx --no-install or a lockfile-backed local binary, and run the workflow in a dedicated project workspace.\n\nRisk: Narration text is sent to Edge TTS during voiceover generation.\n\nMitigation: Review article text before TTS generation and avoid sending confidential or sensitive material unless approved for that service.\n\nRisk: Generated medical or product videos can become misleading if unsupported claims, illegible image details, or required disclaimers are not checked.\n\nMitigation: Use the content brief, storyboard validation, contact-sheet review, and final QA checks to confirm source traceability, critical-claim coverage, and mandatory disclaimers.\n\n## Reference(s):\n\n- [Source repository](https://github.com/ToBeWin/wechat-article-video-skill)\n- [ClawHub skill page](https://clawhub.ai/tobewin/skills/wechat-article-video-skill)\n- [Publisher profile](https://clawhub.ai/user/tobewin)\n- [Content And Compliance](references/content-and-compliance.md)\n- [Vertical Layout System](references/layout-system.md)\n- [Delivery QA](references/qa.md)\n- [Storyboard Schema](references/storyboard-schema.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON project artifacts, Python and renderer commands, and generated media-file specifications]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces a complete video-production package such as video.mp4, cover.jpg, voiceover files, storyboard and timeline JSON, publish copy, QA report, and contact sheet.]\n\n## Skill Version(s):\n\n0.1.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.1.0:agents/openai.yaml\n\ninterface:\n  display_name: \"WeChat Article Video\"\n  short_description: \"公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面\"\n  default_prompt: \"Use $wechat-article-video to turn this WeChat article and its images into an information-complete compact vertical WeChat Channels video.\"\n\nFile v0.1.0:LICENSE\n\nMIT No Attribution\n\nCopyright (c) 2026 WeChat Article Video contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this\nsoftware and associated documentation files (the \"Software\"), to deal in the Software\nwithout restriction, including without limitation the rights to use, copy, modify,\nmerge, publish, distribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\nPARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\nCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\nOR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","readmeExcerpt":"Skill: Wechat Article Video Owner: tobewin Summary: 公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-26T03:06:09.103Z | auto wechat-article-video-skill v0.1.0 - Initial release. - Converts WeChat public account articles and images into publish-ready vertical WeChat Channels videos (1080x1920, 30fps). - Supports detailed, fact-safe scripting, synchronized narration, burned-in subt","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"source/\n  article.md\n  images/\n  notes.md\nproduction/\nrelease/"},{"language":"bash","snippet":"python scripts/validate_storyboard.py \\\n  --input production/storyboard.json \\\n  --content-brief production/content-brief.json \\\n  --project-root ."},{"language":"bash","snippet":"python scripts/edge_tts_generate.py \\\n  --text production/voiceover.txt \\\n  --audio production/voiceover.mp3 \\\n  --subtitles production/voiceover.srt \\\n  --voice zh-CN-XiaoxiaoNeural \\\n  --rate +5%"},{"language":"bash","snippet":"python scripts/subtitles_to_timeline.py \\\n  --subtitles production/voiceover.srt \\\n  --scene-map production/scene-map.json \\\n  --offset 1.5 \\\n  --tail 0.8 \\\n  --output production/timeline.json"},{"language":"bash","snippet":"python scripts/make_contact_sheet.py \\\n  --video release/video.mp4 \\\n  --timeline production/timeline.json \\\n  --output release/contact-sheet.jpg"},{"language":"bash","snippet":"python scripts/qa_video.py \\\n  --video release/video.mp4 \\\n  --timeline production/timeline.json \\\n  --cover release/cover.jpg \\\n  --report release/qa-report.json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: wechat-article-video\ndescription: Convert Chinese WeChat public-account articles and supplied images into publish-ready vertical WeChat Channels videos. Use for 公众号转视频、图文转视频、医药或药械招商、企业和产品推荐、视频号日更、批量出片, including article analysis, fact-safe scripting, 9:16 layout direction, edge-tts narration, subtitle synchronization, HyperFrames or Remotion rendering, visible first-frame covers, and delivery QA.\n---\n\n# WeChat Article Video\n\nProduce a complete WeChat Channels package from an article and its images:\n\n- `video.mp4`: 1080x1920, 30 fps, H.264/AAC\n- `cover.jpg`: usable both as frame 0 and as the platform upload cover\n- `voiceover.mp3` and `voiceover.srt`\n- `storyboard.json` and `timeline.json`\n- `publish-copy.md`\n- `qa-report.json` and `contact-sheet.jpg`\n\nDefault to Chinese, `9:16`, `edge-tts`, synchronized burned-in captions, and a visible cover beginning at frame 0. Preserve medical disclaimers and never expand claims beyond the supplied source.\n\n## Choose The Production Mode\n\nChoose from the article's purpose, not its word count:\n\n| Mode | Duration | Use |\n| --- | ---: | --- |\n| `brief` | 15-25s | 招商快讯、活动提醒、单一行动 |\n| `compact-standard` | 30-40s | 企业/产品推荐的完整信息短版；视频号日更首选 |\n| `standard` | 40-75s | 企业入驻、产品推荐、平台宣传; default |\n| `detail` | 75-120s | 政策、专题或多产品解读 |\n\nDefault enterprise/product recommendations to `compact-standard` when the user wants a concise WeChat Channels video. Keep `standard` when the article needs more explanation or a calmer pace. Do not force an enterprise/product recommendation into 15 seconds.\n\nFor `compact-standard`, preserve the key-information matrix while compressing narration:\n\n- company identity plus the strongest date, capital, or scale fact\n- material qualification or domain credibility\n- every featured product name and dosage form\n- each product's main source-supported indication/use\n- material specifications when they distinguish the product\n- one platform action and the complete required disclaimer\n\nUse “core facts in voiceover + complete key points on screen.” Do not require every visible fact to be spoken. Target 34-38 seconds when an exact 30 seconds would require deleting key information or making text/voice unreadable.\n\n## Choose One Renderer\n\nUse one renderer per video. Both consume the same `storyboard.json` and `timeline.json`.\n\n- **HyperFrames, default**: use for one-off daily articles and visually tailored 30-90 second videos. Read the available `hyperframes`, `hyperframes-core`, `hyperframes-creative`, `hyperframes-animation`, and `hyperframes-cli` skills before authoring. Read HyperFrames Creative's `house-style.md` and `video-composition.md`; they specifically prevent web-card/PPT-looking frames.\n- **Remotion, batch-template option**: use when the user explicitly requests Remotion or when a stable React/TypeScript template is being parameterized for repeated batch production. Read `remotion-best-practices` and its `rules/video-layout.md` and `rules/subtitles.md` before editing Remotion code.\n\nDo n"},{"path":"README.md","content":"# WeChat Article Video Skill\n\nTurn Chinese WeChat public-account articles and supplied images into polished\nvertical videos for WeChat Channels.\n\nThe skill defines a reusable production workflow for:\n\n- article analysis and evidence mapping\n- information-complete 30-40 second edits\n- 9:16 mobile-first layouts\n- Edge TTS narration and subtitle synchronization\n- HyperFrames or Remotion rendering\n- visible first-frame covers\n- medical-content safeguards and delivery QA\n\n## Highlights\n\n- Defaults to a `compact-standard` 30-40 second format for daily publishing.\n- Preserves critical company, product, indication, specification, CTA, and\n  disclaimer information.\n- Uses real subtitle boundaries to synchronize scenes, captions, and narration.\n- Requires a useful, non-black first encoded frame and a separate upload cover.\n- Includes storyboard validation, contact-sheet generation, and video QA tools.\n\n## Install\n\nClone the repository into your agent's skills directory:\n\n```bash\ngit clone https://github.com/ToBeWin/wechat-article-video-skill.git\n```\n\nThen read `SKILL.md` and follow the workflow described there. The scripts expect\nPython 3, FFmpeg/FFprobe, and `edge-tts`. HyperFrames or Remotion is required\nonly when that renderer is selected.\n\n## Contents\n\n```text\nSKILL.md\nagents/openai.yaml\nreferences/\nscripts/\n```\n\nThe repository intentionally contains only the reusable skill source. It does\nnot include private article drafts, customer materials, generated media,\ncredentials, local filesystem paths, or environment files.\n\n## Privacy And Compliance\n\n- Review article text before sending it to any network TTS service.\n- Keep API keys in environment variables and never commit them.\n- Use only supplied or licensed visual assets.\n- Preserve mandatory medical disclaimers and do not expand claims beyond the\n  source material.\n\n## License\n\nMIT-0. See `LICENSE`."},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75z6gevjsyrznm7dg2ez6sen82h8sz\",\n  \"slug\": \"wechat-article-video-skill\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1787713569103\n}"},{"path":"references/content-and-compliance.md","content":"# Content And Compliance\n\n## Contents\n\n1. Article objective\n2. Compression by mode\n3. Compact-standard coverage\n4. Evidence map\n5. Medical and pharma rules\n6. Voiceover style\n7. Publish package\n\n## Article Objective\n\nWrite one sentence before scripting:\n\n```text\nAfter watching, the intended viewer should ______.\n```\n\nExamples:\n\n- 厂家完成免费入驻\n- 行业用户进入小程序查看联系人\n- 医学专业人士了解本期企业和重点品种\n\nKeep no more than three supporting messages. Background that does not change the viewer's next action belongs in the article, not necessarily in the video.\n\n## Compression By Mode\n\n### Brief: 15-25 seconds\n\n- one hook\n- one or two benefits/facts\n- one action\n\n### Compact-standard: 30-40 seconds\n\n- complete cover and one intended action\n- company identity plus 1-2 strongest credibility facts\n- material qualification/domain evidence\n- every featured product, dosage form, and main indication/use\n- differentiating specifications when material\n- complete disclaimer\n- normally 6-8 scenes, with 34-38 seconds preferred over unreadable compression\n\nTreat this as a complete-information short version, not a brief teaser. Preserve key facts on screen even when only the core sentence is narrated.\n\n### Standard: 40-75 seconds\n\n- cover/hook\n- company or event context\n- two or three evidence/product beats\n- platform action\n- disclaimer when required\n\n### Detail: 75-120 seconds\n\n- clear chapter progression\n- additional qualification, specification, or policy detail\n- visual breathing beats between dense sections\n\nAvoid reading dosage instructions, long specification lists, or every qualification unless the user explicitly wants a detailed professional explainer.\n\n## Compact-Standard Coverage\n\nClassify source claims as `critical`, `supporting`, or `article_only`. Add every critical claim ID to `critical_claim_ids` in `content-brief.json`. A compact-standard storyboard is invalid until every critical claim's source reference appears in at least one scene.\n\nDo not reduce duration by dropping a featured product, removing its dosage form or main indication/use, omitting a material specification, deleting the CTA/disclaimer, shrinking text below readable sizes, or raising Edge TTS above `+20%`.\n\nReduce duration by shortening connective language, combining the platform CTA, and moving supporting facts from voiceover to the frame.\n\n## Evidence Map\n\nUse this shape for `content-brief.json`:\n\n```json\n{\n  \"title\": \"文章标题\",\n  \"mode\": \"standard\",\n  \"objective\": \"医学专业人士进入行业平台小程序查看联系人和更多信息\",\n  \"audience\": \"医药行业及医学专业人士\",\n  \"critical_claim_ids\": [\"c01\"],\n  \"claims\": [\n    {\n      \"id\": \"c01\",\n      \"text\": \"示例药企成立于2001年\",\n      \"source_ref\": \"section-1-paragraph-1\",\n      \"priority\": \"critical\",\n      \"allowed_in_voiceover\": true,\n      \"allowed_on_screen\": true\n    }\n  ],\n  \"required_disclaimer\": \"仅供医学人士学习、交流使用，不具有任何商业用途\",\n  \"cta\": \"点击行业平台小程序链接免费获取联系人及更多详细信息\",\n  \"assets\": [\n    {\n      \"path\": \"source/images/company.jpg\",\n      \"status\": \"ready\",\n      \"subject\": \"企业厂区正门和办公生产建筑\",\n      \"crop_safety\": \"safe\",\n"},{"path":"references/layout-system.md","content":"# Vertical Layout System\n\n## Contents\n\n1. Canvas and safe zones\n2. Global visual rules\n3. Layout templates\n4. Typography\n5. Image treatment\n6. Motion and transitions\n7. Layout rejection checklist\n\n## Canvas And Safe Zones\n\nDesign at 1080x1920 and 30 fps.\n\n```text\ny=0-120       top platform safety\ny=120-330     title / section identity\ny=330-1380    primary visual and evidence\ny=1380-1620   supporting facts / CTA\ny=1620-1780   burned-in caption zone\ny=1780-1920   bottom platform safety\n```\n\nThese are guides, not equal-height boxes. Let a strong product or factory image cross zones when it improves composition. Keep essential text, QR codes, logos, and packaging names inside x=80-1000.\n\n## Global Visual Rules\n\n- Use at least two focal points: for example headline then product, or factory then founding year.\n- Anchor content to an edge or a clear grid. Avoid centered floating stacks.\n- Aim for a visually occupied frame. Blank space is intentional only when it directs attention.\n- Use one tinted neutral background, one dark text color, and one or two brand accents.\n- Avoid generic blue glow circles, nested cards, identical card grids, thin web borders, and tiny interface labels.\n- Cards are allowed only when they represent a real information unit. They are not the default page structure.\n- Give adjacent scenes different silhouettes.\n- Keep source photography and packaging legible; do not blur it into atmosphere.\n\nFor `compact-standard`, shorten scene holds without shrinking the design:\n\n- use 6-8 scenes with one information job each\n- keep the same typography and product-image minimums as standard mode\n- place supporting critical facts on screen when narration omits them\n- never solve duration pressure by stacking more text into one frame\n\n## Layout Templates\n\n### Cover\n\nPurpose: earn the click and provide a valid frame-0 poster.\n\n- brand/platform marker: 5-8%\n- headline: two lines maximum, 64-96 px\n- supporting line: one concise benefit or product family\n- primary visual: factory, product pair, or article key art occupying 40-55% of the frame\n- CTA/trust line: clear, not a tiny button\n\nThe cover must be complete at frame 0. Ambient motion may begin later, but no essential element may start at opacity 0.\n\n### Company Profile\n\nPurpose: establish credibility without producing a blank corporate slide.\n\nPreferred compositions:\n\n- factory image across 45-55% of the frame plus a strong fact rail\n- split frame with image on one side and 2-3 large facts on the other\n- large founding year as a visual anchor with the company image behind or beside it\n\nDo not show only the company name at the top while waiting for later animation.\n\n### Product Hero\n\nPurpose: make the actual product inspectable.\n\n- product image width: normally 65-80% of frame\n- remove excessive source-image white margins before placement\n- product name and dosage form are separate hierarchy levels\n- show at most 2-3 concise fact tags\n- alternate left/right or top/bottom composition for adjacent"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Skill: Wechat Article Video Owner: tobewin Summary: 公众号转视频号：30–40秒完整短版、Edge配音、同步字幕与封面 Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-26T03:06:09.103Z | auto wechat-article-video-skill v0.1.0 - Initial release. - Converts WeChat public account articles and images into publish-ready vertical WeChat Channels videos (1080x1920, 30fps). - Supports detailed, fact-safe scripting, synchronized narration, burned-in subt","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1805,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T14:31:05.704Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T14:31:05.704Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T17:43:31.015Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}