0.15.0
New Features (0.15.0)
- Added effect discovery support for user provided effects. Effects should be Python files located at
XDG_CONFIG_HOME/terminaltexteffects/effects. (e.g. /home/me/.config/terminaltexteffects/effects/effect_custom.py) - Added shell completion generation for
bashandzshviatte --print-completion {bash,zsh}.
Application Changes (0.15.0)
- The CLI parser is now built through a shared parser-construction path so runtime argument parsing, help text, and generated shell completions all use the same discovered effect and option definitions.
- Generated shell completions now include user-provided effects discovered from
XDG_CONFIG_HOME/terminaltexteffects/effectsat completion-generation time. - The
zshcompletion script now self-initializescompinitandbashcompinitwhen needed soeval "$(tte --print-completion zsh)"works with less shell setup friction. - The CLI version flag now falls back to the local
pyproject.tomlversion when running from a source checkout without installed package metadata.
Engine Changes (0.15.0)
- Added shared gradient argument helpers (
FinalGradientStopsArg,FinalGradientStepsArg,FinalGradientFramesArg,FinalGradientDirectionArg) for effect configs to standardize CLI defaults and parsing. - Updated all effects to use gradient argument helpers.
- Updated all effects parser epilog example help text to reflect up to date defaults.
SpanningTreeGenerator.get_neighbors()now honorsunlinked_only=Falseby returning linked and unlinked neighbors, matching the documented API.- Added focused unit test coverage for spanning-tree generators, including
SpanningTreeGenerator,RecursiveBacktracker,PrimsSimple,PrimsWeighted,BreadthFirst, andAldousBroder. - Clarified
RecursiveBacktrackerdocumentation to describe the depth-first spanning-tree behavior, initialized state, and delayed completion semantics accurately. PrimsSimplenow applieslimit_to_text_boundaryconsistently when deciding whether a newly linked character remains in the edge set, and its documentation now reflects the generator's actual state transitions.PrimsWeightednow limits random starting-character selection to the text boundary when requested, and its documentation now explains the per-character weighting model and completion behavior more accurately.BreadthFirstnow initializes correctly whenstarting_charis omitted, records each discovered character only once with the correct parent frontier node, and has updated traversal documentation.AldousBrodernow returns immediately once all characters are linked, and its documentation now matches the generator's state transitions and project docstring style.existing_color_handling="always"is now applied consistently by the animation engine for input-derived characters, including when the parsed input has no colors. Helper and fill characters remain effect-colored instead of being cleared by the engine.- Terminal input preprocessing now supports common fetch-application layout sequences by interpreting cursor movement CSI sequences (
A,B,C,D,E,F,G,H, andf) into TTE's virtual input canvas instead of rendering the escape sequences as text. - Terminal input preprocessing now accepts common fetch-application DEC private mode toggles for cursor visibility and line wrapping (
?25h,?25l,?7h, and?7l) as no-op input state while continuing to reject unsupported terminal control sequences. - Existing ANSI color parsing now supports 3-bit and 4-bit SGR foreground/background colors, reset sequences, and mixed style/color SGR sequences used by applications such as
neofetchandfastfetch. - Parsed input bold state is now preserved for
existing_color_handling="always", and bold standard ANSI foreground colors now resolve to their bright color equivalents for closer visual parity with normal terminal-rendered fetch output. - Added manual visual sequence tests for mixed ANSI color input and fetch-style layout/style input across
existing_color_handlingmodesdynamic,always, andignore, with printed parameter headers to make captured visual output easier to identify. - Updated
engine.motiondocumentation to accurately describe waypoint fields, bezier control handling, path runtime state, activation-side path mutation, looping behavior, and documented exceptions. - Updated
engine.animationdocumentation to accurately describe scene lookup behavior, scene sync and completion semantics, frame/color override rules, activation/reset expectations, and current TODO-backed gaps around dim formatting, duplicate scene IDs, and unused scene-step tracking. - Updated
engine.terminaldocumentation to better describe canvas sizing and anchoring, input preprocessing, character/fill tracking, rendering state, cursor management, and sort/lookup behavior, and hardenedenforce_framerate()so a configured frame rate of0safely disables frame limiting even when the method is called directly. - Updated
engine.base_effectdocumentation to clarify iterator creation semantics, frame retrieval and active-character lifecycle behavior, preexisting input-color detection, and terminal-output restoration behavior, plus fixed a small module docstring typo. motion.deactivate_path()now accepts aPath, a path ID string, or no argument, with the no-argument form deactivating the current active path when present.EventHandler.Action.DEACTIVATE_PATHevent registrations now support aPath, a path ID string, orNone, and focused engine tests cover the expanded deactivation behavior.animation.deactivate_scene()now accepts aScene, a scene ID string, or no argument, with the no-argument form deactivating the current active scene when present.EventHandler.Action.DEACTIVATE_SCENEevent registrations now support aScene, a scene ID string, orNone, and focused engine tests cover the expanded deactivation behavior.- Updated
engine.base_characterdocumentation to reflect object-based event registration, expanded path and scene deactivation behavior,EffectCharacterruntime state, and the current ordering and reset semantics used during character updates and event handling. - Updated
engine.base_configdocumentation to clarifyparser_specrequirements,ArgSpec-based config construction, and_build_config()fallback and error behavior. - Updated
utils.argutilsdocumentation to remove stale module references and better describe parser specs, argument specs, tuple normalization, range validators, symbol validation, canvas dimensions, and easing parser return values. - Updated
utils.ansitoolsdocumentation to clarify ANSI color parsing normalization and cursor movement indexing and relative movement behavior. - Updated
utils.colortermdocumentation to clarify RGB tuple conversion, ANSI selector meanings, and accepted XTerm and hex color inputs. - Updated
utils.easingdocumentation to remove stale motion-specific wording and better describe sequence-prefix easing, clamp behavior, and stepwise added/removed slice tracking. - Updated
utils.geometrydocumentation to clarify zero-size rectangle behavior, ray extrapolation wording, sampled bezier-length approximation, and the module's public helper list. - Updated
utils.graphicsdocumentation to alignColor,ColorPair, andGradientdocs with storedColorobjects, discrete spectrum lookup behavior, color normalization, and color-shift interpolation and extrapolation semantics. - Updated
utils.hextermdocumentation to clarify accepted color types, nearest-color matching behavior, return types, and the module's mapping-focused summary. Color.__str__()andColorPair.__str__()now correctly include valid XTerm color0in their output, and focused utility tests cover the regression.shift_color_towards()now uses an LRU cache to avoid recomputing repeated color transitions during effect rendering.- Updated the
terminaltexteffects.__main__entry-point documentation to describe effect discovery, plugin loading, duplicate-command validation, and the CLI's input and exit behavior more accurately.
Effects Changes (0.15.0)
- BouncyBalls - Added
existing_color_handling="dynamic"support. Balls still fall using the effect's ball colors, and on settle they now transition to the input symbol plus any parsed input ANSI fg/bg colors. Characters without parsed input colors settle with no explicit final color so they render using the terminal default color. - Beams - Fixed
existing_color_handling="dynamic"final-state handling so characters with parsed input ANSI fg/bg colors settle back to those input colors, while characters without parsed input colors now finish with no explicit color and render using the terminal default color. - BinaryPath - Fixed
existing_color_handling="dynamic"final-state handling so characters now settle back to any parsed input ANSI fg/bg colors on a per-channel basis, and characters without parsed input colors finish with no explicit color and render using the terminal default color. - Bubbles - Added
existing_color_handling="dynamic"support. Bubbles still float and pop using the effect's own colors, and after popping characters now transition to the input symbol plus any parsed input ANSI fg/bg colors. Characters without parsed input colors settle with no explicit final color so they render using the terminal default color. - Burn - Added
existing_color_handling="dynamic"support. Characters still ignite and burn using the effect's own colors, and after the burn scene completes they now transition to the input symbol plus any parsed input ANSI fg/bg colors. Characters without parsed input colors settle with no explicit final color so they render using the terminal default color. Burn now processes input spaces that carry parsed ANSI colors indynamicandalwaysmodes, preserving background-colored swatch cells. - ColorShift - Added
existing_color_handling="dynamic"support for the final settle transition. Characters still play the effect's shifting gradient animation, and when the final gradient runs they now transition to the input symbol plus any parsed input ANSI fg/bg colors. Characters without parsed input colors settle with no explicit final color so they render using the terminal default color. - Crumble - Added
existing_color_handling="dynamic"support for the faded intro and post-flash settle scenes. Characters with parsed input ANSI fg/bg colors now crumble using faded versions of those colors and settle back to their input colors, while characters without parsed input colors start from a neutral gray and settle with no explicit final color. - Decrypt - Added
existing_color_handling="dynamic"support in the discovered scene. Characters keep the effect's ciphertext colors during typing and decryption, then transition to any parsed input ANSI fg/bg colors when discovered. Characters without parsed input colors finish with no explicit color so they render using the terminal default color. - ErrorCorrect - Added
existing_color_handling="dynamic"support. Characters that are never swapped now use parsed input ANSI fg/bg colors from the start, while swapped characters keep the effect's error/correction colors until the final block wipe and settle scene, where they now resolve to their input colors or no explicit color if none were parsed. - Expand - Added
existing_color_handling="dynamic"support in the synced final gradient scene, so characters now expand outward using the effect's starting settle color and resolve to any parsed input ANSI fg/bg colors or no explicit color if none were parsed. The effect's--final-gradient-framesoption was removed because the synced scene now progresses by path distance rather than frame duration. - Fireworks - Added
existing_color_handling="dynamic"support infall_scn. Firework launch and bloom phases remain effect-colored, and when characters fall into place they now transition to any parsed input ANSI fg/bg colors or to no explicit color if none were parsed. - Highlight - Added
existing_color_handling="dynamic"support based on parsed input foreground colors. Characters with input fg colors now use that color as the highlight base and return color, while characters without input fg colors remain in terminal default color and receive no visible highlight effect. Highlight now preserves parsed input background colors on base and highlight frames, including bg-only input spaces used by the visual swatches. - LaserEtch - Added
existing_color_handling="dynamic"support in the etched character cooling scene. Characters with parsed input ANSI fg/bg colors now cool directly from the effect's heat colors into those input colors, while characters without parsed input colors cool to white and then finish with no explicit color so they render using the terminal default color. LaserEtch now etches input spaces that carry parsed ANSI colors instead of skipping them, preserving background-colored swatch cells. - Matrix - Added
existing_color_handling="dynamic"support in theresolvescene. Matrix rain, fill, highlight, and symbol-swapping phases remain effect-colored, and when characters resolve they now transition to any parsed input ANSI fg/bg colors or to no explicit color if none were parsed. Matrix now resolves input spaces that carry parsed ANSI colors instead of hiding them, preserving background-colored swatch cells. - MiddleOut - Added
existing_color_handling="dynamic"support in thefullscene after the center phase completes. Characters still begin from the effect'sstarting_color, then transition to any parsed input ANSI fg/bg colors or to no explicit color if none were parsed. - OrbittingVolley - Added
existing_color_handling="dynamic"support for launched input characters. The orbiting launcher visuals remain effect-colored, while launched characters now use any parsed input ANSI fg/bg colors immediately or no explicit color if none were parsed. - Pour - Added
existing_color_handling="dynamic"support in the pour gradient scene. Characters still begin from the effect'sstarting_color, then transition to any parsed input ANSI fg/bg colors or to no explicit color if none were parsed. - Print - Added
existing_color_handling="dynamic"support in the typed animation scene. Characters still show the print-head block symbols and color while being typed, then resolve to any parsed input ANSI fg/bg colors or to no explicit color if none were parsed. - Rain - Added
existing_color_handling="dynamic"support infade_scn. Characters still fall as rain-colored rain symbols, and when they reach their input coordinates they now fade into any parsed input ANSI fg/bg colors or to no explicit color if none were parsed. - RandomSequence - Added
existing_color_handling="dynamic"support in the fade-in scene. Characters with parsed input ANSI fg/bg colors now fade in to those input colors, while uncolored characters fade through neutral gray and then finish with no explicit color applied. - Rings - Added
existing_color_handling="dynamic"support that uses parsed input ANSI fg/bg colors or no color throughout the entire effect. In dynamic mode, the start, ring, and disperse phases no longer apply effect-owned ring colors. - Scattered - Added
existing_color_handling="dynamic"support that uses parsed input ANSI fg/bg colors or no color for the entire synced movement scene. In dynamic mode, no effect-owned gradient colors are applied during the effect. - Slice - Added
existing_color_handling="dynamic"support that uses parsed input ANSI fg/bg colors or no color for the entire effect. In dynamic mode, no effect-owned final gradient colors are applied while the sliced groups move into place. - Slide - Added
existing_color_handling="dynamic"support that uses parsed input ANSI fg/bg colors or no color for the entire effect. In dynamic mode, no effect-owned gradient colors are applied while character groups slide into place. - Smoke - Added
existing_color_handling="dynamic"support that starts characters in black, then reveals them using parsed input ANSI fg/bg colors or no color. In dynamic mode, the smoke and paint phases no longer use effect-owned colors. - Spotlights - Completed
existing_color_handling="dynamic"support with per-channel bright and dim input-color handling. Colored characters now start as faded input colors, uncolored characters start as faded neutral gray, and the final spotlight expand clears temporary fallback foreground color so bg-only or uncolored characters finish without an unintended fg color. Spotlights now illuminates input spaces that carry parsed ANSI colors, preserving background-colored swatch cells during illumination and final expand. - Spray - Added
existing_color_handling="dynamic"support that uses parsed input ANSI fg/bg colors or no color for the entire effect. In dynamic mode, the spray scene no longer applies effect-owned gradient colors. - Swarm - Added
existing_color_handling="dynamic"support in the landinginput_scn. Swarm and flash motion remain effect-colored, and settling characters now transition to parsed input ANSI fg/bg colors or to no explicit color if none were parsed. - Sweep - Added
existing_color_handling="dynamic"support in the second sweep scene. The first sweep remains unchanged, the second sweep shimmer now draws from parsed input ANSI fg/bg colors when available, and characters finish in their input colors or with no explicit color if none were parsed. - SynthGrid - Added
existing_color_handling="dynamic"support at the end ofdissolve_scn. The dissolve shimmer remains effect-colored, and the final dissolve frame now resolves to parsed input ANSI fg/bg colors or to no explicit color if none were parsed. SynthGrid now applies final input colors to input spaces as well as visible symbols, preserving background-colored swatch cells. - Thunderstorm - Added
existing_color_handling="dynamic"support from the beginning of the effect. Text characters now start from parsed input ANSI colors or neutral gray, fade down for the storm, still use the normal lightning flash/glow behavior, and return after the storm to normal input brightness or to no explicit color for originally uncolored text. - Unstable - Added
existing_color_handling="dynamic"support from the start of the effect. Characters now begin in parsed input ANSI fg/bg colors or neutral gray, still shift toward the effect's unstable color duringrumble, and then coalesce back to their input colors or to no explicit color if none were parsed. - VHSTape - Added
existing_color_handling="dynamic"support for the stable text phases and final redraw. Characters now rest in parsed input ANSI fg/bg colors or neutral gray, effect-colored glitch and noise scenes remain unchanged, and the final redraw resolves to input colors or to no explicit color if none were parsed. - Waves - Added
existing_color_handling="dynamic"support for the steady state and final settle. Characters now start and end in parsed input ANSI fg/bg colors or with no explicit color if none were parsed, while the animated wave itself continues to use the effect's own symbols and colors unchanged. - Wipe - Added
existing_color_handling="dynamic"support for the entire wipe scene. In dynamic mode, all wipe frames now use parsed input ANSI fg/bg colors or no explicit color, and the effect-owned wipe gradient is no longer applied. - Overflow - Fixed
existing_color_handling="dynamic"final-row handling so uncolored characters no longer pick up the final gradient color and instead remain uncolored. Final rows with parsed input ANSI fg/bg colors continue to preserve those input colors.