1 puntos por GN⁺ 2026-02-19 | 1 comentarios | Compartir por WhatsApp
  • Un texto que propone generar automáticamente la paleta de 256 colores a partir del tema base16 del usuario, como una forma de mejorar la coherencia cromática y la legibilidad en la terminal
  • Los temas base16 existentes son simples, pero tienen una cantidad limitada de colores, y truecolor presenta problemas de complejidad de configuración y compatibilidad
  • La paleta predeterminada de 256 colores tiene baja calidad visual debido a desequilibrios de brillo, desajustes con el tema e interpolación incorrecta
  • Si se genera una paleta extendida a partir de los colores base16 usando interpolación en el espacio de color LAB, es posible mantener un brillo y contraste consistentes, además de lograr una representación cromática más rica
  • Varias terminales importantes (por ejemplo, Ghostty, iTerm2 y SwiftTerm) ya lo están implementando, y existe la posibilidad de que una función estandarizada de generación automática de paletas eleve la calidad de todo el ecosistema de terminales

Resumen de la paleta de 256 colores

  • La paleta de 256 colores está compuesta por 16 colores básicos, un cubo de 216 colores y una escala de grises de 24 niveles
    • Los 16 colores básicos incluyen negro, blanco, colores primarios y sus variantes brillantes
    • El cubo de 216 colores se calcula usando 6 niveles (0~5) en cada canal RGB: 16 + (36 * R) + (6 * G) + B
    • La escala de grises consiste en 24 niveles entre blanco y negro: 232 + S (donde S va de 0 a 23)
  • Esta estructura es una versión simplificada de RGB de 24 bits, que reduce la cantidad de colores sin perder demasiada capacidad expresiva

Problemas de la paleta actual de 256 colores

  • Se producen conflictos de color por la falta de coincidencia con los temas Base16
    • La paleta predeterminada no armoniza con la mayoría de los temas base16
  • La interpolación incorrecta de color reduce la legibilidad sobre fondos oscuros
    • El primer tono de la paleta predeterminada se calcula más claro de lo real, debilitando el contraste
  • También hay problemas de contraste desigual
    • Como se usan colores con saturación total, no hay equilibrio de brillo, y en un mismo nivel el azul se ve más oscuro que el verde

Cómo generar la paleta

  • La solución es generar automáticamente la paleta de 256 colores a partir de los colores base16 del usuario
    • Los 8 colores básicos de base16 se asignan a los 8 vértices del cubo de 216 colores
    • El cubo se genera mediante interpolación trilineal (trilinear interpolation) usando el color de fondo y el color de primer plano
    • Se usa el espacio de color LAB para mantener la consistencia visual del brillo entre colores
  • La escala de grises se genera mediante una interpolación simple desde el fondo hasta el primer plano
  • En el código de ejemplo en Python, la conversión se realiza con las funciones rgb_to_lab, lab_to_rgb y lerp_lab

Estado de implementación y adopción

  • El código propuesto fue publicado en dominio público, por lo que puede modificarse y reutilizarse libremente
  • Ya fue implementado en terminales importantes como Ghostty, iTerm2 y SwiftTerm
  • En kitty, Wezterm, Tabby y Windows Terminal también hay solicitudes de adopción o trabajo en curso
  • Algunos desarrolladores propusieron usar los espacios de color OKLAB/OKLCH, y el proyecto planea unificar el espacio de color estándar según la decisión de Ghostty
  • También es posible aplicar directamente la paleta mediante un script de Python o generar automáticamente archivos de configuración de la terminal

Conclusión y propuesta

  • La paleta predeterminada de 256 colores es evitada por desarrolladores de programas debido a la pérdida de legibilidad y la falta de coincidencia con el tema
  • Si la terminal genera automáticamente una paleta de 256 colores basada en temas base16, se obtienen las siguientes ventajas
    • Se puede usar una amplia gama de colores sin archivos de configuración
    • No se requiere intervención del desarrollador al cambiar entre modo claro y modo oscuro
    • Se mantiene una amplia compatibilidad entre terminales
  • El autor enfatiza que esta función debería estar activada por defecto con opción de desactivarla (opt-out) y, a largo plazo, convertirse en una función estándar

1 comentarios

 
GN⁺ 2026-02-19
Opiniones de Hacker News
  • Lo bueno de la paleta de 256 colores es que los colores 16–255 están fijos
    Así que, por ejemplo, puedes tener la certeza de que el color 146 siempre es un “morado suave”
    Esto es muy útil para quienes desarrollan temas de color y quieren ofrecer una experiencia de color consistente en distintos emuladores de terminal
    Si la paleta de 256 colores se generara a partir de una paleta variable de 16 colores, el 146 podría no ser el color esperado
    Creo que sería un error hacer que la zona 16–255 se vuelva tan inestable como la 0–15

    • Usar solo 16 colores es limitante, pero también es incómodo que quienes desarrollan CLI/TUI se salgan de ese rango para crear temas de color arbitrarios
      Eso reduce la legibilidad para personas con discapacidad visual, daltonismo o que prefieren fondos blancos
      Al final, el usuario termina teniendo que configurar no solo los colores base de la terminal, sino también los de cada aplicación por separado
      La terminal se usa por eficiencia, no por una UI bonita. Si quieres algo bonito, haz un frontend web
    • Los colores en la terminal deberían usarse con base en su significado semántico, no como estilo
      No queremos una “experiencia consistente”. Los colores deben usarse con moderación y respetando la configuración del usuario
    • Aunque sepas que el 146 es un “morado suave”, no significa nada si no conoces el color de fondo
      El fondo podría ser morado, o podría ser texto morado sobre fondo blanco
      En otras palabras, si una app no conoce la configuración de colores de mi terminal, no debería usar ese color
    • En realidad, esta función encaja más con usuarios que crean su propia paleta manualmente que con desarrolladores de temas de color
      Yo uso el tema base16 predeterminado y no espero que coincida con un tema hecho por terceros
      Creo que la diferencia entre el enfoque de colores a nivel terminal y a nivel aplicación es más bien una cuestión filosófica
    • Terminales como iTerm2 ya ofrecen una función de Contraste Mínimo (Minimum Contrast), aunque a veces distorsiona mucho los colores
  • Hice un renderizador de Markdown en streaming llamado Streamdown
    Basado en HSV, si defines un solo color de referencia, el resto se ajusta automáticamente como múltiplos de ese color
    Por ejemplo, los elementos oscuros bajan su saturación y los símbolos se vuelven más vivos
    Si cambias apenas un poco el HSV en la configuración, el tono general cambia de forma natural, sin tener que retocar color por color
    También hay un código de ejemplo

  • Incluso con la paleta base de 16 colores ya hay problemas
    ‘black’, ‘white’, ‘bright black’ y ‘bright white’ en realidad deberían representar contraste de luminancia, pero sus nombres están definidos como colores
    Yo lo entiendo como “color casi invisible sobre el fondo”, “color de alto contraste”, “color visible pero tenue” y “color de máximo contraste”
    Me gustaría que se definieran por contraste y no por nombre de color

    • La forma correcta es no tocar los colores de la terminal y configurar el programa para que use otros colores
      Los colores de primer plano y fondo de la terminal son independientes del estándar de 16 colores, así que eso lo vuelve más complejo
    • Si no se ofrecen ajustes de color, es mejor usar solo atributos como bold, reverse y standout
      Y si no conoces el fondo, conviene evitar negro y blanco. Si vas a usar 256 colores, deberías usar un motor de temas configurable por el usuario
  • Creo que esta función debería añadirse a todas las terminales
    Sería aún mejor extenderla a color de 24 bits, pero como opción
    Por ejemplo, si usas el tema Solarized tanto en la terminal como en el editor, la conversión de color podría aplicarse dos veces

    • También sería posible crear una LUT (tabla de búsqueda) a partir de la paleta de 16 colores y mapearla al espacio de color de 24 bits
      Sería más flexible si las apps no sobrescribieran la configuración directamente y esto pudiera controlarse con variables de entorno
  • Encontré tinted-theming/base24 y lo estoy usando
    Con tinted shell puedes cambiar fácilmente de tema de color. Me pareció una solución temporal bastante buena

  • En cargo/rustc también existe el problema de falta de colores
    Si solo usas los colores semánticos predeterminados, al final solo quedan magenta, negro y blanco, y eso puede ser riesgoso según el tema

    • Aparte del rojo y el verde, creo que las herramientas CLI no deberían depender mucho del color, sino más bien admitir marcadores de texto
  • Si simplemente usas modo true color de 24 bits, no hace falta una paleta
    Según termstandard/colors, la mayoría de las terminales modernas lo soportan

    • Pero incluso en el texto original había una objeción clara contra true color
    • urxvt todavía no soporta true color completo
    • Como no puedes controlar por completo todos los colores, al final siempre hacen falta suposiciones. Ese es el punto central
    • La idea de esta discusión no es true color, sino usar temas configurables por el usuario basados en 256 colores
    • A medida que la tecnología avance, podrían existir estándares de color perceptual de 48 bits o más
      Incluso considerando límites físicos como la incertidumbre de Heisenberg o el ruido cuántico, haría falta algo del orden de 6000 bits por píxel
      Este tipo de ideas, como la escala de Kardashev o los conceptos antiguos de tiempo cósmico, son experimentos mentales interesantes sobre la dirección del progreso tecnológico
  • No todos los usuarios tienen bien configurados los colores base
    Algunas terminales pueden verse completamente verdosas o anaranjadas
    Aplicar la saturación de los colores base al resto de la paleta quizá sea, al menos, una mejor opción

  • Soy daltónico y siempre he batallado con los temas de color
    Por eso uso modelos de IA para generar automáticamente combinaciones de colores con alta legibilidad
    Al aumentar el contraste a partir de un tema que ya me gustaba, ahora me resulta mucho más fácil de leer
    Creo que este enfoque también podría ayudar a otras personas

    • Yo no soy daltónico, pero paso por un problema parecido
      Cada app usa los colores de forma distinta, así que un tema puede verse bien en algunos CLI y demasiado tenue en otros
      Al final está la molestia de tener que ajustar el tema de colores por separado en cada app
  • Tengo protanomalía y uso ametameric
    Creo que junto con esta función se podrían obtener mejores resultados