- lsix adalah skrip Bash yang menampilkan gambar sebagai thumbnail di dalam terminal untuk direktori saat ini atau daftar file yang ditentukan, seperti
ls, dan outputnya menggunakan grafik Sixel
- Menggunakan ImageMagick untuk menangani berbagai format gambar, dan jika GIF atau file yang berisi banyak gambar ditentukan di baris perintah, frame-frame-nya akan dibentangkan dan ditampilkan sebagai montase
- Mendeteksi apakah terminal mendukung Sixel, warna latar depan dan latar belakang, apakah register warna bisa diperluas, serta lebar jendela untuk menyesuaikan kualitas dan tata letak thumbnail
- Instalasi cukup dengan menempatkan file
lsix di path dan menyiapkan ImageMagick; di macOS, ImageMagick juga bisa dipasang bersamaan dengan brew install lsix
- XTerm secara default mematikan mode Sixel dan beberapa terminal tidak kompatibel, jadi sebelum dipakai perlu memastikan terminal tersebut memang kompatibel dengan Sixel
Alat daftar gambar terminal yang dipakai seperti ls
- lsix adalah alat yang mirip
ls untuk gambar, menampilkan thumbnail file secara inline di terminal
- Cara menjalankannya sangat sederhana
- Cukup ketik
lsix untuk menampilkan gambar di direktori kerja saat ini
- Nama file bisa ditentukan dalam bentuk
lsix [ FILES ... ]
- Wildcard shell dapat digunakan, jadi perintah seperti
lsix *jpg * png bisa dijalankan
- Output menggunakan grafik Sixel
Penanganan format dan cara tampilan berbasis ImageMagick
- Karena menggunakan ImageMagick, berbagai format gambar didukung
- Format seperti PDF yang bisa lambat dirender tidak akan ditampilkan kecuali diminta secara eksplisit
- Untuk memaksa format tertentu agar ikut ditampilkan, tentukan nama file secara langsung atau gunakan wildcard seperti
*.pdf
- Jika GIF atau file yang berisi banyak gambar ditentukan di baris perintah, semua frame akan dibentangkan dan ditampilkan sebagai montase
- Sebagian frame GIF dapat menyimpan hanya piksel yang berubah dibanding frame sebelumnya
- Grafik non-bitmap juga bisa berfungsi
- Contoh:
.svg, .eps, .pdf, .xcf
Fitur deteksi lingkungan terminal
- lsix menggunakan control sequence untuk mendeteksi apakah terminal dapat menampilkan grafik Sixel secara inline
- Kanal alfa pada PNG dan SVG diproses agar sesuai dengan warna latar belakang terminal
- lsix mencoba mengetahui warna latar depan dan latar belakang lewat escape sequence terminal
- Warna latar depan digunakan sebagai warna isi teks
- Jika mendeteksi terminal seperti xterm yang dapat menambah jumlah register warna, lsix akan memperluasnya secara otomatis untuk meningkatkan kualitas gambar
- Pada terminal yang mendukung dtterm WindowOps, jumlah tile per baris disesuaikan dengan lebar jendela
- Saat ada banyak gambar dalam direktori, pemrosesan dilakukan agar tidak perlu menunggu pembuatan seluruh montase selesai
- Jika jumlah gambar lebih dari 21, gambar akan ditampilkan per baris
- Jika nama file terlalu panjang, teks akan dibungkus sebelum dikirim ke ImageMagick
montage
- Jika memakai
montage tanpa lsix, nama file yang panjang bisa saling bertumpuk
- Nama file Unicode akan berfungsi jika font yang dipakai memiliki glif yang sesuai
Cara instalasi dan konfigurasi
- Instalasi cukup dengan menempatkan file
lsix ke path seperti /usr/local/bin lalu menjalankannya
- lsix adalah skrip shell Bash
- Perangkat lunak yang wajib hanya ImageMagick
- Contoh:
apt-get install imagemagick
- Pengguna macOS dapat memakai
brew install lsix
- Jika diperlukan, ImageMagick juga akan dipasang bersamaan
- Desain saat ini sangat sederhana
- Tidak ada flag baris perintah
- Tidak ada file konfigurasi
- Tidak ada knob penyesuaian
- Nilai seperti lebar tile, keluarga font, dan ukuran point bisa diubah dengan mengedit variabel di bagian atas file
- Daftar font yang terpasang bisa dilihat dengan
convert -list font
Persyaratan terminal dengan dukungan Sixel
- Terminal harus mendukung grafik Sixel
- Anda bisa menguji terminal dengan mengeluarkan satu gambar sebagai Sixel
convert foo.jpg -geometry 800x480 sixel:-
- Pengembangan dilakukan dengan mode emulasi vt340 milik xterm
- Secara default, mode Sixel pada XTerm tidak aktif
- Saat menjalankan, Anda dapat memakai
xterm -ti vt340
- Atau tambahkan
xterm*decTerminalID : vt340 ke .Xresources lalu jalankan xrdb -merge .Xresources
- Beberapa distribusi seperti Fedora dapat mengompilasi
xterm tanpa dukungan Sixel
- Dalam kasus ini, Anda bisa mencoba terminal alternatif seperti
foot atau mlterm
Terminal yang kompatibel dan tidak kompatibel
- Terminal yang dikonfirmasi atau dilaporkan kompatibel dengan Sixel
- XTerm, MLterm, foot, Wezterm, Contour, iTerm2 for Apple MacOS, dan Yaft telah diuji
- Konsole, yakuake, WSLtty for Microsoft Windows, MinTTY for Cygwin, kompilasi khusus VTE, sixel-tmux, dan ttyd telah dilaporkan
- Terminal yang tidak kompatibel dengan Sixel
- MacOS Terminal, kitty
- Terminal berbasis libvte standar
- gnome-terminal
- terminator
- lxterm
- Alacritty dapat berfungsi jika patch ini diterapkan
Bug dan batasan yang diketahui
- Mode reverse video XTerm
xterm -rv berbeda dari menentukan warna latar depan dan latar belakang secara eksplisit
- Penentuan eksplisit bisa dideteksi, tetapi resource reverseVideo tidak bisa dideteksi sehingga warna latar belakang bisa salah
- Lebar layar XTerm saat ini dibatasi hingga 1000px
- Batas ini akan dihapus jika xterm sudah bisa menangani gambar lebih besar dari 1000x1000
- Pengujian terakhir dilakukan pada XTerm(344)
- Nama file yang diawali
@ diperlakukan secara khusus oleh ImageMagick
- Harus diberi awalan direktori seperti
lsix ./@foo.png
- Ini bukan bug lsix, melainkan bug ImageMagick
- Jika string kosong
"" diberikan sebagai nama file, ImageMagick akan macet
- Ini tampak seperti bug atau perilaku yang salah pada ImageMagick
- Pembungkusan baris untuk nama file panjang berfungsi, tetapi tidak cerdas
- Pembungkusan berdasarkan spasi, tanda hubung, underscore, atau titik belum diterapkan
- Jika direktori ditentukan di baris perintah, perilakunya diperlakukan seolah pengguna melakukan
cd ke direktori tersebut
- Pemrosesan rekursif sebenarnya tidak sulit, tetapi penulis enggan menambah flag baris perintah pada skrip yang sederhana ini
- Menjalankan
lsix foo.avi dapat menimbulkan masalah
Standar Sixel dan keterbatasan implementasi
- Tampaknya standar Sixel tidak memiliki cara untuk melakukan query ukuran layar grafis
- Berdasarkan dokumentasi VT340, program harus sudah mengetahui resolusi perangkat target render
- XTerm 344 menambahkan control sequence
CSI ? Pi ; Pa ; Pv S untuk mengatasi masalah ini
- Beberapa terminal seperti
mlterm belum mengimplementasikannya
- Ada alternatif membaca ukuran jendela lewat ekstensi dtterm WindowOps
- Geometri layar grafis Sixel dan ukuran jendela tidak harus sama, jadi ini bukan solusi yang benar-benar akurat
- Misalnya xterm membatasi geometri grafis ke 1000x1000 walaupun jendelanya lebih besar
- Jika kedua metode gagal, lsix mengasumsikan lingkungan VT340
- Resolusinya 800x480
- Diasumsikan hanya muat 6 tile per baris
- Standar Sixel juga tidak menyediakan cara untuk melakukan query jumlah register warna yang tersedia
- lsix menggunakan ekstensi xterm
- Jika terminal tidak merespons, lsix mengasumsikan VT340 asli dan hanya memakai 16 register warna
Alasan tidak memakai libsixel
- libsixel adalah proyek yang menghasilkan perintah grafik Sixel yang dioptimalkan
- lsix memakai Bash dan ImageMagick, bukan libsixel
- Bash dan ImageMagick tersedia luas sehingga lebih mudah berjalan di mana saja
- Skrip dijaga tetap sederhana agar pengguna mudah memodifikasi dan memperluasnya
- ImageMagick dapat membaca lebih banyak format input dibanding
stb_image yang dipakai img2sixel dari libsixel
- Contoh: xpm, svg, 16-bit png, file sixel
- ImageMagick dapat membaca input dan langsung menulis output Sixel
- libsixel mungkin lebih cepat, tetapi untuk menampilkan daftar direktori sederhana, ImageMagick juga sudah cukup cepat
Referensi
1 komentar
Komentar di Hacker News
Jika, seperti saya, sulit memakai terminal tanpa tmux, branch Sixel yang sebelumnya eksperimental akhirnya digabung sekitar 10 bulan lalu
Sekarang Anda bisa membangun tmux mainline dengan
--enable-sixeldan memakai tool sepertilsixdi dalam tmuxKalau penasaran apakah terminal atau terminal multiplexer favorit Anda mendukung Sixel, lihat situs "Are We Sixel Yet"
https://github.com/tmux/tmux/commit/dfbc6b1888c110cf0ade66f2...
https://www.arewesixelyet.com
Jika ingin mengubah workflow, menurut saya pengalaman default-nya jauh lebih baik daripada tmux
Fitur-fitur yang biasanya harus ditambahkan dengan plugin eksternal dan skrip konfigurasi rumit sudah tersedia secara default, dan stabilitas serta performanya juga jauh lebih baik
https://zellij.dev/
Bisa jelaskan kenapa itu menjadi tool wajib dalam workflow, dan kenapa bisa juga wajib untuk pekerjaan saya?
Apakah ini perubahan semacam membawa window manager bertipe stacking ke tmux dibanding pendekatan tiling saat ini? Atau sekadar membuat grafis terminal menjadi lebih baik? Apakah saya benar-benar salah paham?
Kalau hanya membuat grafis lebih baik, saya kurang paham kenapa tmux harus mendukungnya; sepertinya sisi terminal emulator seperti Gnome Terminal yang lebih penting. Mungkin keduanya memang diperlukan, tapi saya kira tmux cukup meneruskannya saja
brew?Fitur yang paling saya suka di repositori ini adalah direktori
README.md.dIni ide yang cukup bagus, dan sepertinya
.mdbisa dihilangkan sajaDengan begitu, cukup
cat READMEsaja gambarnya bisa tampil apa adanyaMenggunakan
"\e[c"untuk mendeteksi dukungan Sixel secara otomatishttps://github.com/hackerb9/lsix/blob/3a431793a747df3f934051...
"\e[c"adalah "send device attributes"https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-F...
Idenya keren, tapi tidak berfungsi di PuTTY/KiTTY
Saat menjalankan
$ lsix, muncul error bahwa terminal tidak melaporkan dukungan grafis Sixel, dan menyarankan memakai terminal yang mendukung Sixel sepertixterm -ti vt340atau meminta pembuat terminal menambahkan dukunganGambar tunggal bisa diuji dengan
convert foo.jpg -geometry 800x480 sixel:-, dan jika terminal benar-benar mendukungnya, diminta melaporkan bug ke http://github.com/hackerb9/lsix/issuesKode atribut perangkat ditampilkan sebagai
^[[?6cSayang sekali. Padahal pasti cukup keren. Apakah ada terminal Windows open-source yang mendukung Sixel? Kebanyakan yang terlihat hanya untuk Cygwin atau WSL, dan sulit menemukan yang murni untuk Windows
Cross-platform dan mendukung grafis Sixel
https://github.com/wez/wezterm
Di keluarga yang mirip, ada juga timg: https://github.com/hzeller/timg
iTerm2 untuk MacOS punya fitur serupa bawaan, dan bebannya di sisi server lebih kecil
Alih-alih merender gambar menjadi Sixel di server dengan banyak library gambar, seluruh gambar di-encode sebagai base64 dan dikirim ke klien, lalu klien menentukan format gambar dan merendernya secara lokal di terminal
https://iterm2.com/documentation-images.html
Di Linux, saya memakai skrip
imgcattanpa modifikasi apa punTentu jauh lebih cepat daripada konversi dengan ImageMagick, tetapi untuk sementara saya juga menambahkan
lsixke direktoribinPerlu berhati-hati saat menjalankannya di direktori yang tidak tepercaya
Terutama hal-hal yang mem-parsing gambar seperti PDF bisa berbahaya seperti tool lain, dan saat memakai ImageMagick perlu lebih waspada
Jika saya membuka folder unduhan yang tidak tepercaya dengan Gnome Files, lalu ia menampilkan dan karena itu mem-parsing gambar-gambar di dalamnya, apakah itu isu keamanan yang perlu diperhatikan?
Saya mengira hal seperti JavaScript di dalam PDF bisa menjadi masalah, tetapi tidak menyangka pratinjau sederhana pun berbahaya
Terminal yang dipakai harus mendukung grafis Sixel
https://github.com/dheera/python-termgraphics
Akan menarik jika library ini dimodifikasi agar mendukungnya sebagai jalur fallback
TERM=xterm256-colorpasti kompatibel… benar, kan? batuk gnome-terminal batukfzf menyediakan dukungan gambar Sixel eksperimental di panel pratinjau sejak 0.44.0
Tidak dapat digunakan di Windows
https://github.com/junegunn/fzf/releases/tag/0.44.0
fzf --preview='fzf-preview.sh {}'fzf --preview 'convert {} -geometry 800x480 sixel:-'Ini juga memerlukan instalasi ImageMagick