Skip to main content

ASCII Termnial Animation Package

Project description

bruhanimate

Downloads Downloads Downloads

snow fireworks

Supported Python versions

bruhanimate provides a set of tools for creating and rendering animations directly in the terminal. Designed for ease of use, this package enables developers to incorporate dynamic animations into command-line applications. While drawing inspiration from existing terminal animation libraries, bruhanimate brings a fresh approach and offers a unique set of features tailored for flexibility and creativity in terminal-based projects.

Inspired by the Asciimatics package.

Installation

From PyPI

pip install --upgrade bruhanimate

From source

git clone https://github.com/FNBBDevs/bruhanimate
cd bruhanimate
python -m pip install .

Quick Start

Use the built-in demos to explore each effect. Import any <effect>_demo from bruhanimate and call .run().

from bruhanimate import plasma_demo
plasma_demo.run()

Available demos: static_demo, offset_demo, noise_demo, stars_demo, snow_demo, rain_demo, plasma_demo, gol_demo, matrix_demo, twinkle_demo, firework_demo, fire_demo, julia_demo, line_demo, holiday.

Effects

Every effect is configured through a settings object — one dataclass per effect, all fields optional with sensible defaults. Pass it to the effect at construction time, or leave it out to get the defaults.

Effect Settings class Key options
StaticEffect none
OffsetEffect OffsetSettings direction
NoiseEffect NoiseSettings intensity, color
StarEffect StarSettings color_type
SnowEffect SnowSettings intensity, wind, show_info, collision
RainEffect RainSettings intensity, wind_direction, swells, collision
PlasmaEffect PlasmaSettings color, characters, random_colors, show_info
MatrixEffect MatrixSettings character_halt_range, color_halt_range, randomness, gradient_length
GameOfLifeEffect GameOfLifeSettings decay, color, color_type, scale
TwinkleEffect TwinkleSettings twinkle_chars, density
FireEffect FireSettings intensity, wind_direction, wind_strength, use_char_color, swell, turbulence
FireworkEffect FireworkSettings firework_type, color_enabled, color_type, rate
JuliaEffect none
DrawLinesEffect DrawLinesSettings char, thin

Usage

Basic — defaults

from bruhanimate import Screen, EffectRenderer

def demo(screen: Screen):
    renderer = EffectRenderer(
        screen=screen,
        frames=float("inf"),
        frame_time=0.05,
        effect_type="snow",
        background=" ",
        transparent=False,
    )
    renderer.run()

if __name__ == "__main__":
    Screen.show(demo)

With settings

from bruhanimate import Screen, EffectRenderer, SnowSettings, SnowEffect

def demo(screen: Screen):
    renderer = EffectRenderer(
        screen=screen,
        frames=float("inf"),
        frame_time=0.05,
        effect_type="snow",
        background=" ",
        transparent=False,
    )
    # configure via settings at construction
    renderer.effect = SnowEffect(
        renderer.effect.buffer,
        " ",
        settings=SnowSettings(intensity=0.01, wind=0.6),
    )
    renderer.run()

if __name__ == "__main__":
    Screen.show(demo)

Runtime setters

Settings configure the effect at construction. All effects also expose set_* methods for changes mid-animation:

renderer.effect.set_wind(0.8)          # SnowEffect
renderer.effect.set_intensity(0.4)     # FireEffect
renderer.effect.set_wind_direction("east")  # RainEffect
renderer.effect.set_color_properties(color=True, random_colors=True)  # PlasmaEffect
renderer.effect.shuffle_plasma_values()

Effect Registry

Every built-in effect is registered in effect_registry — a discoverable, extensible registry that maps effect names to their class, settings class, description, and named presets.

from bruhanimate import effect_registry

# List all registered effects
for name, entry in effect_registry.entries().items():
    print(name, "—", entry.description)

# List presets for an effect
print(effect_registry.presets("snow"))
# {'light': SnowSettings(...), 'moderate': SnowSettings(...), 'blizzard': SnowSettings(...), 'windy': SnowSettings(...)}

# Create an effect by name with a preset
effect = effect_registry.create("snow", buffer, " ", preset="blizzard")

# Create an effect with a custom settings object
from bruhanimate import SnowSettings
effect = effect_registry.create("snow", buffer, " ", settings=SnowSettings(wind=0.8))

# Register your own effect
from bruhanimate import EffectRegistry
effect_registry.register(
    "myeffect",
    MyEffect,
    settings_cls=MySettings,
    description="Does something cool",
    presets={"fast": MySettings(speed=10)},
)

Available built-in presets:

Effect Presets
offset right, left, up, down
noise sparse, dense, color
stars greyscale, color
plasma greyscale, color, blocks, random
gol plain, decay, color
rain drizzle, storm, monsoon
matrix default, fast
drawlines thin, thick
snow light, moderate, blizzard, windy
twinkle sparse, dense
firework plain, color, random
fire campfire, inferno, windy
audio bars, mirror, waveform, minimal

Renderers

Renderer Description
EffectRenderer Full-screen effect
CenterRenderer Effect with a centered image overlay
PanRenderer Effect with a panning image
FocusRenderer Effect with a focused/zooming image
BackgroundColorRenderer Solid background color
from bruhanimate import Screen, CenterRenderer, bruhimage

def demo(screen: Screen):
    renderer = CenterRenderer(
        screen=screen,
        frames=300,
        frame_time=1/30,
        img=bruhimage.text_to_image("RAIN!", padding_top_bottom=1, padding_left_right=2),
        effect_type="rain",
        background=" ",
        transparent=False,
    )
    renderer.update_collision(True)
    renderer.effect.set_swells(True)
    renderer.effect.set_wind_direction("east")
    renderer.run()

if __name__ == "__main__":
    Screen.show(demo)

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

bruhanimate-0.2.99.tar.gz (65.8 kB view details)

Uploaded Source

Built Distribution

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

bruhanimate-0.2.99-py3-none-any.whl (107.5 kB view details)

Uploaded Python 3

File details

Details for the file bruhanimate-0.2.99.tar.gz.

File metadata

  • Download URL: bruhanimate-0.2.99.tar.gz
  • Upload date:
  • Size: 65.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.0 CPython/3.13.7 Windows/11

File hashes

Hashes for bruhanimate-0.2.99.tar.gz
Algorithm Hash digest
SHA256 4be351b6579fc15949b2c93cbef943f0e035e2bd77a2b60ed722da9f82ac8e8d
MD5 0d9f1470acca52a8fa5426d1d897e8c0
BLAKE2b-256 7b2203c36a33b1e8d971235598dab2da068f163c36d43bdb2c35122a399c1301

See more details on using hashes here.

File details

Details for the file bruhanimate-0.2.99-py3-none-any.whl.

File metadata

  • Download URL: bruhanimate-0.2.99-py3-none-any.whl
  • Upload date:
  • Size: 107.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.0 CPython/3.13.7 Windows/11

File hashes

Hashes for bruhanimate-0.2.99-py3-none-any.whl
Algorithm Hash digest
SHA256 2755a1daafc402ec8f35c0c0196d44c40edd9cd460bd9221ff893a889d3e2d5d
MD5 03d512ed21e4168961f3d9a60c5bf1c1
BLAKE2b-256 ec0233077c6052b2969dff749369e2d9537b62f16e3aa91f5b8d19cf654bf351

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