READMESource: main@ccfb038a
🍺 酒馆启动器 · Tavern Launcher
SillyTavern(酒馆)一键安装 + 启动 桌面启动器,内置 角色卡市场(类脑索引 / Opz-Hub 双站搜索、下载、一键导入酒馆)。
赛博朋克霓虹风格 Web UI,零依赖 Node.js 后端 —— 启动器本身不需要 npm install。
✨ 功能
| 功能 | 说明 |
|---|---|
| ⚡ 一键安装 | 自动下载 SillyTavern release 包(GitHub 直连 + 多镜像自动切换)→ 解压 → npm install(失败自动切 npmmirror) |
| 🚀 一键启动/停止 | 拉起 node server.js,自动打开浏览器;退出启动器可自动停止 ST |
| ⟳ 在线更新 | 保留 data/(角色卡、聊天记录)与 node_modules/ 的无损更新 |
| 🧠 类脑索引找卡 | 搜索角色卡帖子:关键词 / 频道 / 标签 / 排序,详情弹窗、一键下载导入 |
| 🌅 Opz-Hub 找卡 | 浏览器会话直连(CORS 支持),弹窗 Discord 登录后即可搜索 |
| ⬇ 卡片导入 | 下载 PNG/JSON 角色卡到 cards/,并自动复制进 ST 角色目录 |
| 📺 实时日志 | SSE 实时日志终端,安装进度可视化 |
🚀 快速开始
- 安装 Node.js 18 或更高版本(推荐 LTS)
- 双击桌面上的 「酒馆启动器」 快捷方式(首次运行后自动创建),或双击
Tavern-Launcher.vbs(无终端窗口) - 启动器以独立应用窗口打开(Edge/Chrome App 模式,游戏启动器风格)
- 点 「🚀 启动酒馆」 → 同一窗口内自动进入 「酒馆」标签页,直接开聊
- 点右上角 「✕ 退出」 退出启动器(同时停止酒馆)
💡 无终端:启动器与酒馆都以隐藏方式运行,全程不需要看到命令行窗口。 重复启动不会报错:自动检测已运行的实例并重新弹出窗口。 若 8777 端口被其他程序占用,会自动顺延到 8778+ 端口。
📖 找角色卡
「角色卡」页切换站点:
- 类脑索引(Odysseia):搜索 API 需要登录 Token(Discord 授权)。
用「设置 → 🪄 登录向导」4 步完成:打开登录页 → Discord 授权 → F12 控制台执行
copy(localStorage.getItem('auth_token'))→ 点「我已复制 Token」自动保存并验证。 - Opz-Hub(Opizontas):不提供启动器内搜索(其接口不返回卡片附件信息,且 Cookie 会话策略限制跨站访问)。 角色卡页 → Opz-Hub 提供引导:①「打开 Opz-Hub 网站」→ 站内搜索找卡 → ② 右键卡片图片「复制图片地址」→ ③ 粘贴到「⬇ 粘贴卡片链接导入酒馆」→ 一键下载进酒馆
⚙️ 设置
- ST 端口:默认
8000 - 下载源:自动(GitHub → npm CDN → 镜像加速)/ GitHub 直连 / npm 源 / 镜像加速; 下载支持断点续传与自动重试(最多 3 轮),弱网环境也能装完
- npm 源:官方 / npmmirror / 自动(安装依赖失败自动切镜像)
- 自动打开浏览器 / 退出时停止 ST
📁 目录结构
酒馆/
├── server.js # 启动器后端(零依赖)
├── Tavern-Launcher.vbs # ★ 无终端一键启动(推荐)
├── start.bat / start.ps1 # 备用启动(带终端日志)
├── public/ # 前端界面
├── SillyTavern/ # ST 安装目录(自动创建,含 data/ 角色数据)
├── cards/ # 下载的角色卡
└── launcher-config.json # 配置(端口、Token 等)
🔒 安全说明
- 启动器只监听
127.0.0.1,仅本机可访问 - Token 仅保存在本地
launcher-config.json - 日志实时显示安装/运行全过程
🛠 开发者
node server.js # 默认端口 8777
PORT=9000 node server.js # 自定义启动器端口
API 一览:/api/state(状态)、/api/install|update|start|stop(ST 管理)、
/api/ody/channels|search|thread/{id}(类脑索引)、/api/import(卡片导入)、
/api/events(SSE 日志流)。
⚠️ 免责声明
角色卡版权归原作者所有,请尊重作者、遵守各站点规则;本工具仅作技术集成用途。
No comments yet. Be the first to write one.