32 comments

[ 3.6 ms ] story [ 110 ms ] thread
This is pretty awesome. I'm surprised that you can get such a detailed and responsive image with just different characters. Very cool.
Please add encryption (on by default), sound, and hook this up to PGP so that it can be skype for hackers (and I don't mean just crackers, I mean in the most general sense)

Just in case it wasn't clear - I think this is awesome.

Hack it up with existing software. Shunt the output across the network with ssh, perhaps into a shared tmux session. That takes care of text chat too. (Of course libcaca kills the tmux session, so you might have to drop the frame-rate or keep the tmux panes small).

If you want to keep it hacky and horrible, have each side also set up pulseaudio and use it's networking capabilities over ssh to make each others computers the sink for your microphones. Or use existing proper VoIP software, if you want to be practical and boring.

MPlayer can also do this. Something like this should work as an example:

  $ mplayer tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0 -fps 15 -vo caca
For the record, that's not pure terminal (it opens up another window). This project works even in a bare vterm. I'd love to see this work over ssh.
It will draw an X11 window if there is an X display. Unset DISPLAY and it will render in the terminal: $ DISPLAY= mplayer ...

Updated command for clarity (might want to fullscreen your terminal with this):

    $ DISPLAY= mplayer tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0 -fps 15 -vo caca
Sweet, I didn't realize that. Sadly, the result flashes on and off and is essentially unusable for me (either in xterm or a TTY on Slackware64 14.0). I can tell it's working, though.

This also seems to work over ssh, though, which is cool.

Add the -quiet option to mplayer.
That fixed it. Thanks.
I can confirm it works fine at a raw terminal, even on Linux TTY. You might have to unset DISPLAY as recommended in the other comment.

One big tip for that mode of mplayer, use the 'd' key to switch dithering modes. Keep switching until you get to Floyd-Steinberg for the best quality (IMHO).

I've just given it a go, I look lush. I tried changing the width and height but it came out the same size, I think I will have to play around with it.
Forget looking at my ugly face, how do I watch movies in my terminal?
You're in luck:

  $ mplayer -vo caca my-movie.mp4
> Forget looking at my ugly face, how do I watch movies in my terminal?

Everything looks beautiful when rendered in ASCII.

You can change VLC's output target to the terminal. From what I understand it's only written single-threaded so it lags horribly.
The submitted program, and the mplayer incantations in the threads, are the most delightful things I've seen all day.
Interesting - I just made something exactly like this (screenshot looks exactly the same): https://github.com/billyeh/termchat! I even had to publish a Node package to do it (pixelr).

Except it's got a chat function with other users as well :)

OK, now how can I make this loopback such that this is what the people I'm talking to on google hangouts sees?

EDIT: duh, hangouts has a "share window" feature .. this is awesome!

Cool. You can do it also with `vlc` and the `-V aa` (ascii) or `-V caca` (colored ascii) video output in the console.

Can play any videos or stream the webcam:

    vlc -V aa file.avi
    vlc -V aa v4l2:///dev/video0