BundledCreativeVersion 4.0.0

ASCII Art with Hermes Agent: Banners, Cowsay, Boxes, and More

ASCII art: pyfiglet, cowsay, boxes, image-to-ascii.

Written by Neura Market from the official Hermes Agent documentation for Ascii Art. Commands, paths, and version numbers are reproduced from the source unchanged.

Read the official documentation

ASCII art is a quick way to add personality to terminal output, documentation, or chat messages. This skill bundles nine different tools, from classic text banners to image conversion, so you can generate the right kind of art without hunting for a separate package. Whether you need a bold title for a project, a decorative border for a message, or a custom piece for a specific subject, this guide shows you how to get it done with local commands or free APIs, no API keys required.

What it does

This skill gives you a toolbox of ASCII art generators, each suited to a different job. You can render text as large banners using pyfiglet (571 fonts) or the asciified API (250+ fonts), wrap messages in speech bubbles with cowsay, frame text with decorative borders using boxes, add color effects with TOIlet, convert images to ASCII art, fetch pre-made art from the web, and even generate QR codes or weather reports as ASCII. When none of the existing tools fit, you can fall back to generating custom art with a palette of Unicode characters, following size and monospace rules.

The tools are a mix of local CLI programs and free REST APIs. The local ones need installation, but the APIs work with just curl, so you can use them from any terminal without extra setup. This makes the skill flexible: you can start with the APIs for quick tasks, then install the local tools when you need more control or offline capability.

Before you start

  • Platform support: The skill works on Linux, macOS, and Windows. However, the setup commands differ. The source shows sudo apt install for Debian/Ubuntu and brew install for macOS. On Windows, you would use the equivalent package manager or install method, but the source does not specify one.
  • Python and pip: For pyfiglet, you need Python and pip. The install command uses --break-system-packages to avoid conflicts with system-managed Python environments, which is common on newer Linux distributions.
  • curl: Several tools rely on curl, which is preinstalled on most systems. If it is missing, install it via your package manager.
  • No API keys: All remote services are free and do not require authentication.
  • Permissions: Installing packages with sudo requires administrative rights. If you lack sudo, consider using the remote API alternatives or a user-level install (not covered in the source).

Tool 1: Text Banners (pyfiglet, local)

pyfiglet is a Python library that renders text as large ASCII art banners. It comes with 571 built-in fonts, so you can match the style to the occasion. This is the go-to tool when you need a banner locally and have Python available.

Setup

pip install pyfiglet --break-system-packages -q

Usage

python -m pyfiglet "YOUR TEXT" -f slant
python -m pyfiglet "TEXT" -f doom -w 80    # Set width
python -m pyfiglet --list_fonts             # List all 571 fonts

The first command renders your text in the slant font. The second uses doom and sets the output width to 80 characters, which is useful for fitting the banner into a fixed-width terminal. The third lists all available fonts, so you can browse before choosing.

Recommended fonts

StyleFontBest for
Clean & modernslantProject names, headers
Bold & blockydoomTitles, logos
Big & readablebigBanners
Classic bannerbanner3Wide displays
CompactsmallSubtitles
CyberpunkcyberlargeTech themes
3D effect3-dSplash screens
GothicgothicDramatic text

Tips

  • Preview 2-3 fonts and let the user pick their favorite
  • Short text (1-8 chars) works best with detailed fonts like doom or block
  • Long text works better with compact fonts like small or mini

Tool 2: Text Banners (asciified API, remote, no install)

The asciified API is a free REST service that converts text to ASCII art using 250+ FIGlet fonts. It returns plain text directly, so you can display it immediately without parsing JSON. Use this when pyfiglet is not installed or as a quick alternative from any terminal with curl.

Usage (via terminal curl)

# Basic text banner (default font)
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello+World"

# With a specific font
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Slant"
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Doom"
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Star+Wars"
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=3-D"
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=Hello&font=Banner3"

# List all available fonts (returns JSON array)
curl -s "https://asciified.thelicato.io/api/v2/fonts"

The first command fetches a banner for "Hello World" with the default font. The next five show how to specify a font; note that font names are case-sensitive and spaces are encoded as +. The last command lists all fonts as a JSON array, which you can use to find exact names.

Tips

  • URL-encode spaces as + in the text parameter
  • The response is plain text ASCII art, no JSON wrapping, ready to display
  • Font names are case-sensitive; use the fonts endpoint to get exact names
  • Works from any terminal with curl, no Python or pip needed

Tool 3: Cowsay (Message Art)

Cowsay is a classic utility that wraps text in a speech bubble with an ASCII character. It is perfect for adding a playful comment to a terminal session or a log message. The default character is a cow, but you can choose from over 50 characters, including dragons, penguins, and skeletons.

Setup

sudo apt install cowsay -y    # Debian/Ubuntu
# brew install cowsay         # macOS

Usage

cowsay "Hello World"
cowsay -f tux "Linux rules"       # Tux the penguin
cowsay -f dragon "Rawr!"          # Dragon
cowsay -f stegosaurus "Roar!"     # Stegosaurus
cowthink "Hmm..."                  # Thought bubble
cowsay -l                          # List all characters

The first command produces the default cow. The next three use the -f flag to select a character: tux for the Linux penguin, dragon, and stegosaurus. cowthink uses a thought bubble instead of a speech bubble. The last command lists all available characters.

Available characters (50+)

beavis.zen, bong, bunny, cheese, daemon, default, dragon, dragon-and-cow, elephant, eyes, flaming-skull, ghostbusters, hellokitty, kiss, kitty, koala, luke-koala, mech-and-cow, meow, moofasa, moose, ren, sheep, skeleton, small, stegosaurus, stimpy, supermilker, surgery, three-eyes, turkey, turtle, tux, udder, vader, vader-koala, www

Eye/tongue modifiers

cowsay -b "Borg"       # =_= eyes
cowsay -d "Dead"       # x_x eyes
cowsay -g "Greedy"     # $_$ eyes
cowsay -p "Paranoid"   # @_@ eyes
cowsay -s "Stoned"     # *_* eyes
cowsay -w "Wired"      # O_O eyes
cowsay -e "OO" "Msg"   # Custom eyes
cowsay -T "U " "Msg"   # Custom tongue

These flags change the cow's eyes or tongue. For example, -b gives Borg-style =_= eyes, -d gives dead x_x eyes, and -g gives greedy $_$ eyes. You can also set custom eyes with -e and a custom tongue with -T. The -e and -T flags take the eye or tongue string as an argument, followed by the message.

Tool 4: Boxes (Decorative Borders)

Boxes draws decorative ASCII art borders or frames around any text. It has over 70 built-in designs, from simple lines to elaborate patterns like stone, parchment, or even a cat. This is useful for highlighting a message, creating a section divider, or making a comment stand out in code.

Setup

sudo apt install boxes -y    # Debian/Ubuntu
# brew install boxes         # macOS

Usage

echo "Hello World" | boxes                    # Default box
echo "Hello World" | boxes -d stone           # Stone border
echo "Hello World" | boxes -d parchment       # Parchment scroll
echo "Hello World" | boxes -d cat             # Cat border
echo "Hello World" | boxes -d dog             # Dog border
echo "Hello World" | boxes -d unicornsay      # Unicorn
echo "Hello World" | boxes -d diamonds        # Diamond pattern
echo "Hello World" | boxes -d c-cmt           # C-style comment
echo "Hello World" | boxes -d html-cmt        # HTML comment
echo "Hello World" | boxes -a c               # Center text
boxes -l                                       # List all 70+ designs

The first command pipes "Hello World" into boxes, which wraps it in the default box. The -d flag selects a specific design, such as stone, parchment, cat, dog, unicornsay, diamonds, c-cmt (C-style comment), or html-cmt (HTML comment). The -a c flag centers the text within the box. The last command lists all available designs.

Combine with pyfiglet or asciified

python -m pyfiglet "HERMES" -f slant | boxes -d stone
# Or without pyfiglet installed:
curl -s "https://asciified.thelicato.io/api/v2/ascii?text=HERMES&font=Slant" | boxes -d stone

You can pipe the output of pyfiglet or the asciified API into boxes to create a banner inside a decorative frame. The first command uses pyfiglet locally; the second uses the remote API, so it works even if pyfiglet is not installed.

Tool 5: TOIlet (Colored Text Art)

TOIlet is similar to pyfiglet but adds ANSI color effects and visual filters. It is great for terminal eye candy, making banners more vibrant. However, the color codes may not render in all contexts, such as plain text files or some chat platforms.

Setup

sudo apt install toilet toilet-fonts -y    # Debian/Ubuntu
# brew install toilet                      # macOS

Usage

toilet "Hello World"                    # Basic text art
toilet -f bigmono12 "Hello"            # Specific font
toilet --gay "Rainbow!"                 # Rainbow coloring
toilet --metal "Metal!"                 # Metallic effect
toilet -F border "Bordered"             # Add border
toilet -F border --gay "Fancy!"         # Combined effects
toilet -f pagga "Block"                 # Block-style font (unique to toilet)
toilet -F list                          # List available filters

The first command renders basic text art. The -f flag selects a font, such as bigmono12 or pagga (a block-style font unique to toilet). The --gay flag applies rainbow coloring, and --metal gives a metallic effect. The -F flag applies filters, like border to add a border. You can combine filters, as in -F border --gay. The last command lists all available filters.

Filters

crop, gay (rainbow), metal, flip, flop, 180, left, right, border

Note: toilet outputs ANSI escape codes for colors, works in terminals but may not render in all contexts (e.g., plain text files, some chat platforms).

Tool 6: Image to ASCII Art

Convert images (PNG, JPEG, GIF, WEBP) to ASCII art. This is useful for turning logos, photos, or diagrams into text-based representations that can be embedded in terminals or documents.

Option A: ascii-image-converter (recommended, modern)

# Install
sudo snap install ascii-image-converter
# OR: go install github.com/TheZoraiz/ascii-image-converter@latest
ascii-image-converter image.png                  # Basic
ascii-image-converter image.png -C               # Color output
ascii-image-converter image.png -d 60,30         # Set dimensions
ascii-image-converter image.png -b               # Braille characters
ascii-image-converter image.png -n               # Negative/inverted
ascii-image-converter https://url/image.jpg      # Direct URL
ascii-image-converter image.png --save-txt out   # Save as text

The first command converts a local image to ASCII art. The -C flag enables color output, -d sets the dimensions (width,height), -b uses Braille characters for finer detail, -n inverts the image, and you can pass a URL directly. The --save-txt flag saves the output to a text file named out (the source does not specify the extension).

Option B: jp2a (lightweight, JPEG only)

sudo apt install jp2a -y
jp2a --width=80 image.jpg
jp2a --colors image.jpg              # Colorized

jp2a is a lightweight alternative that only handles JPEG images. The --width flag sets the output width, and --colors adds color.

Tool 7: Search Pre-Made ASCII Art

Search curated ASCII art from the web. Use terminal with curl. This is the fastest way to get a recognizable cat, rocket, or dragon without generating it yourself.

Source A: ascii.co.uk (recommended for pre-made art)

Large collection of classic ASCII art organized by subject. Art is inside HTML <pre> tags. Fetch the page with curl, then extract art with a small Python snippet.

URL pattern: https://ascii.co.uk/art/{subject}

Step 1, Fetch the page:

curl -s 'https://ascii.co.uk/art/cat' -o /tmp/ascii_art.html

Step 2, Extract art from pre tags:

import re, html
with open('/tmp/ascii_art.html') as f:
    text = f.read()
arts = re.findall(r'<pre[^>]*>(.*?)</pre>', text, re.DOTALL)
for art in arts:
    clean = re.sub(r'<[^>]+>', '', art)
    clean = html.unescape(clean).strip()
    if len(clean) > 30:
        print(clean)
        print('\n---\n')

The first command downloads the page for a subject (here, cat) to a temporary file. The Python script reads that file, finds all <pre> blocks, strips HTML tags, unescapes entities, and prints any art longer than 30 characters, separated by ---.

Available subjects (use as URL path):

  • Animals: cat, dog, horse, bird, fish, dragon, snake, rabbit, elephant, dolphin, butterfly, owl, wolf, bear, penguin, turtle
  • Objects: car, ship, airplane, rocket, guitar, computer, coffee, beer, cake, house, castle, sword, crown, key
  • Nature: tree, flower, sun, moon, star, mountain, ocean, rainbow
  • Characters: skull, robot, angel, wizard, pirate, ninja, alien
  • Holidays: christmas, halloween, valentine

Tips:

  • Preserve artist signatures/initials, important etiquette
  • Multiple art pieces per page, pick the best one for the user
  • Works reliably via curl, no JavaScript needed

Source B: GitHub Octocat API (fun easter egg)

Returns a random GitHub Octocat with a wise quote. No auth needed.

curl -s https://api.github.com/octocat

Tool 8: Fun ASCII Utilities (via curl)

These free services return ASCII art directly, great for fun extras.

QR Codes as ASCII Art

curl -s "qrenco.de/Hello+World"
curl -s "qrenco.de/https://example.com"

The first command generates a QR code for the text "Hello World". The second generates a QR code for a URL. The output is ASCII art that you can scan with a phone.

Weather as ASCII Art

curl -s "wttr.in/London"          # Full weather report with ASCII graphics
curl -s "wttr.in/Moon"            # Moon phase in ASCII art
curl -s "v2.wttr.in/London"       # Detailed version

The first command fetches a full weather report for London with ASCII graphics. The second shows the moon phase as ASCII art. The third uses the v2 endpoint for a more detailed report.

Tool 9: LLM-Generated Custom Art (Fallback)

When tools above don't have what's needed, generate ASCII art directly using these Unicode characters:

Character Palette

Box Drawing: ╔ ╗ ╚ ╝ ║ ═ ╠ ╣ ╦ ╩ ╬ ┌ ┐ └ ┘ │ ─ ├ ┤ ┬ ┴ ┼ ╭ ╮ ╰ ╯

Block Elements: ░ ▒ ▓ █ ▄ ▀ ▌ ▐ ▖ ▗ ▘ ▝ ▚ ▞

Geometric & Symbols: ◆ ◇ ◈ ● ○ ◉ ■ □ ▲ △ ▼ ▽ ★ ☆ ✦ ✧ ◀ ▶ ◁ ▷ ⬡ ⬢ ⌂

Rules

  • Max width: 60 characters per line (terminal-safe)
  • Max height: 15 lines for banners, 25 for scenes
  • Monospace only: output must render correctly in fixed-width fonts

These rules ensure the art fits in a standard terminal without wrapping and displays correctly in monospace fonts. Use the palette to compose custom designs, such as a logo or a scene, when no existing tool matches.

Decision Flow

  1. Text as a banner → pyfiglet if installed, otherwise asciified API via curl
  2. Wrap a message in fun character art → cowsay
  3. Add decorative border/frame → boxes (can combine with pyfiglet/asciified)
  4. Art of a specific thing (cat, rocket, dragon) → ascii.co.uk via curl + parsing
  5. Convert an image to ASCII → ascii-image-converter or jp2a
  6. QR code → qrenco.de via curl
  7. Weather/moon art → wttr.in via curl
  8. Something custom/creative → LLM generation with Unicode palette
  9. Any tool not installed → install it, or fall back to next option

This flow gives you a quick path from need to tool. Start at the top and work down until you find a tool that is installed or that you are willing to install. The remote APIs are always available, so you can often skip installation entirely.

When not to use it

The source does not list explicit exclusions, but consider the context. ASCII art is text-based, so it is not suitable for high-resolution graphics or when color fidelity matters. TOIlet's ANSI colors may not render in plain text files or some chat platforms, so avoid it there. For image conversion, jp2a only handles JPEG, so use ascii-image-converter for other formats. If you need a specific font not in pyfiglet or asciified, you might need to generate custom art manually.

Limits and gotchas

  • Installation dependencies: Local tools require package installation, which may need sudo and an internet connection. If you cannot install, use the remote APIs.
  • Font availability: pyfiglet has 571 fonts, asciified has 250+, but not all fonts are available in both. Check the respective lists.
  • Case sensitivity: asciified font names are case-sensitive; use the fonts endpoint to get exact names.
  • URL encoding: When using asciified, encode spaces as + in the text parameter.
  • ANSI colors: TOIlet outputs ANSI escape codes, which may not display in all contexts.
  • Image formats: jp2a only supports JPEG; use ascii-image-converter for PNG, GIF, WEBP, and URLs.
  • Size limits for custom art: Keep lines under 60 characters and heights under 15 (banners) or 25 (scenes) to stay terminal-safe.
  • Etiquette: When using pre-made art from ascii.co.uk, preserve artist signatures.

What pairs with this

The related skill is excalidraw, which is for creating diagrams and drawings. While ASCII art is text-based, excalidraw can produce more complex visual diagrams that you might want to convert to ASCII for embedding in text interfaces. Together, they cover both quick text art and structured visual content.

Skills the docs pair this with

More Creative skills