{"id":"9e910777-2482-4072-b76c-f4decdc238e2","entityType":"agent","slug":"clawhub-tobewin-english-learning-animation","name":"English Learning Animation","canonicalUrl":"https://www.xpersona.co/agent/clawhub-tobewin-english-learning-animation","canonicalPath":"/agent/clawhub-tobewin-english-learning-animation","generatedAt":"2026-10-11T15:17:51.346Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:31:41.467Z","emptyReason":null},"description":"Produce and quality-check animated English shorts with Qwen3-TTS.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s174rz3f0862tcfw7pzfh5w8kn83hv2z:english-learning-animation","sourceUrl":"https://clawhub.ai/tobewin/english-learning-animation","homepage":"https://clawhub.ai/tobewin/skills/english-learning-animation","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/tobewin/english-learning-animation","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/tobewin/skills/english-learning-animation","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"English Learning Animation technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:31:41.467Z","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-11T12:31:41.467Z","emptyReason":null},"stars":null,"forks":null,"downloads":1064,"packageName":null,"latestVersion":"0.1.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:31:41.400Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T12:31:41.467Z","lastCrawledAt":"2026-10-11T12:31:41.400Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T12:31:41.400Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.0","createdAt":"2026-08-26T06:00:32.742Z","changelog":"- Initial release of the skill for English-learning animation video creation. - Supports generating short, character-led English lesson animations with unique editorial-cartoon visuals and distinct Qwen3-TTS voices. - Introduces a defined workflow: scripting with communicative outcomes, visual/voice asset management, layered animation, and strict language/visual rules. - Includes quality gate validations and reproducible production tools for script, visual, audio, and final video outputs. - Provides starter scripts and guidance for asset and voice management, ensuring English-only, immersive lessons with editable contracts and review frames.","fileCount":37,"zipByteSize":3049384}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s174rz3f0862tcfw7pzfh5w8kn83hv2z:english-learning-animation","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s174rz3f0862tcfw7pzfh5w8kn83hv2z:english-learning-animation` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/tobewin/english-learning-animation before using production credentials."],"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-english-learning-animation/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/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-11T15:17:51.345Z"}},"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-english-learning-animation/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tobewin-english-learning-animation/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":"medium","updatedAt":"2026-10-11T12:31:41.467Z","emptyReason":null},"readme":"Skill: English Learning Animation\n\nOwner: tobewin\n\nSummary: Produce and quality-check animated English shorts with Qwen3-TTS.\n\nTags: latest:0.1.0\n\nVersion history:\n\nv0.1.0 | 2026-08-26T06:00:32.742Z | auto\n\n- Initial release of the skill for English-learning animation video creation.\n- Supports generating short, character-led English lesson animations with unique editorial-cartoon visuals and distinct Qwen3-TTS voices.\n- Introduces a defined workflow: scripting with communicative outcomes, visual/voice asset management, layered animation, and strict language/visual rules.\n- Includes quality gate validations and reproducible production tools for script, visual, audio, and final video outputs.\n- Provides starter scripts and guidance for asset and voice management, ensuring English-only, immersive lessons with editable contracts and review frames.\n\nArchive index:\n\nArchive v0.1.0: 37 files, 3049384 bytes\n\nFiles: .gitignore (90b), agents (0b), agents/openai.yaml (394b), assets (0b), assets/remotion-starter (0b), assets/remotion-starter/package.json (375b), assets/remotion-starter/script.json (4260b), assets/remotion-starter/src (0b), assets/remotion-starter/src/index.ts (105b), assets/remotion-starter/src/root.tsx (456b), assets/remotion-starter/src/video.tsx (5958b), assets/remotion-starter/tsconfig.json (214b), assets/remotion-starter/voice-manifest.json (2854b), docs (0b), docs/screenshots (0b), docs/screenshots/breakfast-order-review.png (970031b), docs/screenshots/hotel-wifi-cover.png (989392b), docs/screenshots/hotel-wifi-review.png (1062097b), LICENSE (1064b), README.md (4103b), references (0b), references/quality-gates.md (2843b), scripts (0b), scripts/extract_review_frames.py (2137b), scripts/find_qwen3_voicedesign.py (779b), scripts/generate_qwen3_voices.py (2862b), scripts/init_project.py (1097b), scripts/validate_contract.py (3420b), scripts/validate_layers.py (4102b), scripts/validate_lesson.py (3244b), scripts/validate_project.py (2048b), scripts/validate_render.py (1411b), scripts/validate_semantics.py (3618b), scripts/validate_timeline.py (6116b), skill-card.md (2289b), SKILL.md (7130b), _meta.json (145b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: english-learning-animation\ndescription: Create or revise short, character-led English-learning animation videos with an English-only hook/cover, original editorial-cartoon visuals, distinct Qwen3-TTS VoiceDesign characters, and audio-driven scene timing. Use when the user asks for animated English lessons, dialogue-based language-learning shorts, cartoon ESL videos, or to improve their character voices, subtitles, cover, motion, or audiovisual synchronization.\n---\n\n# English Learning Animation\n\nCreate a coherent, original short-form English lesson. Prioritize a watchable scene over a slide deck with narration.\n\n## Workflow\n\n1. Define one communicative outcome and write an English-only script with 3–5 usable phrases, a natural dialogue, and a brief repeat-after-me close. Do not choose a target runtime first. Let the generated speech, necessary pauses, cover, and recap determine the final duration. Many lessons will naturally land near 25–45 seconds, but this is not a quota.\n2. Build a shot list before generating visuals. Add a `semantic_contract` to `script.json`: topic, setting, visual brief, required scene tags, and stale terms that must never appear. Every scene needs `semantic_tags`. Give every voice segment a stable semantic owner such as `customer`, `barista`, or `narrator`; do not use gender as the long-term character identity.\n3. Use Qwen3-TTS VoiceDesign when no reference audio exists. Create a short audition for every recurring role first; do not reuse one voice for multiple characters. Lock each approved role's `voice_profile` and add line-specific `performance` direction.\n4. Generate an empty background plate and separate transparent character/prop cutouts that visibly match the current setting. A hotel lobby cannot stand in for a subway station, restaurant, or attraction. Use a layered animation system such as `paper-collage-remotion`; never animate a single flattened illustration as the whole video.\n5. Place audio using actual generated durations, then make visual changes at segment starts, phrase beats, and turn changes. Never add dead air or extend scenes merely to reach a round-number runtime. During dialogue, keep the speaker visually primary; during narration, use an English phrase card or semantic graphic rather than pretending a character is speaking.\n6. Render only after passing the quality gates below.\n\n## Production Starter\n\nInitialize a new project from the approved layered-animation baseline:\n\n```bash\npython <skill>/scripts/init_project.py <new-or-empty-project-directory>\n```\n\nAdd the empty background plates and transparent cutouts at the asset paths declared in `script.json`; do not copy generated user content into the skill. Each speaking cutout should declare a `speaker` field matching the narration role id.\n\nGenerate role-separated audio with the bundled script:\n\n```bash\npython <skill>/scripts/generate_qwen3_voices.py voice-manifest.json \\\n  --model <local-qwen3-tts-voicedesign-checkpoint>\n```\n\nUse `voice-manifest.json` as the editable voice contract. Every row needs a semantic role id, English line, stable `voice_profile`, and line-specific `performance` instruction. The generator remains compatible with the older combined `voice_instruction` field.\nKeep the manifest's generation seed for reproducible auditions. Device selection is automatic (`CUDA` → `MPS` → `CPU`); override it only when necessary.\n\nIf the Qwen3 path is unknown, discover it first:\n\n```bash\npython <skill>/scripts/find_qwen3_voicedesign.py\n```\n\nThe model finder respects `HF_HOME`; pass `--cache-dir` for a nonstandard cache.\n\n## Visual and Language Rules\n\n- Start with a 2–3 second cover that says the learning promise in English. Default to a topic or benefit subtitle such as `Travel English · Speak Naturally`; do not put the total runtime on the cover unless the user explicitly requests it. Any runtime claim must come from the final measured render.\n- Keep on-video language English-only for immersion. Put Chinese explanations in post copy or a separate study sheet only if requested.\n- Keep all character layers opaque. Do not use opacity to de-emphasize a non-speaker; use mild saturation/scale contrast instead.\n- Use low-frequency micro-motion only: roughly 1 px vertical travel and <= 1% scale change. Never use rapid sinusoidal shaking as a speaking cue.\n- Treat subtitle/phrase-card timing as audio-driven. Show whole dialogue lines for comprehension; use short phrase progression only for deliberate practice beats.\n- Keep phrase cards in `script.json` under `phrase_cards`, keyed by narrator segment id. The renderer must read this data; never leave topic-specific cards hard-coded in `video.tsx`.\n- Preserve a repeatable visual system: original characters, no copied logos/layouts/assets, warm editorial illustration, strong hierarchy, readable English type.\n\n## Quality Gates\n\nBefore delivery, verify the current render against `references/quality-gates.md`.\n\nRun all pre-render gates with one command:\n\n```bash\npython <skill>/scripts/validate_project.py <project-directory>\n```\n\nThis preflight also rejects missing topic/scene tags, stale prohibited terms, and hard-coded phrase-card logic. After rendering, inspect the generated cover and one review frame per segment against the `semantic_contract`; mechanical validation cannot decide whether an illustration truly depicts the requested setting.\n\nAfter rendering, run the same acceptance pipeline with the final video. This also extracts the cover and one representative frame per spoken segment:\n\n```bash\npython <skill>/scripts/validate_project.py <project-directory> \\\n  --video <final.mp4> \\\n  --review-dir <review-frame-directory>\n```\n\nUse the individual gates below when diagnosing a failure.\n\nValidate the lesson and voice contract:\n\n```bash\npython <skill>/scripts/validate_lesson.py voice-manifest.json\npython <skill>/scripts/validate_contract.py voice-manifest.json script.json\n```\n\nBefore rendering, validate that every declared character asset is a real opaque cutout rather than a flattened or ghosted plate:\n\n```bash\npython <skill>/scripts/validate_layers.py script.json public\n```\n\nAfter generating audio, check actual durations, declared scene windows, overlap, English-only captions, and speaker-to-layer ownership:\n\n```bash\npython <skill>/scripts/validate_timeline.py script.json public\n```\n\nAfter rendering, validate the stream and extract the cover plus one representative frame per spoken segment. Inspect all review frames before delivery:\n\n```bash\npython <skill>/scripts/validate_render.py out/final.mp4 --cover-frame work/cover-check.png\npython <skill>/scripts/extract_review_frames.py \\\n  out/final.mp4 script.json work/review-frames\n```\n\n## Tool Routing\n\n- Read and use `paper-collage-remotion` for cutout-layer animation and Remotion rendering.\n- Use `imagegen` to create new bitmap background plates or cutouts.\n- Use local Qwen3-TTS VoiceDesign for no-reference character voice generation. Keep its model path, role instructions, and audio assets local to the project.\n- Use `ffprobe` to read actual audio/video duration and validate the final file.\n\nFile v0.1.0:README.md\n\n# English Learning Animation\n\nCreate short, character-led English-learning videos with layered editorial-cartoon visuals, role-matched Qwen3-TTS voices, English-only on-video copy, and audio-driven timing.\n\nIt is designed for repeatable social-video production: a clear cover, a small practical dialogue, phrase practice, and an export that has passed both mechanical checks and visual review.\n\n## What it produces\n\n- Original paper-collage / editorial-cartoon scenes composed from a background plate and independent transparent character layers.\n- Distinct Qwen3 VoiceDesign roles, each with a stable voice profile and per-line performance cue.\n- Actual-audio-driven scene timing rather than an arbitrary target runtime.\n- An English-only video surface, including cover, captions, and practice cards.\n- A preflight and post-render review pipeline for sync, layer opacity, render streams, and review-frame extraction.\n\n## Real output\n\nHotel Wi-Fi and breakfast lesson cover:\n\n![Hotel Wi-Fi and breakfast cover](docs/screenshots/hotel-wifi-cover.png)\n\nRepresentative review frames from the same episode:\n\n![Hotel Wi-Fi and breakfast review frames](docs/screenshots/hotel-wifi-review.png)\n\nBreakfast-order episode review frames:\n\n![Breakfast order review frames](docs/screenshots/breakfast-order-review.png)\n\n## Quality guarantees\n\nThe skill validates the production constraints that commonly break short animated lessons:\n\n- Role ownership, voice-profile stability, audio duration, segment windows, and no overlap.\n- A solid-alpha character matte: no ghosted characters or flattened background plates.\n- English-only on-video text by default and a 2–3 second outcome-led cover.\n- Low-frequency, low-amplitude character motion to avoid visual shaking.\n- Topic-to-scene metadata via `semantic_contract` and `semantic_tags`.\n- Data-driven phrase cards from `script.json`, preventing stale cards from earlier episodes.\n\nVisual meaning still needs human review. The validation workflow extracts a cover and one representative frame for every spoken segment so that setting, props, speaker emphasis, phrase cards, and captions can be checked before publishing.\n\n## Quick start\n\n```bash\npython scripts/init_project.py /path/to/new-lesson\ncd /path/to/new-lesson\n```\n\nEdit `voice-manifest.json` and `script.json`, add the required background plate and transparent character layers, then generate role-separated audio:\n\n```bash\npython /path/to/english-learning-animation/scripts/generate_qwen3_voices.py \\\n  voice-manifest.json \\\n  --model /path/to/Qwen3-TTS-VoiceDesign\n```\n\nRun the complete preflight before rendering:\n\n```bash\npython /path/to/english-learning-animation/scripts/validate_project.py .\n```\n\nAfter the Remotion render:\n\n```bash\npython /path/to/english-learning-animation/scripts/validate_project.py . \\\n  --video out/final.mp4 \\\n  --review-dir work/review-frames\n```\n\n## Required lesson metadata\n\nEach project declares its topic and visual intent in `script.json`:\n\n```json\n{\n  \"semantic_contract\": {\n    \"topic\": \"Ask for subway directions\",\n    \"setting\": \"subway station entrance\",\n    \"scene_visual_brief\": \"A transit map, station entrance, and a traveler asking a local for directions.\",\n    \"required_scene_tags\": [\"subway\", \"transit\", \"city\"],\n    \"prohibited_terms\": [\"coffee\", \"breakfast\"]\n  },\n  \"phrase_cards\": {\n    \"n1\": [\"SUBWAY DIRECTIONS\"],\n    \"n6\": [\"HOW DO I GET TO…?\", \"IS IT FAR?\"]\n  }\n}\n```\n\nEvery scene also carries matching `semantic_tags`. The semantic validator rejects missing metadata, prohibited stale copy, and renderer code that hard-codes phrase cards.\n\n## Requirements\n\n- Python 3 with the packages required by the bundled validators and local Qwen3-TTS runtime.\n- A local Qwen3-TTS VoiceDesign checkpoint for no-reference voice generation.\n- Node.js, Remotion, FFmpeg, and FFprobe for rendering and review.\n- An image-generation workflow capable of producing empty background plates and chroma-key character cutouts.\n\nModel weights, generated voices, and final videos are intentionally not bundled in this repository.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn75z6gevjsyrznm7dg2ez6sen82h8sz\",\n  \"slug\": \"english-learning-animation\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1787724032742\n}\n\nFile v0.1.0:references/quality-gates.md\n\n# Quality Gates\n\n## Voice\n\n- One stable Qwen3 VoiceDesign instruction per character.\n- Use semantic role ids (`customer`, `barista`) and keep gender/age inside the voice profile rather than using them as identity keys.\n- Character age, role, and delivery are visibly distinct in an audition.\n- Every line combines a stable `voice_profile` with a line-specific `performance` cue.\n- Audio duration is read from the generated file before timeline placement.\n\n## Sync\n\n- Voice manifest filenames, speakers, text, cover title, and cover duration exactly match the Remotion timeline.\n- Each audio segment has a visual owner and a matching start frame.\n- The narration role id matches a declared layer `speaker` or a cutout filename.\n- Dialogue lines foreground the speaking character; narrator lines foreground an English learning graphic.\n- No audio begins before its intended picture is visible.\n- Captions or phrase cards begin and end with their audio segment.\n- Declared audio windows contain the full measured waveform and do not overlap.\n\n## Motion\n\n- Background, characters, and props are separate layers.\n- All character cutouts have a real alpha channel, transparent exterior pixels, and at least 88% fully opaque visible pixels.\n- Reject a cutout if more than 12% of its visible pixels are semitransparent; this is the mechanical ghosting alarm.\n- Speaking motion is subtle and low frequency; no jitter, flicker, or high-frequency scale oscillation.\n- At least 4 distinct visual beats for a normal dialogue lesson; add more beats when the content needs them.\n- Final runtime follows the generated speech and intentional pauses. Do not pad, trim, or hold a scene merely to hit a preferred integer or range.\n\n## Semantic continuity\n\n- `script.json` declares a `semantic_contract` and each scene carries topic-relevant `semantic_tags`.\n- Each setting receives a setting-appropriate plate and props; do not repurpose a previous location merely because its visual style matches.\n- Phrase cards are data-driven from `script.json`. No card may survive from a starter or earlier episode unless it belongs to the current lesson.\n- Before release, inspect the cover and every extracted speech frame for setting, character role, phrase-card, caption, and dialogue consistency.\n\n## Publishing\n\n- Cover is 2–3 seconds, English-only, and states the learning outcome.\n- Omit runtime from the cover by default. If the user explicitly requests a runtime claim, derive it from the final render and require it to match.\n- Video surface contains no Chinese unless the user explicitly requests bilingual on-video subtitles.\n- Validate resolution, codec, audio stream, and total duration with `ffprobe`.\n- Extract the cover and one midpoint frame for every spoken segment; inspect character solidity, speaker emphasis, subtitle correctness, and composition.\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nCreate or revise short, character-led English-learning animation videos with an English-only hook or cover, original editorial-cartoon visuals, distinct Qwen3-TTS VoiceDesign characters, and audio-driven scene timing.\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\n\n## Use Case:\n\nDevelopers and creators use this skill to produce short English-learning animation videos with dialogue, phrase practice, role-separated voices, layered visuals, and preflight and post-render quality checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Editable lesson files can direct some scripts to write or inspect files outside the intended project folder.\n\nMitigation: Use the skill only with trusted lesson projects in a sandboxed working directory, keep voice-manifest.json output_dir and segment file values project-relative, avoid absolute paths or '..', and do not run validators on untrusted script.json files.\n\nRisk: Generated lessons can pass mechanical checks while still showing the wrong setting, props, speaker emphasis, phrase cards, or captions.\n\nMitigation: Inspect the extracted cover and one representative frame per spoken segment before publishing.\n\n## Reference(s):\n\n- [Source repository](https://github.com/ToBeWin/english-learning-animation)\n- [ClawHub skill page](https://clawhub.ai/tobewin/skills/english-learning-animation)\n- [Quality Gates](references/quality-gates.md)\n- [README](README.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 contracts, shell commands, and generated project files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs guide local video production and validation; model weights, generated voices, and final videos are not bundled.]\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:assets/remotion-starter/package.json\n\n{\n  \"scripts\": {\n    \"start\": \"remotion studio src/index.ts\",\n    \"render\": \"remotion render src/index.ts PaperCollageVideo out/final.mp4\"\n  },\n  \"dependencies\": {\n    \"@remotion/media\": \"^4.0.484\",\n    \"@remotion/cli\": \"^4.0.484\",\n    \"react\": \"^19.0.0\",\n    \"remotion\": \"^4.0.484\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"^19.0.0\",\n    \"typescript\": \"^5.8.3\"\n  }\n}\n\nFile v0.1.0:assets/remotion-starter/script.json\n\n{\n  \"composition\": {\"width\": 1280, \"height\": 720, \"fps\": 30},\n  \"semantic_contract\": {\n    \"topic\": \"Order coffee in natural English\",\n    \"setting\": \"café\",\n    \"scene_visual_brief\": \"A café counter, coffee equipment, and the customer-barista interaction.\",\n    \"required_scene_tags\": [\"café\", \"coffee\", \"counter\"],\n    \"prohibited_terms\": []\n  },\n  \"phrase_cards\": {\n    \"n1\": [\"COFFEE\"],\n    \"n2\": [\"I'D LIKE\"],\n    \"n6\": [\"THAT'S ALL\"],\n    \"n7\": [\"I'D LIKE\", \"TO GO\", \"THAT'S ALL\"]\n  },\n  \"narration\": [\n    {\"id\":\"n1\",\"scene\":\"intro\",\"speaker\":\"narrator\",\"text\":\"At a café, don’t just say: coffee.\",\"caption\":\"Don’t just say: coffee.\",\"output\":\"audio/01-narrator-intro.wav\",\"from\":0,\"durationInFrames\":65},\n    {\"id\":\"n2\",\"scene\":\"intro\",\"speaker\":\"narrator\",\"text\":\"A more natural start is: I’d like…\",\"caption\":\"A natural start: I’d like…\",\"output\":\"audio/02-narrator-upgrade.wav\",\"from\":110,\"durationInFrames\":74},\n    {\"id\":\"n3\",\"scene\":\"order\",\"speaker\":\"customer\",\"text\":\"Hi! I’d like a latte, please.\",\"caption\":\"I’d like a latte, please.\",\"output\":\"audio/03-customer-order.wav\",\"from\":15,\"durationInFrames\":84},\n    {\"id\":\"n4\",\"scene\":\"choice\",\"speaker\":\"barista\",\"text\":\"Sure. For here or to go?\",\"caption\":\"For here or to go?\",\"output\":\"audio/04-barista-question.wav\",\"from\":0,\"durationInFrames\":105},\n    {\"id\":\"n5\",\"scene\":\"choice\",\"speaker\":\"customer\",\"text\":\"To go, please.\",\"caption\":\"To go, please.\",\"output\":\"audio/05-customer-answer.wav\",\"from\":115,\"durationInFrames\":48},\n    {\"id\":\"n6\",\"scene\":\"recap\",\"speaker\":\"narrator\",\"text\":\"One more useful phrase: That’s all, thanks.\",\"caption\":\"That’s all, thanks.\",\"output\":\"audio/06-narrator-close.wav\",\"from\":0,\"durationInFrames\":103},\n    {\"id\":\"n7\",\"scene\":\"recap\",\"speaker\":\"narrator\",\"text\":\"Try the whole order: I’d like a latte. To go, please. That’s all, thanks.\",\"caption\":\"Try the whole order.\",\"output\":\"audio/07-narrator-repeat.wav\",\"from\":125,\"durationInFrames\":170},\n    {\"id\":\"n8\",\"scene\":\"recap\",\"speaker\":\"narrator\",\"text\":\"Small phrase. Big upgrade.\",\"caption\":\"Small phrase. Big upgrade.\",\"output\":\"audio/08-narrator-tag.wav\",\"from\":330,\"durationInFrames\":67}\n  ],\n  \"scenes\": [\n    {\"id\":\"cover\",\"semantic_tags\":[\"café\", \"coffee\"],\"durationInFrames\":90,\"background\":\"assets/plates/cafe-empty.png\",\"caption\":{\"title\":\"ORDER COFFEE\\nIN NATURAL ENGLISH\",\"subtitle\":\"Café English · Speak Naturally\"},\"layers\":[{\"src\":\"assets/layers/customer-1.png\",\"speaker\":\"customer\",\"role\":\"primary\",\"x\":770,\"y\":110,\"width\":390,\"delay\":10,\"z\":5,\"from\":\"right\"}]},\n    {\"id\":\"intro\",\"semantic_tags\":[\"café\", \"coffee\", \"counter\"],\"durationInFrames\":210,\"background\":\"assets/plates/cafe-empty.png\",\"caption\":{\"title\":\"Coffee, but natural.\",\"subtitle\":\"\"},\"layers\":[{\"src\":\"assets/layers/customer-1.png\",\"speaker\":\"customer\",\"role\":\"primary\",\"x\":90,\"y\":110,\"width\":420,\"delay\":12,\"z\":5,\"from\":\"left\"}]},\n    {\"id\":\"order\",\"semantic_tags\":[\"café\", \"coffee\", \"counter\"],\"durationInFrames\":210,\"background\":\"assets/plates/cafe-empty.png\",\"caption\":{\"title\":\"\",\"subtitle\":\"\"},\"layers\":[{\"src\":\"assets/layers/customer-1.png\",\"speaker\":\"customer\",\"role\":\"primary\",\"x\":80,\"y\":125,\"width\":400,\"delay\":8,\"z\":5,\"from\":\"left\"},{\"src\":\"assets/layers/barista-1.png\",\"speaker\":\"barista\",\"role\":\"secondary\",\"x\":775,\"y\":100,\"width\":380,\"delay\":35,\"z\":4,\"from\":\"right\"}]},\n    {\"id\":\"choice\",\"semantic_tags\":[\"café\", \"coffee\", \"counter\"],\"durationInFrames\":180,\"background\":\"assets/plates/cafe-empty.png\",\"caption\":{\"title\":\"\",\"subtitle\":\"\"},\"layers\":[{\"src\":\"assets/layers/barista-2.png\",\"speaker\":\"barista\",\"role\":\"primary\",\"x\":755,\"y\":95,\"width\":400,\"delay\":8,\"z\":5,\"from\":\"right\"},{\"src\":\"assets/layers/customer-2.png\",\"speaker\":\"customer\",\"role\":\"secondary\",\"x\":105,\"y\":125,\"width\":400,\"delay\":34,\"z\":4,\"from\":\"left\"}]},\n    {\"id\":\"recap\",\"semantic_tags\":[\"café\", \"coffee\"],\"durationInFrames\":420,\"background\":\"assets/plates/cafe-empty.png\",\"caption\":{\"title\":\"\",\"subtitle\":\"\"},\"layers\":[{\"src\":\"assets/layers/customer-2.png\",\"speaker\":\"customer\",\"role\":\"primary\",\"x\":140,\"y\":110,\"width\":430,\"delay\":10,\"z\":5,\"from\":\"left\"},{\"src\":\"assets/layers/barista-2.png\",\"speaker\":\"barista\",\"role\":\"secondary\",\"x\":755,\"y\":110,\"width\":380,\"delay\":34,\"z\":4,\"from\":\"right\"}]}\n  ]\n}\n\nFile v0.1.0:assets/remotion-starter/tsconfig.json\n\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"bundler\",\n    \"jsx\": \"react-jsx\",\n    \"resolveJsonModule\": true,\n    \"strict\": true,\n    \"skipLibCheck\": true\n  }\n}\n\nFile v0.1.0:assets/remotion-starter/voice-manifest.json\n\n{\n  \"output_dir\": \"public/audio\",\n  \"generation\": {\"seed\": 2026, \"temperature\": 0.72, \"top_p\": 0.9},\n  \"cover\": {\"title\": \"ORDER COFFEE IN NATURAL ENGLISH\", \"seconds\": 3},\n  \"segments\": [\n    {\"file\":\"01-narrator-intro.wav\",\"speaker\":\"narrator\",\"text\":\"At a café, don’t just say: coffee.\",\"voice_profile\":\"An approachable English-learning narrator in their early thirties with clear contemporary American English and a warm conversational tone.\",\"performance\":\"Open with friendly curiosity and lightly emphasize coffee.\"},\n    {\"file\":\"02-narrator-upgrade.wav\",\"speaker\":\"narrator\",\"text\":\"A more natural start is: I’d like…\",\"voice_profile\":\"An approachable English-learning narrator in their early thirties with clear contemporary American English and a warm conversational tone.\",\"performance\":\"Sound encouraging and slow slightly before the model phrase.\"},\n    {\"file\":\"03-customer-order.wav\",\"speaker\":\"customer\",\"text\":\"Hi! I’d like a latte, please.\",\"voice_profile\":\"A friendly woman in her early twenties speaking natural contemporary American English, relaxed and politely confident.\",\"performance\":\"Start brightly, then soften into a courteous request.\"},\n    {\"file\":\"04-barista-question.wav\",\"speaker\":\"barista\",\"text\":\"Sure. For here or to go?\",\"voice_profile\":\"A warm male barista in his mid twenties speaking natural contemporary American English with an easy service tone.\",\"performance\":\"Sound welcoming and use a natural rising intonation on the choice.\"},\n    {\"file\":\"05-customer-answer.wav\",\"speaker\":\"customer\",\"text\":\"To go, please.\",\"voice_profile\":\"A friendly woman in her early twenties speaking natural contemporary American English, relaxed and politely confident.\",\"performance\":\"Answer promptly and politely with a light smile.\"},\n    {\"file\":\"06-narrator-close.wav\",\"speaker\":\"narrator\",\"text\":\"One more useful phrase: That’s all, thanks.\",\"voice_profile\":\"An approachable English-learning narrator in their early thirties with clear contemporary American English and a warm conversational tone.\",\"performance\":\"Introduce the phrase clearly and make the model sound natural.\"},\n    {\"file\":\"07-narrator-repeat.wav\",\"speaker\":\"narrator\",\"text\":\"Try the whole order: I’d like a latte. To go, please. That’s all, thanks.\",\"voice_profile\":\"An approachable English-learning narrator in their early thirties with clear contemporary American English and a warm conversational tone.\",\"performance\":\"Coach the learner calmly, separating the three phrases with useful pauses.\"},\n    {\"file\":\"08-narrator-tag.wav\",\"speaker\":\"narrator\",\"text\":\"Small phrase. Big upgrade.\",\"voice_profile\":\"An approachable English-learning narrator in their early thirties with clear contemporary American English and a warm conversational tone.\",\"performance\":\"Finish with concise satisfaction rather than an advertising voice.\"}\n  ]\n}\n\nFile v0.1.0:agents/openai.yaml\n\ninterface:\n  display_name: \"English Learning Animation\"\n  short_description: \"Produce and quality-check animated English shorts with Qwen3-TTS.\"\n  default_prompt: \"Create a content-paced English-learning animation with distinct character voices, layered cartoon motion, an English-only cover, audio-driven timing, and complete automated quality checks. Let the dialogue determine the runtime.\"\n\nFile v0.1.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 ToBeWin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","readmeExcerpt":"Skill: English Learning Animation Owner: tobewin Summary: Produce and quality-check animated English shorts with Qwen3-TTS. Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-26T06:00:32.742Z | auto - Initial release of the skill for English-learning animation video creation. - Supports generating short, character-led English lesson animations with unique editorial-cartoon visuals and distinct Qwen3-TTS voices. - I","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python <skill>/scripts/init_project.py <new-or-empty-project-directory>"},{"language":"bash","snippet":"python <skill>/scripts/generate_qwen3_voices.py voice-manifest.json \\\n  --model <local-qwen3-tts-voicedesign-checkpoint>"},{"language":"bash","snippet":"python <skill>/scripts/find_qwen3_voicedesign.py"},{"language":"bash","snippet":"python <skill>/scripts/validate_project.py <project-directory>"},{"language":"bash","snippet":"python <skill>/scripts/validate_project.py <project-directory> \\\n  --video <final.mp4> \\\n  --review-dir <review-frame-directory>"},{"language":"bash","snippet":"python <skill>/scripts/validate_lesson.py voice-manifest.json\npython <skill>/scripts/validate_contract.py voice-manifest.json script.json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: english-learning-animation\ndescription: Create or revise short, character-led English-learning animation videos with an English-only hook/cover, original editorial-cartoon visuals, distinct Qwen3-TTS VoiceDesign characters, and audio-driven scene timing. Use when the user asks for animated English lessons, dialogue-based language-learning shorts, cartoon ESL videos, or to improve their character voices, subtitles, cover, motion, or audiovisual synchronization.\n---\n\n# English Learning Animation\n\nCreate a coherent, original short-form English lesson. Prioritize a watchable scene over a slide deck with narration.\n\n## Workflow\n\n1. Define one communicative outcome and write an English-only script with 3–5 usable phrases, a natural dialogue, and a brief repeat-after-me close. Do not choose a target runtime first. Let the generated speech, necessary pauses, cover, and recap determine the final duration. Many lessons will naturally land near 25–45 seconds, but this is not a quota.\n2. Build a shot list before generating visuals. Add a `semantic_contract` to `script.json`: topic, setting, visual brief, required scene tags, and stale terms that must never appear. Every scene needs `semantic_tags`. Give every voice segment a stable semantic owner such as `customer`, `barista`, or `narrator`; do not use gender as the long-term character identity.\n3. Use Qwen3-TTS VoiceDesign when no reference audio exists. Create a short audition for every recurring role first; do not reuse one voice for multiple characters. Lock each approved role's `voice_profile` and add line-specific `performance` direction.\n4. Generate an empty background plate and separate transparent character/prop cutouts that visibly match the current setting. A hotel lobby cannot stand in for a subway station, restaurant, or attraction. Use a layered animation system such as `paper-collage-remotion`; never animate a single flattened illustration as the whole video.\n5. Place audio using actual generated durations, then make visual changes at segment starts, phrase beats, and turn changes. Never add dead air or extend scenes merely to reach a round-number runtime. During dialogue, keep the speaker visually primary; during narration, use an English phrase card or semantic graphic rather than pretending a character is speaking.\n6. Render only after passing the quality gates below.\n\n## Production Starter\n\nInitialize a new project from the approved layered-animation baseline:\n\n```bash\npython <skill>/scripts/init_project.py <new-or-empty-project-directory>\n```\n\nAdd the empty background plates and transparent cutouts at the asset paths declared in `script.json`; do not copy generated user content into the skill. Each speaking cutout should declare a `speaker` field matching the narration role id.\n\nGenerate role-separated audio with the bundled script:\n\n```bash\npython <skill>/scripts/generate_qwen3_voices.py voice-manifest.json \\\n  --model <local-qwen3-tts-voicedesign-checkpoint>\n```\n\nUse `voice-ma"},{"path":"README.md","content":"# English Learning Animation\n\nCreate short, character-led English-learning videos with layered editorial-cartoon visuals, role-matched Qwen3-TTS voices, English-only on-video copy, and audio-driven timing.\n\nIt is designed for repeatable social-video production: a clear cover, a small practical dialogue, phrase practice, and an export that has passed both mechanical checks and visual review.\n\n## What it produces\n\n- Original paper-collage / editorial-cartoon scenes composed from a background plate and independent transparent character layers.\n- Distinct Qwen3 VoiceDesign roles, each with a stable voice profile and per-line performance cue.\n- Actual-audio-driven scene timing rather than an arbitrary target runtime.\n- An English-only video surface, including cover, captions, and practice cards.\n- A preflight and post-render review pipeline for sync, layer opacity, render streams, and review-frame extraction.\n\n## Real output\n\nHotel Wi-Fi and breakfast lesson cover:\n\n![Hotel Wi-Fi and breakfast cover](docs/screenshots/hotel-wifi-cover.png)\n\nRepresentative review frames from the same episode:\n\n![Hotel Wi-Fi and breakfast review frames](docs/screenshots/hotel-wifi-review.png)\n\nBreakfast-order episode review frames:\n\n![Breakfast order review frames](docs/screenshots/breakfast-order-review.png)\n\n## Quality guarantees\n\nThe skill validates the production constraints that commonly break short animated lessons:\n\n- Role ownership, voice-profile stability, audio duration, segment windows, and no overlap.\n- A solid-alpha character matte: no ghosted characters or flattened background plates.\n- English-only on-video text by default and a 2–3 second outcome-led cover.\n- Low-frequency, low-amplitude character motion to avoid visual shaking.\n- Topic-to-scene metadata via `semantic_contract` and `semantic_tags`.\n- Data-driven phrase cards from `script.json`, preventing stale cards from earlier episodes.\n\nVisual meaning still needs human review. The validation workflow extracts a cover and one representative frame for every spoken segment so that setting, props, speaker emphasis, phrase cards, and captions can be checked before publishing.\n\n## Quick start\n\n```bash\npython scripts/init_project.py /path/to/new-lesson\ncd /path/to/new-lesson\n```\n\nEdit `voice-manifest.json` and `script.json`, add the required background plate and transparent character layers, then generate role-separated audio:\n\n```bash\npython /path/to/english-learning-animation/scripts/generate_qwen3_voices.py \\\n  voice-manifest.json \\\n  --model /path/to/Qwen3-TTS-VoiceDesign\n```\n\nRun the complete preflight before rendering:\n\n```bash\npython /path/to/english-learning-animation/scripts/validate_project.py .\n```\n\nAfter the Remotion render:\n\n```bash\npython /path/to/english-learning-animation/scripts/validate_project.py . \\\n  --video out/final.mp4 \\\n  --review-dir work/review-frames\n```\n\n## Required lesson metadata\n\nEach project declares its topic and visual intent in `script.json`:\n\n```json\n{\n  \"semantic_contrac"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75z6gevjsyrznm7dg2ez6sen82h8sz\",\n  \"slug\": \"english-learning-animation\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1787724032742\n}"},{"path":"references/quality-gates.md","content":"# Quality Gates\n\n## Voice\n\n- One stable Qwen3 VoiceDesign instruction per character.\n- Use semantic role ids (`customer`, `barista`) and keep gender/age inside the voice profile rather than using them as identity keys.\n- Character age, role, and delivery are visibly distinct in an audition.\n- Every line combines a stable `voice_profile` with a line-specific `performance` cue.\n- Audio duration is read from the generated file before timeline placement.\n\n## Sync\n\n- Voice manifest filenames, speakers, text, cover title, and cover duration exactly match the Remotion timeline.\n- Each audio segment has a visual owner and a matching start frame.\n- The narration role id matches a declared layer `speaker` or a cutout filename.\n- Dialogue lines foreground the speaking character; narrator lines foreground an English learning graphic.\n- No audio begins before its intended picture is visible.\n- Captions or phrase cards begin and end with their audio segment.\n- Declared audio windows contain the full measured waveform and do not overlap.\n\n## Motion\n\n- Background, characters, and props are separate layers.\n- All character cutouts have a real alpha channel, transparent exterior pixels, and at least 88% fully opaque visible pixels.\n- Reject a cutout if more than 12% of its visible pixels are semitransparent; this is the mechanical ghosting alarm.\n- Speaking motion is subtle and low frequency; no jitter, flicker, or high-frequency scale oscillation.\n- At least 4 distinct visual beats for a normal dialogue lesson; add more beats when the content needs them.\n- Final runtime follows the generated speech and intentional pauses. Do not pad, trim, or hold a scene merely to hit a preferred integer or range.\n\n## Semantic continuity\n\n- `script.json` declares a `semantic_contract` and each scene carries topic-relevant `semantic_tags`.\n- Each setting receives a setting-appropriate plate and props; do not repurpose a previous location merely because its visual style matches.\n- Phrase cards are data-driven from `script.json`. No card may survive from a starter or earlier episode unless it belongs to the current lesson.\n- Before release, inspect the cover and every extracted speech frame for setting, character role, phrase-card, caption, and dialogue consistency.\n\n## Publishing\n\n- Cover is 2–3 seconds, English-only, and states the learning outcome.\n- Omit runtime from the cover by default. If the user explicitly requests a runtime claim, derive it from the final render and require it to match.\n- Video surface contains no Chinese unless the user explicitly requests bilingual on-video subtitles.\n- Validate resolution, codec, audio stream, and total duration with `ffprobe`.\n- Extract the cover and one midpoint frame for every spoken segment; inspect character solidity, speaker emphasis, subtitle correctness, and composition."},{"path":"skill-card.md","content":"## Description:\n\nCreate or revise short, character-led English-learning animation videos with an English-only hook or cover, original editorial-cartoon visuals, distinct Qwen3-TTS VoiceDesign characters, and audio-driven scene timing.\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\n\n## Use Case:\n\nDevelopers and creators use this skill to produce short English-learning animation videos with dialogue, phrase practice, role-separated voices, layered visuals, and preflight and post-render quality checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Editable lesson files can direct some scripts to write or inspect files outside the intended project folder.\n\nMitigation: Use the skill only with trusted lesson projects in a sandboxed working directory, keep voice-manifest.json output_dir and segment file values project-relative, avoid absolute paths or '..', and do not run validators on untrusted script.json files.\n\nRisk: Generated lessons can pass mechanical checks while still showing the wrong setting, props, speaker emphasis, phrase cards, or captions.\n\nMitigation: Inspect the extracted cover and one representative frame per spoken segment before publishing.\n\n## Reference(s):\n\n- [Source repository](https://github.com/ToBeWin/english-learning-animation)\n- [ClawHub skill page](https://clawhub.ai/tobewin/skills/english-learning-animation)\n- [Quality Gates](references/quality-gates.md)\n- [README](README.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 contracts, shell commands, and generated project files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs guide local video production and validation; model weights, generated voices, and final videos are not bundled.]\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."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1864,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T12:31:41.467Z","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-11T12:31:41.467Z","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-11T15:17:51.346Z","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"}]}}}