novel-art
给 AI 短剧出美术设定集(场景 + 叙事道具):场景的设计意图、一致性锚点、光照时段变体、 空景提示词;道具的戏剧功能、状态变体、尺度参照、白底无手提示词。 产出 art.json +…
给任何故事里的角色真出参考图(小说改编、自己原创的故事、单独设计一个角色都行,不需要小说原文): 一段话描述角色,拆成分层字段、补全后确认, 先出一张正面全身锚点,其余视图(大头照、90° 侧面、背面、细节、45° 大头照)都只参考这张锚点, 按需分档出图。每张图带标识、可单独重出,重出后自动标出哪些图过期。 支持 Qwen Image(ComfyUI)、codex 内置出图、OpenAI Images API(GPT Image 2)和自定义命令,主图与派生图可以使用不同模型。 产出 asset.json + 一组 PNG +
$ npx -y skills add eternityspring/shuohao-skills --skill character-refs --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/character-refsContext preview
The summary Claude sees to decide when to auto-load this skill.
给任何故事里的角色真出参考图(小说改编、自己原创的故事、单独设计一个角色都行,不需要小说原文): 一段话描述角色,拆成分层字段、补全后确认, 先出一张正面全身锚点,其余视图(大头照、90° 侧面、背面、细节、45° 大头照)都只参考这张锚点, 按需分档出图。每张图带标识、可单独重出,重出后自动标出哪些图过期。 支持 Qwen Image(ComfyUI)、codex 内置出图、OpenAI Images API(GPT Image 2)和自定义命令,主图与派生图可以使用不同模型。 产出 asset.json + 一组 PNG +
name: character-refs
description: |
给任何故事里的角色真出参考图(小说改编、自己原创的故事、单独设计一个角色都行,不需要小说原文):
一段话描述角色,拆成分层字段、补全后确认,
先出一张正面全身锚点,其余视图(大头照、90° 侧面、背面、细节、45° 大头照)都只参考这张锚点,
按需分档出图。每张图带标识、可单独重出,重出后自动标出哪些图过期。
支持 Qwen Image(ComfyUI)、codex 内置出图、OpenAI Images API(GPT Image 2)和自定义命令,主图与派生图可以使用不同模型。
产出 asset.json + 一组 PNG + 双击就能开的报告。零依赖。
只要提示词、不出图的话使用 novel-characters。
Use when asked to 出角色图、做角色参考图、给我的角色出图、定妆照、真出三视图、character reference images。
allowed-tools:
- Read
- Write
- Bash
metadata:
version: 2.1.0
triggers:
- character-refs
- 角色参考图
- 角色图
- 出角色图
- 创建角色
- 定妆照
- 三视图
- character reference images
license: Apache-2.0
requires:
bins:
- node # >= 18,只用标准库,无 npm 依赖
runtimes:
- claude-code
- codex输入一段角色描述,输出一组角色参考图——**角色从哪来都行**:小说改编、自己编的故事、临时想到的一个人。**一张正面全身锚点,其余每张都只参考这张锚点**。 给视频模型(H3 / Wan / Seedance)当参考图使用,也给人看。
`{baseDir}` = 本文件所在目录。脚本 `{baseDir}/scripts/character-refs.mjs`,零依赖,`node` 直接跑。
**这是仓库里唯一真出图的 skill。**其余 skill 只交提示词,因为出图那一刻才能决定模型和画风; 这个 skill 就是「那一刻」——模型在 Step 0 由用户选定,画风在建角色时选择(默认动漫,另有写实预设,也能挂自定义画风)。
头发、脸、领口三类细节额外挂确认过的正脸大头照。图与图之间不再互相参考—— 所以任何一张出坏了,单独重出这一张就行,不会连锁。
| 档位 | 内容 | 什么时候出 | | --- | --- | --- | | 1 | 正面全身(锚点) | 总是,第一张 | | 2(默认) | 正脸大头照、90° 侧面(面朝画面右侧)、背面 | 默认就出齐 | | 3 | 细节图(最多 8 张):用户点名的、角色最能认出来的地方;没有就用默认的头发 / 发饰、领口、袖口、鞋 | 有配饰或服装局部的特写 | | 4(默认不出) | 45° 大头照(面朝画面左侧) | 用户明确要 |
H3 实测:只给正面全身,服装和背影都对,但脸会走样;**加一张大头照,脸最接近**。所以默认出齐第二档。 只要锚点(比如先看看长相再说):`gen <asset.json> --tier 1`。
不来自「同一个模型」(实测 Qwen 锚点 + GPT 派生、GPT 锚点 + Qwen 派生、同组混用都衔接得上)。 每张图记录自己的模型,同组混用只在报告里提醒。
依赖它的图标成「过期」——**只标记,不删除**,旧版本全部留着。
---
node {baseDir}/scripts/character-refs.mjs config --show输出末尾写「还缺:……」就要问用户这三件事,**一次问完**:
1. **主图(锚点)使用哪个模型**:
需要 `COMFY_URL`(可选 `COMFY_USER` / `COMFY_PASS`),放环境变量或一个 .env 文件
2. **派生图使用哪个模型**:默认与主图相同。可以分开(比如锚点 GPT、派生 Qwen) 3. **出完锚点要不要停下来等人确认**:推荐 `yes`——锚点是全组的根,它不对后面全白出。 选 `no` 则自动放行,报告里标「未经人工确认」;**没过检查门的锚点不会自动放行**,要人看过再 `confirm` 或重出
node {baseDir}/scripts/character-refs.mjs config --model qwen --confirm-anchor yes --qwen-env-file <.env 路径>
# 分开设置:--anchor-model codex --derive-model qwen配置写在 `{baseDir}/config.local.json`(不进版本控制,重新安装不会覆盖)。以后默认一直使用它, 用户说「换成 xx」就重新跑 `config`。**不要把 .env 里的密码或 key 打印出来**,`config --show` 已经打码。
用户**一段话**描述角色就够了,不要一项一项问。你(模型)来拆:
node {baseDir}/scripts/character-refs.mjs intake-template照模板把描述拆进各字段,写到 `<工作目录>/<角色名>-intake.json`。规则(详见 `references/intake.md`):
其他语言先运行 `ui-template <lang>`,把打印出的英文文案逐项翻译,整块放进 intake 的 `ui` 字段
node {baseDir}/scripts/character-refs.mjs intake-check <intake.json>有问题按报错改到通过。通过后它打印**确认表**,原样给用户看,推断和默认的项带标记。 **用户确认(或改完再确认)之后才往下走。**
node {baseDir}/scripts/character-refs.mjs new <intake.json> --out <输出目录> [--look 画风]建出 `<输出目录>/<角色名>/asset.json`。画风层此时整份快照进资产,之后改预设不影响已有角色。
**画风**:用户说了就按用户说的选择,没说就是动漫。同一部剧的角色**全部使用同一个画风**。
| 预设 | `--look` 认的名字 | | --- | --- | | 动漫(默认) | `动漫` `卡通` `anime` `cartoon` `二次元` `アニメ` | | 写实照片 | `写实` `realistic` `photo` `真人` |
`looks` 列出全部预设。用户要别的画风(国风、美漫……):`look-template <最接近的预设> > my-look.json`,改 `style`(介质、线条)、 `clean`(背景与光,**必须保留白底**)、`neg`(反向词——换成画出来的画风要把 `anime` `illustration` 从反向词里拿掉), 画出来的画风把 `medium` 写成 `drawn`,然后 `--look my-look.json`。自定义画风没有实测,先出锚点看效果。
已经建好的角色要换画风:
node {baseDir}/scripts/character-refs.mjs restyle <asset.json> --look 动漫换完所有已有的图(连锚点)都标过期,旧图保留,从锚点开始重出。
node {baseDir}/scripts/character-refs.mjs gen <asset.json>不给视图和档位,就是补齐第一、二档里还没出的、已过期的图。
配置了确认:这条命令**只出锚点就停下**。把图给用户看(报告或直接打开 PNG),用户说可以再
node {baseDir}/scripts/character-refs.mjs confirm <asset.json>
node {baseDir}/scripts/character-refs.mjs gen <asset.json> # 同一条命令,接着出大头照、侧面、背面不满意就再跑一次 `gen <asset.json> front-full`(出 v2,可 `--seed` 换种子、`--model` 换模型), 或者回 Step 1 改描述。**锚点没确认,派生图会被拒。**配置为不确认时,一条命令出齐四张。
node {baseDir}/scripts/character-refs.mjs gen <asset.json> --tier 3 --reason "E03 有发饰和领口特写"`--reason` 写为什么升档,记进资产。也可以只出某几张:`gen <asset.json> detail-hair detail-neck`。
node {baseDir}/scripts/character-refs.mjs check <asset.json>每张图过代码门(尺寸 300–5760、宽高比 0.4–2.5、比例对得上、≤20MB、背景够白),再看过期。 **有问题 exit 1。**门没过或过期的,单独重出那一张:
node {baseDir}/scripts/character-refs.mjs gen <asset.json> detail-neck --model codex门里「背景够白」对全身图查四边,对大头照只查上边和两侧上半段(身体本来就顶到下边),细节图跳过并明说。 **门查不了长相、角度、取景**——出完一定要看图,这几项靠眼睛。
node {baseDir}/scripts/character-refs.mjs render <asset.json>... --out <输出目录>/character-refs.html多个角色可以一起出。语言默认取资产的 `lang`,临时换加 `--lang en`;非内置语言没带 `ui` 时,用 `--ui <文件>` 传自译文案, 缺文案会直接报错,不出半中半英的报告。界面文案换语言,角色描述保持原文。 第一档只有一张卡片;第二档起是设定图版面(左大头照,右上正面 / 侧面 / 背面,右下细节条), **默认不显示细节图**,页面上一键切换。过期的图标红框,页面顶部有图例说明,鼠标移到红框图上能看到原因;混用模型会提醒。
一句话:出了哪几张、使用的哪个模型、报告路径。门没过或过期的点名。**没看过图不要说「效果很好」。**
---
<输出目录>/
├── character-refs.html ← render 产出
└── <角色名>/
├── asset.json ← 角色描AI 短剧制作的 skill 集合:从一本小说到直接喂生成管线的制作素材——拆角色、排大纲、出场景与道具设定、写剧本、切分镜。给 AI 编码 agent 用,Claude Code 和 codex 都能跑。 整条管线长这样——改编大纲收敛结构,剧本、场景、角色三者同步迭代,分镜只做输出不做新决定: 五段管线 skill 的报告都支持中英双语界面:默认中文,render --lang en 出全英文报告(数据内容保持原文)。character-refs 的报告同样内置中英日界面,其他语言现场翻译。
Repo: eternityspring/shuohao-skills
给 AI 短剧出美术设定集(场景 + 叙事道具):场景的设计意图、一致性锚点、光照时段变体、 空景提示词;道具的戏剧功能、状态变体、尺度参照、白底无手提示词。 产出 art.json +…
从小说或短故事里拆出角色表、人物画像、形象提示词、音色提示词, 其中形象提示词含一张角色设定图的完整版面指令(左半身像 + 右全身三视图 + 细节条), 产出 JSON +…
把一本小说改编成短剧大纲五件套:改编说明、人物表、爽点表、分集梗概、资产清单, 产出 outline.json + Markdown + 单页评审报告(KPI…
给 AI 短剧写剧本:把 novel-outline 的分集梗概落成结构化的场次 + 节拍流(动作节拍与台词行交替), 台词逐句带说话人与语气,时长逐集按语速确定性折算。产出…
给 AI 短剧出分镜:三层结构——段(一次视频生成,≤15 秒)→ 分镜(段内 2–5 秒的剪切,认领剧本节拍) → 分镜图(每切一张关键帧:主分镜图钉 0.00…