Bangen is an ASCII banner renderer built on pyfiglet, rich, and Pillow.
It gives you a fast live TUI, a composable effect pipeline, JSON presets, and export support for TXT, PNG, and GIF.
Built for terminal art, title cards, intros, and animated text that still feels sharp when exported.
- Live split-screen TUI with export modal
- Static and animated banner rendering
- Transparent
PNGand animated transparentGIFexport - Plain
TXTexport with exact ASCII output - CLI export progress with percentage, elapsed time, ETA, and status text
- Typer-powered CLI help with cleaner option formatting and examples
- Multi-stop gradients with horizontal or vertical interpolation
- Built-in presets plus user presets stored in
~/.bangen/presets/ - Effect library grouped into motion, visual, temporal, distortion, and signature tiers
- CLI workflows for rendering, exporting, listing assets, and loading presets
bangen "SYSTEM READY" --font slant --gradient "#7c3aed:#06b6d4" --effect glow --effect wavegit clone https://github.com/programmersd21/bangen.git
cd bangen
python -m venv .venv
source .venv/bin/activate
pip install -e .π― Or download the prebuilts:
https://github.com/programmersd21/bangen/releases/latest
- Python
3.11+ - Pillow is included in the base install
Render a basic banner:
bangen "HELLO"Render with custom styling:
bangen "HELLO" --font slant --gradient "#ff00ff:#00ffff"Render with effects:
bangen "HELLO" --effect wave --effect glow --effect pulse --speed 1.5 --amplitude 2.0Run screensaver mode:
bangen "HELLO" --screensaverExport a GIF:
bangen "HELLO" --effect wave --effect glow --export-gif banner.gif --gif-duration 3 --gif-fps 20Launch the editor:
bangenControls:
ββnavigate fields and effectsββadjust font or numeric settingsEnteredit or toggle the selected fieldlload a saved preset or load from a custom preset fileeopen the export dialogssave the current presetqquit
The effect selector is windowed, so you can move through the full library without overflowing the controls panel.
Press e inside the TUI to open the exporter.
- Toggle
GIF,PNG, andTXT - Edit the output path directly
- Adjust GIF-only
durationandfps - Auto-update the file extension when the format changes
- Show live export progress in the modal with percentage, elapsed time, ETA, and stage text
- Confirm overwrite when the target file already exists
The CLI is powered by Typer, so bangen --help now presents a cleaner option list and examples while keeping the same flag-based workflow.
bangen "HELLO"
bangen "HELLO" --font slant --gradient "#ff00ff:#00ffff"
bangen "HELLO" --gradient "#ff0000:#ffff00:#00ff00" --gradient-dir verticalbangen --list-effects
bangen --list-fonts
bangen --list-presetsbangen --preset cyberpunk "HELLO"
bangen --preset matrix "SYSTEM"
bangen --preset-file ./my_preset.json "HELLO"
bangen "HELLO" --ai "retro CRT hacker title"bangen "HELLO" --export-txt banner.txt
bangen "HELLO" --export-png banner.png
bangen "HELLO" --effect wave --effect glow --export-gif banner.gif --gif-duration 3 --gif-fps 20CLI exports show a live progress bar with percentage, elapsed time, ETA, and the current export stage.
GitHub Actions builds standalone binaries for Windows, macOS, and Linux and uploads them to the matching GitHub release.
- asset names follow the project version from
pyproject.toml - release files include the platform in the filename
- the release workflow expects a tag matching the project version, for example
v2.2.1 - release builds explicitly bundle the TUI package, effect modules,
pyfigletfont assets, Rich, and Pillow runtime pieces so the standalone app works outside a Python environment
Turns any banner text into a full-terminal animated screensaver. It auto-fits the text to the current terminal size, switches between effect scenes, and randomizes speed, amplitude, frequency, and scene duration.
bangen "SYSTEM READY" --screensaver
bangen "NIGHT MODE" --screensaver --screensaver-duration 60
bangen "SIGNAL" --screensaver --screensaver-seed 42Notes:
Ctrl+Cexits screensaver mode--font,--gradient, presets, and AI prompts still influence the starting style- effect selection is managed by the screensaver engine, so
--effectis not the main control surface in this mode - export flags are ignored while screensaver mode is running
Useful for temporal effects such as wipe and typewriter:
bangen "HELLO" --effect wipe --animate --animate-duration 5wavevertical_wavebouncescrolldriftshake
gradient_shiftpulserainbow_cycleglowflickerscanline
typewriterfade_inwipestaggerloop_pulse
glitchchromatic_aberrationnoise_injectionmeltwarpfragment
matrix_rainfireelectricvhs_glitchneon_signwave_interferenceparticle_disintegration
Effects are order-sensitive and composable:
banner.apply(build_effect("wave", config=cfg))
banner.apply(build_effect("chromatic_aberration", config=cfg))
banner.apply(build_effect("pulse", config=cfg))Common style stacks:
cyberpunk:glitch+chromatic_aberration+pulseneon:glow+pulseorneon_signmatrix:matrix_rain+typewriterretro:scanline+flickerfire:fire+meltelectric:electric+glow
Use colon-separated hex stops:
#ff00ff:#00ffff
#ff0000:#ffff00:#00ff00
Use --gradient-dir vertical for top-to-bottom interpolation.
Saved presets live under:
~/.bangen/presets/*.json
You can create these files manually, save them from the TUI with s, or save from the CLI with --save-preset NAME.
- TUI: press
l, then chooseSAVEDorFILE - CLI:
--preset NAMEloads from built-ins or~/.bangen/presets/ - CLI:
--preset-file PATHloads a preset JSON from any path without saving it
{
"name": "my_preset",
"font": "ansi_shadow",
"gradient": "#ff00ff:#00ffff",
"gradient_direction": "horizontal",
"effects": ["wave", "glow", "pulse"],
"effect_config": {
"wave": { "speed": 1.8, "amplitude": 2.0, "frequency": 0.7 },
"pulse": { "speed": 1.2, "min_brightness": 0.55 },
"glow": {}
}
}Notes:
name,font, andgradientshould always be providedeffectsorder mattersspeed,amplitude, andfrequencymap to sharedEffectConfig- any additional keys inside
effect_configare passed to the effect constructor
bangen/
βββ effects/
β βββ base.py
β βββ distortion.py
β βββ motion.py
β βββ signature.py
β βββ temporal.py
β βββ utils.py
β βββ visual.py
βββ export/
β βββ exporter.py
β βββ gif.py
β βββ png.py
β βββ txt.py
βββ gradients/
βββ presets/
βββ rendering/
βββ tui/
βββ app.py
βββ export_dialog.py
βββ preset_dialog.py
- Animated exports look best when you keep effect stacks readable instead of maxing out distortion-heavy combinations.
- Temporal effects such as
wipeandtypewriterare best previewed with--animatein the terminal before exporting. --screensaveris designed for live terminal playback, not export generation.
MIT. See LICENSE.

