Skip to content

MiddleOut

Demo

Quick Start

middleout.py
from terminaltexteffects.effects.effect_middleout import MiddleOut

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

Text expands in a single row or column in the middle of the canvas then out.

Classes:

Name Description
MiddleOut

Text expands in a single row or column in the middle of the canvas then out.

MiddleOutConfig

Configuration for the Middleout effect.

MiddleOutIterator

Iterates over the effect's frames. Does not normally need to be called directly.

MiddleOut

Bases: BaseEffect[MiddleOutConfig]

Text expands in a single row or column in the middle of the canvas then out.

Attributes:

Name Type Description
effect_config MiddleOutConfig

Configuration for the effect.

terminal_config TerminalConfig

Configuration for the terminal.

Source code in terminaltexteffects/effects/effect_middleout.py
class MiddleOut(BaseEffect[MiddleOutConfig]):
    """Text expands in a single row or column in the middle of the canvas then out.

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

    _config_cls = MiddleOutConfig
    _iterator_cls = MiddleOutIterator

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

MiddleOutConfig dataclass

Bases: ArgsDataClass

Configuration for the Middleout effect.

Attributes:

Name Type Description
starting_color Color

Color for the initial text in the center of the canvas.

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.

expand_direction Literal['vertical', 'horizontal']

Direction the text will expand. Choices: vertical, horizontal.

center_movement_speed float

Speed of the characters during the initial expansion of the center vertical/horiztonal. Valid values are n > 0.

full_movement_speed float

Speed of the characters during the final full expansion. Valid values are n > 0.

center_easing EasingFunction

Easing function to use for initial expansion.

full_easing EasingFunction

Easing function to use for full expansion.

Source code in terminaltexteffects/effects/effect_middleout.py
@argclass(
    name="middleout",
    help="Text expands in a single row or column in the middle of the canvas then out.",
    description="middleout | Text expands in a single row or column in the middle of the canvas then out.",
    epilog=f"""{argvalidators.EASING_EPILOG}
Example: terminaltexteffects middleout --starting-color 8A008A --final-gradient-stops 8A008A 00D1FF FFFFFF --final-gradient-steps 12 --expand-direction vertical --center-movement-speed 0.35 --full-movement-speed 0.35 --center-easing IN_OUT_SINE --full-easing IN_OUT_SINE""",
)
@dataclass
class MiddleOutConfig(ArgsDataClass):
    """Configuration for the Middleout effect.

    Attributes:
        starting_color (Color): Color for the initial text in the center of the canvas.
        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.
        expand_direction (typing.Literal["vertical", "horizontal"]): Direction the text will expand. Choices: vertical, horizontal.
        center_movement_speed (float): Speed of the characters during the initial expansion of the center vertical/horiztonal. Valid values are n > 0.
        full_movement_speed (float): Speed of the characters during the final full expansion. Valid values are n > 0.
        center_easing (easing.EasingFunction): Easing function to use for initial expansion.
        full_easing (easing.EasingFunction): Easing function to use for full expansion."""

    starting_color: Color = ArgField(
        cmd_name="--starting-color",
        type_parser=argvalidators.ColorArg.type_parser,
        default=Color("ffffff"),
        metavar=argvalidators.ColorArg.METAVAR,
        help="Color for the initial text in the center of the canvas.",
    )  # type: ignore[assignment]
    """Color : Color for the initial text in the center of the canvas."""

    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."""

    expand_direction: typing.Literal["vertical", "horizontal"] = ArgField(
        cmd_name="--expand-direction",
        default="vertical",
        choices=["vertical", "horizontal"],
        help="Direction the text will expand.",
    )  # type: ignore[assignment]
    """str : Direction the text will expand."""

    center_movement_speed: float = ArgField(
        cmd_name="--center-movement-speed",
        type_parser=argvalidators.PositiveFloat.type_parser,
        default=0.35,
        metavar=argvalidators.PositiveFloat.METAVAR,
        help="Speed of the characters during the initial expansion of the center vertical/horiztonal line. ",
    )  # type: ignore[assignment]
    """float : Speed of the characters during the initial expansion of the center vertical/horiztonal line. """

    full_movement_speed: float = ArgField(
        cmd_name="--full-movement-speed",
        type_parser=argvalidators.PositiveFloat.type_parser,
        default=0.35,
        metavar=argvalidators.PositiveFloat.METAVAR,
        help="Speed of the characters during the final full expansion. ",
    )  # type: ignore[assignment]
    """float : Speed of the characters during the final full expansion. """

    center_easing: easing.EasingFunction = ArgField(
        cmd_name="--center-easing",
        default=easing.in_out_sine,
        type_parser=argvalidators.Ease.type_parser,
        help="Easing function to use for initial expansion.",
    )  # type: ignore[assignment]
    """easing.EasingFunction : Easing function to use for initial expansion."""

    full_easing: easing.EasingFunction = ArgField(
        cmd_name="--full-easing",
        default=easing.in_out_sine,
        type_parser=argvalidators.Ease.type_parser,
        help="Easing function to use for full expansion.",
    )  # type: ignore[assignment]
    """easing.EasingFunction : Easing function to use for full expansion."""

    @classmethod
    def get_effect_class(cls):
        return MiddleOut

center_easing: easing.EasingFunction = ArgField(cmd_name='--center-easing', default=easing.in_out_sine, type_parser=argvalidators.Ease.type_parser, help='Easing function to use for initial expansion.') class-attribute instance-attribute

easing.EasingFunction : Easing function to use for initial expansion.

center_movement_speed: float = ArgField(cmd_name='--center-movement-speed', type_parser=argvalidators.PositiveFloat.type_parser, default=0.35, metavar=argvalidators.PositiveFloat.METAVAR, help='Speed of the characters during the initial expansion of the center vertical/horiztonal line. ') class-attribute instance-attribute

float : Speed of the characters during the initial expansion of the center vertical/horiztonal line.

expand_direction: typing.Literal['vertical', 'horizontal'] = ArgField(cmd_name='--expand-direction', default='vertical', choices=['vertical', 'horizontal'], help='Direction the text will expand.') class-attribute instance-attribute

str : Direction the text will expand.

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.

full_easing: easing.EasingFunction = ArgField(cmd_name='--full-easing', default=easing.in_out_sine, type_parser=argvalidators.Ease.type_parser, help='Easing function to use for full expansion.') class-attribute instance-attribute

easing.EasingFunction : Easing function to use for full expansion.

full_movement_speed: float = ArgField(cmd_name='--full-movement-speed', type_parser=argvalidators.PositiveFloat.type_parser, default=0.35, metavar=argvalidators.PositiveFloat.METAVAR, help='Speed of the characters during the final full expansion. ') class-attribute instance-attribute

float : Speed of the characters during the final full expansion.

starting_color: Color = ArgField(cmd_name='--starting-color', type_parser=argvalidators.ColorArg.type_parser, default=Color('ffffff'), metavar=argvalidators.ColorArg.METAVAR, help='Color for the initial text in the center of the canvas.') class-attribute instance-attribute

Color : Color for the initial text in the center of the canvas.