Skip to content

Unstable

Demo

Quick Start

unstable.py
from terminaltexteffects.effects.effect_unstable import Unstable

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

Spawns characters jumbled, explodes them to the edge of the canvas, then reassembles them.

Classes:

Name Description
Unstable

Spawns characters jumbled, explodes them to the edge of the canvas, then reassembles them.

UnstableConfig

Configuration for the Unstable effect.

UnstableIterator

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

Unstable

Bases: BaseEffect[UnstableConfig]

Spawns characters jumbled, explodes them to the edge of the canvas, then reassembles them.

Attributes:

Name Type Description
effect_config UnstableConfig

Configuration for the effect.

terminal_config TerminalConfig

Configuration for the terminal.

Source code in terminaltexteffects/effects/effect_unstable.py
class Unstable(BaseEffect[UnstableConfig]):
    """Spawns characters jumbled, explodes them to the edge of the canvas, then reassembles them.

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

    _config_cls = UnstableConfig
    _iterator_cls = UnstableIterator

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

UnstableConfig dataclass

Bases: ArgsDataClass

Configuration for the Unstable effect.

Attributes:

Name Type Description
unstable_color Color

Color transitioned to as the characters become unstable.

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.

explosion_ease EasingFunction

Easing function to use for character movement during the explosion.

explosion_speed float

Speed of characters during explosion. Valid values are n > 0.

reassembly_ease EasingFunction

Easing function to use for character reassembly.

reassembly_speed float

Speed of characters during reassembly. Valid values are n > 0.

Source code in terminaltexteffects/effects/effect_unstable.py
@argclass(
    name="unstable",
    help="Spawn characters jumbled, explode them to the edge of the canvas, then reassemble them in the correct layout.",
    description="unstable | Spawn characters jumbled, explode them to the edge of the canvas, then reassemble them in the correct layout.",
    epilog=f"""{argvalidators.EASING_EPILOG}

    Example: terminaltexteffects unstable --unstable-color ff9200 --final-gradient-stops 8A008A 00D1FF FFFFFF --final-gradient-steps 12 --explosion-ease OUT_EXPO --explosion-speed 0.75 --reassembly-ease OUT_EXPO --reassembly-speed 0.75""",
)
@dataclass
class UnstableConfig(ArgsDataClass):
    """Configuration for the Unstable effect.

    Attributes:
        unstable_color (Color): Color transitioned to as the characters become unstable.
        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.
        explosion_ease (easing.EasingFunction): Easing function to use for character movement during the explosion.
        explosion_speed (float): Speed of characters during explosion. Valid values are n > 0.
        reassembly_ease (easing.EasingFunction): Easing function to use for character reassembly.
        reassembly_speed (float): Speed of characters during reassembly. Valid values are n > 0.
    """

    unstable_color: Color = ArgField(
        cmd_name=["--unstable-color"],
        type_parser=argvalidators.ColorArg.type_parser,
        default=Color("ff9200"),
        metavar=argvalidators.ColorArg.METAVAR,
        help="Color transitioned to as the characters become unstable.",
    )  # type: ignore[assignment]
    "Color : Color transitioned to as the characters become unstable."

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

    explosion_ease: easing.EasingFunction = ArgField(
        cmd_name=["--explosion-ease"],
        type_parser=argvalidators.Ease.type_parser,
        default=easing.out_expo,
        help="Easing function to use for character movement during the explosion.",
    )  # type: ignore[assignment]
    "easing.EasingFunction : Easing function to use for character movement during the explosion."

    explosion_speed: float = ArgField(
        cmd_name=["--explosion-speed"],
        type_parser=argvalidators.PositiveFloat.type_parser,
        default=0.75,
        metavar=argvalidators.PositiveFloat.METAVAR,
        help="Speed of characters during explosion. ",
    )  # type: ignore[assignment]
    "float : Speed of characters during explosion. "

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

    reassembly_speed: float = ArgField(
        cmd_name=["--reassembly-speed"],
        type_parser=argvalidators.PositiveFloat.type_parser,
        default=0.75,
        metavar=argvalidators.PositiveFloat.METAVAR,
        help="Speed of characters during reassembly. ",
    )  # type: ignore[assignment]
    "float : Speed of characters during reassembly."

    @classmethod
    def get_effect_class(cls):
        return Unstable

explosion_ease: easing.EasingFunction = ArgField(cmd_name=['--explosion-ease'], type_parser=argvalidators.Ease.type_parser, default=easing.out_expo, help='Easing function to use for character movement during the explosion.') class-attribute instance-attribute

easing.EasingFunction : Easing function to use for character movement during the explosion.

explosion_speed: float = ArgField(cmd_name=['--explosion-speed'], type_parser=argvalidators.PositiveFloat.type_parser, default=0.75, metavar=argvalidators.PositiveFloat.METAVAR, help='Speed of characters during explosion. ') class-attribute instance-attribute

float : Speed of characters during explosion.

final_gradient_direction: Gradient.Direction = ArgField(cmd_name='--final-gradient-direction', type_parser=argvalidators.GradientDirection.type_parser, default=Gradient.Direction.VERTICAL, 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('8A008A'), Color('00D1FF'), Color('FFFFFF')), 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.

reassembly_ease: easing.EasingFunction = ArgField(cmd_name=['--reassembly-ease'], type_parser=argvalidators.Ease.type_parser, default=easing.out_expo, help='Easing function to use for character reassembly.') class-attribute instance-attribute

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

reassembly_speed: float = ArgField(cmd_name=['--reassembly-speed'], type_parser=argvalidators.PositiveFloat.type_parser, default=0.75, metavar=argvalidators.PositiveFloat.METAVAR, help='Speed of characters during reassembly. ') class-attribute instance-attribute

float : Speed of characters during reassembly.

unstable_color: Color = ArgField(cmd_name=['--unstable-color'], type_parser=argvalidators.ColorArg.type_parser, default=Color('ff9200'), metavar=argvalidators.ColorArg.METAVAR, help='Color transitioned to as the characters become unstable.') class-attribute instance-attribute

Color : Color transitioned to as the characters become unstable.