1 Punkte von GN⁺ 2026-02-19 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Beitrag schlägt vor, die 256-Farben-Palette automatisch aus dem Base16-Theme des Nutzers zu erzeugen, um die Farbkonsistenz und Lesbarkeit im Terminal zu verbessern
  • Bestehende Base16-Themes sind zwar einfach, aber in der Anzahl der Farben begrenzt, während Truecolor komplexe Konfiguration und Kompatibilitätsprobleme mit sich bringt
  • Die standardmäßige 256-Farben-Palette bietet wegen unausgewogener Helligkeit, Nichtübereinstimmung mit dem Theme und fehlerhafter Interpolation eine geringe visuelle Qualität
  • Wenn eine erweiterte Palette aus Base16-Farben mittels Interpolation im LAB-Farbraum erzeugt wird, sind reichhaltigere Farbdarstellungen möglich, während konsistente Helligkeit und Kontrast erhalten bleiben
  • Mehrere wichtige Terminals, etwa Ghostty, iTerm2 und SwiftTerm, setzen dies bereits um; eine standardisierte automatische Palettenerzeugung könnte die Qualität des gesamten Terminal-Ökosystems verbessern

Überblick über die 256-Farben-Palette

  • Die 256-Farben-Palette besteht aus 16 Grundfarben, einem 216-Farben-Würfel und einer 24-stufigen Graustufenskala
    • Die 16 Grundfarben umfassen Schwarz, Weiß, Primärfarben und helle Varianten
    • Der 216-Farben-Würfel wird mit 6 Stufen (0~5) pro RGB-Kanal berechnet: 16 + (36 * R) + (6 * G) + B
    • Die Graustufen bestehen aus 24 Abstufungen zwischen Schwarz und Weiß: 232 + S (S ist 0~23)
  • Diese Struktur ist eine vereinfachte Version von 24-Bit-RGB und erhält Ausdruckskraft, obwohl die Zahl der Farben reduziert wird

Probleme der bestehenden 256-Farben-Palette

  • Durch die Nichtübereinstimmung mit Base16-Themes entstehen Farbkonflikte
    • Die Standardpalette harmoniert mit den meisten Base16-Themes nicht
  • Fehlerhafte Farbinterpolation verschlechtert die Lesbarkeit auf dunklen Hintergründen
    • Die erste Abstufung der Standardpalette wird heller berechnet, als sie tatsächlich sein sollte, wodurch der Kontrast geschwächt wird
  • Problem des ungleichen Kontrasts
    • Es werden vollständig gesättigte Farben verwendet, wodurch die Helligkeitsbalance nicht stimmt; selbst auf derselben Stufe wirkt Blau dunkler als Grün

Verfahren zur Palettenerzeugung

  • Die Lösung besteht darin, die 256-Farben-Palette automatisch aus den Base16-Farben des Nutzers zu erzeugen
    • Die 8 Grundfarben von Base16 werden auf die 8 Eckpunkte des 216-Farben-Würfels abgebildet
    • Mit Hintergrund- und Vordergrundfarbe wird der Würfel per trilinearer Interpolation (trilinear interpolation) erzeugt
    • Der LAB-Farbraum wird verwendet, um eine konsistente wahrgenommene Helligkeit zwischen den Farben zu erhalten
  • Die Graustufenskala wird durch einfache Interpolation vom Hintergrund zum Vordergrund erzeugt
  • Im Python-Beispielcode werden rgb_to_lab, lab_to_rgb und lerp_lab für die Umwandlung verwendet

Implementierung und aktueller Stand

  • Der vorgeschlagene Code ist als Public Domain veröffentlicht und kann frei angepasst und verwendet werden
  • In wichtigen Terminals wie Ghostty, iTerm2 und SwiftTerm ist die Implementierung bereits abgeschlossen
  • Für kitty, Wezterm, Tabby und Windows Terminal wurden ebenfalls Integrationsanfragen gestellt oder die Entwicklung läuft bereits
  • Einige Entwickler schlugen die Verwendung des OKLAB/OKLCH-Farbraums vor; das Projekt will den Standardfarbraum entsprechend der Entscheidung von Ghostty vereinheitlichen
  • Über ein Python-Skript lässt sich die Palette direkt anwenden oder eine Konfigurationsdatei für das Terminal automatisch erzeugen

Fazit und Vorschlag

  • Die standardmäßige 256-Farben-Palette wird von Programmierern wegen schlechterer Lesbarkeit und Nichtübereinstimmung mit dem Theme gemieden
  • Wenn das Terminal automatisch eine 256-Farben-Palette auf Basis eines Base16-Themes erzeugt, ergeben sich folgende Vorteile
    • Nutzung eines breiten Farbumfangs auch ohne Konfigurationsdatei
    • Kein Eingreifen von Entwicklern beim Wechsel zwischen Hell-/Dunkelmodus erforderlich
    • Erhalt einer breiten Terminal-Kompatibilität
  • Der Autor betont, dass diese Funktion standardmäßig aktiviert (opt-out) sein sollte und sich langfristig als Standardfunktion etablieren müsse

1 Kommentare

 
GN⁺ 2026-02-19
Hacker-News-Kommentare
  • Das Gute an der 256-Farbpalette ist, dass die Farben 16–255 fest definiert sind
    Man kann also zum Beispiel sicher sein, dass 146 immer ein „gedecktes Lila“ ist
    Das ist für Entwickler von Farbthemen sehr nützlich, die über verschiedene Terminal-Emulatoren hinweg eine konsistente Farberfahrung bieten wollen
    Wenn eine 256-Farbpalette aus einer variablen 16-Farbpalette erzeugt würde, könnte 146 am Ende nicht die erwartete Farbe sein
    Ich halte es für den falschen Weg, wenn der Bereich 16–255 genauso instabil wird wie 0–15

    • Nur 16 Farben zu verwenden ist zwar einschränkend, aber wenn CLI-/TUI-Entwickler darüber hinaus beliebige Farbthemen bauen, ist das unpraktisch
      Für Sehbehinderte oder Menschen mit Farbsehschwäche sowie für Leute, die einen weißen Hintergrund bevorzugen, leidet dann die Lesbarkeit
      Am Ende müssen Nutzer nicht nur die Standardfarben des Terminals, sondern zusätzlich noch die Farbeinstellungen jeder einzelnen App anpassen
      Terminals nutzt man nicht wegen einer hübschen UI, sondern wegen Effizienz. Wer etwas Hübsches will, soll ein Web-Frontend bauen
    • Terminalfarben sollten semantisch statt stilistisch verwendet werden
      Wir wollen keine „konsistente Erfahrung“. Farben sollten sparsam eingesetzt werden und die Benutzereinstellungen respektieren
    • Selbst wenn man weiß, dass 146 ein „gedecktes Lila“ ist, bringt das nichts, solange man die Hintergrundfarbe nicht kennt
      Der Hintergrund könnte ja selbst lila sein oder man könnte lila Text auf weißem Hintergrund haben
      Wenn eine App also die Farbkonfiguration meines Terminals nicht kennt, sollte sie diese Farbe nicht verwenden
    • Diese Funktion passt eigentlich nicht zu Entwicklern von Farbthemen, sondern eher zu Nutzern, die ihre eigene Palette direkt selbst bauen
      Ich verwende das Standard-base16-Theme und erwarte nicht, dass es mit Themes von Dritten übereinstimmt
      Der Unterschied zwischen farblichem Zugriff auf Terminal-Ebene und auf App-Ebene ist für mich eher eine philosophische Frage
    • Terminals wie iTerm2 bieten bereits eine Funktion für Minimum Contrast, aber die kann Farben auch stark verfälschen
  • Ich habe einen Streaming-Markdown-Renderer namens Streamdown gebaut
    Auf Basis von HSV wird nur eine Grundfarbe festgelegt, der Rest wird dann automatisch als Vielfaches davon angepasst
    Dunklere Elemente bekommen zum Beispiel weniger Sättigung, Symbole dafür kräftigere Farben
    Schon kleine Änderungen an HSV in den Einstellungen verschieben den gesamten Ton auf natürliche Weise, ohne dass man jede Farbe einzeln anfassen muss
    Es gibt auch Beispielcode

  • Schon mit der 16-Farben-Standardpalette gibt es Probleme
    black, white, bright black und bright white sollten eigentlich Helligkeitskontrast bedeuten, tragen aber Farbnamen
    Ich verstehe sie eher als „vor dem Hintergrund fast unsichtbare Farbe“, „stark kontrastierende Farbe“, „sichtbar, aber schwach“ und „maximal kontrastierende Farbe“
    Ich wünschte, sie wären nicht über Farbnamen, sondern über Kontrast definiert

    • Der richtige Weg ist, die Terminalfarben nicht anzutasten, sondern Programme so zu konfigurieren, dass sie andere Farben verwenden
      Vorder- und Hintergrundfarbe des Terminals sind vom 16-Farben-Standard unabhängig, was die Sache noch komplizierter macht
    • Wenn keine Farbeinstellungen angeboten werden, ist es besser, nur Attribute wie bold·reverse·standout zu verwenden
      Wenn man den Hintergrund nicht kennt, sollte man Schwarz und Weiß vermeiden. Wer 256 Farben nutzt, sollte eine vom Nutzer konfigurierbare Theme-Engine verwenden
  • Ich finde, diese Funktion sollte in jedes Terminal eingebaut werden
    Eine Erweiterung auf 24-Bit-Farben wäre noch besser. Allerdings sollte sie optional sein
    Wenn man zum Beispiel ein Solarized-Theme sowohl im Terminal als auch im Editor verwendet, könnte die Farbtransformation doppelt angewendet werden

    • Es wäre auch möglich, aus der 16-Farben-Palette eine LUT (Look-up-Table) zu erzeugen und in den 24-Bit-Farbraum zu mappen
      Wenn Apps Einstellungen nicht direkt überschreiben, sondern das über Umgebungsvariablen gesteuert werden kann, wäre das flexibler
  • Ich habe tinted-theming/base24 entdeckt und nutze es derzeit
    Mit tinted shell lassen sich Farbthemen sehr einfach umschalten. Das war eine ziemlich gute Zwischenlösung

  • Auch bei cargo/rustc gibt es ein Problem mit zu wenigen Farben
    Wenn man nur die semantischen Standardfarben verwendet, bleiben am Ende nur Magenta, Schwarz und Weiß übrig, was je nach Theme riskant ist

    • Abgesehen von Rot und Grün sollten CLI-Tools meiner Meinung nach nicht zu stark von Farben abhängen, sondern besser Textmarker unterstützen
  • Man kann auch einfach den 24-Bit-True-Color-Modus verwenden, dann braucht man keine Palette
    Laut termstandard/colors unterstützen die meisten modernen Terminals das

    • Im Originaltext gab es allerdings auch eine klare Gegenposition zu True Color
    • urxvt unterstützt bis heute kein vollständiges True Color
    • Weil man nie alle Farben vollständig kontrollieren kann, braucht man am Ende doch Annahmen. Das ist der Kernpunkt
    • Der eigentliche Punkt dieser Diskussion ist nicht True Color, sondern nutzerkonfigurierbare Themes auf 256-Farben-Basis
    • Mit fortschreitender Technik wären vielleicht sogar wahrnehmungsbasierte Farbstandards mit 48 Bit oder mehr möglich
      Berücksichtigt man physikalische Grenzen wie die Heisenbergsche Unschärferelation oder Quantenrauschen, bräuchte man theoretisch sogar Daten im Bereich von 6000 Bit/Pixel
      Solche Gedankenspiele sind interessant, ähnlich wie die Kardaschow-Skala oder alte kosmologische Zeitvorstellungen, weil sie eine Richtung für technischen Fortschritt aufzeigen
  • Nicht alle Nutzer haben ihre Standardfarbeinstellungen sauber konfiguriert
    Manche Terminals haben vielleicht insgesamt einen Grün- oder Orangestich
    Es könnte daher sogar besser sein, die Sättigung der Grundfarben auf die gesamte Palette anzuwenden

  • Ich bin farbenblind und hatte deshalb viele Probleme mit Farbthemen
    Deshalb lasse ich mit einem KI-Modell automatisch gut lesbare Farbkombinationen erzeugen
    Auf Basis eines Themes, das ich ursprünglich mochte, wird der Kontrast erhöht, und dadurch ist es viel angenehmer zu lesen
    Ich glaube, so ein Ansatz könnte auch anderen helfen

    • Ich bin nicht farbenblind, habe aber ein ähnliches Problem
      Apps verwenden Farben sehr unterschiedlich, sodass ein Theme in manchen CLIs gut aussieht, an anderer Stelle aber viel zu blass ist
      Am Ende ist es mühsam, Farbthemen für jede App separat anzupassen
  • Ich habe Protanomalie (Rotschwäche) und nutze deshalb ametameric
    Zusammen mit dieser Funktion könnte das wohl noch bessere Ergebnisse liefern