Deine Nutzer bearbeiten eine Vorschau im Browser. Dein Server wendet dasselbe Edit-Log auf das 80-Megapixel-Original an und liefert dieselben Pixel. Per Hash belegt.
Der Editor konnte hier nicht geladen werden. Öffne stattdessen die Demo.
Schwärzungs-Arbeitsplatz
Ein Compliance-Team verpixelt personenbezogene Daten in gescannten Formularen. Schwärzen, Annotieren, Wasserzeichen, kontraststarkes Theme, deutsche Oberfläche.
Dieselbe Komponente richtet sich auf dem Telefon von selbst ein. Keine zweite Oberfläche, kein Mobile-Flag. Probier es im Rahmen aus.
Eine Komponente, zwei Layouts
Unter 768 px Containerbreite wandert die Werkzeugleiste nach unten und das Werkzeugpanel sitzt darüber. Maßgeblich ist der Container, nicht der Viewport, deshalb bekommt auch eine schmale Seitenleiste das Telefon-Layout.
Touch zuerst
Zwei Finger zum Zoomen, ziehen zum Verschieben, ein Finger für Zuschnitt-Griffe, Schwärzungen und Anmerkungen. Mausrad und Trackpad tun auf dem Desktop dasselbe.
Nur die Vorschau reist
Das Telefon lädt und bearbeitet eine kleine Vorschau. Das Edit-Log geht an deinen Server, der es auf das Original in voller Auflösung anwendet. Dieselben Pixel, ein Bruchteil der Daten.
Notch und Home-Balken
Safe-Area-Abstände werden eingehalten. show-history="buttons" lässt die Zeitleiste weg und show-export="never" blendet Export aus, damit das Wesentliche auf einen kleinen Bildschirm passt.
9:41
Editor wird geladen …
Der Editor konnte hier nicht geladen werden. Öffne stattdessen die Demo.
Live-Editor in einem Telefonrahmen. Ziehen, zoomen, tippen.
Das Edit-Log ist das Bild
Ein Log, ein Kern
Jeder Zuschnitt, Filter und jede Anmerkung ist eine Operation in einem JSON-Log. Ein Rust-Kern, zu WebAssembly kompiliert, führt es im Web Worker, auf Node, Deno, Bun oder AWS Lambda aus. Gleiche Bytes rein, gleiche Bytes raus.
Byte-identisch, per Hash geprüft
Dieselbe Quelle mit demselben Log irgendwo gerendert: der SHA-256 stimmt überein. Große Uploads werden am Handy als Proxy bearbeitet; der Server rendert das Original aus demselben Log.
Aus JSON fortsetzen
Das Original einmal speichern, das Log daneben. Jeden Zustand auf jedem Gerät wieder öffnen, ohne Generationsverlust. Das Log kann im exportierten PNG, JPEG oder WebP mitreisen.
Jedes Werkzeug, das deine Nutzer erwarten
Zehn Plugins sind dabei. Jedes ist ein Paket, das du weglassen, ersetzen oder erweitern kannst.
Schick das Original und das Edit-Log an einen Fetch-Handler. Er validiert das Log, rendert mit derselben WebAssembly-Binary und liefert Bytes, Hash und einen Job-Schlüssel. Dieselbe Anfrage noch einmal liefert das gecachte Ergebnis.
Zod-validierte Anfrage, SSRF-Allowlist, Größenlimits vor dem Decode
Idempotente Job-Schlüssel: gleiche Quelle, gleiches Log, gleiche Optionen, gleiches Objekt
S3- oder URL-Quellen, S3- oder Inline-Ziele, Proxy-Modus für große Uploads
Speichertabelle von 12 bis 80 Megapixel
POST /render
{
"source": { "kind": "s3", "bucket": "uploads", "key": "IMG_4821.jpg" },
"editLog": { "version": 1, "source": { "id": "IMG_4821", "width": 8192, "height": 5461 }, "ops": [ … ] },
"output": { "format": "image/jpeg", "quality": 0.92 },
"destination": { "kind": "s3", "bucket": "renders" }
}
200 OK
{
"key": "renders/3f9a…c1.jpg",
"hash": "3f9a4e…b7c1", ← equals the browser's hash for the same input
"width": 6144, "height": 4096,
"cached": false, ← true on the second identical request
"timings": { "decode": 412, "render": 1730, "encode": 388 }
}
Erweitern ohne Fork
Ein Plugin ist ein npm-Paket: Operationen mit zod-Schemas, ein Reducer, ein Kernel in JavaScript oder in Rust als eigenes WebAssembly-Modul, und optional ein Werkzeug mit Panel und Gizmo. Es läuft auf dem Client und dem Server, ohne den Kern neu zu bauen.
Eins anlegen
npm create sealpixel-plugin acme-spotlight --kernel wasm-rustcd acme-spotlight && npm test # parity: Node vs Chromium, WebKit, Firefox
Business Source License 1.1, nach vier Jahren Apache 2.0. Keine Lizenzprüfung zur Laufzeit: die Software telefoniert nie nach Hause. Lizenz lesen
Fragen
Wer nutzt Sealpixel kostenlos?
Alle unter 1.000.000 EUR Bruttojahresumsatz: Einzelpersonen und Unternehmen unterhalb dieser Schwelle. Produktiveinsatz und kommerzielle Produkte sind eingeschlossen. Der Umsatz zählt für die gesamte Unternehmensgruppe, eine Tochter eines Konzerns ist also nicht frei. Bei Kundenarbeit entscheidet der Umsatz des Kunden: Ein Freelancer, der für ein kleines Startup baut, zahlt nichts, derselbe Freelancer für einen großen Kunden ist über dessen Plätze abgedeckt.
Ich bin eine Agentur. Was zahle ich?
Einen Platz pro Entwickler, der an Codebasen mit Sealpixel arbeitet, egal für wie viele Kunden oder Produkte. Der Platz deines Entwicklers deckt seine gesamte Kundenarbeit ab. Deine Kunden brauchen keine eigenen Plätze und keine, um die fertige Anwendung zu betreiben.
Wie funktionieren die Mengenstufen?
Wähle die Anzahl der Plätze im Checkout. Ab 5 Plätzen kostet jeder Platz 10 Prozent weniger, ab 10 Plätzen 20 Prozent. Später hinzugekaufte Plätze werden zur Stufe abgerechnet, die deine Gesamtzahl erreicht, anteilig bis zum Verlängerungsdatum. Ab 25 Plätzen machen wir ein individuelles Angebot.
Darf ein Open-Source-Projekt Sealpixel nutzen?
Ja. Beitragende unterhalb der Umsatzschwelle brauchen keine Plätze; ein Unternehmen, das das Projekt entwickelt, braucht Plätze für seine Entwickler. Kopien und Forks bleiben unter der Business Source License, und jedes Release wird vier Jahre nach Veröffentlichung Apache 2.0.
Ist Sealpixel Open Source?
Noch nicht, mit Absicht. Sealpixel nutzt die Business Source License 1.1: Der Quellcode ist öffentlich, du darfst ihn lesen, ändern, forken und weitergeben, und die produktive Nutzung ist unterhalb der Umsatzschwelle frei. Vier Jahre nach Veröffentlichung einer Version wird sie Apache License 2.0. Bis dahin kaufen größere Organisationen Entwicklerplätze.
Was genau ist ein Entwicklerplatz?
Ein Platz gehört einer namentlich benannten Person, die Code in einem Projekt mit Sealpixel schreibt, prüft, testet oder integriert. Er kann übertragen werden, wenn die Person ausscheidet. Designer in der Codebasis und QA zählen mit; Endnutzer deiner Anwendung nicht.
Darf ich ein SaaS auf Sealpixel bauen?
Ja. Die einzige Grenze ist ein Dienst, dessen Hauptwert der Bildeditor selbst ist, etwa ein gehostetes „Bearbeite dein Bild“-Produkt oder eine an Dritte verkaufte Bildbearbeitungs-API. Ein Fotobuch-Shop, ein CMS, ein Immobilienportal oder ein Support-Tool mit eingebauter Bearbeitung sind in Ordnung.
Wie funktioniert die Rückerstattung?
Kündige innerhalb von 30 Tagen nach dem ersten Kauf, und der Zahlungsdienstleister erstattet den vollen Betrag auf das ursprüngliche Zahlungsmittel. Ohne Nachfragen.
Was genau ist byte-identisch?
Dieselben Quellbytes plus dasselbe Edit-Log, gerendert mit derselben Kernversion, ergeben dieselben Ausgabebytes und denselben SHA-256, in jedem Browser, auf Node, Deno, Bun und Lambda. Wenn ein Handy einen verkleinerten Proxy bearbeitet und der Server das Original rendert, ist die Komposition identisch (gleiche normalisierte Geometrie), die Bytes unterscheiden sich aber, weil die Eingaben andere sind. Die Doku erklärt das im Detail.
Wie groß ist der Download?
Der WebAssembly-Kern hat etwa 1,3 MB unkomprimiert und 390 KB mit Brotli und wird erst geladen, wenn der Editor erscheint. Lit-UI und Render-Worker kommen mit wenigen Dutzend Kilobyte dazu. In der CI gibt es einen Budget-Check.
Welche Browser werden unterstützt?
Aktuelle Versionen von Chrome, Edge, Safari und Firefox auf Desktop und Mobilgeräten. Jeder Commit lässt die Paritäts-Suite in Chromium, WebKit und Firefox laufen, die UI-Suite in Chromium und WebKit. Auf iOS Safari fällt der Download auf das Teilen-Menü zurück.
Kann ich ein eigenes Werkzeug schreiben?
Ja. npm create sealpixel-plugin legt ein Paket mit Operationen, Reducer, JavaScript- oder Rust-Kernel und Werkzeug-Panel an. Das Test-Kit rendert dein Plugin in Node und drei Browsern und prüft gleiche Hashes. Zwei Beispiel-Plugins liegen im Repository.