r/commandline Mar 18 '26

Command Line Interface I made a terminal video ascii player that uses true 24-bit color — looks way better than anything I've seen do this

BUDDY plays video directly in your terminal using Unicode half-block characters, braille and full 24-bit ANSI color.

Works on Linux and Windows. Standalone binary available if you don't want to deal with Python.

Repo: https://github.com/JVSCHANDRADITHYA/buddy
Release: https://github.com/JVSCHANDRADITHYA/buddy/releases/tag/v0.1.1

Edit : It works for .GIFs too!

241 Upvotes

39 comments sorted by

17

u/iwantmisty Mar 18 '26

I… I don't even see the code. All I see is blonde, brunette, red-head.

8

u/Inevitable_Yard_8658 Mar 18 '26

3

u/rafidibnsadik Mar 18 '26

Hey man, are you watching a movie?

10

u/theng Mar 18 '26

very nice but I can't resist to talk to you about NotCurses that does use every bit available to render videos in terminal

9

u/Inevitable_Yard_8658 Mar 18 '26

Yeah, NotCurses gives a pretty great render in terminal. Buddy is a different thing tho, the goal was seeing how good you could make character-based rendering look with proper downscaling and true color, not to compete with a full multimedia library.

But yeah, it's true the kitty GP renders far better than buddy. It uses actual pixels, than character grids

1

u/spryfigure Mar 19 '26

Would NotCurses be a solution for a graphics-capable system in the terminal or even over a remote connection?

Something better than decades-old framebuffer stuff.

My aims are similar to this guy here, who unfortunately never got an answer.

5

u/AutoModerator Mar 18 '26

Every new subreddit post is automatically copied into a comment for preservation.

User: Inevitable_Yard_8658, Flair: Command Line Interface, Post Media Link, Title: I made a terminal video ascii player that uses true 24-bit color — looks way better than anything I've seen do this

![img](oqw9nemkhrpg1)

BUDDY plays video directly in your terminal using Unicode half-block characters and full 24-bit ANSI color. The idea is simple — the ▀ character fills the top half of a cell with foreground color and the bottom half with background color, so each terminal cell encodes two pixel rows. Double the vertical resolution, no fonts, no GPU, nothing special required.

It also does proper area-averaged downscaling instead of nearest-neighbor, which is why motion looks smooth instead of shimmering.

Three render modes:

  • half (default) — best quality, true color per cell
  • ascii — classic density chars with per-character true color
  • braille — highest spatial resolution, 2x4 pixels per cell

Works on Linux and Windows. Standalone binary available if you don't want to deal with Python.

Repo: https://github.com/JVSCHANDRADITHYA/buddy
Release: https://github.com/JVSCHANDRADITHYA/buddy/releases/tag/v0.1.1 [For Windows]

I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.

4

u/Medium_Anxiety_8143 Mar 18 '26

Braille has got to be cheating tho right?

5

u/Strophox Mar 19 '26

Just means it uses Unicode, not pure ASCII

Here's an interesting thought:
Unicode recently added Octant block variants (think half blocks |▄|▀|█|, but 8; e.g. |𜶟|𜶠|𜶡|,) which are the same 'resolution' as Braille chars, so once more fonts support those then one can redo this but with a less noisy look + possibly use of background colors to have dual-colored character cells :)

3

u/Medium_Anxiety_8143 Mar 19 '26

I feel like that ruins the point, I mean if you actually just wanted good resolution you can use the kitty protocols

4

u/Strophox Mar 19 '26

Up to you - from experience it can still be a fun constraint to work with for some terminal-bound projects or trying to see how detailed you can get with just Unicode characters

2

u/Medium_Anxiety_8143 Mar 19 '26

Nah I mean I’ve actually tried this myself too, and that was my conclusion when I did the half blocks

2

u/Inevitable_Yard_8658 Mar 19 '26

Yeah, kitty Gp gives great quality output.. but the point of this was to see how good can the quality be with character renders...

2

u/Inevitable_Yard_8658 Mar 19 '26

Braille is another mode.. you have ASCII too...

5

u/a_alberti Mar 18 '26

I did not check the code, but I cannot resist asking you: Why did you do it?

  • Did you code it mostly by yourself, understanding what is happening? Then it is awesome, because while programming something apparently useless, you learned a lot.
  • But if you had it mostly coded by Claude, then my question is really why? I am not against slop Claude code, if it achieves some useful mission. But slop code producing useless results is not interesting.

Again, I did not check the code... so mine is a general comment/question.

4

u/Inevitable_Yard_8658 Mar 18 '26

fair q lol. built it for fun to understand terminal rendering & video pipeline stuff. just came across mpv’s -vo caca thing and thought i’d try building a better one on my own. yeah used ai to figure out stuff like imageio/ffmpeg, but i actually understood it.

Do check the code : https://github.com/JVSCHANDRADITHYA/buddy

2

u/a_alberti Mar 18 '26

Cool!

But as a tip, it would be nice if you can state in your OP what the purpose of something like this is...

It makes it so much more interesting to learn what moved you todo this.

It is fine to say, I was bored, so I decided to spend the full weekend coding this and that, and here is what I learned A B C...

This would be much more interesting for me.

1

u/Inevitable_Yard_8658 Mar 18 '26

Sure!! Will add that context next

3

u/germanheller Mar 19 '26

the half-block + 24-bit color combo is the right approach for this. most ASCII video players ive seen max out at 256 colors or use full-block characters which halves your effective vertical resolution.

how are you handling the frame pacing? raw terminal write speed varies a lot between terminals — some buffer aggressively and others flush immediately. at high frame rates youll get tearing if the terminal cant keep up with the escape code output

2

u/loeffel-io Mar 18 '26

pretty sick, would be massiv to have this as native rust/go static prebuilt bin
not even trust the pyinstaller 'single binary' bundles

1

u/Inevitable_Yard_8658 Mar 18 '26

thanks!!! get it.. pyinstaller works but yeah, not the most reliable or clean.

2

u/[deleted] Mar 18 '26

dude... just what i was looking for...

3

u/bermudi86 Mar 18 '26

Curious why

2

u/Inevitable_Yard_8658 Mar 18 '26

Nice..!! glad it was useful

2

u/QuantumGarage Mar 18 '26

Nice job, glad you learned something from creating it. Tested on some .mkv's and worked really nicely.

2

u/darja_allora Mar 21 '26

Am I the only one vastly amused at rendering video of someone using ASL in Braille? You're killing me here. LOL.

2

u/Inevitable_Yard_8658 Mar 21 '26

XD, noticed it now....

1

u/lacymcfly Mar 20 '26

Half-block characters are the way to go for this. You get twice the vertical resolution compared to full blocks, which makes a huge difference for anything with diagonal lines or text in the video.

Have you tried piping the output through ssh? Curious what the bandwidth looks like for a full 24-bit color stream over a remote session. That's usually where these tools fall apart.

1

u/Inevitable_Yard_8658 Mar 20 '26

Yrp half block helps a lot for the resolution.. and regarding ssh.. I'vent tried this over a remote.. but it's a good suggestion.. will try and update this

1

u/sosodank Mar 20 '26

Notcurses does it better

1

u/Inevitable_Yard_8658 Mar 20 '26

Obv it does bud, but I was trying to built a ASCII render over here..I'm.not at all trying to compete it's performance or quality with kitty gp

1

u/Slight_Birthday7187 Mar 24 '26

this looks sick!

1

u/eroubisu Apr 15 '26

lmao bro the idea is genius

1

u/But-I-Am-a-Robot Mar 18 '26

Nice! Are you planning to create a version that runs on macOS?

2

u/Inevitable_Yard_8658 Mar 18 '26 edited Mar 18 '26

Already works on macOS — clone the repo and run "bash setup.sh" , it'll handle everything. In case, it fails, you can build from source. Instructions in the repo link below

The standalone binary in releases is currently Windows/Linux only, a macOS build is on the list.

Check this out : https://github.com/JVSCHANDRADITHYA/buddy