Skip to main content
Glama

Bench Studio

停止租用外壳。拥有创作层。

一个本地优先的创意工作室,用于图像、视频、网站、设计好的PDF以及AI代理工作流。

MIT License Node 22.5+ 73 model routes 5 providers MCP ready

快速开始 · 技巧 · 深入工作原理 · 变更与原因 · 安全

Bench Studio model catalog

Bench Studio 将 跨5个提供商的73条精选图像和视频路线、提示优化、能力感知控制、本地文件保管以及透明成本账本整合到一个界面中。同一系统可通过 MCP 提供给 Claude、Codex、Cursor 及其他兼容客户端。

你的密钥保留在你机器的服务器端。你的提示在花费前可编辑。你的输出在本地镜像。你的成本以实际单位记录,而不是消失在神秘积分中。

[!NOTE] 这是经过清理的公开分发版。它不包含生成历史、上传内容、私有数据库、个人路径、凭据或本地构建产物。你的存档从空开始。

📖 使用指南

完整指南(登录页 + 分步说明):https://inematds.github.io/bench-studio-en/guia/

Related MCP server: omnicinema-mcp

为什么存在

大多数创意AI产品将五个有用的部分——模型访问、提示优化、路由、存储和计费——组合在一起,然后将接缝隐藏在月度计划后面。Bench 在保持便利性的同时,让每个接缝都可检查。

而不是…

Bench 给你…

单一提供商的模型路线图

一个你可以添加或替换的精选注册表

一个通用的上传框

从每个端点接受的输入派生的控件

一个不可见的提示重写

提交前可编辑的特定模型草稿

抽象积分

预飞行估算和记录的花费元数据

被困在账户画廊中的输出

本地镜像文件和持久元数据

仅限UI的工作流

通过UI和MCP提供的相同能力

等待下一个功能

你可以检查、更改和扩展的源代码

Bench 不拥有底层模型。它让你拥有连接你的想法、工具、提供商、文件和成本的可移植层。

三分钟运行

你需要什么

必需

  • Node.js 22.5+;推荐 Node 24,因为 Bench 使用 node:sqlite。

  • npm。

**这就是全部列表。**每个提供商都是可选的,并且各自降级:缺少密钥会使这些模型显示为不可用,并附带原因和修复方法——工作室仍然可以启动。至少携带其中一个才能生成任何内容:

提供商

模型数

成本

你需要什么

fal.ai

37

美元,实时定价

FAL_KEY

Kling

26

计划积分

npm i -g @klingai/cli-global && kling login

Agnes AI

4

零

AGNES_API_KEY

kie.ai

4

积分

KIE_API_KEY

inemaimg

2

零(你的GPU)

一个正在运行的本地服务器

可选,但值得

  • 一个 Google AI Studio 或 OpenRouter 密钥,用于提示优化。如果没有优化器,你的提示将原始发送——Agnes 会拒绝,因为它要求英文。

  • Google Chrome,用于PDF打印和视觉预检。

  • 一个已登录的 Codex 或 Claude Code,用于代理驱动的网站和文档构建。

1. 克隆并安装

git clone https://github.com/inematds/bench-studio-en.git
cd bench-studio-en
npm install

2. 添加服务器端凭据

cp .env.example .env

填写你拥有的任何内容。.env.example 记录了所有19个变量——每个变量解锁什么、如何计费以及在哪里创建密钥。密钥保留在服务器端,永远不会发送到浏览器;.env 被 gitignore 忽略,并以仅所有者权限写入。

阅读顺序,最高优先:

exported in your shell  >  .env in the project  >  ~/.env

**或者完全跳过文件:**启动工作室并使用右上角的 Config 按钮。它显示每个设置——存在或缺失、值的来源以及最后4个字符——让你测试每个提供商,并为你写入 .env。为了安全,它只接受来自运行工作室的机器的写入。

3. 启动工作室

npm run dev

打开 http://localhost:5200。

服务

地址

工作室

http://localhost:5200

本地 API

http://localhost:8787

健康与能力摘要

http://localhost:8787/api/health

如果任一端口被占用:

PORT=8790 BENCH_API_PORT=8790 BENCH_WEB_PORT=5201 npm run dev

从另一台机器访问

两个端口都绑定到回环地址,因此全新安装只响应你。打开它意味着三件事——接口监听所有接口、防火墙规则以及记住撤销两者。一个命令完成所有三件事:

./scripts/remote.sh open      # publish the interface on this machine's IP
./scripts/remote.sh status    # open or closed, and with what protection
./scripts/remote.sh close     # back to local access only

open 打印要分发的地址,然后告诉你用 npm run dev 重启。close 完全撤销 open 所做的——读取在打开时写入的状态文件,而不是猜测——并保留 SSH 规则,因为删除它会导致人们将自己锁在自己的服务器之外。

两个值得了解的标志:

./scripts/remote.sh open --ip 203.0.113.7   # only that address, not the internet
./scripts/remote.sh open --firewall         # also enable ufw (SSH allowed first)

open 在打开任何内容之前会提供设置密码。 回答是,它将交给 npm run set-password;按 Enter——或回答 n——工作室将在没有密码的情况下打开,这是文档中的默认设置。提供此选项是因为下面的不对称性:这是设置密码只需一次按键的最后时刻。

密码无法从其他机器设置或更改——即使你登录后也不行。 POST /api/config/password 对任何非来自回环地址的请求返回 403,无论是否有会话,Config 屏幕会说明这一点,而不是显示一个无效字段。这条规则阻止了任何发现开放端口的人设置自己的密码并将你锁在自己的工作室之外。所以:

npm run set-password    # on the machine running the studio, over SSH or at the keyboard

open 故意不做的事情:发布 API。端口 8787 保持在回环地址(BENCH_API_HOST),因此写入文件和花费资金的端点只能通过接口在机器本身上访问。

这是测试姿态,而非部署。流量是纯 HTTP,在传输中可读。对于任何保持运行的内容,请阅读下一节。

安全地保持运行

  1. 在安装时设置密码。 在可访问的机器上,将其作为设置的一部分——npm install,然后 npm run set-password,然后 ./scripts/remote.sh open。按此顺序操作意味着工作室永远不会在没有密码的情况下打开,而且你永远不需要那个你无论如何都无法从网络使用的密码屏幕。

  2. 将 API 保持在回环地址。 默认设置。BENCH_API_HOST=0.0.0.0 是一个你应该有理由才选择退出的选项。

  3. 限制谁可以访问。 ./scripts/remote.sh open --ip <your-ip> 优于开放端口。Tailscale 地址优于两者,且根本不需要端口。

  4. 打开防火墙。 ./scripts/remote.sh open --firewall 首先允许 SSH,然后启用 ufw。同时检查你的 VPS 提供商自己的防火墙面板——它位于 ufw 之前,且不响应机器上的任何人。

  5. 在前面终止 HTTPS。 将域名指向机器,并在前面放置 nginx 或 Caddy 并附带 Let's Encrypt 证书,将 /api、/media、/previews、/inputs 和 /projects 代理到 127.0.0.1:8787,并将 npm run build 的 dist/ 作为站点提供。然后完全关闭 5200。如果这样做,让代理发送 X-Forwarded-For:下面的仅机器规则依赖于它。

  6. 以独立用户身份运行,而不是 root, 在 systemd 单元下,.env 权限为 600——这是工作室写入它的方式。

  7. 测试结束后关闭它。 ./scripts/remote.sh close。你忘记的暴露就是让你花费提供商积分的那一个。

节省时间和金钱的技巧

从免费路线开始。 Agnes(4个模型)和 inemaimg(2个,在你的GPU上)不花任何钱。在模型目录中,No cost 开关正好打开该组。用它们找到有效的提示,然后在你认为渲染效果最好的模型上花钱。

一次整理目录。 73个模型滚动起来很多。按提供商筛选,然后使用"禁用这些N个"来隐藏你不会使用的模型。整理是偏好,不是阻止:它从选择器中隐藏模型,但旧结果的 Redo 仍然有效。删除 data/catalog-prefs.json 恢复出厂状态。

在花钱之前优化。 优化后的提示在提交前可编辑。阅读它。这是发现误解最便宜的地方——提交后,修复需要另一次运行。

配置两个优化器。 链是 Gemini → OpenRouter → 本地 Codex。如果只有一个,配额耗尽会导致整个工作室瘫痪:提示原始通过,Agnes 拒绝非英文,并显示一个看起来像 Agnes 问题但实际不是的错误。

重做而不是重新输入。 每个结果都携带模型、控件、优化后的提示、原始想法和附件。重做恢复所有内容,因此你可以调整一件事而无需为重写付费。

同一个模型可以存在于两条路线上。 Veo、Nano Banana、gpt-image 和 gemini-image 通过多个提供商出现——费用不同(fal 上美元,Kling 上计划积分)。提供商在选择器中名称旁边显示;这是一个真正的选择,不是重复。

Kling 故意从不自动重试。 每个 Kling 作业都收费,包括失败的。没有东西会在你背后重新提交。

关注磁盘,而不是 CPU。 每个文件都在本地镜像,因为提供商 URL 会过期——Kling 上 24 小时,Agnes 上临时。大约每张图像 1.3 MB,每个视频 0.7–5 MB。工作室空闲时占用 274 MB RAM。

构建网站?首选代理。 Codex 和 Claude Code 自己编写文件并修复自己的错误。模型引擎(本地 Qwen、OpenRouter)只返回文本,因此它们不需要沙箱且不花任何钱——但需要更多监督。

将构建器指向你自己拥有的参考。 在 Config 中设置你的一个网站或 PDF,构建器会针对它校准其完成度——标记、字体、调色板、圆角。它从不复制品牌、文案、结构或文件。

你可以制作什么

工作区

交付内容

创建

支持模型感知参考、控制、可编辑提示草稿、引用、进度和内联结果的图像与视频。

模型目录

精选的文本转图像、图像编辑、文本转视频、图像转视频及参考视频路线。

结果

包含提交提示、模型、提供商URL、本地文件及记录成本的本地存档。

网站

支持可编辑源码、本地预览及可下载包的原始静态站点。

文档

基于可编辑HTML、Chromium打印及溢出预检的设计PDF。

连接

机器校正的MCP配置及兼容代理的便携技能。

Bench Studio 创建工作区

30秒了解系统

flowchart LR
    Idea["Your idea"] --> Client{"How do you want to work?"}
    Client -->|Create manually| UI["React studio"]
    Client -->|Delegate to an agent| MCP["MCP server"]

    UI --> API["Local API"]
    MCP --> API

    API --> Prompt["Editable prompt refinement"]
    API --> Router["Capability-aware router"]
    API --> Quote["Quote and pricing engine"]

    Prompt --> Router
    Router --> Prov["fal · Kling · Agnes · kie · inemaimg"]
    Prov --> Mirror["Local media mirror"]

    API --> Projects["Website and PDF runner"]
    Projects --> Archive["Inspectable project source"]

    Quote --> Ledger[("Local SQLite ledger")]
    Mirror --> Ledger
    Archive --> Ledger

浏览器永远不会接收提供商密钥。它通过一个本地服务进行通信,该服务验证模型特定的负载、拥有凭证、流式传输进度、镜像工件并记录持久化元数据。

选择正确的连接策略

Bench 使用聚合器,因为单一认证和队列模型是支持大型可互换目录的实用方式。但这并非唯一有效的架构。

flowchart TB
    Need{"What do you actually need?"}
    Need -->|One stable model| Direct["Use its first-party API"]
    Need -->|Many interchangeable models| Bench["Use Bench + an aggregator"]

    Direct --> D1["Potentially lowest route price"]
    Direct --> D2["One integration per provider"]
    Direct --> D3["Best for a narrow workflow"]

    Bench --> B1["One authentication and queue model"]
    Bench --> B2["Consistent controls and records"]
    Bench --> B3["Best for a flexible studio"]

聚合器不一定总是最便宜的路径。Bench 明确做出了这一权衡,而不是将其称为“零加价”。

从创意到收据的一次请求

sequenceDiagram
    participant U as User or agent
    participant B as Bench
    participant R as Capability router
    participant F as fal.ai
    participant L as Local archive

    U->>B: Describe the result
    B->>R: Select a model and inspect accepted inputs
    R-->>B: Controls, limits, and pricing unit
    B-->>U: Editable prompt and preflight estimate
    U->>B: Approve generation
    B->>F: Validated model-specific payload
    F-->>B: Queue progress and output URL
    B->>L: Mirror media and write metadata
    B-->>U: Local result, provider result, and recorded cost

Bench 记录提交的内容。它从不声称附加的参考影响了输出,仅仅因为API接受了该字段;创意保真度仍需人工审核。

模型智能,而非充满URL的下拉菜单

每个端点都有不同的假设。有些接受单张图像,有些接受列表,有些需要起始帧,还有些不接受任何参考。Bench 将发现与生产准入分开:

flowchart LR
    Catalog["Live provider catalog"] --> Discover["Discovery snapshot"]
    Discover --> Evidence["Schema and pricing evidence"]
    Evidence --> Review{"Safe for production?"}
    Review -->|Not yet| Observe["Keep observable"]
    Review -->|Yes| Registry["Curated registry"]
    Registry --> UI["Relevant UI controls"]
    Registry --> MCP["Validated MCP inputs"]

这可以防止新发布、重命名或规格不足的模型悄然破坏付费工作流。

提示优化保持可见

  1. 编写一个普通的创意请求。

  2. Bench 添加所选模型可能理解的结构。

  3. 将重写的提示作为可编辑草稿进行审查。

  4. 在花费任何费用之前更改或拒绝它。

  5. 将最终提交的提示与结果一起存储。

如果未配置Google密钥,原始提示将原样通过,界面会报告优化已禁用。

无营销数学的成本透明度

提交前,Bench 根据模型的定价单位和请求参数估算成本。完成后,当提供商暴露足够的收据数据时,它会记录计费金额。

flowchart LR
    Params["Model + duration + resolution + quantity"] --> Estimate["Preflight estimate"]
    Estimate --> Approval["Explicit approval"]
    Approval --> Run["Provider execution"]
    Run --> Record["Recorded cost + confidence"]

定价会变化。估算并非保证。Bench 区分估算值、计量值和记录值,而不是将三者呈现为同一事实。

您的本地数据边界

仓库初始没有 data/ 目录。Bench 在首次运行时创建它:

data/
├── bench.db              # generations, assets, spend, and projects
├── inputs/               # mirrored uploads
├── outputs/              # mirrored generations
├── previews/             # local video posters
└── projects/             # website and document source files

整个目录被Git忽略。删除结果会移除其本地数据库记录和镜像文件。它不会声称删除由外部模型提供商保留的副本。

flowchart LR
    Browser["Browser UI\nno provider keys"] --> Local["Loopback API\nkeys + validation"]
    Agent["Local MCP client"] --> Local
    Local --> Provider["External model provider"]
    Local --> Disk["Local SQLite + files"]

从Claude、Codex或Cursor使用

启动Bench,打开连接,选择您的客户端,并复制生成的配置。Bench 会为当前机器插入正确的绝对路径;仓库本身不包含任何用户的home目录。

MCP服务器暴露了十一个专注的工具,用于:

  • 发现模型并检查能力合约;

  • 上传本地参考媒体;

  • 生成图像和视频;

  • 读取结果、预览和花费;

  • 创建和轮询网站或文档项目;

  • 检索本地项目工件。

integrations/skills/bench-studio/ 中的捆绑技能提供判断和工作流指导。MCP 提供实时执行层。

项目地图

bench-studio-public/
├── src/                     # React interface
├── server/
│   ├── server.mjs           # loopback API and orchestration
│   ├── mcp.mjs              # stdio MCP server
│   ├── registry.json        # curated production roster
│   ├── capabilities.json    # accepted-input contracts
│   ├── profiles/            # prompt and pricing intelligence
│   └── mcp-app/             # embedded MCP interface
├── integrations/
│   ├── skills/bench-studio/ # portable agent workflow skill
│   └── macos/               # optional launch-agent templates
├── tests/                   # contracts, persistence, API, a11y, and E2E
├── docs/                    # public README media
├── .env.example             # placeholders only
└── package.json

文档

文档

涵盖内容

docs/COMO-FUNCIONA.md

系统内部工作原理:提供商合约、每个提供商测量的陷阱、成本类别、可用性与策展、优化链、构建器及安全模型

docs/ACESSO-REMOTO.md

远程访问和VPS设置:为什么密码在端口之前、remote.sh 涉及的内容、加固顺序以及仍开放的内容

docs/HISTORICO.md

在原始工具包之上构建的所有内容以及发现的每个错误——区分已存在的错误和后来引入的错误

CHANGELOG.md

逐版本更新日志

.env.example

全部19个设置、每个设置解锁的功能以及获取密钥的位置

SECURITY.md

威胁模型和报告

常用命令

命令

用途

npm run dev

启动本地API和Web界面。

npm run build

构建生产版Web应用。

npm run registry

重建精选模型注册表。

npm run capabilities

重建能力清单。

npm run catalog:sync

刷新提供商发现和定价证据。

npm run mcp

启动stdio MCP服务器。

npm run set-password

设置或更改工作室密码(-- --remove 清除密码)。

./scripts/remote.sh open

在本机IP上发布界面,包含防火墙规则。

./scripts/remote.sh close

撤销操作——恢复为仅本地访问。

./scripts/remote.sh status

查看开放或关闭状态、端口号、是否设置密码。

npm run test:contracts

运行API、持久化和模型合约测试。

npm run test:mcp

对MCP发现和媒体行为进行冒烟测试。

npm run test:e2e

运行浏览器旅程和无障碍检查(需要先执行 npx playwright install chromium)。

npm run test:release

运行完整的发布门禁。

安全与隐私

默认状态。 两个端口都绑定到回环地址,并且没有密码——与您自己的机器通信不应需要密码。除了您向已配置的提供商发起的调用外,没有任何数据离开您的机器。

密钥。 在服务器端读取,从不返回给UI。配置屏幕显示存在性、来源和最后4个字符——从不显示值。.env 以仅所有者权限(600)写入,并被git忽略。

可选密码。 设置 BENCH_PASSWORD 后,API需要会话:

npm run set-password              # asks for it, without echoing
npm run set-password -- --remove

存储为scrypt哈希,因此没有人能从文件中读取您的密码。设置或更改密码会立即让其他所有人登出。忘记密码?从 .env 中删除该行并重启——这就是恢复路径,故意为之,因为拥有该文件的人已经拥有了其中的密钥。

密码保护API和您生成的文件。界面外壳仍然提供给任何访问端口的人,但没有会话则不会显示任何内容。隐藏外壳本身是反向代理的工作,而非此进程的职责。

写入设置仅限本机。 即使有有效会话,从网络发起的 POST 到配置端点也会被拒绝——更改密钥必须在机器上进行。这在开发代理下仍然有效:API仅在套接字已经是回环时才信任转发的来源,因此来自网络的请求无法伪造来源。

暴露服务。 ./scripts/remote.sh open 发布界面并打开端口;close 撤销两者。请参阅从另一台机器访问和安全地保持运行。优先使用Tailscale或受密码保护的反向代理,而非开放端口。

  • 生成的媒体可能仍由外部提供商根据其条款保留。

  • 网站和文档创建可能调用本地认证的编码代理。在部署前审查生成的源代码。

在暴露、修改或重新分发服务之前,请阅读 SECURITY.md。

诚实的边界

  • Bench 是一个本地单用户工具——而非托管的多租户SaaS产品。

  • 注册表是经过有意策展的;目录存在并不保证生产准入。

  • 接受的输入不保证创意保真度。

  • 网站输出默认是静态的。

  • PDF创建依赖于本地Chrome安装。

  • 模型可用性和定价可能在目录同步后发生变化。

  • 拥有这一层意味着维护一小段软件。

发布信心

发布门禁涵盖生产构建、API和数据库合约、MCP发现、浏览器旅程、无障碍、响应式布局、故障状态、模型转换和视觉快照。

npm run test:release

许可证

Bench Studio Public 在 MIT许可证 下提供。


模型负责繁重工作。Bench 让它们周围的层变得可见——并且属于您。

Related MCP Connectors

Related MCP Servers