🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Poetry Recitation

by @zhangyanbo2007

Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem...

TERMINAL
clawhub install poetry-recitation

πŸ“– About This Skill


name: poetry-recitation description: > Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem, (2) User says "ζœ—θ―΅", "θ―—ζœ—θ―΅", "θ―»δΈ€ι¦–θ―—", (3) User wants a video with voice + subtitles for any poem or literary text. NOT for: AI-generated video backgrounds, music generation, or non-poetry text-to-speech.

Poetry Recitation

Generate a video: voice recitation + starry background + timed Chinese subtitles.

Prerequisites

  • TTS pipeline at ~/.openclaw/skills/tts-gen-pipeline/ with at least one cloned voice
  • Dependencies: dashscope, websockets, moviepy, pillow, numpy
  • Font: NotoSerifCJK at /usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc
  • Quick Start

    python3 scripts/poetry_recitation.py --poem "εΊŠε‰ζ˜Žζœˆε…‰\nη–‘ζ˜―εœ°δΈŠιœœ" --title "ι™ε€œζ€"
    

    or specify a voice:

    python3 scripts/poetry_recitation.py --poem "..." --title "ι™ε€œζ€" --voice 章彦博

    Arguments

    | Arg | Required | Description | |-----|----------|-------------| | --poem | Yes | Poem text, use \n for line breaks | | --title | No | Title displayed at top of video | | --voice | No | Voice name: cloned voice (e.g. 章彦博) or system voice (cherry/serena/ethan/chelsie). Default: first cloned voice | | --output | No | Output video path (default: ~/workspace/audio/_ζœ—θ―΅.mp4</code>) |</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Available Voices</h3></p><p style="margin:8px 0"><strong style="color:#e5e7eb">Cloned voices:</strong> Check with <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">python3 ~/.openclaw/skills/tts-gen-pipeline/scripts/generate.py list-local</code></p><p style="margin:8px 0"><strong style="color:#e5e7eb">System voices:</strong> cherry (η”œηΎŽε₯³ε£°), serena (ζΈ©ζŸ”ε₯³ε£°), ethan (沉稳男声), chelsie (磁性男声)</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Workflow</h3></p><p style="margin:8px 0">1. Accept poem text from user (and optional <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--voice</code> preference) 2. Run <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">poetry_recitation.py</code> with the poem 3. Send the resulting video to user via MEDIA path β€” no extra confirmation needed</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Voice Resolution</h3></p><p style="margin:8px 0"><li style="color:#94a3b8;margin:3px 0">If <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--voice</code> matches a local cloned voice name β†’ uses cloned voice model</li> <li style="color:#94a3b8;margin:3px 0">If <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--voice</code> matches a system voice name β†’ uses system voice model</li> <li style="color:#94a3b8;margin:3px 0">If not specified β†’ uses first available cloned voice</li></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Output</h3></p><p style="margin:8px 0">Generated video (1920x1080, 24fps, H.264 + AAC) saved to <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">~/workspace/audio/</code>. </p></div></section><section class="skill-card" style="margin-bottom:20px"><h2 style="color:#f8fafc;font-size:1.2em;font-weight:800;margin:0 0 16px;display:flex;align-items:center;gap:8px">πŸ’‘ Examples</h2><div style="font-size:.92em;color:#94a3b8;line-height:1.75"><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">python3 scripts/poetry_recitation.py --poem "εΊŠε‰ζ˜Žζœˆε…‰\nη–‘ζ˜―εœ°δΈŠιœœ" --title "ι™ε€œζ€" <h2 style="color:#f3f4f6;margin:20px 0 10px;font-size:1.15em">or specify a voice:</h2> python3 scripts/poetry_recitation.py --poem "..." --title "ι™ε€œζ€" --voice 章彦博 </code></pre></p></div></section><section class="skill-card" style="margin-bottom:20px"><h2 style="color:#f8fafc;font-size:1.2em;font-weight:800;margin:0 0 16px;display:flex;align-items:center;gap:8px">βš™οΈ Configuration</h2><div style="font-size:.92em;color:#94a3b8;line-height:1.75"><p style="margin:8px 0"><li style="color:#94a3b8;margin:3px 0">TTS pipeline at <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">~/.openclaw/skills/tts-gen-pipeline/</code> with at least one cloned voice</li> <li style="color:#94a3b8;margin:3px 0">Dependencies: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">dashscope</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">websockets</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">moviepy</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">pillow</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">numpy</code></li> <li style="color:#94a3b8;margin:3px 0">Font: NotoSerifCJK at <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc</code></li></p></div></section></div><div class="two-col-side"></div></div></div><script> document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn => { btn.addEventListener('click', () => { const cmd = btn.getAttribute('data-cmd'); if (!cmd) return; navigator.clipboard.writeText(cmd).then(() => { const orig = btn.textContent; btn.textContent = 'Copied!'; setTimeout(() => btn.textContent = orig, 1500); }).catch(() => {}); }); }); </script><!--$--><!--/$--></main><footer style="background:#0a0a1a;border-top:1px solid #1a1a2e;margin-top:60px"><div style="border-top:1px solid #111;max-width:1200px;margin:0 auto;padding:24px 20px"><div style="display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-bottom:24px"><div><div style="font-weight:700;color:#ccc;margin-bottom:8px">BytesAgain</div><div style="color:#555;font-size:.82em;max-width:200px">Discover the best AI agent skills for your workflow.</div></div><div><div style="color:#888;font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Explore</div><div style="margin-bottom:6px"><a href="/skills" style="color:#666;text-decoration:none;font-size:.85em">Skills</a></div><div style="margin-bottom:6px"><a href="/articles" style="color:#666;text-decoration:none;font-size:.85em">Articles</a></div><div style="margin-bottom:6px"><a href="/use-case" style="color:#666;text-decoration:none;font-size:.85em">Cases</a></div></div><div><div style="color:#888;font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Company</div><div style="margin-bottom:6px"><a href="/about" style="color:#666;text-decoration:none;font-size:.85em">About</a></div><div style="margin-bottom:6px"><a href="/contact" style="color:#666;text-decoration:none;font-size:.85em">Contact</a></div><div style="margin-bottom:6px"><a href="/privacy-policy" style="color:#666;text-decoration:none;font-size:.85em">Privacy Policy</a></div><div style="margin-bottom:6px"><a href="/terms" style="color:#666;text-decoration:none;font-size:.85em">Terms</a></div><div style="margin-bottom:6px"><a href="/feedback" style="color:#666;text-decoration:none;font-size:.85em">Feedback</a></div></div></div><div style="border-top:1px solid #111;padding-top:16px"><div style="color:#444;font-size:.8em;margin-bottom:8px">Β© <!-- -->2026<!-- --> BytesAgain. All rights reserved.</div><div style="color:#333;font-size:.75em;line-height:1.6;max-width:720px">BytesAgain is an independent skill directory. We index and link to third-party content (ClawHub, GitHub, LobeHub, Dify, etc.) for informational purposes only. All trademarks, skill names, and content are the property of their respective owners. BytesAgain does not claim ownership of any indexed content.</div></div></div></footer><button style="position:fixed;bottom:28px;right:28px;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,#667eea,#00d4ff);color:#fff;font-size:1.3em;box-shadow:0 4px 20px #667eea66;display:flex;align-items:center;justify-content:center;transition:transform .2s">πŸ’¬</button><script src="/_next/static/chunks/0ze4gu236oq96.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[62894,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"LangProvider\"]\n3:I[16988,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\nd:I[68027,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\",1]\n:HL[\"/_next/static/chunks/07ck--t_p1b_e.css?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"style\"]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n4:Td5e,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"description\":\"Search 60,000+ verified AI agent skills via MCP API or REST. Supports 7 languages. Free, no auth required.\",\"inLanguage\":[\"en\",\"zh\",\"es\",\"fr\",\"de\",\"ja\",\"ko\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://bytesagain.com/skills?q={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://bytesagain.com/og-image.png\"},\"description\":\"AI agent skill directory. Search 60,000+ skills, 1,000+ use cases, and community requests.\",\"foundingDate\":\"2026\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Global\"},\"sameAs\":[\"https://x.com/bytesagain\",\"https://github.com/bytesagain/ai-skills\",\"https://clawhub.ai/profile/bytesagain\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"hello@bytesagain.com\",\"contactType\":\"customer support\"},\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":1}},{\"@context\":\"https://schema.org\",\"@type\":\"WebApplication\",\"name\":\"BytesAgain AI Skills Search\",\"url\":\"https://bytesagain.com\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"Web\",\"description\":\"Search engine and MCP API for 60,000+ AI agent skills. Semantic search, role recommendations, and use case packs.\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"featureList\":[\"Search 60,000+ AI agent skills\",\"Role-based recommendations for developers, creators, and traders\",\"1,000+ curated use case packs\",\"Free MCP API and REST API\",\"Multi-language search (EN, ZH, ES, FR, DE, JA, KO)\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":\"https://bytesagain.com/skills?q={search_term_string}\",\"query-input\":\"required name=search_term_string\"},\"dateModified\":\"2026-05-31\"},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BytesAgain is a curated directory of 60,000+ AI agent skills from ClawHub, GitHub, LobeHub, and Dify. Search skills by keyword in 7 languages, browse by role (developer, creator, trader, marketer) or by use case.\"}},{\"@type\":\"Question\",\"name\":\"How do I find AI skills on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use the search bar on BytesAgain.com to search by keyword in 7 languages. You can also browse by role (developer, creator, trader, marketer) or by use case. Each skill shows install instructions for Claude, Cursor, OpenClaw, Continue, and more.\"}},{\"@type\":\"Question\",\"name\":\"Is BytesAgain free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, BytesAgain is completely free. No registration required for searching skills. The MCP API is also free with rate limits.\"}},{\"@type\":\"Question\",\"name\":\"Does BytesAgain have an API for AI agents?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! BytesAgain provides a free MCP SSE endpoint at /api/mcp/sse for AI agents, plus a REST API at /api/mcp?action=search\u0026q=\u003cquery\u003e. No authentication needed.\"}},{\"@type\":\"Question\",\"name\":\"Can I request a new AI skill on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Visit the Requests page on BytesAgain.com to submit a skill request. Your request will be visible to the community and notified to the site admin.\"}}]}]"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"skill\",\"poetry-recitation\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skill\",{\"children\":[[\"slug\",\"poetry-recitation\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07ck--t_p1b_e.css?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"llms\",\"href\":\"/llms.txt\"}],[\"$\",\"link\",null,{\"rel\":\"llms-full\",\"href\":\"/llms-full.txt\"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-3C1MM9FWYF\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'G-3C1MM9FWYF');\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_9e050971-module__05dp7a__className\",\"style\":{\"background\":\"#0a0a1a\",\"color\":\"#e0e0e0\",\"margin\":0},\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":\"100%\",\"background\":\"linear-gradient(90deg,#13103a,#0d0d1f,#13103a)\",\"borderBottom\":\"1px solid #2a2a5a\",\"padding\":\"8px 20px\",\"textAlign\":\"center\",\"fontSize\":\".82em\",\"color\":\"#818cf8\"},\"children\":[\"🎁 \",[\"$\",\"strong\",null,{\"style\":{\"color\":\"#e2e8f0\"},\"children\":\"Get the FREE AI Skills Starter Guide\"}],\" β€” \",[\"$\",\"a\",null,{\"href\":\"/register\",\"style\":{\"color\":\"#00d4ff\",\"textDecoration\":\"underline\"},\"children\":\"Subscribe β†’\"}]]}],[\"$\",\"$L3\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$4\"}}],\"$L5\",\"$L6\",\"$L7\"]}]}]]}]]}],{\"children\":[\"$L8\",{\"children\":[\"$L9\",{\"children\":[\"$La\",{},null,false,null]},null,false,\"$@b\"]},null,false,\"$@b\"]},null,false,null],\"$Lc\",false]],\"m\":\"$undefined\",\"G\":[\"$d\",[\"$Le\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:I[39756,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\n10:I[37457,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\n11:I[90940,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\n12:I[16397,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\n14:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"OutletBoundary\"]\n15:\"$Sreact.suspense\"\n18:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"ViewportBoundary\"]\n1a:I[97367,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"5:[\"$\",\"main\",null,{\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"$L11\",null,{}]\n7:[\"$\",\"$L12\",null,{}]\n8:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[\"$L13\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0~t057~scpf-f.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@16\"}]}]]}]\n17:[]\nb:\"$W17\"\nc:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1a\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1b\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\ne:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/07ck--t_p1b_e.css?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1c:I[27201,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"IconMark\"]\n16:null\n"])</script><script>self.__next_f.push([1,"1b:[[\"$\",\"title\",\"0\",{\"children\":\"Poetry Recitation β€” AI Agent Skill | BytesAgain | BytesAgain\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem...\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"4\",{\"name\":\"llms-txt\",\"content\":\"https://bytesagain.com/llms.txt\"}],[\"$\",\"meta\",\"5\",{\"name\":\"llms-full-txt\",\"content\":\"https://bytesagain.com/llms-full.txt\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://bytesagain.com/skill/poetry-recitation\"}],[\"$\",\"meta\",\"7\",{\"name\":\"baidu-site-verification\",\"content\":\"codeva-0evUqX1TFs\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"Poetry Recitation β€” AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem...\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://bytesagain.com/skill/poetry-recitation\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"BytesAgain\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"Poetry Recitation β€” AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem...\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1c\",\"23\",{}]]\n"])</script><script>self.__next_f.push([1,"1d:T1463,"])</script><script>self.__next_f.push([1,"\n .skill-page { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n .two-col { display: flex; gap: 32px; align-items: flex-start; }\n .two-col-main { flex: 1; min-width: 0; }\n .two-col-side { width: 300px; flex-shrink: 0; }\n @media (max-width: 860px) {\n .two-col { flex-direction: column; }\n .two-col-side { width: 100%; }\n }\n .breadcrumb { font-size: .82em; color: #4b5563; margin-bottom: 28px; }\n .breadcrumb a { color: #818cf8; text-decoration: none; }\n .breadcrumb a:hover { text-decoration: underline; }\n .skill-card { background: #0d0d1f; border: 1px solid #1e1e3f; border-radius: 20px; padding: 28px; margin-bottom: 24px; }\n .skill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }\n .skill-badges { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n .skill-top-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }\n .badge { display: inline-flex; align-items: center; gap: 5px; font-size: .75em; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid transparent; }\n .skill-title { font-size: 1.6em; font-weight: 800; color: #f1f5f9; margin: 0 0 4px; line-height: 1.2; }\n .skill-owner { font-size: .82em; color: #4b5563; margin: 0 0 14px; }\n .skill-owner span { color: #818cf8; }\n .skill-desc { font-size: .92em; color: #94a3b8; line-height: 1.65; margin: 0 0 16px; }\n .skill-meta { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid #1e1e3f; }\n .meta-item { display: flex; flex-direction: column; gap: 2px; }\n .meta-label { font-size: .7em; color: #374151; text-transform: uppercase; letter-spacing: 1px; font-weight: 600; }\n .meta-value { font-size: .92em; color: #94a3b8; font-weight: 600; }\n .tags-row { display: flex; gap: 6px; flex-wrap: wrap; }\n .tag { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 3px 10px; text-decoration: none; }\n .tag:hover { background: #6366f125; }\n .install-box { background: #070714; border: 1px solid #1e1e3f; border-radius: 12px; overflow: hidden; margin-bottom: 24px; }\n .install-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; border-bottom: 1px solid #1e1e3f; }\n .install-dots { display: flex; gap: 6px; }\n .dot { width: 10px; height: 10px; border-radius: 50%; }\n .install-label { font-size: .72em; color: #374151; font-family: monospace; letter-spacing: 1px; }\n .install-body { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .install-cmd { font-family: 'Courier New', monospace; font-size: 1em; color: #a5f3fc; }\n .copy-btn { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 5px 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }\n .copy-btn:hover { background: #6366f125; }\n .btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 24px; background: transparent; border: 1px solid #1e1e3f; border-radius: 10px; color: #6b7280; text-decoration: none; font-weight: 600; font-size: .95em; transition: all .15s; }\n .btn-secondary:hover { border-color: #818cf8; color: #818cf8; }\n .ours-badge { display: inline-flex; align-items: center; gap: 6px; font-size: .72em; font-weight: 700; color: #22d3ee; background: #22d3ee10; border: 1px solid #22d3ee30; border-radius: 999px; padding: 4px 14px; }\n .section-card { background: #0d0d1f; border: 1px solid #1e1e3f; border-radius: 16px; padding: 22px 24px; margin-bottom: 20px; }\n .section-title { color: #f8fafc; font-size: 1.08em; font-weight: 800; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }\n /* Script box */\n .script-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; background: #0a0a1c; border-bottom: 1px solid #1e1e3f; }\n .script-filename { font-size: .72em; color: #4b5563; font-family: 'Courier New', monospace; }\n .script-copy-btn { font-size: .72em; color: #6366f1; background: none; border: 1px solid #6366f130; border-radius: 4px; padding: 2px 10px; cursor: pointer; }\n .script-copy-btn:hover { background: #6366f115; }\n .script-body { padding: 14px 16px; font-family: 'Courier New', monospace; font-size: .82em; line-height: 1.6; color: #a5f3fc; overflow-x: auto; max-height: 420px; overflow-y: auto; white-space: pre; }\n /* Articles */\n .article-card { display: block; background: #0f0f23; border: 1px solid #1a1a3e; border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: border-color .15s; }\n .article-card:hover { border-color: #6366f1; }\n @media (max-width: 600px) {\n .skill-card { padding: 20px; }\n .skill-title { font-size: 1.5em; }\n }\n "])</script><script>self.__next_f.push([1,"13:[[\"$\",\"style\",null,{\"children\":\"$1d\"}],\"$L1e\",\"$L1f\"]\n"])</script><script>self.__next_f.push([1,"20:I[78297,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0~t057~scpf-f.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\n21:T16e1,"])</script><script>self.__next_f.push([1,"\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\nname: poetry-recitation\ndescription: \u003e\n Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles.\n Use when: (1) User asks to recite a poem, (2) User says \"ζœ—θ―΅\", \"θ―—ζœ—θ―΅\", \"θ―»δΈ€ι¦–θ―—\", (3) User wants\n a video with voice + subtitles for any poem or literary text. NOT for: AI-generated video backgrounds,\n music generation, or non-poetry text-to-speech.\n\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003ePoetry Recitation\u003c/h2\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eGenerate a video: voice recitation + starry background + timed Chinese subtitles.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003ePrerequisites\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eTTS pipeline at \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e~/.openclaw/skills/tts-gen-pipeline/\u003c/code\u003e with at least one cloned voice\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eDependencies: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edashscope\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebsockets\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003emoviepy\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epillow\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enumpy\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFont: NotoSerifCJK at \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc\u003c/code\u003e\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eQuick Start\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003epython3 scripts/poetry_recitation.py --poem \"εΊŠε‰ζ˜Žζœˆε…‰\\nη–‘ζ˜―εœ°δΈŠιœœ\" --title \"ι™ε€œζ€\"\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eor specify a voice:\u003c/h2\u003e\npython3 scripts/poetry_recitation.py --poem \"...\" --title \"ι™ε€œζ€\" --voice 章彦博\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eArguments\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Arg | Required | Description |\n|-----|----------|-------------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--poem\u003c/code\u003e | Yes | Poem text, use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\\n\u003c/code\u003e for line breaks |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--title\u003c/code\u003e | No | Title displayed at top of video |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--voice\u003c/code\u003e | No | Voice name: cloned voice (e.g. 章彦博) or system voice (cherry/serena/ethan/chelsie). Default: first cloned voice |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--output\u003c/code\u003e | No | Output video path (default: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e~/workspace/audio/\u003ctitle\u003e_ζœ—θ―΅.mp4\u003c/code\u003e) |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eAvailable Voices\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCloned voices:\u003c/strong\u003e Check with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epython3 ~/.openclaw/skills/tts-gen-pipeline/scripts/generate.py list-local\u003c/code\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSystem voices:\u003c/strong\u003e cherry (η”œηΎŽε₯³ε£°), serena (ζΈ©ζŸ”ε₯³ε£°), ethan (沉稳男声), chelsie (磁性男声)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eWorkflow\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. Accept poem text from user (and optional \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--voice\u003c/code\u003e preference)\n2. Run \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epoetry_recitation.py\u003c/code\u003e with the poem\n3. Send the resulting video to user via MEDIA path β€” no extra confirmation needed\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eVoice Resolution\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eIf \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--voice\u003c/code\u003e matches a local cloned voice name β†’ uses cloned voice model\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eIf \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--voice\u003c/code\u003e matches a system voice name β†’ uses system voice model\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eIf not specified β†’ uses first available cloned voice\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eOutput\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eGenerated video (1920x1080, 24fps, H.264 + AAC) saved to \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e~/workspace/audio/\u003c/code\u003e.\n\u003c/p\u003e"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"div\",null,{\"className\":\"skill-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"Poetry Recitation\\\",\\\"description\\\":\\\"Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem...\\\",\\\"url\\\":\\\"https://bytesagain.com/skill/poetry-recitation\\\",\\\"applicationCategory\\\":\\\"clawhub\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"BytesAgain\\\",\\\"url\\\":\\\"https://bytesagain.com\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"children\":\"BytesAgain\"}],\" β€Ί \",[\"$\",\"a\",null,{\"href\":\"/skills\",\"children\":\"Skills\"}],\" β€Ί \",\"Poetry Recitation\"]}],[\"$\",\"div\",null,{\"className\":\"two-col\",\"children\":[[\"$\",\"div\",null,{\"className\":\"two-col-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-badges\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge\",\"style\":{\"color\":\"#818cf8\",\"background\":\"#818cf822\",\"borderColor\":\"#818cf844\"},\"children\":[\"πŸ¦€\",\" \",\"ClawHub\"]}],false]}],[\"$\",\"div\",null,{\"className\":\"skill-top-actions\",\"children\":[\"$\",\"$L20\",null,{\"slug\":\"poetry-recitation\"}]}]]}],[\"$\",\"h1\",null,{\"className\":\"skill-title\",\"children\":\"Poetry Recitation\"}],[\"$\",\"p\",null,{\"className\":\"skill-owner\",\"children\":[\"by \",[\"$\",\"span\",null,{\"children\":[\"@\",\"zhangyanbo2007\"]}]]}],[\"$\",\"p\",null,{\"className\":\"skill-desc\",\"children\":\"Generate poetry recitation videos using a cloned voice or system voice with starry background and Chinese subtitles. Use when: (1) User asks to recite a poem...\"}],[\"$\",\"div\",null,{\"className\":\"skill-meta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Version\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"v\",\"1.0.0\"]}]]}],[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Downloads\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":\"378\"}]]}],false,false,false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"style\":{\"flexDirection\":\"row\",\"gap\":6,\"alignItems\":\"center\"},\"children\":[[\"$\",\"a\",\"research\",{\"href\":\"/?q=research\",\"className\":\"tag\",\"children\":[\"#\",\"research\"]}],[\"$\",\"a\",\"video\",{\"href\":\"/?q=video\",\"className\":\"tag\",\"children\":[\"#\",\"video\"]}],[\"$\",\"a\",\"audio\",{\"href\":\"/?q=audio\",\"className\":\"tag\",\"children\":[\"#\",\"audio\"]}],[\"$\",\"a\",\"translation\",{\"href\":\"/?q=translation\",\"className\":\"tag\",\"children\":[\"#\",\"translation\"]}],[\"$\",\"a\",\"legal\",{\"href\":\"/?q=legal\",\"className\":\"tag\",\"children\":[\"#\",\"legal\"]}]]}]]}],[\"$\",\"div\",null,{\"style\":{\"marginTop\":6},\"children\":[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/zhangyanbo2007/poetry-recitation\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"btn-secondary\",\"style\":{\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"borderRadius\":8,\"background\":\"transparent\",\"border\":\"1px solid #1e1e3f\",\"color\":\"#6b7280\",\"textDecoration\":\"none\",\"whiteSpace\":\"nowrap\"},\"children\":[\"View on \",\"ClawHub\",\" β†’\"]}]}]]}],[\"$\",\"div\",null,{\"className\":\"install-box\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-dots\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#ef4444\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#eab308\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#22c55e\"}}]]}],[\"$\",\"span\",null,{\"className\":\"install-label\",\"children\":\"TERMINAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"install-body\",\"style\":{\"flexWrap\":\"wrap\"},\"children\":[[\"$\",\"code\",null,{\"className\":\"install-cmd\",\"children\":\"clawhub install poetry-recitation\"}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install poetry-recitation\",\"style\":{\"fontWeight\":700},\"children\":\"Copy\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"πŸ“– About This Skill\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$21\"}}]]}],null,\"$L22\",\"$L23\",null,null,null,null,false,false]}],\"$L24\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1f:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn =\u003e {\\n btn.addEventListener('click', () =\u003e {\\n const cmd = btn.getAttribute('data-cmd');\\n if (!cmd) return;\\n navigator.clipboard.writeText(cmd).then(() =\u003e {\\n const orig = btn.textContent;\\n btn.textContent = 'Copied!';\\n setTimeout(() =\u003e btn.textContent = orig, 1500);\\n }).catch(() =\u003e {});\\n });\\n });\\n \"}}]\n"])</script><script>self.__next_f.push([1,"26:I[71521,[\"/_next/static/chunks/0j7976nc1zlv1.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\",\"/_next/static/chunks/0~t057~scpf-f.js?dpl=dpl_7HE4Z9Ce6KfHeKTNo3dGPSRKXUF5\"],\"default\"]\n22:[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"πŸ’‘ Examples\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"\u003cp style=\\\"margin:8px 0\\\"\u003e\u003cpre style=\\\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\\\"\u003e\u003ccode style=\\\"color:#a5f3fc;background:none;padding:0;font-size:1em\\\"\u003epython3 scripts/poetry_recitation.py --poem \\\"εΊŠε‰ζ˜Žζœˆε…‰\\\\nη–‘ζ˜―εœ°δΈŠιœœ\\\" --title \\\"ι™ε€œζ€\\\"\\n\u003ch2 style=\\\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\\\"\u003eor specify a voice:\u003c/h2\u003e\\npython3 scripts/poetry_recitation.py --poem \\\"...\\\" --title \\\"ι™ε€œζ€\\\" --voice 章彦博\\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\"}}]]}]\n25:T455,\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eTTS pipeline at \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e~/.openclaw/skills/tts-gen-pipeline/\u003c/code\u003e with at least one cloned voice\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eDependencies: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edashscope\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebsockets\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003emoviepy\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epillow\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enumpy\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFont: NotoSerifCJK at \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc\u003c/code\u003e\u003c/li\u003e\u003c/p\u003e23:[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"βš™οΈ Configuration\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$25\"}}]]}]\n24:[\"$\",\"div\",null,{\"className\":\"two-col-side\",\"children\":[\"$\",\"$L26\",null,{\"category\":\"clawhub\",\"currentSlug\":\"poetry-recitation\",\"name\":\"Poetry Recitation\",\"tags\":[\"research\",\"video\",\"audio\",\"translation\",\"legal\"]}]}]\n"])</script></body></html>