[δΈ­ζ–‡](README.md) Β· **English** > πŸ‘‹ **Open to work / collaboration** β€” I'm between jobs right now, and this repo is what I build in that spare time. > Happy to hear from anyone this resonates with. Besides **remote work**, I'm also open to a **half-collaboration**: a few thousand RMB a month for living costs plus a profit share. On-site trips are possible where the work genuinely needs them. What I'm really after is finding people on the same wavelength to build something in this AI wave. > Email: **[eternityspring@gmail.com](mailto:eternityspring@gmail.com)** Β· RΓ©sumΓ©: **[resume.79px.com](https://resume.79px.com)** Β· WeChat **`hao_dev`** (please mention `github` when you add me) > > These skills are free and open source, built and battle-tested on real AI short-drama production. > If they save you an afternoon, consider [**buying me a coffee on Ko-fi**](https://ko-fi.com/eternityspring) β˜• β€” it keeps the updates coming. # shuohao-skills **Agent skills for AI short-drama production** β€” from a novel to shoot-ready material: character bibles, adaptation outlines, scene & prop bibles, screenplays, storyboards. Built for AI coding agents, **runs in both Claude Code and codex**. Here is the whole pipeline β€” **the outline converges the structure; script, scenes and characters iterate together; the storyboard only outputs, it makes no new decisions**: AI short-drama production pipeline | Skill | What it does | | --- | --- | | [**novel-outline**](skills/novel-outline/README.en.md) | Adapts a novel into a five-piece short-drama outline: adaptation notes, cast, beats, per-episode synopses, asset list (including a narrative-prop table). All 14 quality gates are script-checked; includes a checkup mode for existing outlines | | [**novel-characters**](skills/novel-characters/README.en.md) | Turns the cast the outline settled on into a character bible: profiles, design prompts, voice prompts, model sheets. Seeds the roster from outline.json; report language and image style are both configurable | | [**novel-art**](skills/novel-art/README.en.md) | Art bibles for AI production (scenes + narrative props): consistency anchors, lighting & state variants, scale references, no-people/no-hands white plates. Seeds from outline.json; all 11 quality gates script-checked | | [**novel-script**](skills/novel-script/README.en.md) | Screenwriting for AI short drama: scenes + beat flow (action beats alternating with dialogue lines), per-episode duration deterministically estimated from reading speed, a gated cold-open hook in the first 3 beats, a per-character line book with voice prompts that feeds straight into TTS. All 10 quality gates script-checked | | [**novel-storyboard**](skills/novel-storyboard/README.en.md) | Storyboarding for AI short drama: segments (one generation, ≀15s) β†’ cuts (2–5s hard gate) β†’ keyframes (master pinned at 0.00s, sub-frames at their cut marks), with MiniMax H3 prompt alignment and cut times audited verbatim; frames actually generated with the design sheets as references, plus one-command H3 production packs. All 17 quality gates script-checked (the 17th audits shot-recipes cards when the library is mounted) | Off to the side of the pipeline there is a **shot vocabulary library** that none of the five skills is required to mount: | Skill | What it does | | --- | --- | | [**shot-recipes**](skills/shot-recipes/README.en.md) | A shot vocabulary library for generative AI video β€” 67 cards in two families: **recipe cards** (17) answer "how should this cut in this scene be taken", **technique cards** (50) answer "what this device is, when to use it, and **when not to**" across camera move, angle, shot size, composition, lens & depth, lighting and special technique. **All 20 official H3 camera terms are covered, and completeness itself is a gate** β€” `lint` names any domain item nobody wrote. **Useful well beyond short drama** (product promos, explainers, vlogs). Every card declares must-have phrases that can be machine-audited; `novel-storyboard` can optionally mount the library with `--shots` | **Every skill renders its report in English too** β€” reports default to a Chinese UI; pass `--lang en` to `render` for a fully English report (data content stays as authored). ## One page for the whole pipeline The five stage reports can be merged into a single page with a left-hand nav β€” **you get a pane for every stage you actually have**: ```bash node scripts/report.mjs --from --out report.html ``` `--from` discovers the five json files using the [working-directory convention](#repository-conventions); you can also point at each one directly (`--outline` `--cast` `--art` `--script` `--storyboard`). Ran only the character pass? You get one pane, no error. It is an **assembler, not a sixth skill**: it imports no skill code, it shells out to each skill's own `render --html` and stitches the results. So the six skills stay untouched, still run standalone, and are still copyable on their own β€” and when a skill changes its rendering, this picks it up for free. Merging solves three problems, **all of them inside the assembler, none inside the skills**: - **Style bleed.** The five reports share 57 class names, 13 of which mean different things in different reports (`.copy`, `.kpis`, `.badge`, `.chip`…), so every selector gets a scope prefix - **Script bleed.** Each report's script does document-wide lookups like `document.querySelector('.expo')`. Merged, that only ever finds the first one β€” all five export buttons would break. Each script gets wrapped in a scoping proxy - **Asset paths.** Each report's images are relative to its own json directory (`images/…`, `E01-01/f1.png`) and get rebased against the output file One pane shows at a time by default (the five together run to roughly 600k characters). "Show all" in the bottom-left expands every pane so Cmd+F reaches the whole document. Number keys `1`–`5` switch panes, and `#pane-script` deep-links straight to one. ```bash node scripts/report-selftest.mjs # 92 assertions, no browser needed ``` Point it at a novel and you get all five: **novel-outline Β· short-drama adaptation outline** ![Adaptation outline report](skills/novel-outline/assets/report.webp) **novel-characters Β· character bible** ![Character bible report](skills/novel-characters/assets/report.webp) **novel-art Β· art bible (scenes + props, sheets actually generated by the skill)** ![Art bible report](skills/novel-art/assets/report.webp) **novel-script Β· screenplay (duration gauge + episode scripts + line book)** ![Screenplay report](skills/novel-script/assets/report.webp) **novel-storyboard Β· storyboard (cut rhythm strip + master/sub keyframes actually generated by the skill + H3 prompts)** ![Storyboard report](skills/novel-storyboard/assets/report.webp) And off the pipeline, the shot recipe gallery β€” **an empty cell in the category Γ— energy matrix is a vocabulary gap**: **shot-recipes Β· shot recipe library (category Γ— energy matrix + card wall, example frames actually generated by the skill)** ![Shot recipe library report](skills/shot-recipes/assets/report.webp) ## Install ```bash git clone https://github.com/eternityspring/shuohao-skills.git cd shuohao-skills ./scripts/install.sh ``` It detects whether you have Claude Code or codex installed and **symlinks** every skill into place β€” so `git pull` takes effect immediately, with no reinstall. ```bash ./scripts/install.sh novel-characters # just one skill ./scripts/install.sh --codex # only into codex ./scripts/install.sh --uninstall # remove the symlinks ``` Prefer to do it by hand: ```bash ln -s "$PWD/skills/novel-characters" ~/.claude/skills/novel-characters ln -s "$PWD/skills/novel-characters" ~/.codex/skills/novel-characters ``` ## Requirements | | Required? | Notes | | --- | --- | --- | | **Node** | Yes | β‰₯ 18. The skill scripts use only the standard library β€” **no npm dependencies, nothing to install** | | **Model quota** | Yes | Uses your current session's quota. **No API key needed** | | **codex CLI** | Optional | Only for image generation (via its built-in `$imagegen`). Without it, image steps are skipped and everything else still runs | > **Note on output language.** These skills are Chinese-first. `novel-characters` produces Chinese character profiles even for an English source novel, and its validator actively rejects English in those fields. See that skill's README for what it would take to change. ## Repository conventions One directory per skill, **self-contained and copyable on its own**: ``` skills// β”œβ”€β”€ SKILL.md the workflow the agent reads (required) β”œβ”€β”€ README.md the docs a human reads β”œβ”€β”€ scripts/ β”‚ β”œβ”€β”€ .mjs deterministic helpers, zero dependencies β”‚ └── selftest.mjs self-test, never calls a model (required) β”œβ”€β”€ references/ detailed instructions, loaded on demand β”œβ”€β”€ examples/ bundled samples that double as test fixtures └── assets/ screenshots ``` Two hard requirements: - Every skill must have a `SKILL.md` - Every skill must have a `scripts/selftest.mjs` that **calls no model and costs no quota**, covering all deterministic logic Run every self-test before adding a skill: ```bash for f in skills/*/scripts/selftest.mjs; do node "$f"; done ``` There is no CI β€” the self-tests run in about a second, so running them locally beats waiting on a pipeline. **Only tested on macOS with Node 24**; there is no platform-specific code, so Linux and older Node releases should be fine, but that is unverified. ## License [Apache 2.0](LICENSE)