kinemo
Explanatory animations (math, algorithms, engineering, data) written in Python, with a live preview and a native core in Rust. The API was designed to be written by people and by AI without errors: one form per concept, full typing, and errors that already carry the fix.
import kinemo as k
@k.scene
def hello(s: k.Scene):
title = k.Text("Hello, kinemo").place(at="center")
s.play(k.write(title))
s.play(title.to(color=k.BLUE, scale=1.5))
s.wait(1)
kinemo dev hello.py # browser preview with hot reload and a draggable timeline
kinemo check hello.py # errors, lints and timeline summary, without rendering
kinemo render hello.py # MP4 (also webm, mov, gif, png, slides)
What kinemo does
- The script runs once and produces a timeline. The frame at
tis a pure function oft: you can scrub the timeline, render in parallel and keep everything cached. - Explicit time.
s.playblocks the cursor,s.startdoes not;k.seq,k.par,k.stagger,s.during,s.tempoand clips (@k.clip) compose animations as values. - Constraint layout.
.place(above=tri),k.Row,k.Grid: the relations keep holding while the objects move. - Reactive signals.
x.to(3),k.Text(lambda: f"{x():.1f}"),ball.set(x=other.x). Lambdas and.mapare traced to native code; opaque Python only withk.python(fn). - Events and stateful systems.
k.when,@event.on,s.wait_for,k.integrate,k.simulate— resolved before rendering, up to a fixed point. - Text, code and math with addressable parts (
txt["world"],code.highlight) andk.morphbetween versions. - Charts and data.
k.Axes, plots that grow with a signal, animated zoom; data via Arrow (polars, pandas, pyarrow, duckdb) without copying. - Stable diagnostics. Every error has a code (
K0401), line, instant and fix;kinemo check --fixapplies the safe ones. Manim names (Create,.animate) are recognized and translated. - Built for agents.
kinemo check --json,kinemo inspect --json,kinemo snapand thekinemo mcpserver close the write → verify → fix loop without needing vision.
Installation
pip install kinemo
Wheels for Linux, macOS and Windows, Python ≥ 3.11. Video output needs ffmpeg on your path.
kinemo new hello starts a project.
From source
Requirements: stable Rust, Python ≥ 3.11, uv and ffmpeg.
See CONTRIBUTING.md for the tests and conventions.
uv venv .venv
uv pip install --python .venv/bin/python maturin pytest numpy polars
source .venv/bin/activate
maturin develop
GPU preview (optional): maturin develop --features gpu compiles the Vello (wgpu) backend
and the kinemo dev server then rasterizes on the GPU when an adapter is available,
falling back to the CPU (tiny-skia) otherwise. The default build does not include wgpu. The
final render stays on the CPU, which is the reference.
Tests
cargo test --workspace # Rust core
python -m pytest -q # API, diagnostics, contracts and golden snapshots
Golden snapshots live in tests/golden/ (CPU renderer, byte-identical). To regenerate
them after an intentional change: KINEMO_UPDATE_GOLDEN=1 pytest tests/python/test_golden.py.
Architecture
The author only sees Python; everything below the IR is Rust.
python/kinemo/ public API (k.*), build phase, handlers, CLI
crates/kinemo-ir IR types (serializable scene)
crates/kinemo-eval timelines, expressions, easing, colors (OKLab)
crates/kinemo-layout geometry, containers, constraints, glyphs
crates/kinemo-text text (rustybuzz), embedded fonts
crates/kinemo-code code highlighting (tree-sitter) and diff
crates/kinemo-math LaTeX → typst, no TeX installation
crates/kinemo-resolve sampling-based visual lints
crates/kinemo-render display list, tiny-skia, morph, movies, segments
crates/kinemo-render-gpu optional Vello (wgpu) backend, tolerance tests vs tiny-skia
crates/kinemo-encode ffmpeg (mp4, webm, mov, gif)
crates/kinemo-server preview (axum + WebSocket)
crates/kinemo-py PyO3 bindings (the only crate that knows about Python)
Documentation
Start with the documentation index: numbered guides from getting started onwards, the complete API reference, examples with rendered frames, and caveats. The design document is docs/specs.md.
The same docs, with a landing page and the examples as videos, build into a static SvelteKit website: see website/README.md.
License
Licensed under either of Apache License 2.0 or MIT, at your option. Unless you state otherwise, any contribution you submit for inclusion in kinemo is dual-licensed as above, without any additional terms.
The embedded DejaVu fonts follow their license. The licenses of
the Rust crates compiled into the wheels are in THIRD_PARTY_LICENSES.md
(scripts/third_party_licenses.py regenerates it).
Metadata
Release files for kinemo 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kinemo-0.9.0.tar.gz | 548.1 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| kinemo-0.9.0-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details |
| kinemo-0.9.0-cp311-abi3-manylinux_2_28_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| kinemo-0.9.0-cp311-abi3-manylinux_2_28_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| kinemo-0.9.0-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| kinemo-0.9.0-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 143.7 MB
Release files / kinemo-0.9.0.tar.gz
| Download URL | kinemo-0.9.0.tar.gz |
|---|---|
| Size | 548.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ea5109b3934ed6ec769e540413b0424ac7f25e6bb6e90ce6376e313c04d2eb39
|
|
BLAKE2b-256 checksum How to use checksums |
40e4b611d542c9d6119b456e42fa741c00270a016b0fdabdc3798c7b907a1345
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / kinemo-0.9.0-cp311-abi3-win_amd64.whl
| Download URL | kinemo-0.9.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 27.2 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
afc98cf443f2e93f4d4ce8b3572a857151bc4322b5fb8e7cd9c77a0dc3477031
|
|
BLAKE2b-256 checksum How to use checksums |
b510c86750a97be8690733c2568fdc58ade49ce7a74e0d18967d0f253867e64c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / kinemo-0.9.0-cp311-abi3-manylinux_2_28_x86_64.whl
| Download URL | kinemo-0.9.0-cp311-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 29.4 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
38e80690ec93cd63f842f84c972bae7d7cf8340fa58cc91f734e84bfdb1fcb69
|
|
BLAKE2b-256 checksum How to use checksums |
83275afa6e8a5dc2d192e306e7177bf65e2ef04b824de3e9194a484e424f5339
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / kinemo-0.9.0-cp311-abi3-manylinux_2_28_aarch64.whl
| Download URL | kinemo-0.9.0-cp311-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 30.5 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
2c0ec02471f477c22a61b214f518b99fecc3992b7562ac4dd370b1490e1a26aa
|
|
BLAKE2b-256 checksum How to use checksums |
ed1f96c36a5e80fce5f923f606146a39a7664133fb875776daff85f2f716550b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / kinemo-0.9.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | kinemo-0.9.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 27.9 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a5446ec734b109eeaa9381c5855028a361cbe14d627e20a9c3f7df4d77b64f4b
|
|
BLAKE2b-256 checksum How to use checksums |
e67c33ea1f40e5010c48d88ef98448f11ef71cff4dff4b8e305d199e14b057b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency logRelease files / kinemo-0.9.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | kinemo-0.9.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 28.3 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0d3eb325472044dd454f47d26d11cee174a4c9a3df4db5259832f4f924e9d7df
|
|
BLAKE2b-256 checksum How to use checksums |
feba89de46035c8da8d77b8bcfd8b50771ae7377e145d7fab1e4ad81dcae06ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.
Transparency log