| name | ascim |
| description | Create Manim-style ASCII animations in the terminal with the ascim_play Pi tool. Use when the user asks for an ASCII animation, terminal animation, CLI visualization, animated diagram, or educational math/programming animation. |
| license | MIT |
ascim
Use the ascim_play tool to render terminal ASCII animations while chatting.
Provide a structured scene spec, not Python code.
For a built-in 30-second smoke/demo flow, run /ascim-demo or /ascim-demo core.
Scene Spec
Recommended defaults:
width: 60-100
height: 16-28
fps: 8-16
- total duration: under 15 seconds
Objects need stable id values. Supported object types:
text: text, position, style
dot: char, position, style
line: start, end, char, style
arrow: start, end, char, head, style
vector: vector or end, optional start, char, head, style
path: points, char, closed, style
brace: length, position, orientation, side, char, style
label: text, anchor, offset, pointer, pointer_char, style
number_line: x_range, length, tick_every, label_every, position, style
matrix: values, cell_width, position, style
arc: radius, start_degrees, degrees, char, position, style
rectangle: width, height, char, fill, position, style
circle: radius, char, position, style
axes: x_range, y_range, tick_every, style
function_graph: expression, x_range, samples, char, style
Supported actions:
add, remove, wait
write, create, fade_in, fade_out
move_to, shift, scale
rotate: degrees or angle, optional about
follow_path: points or a path object id
morph_text: text
animate with move_to, shift, scale, or rotate
- grouped play:
{ "type": "play", "duration": 1.0, "animations": [...] }
For explanatory scenes, add a short caption to each major action. Captions are
shown outside the ASCII canvas, so they do not collide with the animation.
Example
{
"scene": {
"title": "orbit",
"width": 72,
"height": 20,
"fps": 12,
"objects": [
{"id": "title", "type": "text", "text": "orbit", "position": [0, 8]},
{"id": "ring", "type": "circle", "radius": 4, "char": ".", "style": {"fg": "bright_blue"}},
{"id": "dot", "type": "dot", "char": "@", "position": [-8, 0], "style": {"fg": "bright_yellow", "bold": true}}
],
"actions": [
{"type": "write", "target": "title", "duration": 0.5},
{"type": "play", "duration": 1.0, "animations": [
{"type": "create", "target": "ring"},
{"type": "fade_in", "target": "dot"}
], "caption": "Draw the path before moving the point."},
{"type": "animate", "target": "dot", "move_to": [8, 0], "duration": 1.5, "caption": "The point moves across the circle."},
{"type": "wait", "duration": 0.5, "caption": "Final state."}
]
}
}
For explanatory motion, prefer these patterns:
{"type": "follow_path", "target": "dot", "path": "curve", "duration": 2.0}
{"type": "rotate", "target": "arrow", "degrees": 90, "about": [0, 0], "duration": 1.0}
{"type": "morph_text", "target": "equation", "text": "E = mc^2", "duration": 0.8}