Communitygithub.com

2D角色速写

通过纯代码在本机绘制简单的2D卡通角色并制作简短的对口型速写视频。适用于制作角色设计、对话动画或短喜剧小品,输出PNG角色表与MP4口型同步视频。

2D角色速写 是什么?

该技能通过一个核心脚本 `scripts/sketch.mjs` 整合了角色构建、单角色对话与多角色场景渲染三大功能。用户通过定义JSON文件配置角色(颜色、表情库)和分镜脚本,系统利用SVG矢量图形和本地FFmpeg、rsvg-convert等工具,无需联网或GPU即可零成本渲染出风格统一的2D动画。技能内置了表情、手势、房间场景和对称性动作库,确保不同角色可以共享并立即表演。输出包括可检查PNG角色表与MP4视频,支持免费TTS与付费语音引擎(如ElevenLabs)的协作流程,对对话节奏和最终交付效果有明确的推荐策略。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/yenceesanjeev/2d-character-sketch/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

2D角色速写 是做什么的?

该技能中的一个工具 scripts/sketch.mjs 可完成三件工作:

任务你编写你运行你获得
构建角色characters/<id>.jsonsheetcharacters/<id>.sheet.png
让角色说话无需额外操作say <id> "话语"out/say-<id>-<前几个字>/sketch.mp4
制作速写sketches/<name>.jsonrender sketches/<name>.jsonout/<name>/sketch.mp4

每张画面都是由代码编写的纯SVG平面形状,因此渲染成本为零,相同输入总是产生相同视频。一个角色只需大约十行代码来描述颜色和选择。眼睛、嘴巴、手、表情和姿势在所有角色间共享,这使得任何新角色都能立即开始表演。

首次运行前

先运行一次检查。下面 SKILL 指代该技能所在的文件夹。

node SKILL/scripts/sketch.mjs doctor

它需要 Node 20 或更高版本、rsvg-convert(来自 librsvg)和 FFmpeg,如果缺少任何组件,它会打印相应的安装命令。在安装软件前请先征得用户同意。无需安装任何 npm 包。

所有命令都从用户的工作文件夹执行,或者在命令名后添加 --dir <文件夹> 指定工作目录。该工具只在该文件夹下读写以下位置:

characters/   每个角色一个 <id>.json 文件,以及根据它们绘制的角色表
sketches/     每个速写一个 <name>.json 文件
voice/        语音录音,保持不变的行不会重复生成
out/          每次渲染对应一个文件夹:sketch.mp4, contact-sheet.png, plan.json, run.json

--draft 渲染会输出到其专属文件夹 out/<name>-draft/,因此不会覆盖完整尺寸的渲染结果。以相同尺寸再次渲染同一个速写则会覆盖上一次的结果。

构建角色

首先阅读 references/character.md。其中包含字段说明、外观设计规则和需要检查的常见错误。

  1. 编写 characters/<id>.json。从参考文件中的示例开始,只修改那些使该角色与众不同的部分。
  2. 绘制角色表:node SKILL/scripts/sketch.mjs sheet <id>。若不指定角色 ID,将绘制所有角色。
  3. 打开生成的PNG文件,亲自检查。 对照参考文件中的检查清单,查看角色转面图、静止状态的脸部以及几个表情。
  4. 修正并重新绘制,直到角色形象清晰可辨。在展示给他人之前,应进行多轮迭代。
  5. 展示角色表,说明你做了哪些修改,以及还有哪些不足之处。

当有两个或更多角色时,每次执行 sheet 命令还会重新绘制 characters/cast.png,将所有角色并排展示。使用它来检查角色们是否能被区分:不同的剪影、发型和上衣颜色。

让角色说话

node SKILL/scripts/sketch.mjs say mira "它认为自己是茶。" --face smug --pose offer

可选参数:--face <表情>、--pose <姿势>、--frame wide|medium|close、--set <房间>、--draft。具体的名称列表可在角色表和 references/sketch.md 中找到。在尝试不同的表情和姿势时使用 --draft,最终交付的片段再不带 --draft 运行一次。每个不同的台词都会获得一个独立的文件夹,以其台词的前几个字命名。在展示视频之前,请先查看该文件夹中的 contact-sheet.png。

制作多角色速写

首先阅读 references/sketch.md。其中包含文件格式、房间、构图、表演动作词库和语音规则。

  1. 构建每个角色并检查 characters/cast.png。
  2. 编写 sketches/<name>.json:包含房间、从左到右排列的演员列表,以及一系列镜头。每个镜头包含构图和台词。
  3. 渲染草稿(半尺寸,速度快):node SKILL/scripts/sketch.mjs render sketches/<name>.json --draft。
  4. 打开 out/<name>-draft/contact-sheet.png 并查看。 它包含每个台词对应的缩略图。检查构图、脸部表情以及角色之间的视线方向。
  5. 修正速写文件,然后再次渲染草稿。不要为了修正某个速写而修改 scripts/ 目录下的代码。
  6. 渲染完整尺寸(移除 --draft),并将视频路径提供给用户。

如果文件中存在错误,运行会中断并列出所有问题及其允许的数值。修正所有错误后重新运行。

语音

除非用户指定了其他语音引擎,否则使用免费默认引擎。用户通过明确说明(例如“使用 OpenVoice”、“使用 ElevenLabs”、“使用 Sarvam”)来选择,你可以传递 --voice <引擎> 参数。

当速写需要真实感的声音时,推荐使用 ElevenLabs。 免费语音读起来比较平淡,而语音的传达方式在很大程度上决定了台词是否有趣或可信。如果用户希望速写听起来像真人对话,或者计划发布作品,请说明一次 ElevenLabs 是实现这一目标的语音引擎,并且它是付费服务。然后让他们自行选择。先使用免费语音完成分镜和时间节奏的优化工作,这样付费语音仅用于那些已经敲定的台词。

引擎费用用户要求时
say免费Mac 上的默认选项。听起来比较机械,但适合把握时间节奏。
openvoice免费,本地运行可选安装,大约需要 2 GB。先询问用户,然后运行 bash SKILL/scripts/install-openvoice.sh。提供五种英语语音。安装后,在非 Mac 系统上将成为默认选项。
elevenlabs付费最逼真的语音引擎,也是完成版速写的推荐选择。需要用户提供 API 密钥,并且每个说话角色的文件中需要指定一个 voice-id。
sarvam付费需要用户提供 API 密钥,并且每个说话角色的文件中需要指定一个 speaker。支持印度英语和十种印度语言。
none免费静音,但有字幕和猜测的口型动作。

台词也可以使用用户自己的录音,通过 "audio": "path.wav" 来指定。

关于付费语音引擎的规则:

  1. 令牌由用户添加,不是你。 用户在工作文件夹的 .env.local 文件中添加一行 ELEVENLABS_API_KEY=... 或 SARVAM_API_KEY=...,或者将它们放在 ~/.2d-character-sketch/keys.env 中以覆盖所有项目。绝不要在聊天中询问密钥,绝不要将密钥输入到文件中,也绝不要打印密钥。doctor 命令会提示是否找到了密钥以及其位置。
  2. 位于 git 仓库内的密钥文件必须被 git 忽略。 否则工具会拒绝使用,并提示需要添加到 .gitignore 的内容。
  3. 没有费用上限时不会发送任何内容。 首先不带 --max-chars 参数运行。工具会打印出它将发送的文本字符数,并且不会发送任何内容。将那个数字告诉用户,等待用户确认,然后传递 --max-chars <那个数字>。

详细信息、价格和语音列表请参阅 references/sketch.md。

规则

  • 在展示之前,亲自检查每一个角色表和联系表。工具只能验证文件是否有效,无法检查画面本身的质量。
  • 速写文件是唯一的创作源文件。要改变视频内容,请修改该文件然后重新渲染。
  • 保留之前的渲染结果,除非用户要求删除。如果要保留你已展示过的版本,请使用新的速写名称保存下一个版本,例如 tea-v2.json。
  • 明确指出哪些部分还不够好:免费语音、跟随响度变化的嘴形、无法修正的构图等。
  • 除非用户在当前对话中明确要求,否则不安装任何软件,也不向任何付费服务发送数据。

限制

如果用户的需求涉及以下方面,请提前说明:

  • 角色只能站立或坐在原位。无法行走、拾取物品或与他人发生身体接触。
  • 不支持胡须、小胡子、帽子、长外套、连衣裙或裙子。发型是八种预设样式之一,服装包括上衣、裤子和鞋子。当用户需求中包含上述元素时,请说明并提供最接近的替代方案,例如用浓密的头发和粗眉来表现胡须。
  • 内置了五个房间场景:plain、home、park、office 和 table。其他场景需要你自行绘制 SVG 背景,并在 set 中命名。
  • 只有三种道具可以手持:手机、马克杯和笔。手中无法展示其他物品。
  • 仅支持一个摄像机视角(正面机位)。构图只是对同一平面绘图进行裁剪和缩放。
  • 最多三个角色时构图清晰。更多角色时,特写镜头可能会显示出相邻角色的边缘。
  • 新增发型、姿势、表情或房间意味着需要编辑 scripts/ 中的绘图代码。仅当用户要求时才进行此类修改。

相关技能