Chafa: Terminal Graphics for the 21st Century
github.com
github.com
I can't even wrap my head around trying to in-place rotate a bitmap in C without pulling my hair out. This guy must do it in his sleep.
I'm not sure why people expose themselves to something as bad and ugly in this day and age.
Even in 2016 you could use ffmpeg on a sixel-aware terminal like mintty or xterm: check https://www.youtube.com/watch?v=IkUTkqctP28
ffmpeg is a dependency of mplayer, but ffmpeg on it's own can't transcode or reinterpret video as ASCII. The reason for the exercise is only to show that video and graphics can be displayed on the command line within the limitations of the command line, namely, text only.
I do that everyday lol
> What you have liked to is nothing of the sort and merely opening of a window within the command prompt on a local machine
I don't think you understand: sixels work IN BAND, meaning ssh will transmit the full video flux "after" it's converted into sixels (it's a little more complicated than that, but I'm trying to say don't expect a SYN/ACK outside of ssh own), which will then be rendered on the remote terminal into pictures upon reception.
It's just like doing 'cat' on a remote file: the content will be transmitted regardless, just at different speeds depending on your available bandwith
> Why bother to do that when you're sitting locally at the machine with access to all the GUI applications?
I prefer the terminal, it's more efficient.
>I do that everyday lol
Unconvincing. lol
If you tried to transmit video using the sixel protocol over ssh, you will experience bandwidth issues and immediately fail.
>>What you have liked to is nothing of the sort and merely opening of a window within the command prompt on a local machine
>I don't think you understand: sixels work IN BAND, meaning ssh will transmit the full video flux after it's converted into sixels, which will then be rendered on the remote terminal into pictures upon reception. It's just like doing 'cat' on a remote file
This will not work.
"Sixel is broken because the emulation behavior depends on the font size, thus theoretically can't be supported by terminals that don't have the concept of pixel size (e.g. a detached tmux). Sixel is broken because it cannot be supported by tmux with side-by-side panes. Sixel's palette-based approach is also a terrible legacy, practically unable to transfer photos."[1]
[1] https://gitlab.freedesktop.org/terminal-wg/specifications/-/...
Even abstracting away your incomplete understanding of how sixels work, have you considered the possibility I may have access to way more bandwidth than you? (and I most likely do)
> This will not work.
Yes it does.
I have written lots of sixel code (I've yet to see any of yours), tried to explain you the failure in your reasoning, yet you still don't believe me, then you deny the reality of my lived sixel experience with... a biased quote?
Whatever. Have it your way. I'm out.
For sixels to be displayed, the terminal must have support for them, and most terminals don't support sixels, like Windows Terminal. xterm has some support, but only 16 colors. But xterm is otherwise an exceptionally feature-poor terminal. I don't think anyone uses xterm unless there is no other option.
While sixels are a very old standard, lack of significant adoption and a code base that is notoriously buggy means that more often than not, the ability to display sixels just isn't there, and on the rare occasion that it is, artifacts are extremely common.
ASCII, otoh, is supported by all terminals. Now, granted, no one wants to watch a video converted into text, but this isn't the point, which is merely a method to display something on the command line, and in the case of ASCII, every command line, every terminal, everywhere and always. mplayer is not dependent on the client, so any remote client can run it remotely from the server. sixel support is the opposite; the client must have support for sixels to be displayed.
> I'm not sure why people expose themselves to something as bad and ugly in this day and age.
> I don't think you understand
> Even abstracting away your incomplete understanding of how sixels work
> I have written lots of sixel code (I've yet to see any of yours)
> tried to explain you the failure in your reasoning
FWIW, all these arguments are ad hominem fallacies indicating invalid and otherwise faulty reasoning.
The subset of usable characters (glyphs) roughly defines how accurate the picture can be represented: if all you have is - and _ and you want to represent an horizontal pipe, it'll be ugly.
Of course it's more complicated than that, but caca uses ascii, while chafa uses a larger unicode range.
The example is illustrated in picture on https://github.com/csdvrx/derasterize where the left is the original basicidea.c using only unicode halfblocks, and the right has more candidate of different shapes.
Derasterize lets you select the width of the range you want to use, to improve encoding time say for video - but ideally, you would be able to test that whatever font you are using contains the glyphs you want.
The thing about sixel is it's only supported on old DEC glass terminals, xterm with a non-default configuration, mintty, and several emulators that are fairly unlikely to be preinstalled anywhere. So I struggle to imagine a scenario outside of the novelty of playing video media in a terminal where you'd use sixel for playing video over either a dedicated streaming API (raw video stream, networked X, VNC, waypipe) or accessing media over a networked filesystem (e.g. sshfs, which I regularly use to watch videos).
Images are a different matter, where the compromise makes more sense. Juxtaposing images with terminal output is a nifty feature. But the (IMO limited) utility of programs like caca and chafa is being "universal enough" that I can write a script that vomits a jpeg to some vague common denominator standard and it'll probably work for all my coworkers using a smorgasbord of emulators.
Uh, no?
Just start xterm (say from another xterm) with the correct flag. Sixels are also supported on the BSD console.
The lack of support in the likes of gnome-terminal is a willful and ugly political decision that I've already documented.
> Images are a different matter, where the compromise makes more sense.
Indeed, I love to do remote gnuplots
> I can write a script that vomits a jpeg to some vague common denominator standard and it'll probably work for all my coworkers using a smorgasbord of emulators.
This is the idea of tmux-sixel https://github.com/csdvrx/sixel-tmux : intercept sixels sequences and, if your terminal doesn't support it (or if you use the scrollback buffer, to save or RAM), render a unicode representation instead (like Chafa), but if it does, pass through the original sixel sequence.
Which one? Stop putting every BSD as a single entity.
Chafa 1.8: Terminal graphics with a side of everything - https://news.ycombinator.com/item?id=28548120 - Sept 2021 (23 comments)
I don't exactly remember how that works. There is the alternate screen buffer:
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-T...
Maybe there was also a special sync terminal escape code or so.
Googling for it, it seems some other terminals implement this as well.
https://sw.kovidgoyal.net/kitty/protocol-extensions/
The intention is to document them well enough that other terminal emulators can implement them (which some have).
Among those is a graphics protocol, which is actually (optionally) used by chafa. Another is a keyboard protocol extension: which has been implemented by a number of editors and other terminals: notably neovim, kakoune, helix, wezterm, and foot.