color-banner
Built on the shoulders of FIGlet (Glenn Chappell & Ian Chai, 1991),
pyfiglet (Christopher Jones, Stefano Rivera, Peter Waller), and
Calligraphy (GeopJr / Gregor "gregorni" Niehl).
Licensed under Apache 2.0.
Render text as colorful 24-bit figlet ASCII banners in the terminal.
Designed for CI/CD pipelines, shell startup screens, and BBS-style splash screens.
Requirements
- Python 3.11+
- pyfiglet ≥ 1.0.2 — installed automatically as a dependency
- A 24-bit colour terminal — required for gradients to render correctly; most modern terminal emulators (iTerm2, GNOME Terminal, Windows Terminal, kitty, Alacritty, etc.) support this; classic xterm and some CI log viewers do not
base64 (GNU coreutils or macOS built-in) — only needed for the --export feature; not required for normal use
Install
From PyPI:
uv tool install color-banner
From source (local development):
git clone https://github.com/EntropyWorks/color-banner
cd color-banner
uv tool install --editable .
The editable install means code changes take effect immediately without reinstalling.
To reinstall after pulling updates: uv tool install --editable . again, or
uv tool uninstall color-banner then reinstall.
Usage
color-banner TEXT [options]
font options:
-f, --font FONT figlet font name or 3-digit number (default: slant)
--list-fonts [FILTER] list fonts; use 'readable' to filter to clean-rendering fonts
--all render banner for every font (numbered header before each)
--width N terminal width for line-wrapping (default: 80; 0 = never wrap)
color options (mutually exclusive):
--palette NAME built-in palette: neon sunset ocean fire ice rainbow
--gradient HEX [HEX …] 2–8 hex color stops e.g. --gradient '#ff0080' '#00d4ff'
--direction DIR gradient direction: lr|tb|bt|diag (default: lr)
output options:
--save FILE write ANSI escape file (cat-able); parent dirs auto-created
--save-all DIR save a banner per font into DIR as NNN-fontname.ans
--export FILE write self-contained shell function (.sh)
--function-name NAME function name for --export (default: show_banner)
--no-color plain text, no ANSI codes
info:
--list-palettes print palette names and hex stops
-v, --version show version and exit
Examples
# print to terminal
color-banner "Fox and Dog" --palette neon --direction tb
# widen the canvas to avoid line-wrapping with large fonts
color-banner "Fox and Dog" --palette sunset --width 0
# save a cat-able ANSI file (parent directories created automatically)
color-banner "Deploy v2" --palette fire --direction diag --save .ci/banners/splash.ans
cat .ci/banners/splash.ans
# export a portable shell function for CI pipelines
color-banner "Deploy v2" --palette fire --export splash.sh
bash splash.sh
# custom hex gradient, diagonal sweep
color-banner "Hello" --gradient "#ff0080" "#7b2fff" "#00d4ff" --direction diag
# plain figlet text, no color (pipe-safe)
color-banner "Hello" --font ogre --no-color
# list all built-in palettes
color-banner --list-palettes
Fonts
pyfiglet ships 571 fonts. Use --list-fonts to browse them:
# all fonts with 3-digit index numbers
color-banner --list-fonts
# only the ~514 fonts that render cleanly on a standard terminal
color-banner --list-fonts readable
Font numbers are stable — you can use them instead of the name with --font:
# these are equivalent
color-banner "Hello" --font slant
color-banner "Hello" --font 432
Preview every font at once
# print all banners to stdout
color-banner "Hello" --all --palette neon
# save every font as a numbered .ans file for offline browsing
color-banner "Hello" --palette neon --save-all ./font-preview
ls font-preview/
# 001-1943____.ans 002-1row.ans 003-3-d.ans …
cat font-preview/432-slant.ans
Embedding in a CI pipeline
Generate the splash once and commit the .sh file:
color-banner "🚀 Deploying" --palette sunset --export .ci/splash.sh
Then in your pipeline script:
source .ci/splash.sh
show_banner
Gallery
Showcase
All fonts
Each section below shows all six built-in palettes rendered with that font.
Click a font name to expand.
Note: This is a small sample of the 571 bundled fonts — many others produce
great results too. Not every font works well with color-banner; some render
cleanly only with uppercase input, and others may produce garbled output
regardless. Use --list-fonts readable to get a pre-filtered list of fonts
that tend to render reliably. (Work is ongoing to improve the readability
filter so it catches more edge cases, including uppercase-only fonts.)
ansi_regular
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
ansi_shadow
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
bigmono12
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
bigmono9
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
bloody
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
delta_corps_priest_1
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
dos_rebel
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
double_blocky
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
electronic
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
elite
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
future
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
mono12
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
mono9
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
pagga
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
smmono12
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
smmono9
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
thick
→ left to right
↓ top to bottom
↑ bottom to top
⤢ diagonal
License
Apache 2.0 — see LICENSE, NOTICE, and CREDITS.md.
Credits
The rendering engine is pyfiglet by Peter Waller,
a pure-Python port of FIGlet — the original ASCII art renderer
created by Glenn Chappell and Ian Chai in 1991. The 571 bundled fonts and the .flf font
format originate from the FIGlet project.
The concept and design are inspired by
Calligraphy by GeopJr,
originally by Gregor "gregorni" Niehl.
See CREDITS.md for full details and NOTICE for the
third-party attribution notices required by Apache 2.0.