Skip to content

Swarm

Demo

Quick Start

swarm.py
from terminaltexteffects.effects.effect_swarm import Swarm

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

Characters are grouped into swarms and move around the terminal before settling into position.

Classes:

Name Description
Swarm

Characters are grouped into swarms and move around the terminal before settling into position.

SwarmConfig

Configuration for the Swarm effect.

SwarmIterator

Effect iterator for the Swarm effect. Does not normally need to be called directly.

Swarm

Bases: BaseEffect[SwarmConfig]

Characters are grouped into swarms and move around the terminal before settling into position.

Attributes:

Name Type Description
effect_config SwarmConfig

Configuration for the effect.

terminal_config TerminalConfig

Configuration for the terminal.

Source code in terminaltexteffects/effects/effect_swarm.py
class Swarm(BaseEffect[SwarmConfig]):
    """Characters are grouped into swarms and move around the terminal before settling into position.

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

    _config_cls = SwarmConfig
    _iterator_cls = SwarmIterator

    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_swarm.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)

SwarmConfig dataclass

Bases: ArgsDataClass

Configuration for the Swarm effect.

Attributes:

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

Tuple of colors for the swarms.

flash_color Color

Color for the character flash. Characters flash when moving.

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.

swarm_size float

Percent of total characters in each swarm. Valid values are 0 < n <= 1.

swarm_coordination float

Percent of characters in a swarm that move as a group. Valid values are 0 < n <= 1.

swarm_area_count tuple[int, int]

Range of the number of areas where characters will swarm. Valid values are n > 0.

Source code in terminaltexteffects/effects/effect_swarm.py
@argclass(
    name="swarm",
    help="Characters are grouped into swarms and move around the terminal before settling into position.",
    description="swarm | Characters are grouped into swarms and move around the terminal before settling into position.",
    epilog="""Example: terminaltexteffects swarm --base-color 31a0d4 --flash-color f2ea79 --final-gradient-stops 31b900 f0ff65 --final-gradient-steps 12 --swarm-size 0.1 --swarm-coordination 0.80 --swarm-area-count 2-4""",
)
@dataclass
class SwarmConfig(ArgsDataClass):
    """Configuration for the Swarm effect.

    Attributes:
        base_color (tuple[Color, ...]): Tuple of colors for the swarms.
        flash_color (Color): Color for the character flash. Characters flash when moving.
        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.
        swarm_size (float): Percent of total characters in each swarm. Valid values are 0 < n <= 1.
        swarm_coordination (float): Percent of characters in a swarm that move as a group. Valid values are 0 < n <= 1.
        swarm_area_count (tuple[int, int]): Range of the number of areas where characters will swarm. Valid values are n > 0."""

    base_color: tuple[Color, ...] = ArgField(
        cmd_name=["--base-color"],
        type_parser=argvalidators.ColorArg.type_parser,
        nargs="+",
        default=(Color("31a0d4"),),
        metavar=argvalidators.ColorArg.METAVAR,
        help="Space separated, unquoted, list of colors for the swarms",
    )  # type: ignore[assignment]
    """tuple[Color, ...] : Tuple of colors for the swarms"""

    flash_color: Color = ArgField(
        cmd_name=["--flash-color"],
        type_parser=argvalidators.ColorArg.type_parser,
        default=Color("f2ea79"),
        metavar=argvalidators.ColorArg.METAVAR,
        help="Color for the character flash. Characters flash when moving.",
    )  # type: ignore[assignment]
    """Color : Color for the character flash. Characters flash when moving."""

    final_gradient_stops: tuple[Color, ...] = ArgField(
        cmd_name=["--final-gradient-stops"],
        type_parser=argvalidators.ColorArg.type_parser,
        nargs="+",
        default=(Color("31b900"), Color("f0ff65")),
        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.HORIZONTAL,
        metavar=argvalidators.GradientDirection.METAVAR,
        help="Direction of the final gradient.",
    )  # type: ignore[assignment]
    "Gradient.Direction : Direction of the final gradient."

    swarm_size: float = ArgField(
        cmd_name="--swarm-size",
        type_parser=argvalidators.Ratio.type_parser,
        metavar=argvalidators.Ratio.METAVAR,
        default=0.1,
        help="Percent of total characters in each swarm.",
    )  # type: ignore[assignment]
    "float : Percent of total characters in each swarm."

    swarm_coordination: float = ArgField(
        cmd_name="--swarm-coordination",
        type_parser=argvalidators.Ratio.type_parser,
        metavar=argvalidators.Ratio.METAVAR,
        default=0.80,
        help="Percent of characters in a swarm that move as a group.",
    )  # type: ignore[assignment]
    "float : Percent of characters in a swarm that move as a group."

    swarm_area_count: tuple[int, int] = ArgField(
        cmd_name="--swarm-area-count",
        type_parser=argvalidators.IntRange.type_parser,
        metavar=argvalidators.IntRange.METAVAR,
        default=(2, 4),
        help="Range of the number of areas where characters will swarm.",
    )  # type: ignore[assignment]
    "tuple[int, int] : Range of the number of areas where characters will swarm."

    @classmethod
    def get_effect_class(cls):
        return Swarm

base_color: tuple[Color, ...] = ArgField(cmd_name=['--base-color'], type_parser=argvalidators.ColorArg.type_parser, nargs='+', default=(Color('31a0d4')), metavar=argvalidators.ColorArg.METAVAR, help='Space separated, unquoted, list of colors for the swarms') class-attribute instance-attribute

tuple[Color, ...] : Tuple of colors for the swarms

final_gradient_direction: Gradient.Direction = ArgField(cmd_name='--final-gradient-direction', type_parser=argvalidators.GradientDirection.type_parser, default=Gradient.Direction.HORIZONTAL, 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('31b900'), Color('f0ff65')), 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.

flash_color: Color = ArgField(cmd_name=['--flash-color'], type_parser=argvalidators.ColorArg.type_parser, default=Color('f2ea79'), metavar=argvalidators.ColorArg.METAVAR, help='Color for the character flash. Characters flash when moving.') class-attribute instance-attribute

Color : Color for the character flash. Characters flash when moving.

swarm_area_count: tuple[int, int] = ArgField(cmd_name='--swarm-area-count', type_parser=argvalidators.IntRange.type_parser, metavar=argvalidators.IntRange.METAVAR, default=(2, 4), help='Range of the number of areas where characters will swarm.') class-attribute instance-attribute

tuple[int, int] : Range of the number of areas where characters will swarm.

swarm_coordination: float = ArgField(cmd_name='--swarm-coordination', type_parser=argvalidators.Ratio.type_parser, metavar=argvalidators.Ratio.METAVAR, default=0.8, help='Percent of characters in a swarm that move as a group.') class-attribute instance-attribute

float : Percent of characters in a swarm that move as a group.

swarm_size: float = ArgField(cmd_name='--swarm-size', type_parser=argvalidators.Ratio.type_parser, metavar=argvalidators.Ratio.METAVAR, default=0.1, help='Percent of total characters in each swarm.') class-attribute instance-attribute

float : Percent of total characters in each swarm.