microsoft / terminal

The new Windows Terminal and the original Windows console host, all in the same place!
MIT License
95.09k stars 8.24k forks source link

Feature Request: sixel graphics support #448

Closed migueldeicaza closed 1 month ago

migueldeicaza commented 5 years ago

Would like to see Sixel support in the Terminal, this is the standard used to show graphics in the console.

Sixel is part of the original DEC specification for doing graphics in terminals and has been re-popularized in recent years for doing graphics on the command line, in particular by Pythonistas doing data science.

The libsixel library provides an encoder but is also a great introduction to the subject (better than the Wikipedia page):

https://github.com/saitoha/libsixel

artcancrotp commented 4 months ago

sixel support is rapidly becoming as mandatory as ANSI escape sequence support. Please do not allow Terminal to become as obsolete as the old Windows console host by not implementing sixel.

anderspitman commented 4 months ago

As far as I know, terminal emulators are the only platform capable of running cross platform, statically linked, mouse driven apps that can even be run remotely over ssh.

The main feature missing from this platform is a universally implemented graphics API. I've spent a bit of time researching this, and I believe implementing at least one of sixel, kitty, or iTerm2 would be well worth the effort.

piranna commented 4 months ago

IS there something similar to sixel, but for audio? I think it would makes sense over SSH connections...

DHowett commented 4 months ago

IS there something similar to sixel, but for audio? I think it would makes sense over SSH connections...

Similar, insofar as that representing anything even moderately complex will require extreme downsampling? Absolutely there is: DECPS.

rgpublic commented 4 months ago

@piranna : Off-topic here, but apart from what @DHowett mentioned, you probably have more success to stream audio via a pulseaudio TCP connection which you can tunnel via SSH. :bulb:

piranna commented 4 months ago

@rgpublic I know it's offtopic, sorry for that, but hoped you could guide me. Good to know something exists, thank you to both of you :-)

marcIhm commented 4 months ago

I hope this i the central issue for image display, so I am following this. Unfortunately there seem to be many other issues which essentially request the same feature, so that its relevance might be underestimated ...

zadjii-msft commented 4 months ago

@j4james How stale is this: https://github.com/microsoft/terminal/issues/448#issuecomment-937751369 branch? With eyes on #1173 in the immediate term, I wanna see just how far away that would be from merging in a full passthrough world

j4james commented 4 months ago

@zadjii-msft I actually just got my sixel branch merged with main in the past week or so. And with the latest progress on #1173 I was going to ask whether it might be a good time to create a PR for it. Worst case I thought we could put it behind a feature flag until the Windows Terminal side is ready.

That said, I've still got a lot of cleaning up to do before the code is presentable, so it may be a while before I can create a PR. Also, I should note that it only has a GDI renderer - I was hoping somebody else would handle the Atlas implementation, because I know very little about how that works.

zadjii-msft commented 4 months ago

NOW IS THE TIME

zadjii-msft commented 4 months ago

Sorry I got a little excited but yes - I think this would be the perfect time to start merging that in. We can absolutely merge this all piece by piece. We can work on merging the conhost sixel implementation while passthrough is getting ready. Then we can get the Atlas sixel implementation in in post.

lhecker commented 4 months ago

I was hoping somebody else would handle the Atlas implementation, because I know very little about how that works.

Once I have an idea of what you need, I'll give you an implementation the same day. :) FYI ideally, I need a per-sixel-texture ID so that I can cache the CPU-side texture as a GPU-side one between frames. But it will also work sufficiently well without that, at least in the beginning.

TheXenocide commented 3 months ago

This is my favorite GitHub notification in today's catch-up. So excited to see this make it in 😁

eabase commented 3 months ago

And this FFmpeg-SIXEL is crazy cool. IDK why I am so excited for running videos in the terminal... or maybe because then we can get graphics output directly from python scripts in both REPL and from posh CLI.
What's the ETA for this?

kasper93 commented 3 months ago

I would rather recommend mpv. And you can already play movies in the terminal with mpv --vo=tct --really-quiet <file>, obviously this is not what can be achieved with --vo=sixel or --vo=kitty, they are both supported in mpv and will just work ones they hit Terminal. image

mominshaikhdevs commented 1 month ago

since #17510 is merged, maybe close this issue?