Handbuch · Version 2.7

Dither Studio

Browser-basiertes Dithering-Tool für E-Ink-Displays. Verwandelt beliebige Bilder in scharfe, palettentreue Ausgaben für Preisschilder, Etiketten, E-Reader und andere Geräte mit limitierten Farbpaletten.

01 Einleitung

Dithering ist die Kunst, Bilder mit vielen Farben so darzustellen, dass sie auf einem Display mit nur wenigen verfügbaren Farben (z. B. einem 6-Farben-E-Ink-Schild) dennoch ähnlich aussehen. Statt eine Mischfarbe wie Mintgrün exakt zu reproduzieren, verteilt der Algorithmus reine Grüne und weiße Pixel so geschickt, dass das Auge aus Distanz wieder einen Mintton wahrnimmt.

Dither Studio bietet:

  • 🎨
    7 Dither-Algorithmen
    Floyd-Steinberg, Atkinson, Stucki, Burkes, Sierra, Bayer 4×4 / 8×8 — direkt vergleichbar in Tabs
  • 🪄
    Auto-Analyse
    Erkennt Bildtyp (Foto / Grafik / Text / Label), wählt Algorithmus und Settings automatisch
  • 📚
    Bild-Bibliothek
    Mehrere Bilder gleichzeitig, jedes mit eigenen Settings; Batch-Processing für ganze Serien
  • Experten-Modus
    Hintergrund-Ersetzer mit Pipette für Markenfarben, die keine direkte Palettenentsprechung haben
  • Web Worker
    Schwere Berechnung läuft im Hintergrund — UI bleibt jederzeit responsiv
  • 🔒
    100 % lokal
    Bilder werden niemals hochgeladen. Alles passiert im Browser. Settings via localStorage gespeichert.
Das Tool ist eine einzelne HTML-Datei (~6000 Zeilen, ~600 KB) ohne externe Abhängigkeiten außer Google Fonts. Du kannst sie offline öffnen, auf einen Webserver legen oder in eine Wrapper-Seite einbetten.

02 Schnellstart in 3 Schritten

Wenn du das Tool zum ersten Mal öffnest, erscheint automatisch eine geführte Tour mit 7 Schritten. Falls du sie übersprungen hast oder sie erneut sehen möchtest, klicke jederzeit auf das ?-Symbol oben rechts.

Schritt 1

Bild laden

Ziehe ein Bild ins Tool, klicke auf den Drop-Bereich oder drücke Strg+V, um aus der Zwischenablage einzufügen. Mehrere Bilder gleichzeitig sind erlaubt.

Schritt 2

Auto-Analyse

Klicke auf 🪄 Auto-Analyse & Dithern. Das Tool erkennt den Bildtyp und wählt automatisch passende Einstellungen + drei Algorithmen zum Vergleich.

Schritt 3

Vergleichen & speichern

Klicke zwischen den Result-Tabs durch oder nutze die ▦ Grid-Ansicht. Wenn dir eins gefällt, klicke ↓ PNG speichern.

Noch schneller: Statt Auto-Analyse kannst du auch einen der drei Quick-Presets oben in der Sidebar antippen — 📷 Foto, 🎨 Grafik oder 📝 Text/Logo. Das setzt mit einem Klick die passenden Settings ohne Bild-Analyse.

03 Oberflächen-Übersicht

Das Tool ist in fünf Bereiche gegliedert:

  • Header (oben) — Logo, aktuelles Bild (Breadcrumb), Sprachwahl, Hilfe-Button
  • Sidebar (links) — Einstellungen in Panels, am unteren Ende fixiert die Action-Buttons
  • Bildtab-Leiste (oberhalb des Canvas) — Vorschau-Tabs für jedes geladene Bild + Aktion-Buttons
  • Toolbar (über dem Canvas) — Werkzeuge in Gruppen: Datei, Maske, Historie, Zoom, Ansicht
  • Canvas (Mitte) — Bildvorschau mit Mini-Map (bei Zoom)
  • Result-Bar (unter dem Canvas) — Tabs für jedes Dither-Ergebnis mit Mini-Vorschau
  • Status-Bar (ganz unten) — Fortschritt, Bildmaße, Hinweise

Tooltips & Info-Popover

Seit v2.7 gibt es zwei Ebenen von Hilfe direkt in der UI:

  • Tooltips — Fahre über ein Steuerelement; nach ~350 ms erscheint eine Bubble mit mehrzeiliger Erklärung. Funktioniert auch mit Tastatur-Fokus.
  • Info-Popover (kleines -Icon neben Labels) — Klick öffnet eine längere Erklärung inkl. Beispiel. Für komplexe Konzepte wie Gamma-Korrektur, ΔE, K-Means, Speckle-Filter und Halftone-Mix. Esc oder Klick außerhalb schließt sie.

Sidebar-Panels

Sechs Panels mit Settings, gegliedert von häufig nach selten genutzt. Jedes Panel hat eine kurze Intro-Zeile unter dem Titel. Die unteren drei sind einklappbar per Klick auf den Titel — Anzahl der vom Standard abweichenden Werte wird als Badge angezeigt:

  1. Zielgröße — Skalierung (optional, default aus → Original-Maße bleiben)
  2. Algorithmus — Dropdown der 7 Algorithmen + „Alle vergleichen"
  3. Farbpalette — E-Ink-Paletten + Custom + K-Means-Generator
  4. Optionen — Auto-Textschutz, Sharpen, Boost, Gamma, Live-Vorschau, etc.
  5. Farbkorrektur — Helligkeit, R/G/B-Verstärkung, Neutral-Schutz
  6. Experten-Modus — Hintergrund-Ersetzer mit Pipette, Farb-Mix

04 Quick-Presets

Drei Schnellzugriffs-Knöpfe ganz oben in der Sidebar setzen mit einem Klick eine sinnvolle Kombination aus Algorithmus, Schärfung, Sättigungs-Boost, Gamma und Speckle-Filter — ohne Bild-Analyse, also blind.

PresetAlgorithmusWann nutzen?
📷 FotoFloyd-Steinberg + Gamma + Boost + Speckle 1Fotografische Bilder mit weichen Verläufen, Himmel, Hauttönen
🎨 GrafikAtkinson + Sharpen, ohne BoostIllustrationen, Vektorgrafiken, Diagramme mit klaren Flächen
📝 Text/LogoAtkinson + Auto-Textschutz, ohne Sharpen/BoostLogos, Schrift, Strichgrafiken — alles wo Schärfe wichtiger ist als Farbe

Der angeklickte Preset wird kurz mint-grün hervorgehoben als Bestätigung. Wenn Live-Vorschau aktiv ist, wird sofort neu gerendert.

Presets sind ein guter Startpunkt — du kannst danach immer noch einzelne Settings anpassen. Für tatsächlich an dein Bild angepasste Einstellungen ist Auto-Analyse meistens besser, weil sie den tatsächlichen Bildinhalt auswertet.

05 Auto-Analyse

Der 🪄 Auto-Analyse & Dithern-Button im Sidebar-Footer ist die mächtigste Funktion. Er macht zwei Dinge:

  1. Bild-Analyse: ~50.000 Sample-Pixel werden untersucht (Helligkeit, Kontrast, Sättigung, Kanten-Dichte, Farbreichtum, Weißanteil, Farbstich)
  2. Empfehlung & Ausführung: Bildtyp wird klassifiziert, Settings werden gesetzt, drei passende Algorithmen werden parallel gerendert

Klassifikation

Das Tool kennt fünf Bildtypen und wählt entsprechend andere Standardwerte:

TypErkannt durchStandard-Algorithmus
📷 FotoViele unterschiedliche Farben, wenig KantenFloyd-Steinberg (oder Atkinson bei sehr flachen Bildern)
🎨 GrafikWenige Farben, mittlere KantendichteAtkinson
📝 TextSehr hohe Kantendichte, wenige FarbenAtkinson + Auto-Textschutz
🏷️ LabelHoher Weißanteil + mittlere Kantendichte (z. B. Preisschild)Floyd-Steinberg + Gamma
🧩 MischtypKein eindeutiger Typ erkennbarFloyd-Steinberg

Auto-Report

Nach der Analyse erscheint im Sidebar-Footer eine kompakte Card mit:

  • Erkannter Bildtyp (z. B. „Foto") als Pille
  • Gewählter Algorithmus + Palette
  • Statistik-Zeile (L̄, σL, S̄, Kanten-%, Farben, Weiß-%)
  • Bullet-Liste der getroffenen Anpassungen mit Begründung

Empfohlener Algorithmus

Von den drei kuratierten Algorithmen bekommt einer einen ★ Empf.-Badge im Tab — das ist die beste Wahl laut Bild-Analyse. Daneben gibt es einen Best-Badge basierend auf dem niedrigsten ΔE2000-Wert (perzeptueller Abstand zum Original). Beide sind oft, aber nicht immer identisch.

Auto-Analyse setzt Settings nur konservativ. Sie ändert niemals automatisch die Distanzmethode oder Auto-Textschutz für Labels — diese können Produktbilder zerstören wenn falsch eingesetzt. Hinweise dazu findest du im Auto-Report.

06 Dither-Algorithmen

Sieben Algorithmen mit unterschiedlichem Charakter. Wenn du im Algorithmus-Dropdown „Alle vergleichen" wählst, werden alle 7 gerendert und als Tabs vergleichbar.

Error-Diffusion-Algorithmen

Verteilen den Quantisierungs-Fehler eines Pixels auf benachbarte Pixel. Erzeugen organisches, strukturloses Rauschen.

AlgorithmusFehler-VerteilungCharakter
Floyd-Steinberg4 Nachbarn, 7/16+3/16+5/16+1/16Klassisch, gute Balance, Standard für Fotos
Atkinson6 Nachbarn, je 1/8 (insgesamt nur 6/8 — 2/8 Fehler werden „verschluckt")Sauberere, weniger körnige Flächen — beste Wahl für E-Ink-Labels und Text
Stucki12 Nachbarn, breitere VerteilungWeicher als FS, gut für sanfte Verläufe
Burkes7 Nachbarn (FS-ähnlich, aber 2 Reihen)Etwas weicher als FS, ähnlich Stucki
Sierra10 Nachbarn (3 Reihen)Sehr weich, gut für große Verläufe

Ordered-Dithering (Bayer-Matrix)

Verwendet eine feste Pixel-Maske (Bayer-Matrix) statt Fehler-Verteilung. Erzeugt regelmäßiges, fast retro-artiges Muster.

AlgorithmusMatrix-GrößeCharakter
Ordered (Bayer 4×4)4×4 = 16 StufenFeines Muster, gut für Logos auf einfarbigem Hintergrund
Ordered (Bayer 8×8)8×8 = 64 StufenWeicheres Muster, mehr Tonwerte, retro-Look
Für E-Ink-Labels mit limitierter 6/7-Farben-Palette ist Atkinson oft die beste Wahl, weil er saubere Flächen erzeugt statt das körnige „TV-Rauschen" das Floyd-Steinberg in dunklen Himmelsbereichen produziert.

07 Farbpaletten

Die Palette bestimmt, welche Farben überhaupt im Endergebnis vorkommen dürfen. Jede Palettenfarbe muss exakt vom Zielgerät anzeigbar sein.

Vorgefertigte Paletten

PaletteFarbenTypische Geräte
6C E-Ink
Spectra E-Ink-Schilder (6 Farben)
7C E-Ink
Spectra E-Ink-Schilder (6C + Orange)
4C E-Ink
Schwarz/Weiß/Rot/Gelb-Schilder
3C E-Ink
Klassische 3-Farben-Schilder
Schwarzweiß
1-Bit-Geräte, klassische E-Reader
Graustufen 4 / 84 oder 8 Grautöne4-Bit-E-Reader, Kindle, ähnliche Geräte
Eigene PaletteFrei wählbar (2–unbegrenzt)Spezielle Geräte / kreative Workflows

Custom-Palette

Wenn du „Eigene Palette" wählst, erscheint ein Plus-Button. Klicke ihn, um Farben hinzuzufügen (Browser-Color-Picker). Bestehende Farben kannst du per Hover über das X entfernen. Mindestens zwei Farben sind erforderlich — sonst kann das Dithering nicht starten.

K-Means: Palette aus Bild generieren

Klick auf 🎨 Aus Bild generieren im Palette-Panel. Das Tool extrahiert die n dominantesten Farben aus deinem aktuellen Bild via K-Means-Clustering und ersetzt damit die Custom-Palette.

Vorsicht bei K-Means: die generierten Farben sind die im Bild vorkommenden, nicht zwingend die vom Zielgerät anzeigbaren. Wenn dein Display nur Schwarz/Weiß/Rot kann und K-Means dir Mintgrün und Lila ausspuckt, hilft dir das nicht weiter. Setze K-Means für Custom-Workflows ein, nicht für Standard-E-Ink-Geräte.

Farbabstand-Methode

Im Optionen-Panel kannst du wählen, wie das Tool die „nächste Palettenfarbe" für jedes Pixel bestimmt:

  • RGB euklidisch (schnell) — Standard. Berechnet Abstand direkt im RGB-Raum. Schnell, aber wahrnehmungs-ungenau (Grün und Blau erscheinen z. B. „weiter" als sie für das Auge sind).
  • CIE76 (wahrnehmungsgenauer) — Berechnet im Lab-Farbraum. Besser für dunkle/gedeckte Farben (z. B. dunkler Wein-Rot wird korrekt zu Schwarz, nicht zu reinem Rot).
  • CIEDE2000 (beste Genauigkeit) — Industriestandard. Berücksichtigt zusätzlich Hue-Rotation und Chroma-Sättigung. Etwas langsamer.
Bei dunklen Markenfarben (z. B. Lancôme-Wein-Rot, dunkles Burgunder) probier CIE76 — RGB-euklidisch mappt sie oft fälschlich auf knalliges Rot statt auf Schwarz.

08 Bild-Bibliothek

Du kannst beliebig viele Bilder gleichzeitig laden. Jedes wird als Tab oberhalb des Canvas angezeigt mit:

  • Mini-Thumbnail (88×88 px, aspect-ratio-erhaltend)
  • Dateiname
  • X zum Entfernen
  • Result-Count-Badge wenn das Bild bereits gedithered wurde

Bilder hinzufügen

Vier Wege:

  1. Drag & Drop in das Tool (Canvas-Bereich oder Tab-Strip)
  2. Klick auf den Drop-Bereich → Datei-Dialog (Mehrfachauswahl möglich)
  3. Strg+V aus Zwischenablage
  4. Klick auf + Bild-Button im Tab-Strip

Per-Image-Settings-Memory

Jedes Bild merkt sich seine eigenen Settings. Wenn du auf Bild A „Sättigung +50%" einstellst und auf Bild B „Sättigung 0%", werden bei Tab-Wechsel die jeweiligen Settings automatisch wiederhergestellt. Seit v2.7 gilt das auch für die Einstellungen des Experten-Modus (Hintergrund-Ersetzer, Mix, Toleranz).

Auch die Maske (manuelle Schutzbereiche) und die Dither-Ergebnisse werden pro Bild gespeichert. Du kannst zwischen Bildern hin und her wechseln, ohne Arbeit zu verlieren — selbst während ein Worker im Hintergrund rechnet.

Batch-Auto-Design

Im Tab-Strip oben rechts: 🪄 Alle auto. Geht durch jedes Bild der Reihe nach, führt Auto-Analyse + Dithern aus. Status-Bar zeigt Fortschritt „2/5: photo.jpg…". Sehr praktisch um eine ganze Serie auf einen Schlag zu bearbeiten.

Bibliothek leeren

Leeren-Button im Tab-Strip mit Sicherheitsabfrage. Achtung: alle Settings, Masken und Ergebnisse aller Bilder gehen verloren (außer denen die in localStorage als globale Defaults gespeichert sind).

09 Optionen-Panel

Hauptsächlich Pre- und Post-Processing-Schalter. Default eingeklappt, wenn du mehrere Werte vom Standard ändest erscheint ein Counter-Badge.

Auto-Textschutz

Erkennt Text und harte Kanten per Sobel-Filter und schließt sie vom Dithering aus. Geschützte Pixel werden direkt auf die nächste Palettenfarbe gemappt — kein Dither-Rauschen, dafür scharfe Schrift.

Auto-Schwelle (Sobel) 20–200, default 80 — Empfindlichkeit:

  • Niedrig (← mehr Schutz): viele Bereiche werden geschützt, auch weiche Übergänge
  • Hoch (weniger →): nur sehr scharfe Kanten, wie tatsächlicher Text
Auto-Textschutz kann Produktkonturen (z. B. Flaschen, Logos) fälschlich als „Text" erkennen und dadurch destruktiv wirken. Bei Markenlabels mit Produktbild lieber aus lassen oder Schwelle hochstellen.

Schutzbereich-Modus

Wie geschützte Pixel ausgegeben werden:

  • Originalfarben: Pixel bleiben unverändert (eventuell außerhalb der Palette → wird auf Display nicht korrekt angezeigt)
  • Nächste Palettenfarbe: gemappt aber ohne Dithering

Nachschärfen

3×3 Unsharp-Mask nach dem Dithering. Macht Kanten knackiger, kann aber Dither-Rauschen leicht verstärken.

Sättigung verstärken

Boost im HSL-Raum vor dem Dithering. Zieht blasse Farben näher an die Palette. Für Fotos meist gut, kann bei verrauschten Himmel-Bildern Streupixel produzieren (deshalb wird Neutralfarben-Schutz angewendet).

Gamma-korrekt (linear)

Fehlerdiffusion läuft im linearen Lichtraum statt im sRGB-Raum. Perzeptuell korrekter, besonders Mitteltöne werden besser. Klicke auf das -Icon neben dem Toggle, um die Hintergründe im Detail zu sehen. Für Fotos empfohlen, kann bei Text und Grafik leicht weicher wirken.

Live-Vorschau

Re-dithert automatisch ~250 ms nach jeder Änderung. Bei „Alle vergleichen" deaktiviert (zu teuer). Sehr praktisch beim Drehen an Reglern.

Pixel-Rauschen filtern (Speckle-Filter)

Post-Process-Filter gegen Streufarben-Pixel im Dither-Output. Drei Stufen:

  • 1 — 3×3-Filter, ersetzt Pixel mit ≤1 gleichem Nachbarn (sanft)
  • 2 — 3×3-Filter, ≤2 gleiche, 2 Durchgänge (mittel) — guter Default für Fotos
  • 3 — 5×5-Filter, sehr aggressiv (kann feine Details weichzeichnen)

Vorab-Weichzeichnen (Pre-Blur)

Box-Blur 0–6 vor dem Dithering. Entfernt JPEG-Mikrorauschen und feine Details, die die kleine Palette ohnehin nicht abbilden kann. Großer Hebel gegen Himmel/Wolken-Pixelrauschen, opfert aber Detail-Schärfe.

10 Farbkorrektur-Panel

Manueller Eingriff in die Pixel-Werte vor dem Dithering. Eingeklappt by default.

S/W schützen + Schutz-Schwelle

Schwarz-, Weiß- und Grau-Pixel werden von der Farbkorrektur ausgenommen. Verhindert ungewollten Farbstich auf neutralen Tönen.

  • Schwelle 5–80, default 30
  • Niedrig (streng): nur fast reines SW/Grau geschützt
  • Hoch (tolerant): auch leicht farbige Pixel zählen als neutral

Helligkeit-Bias

Verschiebt die gesamte Helligkeit um −60 bis +60. Gut zum Retten unterbelichteter Fotos.

Rot/Grün/Blau-Verstärkung

Multiplikator je Kanal von 0.5× bis 2.0×. Gut für gezielte Markenfarben-Akzente (z. B. Rot pushen wenn du das auf einem rotfähigen E-Ink anzeigen willst). Bei Auto-Analyse mit erkanntem Farbstich werden diese automatisch leicht angepasst.

Zurücksetzen

Setzt alle Werte des Farbkorrektur-Panels auf die Defaults zurück.

11 Experten-Modus

Power-User-Features mit Mint-Akzent gekennzeichnet. Default eingeklappt damit sie die Standard-UI nicht überschwemmen.

Hintergrund ersetzen

Ersetzt alle Pixel ähnlich einer Quellfarbe (per Pipette aus dem Bild gepickt) durch eine oder zwei Zielfarben — bevor das Bild gedithert wird.

Anwendungsfall: Markenfarbe-Hintergründe wie das mintgrüne Douglas-Logo. Mintgrün gibt es in der 6/7-Farben-Palette nicht. Statt es chaotisch zu dithern, kannst du es vorher gezielt auf eine repräsentierbare Farbe oder eine Bayer-Mischung aus zwei Palettenfarben umsetzen.

Modus „Eine Farbe"

Stumpfer Ersatz: alle ähnlichen Pixel werden zur gleichen Zielfarbe.

  1. Bild laden, Experten-Modus aufklappen, „Aktivieren"
  2. Klick auf 🔍 Pipette → Cursor wird Fadenkreuz
  3. Klick auf zu ersetzenden Bereich → Quellfarbe aufgenommen
  4. Aus den Ziel-Swatches eine Palettenfarbe wählen (z. B. Weiß)
  5. Toleranz justieren

Modus „Zwei Farben mischen" (Bayer-Halftone)

Statt eine Farbe stumpf zu ersetzen, wird ein regelmäßiges Pixel-Muster aus zwei Palettenfarben erzeugt, das aus Distanz wie der Originalton wirkt. Beispiel: Mintgrün ≈ 60 % Grün + 40 % Weiß als Bayer-Schachbrettmuster — ergibt einen ruhigen, palettentreuen mintigen Effekt.

  1. Quellfarbe per Pipette aufnehmen (wie oben)
  2. Modus auf „Zwei Farben" umschalten
  3. 🪄 Auto-Mix klicken — Tool berechnet automatisch die zwei besten Palettenfarben und das optimale Mischverhältnis (per Lab-Space-Projektion auf alle möglichen Farbpaare)
  4. Optional: Mischverhältnis-Slider manuell justieren oder andere Palettenfarben für Farbe 1 / Farbe 2 wählen
  5. Muster wählen aus vier Optionen:
    • Bayer 4×4 — feines regelmäßiges Dithermuster
    • Bayer 8×8 — sanfter, mehr Tonwertabstufungen
    • Halftone — klassische „Zeitungs"-Punkte (clustered dots)
    • Zufall — stochastisches Rauschen ohne sichtbare Geometrie

Modus „Drei Farben"

Für Töne, die nicht zwischen zwei Palettenfarben „interpolierbar" sind, sondern in einem Dreieck dreier Farben liegen — z. B. Lavendel (Rot + Blau + Weiß), Olivgrün (Gelb + Grün + Schwarz), Beige (Gelb + Weiß + leicht Rot).

  1. Quellfarbe per Pipette aufnehmen
  2. Modus auf „Drei Farben" umschalten
  3. 🪄 Auto-Mix klicken — Tool berechnet die drei besten Palettenfarben + die optimalen Anteile per barycentric Lab-Projection über alle möglichen Farb-Tripel
  4. Drei Anteils-Slider lassen sich manuell justieren (werden intern auf Summe 100 % normalisiert; Labels zeigen die effektiven Anteile)

Quick-Vergleich Single ↔ Mix

Im Mix-Modus gibt es einen -Button neben Auto-Mix oder die Tastatur-Taste M. Schaltet temporär zwischen aktuellem Mix-Modus und Single-Modus um, sodass du direkt sehen kannst, ob der Mix wirklich besser aussieht oder ob ein einfaches Replace genügt.

Toleranz visuell sehen

Sobald der Hintergrund-Ersetzer aktiv ist und eine Quellfarbe gepickt wurde, erscheint auf dem Original-View ein Mint-Glow-Overlay, das dir zeigt welche Pixel als „passend" gelten. Während du den Toleranz-Slider bewegst, aktualisiert sich der Overlay live — du siehst sofort wo gerade zu wenig oder zu viel gemappt wird.

Bei aktivierter Live-Vorschau siehst du das Dither-Ergebnis sofort. Wenn du im Mix-Modus die Pipette nutzt, läuft Auto-Mix automatisch nach der Farbaufnahme — sofortiger Vorschlag.

Esc bricht den Pipette-Modus ab. M schaltet zwischen Single und Mix um.

Faustregel für die Wahl:
  • Eine Farbe → wenn du den Hintergrund einfach „wegblenden" willst (z. B. Mint → Weiß für sauberen Look)
  • Zwei Farben → wenn die Quellfarbe zwischen zwei Palettenfarben liegt (Mint zwischen Grün+Weiß, Lila zwischen Rot+Blau)
  • Drei Farben → für komplexe Töne (Lavendel, Olive, gedecktes Beige) — funktioniert nur wenn die Palette mindestens 3 Farben hat

12 Werkzeuge & Maskierung

In der Toolbar findest du Werkzeuge, um manuelle Schutzbereiche zu definieren. Geschützte Pixel werden nicht vom Dither-Algorithmus verarbeitet. Seit v2.7 funktionieren alle Mal-/Drag-Interaktionen auch mit Touch-Eingabe (Finger, Stylus).

Maske-Werkzeuge

  • 🖌️ Pinsel (Tastatur B) — Frei zeichnen, kontinuierlicher Stroke
  • ▭ Rechteck (R) — Rechteckige Auswahl
  • 🧹 Radierer (E) — Maske entfernen
  • Maske löschen (C) — Komplette Maske leeren

Pinselgröße

Slider 2–60 px, in der Toolbar verfügbar.

Undo / Redo

Strg+Z / Strg+Y oder die ↶/↷-Buttons. Pro Bild eigene History (max 30 Schritte).

Zoom + Pan

  • + / −-Buttons oder + / -Tasten
  • ⤢ Einpassen (F) — Zoom auf Bildschirmgröße
  • Strg+Mausrad — Zoom an Cursor-Position
  • 0 — Zoom auf 100 %
  • Leertaste + Drag — Pan (oder mittlere Maustaste)

Mini-Map

Erscheint automatisch unten rechts wenn du eingezoomt bist. Mint-Rahmen markiert den sichtbaren Bereich. Klick oder Drag pannt direkt zur entsprechenden Stelle. Verschwindet automatisch wenn du wieder rauszoomst.

13 Ergebnisse vergleichen

Drei Wege, mehrere Algorithmus-Ergebnisse zu vergleichen:

Result-Tabs (default)

Unter dem Canvas erscheint für jedes Algo-Ergebnis ein Tab mit Mini-Vorschau (36×26 px), Algo-Name und ΔE-Score (perzeptueller Abstand zum Original, niedriger = besser). Klick wechselt die Hauptansicht.

◐ Split-View

Toolbar-Button ◐ oder S. Zeigt das aktuelle Result und das Original mit einer draggbaren vertikalen Trennlinie übereinander. Perfekt für direkten Vergleich „was hat das Dithering verändert".

▦ Grid-View

Toolbar-Button ▦ oder G. Zeigt alle Algorithmus-Ergebnisse als Karten-Grid mit größerer Vorschau. Klick auf eine Karte → Einzelansicht.

14 Tastatur-Shortcuts

Werkzeuge

PinselB
RechteckR
RadiererE
Maske löschenC
Werkzeug ausEsc

Historie

RückgängigStrg+Z
WiederherstellenStrg+Y

Ansicht

Zoom in+
Zoom out
Zoom 100 %0
EinpassenF
Split-ViewS
Grid-ViewG
Pan (Drag)Leertaste

Aktionen

Dithern startenEnter
PNG speichernStrg+S
Bild einfügenStrg+V
Mix ↔ SingleM

15 Typische Workflows

📷 Foto auf E-Ink-Display (z. B. Wallpaper für E-Reader)

  1. Bild laden, ggf. auf Display-Maße skalieren (Zielgröße aktivieren)
  2. 🪄 Auto-Analyse drücken
  3. Drei Algorithmen erscheinen: Floyd-Steinberg, Stucki, Atkinson
  4. Wenn der Himmel Rauschen zeigt: Speckle-Filter auf 2 stellen, eventuell Pre-Blur 1
  5. ↓ PNG speichern

🏷️ E-Ink-Preisschild mit Logo + Text

  1. Bild laden (typisch 480×800 px)
  2. 🪄 Auto-Analyse → erkennt „Produkt-Label"
  3. Falls Markenfarbe-Schrift falsch gemappt wird (z. B. dunkler Wein-Rot wird zu reinem Rot): Distanzmethode auf CIE76 umstellen
  4. Falls die Schrift unsauber wird: Auto-Textschutz manuell aktivieren — aber Vorsicht, kann Produktkonturen mit-protecten

🎨 Logo / Grafik mit ungewöhnlicher Hintergrundfarbe

Beispiel: Schwarzes Logo auf mintgrünem Hintergrund (Mintgrün ist nicht in 6/7C-Palette).

  1. Bild laden
  2. Experten-Modus aufklappen → „Hintergrund ersetzen" aktivieren
  3. 🔍 Pipette → auf den mintgrünen Hintergrund klicken
  4. Zielfarbe wählen: Weiß für sauberen Look, oder reines Grün für kräftige Markenwirkung
  5. Toleranz justieren bis nur der Hintergrund ersetzt wird
  6. 🪄 Auto-Analyse oder direkt Dithern starten

📦 Batch-Processing einer ganzen Serie

  1. Mehrere Bilder per Drag & Drop in das Tool ziehen (oder Mehrfachauswahl im Datei-Dialog)
  2. Im Tab-Strip oben rechts: 🪄 Alle auto klicken
  3. Tool geht jedes Bild durch, führt Auto-Analyse + Dithern aus
  4. Status-Bar zeigt Fortschritt
  5. Nach Abschluss: zwischen Tabs durchklicken, jeweils ↓ PNG speichern

16 Probleme & Lösungen

Der Himmel hat scheußliche bunte Pünktchen

Das ist klassisches Floyd-Steinberg-Verhalten bei limitierten Paletten — die Algorithmen verteilen Fehler und produzieren in dunklen Bereichen Streufarben.

Lösungen:

  • Algorithmus auf Atkinson umstellen (sauberere Flächen)
  • Pre-Blur auf 1 oder 2
  • Speckle-Filter auf 2
  • Sättigungs-Boost aus, falls verrauschtes Foto

Schrift wird in falscher Farbe dargestellt

Z. B. dunkles Burgunder wird zu knalligem Rot.

Lösungen:

  • Distanzmethode auf CIE76 oder CIEDE2000 umstellen
  • Vorsichtig manuell Auto-Textschutz aktivieren (kann Produktkonturen mit-protecten!)

Produktbild wird flächig / blockartig

Wahrscheinlich ist Auto-Textschutz aktiv und der Sobel-Filter erkennt die Produktkontur als „Text".

Lösung: Auto-Textschutz ausschalten oder Sobel-Schwelle deutlich erhöhen (auf 150+).

Markenfarbe-Hintergrund wird gar nicht oder schlecht reproduziert

Die Palette enthält die Farbe nicht. Drei Optionen:

  1. Akzeptieren dass die Farbe gedithert wird (mit Pre-Blur + Speckle gemildert)
  2. Helligkeits-Bias hochziehen → Hintergrund wird zu Weiß
  3. Experten-Modus → Hintergrund ersetzen mit Pipette und gezielter Palettenfarbe

Tool wirkt langsam bei großen Bildern

Live-Vorschau ausschalten und nur manuell mit „Dithern starten" rechnen. „Alle vergleichen" rendert 7 Algorithmen — bei einem 4K-Bild kann das Sekunden dauern.

Settings gehen verloren beim Bildwechsel

Sollte mit v2.7 nicht mehr passieren — sämtliche Bildkontexte inkl. Experten-Modus-Einstellungen werden beim Tab-Wechsel wiederhergestellt. Falls doch: Browser-Cache leeren und Seite neu laden, dann localStorage ist sauber.

Sprache wechselt nicht alles

Bereits gedithered Result-Tabs zeigen den Algo-Namen in der zur Render-Zeit aktiven Sprache. Neu-Dithern aktualisiert die Namen. Palette-Farbnamen, Auto-Report und Onboarding-Tour werden seit v2.7 beim Sprachwechsel sofort neu gerendert.

17 Grenzen des Tools

Ehrliche Einordnung was das Tool nicht kann:

Farben außerhalb der Palette

Wenn dein Display nur 6 Farben kann (Schwarz, Weiß, Rot, Grün, Blau, Gelb) und dein Bild Türkis enthält, gibt es keine Möglichkeit, Türkis exakt darzustellen. Das Tool kann nur:

  • Türkis als Mix von Grün+Weiß-Pixeln dithern (sieht aus Distanz türkislich aus)
  • Türkis komplett auf eine Palettenfarbe mappen (verliert den Farbton)
  • Türkis durch Pre-Processing ersetzen (Experten-Modus)

Text-Erkennung

Auto-Textschutz nutzt Sobel-Edge-Detection und kann nicht zwischen Text und Produktkontur unterscheiden. Ist eine bewusste Vereinfachung — eine echte OCR-Texterkennung wäre für ein Browser-Tool zu schwergewichtig.

Keine Vector-Inputs

Das Tool verarbeitet nur Pixel-Bilder (PNG, JPG, WebP). SVG-Inputs müsstest du vorher als PNG rastern.

Keine Geräte-spezifischen Profile

Die Paletten sind generisch (reine R/G/B/Y-Werte). Echte E-Ink-Geräte haben oft leichte Verschiebungen (z. B. Spectra-„Rot" ist eher ein gedämpftes Orange-Rot). Wenn dein Output auf dem Gerät anders aussieht als auf dem Bildschirm, liegt das wahrscheinlich am Geräte-Farbprofil.

Performance bei sehr großen Bildern

Floyd-Steinberg ist O(n) aber mit konstantem Overhead. Bei 8K-Bildern kann ein Algorithmus 5–10 Sekunden brauchen, bei „Alle vergleichen" entsprechend × 7.

18 Finanzierung & Wasserzeichen

Dither Studio ist kostenlos und läuft komplett in deinem Browser — keine Bilder werden hochgeladen, kein Tracking, keine Registrierung. Damit wir den Server am Laufen halten können, finanziert sich das Tool über ein einfaches, transparentes Modell:

Pro Download eine freie Wahl

Wenn du auf ↓ PNG speichern klickst, erscheint ein kleiner Dialog mit zwei Optionen:

  • 📺 Video ansehen · Saubere PNG — Ein kurzes Werbevideo (wenige Sekunden). Danach wird die PNG ohne Wasserzeichen heruntergeladen. Ein Video pro Download.
  • ↓ Mit Wasserzeichen speichern — Sofortiger Download, mit einem dezenten „einktool.com"-Label unten rechts im Bild.

Beide Optionen sind für dich kostenlos. Das Wasserzeichen ist klein, dezent und stört die meisten Anwendungsfälle nicht. Wenn du viele Dateien produzierst (z. B. für Druckware oder kommerzielle Nutzung), ist das kurze Ad pro Datei der faire Tausch.

Bilder werden auch im Ad-Fall niemals hochgeladen. Das Ad läuft parallel im Browser; das Dithering findet weiterhin rein lokal statt.

Wie das Wasserzeichen funktioniert

Technisch: Jedes berechnete Dither-Ergebnis hält zwei Bild-Versionen bereit — eine saubere Pixel-Buffer-Kopie im Arbeitsspeicher, und den im Canvas angezeigten Frame mit Wasserzeichen. Der Download-Button entscheidet je nach Ad-Ergebnis, welcher in die PNG exportiert wird.

Das bedeutet auch: wenn du einen Canvas-Screenshot per Rechtsklick → „Bild speichern" machst, kommt die Wasserzeichen-Version. Nur der reguläre Download-Button öffnet den Ad-Dialog.

Für Wrapper- und Embed-Entwickler

Wenn du das Tool in eine eigene Seite einbettest, kannst du den Ad-Anbieter austauschen oder den Gate komplett umgehen:

  • window.DitherStudio.adProvider = (onDone) => { …play rewarded ad… onDone(); } — Plug deinen eigenen Rewarded-Video-SDK ein. Rufe onDone() sobald die Belohnung verdient ist.
  • window.DitherStudio.downloadGate = (action, meta) => action() — Legacy-Hook, der den gesamten Flow übernimmt (kein UI-Modal des Tools).
  • Ohne beide Hooks zeigt das Tool ein 3-Sekunden-Countdown-Placeholder, damit du lokal testen kannst.

Events: das Tool feuert dither:download mit detail.clean (true/false) nach jedem Download — praktisch für Analytics.

Wenn du gewerblich Bilder damit produzierst und die Ads-Hürde nicht willst, sprich uns gerne an — für Bulk- oder Enterprise-Nutzung lassen sich Watermark-freie Lizenzen einrichten.

19 Glossar

Dithering

Technik, kontinuierliche Farben durch ein Muster diskreter Farben anzunähern. Statt eine Mischfarbe exakt zu reproduzieren, werden zwei oder mehr verfügbare Farben so verteilt, dass das Auge die Mischfarbe wahrnimmt.

Error-Diffusion

Klasse von Dither-Algorithmen, die den Quantisierungsfehler eines Pixels auf benachbarte Pixel verteilen. Floyd-Steinberg, Atkinson, Stucki etc.

Ordered Dithering / Bayer

Klasse von Dither-Algorithmen, die eine feste Pixel-Maske (Bayer-Matrix) als Schwellwert verwenden. Erzeugt regelmäßiges, oft sichtbares Muster.

Quantisierung

Reduktion einer kontinuierlichen Farbe auf die nächstliegende verfügbare Palettenfarbe. Ohne Dithering ergibt das harte Stufen / Posterisierung.

Quantisierungsfehler

Die Differenz zwischen dem tatsächlichen Pixel-Wert und dem nach Quantisierung gewählten Palettenwert. Error-Diffusion verteilt diesen Fehler auf Nachbar-Pixel.

Sobel-Filter

Bildverarbeitungs-Operator zur Kantenerkennung. Berechnet den Helligkeits-Gradienten an jeder Position. Genutzt in Auto-Textschutz und in der Auto-Analyse zur Bildtyp-Klassifikation.

Lab-Farbraum (CIELAB)

Wahrnehmungs-uniformer Farbraum (im Gegensatz zu RGB). Farbabstände in Lab entsprechen besser dem, was das menschliche Auge als „ähnlich" empfindet.

ΔE (Delta E)

Maß für den wahrnehmbaren Farbabstand zwischen zwei Farben in Lab. ΔE76 = einfache euklidische Distanz, CIEDE2000 = verfeinert mit Hue/Chroma-Korrekturen. ΔE < 1 = vom Auge nicht unterscheidbar, ΔE > 5 = deutlich anders.

Gamma-Korrektur

sRGB-Werte sind nichtlinear codiert (Helligkeits-Wahrnehmung des Auges). Lineares RGB ist physikalisch korrektes Licht. Fehlerdiffusion in linearem Raum vermeidet dass Mitteltöne zu dunkel werden.

Speckle / Streupixel

Vereinzelte „falsche" Pixel im Dither-Output, oft als störend empfunden. Speckle-Filter ist ein Post-Process der diese mit dem Dominantton der Umgebung ersetzt.

Web Worker

Browser-Feature für Hintergrund-Berechnung in einem separaten Thread. Macht das UI responsiv, weil schwere Pixel-Operationen nicht den Main-Thread blockieren.

K-Means-Clustering

Verfahren zur Aufteilung von Datenpunkten in n Cluster. In Dither Studio: extrahiert die n dominantesten Farben aus einem Bild, indem Pixel-Werte als 3D-Punkte (RGB) geclustert werden.

Pointer-Events

Unified Event-Modell im Browser, das Maus, Stylus und Touch gleich behandelt. Dither Studio v2.7 nutzt diese durchgängig, damit auch Tablet- und Smartphone-Nutzung funktioniert.

Manual · Version 2.7

Dither Studio

Browser-based dithering tool for E-Ink displays. Turns any image into a sharp, palette-faithful output for price tags, shelf labels, e-readers and other devices with a limited color palette.

01 Introduction

Dithering is the art of rendering images with many colors so they still look similar on a display with only a handful of available colors (e.g. a 6-color E-Ink tag). Instead of reproducing a blended shade like mint green exactly, the algorithm distributes pure green and white pixels cleverly enough that your eye reconstructs a mint tint at viewing distance.

Dither Studio offers:

  • 🎨
    7 dither algorithms
    Floyd-Steinberg, Atkinson, Stucki, Burkes, Sierra, Bayer 4×4 / 8×8 — side-by-side in tabs
  • 🪄
    Auto-analyze
    Classifies image type (photo / graphic / text / label), picks algorithm and settings automatically
  • 📚
    Image library
    Multiple images at once, each with its own settings; batch-process entire series
  • Expert mode
    Background replacer with eyedropper for brand colors that have no direct palette match
  • Web Worker
    Heavy computation runs in a background thread — the UI stays responsive
  • 🔒
    100 % local
    Images are never uploaded. Everything runs in the browser. Settings persist via localStorage.
The tool is a single HTML file (~6000 lines, ~600 KB) with no external dependencies beyond Google Fonts. You can open it offline, drop it onto any static server, or embed it in a wrapper page.

02 Quickstart in 3 steps

The first time you open the tool, a 7-step guided tour appears automatically. Skipped it or want to see it again? Click the ? icon in the top-right at any time.

Step 1

Load an image

Drop an image into the tool, click the drop zone, or press Ctrl+V to paste from the clipboard. Multiple images at once are supported.

Step 2

Auto-analyze

Click 🪄 Auto-analyze & dither. The tool detects image type and picks matching settings + three algorithms to compare.

Step 3

Compare & save

Click through the result tabs or use the ▦ grid view. When one looks right, click ↓ Save PNG.

Even faster: instead of Auto-analyze, tap one of the three quick-preset chips at the top of the sidebar — 📷 Photo, 🎨 Graphic or 📝 Text/Logo. That applies sensible settings with a single click, no analysis needed.

03 UI overview

The tool is split into five areas:

  • Header (top) — logo, active image (breadcrumb), language switcher, help button
  • Sidebar (left) — settings in collapsible panels, primary actions pinned to the bottom
  • Image tab strip (above the canvas) — preview tabs for every loaded image + action buttons
  • Toolbar (above the canvas) — tools grouped by purpose: file, mask, history, zoom, view
  • Canvas (center) — image preview with mini-map (when zoomed in)
  • Result bar (below the canvas) — tabs for every dither result with mini preview
  • Status bar (bottom) — progress, image dimensions, hints

Tooltips & info popovers

Since v2.7 there are two layers of in-UI help:

  • Tooltips — hover over any control; after ~350 ms a multi-line bubble appears with an explanation. Also triggers on keyboard focus.
  • Info popovers (little icon next to labels) — click to open a longer explanation including an example. Intended for complex concepts: gamma correction, ΔE, K-Means, speckle filter, halftone mix. Esc or outside-click closes them.

Sidebar panels

Six settings panels, ordered from frequent to occasional use. Each has a one-line intro under the title. The bottom three are collapsible — click the title to toggle. The number of non-default values appears as a small badge:

  1. Target size — resize (optional, default off → original dimensions preserved)
  2. Algorithm — dropdown with 7 algorithms + "compare all"
  3. Color palette — E-Ink palettes + custom + K-Means generator
  4. Options — auto text protect, sharpen, boost, gamma, live preview, etc.
  5. Color correction — brightness, R/G/B boost, neutral protection
  6. Expert mode — background replacer with eyedropper, color mix

04 Quick presets

Three quick-action chips at the top of the sidebar apply a sensible combination of algorithm, sharpening, saturation boost, gamma and speckle filter in a single click — no image analysis, so they're blind.

PresetAlgorithmWhen to use
📷 PhotoFloyd-Steinberg + gamma + boost + speckle 1Photographic images with smooth gradients, skies, skin tones
🎨 GraphicAtkinson + sharpen, no boostIllustrations, vector graphics, diagrams with clean areas
📝 Text/LogoAtkinson + auto text protect, no sharpen/boostLogos, text, line art — anywhere sharpness matters more than color

The clicked preset briefly flashes mint-green as a confirmation. If live preview is enabled, re-rendering happens immediately.

Presets are a good starting point — you can still tweak individual settings afterwards. For settings actually tailored to your image, Auto-analyze is usually better because it reads the actual image content.

05 Auto-analyze

The 🪄 Auto-analyze & dither button in the sidebar footer is the most powerful function. It does two things:

  1. Image analysis: ~50,000 sample pixels are inspected (brightness, contrast, saturation, edge density, color richness, white share, color cast)
  2. Recommendation & execution: image type is classified, settings are applied, three matching algorithms are rendered in parallel

Classification

The tool recognises five image types and picks defaults accordingly:

TypeDetected byDefault algorithm
📷 PhotoMany different colors, few edgesFloyd-Steinberg (or Atkinson for very flat images)
🎨 GraphicFew colors, medium edge densityAtkinson
📝 TextVery high edge density, few colorsAtkinson + auto text protect
🏷️ LabelLarge white area + medium edges (e.g. price tag)Floyd-Steinberg + gamma
🧩 MixedNo clear type detectableFloyd-Steinberg

Auto-report

After analysis a compact card appears in the sidebar footer with:

  • Detected image type (e.g. "Photo") as a pill
  • Chosen algorithm + palette
  • Statistics row (L̄, σL, S̄, edge %, colors, white %)
  • Bullet list of applied adjustments with reasoning

Recommended algorithm

Out of the three curated algorithms, one gets a ★ Rec. badge in its tab — the best pick per image analysis. A separate Best badge is based on the lowest ΔE2000 (perceptual distance from the original). They're often but not always the same.

Auto-analyze applies settings conservatively. It never auto-changes the distance method or auto text protect for labels — those can destroy product images when used incorrectly. Hints about opt-in overrides appear in the auto-report.

06 Dither algorithms

Seven algorithms with distinct character. Picking "Compare all" in the algorithm dropdown renders all 7 as comparable tabs.

Error-diffusion algorithms

Distribute the quantization error of a pixel across neighboring pixels. Produces organic, structure-less noise.

AlgorithmError distributionCharacter
Floyd-Steinberg4 neighbors, 7/16+3/16+5/16+1/16Classic, good balance, default for photos
Atkinson6 neighbors, 1/8 each (only 6/8 total — 2/8 of the error is "swallowed")Cleaner, less grainy areas — best pick for E-Ink labels and text
Stucki12 neighbors, wider distributionSofter than FS, good for smooth gradients
Burkes7 neighbors (FS-like but 2 rows)Slightly softer than FS, similar to Stucki
Sierra10 neighbors (3 rows)Very soft, good for large gradients

Ordered dithering (Bayer matrix)

Uses a fixed pixel mask (Bayer matrix) instead of error diffusion. Produces a regular, almost retro pattern.

AlgorithmMatrix sizeCharacter
Ordered (Bayer 4×4)4×4 = 16 levelsFine pattern, good for logos on a flat background
Ordered (Bayer 8×8)8×8 = 64 levelsSofter pattern, more tone steps, retro look
For E-Ink labels with a tight 6/7-color palette, Atkinson is usually the best choice because it produces clean areas instead of the grainy "TV noise" Floyd-Steinberg tends to generate in dark sky regions.

07 Color palettes

The palette defines which colors may appear in the output. Every palette color must be exactly displayable by the target device.

Built-in palettes

PaletteColorsTypical devices
6C E-Ink
Spectra E-Ink labels (6 colors)
7C E-Ink
Spectra E-Ink labels (6C + orange)
4C E-Ink
Black/white/red/yellow labels
3C E-Ink
Classic 3-color tags
Black & white
1-bit devices, classic e-readers
Grayscale 4 / 84 or 8 gray levels4-bit e-readers, Kindle and similar
Custom paletteFree (2–unlimited)Special devices / creative workflows

Custom palette

Pick "Custom palette" and a plus button appears. Click it to add colors (browser color picker). Hover a color and click the × to remove. At least two colors are required — otherwise dithering can't start.

K-Means: generate palette from image

Click 🎨 Generate from image in the palette panel. The tool extracts the n most dominant colors from the active image via K-Means clustering and replaces the custom palette with them.

Be careful with K-Means: the generated colors are the ones present in the image, not necessarily the ones displayable by the target device. If your display is black/white/red only and K-Means hands you mint green and lilac, that doesn't help. Use K-Means for custom workflows, not for standard E-Ink devices.

Color-distance method

In the Options panel you choose how the tool decides the "nearest palette color" for each pixel:

  • RGB euclidean (fast) — default. Computes distance directly in RGB space. Fast but perceptually inaccurate (green and blue look "farther" than they are to the eye).
  • CIE76 (perceptually better) — Lab space. Better for dark / muted colors (e.g. dark wine red maps correctly to black, not pure red).
  • CIEDE2000 (most accurate) — industry standard. Also models hue rotation and chroma saturation. Slightly slower.
For dark brand colors (Lancôme wine red, deep burgundy, etc.) try CIE76 — RGB euclidean often misfires and maps them to bright red instead of black.

08 Image library

You can load any number of images at once. Each appears as a tab above the canvas with:

  • Mini thumbnail (88×88 px, aspect-ratio preserved)
  • File name
  • × to remove
  • Result-count badge when the image has already been dithered

Adding images

Four ways:

  1. Drag & drop into the tool (canvas area or tab strip)
  2. Click the drop zone → file dialog (multi-select supported)
  3. Ctrl+V from the clipboard
  4. Click the + Image button in the tab strip

Per-image settings memory

Each image remembers its own settings. If you set "saturation +50%" on image A and "0%" on image B, switching tabs restores the respective settings automatically. Since v2.7 that also includes the Expert-mode settings (background replacer, mix, tolerance).

The mask (manual protected areas) and dither results are also stored per image. You can switch back and forth without losing work — even while a worker is computing in the background.

Batch auto-design

In the top-right of the tab strip: 🪄 Auto all. Walks through every image sequentially, runs Auto-analyze + dither on each. Status bar shows progress like "2/5: photo.jpg…". Handy for processing an entire series at once.

Clear library

Clear button in the tab strip, guarded by a confirmation dialog. Warning: all settings, masks and results for every image are lost (except those kept as global defaults in localStorage).

09 Options panel

Mostly pre- and post-processing toggles. Collapsed by default; if you change multiple values from the default, a counter badge appears.

Auto text protect

Detects text and hard edges via a Sobel filter and excludes them from dithering. Protected pixels are mapped straight to the nearest palette color — no dither noise, crisp type.

Auto threshold (Sobel) 20–200, default 80 — sensitivity:

  • Low (← more protect): many areas protected, even soft transitions
  • High (less →): only very sharp edges, like actual text
Auto text protect can mistake product silhouettes (bottles, logos) for "text" and become destructive. On product labels with an image, leave it off or raise the threshold.

Protected-area mode

How protected pixels are output:

  • Keep original colors: pixels stay unchanged (may be outside the palette → won't render correctly on the device)
  • Nearest palette color: mapped but without dithering

Sharpen

3×3 unsharp mask after dithering. Makes edges crisper but may slightly amplify dither noise.

Boost saturation

HSL-space boost before dithering. Pulls pale colors closer to the palette. Usually good for photos, may produce stray pixels on noisy skies (that's why neutral protection is applied).

Gamma-correct (linear)

Error diffusion runs in linear light space instead of sRGB. Perceptually more correct, especially in midtones. Click the icon next to the toggle for the full rationale. Recommended for photos, may look slightly softer on text and graphics.

Live preview

Re-dithers automatically ~250 ms after each change. Disabled with "compare all" (too expensive). Very useful while dragging sliders.

Stray-pixel filter (speckle filter)

Post-process filter against stray-color pixels in the dither output. Three levels:

  • 1 — 3×3 filter, replaces pixels with ≤1 matching neighbor (gentle)
  • 2 — 3×3 filter, ≤2 matching, 2 passes (medium) — good default for photos
  • 3 — 5×5 filter, very aggressive (can soften fine details)

Pre-blur source

Box blur 0–6 before dithering. Removes JPEG micro-noise and fine detail the small palette can't represent anyway. Huge lever against sky / cloud pixel noise, but sacrifices sharpness.

10 Color correction panel

Manual intervention in pixel values before dithering. Collapsed by default.

Protect B/W + threshold

Black, white and gray pixels are excluded from color correction. Prevents unwanted color casts on neutral tones.

  • Threshold 5–80, default 30
  • Low (strict): only nearly pure B/W / gray is protected
  • High (loose): even slightly colored pixels count as neutral

Brightness bias

Shifts overall brightness by −60 to +60. Good for rescuing underexposed photos.

Red/green/blue boost

Per-channel multiplier from 0.5× to 2.0×. Good for targeted brand-color accents (e.g. push red for a red-capable E-Ink device). If Auto-analyze detects a color cast, these get nudged automatically.

Reset

Resets all color-correction values to defaults.

11 Expert mode

Power-user features marked with a mint accent. Collapsed by default so they don't clutter the standard UI.

Replace background

Replaces all pixels similar to a source color (picked from the canvas with the eyedropper) with one or two target colors — before the image is dithered.

Use case: brand-color backgrounds like the mint-green Douglas logo. Mint green isn't in the 6/7-color palette. Instead of dithering it chaotically, you can pre-process it into a representable color or a Bayer mix of two palette colors.

"Single color" mode

Flat replacement: every similar pixel becomes the same target color.

  1. Load an image, open the Expert panel, enable the feature
  2. Click 🔍 Eyedropper → cursor turns into a crosshair
  3. Click the area to replace → source color captured
  4. Pick a palette color from the target swatches (e.g. white)
  5. Adjust tolerance

"Two colors" mode (Bayer halftone)

Instead of a flat replace, a regular pixel pattern of two palette colors approximates the original tone. Example: mint ≈ 60% green + 40% white as a Bayer checkerboard — yields a calm, palette-faithful minty effect.

  1. Capture the source color with the eyedropper (as above)
  2. Switch mode to "Two colors"
  3. Click 🪄 Auto-mix — the tool automatically computes the two best palette colors and the optimal mix ratio (via Lab-space projection on all color pairs)
  4. Optional: adjust the ratio slider manually or pick different palette colors for color 1 / color 2
  5. Pick a pattern from four options:
    • Bayer 4×4 — fine regular dither pattern
    • Bayer 8×8 — softer, more tonal steps
    • Halftone — classic "newspaper" dots (clustered)
    • Random — stochastic noise without visible geometry

"Three colors" mode

For tones that aren't "interpolatable" between two palette colors but lie inside a triangle of three — e.g. lavender (red + blue + white), olive (yellow + green + black), beige (yellow + white + a touch of red).

  1. Capture the source color with the eyedropper
  2. Switch mode to "Three colors"
  3. Click 🪄 Auto-mix — the tool computes the three best palette colors + optimal weights via barycentric Lab projection across all color triples
  4. Three weight sliders can be tweaked manually (the tool normalizes them to 100% internally; labels show the effective shares)

Quick compare single ↔ mix

In mix mode there's a button next to Auto-mix (or the M key). Temporarily flips between the current mix mode and single-color mode so you can directly tell whether the mix is actually better or a plain replace is enough.

Visualize tolerance

Once the background replacer is enabled and a source color has been picked, a mint glow overlay appears on the source view showing which pixels count as "matching". The overlay updates live as you drag the tolerance slider — you see instantly where the match is too tight or too loose.

With live preview enabled you see the dither result immediately. When the eyedropper is used in a mix mode, Auto-mix runs automatically after the pick — instant suggestion.

Esc cancels eyedropper mode. M toggles single ↔ mix.

Rule of thumb for picking a mode:
  • Single color → when you just want to "erase" the background (e.g. mint → white for a clean look)
  • Two colors → when the source tone lies between two palette colors (mint between green + white, purple between red + blue)
  • Three colors → for complex tones (lavender, olive, muted beige) — requires a palette with at least 3 colors

12 Tools & masking

The toolbar hosts tools for defining manual protected areas. Protected pixels are skipped by the dither algorithm. Since v2.7 all painting and dragging interactions also work with touch input (finger, stylus).

Mask tools

  • 🖌️ Brush (key B) — free-draw, continuous stroke
  • ▭ Rectangle (R) — rectangular selection
  • 🧹 Eraser (E) — remove mask
  • Clear mask (C) — wipe the entire mask

Brush size

Slider 2–60 px, available in the toolbar.

Undo / redo

Ctrl+Z / Ctrl+Y or the ↶/↷ buttons. History is per image (max 30 steps).

Zoom + pan

  • + / − buttons or + / keys
  • ⤢ Fit (F) — zoom to window size
  • Ctrl+mouse wheel — zoom at cursor position
  • 0 — zoom to 100 %
  • Space + drag — pan (or middle mouse)

Mini-map

Appears automatically in the bottom right when you're zoomed in. Mint frame marks the visible area. Click or drag to pan directly. Hides itself when you zoom out.

13 Comparing results

Three ways to compare multiple algorithm results:

Result tabs (default)

A tab per algorithm appears under the canvas, showing a mini preview (36×26 px), algorithm name and ΔE score (perceptual distance from original, lower = better). Click to switch the main view.

◐ Split view

Toolbar button ◐ or S. Shows the current result and the original with a draggable vertical split. Perfect for seeing exactly what dithering changed.

▦ Grid view

Toolbar button ▦ or G. Shows every algorithm result as a card grid with larger previews. Click a card to open the single view.

14 Keyboard shortcuts

Tools

BrushB
RectangleR
EraserE
Clear maskC
Tool offEsc

History

UndoCtrl+Z
RedoCtrl+Y

View

Zoom in+
Zoom out
Zoom 100 %0
FitF
Split viewS
Grid viewG
Pan (drag)Space

Actions

Run ditheringEnter
Save PNGCtrl+S
Paste imageCtrl+V
Mix ↔ singleM

15 Typical workflows

📷 Photo on an E-Ink display (e.g. wallpaper for e-reader)

  1. Load the image, optionally resize to display dimensions (enable target size)
  2. Click 🪄 Auto-analyze
  3. Three algorithms appear: Floyd-Steinberg, Stucki, Atkinson
  4. If the sky shows noise: set speckle filter to 2, optionally pre-blur 1
  5. ↓ Save PNG

🏷️ E-Ink price tag with logo + text

  1. Load the image (typically 480×800 px)
  2. 🪄 Auto-analyze → classifies as "Product label"
  3. If brand-color text maps wrong (e.g. dark wine red becomes pure red): switch distance method to CIE76
  4. If text renders noisily: enable auto text protect manually — watch out, it can mask product silhouettes

🎨 Logo / graphic with an unusual background color

Example: black logo on mint-green background (mint isn't in the 6/7C palette).

  1. Load the image
  2. Open Expert mode → enable "Replace background"
  3. 🔍 Eyedropper → click the mint-green background
  4. Pick a target color: white for a clean look, or pure green for punchy brand presence
  5. Adjust tolerance until only the background is replaced
  6. 🪄 Auto-analyze or run dithering directly

📦 Batch-processing an entire series

  1. Drag & drop multiple images into the tool (or multi-select in the file dialog)
  2. In the top-right of the tab strip: click 🪄 Auto all
  3. Tool walks through every image, running Auto-analyze + dither on each
  4. Status bar shows progress
  5. When it finishes: click through the tabs and save each PNG

16 Troubleshooting

The sky has ugly colored dots

Classic Floyd-Steinberg behavior with a tight palette — the algorithm spreads error and produces stray colors in dark areas.

Fixes:

  • Switch to Atkinson (cleaner flat areas)
  • Pre-blur to 1 or 2
  • Speckle filter to 2
  • Turn off saturation boost for noisy photos

Text renders in the wrong color

E.g. dark burgundy becomes bright red.

Fixes:

  • Switch distance method to CIE76 or CIEDE2000
  • Carefully enable auto text protect manually (can mask product silhouettes!)

Product image becomes flat / blocky

Auto text protect is probably on and the Sobel filter treats the product silhouette as "text".

Fix: disable auto text protect or raise the Sobel threshold significantly (150+).

Brand-color background doesn't reproduce (well)

The palette doesn't contain the color. Three options:

  1. Accept that the color gets dithered (tame it with pre-blur + speckle)
  2. Raise brightness bias → background becomes white
  3. Expert mode → Replace background with the eyedropper and a chosen palette color

The tool feels slow on large images

Turn off live preview and trigger dithering manually. "Compare all" renders 7 algorithms — on a 4K image that can take seconds.

Settings get lost when switching images

Should no longer happen in v2.7 — every image context including expert-mode settings is restored on tab switch. If it does: clear the browser cache and reload so localStorage is clean.

Switching language doesn't update everything

Already-dithered result tabs show the algorithm name in the language active at render time. Re-dither to refresh the names. Palette color names, the auto-report and the onboarding tour all re-render immediately on language switch since v2.7.

17 Tool limits

Honest framing of what the tool cannot do:

Colors outside the palette

If your display only has 6 colors (black, white, red, green, blue, yellow) and your image contains teal, there is no way to render teal exactly. The tool can only:

  • Dither teal as a mix of green + white pixels (looks teal-ish from distance)
  • Map teal entirely to one palette color (loses the hue)
  • Replace teal via pre-processing (Expert mode)

Text recognition

Auto text protect uses Sobel edge detection and cannot distinguish text from a product silhouette. That's a deliberate simplification — real OCR would be too heavy for a browser tool.

No vector input

The tool only handles raster images (PNG, JPG, WebP). SVG inputs have to be rasterized to PNG first.

No device-specific profiles

The palettes are generic (pure R/G/B/Y values). Real E-Ink devices often have slight shifts (Spectra "red" is really a muted orange-red). If your output looks different on the device than on screen, it's probably the device color profile.

Performance on very large images

Floyd-Steinberg is O(n) but has constant overhead. On 8K images a single algorithm can take 5–10 seconds; "Compare all" multiplies that by 7.

18 Funding & watermark

Dither Studio is free and runs entirely in your browser — no images are uploaded, no tracking, no sign-up. To keep the server alive, the tool uses a simple, transparent model:

One free choice per download

When you click ↓ Save PNG, a small dialog appears with two options:

  • 📺 Watch video · Clean PNG — A short ad video (a few seconds). Afterwards the PNG is downloaded without a watermark. One video per download.
  • ↓ Save with watermark — Immediate download, with a subtle "einktool.com" label in the bottom-right of the image.

Both options are free of charge. The watermark is small and discreet and doesn't interfere with most use cases. If you're producing lots of files (for print, commercial use, etc.), the short ad per file is the fair trade.

Even with ads, images are never uploaded. The ad runs in parallel in the browser; dithering still happens entirely on your device.

How the watermark works

Technically: every computed dither result keeps two versions in memory — a clean pixel-buffer copy, and the canvas-rendered frame with the watermark on top. The download button picks which one is exported to the PNG based on the ad outcome.

Side effect: if you right-click the canvas and "Save image" yourself, you get the watermarked version. Only the official download button opens the ad dialog.

For wrapper & embed developers

If you embed the tool in your own page, you can swap the ad provider or bypass the gate entirely:

  • window.DitherStudio.adProvider = (onDone) => { …play rewarded ad… onDone(); } — plug in your own rewarded-video SDK. Call onDone() once the reward has been earned.
  • window.DitherStudio.downloadGate = (action, meta) => action() — legacy hook that takes over the whole flow (bypasses the built-in modal).
  • Without either hook the tool runs a 3-second countdown placeholder so you can test the flow locally.

Events: the tool fires dither:download with detail.clean (true/false) after every download — useful for analytics.

Producing commercial images at scale and would rather skip the ad hurdle? Get in touch — bulk / enterprise watermark-free licenses are available.

19 Glossary

Dithering

Technique for approximating continuous colors with a pattern of discrete ones. Instead of reproducing a blended hue exactly, two or more available colors are distributed so the eye perceives the blend.

Error diffusion

Class of dither algorithms that distribute the quantization error of a pixel across neighboring pixels. Floyd-Steinberg, Atkinson, Stucki, etc.

Ordered dithering / Bayer

Class of dither algorithms that use a fixed pixel mask (Bayer matrix) as a threshold. Produces a regular, often visible pattern.

Quantization

Reducing a continuous color to the nearest available palette color. Without dithering this produces hard posterization.

Quantization error

The difference between the actual pixel value and the palette value chosen after quantization. Error diffusion distributes this error across neighbors.

Sobel filter

Image-processing operator for edge detection. Computes the brightness gradient at each position. Used in auto text protect and in auto-analyze for image type classification.

Lab color space (CIELAB)

Perceptually uniform color space (unlike RGB). Color distances in Lab match the human eye's sense of "similarity" much better.

ΔE (Delta E)

Measure of perceptual color distance between two Lab colors. ΔE76 = simple euclidean distance; CIEDE2000 = refined with hue/chroma corrections. ΔE < 1 = imperceptible to the eye, ΔE > 5 = clearly different.

Gamma correction

sRGB values are non-linearly encoded (tied to the eye's brightness perception). Linear RGB is physically correct light. Error diffusion in linear space avoids midtones becoming too dark.

Speckle / stray pixels

Isolated "wrong" pixels in the dither output, often perceived as noise. The speckle filter is a post-process that replaces them with the dominant neighbor tone.

Web Worker

Browser feature for background computation in a separate thread. Keeps the UI responsive so heavy pixel operations don't block the main thread.

K-Means clustering

Method for partitioning data points into n clusters. In Dither Studio: extracts the n most dominant colors from an image by clustering pixel values as 3D (RGB) points.

Pointer events

Unified browser event model that treats mouse, stylus and touch the same. Dither Studio v2.7 uses pointer events throughout, so tablet and phone usage work too.