CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
用 SillyTavern 角色卡玩的互动小说。AI 用第一人称写一段故事,结尾给两个选项;想做选项之外的事,可以自己写一句。
Translation pending
GamesTypeScript · PythonGitHub @HexthebaldyOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
更好的酒馆,有成熟的agent runtime负责长程叙事,提供Web端和RN移动端。已上线可体验,官网https://devyangcooking.cn
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗BetterTavern 是一个第一人称的互动小说应用。导入一张 SillyTavern 角色卡(或者在工作台里让 agent 帮你写一张),给主角起名字,AI 以“我”的视角写出一段故事,结尾给出两个选项;你点一个选项,或者自己写一句要做的事,它接着往下写。
它由三部分组成:服务器、手机 App 或网页(任选其一,账号通用),以及写故事的 AI 模型。
最简单的用法是打开官方服务 bettertavern.com 注册:不用配置,直接用官方模型写,新用户送 1500 点体验额度,用完可以换成自己的 API Key。 也可以自己运行服务器、用自己的模型服务,下面的安装步骤就是写给这种情况的。
**开发中。**还没有上架应用商店。Android 可以在项目主页下载安装包(默认连官方服务),iPhone 先用 Safari 打开网页版。 本页的截图里,角色和故事都是为演示写的原创内容。
目录:1 组成 · 2 安装与运行 · 3 使用 · 4 长篇故事是怎么保持连贯的 · 5 数据与隐私 · 6 服务器设置 · 7 常见问题 · 8 已知限制 · 9 更多文档
图的源文件是 docs/images/readme/overview.mmd,样式和怎么重新生成见架构图解第 15 节。
| 部分 | 做什么 | 技术 |
|---|---|---|
服务器(apps/server) | 保存账户、剧本、故事和世界设定;调用模型写故事,并在后台整理世界状态和长期记忆 | Python 3.12、FastAPI、PostgreSQL 16。分两个进程:api 处理请求、写故事,worker 做后台整理 |
手机 App(apps/mobile) | 在 iPhone、Android、iPad 上阅读和游玩 | React Native(Expo);Android 有安装包,iPhone 用 Expo Go 打开 |
网页(apps/web) | 在电脑浏览器里游玩,有侧栏和键盘快捷键,角色卡可以直接拖进窗口导入 | React + Vite |
| 模型服务 | 实际写故事的 AI | DeepSeek、OpenAI、Grok(xAI)、Gemini、Hugging Face,或任何兼容 OpenAI 接口的服务(包括本机运行的模型) |
git clone https://github.com/Hexthebaldy/BetterTavern.git
cd BetterTavern
docker compose -f deploy/docker-compose.yml run --rm --no-deps migrate bettertavern keygen >> deploy/.env
docker compose -f deploy/docker-compose.yml up -d
第一条生成两个密钥(MASTER_KEYS、AUTH_SECRET)写进 deploy/.env,第二条构建并启动。起来以后浏览器打开 http://localhost:8080 就能注册、使用。
postgres、api、worker、web 四个常驻容器,migrate 建完表就退出。web 发网页,并把接口请求转给 api。deploy/.env 里加一行 WEB_BIND=0.0.0.0,再执行一次 up -d;
它们用 http://<这台电脑的局域网 IP>:8080 访问,手机 App 的服务器地址也填这个。这是不加密的 http,只在家里或信得过的局域网这样做。端口用 WEB_PORT 改。8080,并在 deploy/.env 里加 AUTH_COOKIE_SECURE=true(网页登录的 Cookie 只走 https)。MASTER_KEYS:已保存的模型 Key 是用它加密的,丢了就解不开,只能重新填写。cp apps/server/.env.example apps/server/.env
make db-up # 用 Docker 起 PostgreSQL;用本机的 PostgreSQL 就跳过,改 .env 里的 DATABASE_URL
make install && make migrate
make dev # api,接口文档在 http://localhost:8000/docs
make worker # 另开一个终端:后台整理
开发环境不用配置密钥,第一次启动时会自动生成。详细说明见开发者指南。
网页:
make js-install
make web
浏览器打开 http://localhost:5173 。正式部署时用 make web-build 生成 apps/web/dist,由反向代理和接口放在同一个域名下。
手机:Android 直接装项目主页上的安装包(点“下载 Android 版”),打开后在登录页底部填上服务器地址(用 Docker 部署的是 http://192.168.1.10:8080 这样,从源码运行的是 :8000)。
安装时手机会提示允许浏览器或文件管理器安装应用。iPhone 还没有安装包,按下面的步骤用 Expo Go 打开(Android 也可以这样用):
cp apps/mobile/.env.example apps/mobile/.env # 把里面的地址改成电脑的局域网 IP
make mobile-install
cd apps/mobile && npm start
手机上装 Expo Go,扫终端里的二维码。手机和电脑要在同一个网络里,或者用 Tailscale 这类组网工具连起来;用蜂窝网络访问需要一个 https 地址。连不上时的排查见 apps/mobile/README.md。
同一张卡可以开好几个故事,各走各的。故事用什么语言写,由开局时的界面语言决定,之后不变。
? 查看完整的表。点阅读页左下角的指南针(网页上可以停靠在右侧)打开世界状态面板:人物、地点、物品、组织,它们之间的关系,以及已经知道的事实。
之后的段落会被撤销,世界状态和整理出来的记忆也退回到那时的样子。正在生成时不能回退。每个存档能回退的次数有上限(默认 1 次,由服务器的 ROLLBACK_LIMIT 设置),用完后按钮上会写明。
更多 → 写结局,可以写下希望的结局方向(也可以不填)。AI 会写一大段收尾,之后这个故事显示“已完结”,不能再继续;如果还有回退次数,回到结局之前的某一段可以接着玩。
模型一次能读的内容有限,故事长了以后不能把全部前文都发给它。BetterTavern 把“记住故事”拆给几个后台步骤,写故事时只发最需要的部分:
这些整理都在后台进行,不会让你多等。回退时它们一起退回。设计细节见 agent runtime 架构图解。
服务器从环境变量读取设置。开发时写在 apps/server/.env(每一项的说明见 apps/server/.env.example),Docker 部署时写在 deploy/.env。常用的几项:
| 设置 | 默认 | 说明 |
|---|---|---|
MASTER_KEYS、AUTH_SECRET | 开发环境自动生成 | 加密模型 Key 的主密钥、签发登录令牌的密钥。生产环境必须配置,用 bettertavern keygen 生成 |
DATABASE_URL | PostgreSQL 的地址 | |
ALLOW_PRIVATE_ENDPOINTS | false | 是否允许模型地址指向内网(例如本机的 Ollama)。多人共用的服务器不要打开 |
OUTBOUND_PROXY | 访问模型服务时走的代理 | |
ROLLBACK_LIMIT | 1 | 每个存档能回退几次 |
CHAPTER_SOFT_TOKENS、CHAPTER_HARD_TOKENS | 8000、16000 | 一章多长时整理一次章节摘要 |
DIRECTOR_TIMEOUT_S | 600 | 写一段的总时长上限(秒) |
WORKER_CONCURRENCY | 4 | worker 同时处理几个后台任务 |
ENABLE_PROBE_ENDPOINTS | 开发环境打开,生产环境关闭 | “设置 → 连接测试”用的接口 |
PLATFORM_API_KEY | 官方模型:用运营方自己的 Key 给用户直接用、按用量扣点数。不配就没有,用户只用自己的 Key(见 docs/ops.md 第 9 节) | |
CONTENT_POLICY | open | sfw 时写故事、写卡的提示词里加内容边界(官方服务用);用户存的角色卡不审核 |
**手机连不上服务器。**先在手机浏览器里打开 http://<电脑的局域网 IP>:8000/health(用 Docker 部署的是 :8080),打不开说明网络不通(不在同一个网络、防火墙、IP 变了)。排查步骤见 apps/mobile/README.md。
**添加模型时提示地址“解析到内网或保留地址”。**本机开着 Clash 等代理的 fake-ip 模式时,所有域名都会解析到保留地址。把模型服务的域名加进代理的 fake-ip-filter,或者在自己用的服务器上设 ALLOW_PRIVATE_ENDPOINTS=true。
**世界状态一直停在开局。**检查 worker 有没有在运行(make worker,或 Docker 的 worker 容器);再看世界状态面板里的提示。如果说后台模型不能调用工具,在设置里换一个后台模型,或者点“测试这个模型”重新确认。
**文字不是一段段出来,而是最后一下子全出现。**中间的反向代理或隧道在缓冲 SSE。在 设置 → 连接测试 里测一下,结果是“轮询降级”就说明有一跳在缓冲;按 deploy/nginx.example.conf 关掉缓冲。
**“回到这里”点不了。**正在生成时不能回退;这个存档的回退次数用完了也不行(按钮上会写明)。
**换了主密钥以后模型都用不了。**旧的 Key 是用旧主密钥加密的。把旧主密钥保留在 MASTER_KEYS 的后面(逗号隔开,第一个用于加密,其余只用于解密),或者重新填写各个模型的 Key。
还没解决的技术问题列在待优化清单。