Skip to main content
Glama

Lutra

ブラウザ内で動作するカラーグレーディングLUT作成ツール。 スクリーンショット、カメラRAW、ビデオクリップをドロップして、本格的なカラリストツールでグレーディングし、.cube / .3dl / Unreal / Unity / ReShade / HALD LUTを書き出せます。インストール不要、アカウント不要 — すべてはWebGL2でローカルのGPU上で動作します。画像がマシンの外に送信されることはありません。

公開中: https://lutra.gamebench.dev

なぜ

カラーLUTを作るには、通常はギガバイト級の映像ソフトウェアのインストールが必要です。Lutraは、1つのアーキテクチャ上のルールにもとづいて作られた約70KB(gzip圧縮)のWebアプリです。すべての操作はピクセル単位の純色変換です。 そのため、グレード全体を 正確に 3D LUTへ焼き込めます。空間エフェクト(ブルーム、ハレーション、グレイン、ビネット)は、明確にラベル付けされたプレビュー用レイヤーとしてのみ存在し、ピクセルではなくエンジンレシピ として書き出されます。これらはLUTの中に入れられないためです — グレーディングで見えているものが、そのままLUTが行う作用なのです。

Related MCP server: mcp-da-vinci

機能

グレーディング

  • コンタクトシートグレーディング — さまざまな照明条件のショットを多数読み込みます。LUTはグローバルでどこでも成立する必要があるため、すべてのサムネイルがグレードにライブで追従します。

  • ショット単位の現像 — 共通のルックを判断する前に、各ソースを±4EVで正規化します。現像済みオリジナル、スコープ、カラーピッキング、Auto matchはすべて同じ入力を参照します。オフセットは設計上、書き出されるLUTには含まれません。

  • カラリストツールセット — っとさバランス(グレーのスポイト付き)、露出、ピボット付きコントラスト、ハイライト/シャドウ / ホワイト/ ブラック、リフト / ガンマ / ゲイン / オフセットのホイール、マスターとR/G/Bチャンネル別カーブ、8バンドHSLミキサー(Oklab色相)、連続 Sat-vs-Sat / Luma-vs-Satカーブ、輝度キーでシャドウ / ハイライトを制御するサチュレーション / ビビッドネス、スプリットトーキング、出力レベル、役のルック強度ブレンド。

  • クリエイティブLUTレイヤー — 手持ちの.cubeをそのまま読み込み、強度スライダーで上にグレーディングを重ねられます。これはトーンカーブの直後にスタックされるため、それ下層の操作はルックを作り込むよりはトリムに働きます。それでもグレード全体は1つの書き出しLUTに焼き込まれます。

  • フィルムの応答を正直に — ブルーム、ハレーション、グレイン、ビネットを、UIがnot in the LUTと明示するレイヤーとしてプレビューします。これらはLUTへベイクできません(ブルームは隣接ピクセルを参照し、グレインとビネットはフレーム内の位置に依存します)。そのため、サムネイル、比較表示、スコープからは除外され、それらを再現するUnreal / Unity / ReShade設定を列挙したエンジンレシピとして書き出される。

  • 比較 — ビフォー/アフター(Spaceキー長押し)、A/Bワイプ、ショットごとのサムネイル。Undo/redoとキーボードショートカットは全体で機能します。

入力

  • カメラRAW — .ARW、.CR2、.CR3、.NEF、.DNG、.RAF、.ORF、.RW2 などは、WebAssemblyにコンパイルされたLibRaw Whiskeyなどの拡張で処理します。カメラ固有のホワイトバランスとカラーマトリックスを適用し、その後フレームはシーンリニアライトとしてパイプラインに入ります。EXRやPQのAVIFが入るのとまったく同じ場所です — そのため写真とゲームキャプチャは同じようにグレーディングされます。露出は物理的に文書化された(reference mast)の定数であり、画像ごとの自動輝度ではなく、夜のショットと雪原が違う明るさに現像れることはありません。1.5MBのデコ批判は動的import()の背後にあり、他のページのロードには一切影響しません。

  • HDRと高ビット深度 — OpenEXR(half/float、NONE/RLE/ZIP)、Radiance .hdr、10/12bit AVIF(PQ、HLG、高ビットSDR)まで、依存なしのデコーダとWebCodecsで完全な精度で扱えます。HDRは、PQ shaperの書き出しが前提とするのと等しいトーンマップACES transformでディスプレイ用のsRGBへ現像されるため、プレビューとゲーム内の結果が一致します。WebCodecs ないImageDecoder を持たないブラウザ(Safari、Firefox)では、エンコードされた PQデータにあらかじめ現像済み/SDRの比較用画像が用意され、ピクセルが一致します。またユーザーのHDR AVIFをブラウザのトーンマッピングで表示する必要がある場合はは開示的に警告します。

  • ライブビデオグレーディング — MP4/MOV/WebMクリップが静止画と同じフィルムストリップに並びます。クリップを選択して通常のビューポアタフで再生、スクラブ、フレーム移動などをしながら、再生中でもグレーディングノブを調整することができます。表示されるフレームはブラウザ/OSのデコーダーから直接共有WebGLグレードへ渡され、コーデック / ブラウザ / デバイスの組み合わせが対応していれば、できます。元のクリップのベイト列はローカルブラウザストエージと再生ヘッド位置に保存され、再起動後はフィルムストリップに復元されます。アップロードはありません。コピーはチャンク分割かつキャンセル可能で、作りクォータを事前に確認し、各クリップには LOCAL または SESSION のラベルが付くため、ストレージの失敗を隠滅的にではなく可視的にします。

マッチングとQA

  • Auto match — 参照画像をドロップすると、概略は調整ノブだけのだし、コンタクトシート全体のOklab統計をその参照画像に一致させるようにソルバーが最適化します。結果は通常のノブ位置として与えるので、強度スライダーでブレンド、手動で微調整、1ステップのUndoができます。

  • .cube 読み込み — 同じソルバーを使って任意の3D .cubeに対してノブの組み合わせをフィットさせ(通常ΔE≈0.1)、不透明なLUTを編集可能なグレードへ戻します。

  • LUT Lab — 任意の3D .cubeを浮動小数データとして開き、宣言された入力ドメイン、出力の逸脱、折り返し/特異セルを調べ、リサイズし、0〜200%でブレンドし、別のLUTの前後に合成してから、ダウンロード、スタッキング、逆フィットできます。カスタムドメインや0–1の値域外の値は丸められたクリップされずに往復を耐えます。

  • カラーロック — グレード後も保ちたい色(UIの色、チームのレッド、肌色など)をピン止めします。グレードがそれらの色を動かすと、リアルタイムのΔEバッジが警告します。Auto match はそれらを制約として扱います。

  • Harmonize アセット — 保持するパレットと調整するアセットをマスクします。Harmonize はHSLミキサーのみを解くので、アセットが現在の認識・下に一致します。Export texture fix はその代わりに単体のB→トランスフォームを解法され、テクスチャ一括適用用に.cube + HALDとしてダウンロードします。

  • スコープ — RGBヒストグラム、パレード、波形モニター、スキントーンライト付きベクスコープ、クリップ/ゼブラ、正確なin→pixel probe、色視覚の不足のチェックをシミュレーション(ゲームプレイ読みやすさの確認用)。

  • 理論なLUT焼き込みプレビュー — 浮動小数点のパイプラインと実際にクオンタイズされたLUT(16³/32³/65³、トリリニア/テトラヘドラル補間)を切り替え、ゲームエラー内ではなく書き出す前にバンディングを確認できます。

出力と永続性

  • オリジナル解像度の静止画書き出し — アクティブなショットを元の画像サイズのみPNGで書き出します。ショット単位の試作、浮動小数点グレードまたは現在選んでいる量子化LUTプレビューのどちらかを含みます。別の「最終見た目」書き出しは、調整済みのブルーム、ハレーション、グレイン、ビネットをピクセルにレンダリングします。

  • エクスポート — .cube(16/32/64)、.3dl、Unreal 256×16ストリップ、Unity LDR 1024×32ストリップ、ReShade lut.png、HALD CLUT 512×512、そしてトーンレイヤーの前にscene-referenced HDRをグレーディングするエンジン向けの PQ shaper .cube. 複数フォーマットを1つのzipにまとめられます。エンジンごとの設定とPQ shaperの注意点についてドキュメントをご参照ください。

  • 共有リンク — 「共有」ボタンが、ルック全体をgzipしたURLフラグメントのリンクをコピーします。サーバもアップロードもありません。

  • セッションの永続化 — ショットとマスクの書き込みはOPFSへ、グレードはlocalStorageへ保存されます。タブを閉じて戻ってもグレーテグを続けられます。

  • スマホでも作業可能 — 860px以下では画像が上部に固定され、コントロールがスクロールして下に流れ、操作対象が大きくなります。また度の指のピンチでビューポ記録が拡大縮小できます。

AI連携

ボールドバーにある1つのボタン。 LutraはModel Context Protocol(MCP)でツールを公開し、Claude、ChatGPT、またはその他のMCPクライアントが、すでに開いている自分のアプリを操作できるようにします。重要目的はテキストからLUTを作ることではありません。アシスタントは見ることができます。ショットを描画し、スコープを読み取り、平野の言語で名前付きの軸を移し、再度描画して、あなたのカラーロックを確認する — それは視覚盲生成器には回せないループです。グローバルなグレードの変更は普通のUndo操作のままです。ただし、ショットディベロップと映画への対応は分離されているので、Undoする際パイプラインの境界を黙って越えることはありません。

トランスポートは2つ用意され、あなたに合わせて選ばれます。WebMCPは、ブラウザが実装する場合(Edgeは搭載、Chromeは149からオリジナル試用)、ブラウザ内のエージェントに完全にペアリングなしでツールを渡します。それ以外の場合は、不整合を1つも持たない Durable Objectを介して中継されたコネクタリンクを利用します:

クライアント

何を得られるか

Claude Code

claude mcp add --transport http lutra <url>(ターミナルで実行)

Codex

~/.codex/config.toml に追加する [mcp_servers.lutra] ブロック

Claude app

裸の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。グレードスキーマには、カラーホールやカーブに加えて、簡潔なトー / ミドンシャドウ / トーンのトーン字形も含まれています。型と実装は shared/mcpTools.ts と src/mcp/tools.ts にそれぞれ宣言が1か所、実装が用意され、worker/mcp.ts はプロトコルを純粋関数として表現しています。

セキュリティ — APIキーやOAuthはありません。URLのコードがそのままです。公開場所に貼り付けたコードはパスワードと同様に扱い、New linkで有効を失効させてください。この機能が動作するのはLutraタブが開いている間だけです。LutraはAPIキーを一切持たず、モデルも呼び出されません。AIの処理はあなたがすでに払っているサブスクリプションに請求されるため、Lutra自体は無料で動き、アカウントも不要です。localhostのリンクは、Anthropicのサーバーから接続するClaude appからは届けられません。Claude CodeやCodexはローカル動作するため、これらは使用できます。

開発

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

ランタイム依存は1つだけ(libraw-wasm)。動的に import されコード分割されるので、RAWファイルを処理するときだけ読み込まれます。開発依存はのだります Vite1。 envは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にはそれすら不要です。

ドキュメント

  • docs/exports.md — 各エンジンでの書き出すLUTの利用方法と、PQシャシャーパーで保証される点/保証されない点。

  • docs/architecture.md — 単一のgrade()関数からなる設計、CPUミラー、ソルバー、ロードマップ上のアイデア。

  • cloud-architecture.md 先 — ローカル先頭のサーバー境界と、年間$100上限で死活止め(フェイルクローズド)の Cloudflare予算について。

ライセンス

プロプライエタリ — すべての権利を留保。 LICENSEを参照。

アプリはhttps://lutra.gamebench.devで無料使用できます。ソースは再利用ライセンスされていません。これから変わる可能性があります。あとでオープンソースライセンスに変更するのは簡単だが、リリースを取り消すのは不可能です。そのため、ソースは意図的な決定がされるまで閉じた状態にします。

ビルド済みデプロイにはLibRaw(LGPL-2.1またはCDDL-1.0をlibraw-wasm経由)が再配布され、同梱サンプルはRawDBの中です。ただし、それはこのリポジトリの公開可視性に関係なく、デプロイされたアプリ の義務として発生します — NOTICEを参照してください。サンプルを追加するときに同梱しても安全なRawDBライセンスの内容も含まれます。

Related MCP Connectors

Related MCP Servers