{"id":"87d99ed8-3138-4d81-bd03-9a4320cf8b2e","slug":"paper-algorithm","kind":"skill","name":"paper-algorithm","summary":"Paper Algorithm - An AI-agent skill set that turns one sentence into a finished voiceover video. | 纸上算法 · 一句话到成片的口播视频生产线：选题、写稿、出片、发布计划。","owner":"TryWorld2026","repoUrl":"https://github.com/TryWorld2026/paper-algorithm","license":"CC-BY-SA-4.0","licenseTier":"weak-copyleft","trust":"community","stars":33,"match":null,"fewStars":false,"format":"skill","createdAt":null,"addedAt":"2026-10-14T05:55:22.485Z","logoUrl":"https://avatars.githubusercontent.com/u/221664447?u=4b0a0814f97d7ad62a9adf46cf0418ad6a67b1c9&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["design-media","data-analytics"],"tags":["ai-agents","hyperframes","tts","video-pipeline","paper-algorithm"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-14T06:48:06.446Z","sample":false,"url":"https://conduits.dev/tools/paper-algorithm","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\">\n  <img src=\"assets/hero.svg\" alt=\"TryWorld Skills\" width=\"100%\">\n</p>\n\n<div align=\"center\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC','SimSun',serif; font-size:18px; color:#1C1916; letter-spacing:8px;\">PAPER ALGORITHM · 纸上算法</b><br/>\n  <span style=\"color:#5C5445; font-size:14px;\">From one sentence to a full production line — making AI clear for everyone.</span>\n</div>\n\n<p align=\"center\">\n  <b>English</b> · <a href=\"README.zh-CN.md\">简体中文</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/status-active-8FAF8C?style=flat-square\" alt=\"status\">\n  <img src=\"https://img.shields.io/badge/skills-3-1C1916?style=flat-square\" alt=\"skills\">\n  <img src=\"https://img.shields.io/badge/platform-Codex%20%E2%80%A2%20Claude-2E5E8C?style=flat-square\" alt=\"platform\">\n  <img src=\"https://img.shields.io/badge/license-CC%20BY--SA%204.0-C0452F?style=flat-square\" alt=\"license\">\n</p>\n\n---\n\n## 🧭 What Is This\n\n**试界TryWorld official AI-agent skill set** — a complete Chinese voiceover-video production line, from one sentence to a delivered video. Topic selection, scriptwriting, polish, rendering, publish plan, and email notice are all packaged into three Skills:\n\n- **🎬 `tryworld-koubo`** — the single entry. One sentence in, auto-routed through topics → script → polish → video.\n- **🎯 `tryworld-topics`** — AIHOT-based topic selection: hundreds of daily AI headlines distilled into 3–8 fresh picks.\n- **📜 `tryworld-paper`** — the \"Paper Algorithm\" video pipeline: script → branded 16:9 video with covers, titles, and captions.\n\nInstall them into `~/.agents/skills`, open a session in any agent host that reads that directory (e.g. Agent SDK / ZCode), and say one sentence in Chinese. The skills pick up the whole chain from there — topic list, scripts, rendered video, covers, titles, even the automatic email notice.\n\n<div align=\"center\">\n<table style=\"border:1px solid #E4DCC8; border-radius:8px; background:#FBF7EC;\">\n<tr><td style=\"border-left:4px solid #C0452F; padding:14px 18px;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif; color:#1C1916; font-size:16px;\">Paper is the stage, ink is the text, vermilion is the accent, the seal is the signature.</b><br/>\n  <span style=\"color:#5C5445; font-size:13px;\">Three skills, each guarding one page — together they form a single moving page of algorithm notes: from \"what should I make this week\" to delivered videos, automatic email notices, and a four-platform publishing schedule.</span>\n</td></tr>\n</table>\n</div>\n\n## ⏱ 30-Second Quick Start\n\n**1 · Install** — clone the repo, then copy the skill folders into your skills directory:\n\n```bash\ngit clone https://github.com/TryWorld2026/paper-algorithm.git\ncd paper-algorithm\nmkdir -p ~/.agents/skills\ncp -r skills/* ~/.agents/skills/\n```\n\nOn Windows PowerShell:\n\n```powershell\ngit clone https://github.com/TryWorld2026/paper-algorithm.git\ncd paper-algorithm\nNew-Item -ItemType Directory -Force -Path \"$env:USERPROFILE\\.agents\\skills\"\nCopy-Item -Path .\\skills\\* -Destination \"$env:USERPROFILE\\.agents\\skills\" -Recurse\n```\n\n**2 · Say it** — open a session with your agent and just talk:\n\n```text\n帮我做一期口播\n```\n\nThat's it. The request is recognized and routed through the whole pipeline automatically — no commands to memorize. You can also name a skill directly (`$tryworld-koubo`, `$tryworld-topics`, `$tryworld-paper`); the `$`-name is the skill's call sign in agent sessions.\n\n**3 · Receive** — the pipeline ends with the rendered video, horizontal/vertical covers, platform titles, captions, a four-platform publish plan, and an automatic email notice.\n\n**Check your setup** — run `python -X utf8 scripts/check_skills.py` (should output `All checks passed`) and `python scripts/doctor.py` (lists missing tools, cross-platform) before producing your first video. See [CONTRIBUTING.md](CONTRIBUTING.md) for how to contribute, [CHANGELOG.md](CHANGELOG.md) for recent changes, and the [Code of Conduct](CODE_OF_CONDUCT.md).\n\n---\n\n\n### Pipeline Runner (Optional)\n\nAfter installation, use the pipeline runner instead of manually executing steps. The runner runs 6 step scripts in order, checks preconditions at each step, and stops on failure:\n\n```bash\n# List all steps\npython -m pipeline.runner --list\n\n# Preview execution plan\npython -m pipeline.runner --dry-run\n\n# Run steps (step 3 confirmation gate requires --confirm to pass)\npython -m pipeline.runner --project-dir <project-dir> --steps 1,2\n\n# Continue after confirmation\npython -m pipeline.runner --project-dir <project-dir> --steps 3,4,5,6\n```\n\nSix steps: `01 optimize` → `02 check_prose` → `03 confirm` (hard gate) → `04 tts` → `05 render` → `06 verify` (hard gate).\n\n---\n## 📑 Contents\n\n- [What Is This](#-what-is-this)\n- [30-Second Quick Start](#-30-second-quick-start)\n- [Pipeline Runner](#pipeline-runner-optional)\n- [Three Pages · Skill Overview](#-three-pages--skill-overview)\n- [Showcase](#-showcase)\n- [The Voiceover Workflow](#-the-voiceover-workflow)\n- [Paper Algorithm · Design System](#-paper-algorithm--design-system)\n- [Voice Presets](#-voice-presets)\n- [Themes](#-themes)\n- [For AI Agents](#-for-ai-agents)\n- [The Aliveness Gate](#-the-aliveness-gate)\n- [Installation and Usage](#-installation-and-usage)\n- [Repository Layout](#-repository-layout)\n- [Use and Remix](#-use-and-remix)\n- [License](#-license)\n\n---\n\n## 🧩 Three Pages · Skill Overview\n\n<div align=\"center\">\n<table>\n<tr>\n<td width=\"33%\" valign=\"top\" style=\"border:1px solid #E4DCC8; border-top:3px solid #C0452F; background:#FBF7EC; border-radius:6px; padding:12px 14px;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif; color:#1C1916; font-size:15px;\">🎬 Voiceover Router</b><br/>\n  <span style=\"color:#C0452F; font-size:12px; font-weight:bold;\">tryworld-koubo</span>\n  <br/><br/><span style=\"font-size:13px; color:#1C1916;\">One sentence in, auto-routed through topics, script, polish, and video production.</span>\n  <br/><br/><span style=\"font-size:12px; color:#2E5E8C;\">Delivers: full pipeline + email notice</span><br/>\n  <code style=\"font-size:12px;\">$tryworld-koubo</code>\n</td>\n<td width=\"34%\" valign=\"top\" style=\"border:1px solid #E4DCC8; border-top:3px solid #C0452F; background:#FBF7EC; border-radius:6px; padding:12px 14px;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif; color:#1C1916; font-size:15px;\">📜 Paper Algorithm Video</b><br/>\n  <span style=\"color:#C0452F; font-size:12px; font-weight:bold;\">tryworld-paper</span>\n  <br/><br/><span style=\"font-size:13px; color:#1C1916;\">Script → branded horizontal video, a page of moving algorithm notes.</span>\n  <br/><br/><span style=\"font-size:12px; color:#2E5E8C;\">Delivers: video · covers · titles · captions · multi-voice</span><br/>\n  <code style=\"font-size:12px;\">$tryworld-paper</code>\n</td>\n<td width=\"33%\" valign=\"top\" style=\"border:1px solid #E4DCC8; border-top:3px solid #C0452F; background:#FBF7EC; border-radius:6px; padding:12px 14px;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif; color:#1C1916; font-size:15px;\">🎯 AI Topic Selection</b><br/>\n  <span style=\"color:#C0452F; font-size:12px; font-weight:bold;\">tryworld-topics</span>\n  <br/><br/><span style=\"font-size:13px; color:#1C1916;\">Hundreds of daily AI headlines, distilled into 3-8 topics worth making — fresh, catchy, not repeated.</span>\n  <br/><br/><span style=\"font-size:12px; color:#2E5E8C;\">Delivers: topic list (angle · source · priority)</span><br/>\n  <code style=\"font-size:12px;\">$tryworld-topics</code>\n</td>\n</tr>\n</table>\n</div>\n\n---\n\n## 🎬 Showcase\n\nReal outputs from the pipeline — everything below was produced end-to-end by these skills, with no manual editing. Videos are 720p previews (originals are ~30–45 MB, 1080p); each folder also carries the voiceover script, platform titles, and the publish plan.\n\n<p align=\"center\">\n  <img src=\"examples/cordis-paper/cover_4x3.png\" width=\"45%\" alt=\"Cordis 论文精读 · 横版封面\"/>\n  &nbsp;\n  <img src=\"examples/cursor-spacex/cover_4x3.png\" width=\"45%\" alt=\"Cursor 被 SpaceX 收购 · 横版封面\"/>\n</p>\n\n| Example | Topic | Length | Video preview | In the folder |\n|---|---|---|---|---|\n| [cordis-paper](examples/cordis-paper/) | DeepSeek 论文精读：把拆插件讲成数学 | 8.8 min | [preview_720p.mp4](examples/cordis-paper/preview_720p.mp4) · 12 MB | [covers](examples/cordis-paper/cover_4x3.png) · [titles](examples/cordis-paper/titles.txt) · [script](examples/cordis-paper/2026-08-23_Cordis论文精读_口播稿.md) · [publish plan](examples/cordis-paper/发布计划.txt) |\n| [cursor-spacex](examples/cursor-spacex/) | SpaceX 买下 Cursor | 6.6 min | [preview_720p.mp4](examples/cursor-spacex/preview_720p.mp4) · 8 MB | [covers](examples/cursor-spacex/cover_4x3.png) · [titles](examples/cursor-spacex/titles.txt) · [script](examples/cursor-spacex/2026-08-16_Cursor被SpaceX收购_口播稿.md) · [publish plan](examples/cursor-spacex/发布计划.txt) |\n\n---\n\n## 🎬 The Voiceover Workflow\n\nRemember one entry: **`$tryworld-koubo`**. Hand it a script (Mode A) or ask for topics (Mode B).\n\n```mermaid\nflowchart LR\n    U([\"One sentence\"]) --> P[\"koubo Router\"]\n    P -- \"Mode A\" --> A[\"paper Video\"]\n    P -- \"Mode B\" --> S[\"topics Picks\"]\n    S --> A\n    A --> O[\"Deliverables\"]\n    O --> M[\"Email Notice\"]\n```\n\n---\n\n## 🎨 Paper Algorithm · Design System\n\nThe visual contract behind every TryWorld video — **scientific manuscript + Chinese print tradition**, a locked contract with no shortcuts.\n\n<div align=\"center\">\n<table>\n<tr>\n<td align=\"center\" style=\"background:#F4EFE4; color:#1C1916; padding:10px 14px; border:1px solid #E4DCC8;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif;\">Paper</b><br/>\n  <code>#F4EFE4</code><br/>\n  <small>Background</small>\n</td>\n<td align=\"center\" style=\"background:#1C1916; color:#F4EFE4; padding:10px 14px; border:1px solid #E4DCC8;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif;\">Ink</b><br/>\n  <code>#1C1916</code><br/>\n  <small>Text & lines</small>\n</td>\n<td align=\"center\" style=\"background:#C0452F; color:#F4EFE4; padding:10px 14px; border:1px solid #E4DCC8;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif;\">Vermillion</b><br/>\n  <code>#C0452F</code><br/>\n  <small>The only accent</small>\n</td>\n<td align=\"center\" style=\"background:#2E5E8C; color:#F4EFE4; padding:10px 14px; border:1px solid #E4DCC8;\">\n  <b style=\"font-family:Georgia,'Noto Serif SC','Songti SC',serif;\">Ink Blue</b><br/>\n  <code>#2E5E8C</code><br/>\n  <small>Notes & charts</small>\n</td>\n</tr>\n</table>\n</div>\n\n| Dimension | Convention |\n|---|---|\n| **Type** | Noto Serif SC (headings) · ZCOOL XiaoWei (notes) · monospace (data) |\n| **Motion** | ink drop · brush stroke · seal stamp — three signature moves throughout |\n| **Authenticity** | vermilion「试界原创」seal, always visible top-right — the only watermark |\n\n---\n\n## 🎙 Voice Presets\n\nThe voiceover defaults to **Yunxi** (云希, TryWorld's brand voice), with seven more presets built in — one flag to switch:\n\n| Preset | Voice | Character | Audition |\n|---|---|---|---|\n| `yunxi` (default) | 云希 | male, sunny | [▶ listen](assets/voice-samples/yunxi.mp3) |\n| `xiaoxiao` | 晓晓 | female, warm | [▶ listen](assets/voice-samples/xiaoxiao.mp3) |\n| `xiaoyi` | 晓伊 | female, lively | [▶ listen](assets/voice-samples/xiaoyi.mp3) |\n| `yunjian` | 云健 | male, passionate | [▶ listen](assets/voice-samples/yunjian.mp3) |\n| `yunyang` | 云扬 | male, news anchor | [▶ listen](assets/voice-samples/yunyang.mp3) |\n| `yunxia` | 云夏 | male, youthful | [▶ listen](assets/voice-samples/yunxia.mp3) |\n| `xiaobei` | 小贝 | female, Northeastern dialect | [▶ listen](assets/voice-samples/xiaobei.mp3) |\n| `xiaoni` | 小妮 | female, Shaanxi dialect | [▶ listen](assets/voice-samples/xiaoni.mp3) |\n\nAll samples above are synthesized with TryWorld's fixed sign-off line, so you hear each voice exactly as it sounds in a real video.\n\n---\n\n## 🎨 Themes\n\nThe default look is the **Paper Algorithm** theme (TryWorld's brand), but all brand values — palette, fonts, seal, platform name, sign-off, cover style, default voice — live in one theme file: `skills/tryworld-paper/themes/paper-algorithm.json`.\n\nWant your own brand on this pipeline? Copy the theme JSON, change the values following `tryworld-paper/references/theme-guide.md`, and ship videos under your name. The pipeline contract is not configurable — confirmation gates, the aliveness-gate check, burned-in captions, and quality checks all stay — only the skin changes. Content theme (`content-default.json`) defines topic domain, audience, length range, and target platforms — modify this JSON to change domain/brand, SKILL.md references it automatically. Writing methodology is in `tryworld-koubo/references/writing-methodology.md`; set `\"writing_rules\": \"custom\"` in the content theme to replace with your own methodology (but the `check_prose.py` hard gate cannot be disabled). The repo includes `test-brand.json` as a complete rebranding example.\n\n```jsonc\n// themes/your-brand.json (excerpt)\n{\n  \"brand\": { \"platform_name\": \"YourChannel\", \"seal_text\": \"原创认证\", \"sign_off\": \"...\" },\n  \"palette\": { \"background\": \"#F7F7F2\", \"text\": \"#111111\", \"accent\": \"#0F62FE\", \"secondary\": \"#5A6B7B\" }\n}\n```\n\nCommunity themes are welcome — PR to `skills/tryworld-paper/themes/` with a 720p sample (CC BY-SA 4.0 applies).\n\n---\n\n## 🤖 For AI Agents\n\nIf you are an AI coding agent (Claude Code / Codex / Cursor …) whose user installed or cloned this repo, this section is your operating manual. The human talks; you drive the pipeline.\n\n### 1. Skills are executable manuals\n\nEach folder under `skills/` is a skill whose `SKILL.md` is a complete, executable instruction set:\n\n| Skill | Role | Read it when |\n|---|---|---|\n| `skills/tryworld-koubo/SKILL.md` | Single entry / router | Any voiceover request (make an episode, pick topics, optimize a script) |\n| `skills/tryworld-paper/SKILL.md` | Script → video production | Once a script is confirmed for production |\n| `skills/tryworld-topics/SKILL.md` | AIHOT topic selection | Mode B topic picking |\n\nAfter installation into `~/.agents/skills`, hosts trigger these by the `description` frontmatter; when the user names one (`$tryworld-koubo`), open its SKILL.md and follow it literally.\n\n### 2. The execution sequence for one full episode\n\n1. **Route** — read `tryworld-koubo/SKILL.md`, decide Mode A (user gave a script → optimize & produce) or Mode B (topic request → select → write → produce).\n2. **Environment check** — `node --version` (≥22) · `python --version` (≥3.10) · `python -c \"import edge_tts\"` · `ffmpeg -version` · `npx hyperframes doctor`. Install or warn on whatever is missing before proceeding.\n3. **Mode B only** — run `python tryworld-topics/scripts/fetch_aihot.py` (cross-platform) or the curl fallback in its `references/api.md`, apply `references/selection-rules.md`, produce 3–8 candidate topics.\n4. **Gate 1 (STOP)** — present the topic list and wait for the user's pick. Do not proceed unasked.\n5. **Write** — follow the writing rules in koubo's SKILL.md (2,500–2,800 chars standard, sources for every datapoint, aliveness rules).\n6. **Polish & gate** — hand over to `tryworld-paper/SKILL.md`: optimize, then run `scripts/check_prose.py` until zero hard violations.\n7. **Gate 2 (STOP)** — show the full polished script + what/why of edits + element mapping + data sources. Wait for explicit confirmation. Never render without it.\n8. **Produce** — read the theme file (`skills/tryworld-paper/themes/paper-algorithm.json`) for all brand values → segment → `scripts/tts_yunxi.py` (voiceover + `sentences.json` timeline) → build HyperFrames compositions per `references/style-system.md` → `npx hyperframes lint` / `validate` / `inspect --strict` all pass → render (draft first, then high) → covers (independent design, never video frames) → titles per `references/titles.md` → everything into `outputs/` + `发布计划.txt`.\n9. **Notify** — run `python tryworld-koubo/scripts/notify_delivery.py --project-dir <dir>`; missing credentials/node → skip gracefully, never block delivery.\n10. **Verify before delivery (hard gate)** — run `python -X utf8 tryworld-paper/scripts/verify_output.py --dir <outputs>`; every item must PASS (audio track present, durations aligned, both cover sizes, titles, publish plan). A FAIL means fix and re-run — never deliver an unverified outputs folder.\n\nProjects live in their own folder (default convention: `E:\\Codex口播视频\\<slug>\\` with `work/` and `outputs/`).\n\n### 3. Hard rules (violating any = task failed)\n\n- Both gates require the user's explicit confirmation. Never self-advance past a gate.\n- `check_prose.py` hard violations must be zero before the polished script may even be shown.\n- Brand values (palette, seal, sign-off, fonts, default voice) come **only** from the theme file — never hardcode them from memory.\n- Before rendering, `lint`/`validate`/`inspect --strict` must pass with zero errors and warnings.\n- Script data points need sources; unverifiable ones are marked 待核实, never invented.\n- Run `verify_output.py` on `outputs/` before handing anything to the user; a silent video or a missing cover is a failed delivery.\n\n### 4. Common failures\n\n| Symptom | Fix |\n|---|---|\n| `npx hyperframes` missing | First `npx` call auto-installs it; needs Node ≥22 |\n| edge-tts 403 / rate limit | The tts script auto-retries once on failure; the AIHOT fetch script retries 429/5xx with backoff — retry or switch network |\n| Email notice fails | Credentials missing → it skips by design; delivery is not blocked |\n| Fonts wrong in render | Check `style-system.md` font embed table; non-native fonts need bundled woff2 |\n\n```powershell\npython tryworld-paper/scripts/tts_yunxi.py script.txt --out work/audio --voice xiaoxiao\n```\n\nFull edge-tts voice ids are accepted too. By default the pipeline never asks about voices — say you want a different one (a female voice, a news-anchor feel) and it synthesizes short auditions from your own script for you to pick.\n\n---\n\n## 🔒 The Aliveness Gate\n\nBefore delivery, every polished script and platform title passes a machine gate — **the ban targets rhetorical moves, not literal strings**. Repeating the same move with different words still counts.\n\nThe banned moves (flip-flop rhetoric, triple+ parallel structure, lyric metaphor, nominalization, punctuation tiers, hard stop-words, model signposts, jargon tiers) are defined in exactly two places, so the list cannot drift between copies:\n\n| Source | What it holds |\n|---|---|\n| `skills/tryworld-paper/references/workflow.md` §1.2.1 (item 5) | The prose rules, with action-level definitions |\n| `skills/tryworld-paper/scripts/check_prose.py` | The checker that enforces them — absolute bans + context-sensitive words, plus statistical signals (sentence-length variance, conjunction density, model-favorite lyric words, 「」-quote density) |\n\n`check_prose.py` (from [human-writing](https://github.com/KKKKhazix/human-writing) v1.1.0, MIT) is the authority when the two disagree in wording. **Zero hard violations required before the user-confirmation gate; failing means no delivery.**\n\n---\n\n## 🛠 Installation and Usage\n\n### Install\n\nEach skill folder is a self-contained Skill. Copy it into your local skills directory:\n\n```powershell\n# Install all skills\nCopy-Item -Path .\\skills\\* -Destination \"$env:USERPROFILE\\.agents\\skills\" -Recurse\n\n# Or install a single skill\nCopy-Item -Path .\\skills\\tryworld-paper -Destination \"$env:USERPROFILE\\.agents\\skills\" -Recurse\n```\n\n> Hosts that support the `~/.agents/skills` convention (e.g. Agent SDK / ZCode) pick these up automatically; for other hosts, point your host's skills directory at this path (see your host's docs). Note that `tryworld-koubo` routes to its sibling skills, so for the full pipeline install all three — see [Environment](#environment) for external dependencies.\n\n### How to trigger\n\nA skill fires when the request matches its trigger words — no commands to memorize:\n\n- Say it in plain words: 「帮我做一期口播」「这周做什么口播」「把这篇稿子做成视频」…\n- Name the skill explicitly: `$tryworld-koubo` / `$tryworld-topics` / `$tryworld-paper`\n- Paste a script and ask to produce it — the router detects the input and goes straight into the video pipeline.\n\n### What you get\n\n| You say | Route | You get |\n|---|---|---|\n| 帮我做一期口播 / 帮我选题 | `$tryworld-koubo` (auto) | routed pipeline · publish plan · email notice |\n| 这周做什么口播 | via koubo → tryworld-topics | 3–8 topic picks (angle · source · priority) |\n| 把这篇稿子做成视频 | via koubo → tryworld-paper | 16:9 video · covers · titles · captions |\n\n### In-repo check scripts\n\n- `python -X utf8 scripts/check_skills.py`: compiles skill Python scripts and runs the aliveness gate\n- `python -m pytest tests/ -v`: run the unit-test suite (check_prose, verify_output, tts_yunxi, check_skills, fetch_aihot, pipeline runner) over `examples/` scripts and titles. The exact count moves as tests are added — read it from `python -m pytest tests/ --collect-only -q` instead of hard-coding it in this file.\n- `python scripts/doctor.py`: checks Python, Node, FFmpeg/ffprobe, edge-tts, HyperFrames, and optional email credentials. Exits 1 when a required item is missing.\n\n### Environment\n\nRun `npx hyperframes doctor` to check the environment at once. These skills are built for TryWorld's own production workflow, so a few things are assumed — all adjustable in the skill files:\n\n- **Cross-platform** — data-fetching (`tryworld-topics`) and email-notice (`tryworld-koubo`) scripts are Python (`.ps1` fallback versions retained but deprecated — the `.py` scripts are the canonical path); `tryworld-topics` documents a curl fallback in its `references/`.\n- **Python 3.10+** — `pip install edge-tts` for the voiceover pipeline (`tryworld-paper/scripts/tts_yunxi.py`, default Yunxi + voice presets); `tryworld-paper/scripts/check_prose.py` needs no third-party packages.\n- **Node.js >= 22 + HyperFrames** — rendering (`npx hyperframes render` / `lint` / `validate` / `inspect`).\n- **FFmpeg** (with ffprobe, on PATH) — audio processing.\n- **External skills** — `$hyperframes` (rendering, required) and `$qq-email` (email notice, optional) are not in this repo; install them separately.\n- **Working directory** — finished projects land in `E:\\Codex口播视频` by convention; change it in the skill files to your own.\n- **Email notice** — requires `QQ_EMAIL_ACCOUNT` / `QQ_EMAIL_AUTH_CODE` credentials (via the `$qq-email` skill); skipped gracefully when absent.\n\nEach skill folder carries its own `SKILL.md` with the full workflow and where to change environment defaults.\n\n---\n\n\n### Docker One-Shot Environment\n\nSkip all dependency installs with Docker:\n\n```bash\ndocker build -t paper-algorithm .\ndocker run --rm paper-algorithm\n```\n\nContainer includes Node.js 22, FFmpeg, Python 3.12, edge-tts, and mutagen.\n\n---\n\n## 🗂 Repository Layout\n\n```text\npaper-algorithm/\n├── assets/\n│   ├── hero.svg                 # Brand banner\n│   └── license-badge.svg        # License badge\n├── README.md                    # Index (English)\n├── README.zh-CN.md              # Index (简体中文)\n├── scripts/                      # In-repo checks (static gates + doctor)\n├── LICENSE                      # CC BY-SA 4.0\n├── examples/                    # Real pipeline outputs (showcase)\n│   ├── cordis-paper/            # Sample: 720p preview · covers · titles · script\n│   └── cursor-spacex/           # Sample: 720p preview · covers · titles · script\n└── skills/\n    ├── tryworld-koubo/          # Voiceover router (routing + email notice)\n    ├── tryworld-paper/          # Paper Algorithm video production\n    │   ├── themes/              # Brand theme files (paper-algorithm.json)\n    └── tryworld-topics/         # AIHOT topic selection\n```\n\n---\n\n## 🤝 Use and Remix\n\n- **Fork, don't copy.** Use the fork button — it keeps the link back to this repository and its commit history.\n- **Keep the upstream.** Every derivative repository must carry a visible attribution to this project (`TryWorld2026/paper-algorithm`) and the license notice.\n- **Share alike.** Remixes must be released under the same license (CC BY-SA 4.0). A repository that doesn't carry this license statement is not licensed for derivative work.\n- **Commercial use is welcome** — as long as the attribution and the license travel with it.\n\n---\n\n## 📄 License\n\nThis work is licensed under a **Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)** license: share and adapt freely — including commercially — as long as you give credit, and any remix is released under the same license. Full terms: [LICENSE](LICENSE).\n\n`tryworld-paper/scripts/check_prose.py` is derived from [human-writing](https://github.com/KKKKhazix/human-writing) v1.1.0 and remains under the **MIT License** (see `skills/tryworld-paper/LICENSE-MIT`); everything else in this repository is CC BY-SA 4.0.\n\n[![CC BY-SA 4.0](assets/license-badge.svg)](https://creativecommons.org/licenses/by-sa/4.0/)\n\n---\n\n<p align=\"center\"><sub>TryWorld · Making AI clear for everyone</sub></p>\n"}