给 Live2D Cubism Editor 5.4 版本 辅助建模的小程序
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10 / 11(64 位) |
| .NET Framework | 4.x(Win10/11 系统自带 4.8,不需要额外安装任何东西) |
Live2D Cubism最低版本限制为 Editor 5.4 alpha1 版本
- 到 Releases 下载
Live2D-Param-v0.0.1-alpha.1-Setup.exe - 双击运行,点「安装」。
- 完成。
- 「设置 → 应用 → 已安装的应用」里找到 Live2D Param 0.0.1 alpha.1,点卸载;
- 或双击安装目录里的
Uninstall.exe
卸载会保留 %APPDATA%\Live2D Param(里面存着 Editor 给的访问令牌和你的偏好设置),这样重装之后不用再去 Editor 里重新授权一遍。想彻底清除就手动删掉那个目录。
卸载就是清空安装目录:里面的文件、子文件夹、快捷方式、卸载信息全都删掉,只有你放在那里的 配色方案\ 和 脚本\ 留着。因为卸载会清空整个文件夹,所以重要的东西别扔进根目录及其其他文件夹里面,除非你不想要了。
(安装包的文件名里带版本号,比如 Live2D-Param-v0.0.1-alpha.1-Setup.exe,下面简写成 Setup.exe)
Setup.exe 图形界面安装
Setup.exe /S 静默安装
Setup.exe /S /NODESKTOP 静默安装且不建桌面快捷方式
Setup.exe /DIR="D:\somewhere" 指定安装目录
Setup.exe /? 显示帮助
Uninstall.exe 图形界面卸载
Uninstall.exe /S 静默卸载
静默模式没有界面,过程会写进 %TEMP%\Live2DParam-Setup.log,退出码 0 表示成功。
- 启动 Cubism Editor 5.4
- 打开菜单 [文件] → [外部应用程序的集成设置]。
- 把连接开关打开,端口保持一致,默认
22033的即可。
- 在Live2D Param里,左下角的 Editor端口 输入与 Editor里的端口一致的端口号(默认
22033),再点**「连接」**。 此时 Editor 的对话框里会出现链接许可,把 「权限」 和 「编辑」 勾上。
-
点 「读取参数组」 拉取列表。
-
改颜色:
- 点「改色」列的色块 ,点某个预设直接选中;点右下角的 「自定义…」 会再打开一个三角取色窗口(详见下方「取色窗口」);
- 想批量改 → 先在列表里多选若干行(Ctrl / Shift),再点 「设为颜色…」;不选任何行则作用于全部;
- 想改名 → 直接双击 「名称更改」 列改。
改过的行会变成浅黄色底,右侧「待应用」列显示改了什么。此时还没写入 Editor。
改错了可以按
Ctrl+Z逐步「返回上一步」,或按Ctrl+Y「前进一步」; 工具条上也有对应的两个图标按钮。按Ctrl+Shift+Z可以放弃全部更改。 -
点 「应用更改」 写入 Editor。
这一步 Editor 会弹出编辑对话框并临时锁定,处理过程中请不要操作 Editor。 如果中途想放弃,在那个对话框里点「取消」,所有改动会被整体回滚 —— 你选的颜色会保留在列表里,可以直接重试。
-
想看操作记录,点工具条上的 「记录」 打开独立窗口,里面可以下载为 txt(下载出来的文件会被设为只读)。
点工具条上的 「脚本」 打开脚本窗口:左边是脚本列表(每行右边一枚「官方 / 我的」小标签),右边是选中脚本的说明和规则明细(逐条列出「什么条件 → 什么颜色」,还带小色块;有渐变的会画一条渐变预览),选中一个点「运行」,它就按规则把颜色填进列表。
脚本是一份声明式的 JSON,描述「什么样的参数组上什么颜色」。它特意不是可执行代码,两个原因都很实在:
- 本工具只用了系统自带的 .NET 编译器,跑不了 JS / Python 这类脚本语言;
| 来源 |
|---|---|---|
| 默认自带 | 名字是默认的(按名字上色.json 等 3 个) | 随程序走(内嵌在 exe 里),每次启动按当前版本覆盖写出 |
| 你自己的 | 名字不跟默认撞的 *.json | 丢进「脚本」文件夹就会被列出来。想改官方脚本?给它改个文件名(例如 层级渐变-我的.json),它立刻变成你自己的脚本,程序再也不会覆盖它 |
{
"version": 1,
"name": "按名字上色",
"description": "显示在窗口里的一句话说明",
"rules": [
{ "name": "*眼*", "color": "blue" },
{ "id": "ParamGroup*", "depth": 0, "cycle": ["red", "green", "blue"] },
{ "minDepth": 1, "color": "#8AC1FF" },
{ "name": "*", "gradient": "ask" }
]
}一条规则 = 匹配条件 + 上色方式:
| 字段 | 含义 |
|---|---|
name |
匹配参数组名称,支持 *(任意多个字符)和 ?(一个字符);不写 = 不限 |
id |
匹配参数组 ID,写法同上 |
depth |
只匹配正好在第几层的组(0 = 顶层) |
minDepth |
只匹配第几层及更深的组 |
color |
上什么色:red / orange / yellow / green / blue / purple / gray / default,或者 "#RRGGBB" 自定义色 |
cycle |
命中多个组时按顺序轮流用这几个颜色(数组,元素写法同 color) |
gradient |
命中多个组时按顺序在这些色标之间平滑渐变:写 ["#RRGGBB", …] 就是固定色标;写 "ask" 则运行的时候弹个小窗口让你现选一个颜色,色带是「白 → 本色 → 黑」,但只截取前半段(白 → 本色),不会往黑里走 |
color/cycle/gradient三选一;- 规则从上往下匹配,第一条命中的说了算;一条都没命中的组保持原样;
- 脚本名字默认取文件名(不含扩展名),写了
name就以name为准; - 匹配不区分大小写,中文关键词直接写就行(
*手*能同时命中「手臂」和「手指」)。
- 结果只是填进列表当「待应用」改动(和「载入方案」是同一条路子),不会直接写进 Editor —— 看过没问题再点「应用更改」;
- 作用于全部参数组(脚本是批量规则,和「载入方案」一个口径;不是「设为颜色…」那种按选中行的行为);
- 整个脚本算一步撤回,按
Ctrl+Z一次退掉; - 脚本里写了
"gradient": "ask"的,运行前会弹一个临时小窗口让你选颜色(选完窗口就关掉、不留着):选一个颜色,按顺序从白铺到它,最后一组正好是所选的颜色;窗口里能看到渐变预览,取消就等于没跑; - 脚本打不开(JSON 写错了)时列表里会标上红色并显示具体错误,不影响其它脚本;
- 跑完脚本窗口会自己关掉(工具条上「运行后关掉窗口」那个勾选框说了算,默认勾上;取消勾选就能连着跑好几个脚本)。这个勾选会记住,下次打开还是上次的样子。关掉后接着看列表里的待应用改动、确认后点「应用更改」即可;没能跑起来时(还没读参数组、一条都没命中、取消了选色)窗口不关,会弹一句说明。
Editor 是 WebSocket 服务端,本工具是客户端;默认端口 22033;消息是 JSON(UTF-8 文本)。
请求: {"Version":"1.1.0","Timestamp":…,"RequestId":"<uuid>","Type":"Request","Method":"…","Data":{…}}
响应: {"RequestId":"<同一个>","Type":"Response","Method":"…","Data":{…}}
错误: {"RequestId":"<同一个>","Type":"Error","Method":"…","Data":{"ErrorType":"…"}}
事件: {"Type":"Event","Method":"NotifyUndoCancel","Data":{…}} ← Editor 主动推送
响应靠 RequestId 配对;事件靠 Method 分发。本工具会串行发送请求,遵守官方文档「等上一个命令的响应再发下一个」的规则。
- 用户在 Editor 对话框里点「取消」后,Editor 会用历史记录把模型恢复到编辑前状态,并且此后所有编辑 API 都返回错误;
- 只有
EditEnd(Cancel=false)成功返回true才算真正提交。因此本工具直到最后一步成功才更新界面基线; - 中途失败时会自动发一次
EditEnd(Cancel=true)请求回滚,并且不碰你在列表里选的颜色 —— 它们继续保持「待应用」状态,方便你修正问题后直接重试; - 万一回滚本身也失败了,日志会明确警告模型状态不确定、请用
Ctrl+Z检查。
程序会持续监听 NotifyUndoCancel 事件,所以你中途取消时它会立刻知道。
构建只用 Windows 自带的 .NET Framework 编译器 csc.exe:
- 不需要 Visual Studio、不需要 .NET SDK、不需要 NuGet、不需要 npm;
- 产物是几十 KB 的原生单文件 exe,目标用户双击即跑,不需要装任何运行时(Win10/11 自带 .NET Framework 4.8)。
代价是只能用 C# 5 语法(系统自带的 csc 就是 C# 5)——不支持字符串插值、?.、nameof 等。代码里已经据此编写。
不需要真实 Editor,也不需要 Python:
cd test
npm install ws --cache "..\.npm-cache" --no-audit --no-fund # 首次需要
.\run-client-tests.ps1它会用 src\ 里的真实协议代码编译出一个控制台测试程序,然后对模拟 Editor 跑三个场景:
| 场景 | 验证内容 |
|---|---|
| 正常流程 | 连接 → 注册 → 令牌复用 → 权限查询 → 读取(含嵌套组递归解析)→ 改颜色改名 → 应用 → 读回确认 → 未开会话报错 → 目标不存在报错 |
| 用户中途取消 | Editor 推送 NotifyUndoCancel 后,会话被正确标记失效,后续调用被拦下并给出说得清原因的错误 |
| 没有编辑权限 | 读取被干净地拒绝(而不是静默返回空列表),错误信息明确指出是权限问题 |
当前结果:三个场景共 59 项断言,全部通过。
cd test
npm start # 另开一个终端:起 mock(端口 22133)
npm run selftest # mock 自身的协议自测(47 项断言)
npm run flagtest # mock 的异常场景自测(31 项断言,自动起停实例)
# 单独调试某个场景
node mock-editor.js --port 22134 --cancel-after-ms 300
node mock-editor.js --port 22135 --deny-edit
node mock-editor.js --help端口:测试统一用
22133–22135。22033 是 Cubism Editor 的默认端口,本机开着 Editor 时 mock 绑不上,测试探针会连到真实 Editor 上、报出一堆莫名其妙的失败。说明:
npm install ws如果不指定--cache,在受限环境下可能因为 npm 默认缓存在工作区之外而被拒绝。指定一个工作区内的缓存目录即可。模拟 Editor 只用于开发测试。
# 只读:连接 + 读参数组结构,不改任何数据
.\tools\bin\clienttest.exe --port 22033 --mode live --reuse-token
# 写回:改名改色后**整体回滚**,并再次读取确认模型已恢复原样
.\tools\bin\clienttest.exe --port 22033 --mode write-probe --reuse-token
# 抓真实 Editor 的原始 JSON,核对字段名(文档不准时靠它)
.\tools\bin\clienttest.exe --port 22033 --mode dump --reuse-token--reuse-token 复用 %APPDATA%\Live2D Param\token.txt,授权过一次之后就不用每次重新勾选。
write-probe 是自带回滚的:所有改动都在同一个编辑会话里完成,最后用 EditEnd(Cancel=true) 让 Editor 依据历史记录整体回滚,然后再读一次确认名称、颜色类型、自定义色三项都恢复成原值。既能确认写入路径正确,又不在模型上留下痕迹。实测(真实 Editor):
[PASS] 改名真的生效了(读回 "qqqqsss_写入测试") ← 证明写入字段是 Name
[PASS] 预设色写入生效(读回 red)
[PASS] 自定义色写入生效(读回 #FF00AA)
[PASS] EditEnd(Cancel=true) 返回 true,表示已回滚到编辑前状态
[PASS] 回滚后名称 / 颜色类型 / 自定义色均已恢复
连接、读取、写入、回滚都已自动化覆盖。仍建议人工确认的只剩「观感」层面的东西:
- 打开 Editor 5.4 alpha1 + 一个模型,切到建模模式,打开集成开关;
- 启动本工具 → 连接 → 在 Editor 对话框里勾选「权限」+「编辑」;
- 读取参数组 → 确认列表里的组名和颜色与 Editor 参数面板里的一致;
- 改一两个组的颜色 → 应用 → 回到 Editor 里确认颜色真的变了;
- 重开一次工具 → 连接 → 确认不需要重新勾选权限(令牌复用生效);
- 改颜色后在 Editor 里按 Ctrl+Z → 确认撤销历史是干净的(读取操作没有污染历史记录)。
- 只支持 Cubism Editor 5.4 alpha1 及以上。
- 只有 Windows 版。核心逻辑与界面没有强绑定,但界面用的是 WinForms。
- 预设色的色块是按截图采样值画的。预设色的实际 RGB 由 Editor 内部决定,API 不返回、字节码里也没有;这里的值是拿 Editor 取色界面的截图逐像素采出来的,观感与 Editor 一致。写回时只发送预设的名字,最终颜色仍以 Editor 为准。只有
LabelColorType = "Custom"时颜色才由#RRGGBB精确决定。 - 应用期间 Editor 会被锁定,这是 Editor 侧的设计(弹出模态编辑对话框),不是本工具造成的。
- 本版本不支持修改参数组的 ID(
NewId)。API 是支持的,但界面没做,避免误操作破坏模型。 - 读取时若模型特别大,
GetParameterStructure的响应可能较大,第一次读取会稍慢(已把 JSON 长度上限放开)。 - 令牌以明文存在
%APPDATA%\Live2D Param\token.txt(与官方 Python 样例的做法一致)。它只能用于连本机的 Editor,但如果你在共享电脑上使用,请留意这一点。 - 端口可能被别的程序占用。Editor 默认用 22033,如果本机已有别的服务占着这个端口,Editor 就无法监听,工具也就连不上。改端口即可 —— 两边都改(Editor 的集成设置对话框 + 本工具顶部的端口输入框)。
- Live2D Cubism Editor 外部应用程序的集成(官方手册)
- Live2D Cubism Editor 外部集成 API(官方手册)
- 本文档对应版本:5.4 alpha1 编辑 API(中文)
- 官方样例 CubismExternalAppPluginSamples(分支 54alpha,04_EditSample)
这个软件都是使用的dsh编写的,我自己都还不知道有什么bug等等。如果要用后果自负。 关于这个软件,是因为是自己做建模的时候因为一些小癖好,还有重复性的工作等等才写的这个软件,实际上还是自用的,但是如果你也想用的话自行下载。 同时也欢迎更多的人一起来完善这个软件,目前这个软件就只是支持一个小小的改文件夹颜色的功能,但其实脑子里面还有好多功能没写。 最重要的是我不会UI啊,怎么写都好丑的。