Skip to main content
Glama

Lutra

浏览器内的调色 LUT 制作工具。 拖入截图、相机 RAW 文件或视频片段,用真正的调色师工具进行调色,导出 .cube / .3dl / Unreal / Unity / ReShade / HALD LUT。无需安装,无需账户——一切都在你的 GPU 上通过 WebGL2 本地运行。图像永远不会离开你的机器。

在线访问:https://lutra.gamebench.dev

为什么

制作调色 LUT 通常意味着要安装数 GB 的视频软件。Lutra 是一个约 70 KB(gzip 后)的 Web 应用,围绕一条架构规则构建:每个操作都是纯粹的逐像素颜色变换,因此整个调色可以精确地烘焙成 3D LUT。空间效果(辉光、光晕、颗粒、暗角)只作为明确标注的预览层存在,并以引擎配方而非像素的形式导出,因为它们无法存在于 LUT 中——你在调色中看到的就是 LUT 所做的。

Related MCP server: mcp-da-vinci

功能

调色

  • 接触表调色 — 加载多张不同光照条件下的照片;每个缩略图都实时跟随调色,因为 LUT 是全局的,必须在任何地方都成立。

  • 逐张显影 — 在判断共享风格之前,将每个源素材按 ±4 EV 归一化。显影后的原图、示波器、取色和 Auto match 都看到相同的输入;偏移量按设计不进入导出的 LUT。

  • 调色师工具集 — 白平衡(+ 灰色吸管)、曝光、带枢轴的对比度、高光/阴影/白场/黑场、lift/gamma/gain/offset 色轮、主通道和 R/G/B 分通道曲线、8 段 HSL 混合器(Oklab 色相)、连续 Sat-vs-Sat 和 Luma-vs-Sat 曲线、带亮度键控阴影/高光控制的饱和度/自然饱和度、分离色调、输出电平,以及主风格强度混合。

  • 创意 LUT 层 — 拖入你已有的任何 .cube 文件,并在其之上继续调色,带强度滑块。它叠加在色调曲线之后,因此其下的所有调整都是微调风格而非输入——两者仍然烘焙成一个导出的 LUT。

  • 诚实的胶片响应 — 辉光、光晕、颗粒和暗角作为一层预览,UI 明确标注不在 LUT 中。它们无法烘焙(辉光读取相邻像素;颗粒和暗角取决于画面中的位置),因此它们从缩略图、对比和示波器中隐藏,并作为引擎配方导出,指明可复现它们的 Unreal/Unity/ReShade 设置。

  • 对比 — 前后对比(按住空格键)、A/B 擦除、逐张缩略图。全程支持撤销/重做和键盘快捷键。

输入

  • 相机 RAW — .ARW、.CR2、.CR3、.NEF、.DNG、.RAF、.ORF、.RW2 等,通过编译为 WebAssembly 的 LibRaw 支持。相机的白平衡和色彩矩阵被应用,然后帧以场景线性光进入管线,与 EXR 和 PQ AVIF 进入的位置完全相同——因此照片和游戏截图可以以相同方式调色。曝光是一个固定的、有文档说明的余量常数,而非逐图像自动亮度,因此夜景和雪地不会显影成不同的亮度。1.5 MB 的解码器位于动态 import() 之后,绝不会拖累其他人的加载。

  • HDR 与高比特深度 — OpenEXR(half/float、NONE/RLE/ZIP)、Radiance .hdr 和 10/12 位 AVIF(PQ、HLG、高位 SDR),通过零依赖解码器 + WebCodecs 以全精度支持。HDR 以与 PQ shaper 导出所假设的相同 ACES 拟合显影为显示 sRGB,因此预览与引擎内结果一致。没有 WebCodecs ImageDecoder 的浏览器(Safari、Firefox)获得从编码的 PQ 数据派生的预显影 SDR 伴生文件,因此像素匹配——并在用户的 HDR AVIF 必须由浏览器色调映射时给出明确警告。

  • 实时视频调色 — MP4/MOV/WebM 片段与静帧位于同一胶片条中。选择一个,播放、拖动或逐帧步进,在正常视口中操作,并在播放期间持续转动每个调色旋钮。呈现的帧直接从浏览器/操作系统解码器馈入共享的 WebGL 调色;当该编解码器/浏览器/设备组合支持时使用硬件解码。原始片段字节和播放头持久保存在浏览器存储中,并在重启后恢复到胶片条中;它们永远不会被上传。副本是分块且可取消的,先检查配额,每个片段标记为 LOCAL 或 SESSION,使存储失败可见而非破坏性。

匹配与 QA

  • Auto match — 拖入参考图像,求解器拟合大方向旋钮,使整个接触表的 Oklab 统计量与之匹配。结果是普通的旋钮位置:用强度滑块混合,手动细化,一步撤销。

  • .cube 导入 — 相同的求解器将旋钮栈拟合到任何 3D .cube(通常在 ΔE ≈ 0.1 以内),将不透明的 LUT 变回可编辑的调色。

  • LUT Lab — 以浮点数据打开任何 3D .cube,检查其声明的输入域、输出偏移和折叠/奇异单元,调整大小,以 0–200% 混合,在第二个 LUT 之前或之后组合,然后下载、堆叠或反向拟合结果。自定义域和 0–1 之外的值在往返中保留,而不是被静默裁剪。

  • 颜色锁定 — 固定必须在调色中存活的颜色(UI 颜色、团队红色、肤色)。实时 ΔE 徽章在调色移动它们时发出警告,Auto match 将它们视为约束。

  • 资产协调 — 遮罩一个要保留的调色板和一个要调整的资产;Harmonize 只求解 HSL 混合器,使资产在你的风格下匹配。Export texture fix 则求解独立的 B→A 变换,并下载为 .cube + HALD 以批量应用于纹理。

  • 示波器 — RGB 直方图、parade、波形、带肤色线的矢量示波器、裁剪斑马纹、精确的进→出像素探针,以及色觉缺陷模拟,用于游戏可读性检查。

  • 诚实的烘焙预览 — 在浮点管线和实际量化 LUT(16³/32³/65³,三线性或四面体)之间切换,在导出前看到色带,而不是在引擎中。

输出与持久化

  • 源分辨率静帧 — 以原始尺寸将当前镜头导出为 PNG,包括逐张显影和浮点调色或当前选定的量化 LUT 预览。单独的完整风格导出将调整后的辉光、光晕、颗粒和暗角渲染到像素中。

  • 导出 — .cube(16/32/65)、.3dl、Unreal 256×16 条带、Unity LDR 1024×32 条带、ReShade lut.png、HALD CLUT 512×512,以及用于在色调映射器之前以场景参考 HDR 调色的引擎的 PQ shaper .cube。多种格式打包为一个 zip。参见 docs/exports.md 了解各引擎的设置和 PQ shaper 的注意事项。

  • 分享链接 — Share 按钮复制一个 URL,整个风格 gzip 压缩到 fragment 中。无服务器,不上传任何内容。

  • 会话在刷新后存活 — 镜头和遮罩涂鸦持久化到 OPFS,调色持久化到 localStorage。关闭标签页,回来,继续调色。

  • 可在手机上使用 — 低于 860px 时,图像固定到顶部,控件在其下方滚动,点击目标变大,双指捏合可缩放视口。

连接 AI

工具栏中一个按钮。Lutra 通过 Model Context Protocol 暴露其工具,因此 Claude、ChatGPT 或任何 MCP 客户端都可以驱动你已经打开的应用程序。重点不是文本到 LUT:助手可以查看。它渲染一张照片,读取示波器,用简单的英语微调一个命名轴,再次渲染,检查你锁定的颜色——这是盲生成器无法闭合的循环。全局调色更改保持为普通的撤销步骤;镜头显影和胶片响应保持分离,因此撤销不会静默跨越管线边界。

两种传输方式,为你挑选。WebMCP,在浏览器实现它的地方(Edge 已内置;Chrome 从 149 开始运行 origin trial),将工具交给浏览器内代理,完全无需配对。其他所有地方,你获得一个通过 Durable Object 中继的连接器链接,不存储任何内容:

客户端

你获得的内容

Claude Code

claude mcp add --transport http lutra <url>,在终端中运行

Codex

用于 ~/.codex/config.toml 的 [mcp_servers.lutra] 块

Claude 应用

裸 URL,用于 Settings → Connectors → Add custom connector

工具:get_look · list_shots · render_shot(返回实际图像)· get_scopes(原始或已调色)· nudge · set_look · set_shot_development · get_film_response · set_film_response · suggest_looks · check_locks · undo · get_share_link。调色模式包括色轮和专家曲线,以及紧凑的 toe/mid-gamma/shoulder 色调形状。在 shared/mcpTools.ts 中声明一次,在 src/mcp/tools.ts 中实现;worker/mcp.ts 是作为纯函数的协议。

安全性。 没有 API 密钥,也没有 OAuth——URL 中的代码就是凭证,因此要像密码一样对待它,使用 New link 撤销你粘贴到公共位置的链接。它只在 Lutra 标签页打开时有效。Lutra 不持有 API 密钥,也不调用任何模型:智能按你已支付的订阅计费,这就是为什么运行它零成本且无需账户。localhost 链接对 Claude 应用不可达,因为它从 Anthropic 的服务器连接;Claude Code 和 Codex 在本地运行,因此可以使用。

开发

npm install
npm run dev        # http://localhost:5173
npm run build      # type-check + production build → dist/
npm test           # vitest

一个运行时依赖(libraw-wasm,动态导入并代码分割,因此只在 RAW 文件时加载);开发依赖仅 Vite + TypeScript。

部署

生产环境作为静态资产从 Cloudflare Worker 提供——无服务器代码,只有 dist/:

npm run deploy       # build + wrangler deploy
npm run deploy:dry   # validate without deploying

自定义域名是 wrangler.jsonc 中的一条路由,因此 DNS 由部署保持同步。应用是完全静态的,使用相对资产路径,因此也可以在 Netlify、GitHub Pages 或任何文件服务器上托管——调色、导出和上述所有功能都无需后端。唯一的服务端部分是 MCP 配对中继(worker/),而 WebMCP 甚至不需要它。

文档

许可证

专有——保留所有权利。 参见 LICENSE。

该应用可在 https://lutra.gamebench.dev 免费使用;源代码未授权复用。这可能会改变:以后以开源许可证发布很容易,而取消发布是不可能的,因此在做出该决定之前,源代码保持封闭。

构建的部署仍然重新分发 LibRaw(LGPL-2.1 或 CDDL-1.0,通过 libraw-wasm),捆绑的示例来自 RawDB 的 CC0。这些义务跟随部署的应用而非源代码,因此无论此仓库的可见性如何都适用——参见 NOTICE,包括如果你添加示例,哪些 RawDB 许可证可以安全捆绑。

Related MCP Connectors

Related MCP Servers