r/ASCII

▲ 15 r/ASCII+5 crossposts

flow v0.1.1 is out!

flow v0.1.1 is out

This release is mostly about making the UI work better in more environments while cleaning up a lot of rough edges.

New in this release:

  • Added a new --mini mode that shows only the live graphs. Useful for smaller terminals.
  • Press m to switch between Hero, Compact, Mini and Tiny views without restarting.
  • The dashboard now automatically switches to a smaller layout if your terminal isn't tall enough.
  • Refreshed the UI with cleaner borders, gradients and typography.
  • Added a cleaner help dialog and status bar.
  • Peak throughput now briefly flashes when a new session record is reached.

--tiny also got a pretty big overhaul.

It no longer depends on Bubble Tea or terminal detection, so it now works properly inside tmux #( ), cron jobs, pipes and redirected output. --tiny --no-color now produces plain text with no ANSI escape sequences.

Also fixed:

  • Daily totals not resetting correctly across month/year boundaries.
  • Hangs when network counter reads failed.
  • Config file creation on macOS and Windows.
  • Platform-specific config paths on Linux, macOS and Windows.

If flow has been useful to you, consider sponsoring the project. It helps me dedicate more time to maintaining it and building new features.

A GitHub star, bug report, or even sharing the project is just as appreciated.

https://github.com/programmersd21/flow

https://github.com/sponsors/programmersd21

u/Klutzy_Bird_7802 — 3 hours ago
▲ 510 r/ASCII+10 crossposts

flow: a network monitor for your terminal that actually looks like it belongs in 2026

I got tired of network monitors that look like they were designed for a BBS, so I built flow. It's a real time bandwidth monitor with Braille grid waveforms, spring smoothed numbers, and glowing borders that react to traffic load.

What it does

It shows live download and upload throughput with units that auto scale from B/s up to GB/s. The waveform is a high res Braille grid scrolling at 30fps, and the borders glow brighter as traffic picks up, going from a dark idle state to bright cyan and emerald under load. Numbers are spring interpolated so they glide instead of jumping around. It tracks session peaks, flashing white when you hit a new record, and keeps a running daily total.

There are three views that adapt to your terminal width. Hero is the full dashboard. Compact strips it down to numbers only. Tiny is a single line built for tmux status bars.

Philosophy

If a feature doesn't help you understand your network in under a second, it doesn't make the cut. No CPU panels, no packet counters, no multi pane clutter. Just download and upload throughput, done well.

Usage

flow                        # hero view, auto interface
flow --compact              # numbers only
flow --tiny                 # tmux status bar
flow --json                 # one-shot JSON for scripts
flow --once                 # one-shot plain text

tmux integration

set -g status-right "#(flow --tiny --no-color)"
set -g status-interval 1

Install

go install github.com/programmersd21/flow/cmd/flow@latest

or AUR:

yay -S flow-network-monitor-bin

or homebrew:

brew install programmersd21/flow/flow

Pre-built binaries for Linux, macOS, and Windows (amd64/arm64) are on the releases page.

It works with zero config out of the box. If you want to tweak the refresh rate, history length, or units, there's an optional TOML config at ~/.config/flow/config.toml.

Platform support

It runs on Linux (/proc/net/dev), macOS (sysctl), and Windows (GetIfTable2, no admin needed). Idle CPU stays under 1%.

Links

Source and demo: https://github.com/programmersd21/flow


Would love feedback, especially on the tiny/tmux mode. Curious if the info density is right for people running it in a status bar all day.

u/Klutzy_Bird_7802 — 1 day ago
▲ 105 r/ASCII

ditto: a system-wide ascii keyboard visualizer

Hey everyone, I stumbled upon this subreddit a couple of days ago, and I thought some people here might like what I've made :D

TL;DR:

Ditto is a system-wide ASCII keyboard visualizer that mirrors your live keyboard inputs in real time, even when the terminal isn't in focus. It automatically syncs with your native terminal color scheme for a pretty neat and interactive eye candy.

Attached some sample layouts as well with different color schemes, to show how it would fit into a terminal multiplexer setup that has a code editor, active servers, test suite, etc. Perhaps you might like it :D

I don't want to bloat this post with a bunch of details, so you can check out the repo instead if you wanna know more.

>NOTE: If there's any problems with macOS, I'd SUPER appreciate opening up an issue about it or even a PR. Sadly I don't own a Mac or MacBook... so I had to implement support purely through cross-compilation and documentation.

If you find this cool, I'd appreciate a star ⭐ :)

u/sh4mblesss — 1 day ago
▲ 45 r/ASCII

RogerAI CLI Easter-Egg Screensaver

You can download the CLI yourself and just use it for the screensaver, but I made this cute screensaver on rogerai.fyi , on the real thing there's a few more things happening.

u/RogerAI-fyi — 2 days ago
▲ 93 r/ASCII+5 crossposts

Vibez 0.3.0 out now! TUI Apple Music player for Linux and MacOS - thanks for 100+ stars on GitHub!

Hey!

I've been building vibez, a TUI Apple Music player for Linux and MacOS

v0.3.0 is out today!

Here's what changed:

Play Next

Press Shift+Tab on albums, artists, recommendations, or tracks to insert them right after the currently playing song.

Better queue management

You can now reorder the queue with Shift+↑/↓ (or **Ctrl+↑/↓**). The selection automatically follows the moved track, making queue editing much smoother.

Keyboard shortcut docs

The README and in-app help now document Tab (add to queue), Shift+Tab (play next), and Shift+↑/↓ (move in queue).

More reliable playback

Improved Widevine DRM support for headless playback and macOS, fixing playback issues and CONTENT_UNSUPPORTED/"no DRM" errors in Chrome-based streaming.

Better authentication

Expired Apple Music user tokens are now detected during startup and automatically trigger the re-authentication flow instead of leaving the player stuck on initialization.

Fixes

* Gracefully handle empty Apple Music libraries and Favorites (404 responses now return empty collections instead of failing).
* Fixed equalizer keyboard conflicts, so navigation keys no longer interfere with playback controls while the EQ panel is open.

Install, instructions and more: https://github.com/simonepelosi/vibez

Feedback and issues are very welcome. If you're enjoying vibez, a star on GitHub would mean a lot!

u/pelpsi — 4 days ago
▲ 35 r/ASCII+2 crossposts

Ogloob the Ogre (from the game Warsim)

u/Huw2k8 — 4 days ago
▲ 22 r/ASCII+1 crossposts

From a 2D array exercise to a small .NET library, I ended up creating AsciiSign

u/Yel_99 — 5 days ago
▲ 111 r/ASCII+1 crossposts

eternal rest v2

not sure if any of y'all remember the last glitch of this photo I posted months ago but here's another one I really like

u/lysergic_af — 7 days ago
▲ 61 r/ASCII+1 crossposts

Doom - Terminal image to ASCII using ANSI escape codes and Python 3.14.3

Simple terminal based image to ANSI converter that loads a text file and an image and prints it out using ANSI escape codes. Adapts to the size of the terminal. Requires OpenCV to be installed.

Change lines 10 and 11 to point to any image or text file you would like to use, by default it looks for them in the same directory that the script is run from.

I tried to keep it under 100 lines and still keep all 16 colour codes in it even though only RED is being used for error messages, so doesn't have much in the way of comments and the spacing is a bit cramped.

If you adapt this class for other uses keep in mind that Ansi.RESET will reset the colour to whatever the default terminal colour is and Ansi.HOME will place the cursor at the top left of the visible terminal.

import shutil
from pathlib import Path

import cv2                 # Install with: python -m pip install opencv-python

size = shutil.get_terminal_size()
t_width = size.columns
t_height = size.lines - 1

IMAGE = "doom-1-.gif" # Source: https://doomwiki.org/w/images/4/4b/Doom-1-.gif
TEXT_MSG = "message.txt"    # Source: https://www.classicdoom.com/doominfo.htm

class Ansi:
    GREY            = '\033[90m'
    BRIGHT_RED      = '\033[91m'
    BRIGHT_GREEN    = '\033[92m'
    BRIGHT_YELLOW   = '\033[93m'
    BRIGHT_BLUE     = '\033[94m'
    BRIGHT_MAGENTA  = '\033[95m'
    BRIGHT_CYAN     = '\033[96m'
    BRIGHT_WHITE    = '\033[99m'
    BLACK           = '\033[30m'
    RED             = '\033[31m'
    GREEN           = '\033[32m'
    YELLOW          = '\033[33m'
    BLUE            = '\033[34m'
    MAGENTA         = '\033[35m'
    CYAN            = '\033[36m'
    WHITE           = '\033[39m'
    
    HOME            = '\033[H'
    RESET           = "\033[0m"

    def colour_rgb(pixel_rgb):
        r, g, b = pixel_rgb
        return f"\033[38;2;{r};{g};{b}m"

def get_dimensions(img_w, img_h, terminal_width, terminal_height):
    aspect_ratio = img_h / img_w
    new_w = terminal_width
    new_h = int((new_w * aspect_ratio) / 2)
    if new_h > terminal_height:
        new_h = terminal_height
        new_w = int((new_h * 2) / aspect_ratio)        
    return new_w, new_h

def convert_img_to_ansi(img, msg):
    if not Path(img).exists():
        print(
              f"{Ansi.RED}"
              f"{img} does not exist."
              f"{Ansi.RESET}"
             )
        return

    img = cv2.imread(img)
    if img is None:
        print(f"{Ansi.RED}Failed to load image {img}{Ansi.RESET}")
        return

    rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img_h, img_w = img.shape[:2]
    new_w, new_h = get_dimensions(img_w, img_h, t_width, t_height)
    resized_img = cv2.resize(
                             rgb_img, (new_w, new_h),
                             interpolation=cv2.INTER_AREA
                            )
    lines = []
    counter = 0
    for y in range(new_h):
        current_line = []
        for x in range(new_w):
            pixel_rgb = resized_img[y, x]
            ansi_colour = Ansi.colour_rgb(pixel_rgb)
            character = msg[counter % len(msg)]
            current_line.append(f"{ansi_colour}{character}")
            counter += 1
        lines.append("".join(current_line) + Ansi.RESET)

    for line in lines:
        print(line)

def load_text(text):
    if not Path(text).exists():
        print(f"{Ansi.RED}{text} does not exist.{Ansi.RESET}")
        text = "█"
    else:
        with open(text, "r", encoding="utf-8") as f:
            text = list(f.read().replace("\n", " "))
    return text

def main():
    text = []
    text = load_text(TEXT_MSG)
    convert_img_to_ansi(IMAGE, text)
    input("")
if __name__ == "__main__":
    main()
u/IceFurnace83 — 7 days ago
▲ 513 r/ASCII+1 crossposts

Real-time ASCII shader running on Pi5 with touch

Howdy, this is chartty, a CLI I wrote that live-codes and renders ASCII animations in your terminal, modeled after fragment shader logic.

I'm a creative technologist and new media artist and I love live coding so I have been working on chartty for sometime now as a fun little side project. It's also an endeavor to teach myself how to "program a programming language" on a very high level; this runs on python.

GitHub is below, fully open-sourced

https://github.com/persian-thunder/chartty

u/entro_play — 10 days ago
▲ 298 r/ASCII+1 crossposts

I typed the wrong command into terminal and now im stuck

using halfblock ascii rendering. terminal based. no agenda beyond wondering if I could make a thing

u/glytxh — 9 days ago
▲ 884 r/ASCII

ssh late.sh - a modern BBS you SSH into, now with door games and IRC

Just found this amazing sub :D and decided to share something that I think some of you may like ;) ESPECIALLY the artboard! :)

Quick reminder of what we are: late.sh is a cozy clubhouse inside your terminal, where people can take a break, chill, chat with others all around the globe, listen to music, play some games, or paint on a live artboard :)

ssh late.sh

and you're in. No passwords, no OAuth, no accounts. Your SSH key is your identity.

What's new:

- two new full-scale RPGs: Lateania, our own persistent multiplayer text-world (classes, real combat, loot, bosses), and Rebels in the Sky, the brilliant space-pirate basketball roguelike by ricott1, now playable BBS door-game style inside the clubhouse, with your save following your late.sh account.

https://www.nethack.org/ IS COMING SOON :)

- IRC support, so you can sit in late.sh from whatever client you like. Create a token in ssh late.sh -> Settings -> Account, pass it as the IRC server password, and your nick is your late.sh account. Channels are rooms, DMs work, moderation works. Same chat, your own client.

irc.late.sh, port 6697 (TLS)

- a brand new radio source: live synthwave stations from Nightride FM (Chillsynth, Nightride, Datawave, Spacesynth) with live artist/title, on top of the YouTube booth and the 600+ track CC0/CC-BY library (lofi, ambient, classical). big thanks to nightride.fm and Nightride.FM for the blessing

And everything that was already here:

- full chat: mentions, public and private rooms, DMs, reactions, image previews, icon picker

- music booth: hop in, listen to the community YouTube playlist, submit, vote, skip

- games: sudoku, minesweeper, tetris, snake, nonograms, wordle, rubik, poker, blackjack, chess and more, with leaderboards and badges

- a live shared artboard, r/place but in a TUI (gallery: https://late.sh/gallery)

- shop, bonsai to grow, aquarium, pets, quests and streaks

- news: rss/atom feeds with auto summaries and ASCII thumbnails

- directories that roll up into a live web profile (https://late.sh/profiles)

- voice chat, no browser needed

Still a team effort, still a great vibe. Hop in, take a break ;)

Code: https://github.com/mpiorowski/late-sh
Landing: https://late.sh
Demo: https://late.sh/play
License: FSL-1.1-MIT

u/Bl4ckBe4rIt — 12 days ago
▲ 657 r/ASCII+5 crossposts

3 phases for heavy machinery - Textorio

Hey Automaters!

Really happy with latest upgrades!

+ Got beautifull rivers, ponds, for your pumps!

+ Got skew inserters for diagonal inserting!

+ Got floors for factory improvements!

+ Got 3 phases for your heavy machinery!

And muuuuuuch more!

I wish you a wishlist guys! :)

Textorio demo

u/doncedonce — 13 days ago
▲ 151 r/ASCII+2 crossposts

I built an ASCII shader sandbox

I built an ASCII shader sandbox using react typescript with Claude, it features customizing ASCII shaders like turing pattern, gargantua blackhole, etc. It also has custom glyph ramps, field and animation, color themes and export. You can export it as an embedded html so you can use it on your own code, it also has png export if you want to make a wallpaper.

This is an open-source tool, so if you are interested in contributing or have a shader in mind that you want to add here, just fork it and make a PR and let's build things together, here is the Github Repository:

https://github.com/j-casimiro/ascii-shader-sandbox

I hope you liked it, thank you!

u/Mindless-Driver7775 — 12 days ago