Skip to main content

A gradient generator for the Rich library.

Project description

rich-gradient

Python versions PyPI version PyPI downloads uv badge

gradient example

Purpose

rich-gradient layers smooth foreground and background gradients on top of Rich renderables. It includes a drop-in Text subclass, wrappers for Panel and Rule, gradient-aware Markdown, convenience wrappers for common Rich renderables, animated variants, and utilities for building palettes.

Highlights

  • Works anywhere Rich expects a ConsoleRenderable, including panels, tables, and live updates.
  • Generates color stops automatically or from CSS color names, hex codes, RGB tuples, or rich.color.Color objects.
  • Supports foreground and background gradients, rainbow palettes, and seedable color spectrums.
  • Ships with ready-to-use renderables:
  • AnimatedText, AnimatedGradient, AnimatedPanel, AnimatedRule, and AnimatedMarkdown for live gradient updates.
  • Loads optional JSON configuration from ~/.rich-gradient/config.json, where you can toggle animation globally and customize the default spectrum palette.

What's new in v0.3.12

  • Added an internal cached gradient ramp for Gradient rendering. Foreground and background styles are precomputed per render span and reused across segment lookups.

  • Added benchmark coverage for static gradients, animated frame rendering, long text, and gradient panels.

  • Added gradient convenience constructors for Rich Table, Tree, Columns, Pretty, and Syntax, each with a runnable module demo.

  • Changed gradient segment rendering is shared across Gradient, Rule, and AnimatedRule for more consistent cell-aware output.

  • Changed CLI functionality moved to rich-gradient-cli; this package is the core renderable library.

  • Added RGB tuple color stops and stricter tuple channel validation.

  • Fixed duration-limited AnimatedGradient instances now clean up their running state so they can be restarted.

  • Fixed AnimatedPanel now accepts two-item regex highlight tuples like ("pattern", "style"), matching the base highlight parser.

  • Fixed Rule and AnimatedRule empty-renderable fallbacks and thickness handling.

  • Fixed AnimatedGradient refresh-rate validation and restart-after-stop behavior.

  • See the CHANGELOG for more details.

Installation

rich-gradient targets Python 3.10+.

uv

# Recommended: use uv
uv add rich-gradient

# or via `uv pip`
uv pip install rich-gradient

Pip

Or with pip:

# via pip
pip install rich-gradient

📘 Read the Docs

Contributor notes

  • Tests: pytest works without an editable install because tests/conftest.py adds src/ to sys.path. No extra env tweaks needed; just install deps and run pytest.

Usage

Basic Gradient Text Example

Use Text when you want a drop-in rich.text.Text replacement with gradient spans applied to the text itself.

from rich.console import Console
from rich_gradient import Text

console = Console()
console.print(Text("Hello, World!"))

Hello, World!


Gradient Text with Specific Colors

If you want a bit more control of the gradient, you can specify the colors you want to use in the gradient by passing them as a list of colors to the colors parameter.

Color Formats

Color can be parsed from a variety of formats including:

3 or 6 digit hex colors, rgb/rgba colors, and CSS3 Named Colors

Example Code

Specific Two-Color Gradient Example

console.print(
    Text(
        "This a gradient with two colors.",
        colors=["red", "orange"],
    ),
    justify="center"
)

Two Color Gradient


Specific Four-Color Gradient Example

console.print(
    Text(
        "This a gradient uses four specific colors.",
        colors=["red", "#ff9900", "#ff0", "Lime"],
        justify="center",
    ),
)

Specific Color Gradient Result

multi-color specific colors


Rainbow Gradient Example

If four colors aren't enough, you can use the 'rainbow' parameter to generate a rainbow gradient that spans the full spectrum palette.

console.print(
    Text(
        "This is a rainbow gradient.",
        rainbow=True,
        justify="center",
    ),
)

Rainbow Gradient

Use Spectrum(hues=..., seed=...) when you need reproducible color stops.


Still inherits from rich.text.Text

Since Text is a subclass of rich.text.Text, you can still use all the same methods and properties as you would with Text.

console.print(
    Text(
        "This is an underlined rainbow gradient.",
        rainbow=True,
        style="underline",
    ),
    justify="center"
)
console.line()
console.print(
    Text(
        "This is a bold italic gradient.",
        style="bold italic",
    ),
    justify="center"
)
console.line()

Still Text

Wrap Any Rich Renderable

Use Gradient when you want to paint across an existing Rich renderable, such as Markdown, a table, a layout, or a standard Rich panel.

from rich.console import Console
from rich.markdown import Markdown
from rich_gradient import Gradient

console = Console()
console.print(
    Gradient(
        Markdown("## Renderables\n\n- Text\n- Panels\n- Markdown"),
        colors=["#38bdf8", "#a855f7", "#f97316"],
        bg_colors=["#0f172a", "#1f2937"],
        justify="center",
    )
)

Background Gradients

Pass bg_colors to Text, Gradient, Panel, Rule, or Markdown to apply background color stops. A single background color is treated as a solid fill; multiple stops interpolate across the rendered output.

from rich_gradient import Text

Text(
    "Foreground and background gradient",
    colors=["#f8fafc", "#a7f3d0"],
    bg_colors=["#0f172a", "#1e293b"],
)

Markdown

Use Markdown for a Rich Markdown renderable with the same gradient controls as Gradient.

from rich.console import Console
from rich_gradient import Markdown

console = Console()
console.print(
    Markdown(
        "# Gradient Markdown\n\nSupports **Rich Markdown** content.",
        colors=["cyan", "magenta", "gold1"],
    )
)

CLI

This package no longer ships a command-line interface. Install rich-gradient-cli for terminal commands that build on the renderables provided here.

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

rich_gradient-0.3.13.tar.gz (17.8 MB view details)

Uploaded Source

Built Distribution

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

rich_gradient-0.3.13-py3-none-any.whl (69.0 kB view details)

Uploaded Python 3

File details

Details for the file rich_gradient-0.3.13.tar.gz.

File metadata

  • Download URL: rich_gradient-0.3.13.tar.gz
  • Upload date:
  • Size: 17.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for rich_gradient-0.3.13.tar.gz
Algorithm Hash digest
SHA256 d8cbbc344c8f4dd006dc25b5bfca8b9a36cac02f79d36105a4f934a36f0d525e
MD5 c39a7cf3bfe384675e6c90634d1fd666
BLAKE2b-256 612323b375a6c0d5b20d26c527433e67bc6e1c8cc733980bb513c92de946e0ea

See more details on using hashes here.

File details

Details for the file rich_gradient-0.3.13-py3-none-any.whl.

File metadata

  • Download URL: rich_gradient-0.3.13-py3-none-any.whl
  • Upload date:
  • Size: 69.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for rich_gradient-0.3.13-py3-none-any.whl
Algorithm Hash digest
SHA256 7e545c55c05776e3c75cac203b92732714a51fbe2d104c0f52cd9d6adc24ef4f
MD5 8a0947061ab4e90b6a2304b8342f362e
BLAKE2b-256 cacceb0ccfd2a233ca69bcc5aa20baf4095ee6e337cf23b8949e31abf18594e9

See more details on using hashes here.

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