far2l icon indicating copy to clipboard operation
far2l copied to clipboard

TTY backend: render graphics as sixels (if kitty protocol not available)

Open unxed opened this issue 2 months ago • 17 comments

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

unxed avatar Nov 13 '25 19:11 unxed

я сколько раз ни пытался разобраться с этими секселями, и както там очень много сложности ради такого "качества" картинки...

elfmz avatar Nov 13 '25 20:11 elfmz

Это ж для превью, глянуть на сервере, что в файле. Там супер качество не нужно. Перевёл Википедию про них на русский, может, поможет разобраться.

Image

unxed avatar Nov 13 '25 20:11 unxed

А вот тут пишут что до 3,6 млн цветов формат позволяет. Но фиг знает, как там с поддержкой в терминалах. Изучаю

unxed avatar Nov 13 '25 20:11 unxed

Судя по тикету по ссылке, 3,6 млн цветов в сикселях поддерживают mlterm, RLogin, Yo, st и alacritty.

Но у меня в alacritty чего-то вообще никакие сиксели не взлетают. UPD: да, нет их там пока.

unxed avatar Nov 13 '25 20:11 unxed

Собственно, а кто мешает взять для сикселей готовую libsixel по ссылке выше?

unxed avatar Nov 13 '25 21:11 unxed

Вот тут ещё дофигищща документации по сикселям, включая полноцвет https://github.com/alacritty/alacritty/issues/910#issuecomment-613221752

unxed avatar Nov 13 '25 21:11 unxed

А ещё у iTerm2 есть свой картиночный протокол. Простой, к счастью

unxed avatar Nov 13 '25 21:11 unxed

А вот эта штука умеет показывать картинки в терминале, создавая поверх x11/wayland окно (как в Винде PictureViewer в Far3 делает). Теоретически ttyx мог бы делать такое тоже (но хз, надо ли, если есть полноценный графический бекенд)

unxed avatar Nov 13 '25 21:11 unxed

Вот еще пример кода - Microsoft Terminal

atolismesh avatar Nov 13 '25 21:11 atolismesh

Это ж для превью, глянуть на сервере, что в файле. Там супер качество не нужно. Перевёл Википедию про них на русский, может, поможет разобраться. Image

konsole умеет в граффику, это не сиксели

tempergate avatar Nov 14 '25 01:11 tempergate

Как это не сиксели? Именно в них он и умеет

unxed avatar Nov 14 '25 02:11 unxed

Слушайте, а кто мешает выводить сикселями полноцвет, выводя каждый 6-пиксельный сиксель отдельно и устанавливая для него отдельную палитру? Для оптимизации производительности можно выводить блоками 42x6, и 256 цветов всё ещё хватит на блок.

Современные терминалы же не ограничены физической экранной палитрой, они сколько угодно могут одновременно рисовать, я экспериментировал с chafa и konsole.

unxed avatar Nov 15 '25 07:11 unxed

Работает! Вот, пожалуйста: 2906 цветов (в данном конкретном примере) через сиксели и скрипт, который это делает. Понадобится установить libsixel-bin, чтоб заработало.

Image

sixel_colors.py

unxed avatar Nov 15 '25 08:11 unxed

Можно пойти ещё дальше, и использовать возможности прозрачности формата sixel (а они там есть), чтобы рисовать несколько картинок с разными масками прозрачности и палитрами одна поверх другой, получая честный TrueColor на выходе, но у меня пока не дошли руки попробовать реализовать это.

Ещё можно попробовать резать не на горизонтальные полоски, а на квадратики, тоже способ получить TrueColor.

unxed avatar Nov 15 '25 08:11 unxed

Работает!

Закинул идею в chafa. Оценили, взяли в работу :)

https://github.com/hpjansson/chafa/issues/312

unxed avatar Nov 15 '25 15:11 unxed

О, прикол, в Konsole есть котятошный протокол, оказывается.

Image

А ещё существует Хромиум с рендером в консоль по этому протоколу, офигеть.

unxed avatar Nov 17 '25 14:11 unxed

О, прикол, в Konsole есть котятошный протокол, оказывается. А ещё существует Хромиум с рендером в консоль по этому протоколу, офигеть.

вот он и использовался выше чафой. У чафы есть ключ, который принудительно заставляет выводить сикселями, даже под терминалами с поддержкой граффики '--format=sixels'

tempergate avatar Nov 17 '25 20:11 tempergate