kinetickit: deterministic 2D and 3D animation for Python
A domain-neutral engine for precise, deterministic 2D and 3D animation.
kinetickit 1.0 is in beta
kinetickit 1.0.0b2 is a pre-release. The contracts in Compatibility are meant to be stable but may change between pre-releases, always with a changelog entry.
from kinetickit import Animation, Bounds2D, Point2D, Scene2D, Vec2, ease
dot = Point2D(id="dot", position=Vec2(1, 1), size=8, color="#e4572e")
scene = Scene2D(dot)
scene = scene.bind({scene.camera.ref("view"): Bounds2D(Vec2(0, 0), Vec2(10, 10))})
motion = dot.animate.position.to(Vec2(9, 9), duration=1.5, easing=ease.out_cubic)
animation = Animation(scene, motion)
animation.save("dot.svg", width=400, height=400)
Features
-
Scenes and motion
Immutable 2D and 3D nodes, and motions that you compose with
then,with_,delay,repeat,yoyo,reverseandtrim. -
Time and easing
Frames at exact times, easing families and cubic Bézier timing, keyframes and markers.
-
Morphing and transitions
Path, mesh and surface morphs with explicit correspondence, and scene transitions that match nodes by stable id.
-
3D scenes and cameras
Meshes, height-field surfaces, lights, and perspective or orthographic cameras with one shared projection.
-
Three outputs from one scene
Animated SVG, streamed GIF up to 1200 DPI, and self-contained interactive HTML, each checked against its capabilities before a file is written.
-
Typography
Text that arrives as a neutral asset, laid out by GlyphKit from caller-provided fonts, with permission-checked font subsets embedded.
-
Accessibility and interaction
Roles, labels and reading order, a reduced-motion policy, and data-only interactions bound to node ids.
-
Examples and adapters
A chart from plain shapes, a plain Python object model animated through an adapter, and a lit 3D surface.
Install
Requires Python 3.10 to 3.13. See Installation for the optional extras.
Examples
Every figure in this documentation comes with the script that writes it. Download them all in one file.