在 Bianbu 桌面上养一只真正可用的 Live2D 桌宠
SpacemiT K1 / K3 · Bianbu LXQT · Wayland · Cubism Web · GTK3

TL;DR
这是一个可以安装在 RISC-V 开发板上的 Live2D 桌宠软件包【优先建议K3,体验感会很好】。
- 运行环境:SpacemiT K1 / K3 + Bianbu LXQT+ Wayland / labwc
- 核心体验:角色直接贴在桌面右下角,会眨眼、待机、响应点击、可拖动、可换模型
- 关键特性:透明区域点击穿透,不遮挡终端、文件管理器和浏览器
- 当前状态:安装
.deb后即可使用,不依赖摄像头、语音或本地 LLM - 安装命令:
sudo dpkg -i live2d-web-pet_0.3.15_all.deb
如果你只是想看“能播 Live2D 的网页”,那不是这个项目。
这里解决的是另一件事:让 Live2D 像真正的桌宠一样站在 RISC-V 桌面上。
它现在能做什么
安装完成后,以下功能开箱即用:
| 能力 | 实际效果 |
|---|---|
| 透明桌宠 | Live2D 角色直接贴在 Wayland 桌面上 |
| 点击穿透 | 点击透明区域,下面的窗口正常响应 |
| 点击 / 拖动 | 可以点击角色,也可以直接拖动位置 |
| 右键菜单 | 换角色、播放动作、调整功能 |
| 贴边 / 隐藏 | 可贴左、贴右、贴底,也可收入托盘 |
| 大小与位置 | 支持缩放和上下左右微调 |
| 模型切换 | 内置多个角色,也支持导入自己的模型 |
| Idle / 动作 | 待机动作和演出动作分开管理 |
| 看鼠标 | 鼠标进入角色区域时,模型可以跟随 |
| 气泡 | GTK 侧绘制文字,不污染 Live2D 截帧 |
| 状态窗口 | 查看 Chromium、内存、进程等运行状态 |
| 面部捕捉 | 角色随着你的面部表情进行表情的动作 |
| 姿态识别 | 根据你的上半身姿态,可以进行一定交互动作 |
| AI对话 | 可以配置大模型,实现和ai的趣味对话(需要本地llama server) |
内置模型:haruto、Furina、Diana。
支持 Cubism moc3 v2–v5。Cubism 2 的老 .moc 不在兼容范围内。
当前版本不包含:语音交互。会在后续版本退出。
设计原则:她不挡你的 make
很多桌宠会做成一个巨大的透明窗口。
看起来漂亮,然后你会发现:点不到终端、点不到文件管理器、点不到浏览器。
那不叫桌宠,那叫电子屏霸。
所以这个项目从设计上就坚持一条:
角色可点,空白点穿;不抢输入,不挡窗口。
实现方式是:对每一帧 RGBA 画面做 Alpha 分析,只把角色不透明区域注册为输入区域,透明部分直接放行给下层窗口。
- 更新频率:约 8 Hz
- 采样方式:4× 降采样
- 额外开销:不增加第二条 GPU 渲染管线
鼠标点到头发、身体、袖子:角色响应。
点到角色旁边的透明区域:下面的终端正常获得焦点。
为什么要在 RISC-V 上做这个
在 x86 / Windows 上,Live2D 已经非常成熟。但换到 RISC-V,问题突然变多。
1. Cubism Native SDK 没有 RISC-V 官方档位
官方 Runtime 没有提供可直接使用的 Linux RISC-V 版本。
并且moc3文件受版权保护,不能逆向拆解。
所以不能下载 SDK → 编译 → 结束。
2. K1 / K3 的桌面 GPU 路径不是普通 PC
板子使用 PowerVR GPU。桌面环境里 OpenGL / GLES / Vulkan / Qt / Wayland 的路径不能简单照搬 x86 教程。
“能显示”只是第一步,后面还有透明窗口、输入区域、桌面层级、窗口行为。
3. 桌宠物不能占位太多,给用户留有办公区域
普通窗口只需要创建窗口、画模型、完成。
桌宠还需要:透明、贴桌面、不挡窗口、角色区域可点击、透明区域穿透、可拖动、可弹菜单。
因此没有硬搬 Cubism Native SDK,而是选择了一条在 K1 / K3 上实际跑通的路线。
4. 充分利用K3/K1的本地算力
K3自带60T算力,可以运行最大30B LLM大模型(但作者的机器只有16G),我们可以利用这个算力,把ai对话全部本地化,同时结合int8加速,运行yolov8 pose模型,让模型跟着你动,同时兼顾本地人脸106点识别,表情识别,tts、,语音识别,做一款和人交互的应用。
架构:让 Chromium 画,让 GTK 当桌宠
核心结构如下:
┌──────────────────────────────┐
│ Live2D Model │
│ Cubism Web Runtime │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Headless Chromium │
│ WebGL / ANGLE / GPU │
│ 输出 RGBA 帧 │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ GTK Overlay │
│ 显示最新帧 │
│ 根据 Alpha 设置 Input Region │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ gtk-layer-shell │
│ Wayland / labwc │
└──────────────┬───────────────┘
│
▼
RISC-V Desktop
总之:
Cubism Web 负责画角色,Chromium 负责跑渲染,GTK 负责让她真正站到桌面上。
这个架构也带来一个额外好处:渲染逻辑与桌面行为解耦。
模型部分可以独立迭代,桌宠交互部分也可以独立修改。
一些只有实际做才会遇到的坑
Wayland 与 X11 同时存在
K1 的桌面环境里可能同时存在 DISPLAY=:0 和 WAYLAND_DISPLAY。
GTK3 如果判断错误,可能直接走到 X11,导致:
- layer-shell 初始化成功,但实际不是正确的 layer surface
- 拖动时 compositor 疯狂报 CRITICAL
- 角色被窗口管理器拖到屏幕中间,完全失控
处理方式:有 Wayland 就明确使用 Wayland。
GDK_BACKEND=wayland
修好后,贴角、拖动、气泡、layer-shell 全部正常。
Live2D 模型包比想象中乱
实际拿到的模型经常包含 VTube Studio 工程、(1).json、重复文件、多个动作配置、Idle 指向 Scene 演出动作。
如果运行时现场猜测,迟早会变成一锅粥。
所以做了一个明确的导入边界:
模型原始文件 → 导入器 → pet_meta.json → models.json → 桌宠运行时
运行时只读取已经整理好的模型信息:哪些是 Idle、哪些是演出动作、有哪些表情、模型版本、模型名称。
这样不会出现“开机突然自己开始谢幕”的诡异情况。
提供统一的模型切换管理,用户可以自己画或者更换自己的模型:

平台特性:K1 / K3 的 AI-CPU能做什么
角色渲染走 Cubism Web → Chromium → PowerVR GPU。
AI-CPU 的意义在后面的“让桌宠看见你”。
K1 / K3 的 AI 能力更适合人体姿态、人脸检测、表情识别、语音识别等视觉交互。
目前已经验证过的路线:
- SpaceMIT EP:负责 INT8 推理,例如 YOLOv8 姿态、人脸关键点等
- RVV:补上 CPU 侧图像缩放、色彩转换、后处理等,避免AI-CPU节省的时间被前后处理吃掉
- SenseVoice:板上 ASR 测试已跑通,未来可作为语音入口
- Matcha-TTS:板上测试已跑通,未来结合 LLM 和 Live2D Lip Sync
- 本地 LLM:已验证 Qwen 2B 一类模型 + llama-server,通过 OpenAI Compatible API 接入
但这些能力会以独立进程的形式存在,不会把 ORT 或 AI Runtime 直接塞进桌宠 GUI。
GUI 只负责接收抽象后的参数,保持边界清晰。
安装与使用
K1 / K3 用户可以直接安装:
sudo dpkg -i live2d-web-pet_0.3.18_all.deb
然后启动:
live2d-web-pet
也可以从图形开始菜单启动:Live2D 桌宠。
需要运行在图形桌面环境。SSH 纯字符终端请不要尝试启动。
导入自己的模型:将模型放入 ~/.local/share/live2d-web-pet/models/,然后在图形界面的“模型管理”中刷新。
当前已加入的能力(0.3.16 更新)
在原有的桌宠基础功能之上,当前版本利用K3高算力的特性,已经额外提供以下三项交互能力:
| 功能 | 实际效果 |
|---|---|
| 面部捕捉 | 角色会随你的面部表情做出对应表情动作 |
| 姿态识别 | 根据你的上半身姿态,触发一定的交互动作 |
| AI 对话 | 可配置大模型,实现与 AI 的趣味对话(需要 llama server) |
这些功能均以可选模块形式提供,不会影响桌宠本身的稳定运行。默认情况下不强制启用,你可以根据自己的需求在配置中打开。
K3运行YOLOV8 pose模型效果

本地人脸姿态检测

调用本地llama-server 使用qwen模型进行对话 (首次大概会需要几秒进行prefill ,后续对话会很快速),如图是k3的运行效果(需要在ai设置里面更换本地llama-server的API)。

当前限制(0.3.18)
受时间限制,以下功能暂未包含在当前版本中,部分已在板上单独验证,后续会逐步集成:
- 默认启用摄像头(面部捕捉与姿态识别需要手动开启)
- SenseVoice 语音入口
- Matcha-TTS 输出
- Live2D Lip Sync
- 自动关系记忆
- 向量数据库养成
- 多显示器完整跟随
- Wayland 下的全局鼠标跟踪
- 完整的养成系统设计
- 更低的资源占用
其中 SenseVoice、Matcha-TTS 已经在板上跑通,但尚未与桌宠 GUI 完全整合;其余部分属于路线图内容。我们会在后续版本中继续完善。
后续路线图
在已实现的面部捕捉、姿态识别和 AI 对话基础上,后续版本会继续扩展:
麦克风 → 语音识别 → 抽象动作参数 → Live2D 桌宠
↓
灵魂卡 → LLM → 气泡 / TTS
重点是补全语音链路(ASR + TTS + Lip Sync),并逐步加入关系记忆等长期养成能力。
作为开源,这个项目想展示什么
我们希望它成为一个可 fork 的参考实现,展示在 RISC-V 桌面上如何组合现有技术栈解决实际问题:
- 用 Cubism Web 绕过 Native SDK 缺失的问题
- 用 Headless Chromium 解决 WebGL 渲染与桌面显示分离
- 用 GTK + gtk-layer-shell 解决 Wayland 下的桌面层级与输入区域
- 用独立进程 + 抽象参数保留 AI 能力的扩展空间
- 用可选模块方式集成面部、姿态和 LLM,保持核心轻量与可维护性
- 同时,在繁琐的日常工作中,希望能有一个人能够一直陪伴着
代码边界清晰:模型导入、桌宠 Overlay、感知模块互不耦合。
想改的人可以从任意一层入手,而不必理解整个系统。
写在最后
RISC-V 开发板的桌面通常是什么样?终端、浏览器、一份正在编译的代码,有时还有 make -j8 和一堆日志。
现在桌面右下角可以多一样东西:一只会眨眼的 Live2D。
她现在已经可以稳定地站在桌面上,不挡你的窗口,点透明区域穿透,点角色互动,换模型,拖来拖去。
如果你愿意,她还可以看着你的表情做出回应,根据你的姿态动一动,甚至陪你聊几句——只要你接上 llama server。
后面的版本,我们再慢慢让她开口说话,记住更多事情。
如果社区里已经有更早的 RISC-V Live2D 桌宠,欢迎出来认领。
仓库(请用k3-dev分支): `
[ Gitee 链接:https://gitee.com/achenjiayi/rv_ive2d_pet/tree/k3_dev/]
Release / .deb: `[下载链接:https://gitee.com/achenjiayi/rv_ive2d_pet/releases/tag/v0.3.18]
直接使用
wget -O live2d-web-pet_0.3.18_all.deb \
"https://gitee.com/achenjiayi/rv_ive2d_pet/releases/download/v0.3.18/live2d-web-pet_0.3.18_all.deb"
sudo dpkg -i live2d-web-pet_0.3.18_all.deb
sudo apt-get install -f -y
live2d-web-pet
0.3.17 改动说明:
- 修复的对于dinna 等存在交互热点的区域,但是实际没有注册到加载器里面。
- 将“面部捕捉”“姿态识别”“AI 对话”移出“当前限制”,并新增一小节明确列出它们。
- “当前限制”中删除了这三项,仅保留尚未完成的功能。
- “后续路线图”调整表述,说明这些能力已实现,后续聚焦语音和记忆等。
- “作为开源案例”中增加了一条关于可选模块集成的描述,体现项目可扩展性。
- 结尾部分加入了对新功能的自然提及,保持宣传语气一致。
0.3.18 改动说明:
修好 0.3.17:AI / 灵魂不再往只读的 /usr/lib 里写。
- AI 设置:
~/.config/live2d-web-pet/ai_settings.json - 灵魂 / 聊天:
~/.local/share/live2d-web-pet/ - 自备模型:
~/.local/share/live2d-web-pet/models/ - 本地 llama 对话会流式出字;气泡默认最多 150 字

