1 poin oleh GN⁺ 2026-02-19 | 1 komentar | Bagikan ke WhatsApp
  • Tulisan ini mengusulkan agar palet 256 warna dibuat secara otomatis dari tema base16 milik pengguna, sebagai cara untuk meningkatkan konsistensi warna dan keterbacaan terminal
  • Tema base16 yang ada saat ini memang sederhana, tetapi jumlah warnanya terbatas, sementara truecolor memiliki masalah kompleksitas konfigurasi dan kompatibilitas
  • Palet 256 warna bawaan memiliki kualitas visual yang rendah karena ketidakseimbangan kecerahan, ketidakcocokan dengan tema, dan interpolasi yang keliru
  • Dengan menggunakan interpolasi ruang warna LAB untuk menghasilkan palet yang diperluas dari warna base16, representasi warna yang kaya dapat dicapai sambil tetap menjaga konsistensi kecerahan dan kontras
  • Sejumlah terminal utama (misalnya Ghostty, iTerm2, SwiftTerm) sudah mulai menerapkannya, dan ada kemungkinan fitur pembuatan palet otomatis yang terstandarisasi akan meningkatkan kualitas di seluruh ekosistem terminal

Gambaran umum palet 256 warna

  • Palet 256 warna terdiri dari 16 warna dasar, kubus 216 warna, dan grayscale 24 tingkat
    • 16 warna dasar mencakup hitam, putih, warna primer, dan variasi terang
    • Kubus 216 warna dihitung dengan memakai 6 tingkat (0~5) untuk tiap kanal RGB: 16 + (36 * R) + (6 * G) + B
    • Grayscale terdiri dari 24 tingkat antara hitam dan putih: 232 + S (S adalah 0~23)
  • Struktur ini adalah versi sederhana dari RGB 24-bit, yang mengurangi jumlah warna sambil tetap mempertahankan daya ekspresi

Masalah pada palet 256 warna yang ada saat ini

  • Terjadi benturan warna karena tidak selaras dengan tema Base16
    • Palet bawaan tidak cocok dengan sebagian besar tema base16
  • Interpolasi warna yang keliru menurunkan keterbacaan pada latar belakang gelap
    • Tingkat bayangan pertama pada palet bawaan dihitung lebih terang dari yang seharusnya, sehingga kontras melemah
  • Masalah kontras yang tidak seragam
    • Karena memakai warna dengan saturasi penuh, keseimbangan kecerahan tidak tercapai; bahkan pada tingkat yang sama, biru tampak lebih gelap daripada hijau

Cara pembuatan palet

  • Solusinya adalah membuat palet 256 warna secara otomatis dari warna base16 pengguna
    • 8 warna dasar base16 dipetakan ke 8 titik sudut kubus 216 warna
    • Warna latar belakang dan warna latar depan dipakai untuk membuat kubus dengan interpolasi trilinear (trilinear interpolation)
    • Ruang warna LAB digunakan untuk menjaga konsistensi kecerahan visual antarwarna
  • Grayscale dibuat melalui interpolasi sederhana dari latar belakang ke latar depan
  • Dalam contoh kode Python, konversi dilakukan dengan fungsi rgb_to_lab, lab_to_rgb, dan lerp_lab

Status implementasi dan penerapan

  • Kode yang diusulkan dirilis ke public domain sehingga bebas dimodifikasi dan digunakan
  • Sudah diterapkan di terminal utama seperti Ghostty, iTerm2, dan SwiftTerm
  • Penerapan juga sudah diminta atau sedang dikembangkan untuk kitty, Wezterm, Tabby, dan Windows Terminal
  • Sejumlah pengembang mengusulkan penggunaan ruang warna OKLAB/OKLCH, dan proyek ini berencana menyatukan ruang warna standar mengikuti keputusan Ghostty
  • Palet dapat diterapkan langsung melalui skrip Python, atau dipakai untuk membuat file konfigurasi terminal secara otomatis

Kesimpulan dan usulan

  • Palet 256 warna bawaan dihindari oleh para pengembang program karena menurunkan keterbacaan dan tidak cocok dengan tema
  • Jika terminal membuat palet 256 warna secara otomatis berbasis tema base16, manfaat berikut bisa diperoleh
    • Dapat memakai rentang warna yang luas tanpa file konfigurasi
    • Tidak perlu campur tangan pengembang saat beralih antara mode terang/gelap
    • Tetap menjaga kompatibilitas terminal yang luas
  • Pengusul menekankan bahwa fitur ini seharusnya aktif secara default (opt-out) dan dalam jangka panjang menjadi fitur standar

1 komentar

 
GN⁺ 2026-02-19
Komentar Hacker News
  • Hal yang bagus dari palet 256 warna adalah warna 16–255 tetap
    Jadi misalnya kita bisa yakin bahwa warna 146 selalu berarti ‘ungu lembut’
    Ini sangat berguna bagi pengembang tema warna yang ingin memberikan pengalaman warna yang konsisten di berbagai emulator terminal
    Jika palet 256 warna dihasilkan dari palet 16 warna yang bisa berubah, warna 146 mungkin tidak akan menjadi warna yang diharapkan
    Menurut saya, membuat rentang 16–255 menjadi tidak stabil seperti 0–15 adalah arah yang keliru

    • Menggunakan hanya 16 warna memang membatasi, tetapi juga merepotkan jika pengembang CLI/TUI membuat tema warna sembarang di luar rentang itu
      Ini menurunkan keterbacaan bagi penyandang gangguan penglihatan, buta warna, atau orang yang lebih suka latar putih
      Pada akhirnya pengguna harus mengatur bukan hanya warna default terminal, tetapi juga konfigurasi warna tiap aplikasi secara terpisah
      Terminal dipakai bukan untuk UI yang cantik, melainkan demi efisiensi. Kalau ingin sesuatu yang indah, buat saja web frontend
    • Warna di terminal seharusnya dipakai berdasarkan makna (semantic), bukan gaya
      Kita tidak menginginkan ‘pengalaman yang konsisten’. Warna harus dipakai dengan hemat dan menghormati pengaturan pengguna
    • Walaupun kita tahu warna 146 adalah ‘ungu lembut’, itu tidak berarti apa-apa jika kita tidak tahu warna latarnya
      Bisa saja latarnya ungu, atau teks ungu di atas latar putih
      Artinya, jika aplikasi tidak tahu skema warna terminal saya, aplikasi itu tidak seharusnya memakai warna tersebut
    • Fitur ini sebenarnya lebih cocok bukan untuk pengembang tema warna, melainkan untuk pengguna yang ingin membuat paletnya sendiri secara manual
      Saya memakai tema base16 default, dan tidak berharap cocok dengan tema buatan pihak ketiga
      Menurut saya, perbedaan pendekatan warna di level terminal dan level aplikasi lebih merupakan persoalan filosofis
    • Terminal seperti iTerm2 sudah menyediakan fitur Minimum Contrast, tetapi ini kadang sangat mendistorsi warna
  • Saya membuat renderer Markdown streaming bernama Streamdown
    Dengan basis HSV, cukup tentukan satu warna acuan, lalu sisanya otomatis disesuaikan sebagai kelipatan dari warna itu
    Misalnya elemen gelap dibuat kurang jenuh, sedangkan simbol dibuat lebih hidup
    Bahkan jika HSV di pengaturan hanya diubah sedikit, keseluruhan nuansa ikut berubah secara alami, jadi tidak perlu mengutak-atik tiap warna satu per satu
    Ada juga contoh kode

  • Bahkan palet 16 warna dasar pun punya masalah
    ‘black’, ‘white’, ‘bright black’, dan ‘bright white’ seharusnya dalam praktik berarti kontras terang-gelap, tetapi namanya justru berupa warna
    Saya memahaminya sebagai ‘warna yang nyaris tak terlihat terhadap latar’, ‘warna dengan kontras tinggi’, ‘terlihat tetapi lemah’, dan ‘warna dengan kontras paling tinggi’
    Akan lebih baik jika ini didefinisikan berdasarkan kontras, bukan nama warna

    • Cara yang benar adalah tidak mengutak-atik warna terminal, melainkan mengatur program agar memakai warna lain
      Warna foreground/background terminal independen dari standar 16 warna, sehingga lebih rumit
    • Jika tidak menyediakan pengaturan warna, lebih baik hanya memakai atribut seperti bold·reverse·standout
      Saat latar tidak diketahui, sebaiknya hindari hitam dan putih. Jika memakai 256 warna, gunakan mesin tema yang bisa dikonfigurasi pengguna
  • Saya rasa fitur ini harus ditambahkan ke semua terminal
    Akan lebih baik lagi jika diperluas ke warna 24-bit. Namun, ini harus disediakan sebagai opsi
    Misalnya jika memakai tema Solarized baik di terminal maupun editor, transformasi warna bisa diterapkan dua kali

    • Dari palet 16 warna juga bisa dibuat LUT (lookup table) untuk dipetakan ke ruang warna 24-bit
      Akan lebih fleksibel jika aplikasi tidak langsung menimpa pengaturan, melainkan bisa dikendalikan lewat variabel lingkungan
  • Saya menemukan dan sedang memakai tinted-theming/base24
    Dengan tinted shell, pergantian tema warna bisa dilakukan dengan mudah. Ini solusi sementara yang lumayan bagus

  • Di cargo/rustc juga ada masalah kekurangan warna
    Jika hanya memakai warna semantik default, yang tersisa cuma magenta, hitam, dan putih, dan ini berbahaya tergantung temanya

    • Selain merah dan hijau, menurut saya alat CLI sebaiknya tidak terlalu bergantung pada warna, dan lebih baik mendukung penanda teks
  • Pakai saja mode true color 24-bit, maka palet tidak diperlukan
    Berdasarkan termstandard/colors, sebagian besar terminal modern mendukung ini

    • Tetapi di tulisan aslinya juga ada keberatan yang jelas terhadap true color
    • urxvt masih belum mendukung true color sepenuhnya
    • Karena tidak semua warna bisa dikendalikan sepenuhnya, pada akhirnya tetap perlu asumsi. Itulah intinya
    • Inti diskusi ini bukan soal true color, melainkan usulan memakai tema yang dapat dikonfigurasi pengguna berbasis 256 warna
    • Jika teknologi terus berkembang, standar warna berbasis persepsi 48-bit atau lebih juga mungkin saja
      Bahkan jika mempertimbangkan batas fisik (prinsip ketidakpastian Heisenberg, quantum noise, dan sebagainya), mungkin dibutuhkan data setara 6000 bit/piksel
      Imajinasi seperti ini adalah eksperimen berpikir yang menarik, seperti skala Kardashev atau konsep waktu kosmis kuno, untuk menunjukkan arah kemajuan teknologi
  • Tidak semua pengguna mengatur warna default dengan benar
    Ada terminal yang keseluruhannya tampak kehijauan atau keoranyean
    Pendekatan yang menerapkan saturasi warna default ke seluruh palet mungkin justru lebih baik

  • Saya buta warna jadi sering kesulitan dengan tema warna
    Karena itu saya memakai model AI untuk otomatis membuat kombinasi warna yang mudah dibaca
    Berdasarkan tema yang awalnya saya sukai, kontrasnya ditingkatkan sehingga jauh lebih nyaman dilihat
    Rasanya pendekatan seperti ini juga bisa membantu orang lain

    • Saya tidak buta warna, tetapi mengalami masalah yang mirip
      Tiap aplikasi memakai warna dengan cara berbeda, sehingga satu tema bisa terlihat bagus di beberapa CLI tetapi terlalu pudar di yang lain
      Akhirnya ada kerepotan karena tema warna harus disesuaikan per aplikasi
  • Saya punya protanomaly dan sedang memakai ametameric
    Sepertinya hasilnya bisa lebih baik lagi jika dipakai bersama fitur ini