EzVibeR+
A Tauri + Vue desktop pet that lives on your screen: a Live2D mascot you can chat with, take screenshots through, and have remember your conversations.
核心能力
- Live2D 桌宠 — 透明置顶窗口上的可交互模型,点头/身子有不同反应
- 多会话聊天 — 每个对话独立存档,刷新不丢,支持重命名/删除/搜索/导出
- 日期分割线 — 仿微信风格,跨日自动插入分割线(今天/昨天/具体日期)
- 截图 → AI — 点击模型即可全屏截图,预览、附文、发送给 LLM 分析
- 自动标题 — 聊满 5 条消息后,AI 自动给当前对话起个短标题
- 全局搜索 — 当前会话高亮 + 跨会话关键词检索
- 导出 — Markdown / JSON 两种格式,保留全部消息
- 提醒中心 — 独立的伪对话,自动汇聚所有健康提醒(喝水/伸展/早安等)
- LLM 对话 — 兼容 OpenAI(含各类自部署网关)与 Anthropic,配置中心填 key 即可
- 情绪引擎 — 模型在闲置时会随情绪变化切换微表情
- 后台调度 — 60s 心跳驱动情绪、提醒、行为编排
- 系统托盘 — 显示/隐藏/配置/健康提醒/退出
架构(高层)
| 层 | 作用 |
|---|---|
| Vue 3 + Vite 前端 | 桌宠窗口(Live2D + 聊天面板)、配置窗口、健康提醒管理窗口 |
| PixiJS / pixi-live2d-display | Live2D 模型渲染与点击命中 |
| Tauri 2 IPC | 前端 ↔ Rust 命令与事件通道 |
| Rust 后端 | LLM 接入、情绪引擎、调度器、会话持久化、截图、系统通知 |
| SQLite (rusqlite) | 记忆与向量检索 |
| Axum 本地服务 | 给 webview 提供本地 Live2D 模型文件 |
两个长驻子系统:
- 情绪引擎:维护 idle / happy / focused / annoyed / sleepy 等状态
- 60s 调度器:触发健康提醒、推进情绪、生成主动消息
数据存储
| 数据 | 位置 |
|---|---|
| 主配置 | ~/.live2D/live2d.conf.json |
| 会话数据 | <系统 app-data 目录>/com.ezviber.plus/sessions/ |
| ├─ | _index.json — 会话索引(标题/消息数/时间) |
| └─ | <session-id>/chat.jsonl — 消息流(一行一条 JSON,仅 user/assistant/system/reminder;图片只存相对路径) |
| └─ | <session-id>/images/<uuid>.{png,jpg} — 截图原图(PNG,给 LLM 多模态用)+ 压缩预览(JPEG,给聊天气泡用) |
| 数据库 | ezvibe_memory.db — 向量记忆 |
启动时自动 GC:扫描每个 session 的
images/目录,删除没被任何消息引用的孤儿图片。
配置项
主配置里的关键字段:
| 字段 | 含义 |
|---|---|
model_dir |
Live2D 模型目录 |
width / height / x / y |
窗口几何 |
llm_provider |
openai(含兼容服务)/ anthropic |
llm_model |
模型名 |
llm_base_url |
API 端点 |
llm_api_key |
API key |
behaviors |
健康提醒规则(可在托盘菜单里 CRUD) |
构建与运行
# 一次性安装
npm install
# 开发模式(前端 + 后端热重载)
npm run tauri:dev
# 生产构建
npm run build # 前端
cd src-tauri && cargo build --release
./src-tauri/target/release/live2d
环境要求:Node 18+、Rust 1.65+。
更新日志
2026-06-19 — reload 修复 / 截图流程收尾 / 日期分割线 / 启动 GC
- reload 后历史截图正常显示 — 修正了 Rust
PersistedMessage的字段命名(snake_case → camelCase 显式标注 + 旧数据 alias 兼容),消息里的图片路径在重启后能被前端正确读回 - 截图后整面板可点 — 截图 hide→show 后补齐
set_focus(),X11 透明窗口不再卡死 - 截图预览气泡生命周期干净 — 点"取消"或"发送给AI"立刻从内存移除;screenshot 消息被三层防御彻底排除出聊天记录(前端清 debounce timer + 后端拒绝写入 + reload 跳过读出)
- 截图后窗口属性保留 — hide→show 后自动恢复
always_on_top与visible_on_all_workspaces,不再需要去托盘点"显示桌宠" - 搜索 / 导出改为弹出工具栏 — 顶部 🔍 按钮折叠展开,主聊天区更清爽
- 日期分割线 — 仿微信风格,自动按本地时区分组消息,跨日插入「今天 / 昨天 / YYYY-MM-DD」灰底圆角标签
- 启动时图片 GC — 应用启动异步扫描
images/目录,清理不被任何消息引用的孤儿 PNG / JPEG,释放磁盘
2026-06-15 — 重建窗口保持置顶 + 全工作区可见
- 关闭后再开,置顶属性不丢 — 关闭桌宠窗口后,从托盘"显示桌宠"重建,新窗口仍是「始终在最前」
- 切换工作区桌宠跟着走 — 重建后的窗口在所有工作区都可见,切桌面不会丢
2026-06-14 — 多会话 / 截图存档 / 提醒中心 / UI 收尾
- 多会话聊天持久化 — 每个对话独立存档到磁盘,刷新 / 重启不丢;顶部下拉切换,新建 / 重命名 / 删除
- 截图存档 — 截图自动保存为图片文件(PNG + JPEG 预览),消息里只存路径,气泡内直接预览
- 截图发送给 AI — 在聊天里就能把截图 + 文字发给 LLM 分析
- 自动标题 — 5 条消息后异步调 LLM 生成 ≤20 字短标题
- 当前会话搜索 — 顶部输入框即时过滤 + 黄色高亮命中
- 全局搜索 — 跨会话搜索弹窗,命中后一键跳转
- 导出 — 当前会话一键导出为 Markdown 或 JSON
- 提醒中心伪 session — 所有健康提醒自动汇聚到独立的「🔔 提醒中心」对话,触发时自动跳转
- 模型位置 / 大小 — 模型水平居中,高度贴近聊天面板,宽度不超窗格
- 浮动工具栏 — 9 个按钮(聊天切换 / 配置 / 背景 / 换模型 / 位置 / 大小 / 复制 URL / 穿透 / 关闭)常驻可见
- LLM 多模态兼容性 — 适配严格 OpenAI 兼容服务(去除冗余 detail 字段),多模态请求延长超时
- 右侧滚动条修复 — 页面不再因窗口边缘滚动而抖动
- 帮助横幅移除 — 不再每次启动弹出「?」说明
2026-06-12 — 动作标签 / Idle 表情 / 截图 AI
- AI 动作标签 — LLM 回复末尾附带
[MOTION: xxx],自动驱动 Live2D 动作与表情 - Idle 微表情 — 长时间无交互时,模型随当前情绪切换微表情
- 截图 + AI 分析 — 点击模型身体 → 截图 → 气泡预览 → 可附文字 → 发给 AI
- 配置中心展示模型能力 — 显示当前模型的动作组、表情列表、情绪映射表
- 透明窗口下 ChatPanel 点击修复 — 解决了 Linux + Tauri 透明窗口里 WebGL 画布拦截鼠标事件的问题
2026-06-11 — Tauri v2 升级 / 健康提醒 / 窗口交互
- 升级到 Tauri v2
- 健康提醒 CRUD 面板 — 托盘「健康提醒」菜单进入,实时增删改查、变更立刻同步到调度器
- 禁双击全屏 — 透明窗口不再被双击意外最大化
- 情绪 → 表情 / 动作映射 — 自动根据模型实际可用的 expression / motion 匹配
- 前景遮罩修复 — 模型始终显示在最上层
2026-06-01 ~ 2026-06-02 — LLM 对话能力
- LLM 对话上线 — 桌宠从「能显示」进化为「能对话」
- 兼容 OpenAI(含自部署网关)与 Anthropic Claude
- 配置中心填 key / model / base_url 即可启用
- 聊天面板常驻在桌宠窗口右侧
- 聊天面板可一键收起,模型自动占满整个窗口
- 思考气泡 — DeepSeek / QwQ / o1 等推理模型的
<think>…</think>块折叠显示,主回复独立 - 健康提醒显示为气泡 — 提醒事件实时以绿松石色气泡出现在聊天里,并自动注入 LLM system prompt 引导健康小贴士
- 窗口默认尺寸调整 — 600×480,可缩放
- 删除本地 llama.cpp 路径 — 不再支持内嵌本地推理,仅保留云端 API
2026-05-31 — 基础修复
- 「选择本地模型」按钮恢复响应
- 工具栏按钮全部正常显示
- 模型显示比例修复
- 切换 workspace 后模型尺寸不再重置
- 窗口置顶可配置
相关链接
- Live2D Cubism Core
- pixi-live2d-display
- 实施记录 — 按日期的详细变更记录
免责声明
本软件仅供个人学习使用,禁止商用或非法用途。
Description
*Auto Update By Hermes* - Reinforced => AI Desktop Pet For Coders Who Value Their Health :-)
Languages
Rust
63%
Vue
20.8%
TypeScript
7.9%
JavaScript
6%
CSS
1.8%
Other
0.5%