Skip to main content
Glama

Lutra

In-Browser-Color-Grading-LUT-Ersteller. Ziehen Sie Screenshots, Kamera-RAW-Dateien oder einen Videoclip hinein, gradieren Sie sie mit echten Colorist-Werkzeugen, exportieren Sie .cube / .3dl / Unreal / Unity / ReShade / HALD-LUTs. Keine Installationen, keine Konten – alles läuft lokal auf Ihrer GPU über WebGL2. Bilder verlassen nie Ihren Rechner.

Live unter https://lutra.gamebench.dev

Warum

Eine Farb-LUT zu erstellen bedeutet normalerweise, Gigabyte an Videosoftware zu installieren. Lutra ist eine ~70 KB (gzip-komprimierte) Web-App, die um eine architektonische Regel herum gebaut ist: Jede Operation ist eine reine Per-Pixel-Farbtransformation, sodass das gesamte Grading exakt in eine 3D-LUT eingebacken wird. Räumliche Effekte (Bloom, Halation, Korn, Vignette) existieren nur als klar gekennzeichnete Vorschau-Ebene und werden als Engine-Rezept statt als Pixel exportiert, weil sie nicht in einer LUT leben können – was Sie im Grading sehen, ist das, was die LUT tut.

Related MCP server: mcp-da-vinci

Funktionen

Grading

  • Kontaktbogen-Grading – Laden Sie viele Aufnahmen über verschiedene Lichtverhältnisse; jedes Thumbnail folgt dem Grading live, weil eine LUT global ist und überall funktionieren muss.

  • Entwicklung pro Aufnahme – Normalisieren Sie jede Quelle um ±4 EV, bevor Sie den gemeinsamen Look beurteilen. Entwickelte Originale, Scopes, Farbauswahl und Auto-Match sehen alle dieselbe Eingabe; der Offset bleibt konstruktionsbedingt außerhalb der exportierten LUT.

  • Colorist-Werkzeugsatz – Weißabgleich (+ Grau-Pipette), Belichtung, Kontrast mit Drehpunkt, Lichter/Schatten/Weiß/Schwarz, Lift/Gamma/Gain/Offset-Räder, Master- und kanalweise R/G/B-Kurven, 8-Band-HSL-Mixer (Oklab-Farbtöne), kontinuierliche Sättigung-gegen-Sättigung- und Luma-gegen-Sättigung-Kurven, Sättigung/Vibrance mit helligkeitsbasierter Schatten-/Lichter-Steuerung, Split-Toning, Ausgabepegel und ein Master-Look-Stärke-Mix.

  • Kreative LUT-Ebene – Fügen Sie eine beliebige .cube-Datei ein, die Sie bereits besitzen, und gradieren Sie weiterhin mit einem Stärke-Regler darüber. Sie wird direkt nach den Tonkurven eingefügt, sodass alles darunter den Look trimmt, statt ihn zu speisen – und beide werden weiterhin in eine exportierte LUT eingebacken.

  • Filmantwort, ehrlich – Bloom, Halation, Korn und Vignette werden als Ebene in der Vorschau angezeigt, die die UI ausdrücklich als nicht in der LUT kennzeichnet. Sie können nicht eingebacken werden (Bloom liest benachbarte Pixel; Korn und Vignette hängen von der Position im Bild ab), daher sind sie in Thumbnails, Vergleichen und Scopes ausgeblendet und werden als Engine-Rezept exportiert, das die Unreal/Unity/ReShade-Einstellungen benennt, die sie reproduzieren.

  • Vergleichen – Vorher/Nachher (Leertaste gedrückt halten), A/B-Wisch, Thumbnails pro Aufnahme. Rückgängig/Wiederholen und Tastaturkürzel überall.

Eingabe

  • Kamera-RAW.ARW, .CR2, .CR3, .NEF, .DNG, .RAF, .ORF, .RW2 und der Rest über LibRaw, kompiliert zu WebAssembly. Das eigene Weißabgleich- und Farbmatrix der Kamera wird angewendet, dann tritt das Bild als szenenlineares Licht in die Pipeline ein, genau an der Stelle, an der EXR und PQ-AVIF es tun – sodass ein Foto und eine Spielaufnahme identisch gradieren. Belichtung ist eine feste, dokumentierte Headroom-Konstante, keine automatische Helligkeit pro Bild, sodass eine Nachtaufnahme und ein Schneefeld nicht zu unterschiedlichen Helligkeiten entwickelt werden. Der 1,5-MB-Decoder liegt hinter einem dynamischen import() und belastet niemand anderen.

  • HDR & hohe Bittiefe – OpenEXR (half/float, NONE/RLE/ZIP), Radiance .hdr und 10/12-Bit-AVIF (PQ, HLG, High-Bit-SDR) in voller Präzision über abhängigkeitsfreie Decoder + WebCodecs. HDR wird mit demselben ACES-Fit zu Display-sRGB entwickelt, den der PQ-Shaper-Export annimmt, sodass Vorschau und In-Engine-Ergebnis übereinstimmen. Browser ohne WebCodecs ImageDecoder (Safari, Firefox) erhalten vorab entwickelte SDR-Begleiter, die aus den kodierten PQ-Daten abgeleitet sind, sodass die Pixel übereinstimmen – und eine klare Warnung, wenn ein HDR-AVIF des Benutzers im Browser tonemapped werden muss.

  • Live-Video-Grading – MP4/MOV/WebM-Clips liegen im selben Filmstreifen wie Standbilder. Wählen Sie einen aus, spielen Sie ab, scrubben oder schrittweise durch Einzelbilder im normalen Viewport, und drehen Sie währenddessen weiter an jedem Grading-Regler. Präsentierte Frames speisen das gemeinsame WebGL-Grading direkt vom Browser-/OS-Decoder; Hardware-Dekodierung wird verwendet, wenn diese Codec/Browser/Gerät-Kombination sie unterstützt. Original-Clip-Bytes und der Playhead bleiben lokal im Browser-Speicher erhalten und werden nach einem Neustart wieder in den Filmstreifen eingefügt; sie werden nie hochgeladen. Kopien sind in Blöcken aufgeteilt und abbrechbar, das Kontingent wird zuerst geprüft, und jeder Clip ist als LOCAL oder SESSION gekennzeichnet, sodass Speicherfehler sichtbar statt destruktiv sind.

Matching & QA

  • Auto-Match – Legen Sie ein Referenzbild ab, und ein Solver passt die groben Regler an, sodass die Oklab-Statistiken des gesamten Kontaktbogens übereinstimmen. Das Ergebnis sind gewöhnliche Reglerpositionen: Mischen Sie mit einem Stärke-Regler, verfeinern Sie von Hand, machen Sie in einem Schritt rückgängig.

  • .cube-Import – derselbe Solver passt den Reglerstapel an jede 3D-.cube-Datei an (typischerweise innerhalb ΔE ≈ 0,1) und verwandelt eine undurchsichtige LUT zurück in ein bearbeitbares Grading.

  • LUT-Lab – Öffnen Sie jede 3D-.cube-Datei als Float-Daten, untersuchen Sie ihren deklarierten Eingabebereich, Ausgabeabweichungen und gefaltete/singuläre Zellen, ändern Sie ihre Größe, mischen Sie sie von 0–200 %, setzen Sie sie vor oder nach einer zweiten LUT zusammen, und laden Sie das Ergebnis herunter, stapeln Sie es oder passen Sie es umgekehrt an. Benutzerdefinierte Bereiche und Werte außerhalb von 0–1 überleben den Rundtrip, statt stillschweigend abgeschnitten zu werden.

  • Farbsperren – Fixieren Sie Farben, die das Grading überleben müssen (UI-Farben, Team-Rot, Hauttöne). Live-ΔE-Abzeichen warnen, wenn das Grading sie verschiebt, und Auto-Match behandelt sie als Einschränkungen.

  • Assets harmonisieren – Maskieren Sie eine Palette, die beibehalten werden soll, und ein Asset, das angepasst werden soll; Harmonize löst nur den HSL-Mixer, sodass das Asset unter Ihrem Look übereinstimmt. Export-Textur-Fix löst stattdessen eine eigenständige B→A-Transformation und lädt sie als .cube + HALD herunter, um sie auf Texturen anzuwenden.

  • Scopes – RGB-Histogramm, Parade, Wellenform, Vektorskop mit Hauttonlinie, Clipping-Zebras, exakte In→Out-Pixelprobe und Simulation von Farbsehschwäche für Gameplay-Lesbarkeitsprüfungen.

  • Ehrliche eingebackene Vorschau – Wechseln Sie zwischen der Float-Pipeline und der tatsächlichen quantisierten LUT (16³/32³/65³, trilinear oder tetraedrisch), um Banding vor dem Export zu sehen, statt in der Engine.

Ausgabe & Persistenz

  • Standbilder in Quellauflösung – Exportieren Sie die aktive Aufnahme als PNG in ihren Originalabmessungen, einschließlich der Entwicklung pro Aufnahme und entweder des Float-Gradings oder der aktuell ausgewählten quantisierten LUT-Vorschau. Ein separater Export des vollständigen Looks rendert abgestimmten Bloom, Halation, Korn und Vignette in die Pixel.

  • Exporte.cube (16/32/65), .3dl, Unreal 256×16-Streifen, Unity LDR 1024×32-Streifen, ReShade lut.png, HALD CLUT 512×512 und ein PQ-Shaper-.cube für Engines, die in szenenreferenziertem HDR vor dem Tonemapper gradieren. Mehrere Formate werden in einem Zip gebündelt. Siehe docs/exports.md für die Einrichtung pro Engine und die Einschränkungen des PQ-Shaper.

  • Teilen-Links – Der Teilen-Button kopiert eine URL mit dem gesamten Look gzip-komprimiert in das Fragment. Kein Server, nichts wird hochgeladen.

  • Sitzungen überleben Neuladen – Aufnahmen und Masken-Kritzeleien bleiben in OPFS erhalten, das Grading in localStorage. Schließen Sie den Tab, kommen Sie zurück, gradieren Sie weiter.

  • Funktioniert auf dem Handy – Unter 860px wird das Bild oben fixiert, während die Bedienelemente darunter scrollen, die Trefferflächen werden größer, und mit zwei Fingern kann der Viewport per Pinch-Zoom vergrößert werden.

Connect AI

Ein Button in der Symbolleiste. Lutra stellt seine Werkzeuge über das Model Context Protocol bereit, sodass Claude, ChatGPT oder jeder MCP-Client die bereits geöffnete App steuern kann. Es geht nicht um Text-zu-LUT: Der Assistent kann sehen. Er rendert eine Aufnahme, liest die Scopes, stößt eine benannte Achse in einfachem Englisch an, rendert erneut, prüft Ihre gesperrten Farben – die Schleife, die ein blinder Generator nicht schließen kann. Globale Grading-Änderungen bleiben gewöhnliche Rückgängig-Schritte; Aufnahmeentwicklung und Filmantwort bleiben getrennt, sodass ein Rückgängig nicht stillschweigend Pipeline-Grenzen überschreiten kann.

Zwei Transporte, für Sie ausgewählt. WebMCP, wo der Browser es implementiert (Edge liefert es; Chrome führt einen Origin-Trial ab 149 durch), übergibt die Werkzeuge an den In-Browser-Agenten ohne jegliches Pairing. Überall sonst erhalten Sie einen Connector-Link, der über ein Durable Object weitergeleitet wird, das nichts speichert:

Client

Was Sie erhalten

Claude Code

claude mcp add --transport http lutra <url>, um in einem Terminal auszuführen

Codex

einen [mcp_servers.lutra]-Block für ~/.codex/config.toml

Claude app

die nackte URL, für Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen

Werkzeuge: get_look · list_shots · render_shot (gibt das tatsächliche Bild zurück) · get_scopes (Original oder gradiert) · nudge · set_look · set_shot_development · get_film_response · set_film_response · suggest_looks · check_locks · undo · get_share_link. Das Grading-Schema umfasst die Räder und Expertenkurven sowie eine kompakte Zehen-/Mittel-Gamma-/Schulter-Tonform. Einmal deklariert in shared/mcpTools.ts, implementiert in src/mcp/tools.ts; worker/mcp.ts ist das Protokoll als reine Funktion.

Sicherheit. Es gibt keinen API-Schlüssel und kein OAuth – der Code in der URL ist die Anmeldeinformation, behandeln Sie ihn also wie ein Passwort und verwenden Sie Neuer Link, um einen zu widerrufen, den Sie irgendwo öffentlich eingefügt haben. Er funktioniert nur, solange der Lutra-Tab geöffnet ist. Lutra hält keinen API-Schlüssel und ruft kein Modell auf: Die Intelligenz wird über das Abonnement abgerechnet, das Sie bereits bezahlen, weshalb dies nichts kostet und kein Konto benötigt. Ein localhost-Link ist von der Claude-App aus nicht erreichbar, die sich von Anthropics Servern verbindet; Claude Code und Codex laufen lokal, können also einen verwenden.

Entwickeln

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

Eine Laufzeitabhängigkeit (libraw-wasm, dynamisch importiert und code-split, sodass sie nur für RAW-Dateien geladen wird); Dev-Abhängigkeiten sind nur Vite + TypeScript.

Bereitstellen

Die Produktion wird als statische Assets von einem Cloudflare Worker ausgeliefert – kein Servercode, nur dist/:

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

Die benutzerdefinierte Domain ist eine Route in wrangler.jsonc, sodass DNS durch den Deploy synchron gehalten wird. Die App ist vollständig statisch mit relativen Asset-Pfaden, sodass sie auch auf Netlify, GitHub Pages oder jedem Dateiserver gehostet werden kann – Grading, Export und alle oben genannten Funktionen funktionieren ohne Backend. Das einzige serverseitige Stück ist das MCP-Pairing-Relay (worker/), und WebMCP braucht nicht einmal das.

Dokumentation

  • docs/exports.md – Verwendung der exportierten LUTs in jeder Engine und was der PQ-Shaper garantiert und was nicht.

  • docs/architecture.md – das Design der einzelnen grade()-Funktion, der CPU-Spiegel, der Solver und Roadmap-Ideen.

  • docs/professional-parity.md – wettbewerbsgestützte Fähigkeitslücken, Browser-Machbarkeitsentscheidungen und Akzeptanzkriterien.

  • docs/cloud-architecture.md – die lokale Servergrenze und das fail-closed Cloudflare-Budget, das auf 100 $/Jahr begrenzt ist.

Lizenz

Proprietär – alle Rechte vorbehalten. Siehe LICENSE.

Die App ist kostenlos nutzbar unter https://lutra.gamebench.dev; der Quellcode ist nicht zur Wiederverwendung lizenziert. Das kann sich ändern: Eine spätere Veröffentlichung unter einer Open-Source-Lizenz ist einfach, und eine Rücknahme ist unmöglich, daher bleibt der Quellcode geschlossen, bis diese Entscheidung bewusst getroffen wird.

Ein gebautes Deployment redistribuiert weiterhin LibRaw (LGPL-2.1 oder CDDL-1.0, über libraw-wasm), und die gebündelten Beispiele sind CC0 von RawDB. Diese Verpflichtungen folgen der bereitgestellten App und nicht dem Quellcode, gelten also unabhängig von der Sichtbarkeit dieses Repositorys – siehe NOTICE, einschließlich der Frage, welche RawDB-Lizenzen sicher zu bündeln sind, wenn Sie ein Beispiel hinzufügen.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Create and manage cinematic AI video renders through the Future Video Studio Agent API.

  • Manage AI filmmaking projects, scenes, assets, and generations in Martini.

  • Build and run visual creative-production workflows from your AI agent.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/withaspoon/nyans'

If you have feedback or need assistance with the MCP directory API, please join our Discord server