Animation¶
rich-gradient provides animated variants of its core renderables for live terminal demos. They build on rich.live.Live to refresh the console at a steady frame rate while shifting the gradient phase.
AnimatedGradient¶

from rich.console import Console
from rich.markdown import Markdown
from rich_gradient.animated_gradient import AnimatedGradient
console = Console()
markdown = Markdown(
"[b]Animated gradients[/b]\n\n"
"- Run as a context manager\n"
"- Or control start/stop manually\n"
)
with AnimatedGradient(
markdown,
rainbow=True,
console=console,
) as gradient:
console.input("[dim]Press Enter to stop...[/dim]")
Key parameters:
refresh_per_second: desired frame rate for theLiverender loop.repeat_scale: stretch the palette across a wider span before repeating.highlight_words/highlight_regex: identical to the staticGradient.start(),stop(),run(): manual control when you want to integrate with custom event loops.- Defaults honour the global configuration; see Configuration for details.
AnimatedText¶
AnimatedText gives you the same gradient animation on top of Rich Text, with a helper to
swap content while the animation is running.
from time import sleep
from rich_gradient.animated_text import AnimatedText
animated = AnimatedText("Loading...", rainbow=True)
with animated:
sleep(1)
animated.update_text("Almost there...")
sleep(1)
CLI demo:
AnimatedPanel¶

AnimatedPanel wraps the static Panel helper, so it inherits title and subtitle highlighting alongside the animation controls above.
from rich.panel import Panel as RichPanel
from rich_gradient.animated_panel import AnimatedPanel
panel = RichPanel(
"Rainbow [i]AnimatedPanel[/i] in motion",
title="Animated Panel",
padding=(1, 2),
)
animated = AnimatedPanel(
panel,
rainbow=True,
refresh_per_second=40,
)
try:
animated.run()
finally:
animated.stop()
Both animated classes forward console, expand, justify, and color configuration to their static counterparts, making it easy to switch between live demos and static output.