TTY backend: render graphics as sixels (if kitty protocol not available)
256 colors, but better than nothing. Also it probably should be possible to passthrough sixels from VT to TTY backend if working in TTY mode to avoid converting to TrueColor and performing dithering on backend side loosing quality.
Supported in KDE's konsole, iTerm and Windows Terminal, for example. GNOME VTE also planning to support sixels. Full list of terminals with sixel support. Spec.
Sixel support test:
printf '\x1bPq#1;2;100;0;0#1!50~\x1b\\'
(should display red bar)
Touch #356 #3054
я сколько раз ни пытался разобраться с этими секселями, и както там очень много сложности ради такого "качества" картинки...
Это ж для превью, глянуть на сервере, что в файле. Там супер качество не нужно. Перевёл Википедию про них на русский, может, поможет разобраться.
А вот тут пишут что до 3,6 млн цветов формат позволяет. Но фиг знает, как там с поддержкой в терминалах. Изучаю
Судя по тикету по ссылке, 3,6 млн цветов в сикселях поддерживают mlterm, RLogin, Yo, st и alacritty.
Но у меня в alacritty чего-то вообще никакие сиксели не взлетают. UPD: да, нет их там пока.
Собственно, а кто мешает взять для сикселей готовую libsixel по ссылке выше?
Вот тут ещё дофигищща документации по сикселям, включая полноцвет https://github.com/alacritty/alacritty/issues/910#issuecomment-613221752
А ещё у iTerm2 есть свой картиночный протокол. Простой, к счастью
А вот эта штука умеет показывать картинки в терминале, создавая поверх x11/wayland окно (как в Винде PictureViewer в Far3 делает). Теоретически ttyx мог бы делать такое тоже (но хз, надо ли, если есть полноценный графический бекенд)
Вот еще пример кода - Microsoft Terminal
Это ж для превью, глянуть на сервере, что в файле. Там супер качество не нужно. Перевёл Википедию про них на русский, может, поможет разобраться.
konsole умеет в граффику, это не сиксели
Как это не сиксели? Именно в них он и умеет
Слушайте, а кто мешает выводить сикселями полноцвет, выводя каждый 6-пиксельный сиксель отдельно и устанавливая для него отдельную палитру? Для оптимизации производительности можно выводить блоками 42x6, и 256 цветов всё ещё хватит на блок.
Современные терминалы же не ограничены физической экранной палитрой, они сколько угодно могут одновременно рисовать, я экспериментировал с chafa и konsole.
Работает! Вот, пожалуйста: 2906 цветов (в данном конкретном примере) через сиксели и скрипт, который это делает. Понадобится установить libsixel-bin, чтоб заработало.
Можно пойти ещё дальше, и использовать возможности прозрачности формата sixel (а они там есть), чтобы рисовать несколько картинок с разными масками прозрачности и палитрами одна поверх другой, получая честный TrueColor на выходе, но у меня пока не дошли руки попробовать реализовать это.
Ещё можно попробовать резать не на горизонтальные полоски, а на квадратики, тоже способ получить TrueColor.
Работает!
Закинул идею в chafa. Оценили, взяли в работу :)
https://github.com/hpjansson/chafa/issues/312
О, прикол, в Konsole есть котятошный протокол, оказывается.
А ещё существует Хромиум с рендером в консоль по этому протоколу, офигеть.
О, прикол, в Konsole есть котятошный протокол, оказывается. А ещё существует Хромиум с рендером в консоль по этому протоколу, офигеть.
вот он и использовался выше чафой. У чафы есть ключ, который принудительно заставляет выводить сикселями, даже под терминалами с поддержкой граффики '--format=sixels'
