Are you the author? Sign in to claim
Vision Relay 是一个本地桌面客户端式的多接口 AI 模型中转工具。
Vision Relay 是一个本地桌面客户端式的多接口 AI 模型中转工具。它把外部客户端发来的图片请求先交给视觉模型解析,再把解析结果转成纯文本上下文转发给文本模型,让只支持文本的上游模型也能间接处理图片。
项目使用 Go 编写后端和桌面外壳,前端静态资源通过 embed 打进二进制。Windows 可编译成单个 vision-relay.exe,macOS 可编译成原生 Vision Relay.app;Windows 默认打开桌面窗口并驻留系统托盘,macOS 默认通过系统浏览器打开管理页面并驻留菜单栏。
http://127.0.0.1:18473,与中转 API 端口相互独立http://127.0.0.1:8787vision-relay.update 写入新版本,不再创建或执行点开头、随机名称的临时 helper EXE;新进程启动失败或提前退出时自动回滚并保持旧实例运行。vision-relay.exe.sha256,新增父进程等待、启动存活检查和更新文件白名单清理,只处理程序目录内允许的 .old、暂存文件及旧版兼容文件,降低更新误报与误删风险。VERSIONINFO 资源,并保留可选的 Authenticode 签名、时间戳和签名验证能力;v2.2.1 GitHub 标签发布按无签名模式直接编译,并为最终 EXE 生成 SHA-256。127.0.0.1:18473,中转 API 继续使用 127.0.0.1:8787;管理页面和管理接口不会暴露在中转端口,模型路由也不会进入管理端口。-management-addr 启动参数和 VISION_RELAY_MANAGEMENT_ADDR 环境变量,阻止管理端口与中转端口冲突;桌面窗口、浏览器和托盘激活固定连接管理端口,客户端配置固定使用中转 API 地址。vision-relay.update,强制要求 Release 提供同名 .sha256 校验文件;旧版本备份与暂存文件会在新版本启动后清理,无法立即删除时安排在系统重启后清理。.old;旧实例保持运行,不再依赖额外 helper 或 .update-error.txt。examples/,按当前客户端缓存新版;更新模板保持只读,不覆盖本地自定义模板。"null" / "<nil>" 错误记录,避免未完成且无 Token 用量的流被误记为成功。/api/update/progress 进度接口,界面可实时显示下载、校验、安装和重启状态,并阻止重复更新任务。windres 嵌入 EXE。response.failed。[DONE]、但已通过 finish_reason 正常结束的上游流,避免完整响应被误判为异常。response.incomplete 视为合法终止状态,避免因输出达到限制等正常情况被错误记录为网关失败。B 单位显示,并补充流式异常、终止状态、夏令时分桶和前端格式化相关测试。/api/dashboard 管理接口和 SQLite 聚合查询,统计累计与周期用量,按时间桶、供应商和模型生成分析数据。settings.json。none、low、medium、high 和 xhigh。supports_reasoning 配置迁移,并自动识别常见推理模型。auth.json。state_5.sqlite 迁移、备份和精确恢复。vision-relay.exe、验证 SHA-256、安全替换并自动重启。vision-relay.exe.sha256 校验文件。frontend/public 分层管理并继续由 Go embed 打包。backend/internal/protocol,便于维护和测试。CODEX_HOME,默认不再把当前启动目录当作项目目录写入。.gitignore 忽略本地 .codex/、exe 备份文件,避免临时文件误提交。tools/build-windows.ps1 构建脚本,统一生成 Windows GUI 子系统的 vision-relay.exe。work_dir 时才写入项目级配置。model_providers.custom 和 vision-relay-model.json 专用模型目录,避免继续改写账号模型缓存。[windows] 配置的清理与接管逻辑。这样最终回答仍由文本模型完成,视觉模型只负责把图片转成可被文本模型理解的事实描述。
| 客户端协议 | 本地路径 | 说明 |
|---|---|---|
| OpenAI Chat Completions | /v1/chat/completions 或 /chat/completions | 支持 image_url、input_image |
| OpenAI Responses / Codex | /v1/responses 或 /responses | 支持 input_text、input_image |
| Anthropic Messages | /v1/messages 或 /messages | 支持 content[].type=image |
| Gemini | /v1beta/models/{model}:generateContent | 支持 inline_data、file_data |
| Ollama Chat | /api/chat | 支持 images |
| Ollama Generate | /api/generate | 支持 images |
| 其他路径 | 原路径透传 | 例如 /v1/models、/api/tags |
iconutil 和 codesign)大多数 Windows 10/11 系统已经内置 WebView2 Runtime。如果 Windows 桌面窗口无法打开,请先安装 Microsoft Edge WebView2 Runtime。macOS 菜单栏客户端使用系统浏览器打开管理页面,不需要额外安装 WebView Runtime。
Windows PowerShell 或 macOS Terminal 均可直接运行:
go run ./backend/cmd/vision-relay
启动后管理界面默认访问:
http://127.0.0.1:18473
中转 API 继续监听:
http://127.0.0.1:8787
常用启动参数:
# 指定中转 API 监听地址
.\vision-relay.exe -addr 127.0.0.1:8787
# 指定 Go 主程序管理界面监听地址
.\vision-relay.exe -management-addr 127.0.0.1:18473
# 只运行后台中转服务,不打开桌面窗口
.\vision-relay.exe -no-window
# 不打开窗口,也不打开浏览器
.\vision-relay.exe -no-open
# 同时打开系统默认浏览器
.\vision-relay.exe -browser
# 指定配置文件和数据库路径
.\vision-relay.exe -config .\config.json -db .\vision-relay.db
首次构建或更新 Vue / Element Plus 依赖后,先同步本地前端资源:
cd frontend
npm install
npm run build
cd ..
.\tools\build-windows.ps1
Vue 3 和 Element Plus 会复制到 frontend/public/assets/vendor,程序运行时不依赖 CDN。仅修改业务 HTML、CSS 或 JS 时,可直接执行 .\tools\build-windows.ps1。
说明:
-s -w 用于减小二进制体积。-H windowsgui 会生成 Windows GUI 子系统程序,双击运行时不会弹出控制台窗口。vision-relay.exe。windres.exe;找不到资源编译器时脚本会直接失败,避免沿用旧版本的 VERSIONINFO。WINDOWS_SIGNING_CERTIFICATE_PATH 与 WINDOWS_SIGNING_CERTIFICATE_PASSWORD,或传入 -SigningCertificatePath。当前 GitHub 标签工作流按无签名模式直接构建,下载运行时可能出现 Windows SmartScreen 或未知发布者提示。如果需要调试日志窗口,可以去掉 -H windowsgui:
go build -ldflags="-s -w" -o vision-relay.exe ./backend/cmd/vision-relay
macOS 原生构建依赖 CGO、Cocoa 和 WebKit,因此必须在 macOS 上执行:
xcode-select --install # 尚未安装 Command Line Tools 时执行
bash ./tools/build-macos.sh --version v2.2.2 --arch arm64
支持的架构参数:
--arch arm64:Apple Silicon;--arch amd64:Intel Mac;--arch universal:分别构建 arm64 / amd64 后通过 lipo 合并为通用程序。默认产物为 dist/Vision Relay.app,并同时生成 dist/vision-relay-darwin-<架构>.zip 及其 .sha256。脚本会创建标准应用目录、Info.plist、.icns 图标并执行 ad-hoc 签名。公开分发时仍建议使用 Apple Developer ID 重新签名并完成 notarization;否则其他 Mac 上首次打开时可能需要在“系统设置 → 隐私与安全性”中确认。
应用会在 macOS 菜单栏驻留,并通过系统默认浏览器打开管理页面;客户端发现支持 /Applications 和 ~/Applications 中的 Codex / ChatGPT、OpenCode、Claude、OpenClaw 应用,同时继续从 PATH 检测 Codex CLI、Claude CLI、OpenCode 和 OpenClaw 命令。重复启动会通知现有实例再次打开管理页面,不会启动第二套数据库与路由服务。
Windows 无签名发布构建(当前 GitHub 标签工作流使用此模式):
.\tools\build-windows.ps1 -Version v2.2.2
signtool.exe)和 MinGW-w64(提供 windres.exe)。构建脚本会自动查找 Windows SDK 中的 x64 signtool.exe。.\tools\build-windows.ps1 `
-Output dist\vision-relay.exe `
-Version v2.2.2 `
-SigningCertificatePath C:\secure\vision-relay-code-signing.pfx `
-SigningCertificatePassword '<PFX 密码>' `
-RequireSignature
脚本先嵌入当前版本资源,再构建、执行 SHA-256/RFC 3161 时间戳签名、验证签名,最后生成已签名文件对应的 .sha256。可以再次手动验证:
Get-AuthenticodeSignature .\dist\vision-relay.exe | Format-List Status,StatusMessage,SignerCertificate,TimeStamperCertificate
$signtool = Get-ChildItem 'C:\Program Files (x86)\Windows Kits\10\bin' -Filter signtool.exe -Recurse |
Where-Object FullName -Match '\\x64\\signtool\.exe$' | Sort-Object FullName -Descending | Select-Object -First 1
& $signtool.FullName verify /pa /all /v .\dist\vision-relay.exe
Status 必须为 Valid。如果证书私钥位于 USB 硬件令牌或云签名服务中、无法导出 PFX,应使用证书颁发机构提供的 CSP/KSP 或云签名 GitHub Action;完成签名后必须重新生成 .sha256,不要把私钥导出到仓库。
当前 GitHub 标签发布按用户要求执行无签名构建,不读取证书 Secret。以后若要恢复签名发布,应在工作流中安全接入证书或云签名服务,并在生成 .sha256 前完成签名和验证;不要把证书私钥提交到仓库。
macOS 发布构建(在对应 Mac 或 macOS CI 上执行):
bash ./tools/build-macos.sh --version v2.2.2 --arch universal
生成的 Release 附件:
vision-relay.exe
vision-relay.exe.sha256
vision-relay-darwin-universal.zip
vision-relay-darwin-universal.zip.sha256
发布到 GitHub Release 时建议使用版本标签:
git tag v2.2.2
git push origin v2.2.2
Release 标题建议为:
Vision Relay v2.2.2
附件上传时应包含对应平台的程序包和同名 .sha256 文件。macOS 也可以分别发布 vision-relay-darwin-arm64.zip 与 vision-relay-darwin-amd64.zip。
首次启动后,在管理页面中配置文本模型和视觉模型即可使用本地 API。文本供应商列表中的“模型测试”可直接使用该供应商已配置的模型和 API Key 发送测试提示词,并显示响应内容、HTTP 状态及耗时;测试过程不会切换当前供应商或修改客户端路由。供应商编辑弹窗中的眼睛按钮可临时显示或隐藏完整 API Key。
文本供应商按 Codex、Claude、OpenCode 三组管理,每个供应商只能属于一组,每组独立保存当前选择。OpenAI Responses 请求使用 Codex 组,Anthropic Messages 使用 Claude 组,Chat Completions、Gemini 与 Ollama 使用 OpenCode 组;OpenClaw 的一键配置也跟随 OpenCode 组。点击某组供应商的“使用”只同步该组关联的客户端,不会覆盖另外两组。
每组当前供应商都有独立熔断状态。连续 3 次可归因于上游的失败会进入 30 秒熔断,冷却后允许一次半开探测,成功即恢复;页面供应商卡片每 5 秒刷新“正常 / 熔断 / 探测”状态。
常用环境变量:
VISION_RELAY_ADDR=127.0.0.1:8787
VISION_RELAY_MANAGEMENT_ADDR=127.0.0.1:18473
TEXT_PROVIDER=openai|anthropic|gemini|ollama
TEXT_BASE_URL=https://api.openai.com
TEXT_API_KEY=sk-...
TEXT_MODEL_OVERRIDE=
TEXT_WIRE_API=chat_completions|responses
VISION_PROVIDER=openai|anthropic|gemini|ollama
VISION_BASE_URL=https://api.openai.com
VISION_API_KEY=sk-...
VISION_MODEL=gpt-4o-mini
VISION_ENABLED=true
PROXY_URL=http://127.0.0.1:7890
OPEN_WINDOW=true
OPEN_BROWSER=false
本地 API 不需要访问令牌,外部客户端可以直接调用所有兼容入口。普通客户端的一键配置不会写入 API Key 或 Bearer Token;如果第三方客户端的界面强制要求填写 API Key,这是该客户端自身的限制,Vision Relay 本地 API 不会校验该值。Codex 开启“切换第三方时保留官方登录”时是唯一例外:provider 配置会写入仅用于本地路由隔离的无害 Bearer 标记。该标记不是上游 API Key,也不会被本地 API 校验,其作用是防止 Codex 将官方 ChatGPT 登录令牌用于第三方模型请求。关闭本地 API 后,客户端改为直连当前文本供应商,并写入供应商 API 地址、上游令牌和真实模型名;模型列表仍只包含当前供应商配置中已经添加的模型,不会自动导入上游的全部模型。
“客户端接入”中的每个客户端都提供独立的路由开关。一键配置会自动开启对应路由;之后切换文本供应商时,Vision Relay 只重写已开启路由的客户端配置,并提示重启受影响的客户端。关闭路由的客户端不会被供应商切换修改;恢复 Codex 官方模式时会同时关闭 Codex 路由。
左侧“一键破甲”页面为本地测试工具,包含“提示词破甲”“会话清理”和“模板管理”三个区域:
CODEX_HOME/ctf.config.toml,全局模式只管理 config.toml 顶层破甲字段,工作区模式使用独立工作区文件;不会覆盖客户端一键配置维护的供应商、模型和路由。该功能标记为测试功能。建议先查看“破甲预览”和会话修改前后对比,确认目标路径与影响范围后再执行;恢复操作只恢复当前选择的客户端或会话,不会修改另外两个客户端。
左侧“设置”菜单可以管理 Vision Relay 的运行参数:
/v1/* 等模型接口返回 503;管理端口上的管理页面、设置 API 和 /healthz 仍可使用。该开关保存后立即生效。OpenAI.Codex_*\app\ChatGPT.exe 安装位置,不依赖固定版本号。%LOCALAPPDATA%\AnthropicClaude\claude.exe 及 Squirrel 版本目录,macOS 桌面端可识别 /Applications 或 ~/Applications 中的 Claude.app;CLI 在两端都可从 PATH 识别 claude 命令,二者不会互相误判。首次运行时会自动检测一次客户端路径。从没有该检测字段的旧版本升级时,也会自动执行一次,之后不会反复覆盖手动填写的路径。如需刷新,可在设置页点击“重新检测客户端”。
客户端配置文件位置会实际用于“一键配置”、路由同步和 Codex 官方模式恢复。客户端程序位置用于检测运行状态,并按“设置 → 一键配置行为”中的开关自动重启或启动客户端;这些操作由程序内置完成,不会弹出终端窗口。一键配置 Codex 或 Claude 时会同时处理对应桌面端与 CLI,接口和完成提示会列出实际写入的全部配置路径,并分别返回程序重启、启动或警告结果。默认自动重启配置前已运行的客户端,配置前未运行的客户端保持关闭。
OpenAI 兼容客户端:
Base URL: http://127.0.0.1:8787/v1
API Key: 留空(本地 API 无需认证)
Endpoint: /v1/chat/completions
Codex / Responses 客户端:
Base URL: http://127.0.0.1:8787/v1
API Key: 留空(本地 API 无需认证)
Endpoint: /v1/responses
Codex 桌面客户端推荐在“客户端接入”页面点击“一键配置 Codex”。Vision Relay 默认只写入用户级配置:
CODEX_HOME/config.toml
CODEX_HOME/vision-relay-model.json
如果没有设置 CODEX_HOME,Windows 和 macOS 分别使用 %USERPROFILE%\.codex 与 ~/.codex。只有调用客户端配置 API 时明确传入 work_dir,才会额外写入该项目的 .codex/config.toml 和 .codex/vision-relay-model.json,避免把 Vision Relay 自身的启动目录误当成项目目录。项目配置只包含 Codex 允许的模型和模型目录设置;Windows 还会写入 sandbox = "unelevated",macOS 不会创建或改写 [windows] 段。model_provider、model_providers.* 及认证设置始终保留在用户级配置中,避免 Codex 忽略项目配置并显示警告。
用户级配置会使用 model_providers.custom、Responses wire API 和本机 /v1 地址。一键配置完全由 Vision Relay 内置逻辑直接写入配置文件,不调用终端命令。Vision Relay 每次启动还会重新同步已启用的客户端路由,以修复被其他工具改回的供应商选择。默认情况下,配置前已运行的客户端会自动重启,未运行的客户端不会被启动;可在“设置 → 一键配置行为”中为 Codex、Codex CLI、OpenCode、Claude、Claude CLI、OpenClaw 分别调整。
“Codex 应用增强”提供两个独立开关:
%CODEX_HOME%\auth.json 中的官方 ChatGPT 认证,并让 Codex 继续识别和展示官方账号身份。本地 API 模式会在 provider 配置中写入仅发往本机 Vision Relay 的隔离 Bearer 标记,第三方模型请求不会使用官方登录令牌;关闭本地 API、让 Codex 直连供应商时,则写入真实供应商令牌。如果关闭该选项,本地 API 模式不会激活官方账号身份;直连模式下 Vision Relay 会先把官方认证备份到 %CODEX_HOME%\vision-relay-auth.json,再把真实供应商令牌写入托管认证,重新开启或恢复官方模式时会还原备份。openai 配置,会安全改为不带第三方 base_url 的 custom OpenAI provider;当前为第三方配置时不会被覆盖。关闭时只会还原带有 Vision Relay 专用标记的官方 provider,不会误改第三方配置。还可把 sessions、archived_sessions 中原 openai 会话和 state_5.sqlite 中原官方线程迁移为共享的 custom 标识,使官方与第三方会话显示在同一历史列表。“恢复官方模式”按钮在该开关开启时也会使用同一 custom OpenAI provider。统一历史迁移前会把 JSONL 原文件、SQLite 快照和迁移 ID 账本保存到 %CODEX_HOME%\vision-relay-history-backups\unified\<时间戳>。关闭开关时可按账本精确恢复原官方会话;开启期间新建的第三方 custom 会话不会被误改回 openai。如果 config.toml 配置了 sqlite_home,或设置了 CODEX_SQLITE_HOME,也会查找对应目录下的 state_5.sqlite。
跨供应商继续旧会话时,对方后端可能无法解密会话中的
encrypted_content推理内容,从而导致继续会话失败。迁移只统一历史归属,不保证加密推理内容能跨供应商复用。
同一页面也提供“一键配置 OpenCode”和“一键配置 Claude”:Windows 下 OpenCode 配置写入 %USERPROFILE%\.config\opencode\opencode.json,Claude 桌面配置写入 %LOCALAPPDATA%\Claude-3p\configLibrary\<active-id>.json,Claude CLI 配置写入 %USERPROFILE%\.claude\settings.json;macOS 下对应路径为 ~/.config/opencode/opencode.json、~/Library/Application Support/Claude-3p/configLibrary/<active-id>.json 和 ~/.claude/settings.json。现有配置中的其他字段会保留。
OpenClaw 可在同一页面点击“一键配置 OpenClaw”,Windows 和 macOS 默认分别写入 %USERPROFILE%\.openclaw\openclaw.json 与 ~/.openclaw/openclaw.json。配置会新增 vision-relay 自定义供应商,通过 openai-completions 接入本机 /v1 接口,同步当前模型映射、上下文窗口和图片输入能力,并将默认模型切换为 vision-relay/<模型名>。现有的其他 OpenClaw 配置会保留,写入前会在同目录生成带时间戳的备份。
如果设置了 OPENCLAW_CONFIG_PATH、OPENCLAW_STATE_DIR 或 OPENCLAW_HOME,Vision Relay 会按 OpenClaw 的路径规则写入对应配置。OpenClaw 配置文件支持 JSON5;一键配置可读取带注释、单引号和尾随逗号的现有文件,写回时会标准化为 JSON。详见 OpenClaw 配置文档。
Anthropic / Claude 客户端:
Base URL: http://127.0.0.1:8787
API Key: 留空(本地 API 无需认证)
Endpoint: /v1/messages
Gemini 客户端:
Base URL: http://127.0.0.1:8787
API Key: 留空(本地 API 无需认证)
Endpoint: /v1beta/models/{model}:generateContent
Ollama 客户端:
Base URL: http://127.0.0.1:8787
Endpoint: /api/chat 或 /api/generate
Ollama 客户端可直接调用本地接口,不需要附加 Authorization、X-API-Key 或 query key。
backend/cmd/vision-relay/ 程序入口和 Windows 专用 exe 资源
backend/internal/protocol/ OpenAI Responses 与 Anthropic 协议转换
backend/internal/server/ HTTP 服务、中转、配置、日志和跨平台桌面集成
backend/internal/server/assets/ 桌面程序图标资源
frontend/assets.go 前端静态资源嵌入入口
frontend/public/index.html 桌面客户端页面结构
frontend/public/assets/css/ 页面样式
frontend/public/assets/js/ 页面交互逻辑
frontend/public/assets/images/ 页面图标资源
tools/ 构建和辅助工具
go.mod Go 模块依赖
Windows 默认桌面模式下,关闭窗口不会退出服务,可从系统托盘重新打开窗口或退出程序。macOS 会驻留菜单栏并使用系统浏览器显示管理页面,可从菜单栏再次打开页面或退出程序。
198.18.x.x、超时或 fake-ip 问题怎么办?在页面里的网络代理 URL 填写本地代理地址,例如:
http://127.0.0.1:7890
在文本模型配置的“模型映射”列表中,为具体模型勾选“支持多模态”。勾选后图片会直接发送给该模型;同一供应商下未勾选的模型仍会在视觉能力开启时先调用视觉模型解析。
examples/ 正文。| 受信任目录项 | 用途 |
|---|---|
gpt5.5-unrestricted.md | 短小通用,适合日常编码与常规技术任务 |
gpt5.4-unrestricted.md | 面向 GPT-5.4 / Codex CLI,偏 CTF 与安全研究工作流 |
gpt5.5-jeli.md | 大白话通用版本,提供更完整的工程与逆向执行流程 |
gpt-5.6-sol-unrestricted.md | GPT-5.6-sol 破甲提示词,偏直接执行与中英文任务 |
海鸥3.0破甲.md | 中文技术操作员人格,覆盖编码、CTF、逆向、内存与协议任务路由 |
Codex-X 的原始 MIT 许可文本保存在 backend/internal/server/break_armor_codex_x_templates/LICENSE.codex-x。
Vision Relay 采用 MIT License 开源。
项目包含的第三方依赖、资源和模板仍遵循其各自许可证。Codex-X 模板的原始 MIT 许可见 backend/internal/server/break_armor_codex_x_templates/LICENSE.codex-x。
Windows 与 macOS 桌面版默认都会在启动后访问 GitHub Releases 检查新版本,可在左侧“更新”页面关闭自动检测,也可以随时手动检查。Windows 版支持“下载更新并重启”;macOS 首版会匹配当前架构的 Release 压缩包并引导手动下载,不会直接替换 .app(避免破坏 Developer ID 签名与 notarization)。Windows 自动更新流程如下:
xshentx/vision-relay 的最新 GitHub Release 下载 vision-relay.exe;vision-relay.exe.sha256 并验证 SHA-256;缺少或校验失败时拒绝安装;vision-relay.exe.old,从固定的非可执行暂存文件 vision-relay.update 写入新版本并启动规范名称的新程序;.old、vision-relay.update 或旧版兼容暂存文件。发布构建时请传入与 Git tag 相同的版本号:
.\tools\build-windows.ps1 -Version v2.2.2
构建脚本会生成 vision-relay.exe 和 vision-relay.exe.sha256,发布 Release 时必须同时上传这两个文件。当前 Windows Release 为无签名构建,SHA-256 仅用于验证下载完整性,首次运行可能出现 Windows SmartScreen 或未知发布者提示;代码签名与证书信誉仍是降低此类提示和安全软件误报的关键。自动更新仅支持经构建脚本生成的 Windows EXE;go run 开发模式只检查更新,不自动替换。
⚠️ Experimentelle Skill-Sammlung für deutsches Recht (Arbeits-, Gesellschafts-, Insolvenz-, Datenschutz-, Prozessrecht u
191 agents, 155 skills, and 82 plugins cross-compatible with Claude Code, Cursor, and Codex
Manage multiple Claude Code agents from TUI or Web with tmux and git worktrees
Project management using GitHub Issues + Git worktrees for parallel agent execution