{"id":13687543,"url":"https://github.com/reanimate/reanimate","last_synced_at":"2025-05-14T18:06:17.675Z","repository":{"id":38011385,"uuid":"170571989","full_name":"reanimate/reanimate","owner":"reanimate","description":"Haskell library for building declarative animations based on SVG graphics","archived":false,"fork":false,"pushed_at":"2025-02-06T18:32:33.000Z","size":7972,"stargazers_count":1148,"open_issues_count":30,"forks_count":62,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-04-13T21:33:52.157Z","etag":null,"topics":["2d","animations","gif","haskell","svg"],"latest_commit_sha":null,"homepage":"https://reanimate.github.io","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reanimate.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"Lemmih"}},"created_at":"2019-02-13T20:08:04.000Z","updated_at":"2025-04-13T20:18:25.000Z","dependencies_parsed_at":"2025-02-23T11:00:40.212Z","dependency_job_id":"cb00fb1c-e078-4bb3-95af-30be3db802c8","html_url":"https://github.com/reanimate/reanimate","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reanimate%2Freanimate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reanimate%2Freanimate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reanimate%2Freanimate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reanimate%2Freanimate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reanimate","download_url":"https://codeload.github.com/reanimate/reanimate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254198514,"owners_count":22030965,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["2d","animations","gif","haskell","svg"],"created_at":"2024-08-02T15:00:56.309Z","updated_at":"2025-05-14T18:06:12.662Z","avatar_url":"https://github.com/reanimate.png","language":"Haskell","funding_links":["https://github.com/sponsors/Lemmih"],"categories":["Haskell"],"sub_categories":[],"readme":"[![Hackage](https://img.shields.io/hackage/v/reanimate.svg?color=success)](https://hackage.haskell.org/package/reanimate)\n[![packagename on Stackage LTS](https://stackage.org/package/reanimate/badge/lts)](https://stackage.org/lts/package/reanimate)\n[![packagename on Stackage Nightly](https://stackage.org/package/reanimate/badge/nightly)](https://stackage.org/nightly/package/reanimate)\n[![Build Status](https://dev.azure.com/lemmih0612/reanimate/_apis/build/status/reanimate.reanimate?branchName=master)](https://dev.azure.com/lemmih0612/reanimate/_build/latest?definitionId=2\u0026branchName=master)\n[![Documentation Status](https://readthedocs.org/projects/reanimate/badge/?version=latest)](https://reanimate.readthedocs.io/en/latest/?badge=latest)\n![Platforms](https://img.shields.io/badge/platform-linux%20%7C%20osx%20%7C%20windows-informational)\n![GitHub repo size](https://img.shields.io/github/repo-size/reanimate/reanimate)\n[![API docs coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Freanimate.github.io%2Freanimate%2Fhaddock_badge.json)](https://reanimate.github.io/reanimate/haddock.txt)\n[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/reanimate/discord-bot?label=discord-bot)](https://hub.docker.com/repository/docker/reanimate/discord-bot)\n[![Discord](https://img.shields.io/discord/731822102935502908)](https://discord.gg/Qs28Dv6)\n\n# Reanimate\n\nReanimate is a library for programmatically generating animations with a twist towards\nmathematics / 2D vector drawings. A lot of inspiration was drawn from 3b1b's manim library.\n\nReanimate aims at being a batteries-included way of gluing together different technologies: SVG as\na universal image format, LaTeX for typesetting, ffmpeg for video encoding, inkscape/imagemagick\nfor rasterization, potrace for vectorization, blender/povray for 3D graphics, and Haskell for\nscripting.\n\nIn more practical terms, reanimate is a library for turning code like this:\n\n```haskell\nmain = reanimate $ docEnv $ playThenReverseA drawCircle\n```\n\n... into animations like this:\n\n[![Draw Circle](https://i.imgur.com/C02hPw8.gif)](examples/doc_playThenReverseA.hs)\n\nIf you like what you see, boost reanimate's visibility with a star ⭐ or consider becoming a [sponsor ❤](https://github.com/sponsors/Lemmih).\n\n# What is reanimate good at?\n\n## Vector graphics and math\n[![Tangent/Normal](https://i.imgur.com/w6gEkbl.gif)](examples/demo_tangent.hs)\n[![Fourier](https://i.imgur.com/pX4YRa4.gif)](examples/tut_glue_fourier.hs)\n\n## Mapping and tracing\n[![Geo JSON](https://i.imgur.com/OrKiOqF.gif)](videos/map-projection/gif.hs)\n[![Object tracing](https://i.imgur.com/Y6NsPWF.gif)](examples/tut_glue_potrace.hs)\n\n## Mathematical typesetting and effects\n[![LaTeX](https://i.imgur.com/e6oO4wz.gif)](examples/tut_glue_latex.hs)\n[![Stars](https://i.imgur.com/yek3v4b.gif)](examples/demo_stars.hs)\n\n## 2D physics and 3D graphics\n[![2D Physics](https://i.imgur.com/ZHUfWdp.gif)](examples/tut_glue_physics.hs)\n[![3D graphics](https://i.imgur.com/4wdtuJw.gif)](examples/tut_glue_povray.hs)\n\n# Prerequisites\n\nReanimate is built using the Haskell Tool Stack. For installation instructions, see: https://docs.haskellstack.org/en/stable/README/\n\nOptionally, you can install one or more of these programs to enable additional features:\n * [ffmpeg](https://www.ffmpeg.org/), enables rendering animations to video files.\n * [latex](https://www.latex-project.org/), enables mathematical typesetting.\n * [inkscape](https://inkscape.org/)/[imagemagick](https://imagemagick.org/index.php), enables SVG-\u003ePNG convertions.\n * [potrace](http://potrace.sourceforge.net/), enables PNG-\u003eSVG tracing.\n * [povray](https://www.povray.org/), enables raytracing.\n * [blender](https://www.blender.org/), enables 3D graphics.\n\nI highly recommend that you install at least 'ffmpeg' and 'latex'.\n\n# Getting started / Running an example\n\nReanimate offers stack templates for getting started with a minimal example and\nautomatic code reloading. Running the commands below will put a one-line animation\nin the 'animate' folder and then display the animation in a browser window. You can\nthen edit the animation source code and watch the animation update in real time:\n\n```console\n$ stack new animate github:reanimate/plain\n$ cd animate/\n$ # both 'cabal repl' and 'stack repl' can be used here:\n$ cabal repl\n:cmd reanimateLive\n```\n\n## Running examples from the repository\n\nReanimate has a large collection of small examples which are both used for regression testing\nand for GIFs in the API reference documentation. You can run these examples by first cloning the\nrepository and then running the examples as if they were executables:\n\n```console\n$ git clone https://github.com/reanimate/reanimate.git\n$ cd reanimate/\n$ stack build\n$ stack ./examples/doc_drawCircle.hs\n```\n\nThis should render the `doc_drawCircle` example in a new browser window. Automatic code reloading\nwill not be enabled unless you run `:cmd reanimateLive` from a GHCi session.\n\n\n## Running examples from the repository using Cabal\n\nIt's also possible to use cabal instead of stack:\n\n```console\n$ git clone https://github.com/reanimate/reanimate.git\n$ cd reanimate/\n$ cabal v2-build\n$ # Workaround for a cabal bug: https://github.com/haskell/cabal/issues/6235\n$ export reanimate_datadir=`pwd`\n$ cabal v2-exec -- runhaskell examples/doc_drawCircle.hs\n```\n\n## Using Nix\n\nIf you'd rather use nix to build an environment with all of the system dependencies mentioned previously do:\n\n```console\n$ git clone https://github.com/reanimate/reanimate.git\n$ cd reanimate/\n$ nix-shell\n[nix-shell:./reanimate]$ cabal v2-build --write-ghc-environment-files=always\n```\n\nIf you have cachix available run `cachix use cdodev` before you drop into the nix shell. This will significantly speed things up!\n\nThis will write a file in the working directory like\n`.ghc.environment.x86_64-linux-8.8.3` which will enable commands like `runhaskell`\nto pick up reanimate.\n\nNow, still within the `nix-shell` you can run:\n\n```console\n[nix-shell:./reanimate]$ reanimate_datadir=. runhaskell examples/doc_drawCircle.hs\n```\n\n\n# Documentation\n\n * API reference: https://hackage.haskell.org/package/reanimate/docs/Reanimate.html\n * Core concepts: https://reanimate.readthedocs.io/en/latest/introduction.html\n * Design overview: https://reanimate.readthedocs.io/en/latest/glue_tut.html\n * N-Queens tutorial (somewhat dated, uses reanimate from October 2019): https://williamyaoh.com/posts/2020-05-31-reanimate-nqueens-tutorial.html\n * You can also ask questions in the discord channel: \u003chttps://discord.gg/Qs28Dv6\u003e\n\n# Features\n\n- [x] Cross-platform. Official support for Linux, MacOS, and Windows.\n- [x] Well-documented. API [reference documentation](https://hackage.haskell.org/package/reanimate/docs/Reanimate.html) include GIFs to illustrate behavior, and in-depth tutorial/explanation articles are hosted on [readthedocs.io](https://reanimate.readthedocs.io/en/latest/).\n- [x] Advanced type-setting via LaTeX.\n- [x] Voice control: Align animation timings with a transcript.\n- [x] 3D graphics: Built-in support for integrating povray and blender.\n- [x] Mapping: Built-in support for GeoJSON and map projections.\n- [x] Online playground for toying with reanimate scripts.\n\n# Roadmap\n\n- Easy-to-use font selection when using latex/xelatex/luatex.\n- Polygon morphing framework with support for several algorithms, including: linear interpolation, as-rigid-as-possible interpolation, and intersection-free interpolation.\n- Built-in tools for creating presentations.\n\n# Authors\n\n  * David Himmelstrup.\n  * Jan Hrcek.\n\n# License\n\nThis is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, compile, sell, or\ndistribute this software, either in source code form or as a compiled\nbinary, for any purpose, commercial or non-commercial, and by any\nmeans.\n\n# Acknowledgments\n\n  * Huge thanks to 3b1b's [manim](https://github.com/3b1b/manim) which inspired this library.\n  * Thanks to [svg-tree](https://github.com/Twinside/svg-tree) for their SVG library.\n  * Thanks to [CthulhuDen/chiphunk](https://github.com/CthulhuDen/chiphunk) for making a 2D physics\n    library easily available.\n  * Thanks to [Peter Johnson](https://github.com/missinglink) for reserving the 'reanimate' organization on GitHub.\n\n# YouTube\n\nCompleted animations are uploaded to the [Reanimated Science](https://www.youtube.com/channel/UCbZujyI7i6JbI-I0shPvDgg) channel.\n\nAnimation snippets are uploaded to the [Reanimated Science Shorts](https://www.youtube.com/channel/UCL7MwXLtQbhJeb6Ts3_HooA) channel.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freanimate%2Freanimate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freanimate%2Freanimate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freanimate%2Freanimate/lists"}