Reanimate is a library for programmatically generating animations with a twist towards mathematics / 2D vector drawings. A lot of inspiration was drawn from 3b1b's manim library.
Reanimate aims at being a batteries-included way of gluing together different technologies: SVG as a universal image format, LaTeX for typesetting, ffmpeg for video encoding, inkscape/imagemagick for rasterization, potrace for vectorization, blender/povray for 3D graphics, and Haskell for scripting.
In more practical terms, reanimate is a library for turning code like this:
main = reanimate $ docEnv $ playThenReverseA drawCircle
... into animations like this:
If you like what you see, boost reanimate's visibility with a star ⭐ or consider becoming a sponsor ❤.
Reanimate is built using the Haskell Tool Stack. For installation instructions, see: https://docs.haskellstack.org/en/stable/README/
Optionally, you can install one or more of these programs to enable additional features:
I highly recommend that you install at least 'ffmpeg' and 'latex'.
Reanimate offers stack templates for getting started with a minimal example and automatic code reloading. Running the commands below will put a one-line animation in the 'animate' folder and then display the animation in a browser window. You can then edit the animation source code and watch the animation update in real time:
$ stack new animate github:reanimate/plain
$ cd animate/
$ # both 'cabal repl' and 'stack repl' can be used here:
$ cabal repl
:cmd reanimateLive
Reanimate has a large collection of small examples which are both used for regression testing and for GIFs in the API reference documentation. You can run these examples by first cloning the repository and then running the examples as if they were executables:
$ git clone https://github.com/reanimate/reanimate.git
$ cd reanimate/
$ stack build
$ stack ./examples/doc_drawCircle.hs
This should render the doc_drawCircle example in a new browser window. Automatic code reloading
will not be enabled unless you run :cmd reanimateLive from a GHCi session.
It's also possible to use cabal instead of stack:
$ git clone https://github.com/reanimate/reanimate.git
$ cd reanimate/
$ cabal v2-build
$ # Workaround for a cabal bug: https://github.com/haskell/cabal/issues/6235
$ export reanimate_datadir=`pwd`
$ cabal v2-exec -- runhaskell examples/doc_drawCircle.hs
If you'd rather use nix to build an environment with all of the system dependencies mentioned previously do:
$ git clone https://github.com/reanimate/reanimate.git
$ cd reanimate/
$ nix-shell
[nix-shell:./reanimate]$ cabal v2-build --write-ghc-environment-files=always
If you have cachix available run cachix use cdodev before you drop into the nix shell. This will significantly speed things up!
This will write a file in the working directory like
.ghc.environment.x86_64-linux-8.8.3 which will enable commands like runhaskell
to pick up reanimate.
Now, still within the nix-shell you can run:
[nix-shell:./reanimate]$ reanimate_datadir=. runhaskell examples/doc_drawCircle.hs
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
Completed animations are uploaded to the Reanimated Science channel.
Animation snippets are uploaded to the Reanimated Science Shorts channel.
Content type
Image
Digest
Size
2.3 GB
Last updated
about 5 years ago
docker pull reanimate/playground