Skip to main content

SimKit : A Simulation Toolkit for Computer Animation

CI Docs

This library should be considered a toolbox for the development of physically-based animation research. It is designed to be modular, easy to use, and easy to extend. In particular, it is designed to be emphasize fast creative and experimental prototyping.

Installation

Clone the repository:

git clone --recursive https://github.com/otmanon/simkit.git

Installation is recommended on a fresh conda environment:

cd simkit
conda create -n simkit python=3.11
conda activate simkit
pip install -e .

Optional Dependencies

The base install only requires numpy and scipy -- and now covers the clustering / sampling helpers (farthest_point_sampling, spectral_clustering, spectral_cubature) too. Heavier or specialized dependencies are exposed as named extras so you only install what you need. Importing simkit is always safe -- functionality whose extras are missing just isn't exported, and a one-line warning tells you exactly what to install.

Extra Adds Enables
mesh libigl 2D Triangle meshing (shape_outlines)
viz matplotlib, polyscope simkit.matplotlib, simkit.polyscope plotters
solvers cvxopt Sparse eigensolvers (simkit.eigs)
video Pillow simkit.filesystem image / video frame helpers
cmaes cma simkit.solvers.CMAESSolver
all union of the above Everything end-user-facing
dev pytest, pytest-cov Running the test suite
docs sphinx, sphinx-autoapi, pydata-sphinx-theme, ... Building the documentation

Install one or more extras with the usual pip syntax:

pip install -e ".[mesh]"            # just mesh ops
pip install -e ".[mesh,viz]"        # multiple extras
pip install -e ".[all]"             # everything end-user-facing
pip install -e ".[all,dev,docs]"    # everything, including dev tooling

Running Examples

The repository includes several end-to-end demos under examples/, each reproducing a slice of a published paper:

  • fast_complementary_dynamics/ -- Fast Complementary Dynamics via Skinning Eigenmodes (SIGGRAPH 2023).
  • modal_muscles/ -- CMA-ES-optimised modal-actuator locomotion.
  • subspace_mfem/ -- Subspace Mixed FEM elastodynamics (SIGGRAPH Asia 2023), including an interactive demo.
  • interactive_demos/ -- 15 short polyscope demos, from a single deformation gradient up to interactive 3D mixed FEM.

Force-dual / linear modal-analysis subspaces are not on main yet; they live on the force_dual_modes branch.

Each demo has its own README with the exact extras to install and the command to run. See examples/README.md for the index. As a quick start:

pip install -e ".[mesh,viz,video]"
python examples/subspace_mfem/drop_fem_vs_mfem.py

Running tests

pip install -e ".[dev]"
pytest

Building the documentation

The docs are generated from the docstrings in the simkit package using Sphinx + sphinx-autoapi + the PyData theme. To build them locally:

pip install -e ".[docs]"
sphinx-build -b html docs docs/_build/html

Then open docs/_build/html/index.html in your browser. Every function in simkit/ is automatically picked up and rendered into the API reference -- just write a good docstring and rebuild.

Release / dev workflow

Two equivalent ways to do every build/test/release/docs task. Pick whichever you prefer.

  • scripts/COMMANDS.md — raw, copy/paste-able bash commands organized by task. Read it top-to-bottom or grab whichever block you need. No abstraction, no functions, just shell commands.
  • scripts/release.sh — the same commands wrapped as subcommands so you can run e.g. ./scripts/release.sh build instead of pasting. There's also a Makefile with make build / make docs / etc. targets.

First-time setup on a new machine:

chmod +x scripts/release.sh
conda activate simkit   # so `python` points at the right interpreter

Quick reference for the script form:

What Command
Build sdist + wheel ./scripts/release.sh build (or make build)
Upload to TestPyPI ./scripts/release.sh upload-test
Install from TestPyPI in a throwaway venv ./scripts/release.sh test-install
Upload to real PyPI ./scripts/release.sh upload-prod
Build the docs ./scripts/release.sh docs
Build + open the docs ./scripts/release.sh docs-open
Remove all build/docs/cache junk ./scripts/release.sh clean

Local upload vs GitHub Actions Trusted Publishing

The script has the full tradeoff in a header comment. Summarized:

  • Local (upload-test / upload-prod): fastest path, but requires a PyPI API token on your laptop and the build runs in your local environment. Best for the very first upload (claiming the project name) or one-off hotfixes.
  • GitHub Actions (.github/workflows/release.yml, triggered by pushing a vX.Y.Z git tag): no secrets stored anywhere thanks to Trusted Publishing; every release is a reproducible build from a tagged commit; auto-publishes to TestPyPI first, then PyPI. Best for every release after the first.

Recommended flow: claim the project on PyPI/TestPyPI with one local upload, then switch to tag-triggered GitHub Actions for everything afterward:

git tag v0.1.1
git push --tags

Metadata

Release files for simkit 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for simkit 0.1.8
File Size Uploaded
simkit-0.1.8.tar.gz 214.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for simkit 0.1.8
File Interpreter ABI Platform
simkit-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 410.0 kB

Release files / simkit-0.1.8.tar.gz

Download URL simkit-0.1.8.tar.gz
Size 214.7 kB
Tags Source
SHA-256 checksum
How to use checksums
cc41ee7026e132d564a39319e0d66469af249dca19703036514a17f17ac5f4bb
BLAKE2b-256 checksum
How to use checksums
60effffedf3e35e63801c522a72fa1618e9f77fa00d87d280b1fa953fd75efa8
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 Sep 24, 2026.

Transparency log

Release files / simkit-0.1.8-py3-none-any.whl

Download URL simkit-0.1.8-py3-none-any.whl
Size 195.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f5a7758a91a7975ef21f1de17ae4ef4d003b1bfb51d56bcdbc1af4bd54595da9
BLAKE2b-256 checksum
How to use checksums
4aaba47ccf2277af9e59111f226dd53ad01c533181b50ff5090e876c23065d75
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 Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page