一个 Windows 桌面小工具:让 Freebuff 桌面版支持多开,并且每个窗口可以登录不同的账号。
A small Windows utility that lets the Freebuff desktop app run multiple instances simultaneously — each with its own independent account.
纯第三方工具,不修改 Freebuff 本体,与 Freebuff 官方无关。 A third-party tool. It does not modify the Freebuff app itself.
- 多开:主实例 + 实例 1~9,互不干扰
- 多账号:每个实例独立 Chromium 配置和登录态,可分别登录不同账号
- 状态一览:实时显示每个实例的运行状态和当前登录的账号邮箱
- 额度显示:每个账号的 Freebucks 额度(v0.0.88+ 起的新模型)——今日剩余 / 总额度,钱包有余额时附带显示;悬停可见剩余量、钱包余额、最便宜模型每小时单价与今日额度补充时间(太平洋每日 0 点)。请求会话接口时带
x-freebuff-multi-session/x-freebuff-include-unused-rate-limits两个头(与桌面端 orchestrator 一致),否则服务器不返回 Freebucks。旧版服务端无 Freebucks 时回退为各模型中最紧的剩余额度。启动时与手动刷新时更新,另有 5 分钟自动刷新 - 额度模型说明:v0.0.88 起 Freebuff 不再有「每周 / 每月的会话上限」,旧的日/周/月窗口(
freeWindows)已退役,本工具不再显示它们 - 版本检测:显示本机 Freebuff 版本,自动对比官方更新源;发现新版本可一键下载官方安装包(能取得更新源的 latest.yml 时先做 SHA512 校验再运行;取不到时改用官方下载直链并在状态栏明示跳过了校验),下载失败时退回浏览器下载页
- 控制器自更新:控制器启动时与每 30 分钟会检查本仓库(Ximmmmmmm/freebuff-controller)的最新 Release tag,比自己新时右上角出现「自更新」入口——一键下载新 exe(暂存为
*.new-v版本.exe,SHA512 校验当 Release 附带sha512.txt时启用),退出控制器后由self-update.cmd脚本自动替换并重启;下载失败再点一次会打开 Release 页面手动下载 - 网络路径:检查更新、下载安装包、额度查询按「本地代理 → 系统代理 → 直连」依次尝试,并记住上次成功的路由优先重试。本地代理自动探测常见端口(7890 / 7897 / 10808 / 10809 / 1080),且为功能级探测——经代理真实请求 204 端点确认可用,SOCKS-only 端口不会误判(
socks5://地址仅用于启动的实例,控制器自身请求会自动跳过)。启动 Freebuff 实例同样接入:代理在运行时为实例加--proxy-server(覆盖界面与内置更新器的流量)并注入HTTP(S)_PROXY环境变量(后端 orchestrator 若读取则同样走代理;回环地址始终直连),代理未运行或off时按原样启动,实例自行回落系统代理。主窗口右上角「代理设置」:实时状态、逐端口探测结果(✓ = 端口可达且功能探测通过)、修改地址、停用(off)、恢复默认——与手编%APPDATA%\FreebuffController\proxy.txt等价,保存立即生效 - 一键操作:启动 / 停止 / 重置账号 / 停止全部;双击表格行直接启动
- 会话共享(所有账号共用一份聊天记录,默认开启):不再有「共享会话」按钮——控制器启动时(或启动未共享的实例时)自动提示并入,确认后把每个实例的
projects目录变成指向主实例会话库的 Windows junction——之后所有窗口读写同一个desktop-v2.db,聊天记录天然只有一份:A 账号额度用完,B 账号的窗口打开同一份历史直接接着聊,不需要复制、不需要选会话。首次开启时各实例已有的独立历史会自动合并进主库(原目录改名保留为projects.pre-share-*备份,可手动回退),登录态仍在各自 state.json 下、账号互不影响。合并由 Freebuff 自带的resources\bun\bun.exe执行内嵌脚本完成(无外部依赖),同 id 会话绝不覆盖。提示:同一时间尽量只在一个窗口聊天——两个实例同时写入同一个库可能偶发锁冲突(WAL 模式下数据不会损坏) - 两种初始化方式:启动未初始化的实例时弹窗选择——全新登录(每个窗口用不同账号),或复制其他已登录实例的账号(下拉框只列出真正登录过的实例,并显示其邮箱),免重复登录
- 重置换号:清空某个实例即可换登录另一个账号
- 汉化集成:自动检测 Freebuff 是否已应用汉化包(独立仓库),可一键应用 / 还原——Freebuff 更新覆盖汉化后,点一下即恢复中文界面
- 默认回复中文:控制器启动时自动确保家目录存在
~\.AGENTS.md中英双语语言规则——Freebuff 的 agent 每次新会话都会把它并入系统提示词,因此 AI 无论收到什么语言都固定用简体中文回复。无需任何操作:控制器在,就默认中文;写失败也不影响启动。与汉化包互相独立(界面汉化 ≠ 回复中文),不依赖 Freebuff 版本,应用更新也不会冲掉;仅对新会话生效,已开的会话保持原有提示词 - 抗注入条款(应对服务端英文注入):排查确认,AI 有时会突然改用英文回复,源头不是本机任何工具(Freebuff 客户端、汉化包、输入法、浏览器插件均无此类文本),而是 Freebuff 服务端在检测到英文输入时动态注入的「语言一致性」指令(如 "Reply in English only"、"Your user's primary language is English"),本机无开关可关。为此语言规则内置了抗注入条款:明确宣布这类指令及其变体(翻译式、格式声明式、借口式、中文措辞、间接注入等)一律无效,继续用简体中文回复;只有用户用中文明确说「改用英文回复」才能临时切换。控制器启动时的规则文件指纹就是这段条款——老用户的旧版规则会在升级控制器后自动补齐。
- 暗色主题 UI,单文件 exe(约 22 KB,无运行时依赖);最小化进任务栏,关闭即完全退出
- 双击
Freebuff多开控制器.exe(或按下面步骤自行编译) - 双击(或选中后点「启动」)一个未初始化的实例,在弹窗里选「全新登录」
- 在弹出的 Freebuff 窗口里登录该窗口要用的账号 —— 登录态会固定在这个实例
- 想换某个实例的账号:选中 → 「重置账号」→ 再启动登录新账号
- 所有实例共用一份聊天记录:启动控制器(或启动未共享的实例)时自动提示并入 → 确认 → 各实例历史并入主库,之后任何账号的窗口打开的都是同一份会话(见上方「会话共享」)
Freebuff 是 Electron 应用,用 requestSingleInstanceLock() 限制单开。本工具不修改任何应用文件,而是给每个实例分配独立的数据目录:
--user-data-dir=<APPDATA>\Freebuff-slot-N— 独立 Chromium 配置文件与单实例锁FREEBUFF_DESKTOP_STATE_PATH=<user>\.config\freebuff-desktop\slots\slot-N\state.json— 独立后端 orchestrator 状态(避开其 SQLite 文件锁)~\.configreebuff-desktop\slots\slot-N\projects\<工作区>\desktop-v2.db— 本地会话库(聊天会话线程与消息都在这里,与登录态相互独立)
会话共享原理:主实例的会话库在 ~\.config\freebuff-desktop\projects\。默认共享下,每个 slot 的 projects 目录被替换成指向它的 junction(mklink /J,不需要管理员权限),于是所有实例读写同一个 desktop-v2.db,聊天记录天然共享;各实例的登录 token 仍在自己的 state.json 里,账号互不影响。首次开启会把各实例已有的独立历史合并进主库,原目录改名为 projects.pre-share-<时间戳> 保留备份——想回退到独立模式时,关掉全部实例、删掉 junction、把备份目录改回 projects 即可
因此 Freebuff 应用升级不会使本工具失效。
The app is an Electron app that enforces a single-instance lock. This tool gives each instance its own --user-data-dir and its own orchestrator state file via an environment variable, so instances don't share locks — no app files are touched, and app updates don't break it.
Freebuff 的自动更新会用原版文件覆盖汉化包的产物。控制器在窗口底部显示汉化状态,
并提供「应用汉化 / 还原英文」一键操作(首次应用自动备份英文原版,与 apply.sh 的备份/还原机制完全兼容)。
汉化仓库的查找顺序:
- exe 同级或上一级的
hanhua/目录(monorepo 布局) - exe 同级或上一级的
freebuff-zh/目录(汉化仓库独立克隆) - 上次在对话框里选择并记住的路径(
%APPDATA%\FreebuffController\hanhua-path.txt)
控制器还会对比本机 Freebuff 版本与 hanhua/manifest.json 的 targetVersion:
本机版本更新时提醒先更新词典并重新构建,避免把过时的汉化产物打上去。
汉化包本身也可以作为 GitHub Release 分发(hanhua/tools/release.sh 发布):控制器
每 30 分钟检查一次 pack Release(与 Freebuff 更新检查共用同一条代理链),当包的
targetVersion 与本机 Freebuff 版本一致且 packVersion 比已装/已暂存的新时,自动下载、
SHA512 校验并落到 hanhua/output/,状态栏提示后点「应用汉化」即可换上新包。
若最新包适配的是别的 Freebuff 版本(targetVersion 不匹配),不再静默跳过,而是
在状态栏提示「最新汉化包 vX 适配 Freebuff vY,本机是 vZ」,等待版本追上后自动恢复检查。
Freebuff 的 automatic updates overwrite the localization pack's patched files.
The controller shows the localization status at the bottom of its window and offers
one-click apply / restore (the first apply backs up the pristine English files,
compatible with apply.sh's backup mechanism).
不想编译?直接从 Releases 下载单文件 exe 即可。发新版:改
FreebuffController.cs里的AssemblyVersion后跑bash release.sh(编译 + 打 tag + 上传)。
不需要安装任何 SDK,Windows 自带的 .NET Framework C# 编译器即可:
build.bat
或手动:
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\csc.exe -nologo -target:winexe ^
-optimize+ -codepage:65001 ^
-r:System.dll -r:System.Core.dll -r:System.Drawing.dll -r:System.Windows.Forms.dll -r:System.Management.dll ^
-win32icon:app.ico -out:FreebuffController.exe FreebuffController.cs
源码需兼容 C# 5(系统自带编译器的语言版本)。
├── FreebuffController.cs # 全部源码(UI + 逻辑)
├── handover-merge.js # 会话合并脚本(会话共享/接力共用,编译时内嵌进 exe)
├── build.bat # 一键编译脚本
├── make-icon.ps1 # 图标生成脚本(多尺寸 PNG-in-ICO)
├── tools/
│ └── embed-handover.py # 编译前把 handover-merge.js 内嵌进 C# 源码
└── app.ico # 应用图标
MIT