Kobutai 角色
Kobutai(小舞台)是一个浏览器扩展和桌面应用:一个小巧的 Q 版角色会在页面上表演,同时播放音乐、视频、直播或播客。本技能将用户最喜欢的角色图片(或描述)转换为 Kobutai 可导入的角色:
上传 ─► 角色卡片 ─► 设定图 + 基础姿势 ─► 状态 GIF ─► make_pack.py ─► pet.json + spritesheet.webp
以用户的语言回复(英语、日语或中文)。保持图像提示为英文。
在需要用到以下步骤时阅读这些文件:
references/kobutai-contract.md—— 画面几何、哪个 GIF 对应哪个 Kobutai 状态、导入和分享规则references/prompts.md—— 每个图像提示、样式块以及每个表演的动作列表references/originality.md—— 如何处理第三方角色、原创角色、宠物和真人
图像生成
使用宿主内置的图像生成功能来绘制所有图片:
- Codex:使用
$imagegen系统技能(内置image_gen工具)。除非用户明确要求,否则不要调用 Image API 或 CLI;那条路径需要他们的 API 密钥。 - ChatGPT:原生图像生成。
Images 2.6(2025年11月)可以返回动画 GIF。为每个动画状态请求一个 GIF。如果宿主返回静态图像、拒绝输出 GIF,或者 GIF 不可用,则使用 references/prompts.md 中的网格备用方案(8帧排成 4×2 的网格 PNG);make_pack.py 会进行切片。
每次生成状态时,附上 base.png(以及用户上传的图片,标注为“仅作为身份参考”)。未附上基础图片生成的状态无效:重新生成它。
进度清单
展示并更新此清单(如果宿主支持任务列表,则使用任务列表格式):
- 读取你的角色
- 绘制设定图
- 制作动画状态
- 为 Kobutai 打包
- 检查并交付
工作流程
1. 读取角色
查看每张上传的图片,并写入 RUN/character.json(RUN = 工作区中的 kobutai-<id>/;在 ChatGPT 中为 /mnt/data/kobutai-<id>/)。字段和示例见 references/prompts.md § 角色卡片。确定:
- mode —— 根据
references/originality.md的说明,可选original/own/personal。对于可识别的第三方角色,默认值为original:受其氛围、颜色和角色启发而创作的原创角色,而非复制品。 - style ——
kobutai(Kobutai 的室内 Q 版风格,与内置角色匹配;默认)或keep(保留上传图片的艺术风格,但仍为紧凑全身体态)。 - scene —— 角色在播放内容时做什么(唱歌、跳舞、打碟、演奏乐器、舒适聆听、观看并反应、做笔记……)。从 § 表演场景中选择。
- genres / type —— 建议的 Kobutai 标签,稍后在扩展的分享对话框中用于分享。
- chroma ——
#00FF00,或当角色有绿色时使用#FF00FF。
向用户发送一条简短消息,包含角色卡片(名称、外观一行概括、模式、风格、场景、标签),并请他们确认或更改任何内容。如果他们回复“开始”或不在乎,则使用默认值继续。如果上传的图片没有明确的主要角色,请询问是哪一个。
2. 设定图和基础姿势
- 使用 § 设定图画布生成
RUN/profile.png:正面、四分之三侧面、侧面和背面视图,四种表情和一个调色板条,不能有文字。这是用户的模型设定图;展示给他们看。 - 使用 § 基础姿势生成
RUN/base.png,并附上profile.png:一个放松的全身体站立姿势,四分之三侧面视角,使用纯色背景(即 chroma 颜色)。每个状态都从这张图绘制。
如果身份特征(面部、头发、服装、调色板)有误,在此处修正;后续每一步都将复制 base.png。
3. 动画状态
生成到 RUN/states/ 目录中,每个文件一个任务,每次都要附上 base.png:
| 文件 | Kobutai 用途 | 必需 |
|---|---|---|
idle.gif | 待机状态,无内容播放 | 是 |
playing.gif | 内容播放时的表演循环(最重要) | 是 |
paused.png | 一张静态“等待你”姿势(Kobutai 仅保留一帧) | 推荐 |
appear.gif | 入场动画,角色被召唤时播放一次 | 推荐 |
click.gif | 被戳时的反应,播放一次 | 推荐 |
error.gif | 困惑/伤心循环 | 可选 |
walk.gif, review.gif | 仅当该包同时也用作 Codex 宠物时使用 | 可选 |
使用 § 状态 GIF 并结合所选场景的动作列表。顺序:先做 idle 和 playing,检查它们,然后再做其余的。每个文件生成后快速检查:相同的角色、大约 8 帧、单色背景、整个身体在画面内、脚在一条底线上、无文字、无浮动特效。若某个状态不合格,单独使用 § 修复提示重新生成;不要因为一个坏状态就重启整个流程。
从 ChatGPT 或 $CODEX_HOME/generated_images/ 下载的 GIF/PNG 必须复制到 RUN/states/ 中,并且文件名必须完全一致。
4. 打包
python3 <skill_dir>/scripts/make_pack.py RUN # Kobutai(每行最多 8 帧)
python3 <skill_dir>/scripts/make_pack.py RUN --target codex # 精确的 Codex 宠物帧数
需要 Pillow + numpy(pip install pillow numpy,可选 scipy)。脚本会抠除背景(或保留真正的透明度)、删除重复帧、统一各 GIF 的缩放比例、对齐脚底、生成 1536×1872 的 Petdex/Codex 画布,并按照 Kobutai 导入器的方式进行精确验证。选项:--grid playing=4x2 用于使用另一种布局生成网格图像,--scale click=0.9 用于某个源过大或过小时,--key-low/--key-high 用于处理顽固背景。
退出码为 2 表示验证失败;请阅读 out/qa/report.json,修复源文件后重新运行。
如果宿主无法运行 Python(某些 ChatGPT 环境),请以 zip 形式交付 profile.png、base.png、状态文件和 character.json,并告诉用户在本地运行相同的命令。
5. 检查并交付
打开 out/qa/contact.png 和 out/qa/preview.gif 查看。遇到以下情况时拒绝并修复:
- 任意一行改变了面部、头发、服装、调色板或道具
- 角色在帧与帧或状态之间大小突变或水平跳动
- 姿势被单元格边缘裁剪,或背景残留有颜色的边缘或斑点
- 表演循环看起来是静态的,或者待机状态动作幅度过大
- 在约 120 像素高(Kobutai 显示的大小)时角色不再可识别
然后交付:
kobutai-<id>.zip,包含<id>/pet.json+<id>/spritesheet.webpprofile.png和preview.gif,供用户查看和分享- 如何使用(来自
references/kobutai-contract.md§ 导入): Kobutai → 导入 → 同时选择pet.json和spritesheet.webp。可选:将该文件夹复制到~/.codex/pets/<id>/,以便同时也用作 Codex 宠物。 - 仅对于
original和own模式:他们可以在扩展中提交到每周社区库(我的导入角色 → 分享给所有人,CC BY 4.0 许可,需要提供署名),使用角色卡片中的流派。对于personal模式,直接说明仅供个人使用。
保留 RUN/(卡片、设定图、基础图、状态文件),以便后续的“加快舞蹈速度”或“重做点击”等操作只需要重新生成一个状态。
成本
一次完整的运行大约需要 8 次图像生成(设定图、基础图、待机、表演、暂停、出现、点击、可选错误)以及可能的修复。在开始第二次完整运行之前告知用户。