Skip to main content

Colorful figlet ASCII banners for terminals, CICD pipelines, and shell splash screens

Project description

color-banner

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 CICD 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 (once published):

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

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

neon sunset ocean
ansi_regular neon lr ansi_regular sunset lr ansi_regular ocean lr
fire ice rainbow
ansi_regular fire lr ansi_regular ice lr ansi_regular rainbow lr

↓ top to bottom

neon sunset ocean
ansi_regular neon tb ansi_regular sunset tb ansi_regular ocean tb
fire ice rainbow
ansi_regular fire tb ansi_regular ice tb ansi_regular rainbow tb

↑ bottom to top

neon sunset ocean
ansi_regular neon bt ansi_regular sunset bt ansi_regular ocean bt
fire ice rainbow
ansi_regular fire bt ansi_regular ice bt ansi_regular rainbow bt

⤢ diagonal

neon sunset ocean
ansi_regular neon diag ansi_regular sunset diag ansi_regular ocean diag
fire ice rainbow
ansi_regular fire diag ansi_regular ice diag ansi_regular rainbow diag
ansi_shadow

→ left to right

neon sunset ocean
ansi_shadow neon lr ansi_shadow sunset lr ansi_shadow ocean lr
fire ice rainbow
ansi_shadow fire lr ansi_shadow ice lr ansi_shadow rainbow lr

↓ top to bottom

neon sunset ocean
ansi_shadow neon tb ansi_shadow sunset tb ansi_shadow ocean tb
fire ice rainbow
ansi_shadow fire tb ansi_shadow ice tb ansi_shadow rainbow tb

↑ bottom to top

neon sunset ocean
ansi_shadow neon bt ansi_shadow sunset bt ansi_shadow ocean bt
fire ice rainbow
ansi_shadow fire bt ansi_shadow ice bt ansi_shadow rainbow bt

⤢ diagonal

neon sunset ocean
ansi_shadow neon diag ansi_shadow sunset diag ansi_shadow ocean diag
fire ice rainbow
ansi_shadow fire diag ansi_shadow ice diag ansi_shadow rainbow diag
bigmono12

→ left to right

neon sunset ocean
bigmono12 neon lr bigmono12 sunset lr bigmono12 ocean lr
fire ice rainbow
bigmono12 fire lr bigmono12 ice lr bigmono12 rainbow lr

↓ top to bottom

neon sunset ocean
bigmono12 neon tb bigmono12 sunset tb bigmono12 ocean tb
fire ice rainbow
bigmono12 fire tb bigmono12 ice tb bigmono12 rainbow tb

↑ bottom to top

neon sunset ocean
bigmono12 neon bt bigmono12 sunset bt bigmono12 ocean bt
fire ice rainbow
bigmono12 fire bt bigmono12 ice bt bigmono12 rainbow bt

⤢ diagonal

neon sunset ocean
bigmono12 neon diag bigmono12 sunset diag bigmono12 ocean diag
fire ice rainbow
bigmono12 fire diag bigmono12 ice diag bigmono12 rainbow diag
bigmono9

→ left to right

neon sunset ocean
bigmono9 neon lr bigmono9 sunset lr bigmono9 ocean lr
fire ice rainbow
bigmono9 fire lr bigmono9 ice lr bigmono9 rainbow lr

↓ top to bottom

neon sunset ocean
bigmono9 neon tb bigmono9 sunset tb bigmono9 ocean tb
fire ice rainbow
bigmono9 fire tb bigmono9 ice tb bigmono9 rainbow tb

↑ bottom to top

neon sunset ocean
bigmono9 neon bt bigmono9 sunset bt bigmono9 ocean bt
fire ice rainbow
bigmono9 fire bt bigmono9 ice bt bigmono9 rainbow bt

⤢ diagonal

neon sunset ocean
bigmono9 neon diag bigmono9 sunset diag bigmono9 ocean diag
fire ice rainbow
bigmono9 fire diag bigmono9 ice diag bigmono9 rainbow diag
bloody

→ left to right

neon sunset ocean
bloody neon lr bloody sunset lr bloody ocean lr
fire ice rainbow
bloody fire lr bloody ice lr bloody rainbow lr

↓ top to bottom

neon sunset ocean
bloody neon tb bloody sunset tb bloody ocean tb
fire ice rainbow
bloody fire tb bloody ice tb bloody rainbow tb

↑ bottom to top

neon sunset ocean
bloody neon bt bloody sunset bt bloody ocean bt
fire ice rainbow
bloody fire bt bloody ice bt bloody rainbow bt

⤢ diagonal

neon sunset ocean
bloody neon diag bloody sunset diag bloody ocean diag
fire ice rainbow
bloody fire diag bloody ice diag bloody rainbow diag
delta_corps_priest_1

→ left to right

neon sunset ocean
delta_corps_priest_1 neon lr delta_corps_priest_1 sunset lr delta_corps_priest_1 ocean lr
fire ice rainbow
delta_corps_priest_1 fire lr delta_corps_priest_1 ice lr delta_corps_priest_1 rainbow lr

↓ top to bottom

neon sunset ocean
delta_corps_priest_1 neon tb delta_corps_priest_1 sunset tb delta_corps_priest_1 ocean tb
fire ice rainbow
delta_corps_priest_1 fire tb delta_corps_priest_1 ice tb delta_corps_priest_1 rainbow tb

↑ bottom to top

neon sunset ocean
delta_corps_priest_1 neon bt delta_corps_priest_1 sunset bt delta_corps_priest_1 ocean bt
fire ice rainbow
delta_corps_priest_1 fire bt delta_corps_priest_1 ice bt delta_corps_priest_1 rainbow bt

⤢ diagonal

neon sunset ocean
delta_corps_priest_1 neon diag delta_corps_priest_1 sunset diag delta_corps_priest_1 ocean diag
fire ice rainbow
delta_corps_priest_1 fire diag delta_corps_priest_1 ice diag delta_corps_priest_1 rainbow diag
dos_rebel

→ left to right

neon sunset ocean
dos_rebel neon lr dos_rebel sunset lr dos_rebel ocean lr
fire ice rainbow
dos_rebel fire lr dos_rebel ice lr dos_rebel rainbow lr

↓ top to bottom

neon sunset ocean
dos_rebel neon tb dos_rebel sunset tb dos_rebel ocean tb
fire ice rainbow
dos_rebel fire tb dos_rebel ice tb dos_rebel rainbow tb

↑ bottom to top

neon sunset ocean
dos_rebel neon bt dos_rebel sunset bt dos_rebel ocean bt
fire ice rainbow
dos_rebel fire bt dos_rebel ice bt dos_rebel rainbow bt

⤢ diagonal

neon sunset ocean
dos_rebel neon diag dos_rebel sunset diag dos_rebel ocean diag
fire ice rainbow
dos_rebel fire diag dos_rebel ice diag dos_rebel rainbow diag
double_blocky

→ left to right

neon sunset ocean
double_blocky neon lr double_blocky sunset lr double_blocky ocean lr
fire ice rainbow
double_blocky fire lr double_blocky ice lr double_blocky rainbow lr

↓ top to bottom

neon sunset ocean
double_blocky neon tb double_blocky sunset tb double_blocky ocean tb
fire ice rainbow
double_blocky fire tb double_blocky ice tb double_blocky rainbow tb

↑ bottom to top

neon sunset ocean
double_blocky neon bt double_blocky sunset bt double_blocky ocean bt
fire ice rainbow
double_blocky fire bt double_blocky ice bt double_blocky rainbow bt

⤢ diagonal

neon sunset ocean
double_blocky neon diag double_blocky sunset diag double_blocky ocean diag
fire ice rainbow
double_blocky fire diag double_blocky ice diag double_blocky rainbow diag
electronic

→ left to right

neon sunset ocean
electronic neon lr electronic sunset lr electronic ocean lr
fire ice rainbow
electronic fire lr electronic ice lr electronic rainbow lr

↓ top to bottom

neon sunset ocean
electronic neon tb electronic sunset tb electronic ocean tb
fire ice rainbow
electronic fire tb electronic ice tb electronic rainbow tb

↑ bottom to top

neon sunset ocean
electronic neon bt electronic sunset bt electronic ocean bt
fire ice rainbow
electronic fire bt electronic ice bt electronic rainbow bt

⤢ diagonal

neon sunset ocean
electronic neon diag electronic sunset diag electronic ocean diag
fire ice rainbow
electronic fire diag electronic ice diag electronic rainbow diag
elite

→ left to right

neon sunset ocean
elite neon lr elite sunset lr elite ocean lr
fire ice rainbow
elite fire lr elite ice lr elite rainbow lr

↓ top to bottom

neon sunset ocean
elite neon tb elite sunset tb elite ocean tb
fire ice rainbow
elite fire tb elite ice tb elite rainbow tb

↑ bottom to top

neon sunset ocean
elite neon bt elite sunset bt elite ocean bt
fire ice rainbow
elite fire bt elite ice bt elite rainbow bt

⤢ diagonal

neon sunset ocean
elite neon diag elite sunset diag elite ocean diag
fire ice rainbow
elite fire diag elite ice diag elite rainbow diag
future

→ left to right

neon sunset ocean
future neon lr future sunset lr future ocean lr
fire ice rainbow
future fire lr future ice lr future rainbow lr

↓ top to bottom

neon sunset ocean
future neon tb future sunset tb future ocean tb
fire ice rainbow
future fire tb future ice tb future rainbow tb

↑ bottom to top

neon sunset ocean
future neon bt future sunset bt future ocean bt
fire ice rainbow
future fire bt future ice bt future rainbow bt

⤢ diagonal

neon sunset ocean
future neon diag future sunset diag future ocean diag
fire ice rainbow
future fire diag future ice diag future rainbow diag
mono12

→ left to right

neon sunset ocean
mono12 neon lr mono12 sunset lr mono12 ocean lr
fire ice rainbow
mono12 fire lr mono12 ice lr mono12 rainbow lr

↓ top to bottom

neon sunset ocean
mono12 neon tb mono12 sunset tb mono12 ocean tb
fire ice rainbow
mono12 fire tb mono12 ice tb mono12 rainbow tb

↑ bottom to top

neon sunset ocean
mono12 neon bt mono12 sunset bt mono12 ocean bt
fire ice rainbow
mono12 fire bt mono12 ice bt mono12 rainbow bt

⤢ diagonal

neon sunset ocean
mono12 neon diag mono12 sunset diag mono12 ocean diag
fire ice rainbow
mono12 fire diag mono12 ice diag mono12 rainbow diag
mono9

→ left to right

neon sunset ocean
mono9 neon lr mono9 sunset lr mono9 ocean lr
fire ice rainbow
mono9 fire lr mono9 ice lr mono9 rainbow lr

↓ top to bottom

neon sunset ocean
mono9 neon tb mono9 sunset tb mono9 ocean tb
fire ice rainbow
mono9 fire tb mono9 ice tb mono9 rainbow tb

↑ bottom to top

neon sunset ocean
mono9 neon bt mono9 sunset bt mono9 ocean bt
fire ice rainbow
mono9 fire bt mono9 ice bt mono9 rainbow bt

⤢ diagonal

neon sunset ocean
mono9 neon diag mono9 sunset diag mono9 ocean diag
fire ice rainbow
mono9 fire diag mono9 ice diag mono9 rainbow diag
pagga

→ left to right

neon sunset ocean
pagga neon lr pagga sunset lr pagga ocean lr
fire ice rainbow
pagga fire lr pagga ice lr pagga rainbow lr

↓ top to bottom

neon sunset ocean
pagga neon tb pagga sunset tb pagga ocean tb
fire ice rainbow
pagga fire tb pagga ice tb pagga rainbow tb

↑ bottom to top

neon sunset ocean
pagga neon bt pagga sunset bt pagga ocean bt
fire ice rainbow
pagga fire bt pagga ice bt pagga rainbow bt

⤢ diagonal

neon sunset ocean
pagga neon diag pagga sunset diag pagga ocean diag
fire ice rainbow
pagga fire diag pagga ice diag pagga rainbow diag
smmono12

→ left to right

neon sunset ocean
smmono12 neon lr smmono12 sunset lr smmono12 ocean lr
fire ice rainbow
smmono12 fire lr smmono12 ice lr smmono12 rainbow lr

↓ top to bottom

neon sunset ocean
smmono12 neon tb smmono12 sunset tb smmono12 ocean tb
fire ice rainbow
smmono12 fire tb smmono12 ice tb smmono12 rainbow tb

↑ bottom to top

neon sunset ocean
smmono12 neon bt smmono12 sunset bt smmono12 ocean bt
fire ice rainbow
smmono12 fire bt smmono12 ice bt smmono12 rainbow bt

⤢ diagonal

neon sunset ocean
smmono12 neon diag smmono12 sunset diag smmono12 ocean diag
fire ice rainbow
smmono12 fire diag smmono12 ice diag smmono12 rainbow diag
smmono9

→ left to right

neon sunset ocean
smmono9 neon lr smmono9 sunset lr smmono9 ocean lr
fire ice rainbow
smmono9 fire lr smmono9 ice lr smmono9 rainbow lr

↓ top to bottom

neon sunset ocean
smmono9 neon tb smmono9 sunset tb smmono9 ocean tb
fire ice rainbow
smmono9 fire tb smmono9 ice tb smmono9 rainbow tb

↑ bottom to top

neon sunset ocean
smmono9 neon bt smmono9 sunset bt smmono9 ocean bt
fire ice rainbow
smmono9 fire bt smmono9 ice bt smmono9 rainbow bt

⤢ diagonal

neon sunset ocean
smmono9 neon diag smmono9 sunset diag smmono9 ocean diag
fire ice rainbow
smmono9 fire diag smmono9 ice diag smmono9 rainbow diag
thick

→ left to right

neon sunset ocean
thick neon lr thick sunset lr thick ocean lr
fire ice rainbow
thick fire lr thick ice lr thick rainbow lr

↓ top to bottom

neon sunset ocean
thick neon tb thick sunset tb thick ocean tb
fire ice rainbow
thick fire tb thick ice tb thick rainbow tb

↑ bottom to top

neon sunset ocean
thick neon bt thick sunset bt thick ocean bt
fire ice rainbow
thick fire bt thick ice bt thick rainbow bt

⤢ diagonal

neon sunset ocean
thick neon diag thick sunset diag thick ocean diag
fire ice rainbow
thick fire diag thick ice diag thick rainbow diag

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

color_banner-0.2.0.tar.gz (7.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

color_banner-0.2.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file color_banner-0.2.0.tar.gz.

File metadata

  • Download URL: color_banner-0.2.0.tar.gz
  • Upload date:
  • Size: 7.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for color_banner-0.2.0.tar.gz
Algorithm Hash digest
SHA256 414965a1c7eedcab2ad5e38d3f4a43657cbaf410e610e1edc5c50c23807797f5
MD5 8e6e5a1167e5e9272da12122529543fe
BLAKE2b-256 b31087e980c736d76c8ab7a0f8ea77c0470c3aec152f4de3820037b0863923a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for color_banner-0.2.0.tar.gz:

Publisher: publish.yml on EntropyWorks/color-banner

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file color_banner-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: color_banner-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 20.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for color_banner-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e0c4c5463bc4e5c61f9114c143bce299ce9ece2ba22f3fa89689e48cedb38967
MD5 ace6161165449928eeb875f58c248bf5
BLAKE2b-256 716d92a1866e2037decba6bf38c02ad631681b72e839b1f094348d73cedec7ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for color_banner-0.2.0-py3-none-any.whl:

Publisher: publish.yml on EntropyWorks/color-banner

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page