Cinematic ANSI banners for Rust CLI/TUI.
- Grid-first rendering pipeline
- Bundled DOS Rebel (Figlet) font + load any
.flf - Truecolor / 256-color / no-color output with auto-detect
- Gradients, pixel fill, dithering, shadows, edge shading, light sweeps, frames/borders
- Named style and palette presets
- Fluent builder API
[dependencies]
tui-banner = "0.1.4"use tui_banner::{Align, Banner, Style};
fn main() -> Result<(), tui_banner::BannerError> {
let banner = Banner::new("RUST CLI")?
.style(Style::NeonCyber)
.render();
println!("{banner}");
Ok(())
}use tui_banner::{Align, Banner, ColorMode, Fill, Gradient, Palette};
fn main() -> Result<(), tui_banner::BannerError> {
let banner = Banner::new("RUST CLI")?
.color_mode(ColorMode::TrueColor)
.gradient(Gradient::vertical(Palette::from_hex(&[
"#00E5FF", // cyan
"#3A7BFF", // blue
"#E6F6FF", // ice
])))
.fill(Fill::Keep)
.dither()
.targets("░▒▓")
.checker(3)
.align(Align::Center)
.padding(1)
.render();
println!("{banner}");
Ok(())
}use tui_banner::{Align, Banner, Frame, FrameStyle, Gradient, Palette, Style};
fn main() -> Result<(), tui_banner::BannerError> {
let frame = Frame::new(FrameStyle::Rounded).gradient(Gradient::horizontal(
Palette::from_hex(&["#00E5FF", "#7B5CFF", "#FF5AD9"]),
));
let banner = Banner::new("RUST CLI")?
.style(Style::NeonCyber)
.align(Align::Center)
.padding(1)
.frame(frame)
.render();
println!("{banner}");
Ok(())
}use tui_banner::{Align, Banner, Fill, Gradient, Palette};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let banner = Banner::new("RUST CLI")?
.gradient(Gradient::diagonal(Palette::from_hex(&[
"#00E5FF", "#7B5CFF", "#FF5AD9",
])))
.fill(Fill::Keep)
.align(Align::Center)
.padding(1);
banner.animate_sweep(2, None)?;
Ok(())
}Tip: pass Some(Color::Rgb(...)) as the second argument to tint the sweep.
use tui_banner::{Align, Banner, Fill, Gradient, Palette};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let banner = Banner::new("RUST CLI")?
.gradient(Gradient::diagonal(Palette::from_hex(&[
"#00E5FF", "#7B5CFF", "#FF5AD9",
])))
.fill(Fill::Keep)
.align(Align::Center)
.padding(1);
banner.animate_wave(5, None, None)?;
Ok(())
}Tip: pass Some(0.45) and Some(0.3) as the last two arguments to tune wave dim/bright strength.
use tui_banner::{Align, Banner, Fill, Gradient, Palette};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let banner = Banner::new("RUST CLI")?
.gradient(Gradient::diagonal(Palette::from_hex(&[
"#00E5FF", "#7B5CFF", "#FF5AD9",
])))
.fill(Fill::Keep)
.align(Align::Center)
.padding(1);
banner.animate_roll(4)?;
Ok(())
}| Vertical | Horizontal |
|---|---|
![]() |
![]() |
| Diagonal | Apply |
![]() |
![]() |
| Block | Half Block |
|---|---|
![]() |
![]() |
| Light Shade | Char |
![]() |
![]() |
| Checker Stipple | Coarse Halftone |
|---|---|
![]() |
![]() |
| Film Grain | Sparkle Noise |
![]() |
![]() |
Install the CLI (binary name: tui-banner):
Download the prebuilt binary from GitHub Releases and place it on your PATH:
https://github.com/coolbeevip/tui-banner/releases# help
tui-banner
# normal
tui-banner --text "HELLO WORLD"
# style
tui-banner --text "HELLO WORLD" --style neon-cyber
# gradient
tui-banner --text "HELLO WORLD" --gradient diagonal --palette "#00E5FF,#7B5CFF,#FF5AD9"
# frame
tui-banner --text "HELLO WORLD" --frame rounded
tui-banner --text "HELLO WORLD" --frame rounded --frame-gradient horizontal \
--frame-palette "#00E5FF,#7B5CFF,#FF5AD9"
tui-banner --text "HELLO WORLD" --frame double --frame-color "#F59E0B" --padding 2
# animate sweep
tui-banner --text "HELLO WORLD" --animate-sweep 3 --sweep-highlight "#DCEBFF"
tui-banner --text "HELLO WORLD" --animate-sweep 3 --sweep-highlight "#DCEBFF" --sweep-direction horizontal
tui-banner --text "HELLO WORLD" --animate-sweep 3 \
--sweep-direction diagonal-up --sweep-width 0.3 --sweep-intensity 0.9 \
--sweep-softness 2.5 --sweep-center 0.4 --sweep-highlight "#DCEBFF"
# animate wave
tui-banner --text "HELLO WORLD" --animate-wave 3
tui-banner --text "HELLO WORLD" --animate-wave 3 --wave-dim 0.45 --wave-bright 0.3
# animate roll
tui-banner --text "HELLO WORLD" --animate-roll 15Defaults (CLI):
--textis required- Gradient: diagonal
- Palette: #00E5FF, #3A7BFF, #E6F6FF
- Fill: keep
- Dither targets: ░▒▓ (when dither enabled)
- Padding: 1
- Align: center
- Trim vertical: enabled (use
--no-trim-verticalto keep blank rows) - Color mode: truecolor
- Sweep highlight: white
- Frame: none
Tip: --animate-wave keeps glyph positions fixed and adds a breathing, scale-like shimmer.
You can tune it with --wave-dim (darker lows) and --wave-bright (brighter highs).















