Skip to content

BouncyBalls

Demo

Quick Start

bouncyballs.py
from terminaltexteffects.effects.effect_bouncyballs import BouncyBalls

effect = BouncyBalls("YourTextHere")
with effect.terminal_output() as terminal:
    for frame in effect:
        terminal.print(frame)

Characters fall from the top of the canvas as bouncy balls before settling into place.

Classes:

Name Description
BouncyBalls

Characters fall from the top of the canvas as bouncy balls before settling into place.

BouncyBallsConfig

Configuration for the BouncyBalls effect.

BouncyBallsIterator

Iterator for the BouncyBalls effect. Does not normally need to be called directly.

BouncyBalls

Bases: BaseEffect[BouncyBallsConfig]

Characters fall from the top of the canvas as bouncy balls before settling into place.

Attributes:

Name Type Description
effect_config BouncyBallsConfig

Configuration for the effect.

terminal_config TerminalConfig

Configuration for the terminal.

Source code in terminaltexteffects/effects/effect_bouncyballs.py
class BouncyBalls(BaseEffect[BouncyBallsConfig]):
    """Characters fall from the top of the canvas as bouncy balls before settling into place.

    Attributes:
        effect_config (BouncyBallsConfig): Configuration for the effect.
        terminal_config (TerminalConfig): Configuration for the terminal.
    """

    _config_cls = BouncyBallsConfig
    _iterator_cls = BouncyBallsIterator

    def __init__(self, input_data: str) -> None:
        """Initialize the effect with the provided input data.

        Args:
            input_data (str): The input data to use for the effect."""
        super().__init__(input_data)

__init__(input_data)

Initialize the effect with the provided input data.

Parameters:

Name Type Description Default
input_data str

The input data to use for the effect.

required
Source code in terminaltexteffects/effects/effect_bouncyballs.py
def __init__(self, input_data: str) -> None:
    """Initialize the effect with the provided input data.

    Args:
        input_data (str): The input data to use for the effect."""
    super().__init__(input_data)

BouncyBallsConfig dataclass

Bases: ArgsDataClass

Configuration for the BouncyBalls effect.

Attributes:

Name Type Description
ball_colors tuple[Color, ...]

Tuple of colors from which ball colors will be randomly selected. If no colors are provided, the colors are random.

ball_symbols tuple[str, ...] | str

Tuple of symbols to use for the balls.

final_gradient_stops tuple[Color, ...]

Tuple of colors for the final color gradient. If only one color is provided, the characters will be displayed in that color.

final_gradient_steps tuple[int, ...] | int

Tuple of the number of gradient steps to use. More steps will create a smoother and longer gradient animation. Valid values are n > 0.

final_gradient_direction Direction

Direction of the final gradient.

ball_delay int

Number of frames between ball drops, increase to reduce ball drop rate. Valid values are n > 0.

movement_speed float

Movement speed of the characters. Valid values are n > 0.

easing EasingFunction

Easing function to use for character movement.

Source code in terminaltexteffects/effects/effect_bouncyballs.py
@argclass(
    name="bouncyballs",
    help="Characters are bouncy balls falling from the top of the canvas.",
    description="bouncyballs | Characters are bouncy balls falling from the top of the canvas.",
    epilog=f"""{argvalidators.EASING_EPILOG}
Example: terminaltexteffects bouncyballs --ball-colors d1f4a5 96e2a4 5acda9 --ball-symbols o "*" O 0 . --final-gradient-stops f8ffae 43c6ac --final-gradient-steps 12 --final-gradient-direction diagonal --ball-delay 7 --movement-speed 0.25 --easing OUT_BOUNCE""",
)
@dataclass
class BouncyBallsConfig(ArgsDataClass):
    """Configuration for the BouncyBalls effect.

    Attributes:
        ball_colors (tuple[Color, ...]): Tuple of colors from which ball colors will be randomly selected. If no colors are provided, the colors are random.
        ball_symbols (tuple[str, ...] | str): Tuple of symbols to use for the balls.
        final_gradient_stops (tuple[Color, ...]): Tuple of colors for the final color gradient. If only one color is provided, the characters will be displayed in that color.
        final_gradient_steps (tuple[int, ...] | int): Tuple of the number of gradient steps to use. More steps will create a smoother and longer gradient animation. Valid values are n > 0.
        final_gradient_direction (Gradient.Direction): Direction of the final gradient.
        ball_delay (int): Number of frames between ball drops, increase to reduce ball drop rate. Valid values are n > 0.
        movement_speed (float): Movement speed of the characters.  Valid values are n > 0.
        easing (easing.EasingFunction): Easing function to use for character movement."""

    ball_colors: tuple[Color, ...] = ArgField(
        cmd_name=["--ball-colors"],
        type_parser=argvalidators.ColorArg.type_parser,
        metavar=argvalidators.ColorArg.METAVAR,
        nargs="+",
        default=(Color("d1f4a5"), Color("96e2a4"), Color("5acda9")),
        help="Space separated list of colors from which ball colors will be randomly selected. If no colors are provided, the colors are random.",
    )  # type: ignore[assignment]
    "tuple[Color, ...] : Tuple of colors from which ball colors will be randomly selected. If no colors are provided, the colors are random."

    ball_symbols: tuple[str, ...] = ArgField(
        cmd_name="--ball-symbols",
        type_parser=argvalidators.Symbol.type_parser,
        nargs="+",
        default=("*", "o", "O", "0", "."),
        metavar=argvalidators.Symbol.METAVAR,
        help="Space separated list of symbols to use for the balls.",
    )  # type: ignore[assignment]
    "tuple[str, ...] | str : Tuple of symbols to use for the balls."

    final_gradient_stops: tuple[Color, ...] = ArgField(
        cmd_name=["--final-gradient-stops"],
        type_parser=argvalidators.ColorArg.type_parser,
        nargs="+",
        default=(Color("f8ffae"), Color("43c6ac")),
        metavar=argvalidators.ColorArg.METAVAR,
        help="Space separated, unquoted, list of colors for the character gradient (applied from bottom to top). If only one color is provided, the characters will be displayed in that color.",
    )  # type: ignore[assignment]
    "tuple[Color, ...] : Tuple of colors for the final color gradient. If only one color is provided, the characters will be displayed in that color."

    final_gradient_steps: tuple[int, ...] | int = ArgField(
        cmd_name=["--final-gradient-steps"],
        type_parser=argvalidators.PositiveInt.type_parser,
        nargs="+",
        default=12,
        metavar=argvalidators.PositiveInt.METAVAR,
        help="Space separated, unquoted, list of the number of gradient steps to use. More steps will create a smoother and longer gradient animation.",
    )  # type: ignore[assignment]
    "tuple[int, ...] | int : Int or Tuple of ints for the number of gradient steps to use. More steps will create a smoother and longer gradient animation."

    final_gradient_direction: Gradient.Direction = ArgField(
        cmd_name="--final-gradient-direction",
        type_parser=argvalidators.GradientDirection.type_parser,
        default=Gradient.Direction.DIAGONAL,
        metavar=argvalidators.GradientDirection.METAVAR,
        help="Direction of the final gradient.",
    )  # type: ignore[assignment]
    "Gradient.Direction : Direction of the final gradient."
    ball_delay: int = ArgField(
        cmd_name="--ball-delay",
        type_parser=argvalidators.NonNegativeInt.type_parser,
        default=7,
        metavar=argvalidators.NonNegativeInt.METAVAR,
        help="Number of frames between ball drops, increase to reduce ball drop rate.",
    )  # type: ignore[assignment]
    "int : Number of frames between ball drops, increase to reduce ball drop rate."

    movement_speed: float = ArgField(
        cmd_name="--movement-speed",
        type_parser=argvalidators.PositiveFloat.type_parser,
        default=0.25,
        metavar=argvalidators.PositiveFloat.METAVAR,
        help="Movement speed of the characters. ",
    )  # type: ignore[assignment]
    "float : Movement speed of the characters. "

    movement_easing: easing.EasingFunction = ArgField(
        cmd_name="--movement-easing",
        type_parser=argvalidators.Ease.type_parser,
        default=easing.out_bounce,
        help="Easing function to use for character movement.",
    )  # type: ignore[assignment]
    "easing.EasingFunction : Easing function to use for character movement."

    @classmethod
    def get_effect_class(cls):
        return BouncyBalls

ball_colors: tuple[Color, ...] = ArgField(cmd_name=['--ball-colors'], type_parser=argvalidators.ColorArg.type_parser, metavar=argvalidators.ColorArg.METAVAR, nargs='+', default=(Color('d1f4a5'), Color('96e2a4'), Color('5acda9')), help='Space separated list of colors from which ball colors will be randomly selected. If no colors are provided, the colors are random.') class-attribute instance-attribute

tuple[Color, ...] : Tuple of colors from which ball colors will be randomly selected. If no colors are provided, the colors are random.

ball_delay: int = ArgField(cmd_name='--ball-delay', type_parser=argvalidators.NonNegativeInt.type_parser, default=7, metavar=argvalidators.NonNegativeInt.METAVAR, help='Number of frames between ball drops, increase to reduce ball drop rate.') class-attribute instance-attribute

int : Number of frames between ball drops, increase to reduce ball drop rate.

ball_symbols: tuple[str, ...] = ArgField(cmd_name='--ball-symbols', type_parser=argvalidators.Symbol.type_parser, nargs='+', default=('*', 'o', 'O', '0', '.'), metavar=argvalidators.Symbol.METAVAR, help='Space separated list of symbols to use for the balls.') class-attribute instance-attribute

tuple[str, ...] | str : Tuple of symbols to use for the balls.

final_gradient_direction: Gradient.Direction = ArgField(cmd_name='--final-gradient-direction', type_parser=argvalidators.GradientDirection.type_parser, default=Gradient.Direction.DIAGONAL, metavar=argvalidators.GradientDirection.METAVAR, help='Direction of the final gradient.') class-attribute instance-attribute

Gradient.Direction : Direction of the final gradient.

final_gradient_steps: tuple[int, ...] | int = ArgField(cmd_name=['--final-gradient-steps'], type_parser=argvalidators.PositiveInt.type_parser, nargs='+', default=12, metavar=argvalidators.PositiveInt.METAVAR, help='Space separated, unquoted, list of the number of gradient steps to use. More steps will create a smoother and longer gradient animation.') class-attribute instance-attribute

tuple[int, ...] | int : Int or Tuple of ints for the number of gradient steps to use. More steps will create a smoother and longer gradient animation.

final_gradient_stops: tuple[Color, ...] = ArgField(cmd_name=['--final-gradient-stops'], type_parser=argvalidators.ColorArg.type_parser, nargs='+', default=(Color('f8ffae'), Color('43c6ac')), metavar=argvalidators.ColorArg.METAVAR, help='Space separated, unquoted, list of colors for the character gradient (applied from bottom to top). If only one color is provided, the characters will be displayed in that color.') class-attribute instance-attribute

tuple[Color, ...] : Tuple of colors for the final color gradient. If only one color is provided, the characters will be displayed in that color.

movement_easing: easing.EasingFunction = ArgField(cmd_name='--movement-easing', type_parser=argvalidators.Ease.type_parser, default=easing.out_bounce, help='Easing function to use for character movement.') class-attribute instance-attribute

easing.EasingFunction : Easing function to use for character movement.

movement_speed: float = ArgField(cmd_name='--movement-speed', type_parser=argvalidators.PositiveFloat.type_parser, default=0.25, metavar=argvalidators.PositiveFloat.METAVAR, help='Movement speed of the characters. ') class-attribute instance-attribute

float : Movement speed of the characters.