Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

🎬 Animora

Declarative, High-Level Animation Framework for Python

PyPI Version CI Status Docs Python Version License: MIT Code style: ruff Checked with mypy

Quick Start • Why Animora? • Features & Examples • CLI Tooling • Architecture • Documentation


🌟 Overview

Animora is to Manim what Seaborn is to Matplotlib.

Instead of manually calculating pixel coordinates, managing low-level point arrays, and choreographing dozens of vector mobjects, Animora enables you to write clean, declarative, and composable animations for educational videos, computer science lectures, technical presentations, and data stories.

from animora.core import Scene
from animora.datastructures import BST
from animora.theme import ModernDark, use_theme

class BinarySearchTreeDemo(Scene):
    def construct(self) -> None:
        with use_theme(ModernDark):
            # 1. Declaratively initialize a Binary Search Tree
            bst = BST([50, 30, 70, 20, 40])
            self.play(bst.animate_create())

            # 2. Insert key with animated comparison path: 50 -> 30 -> 40 -> 35
            self.play(bst.animate_insert(35))

            # 3. Search target key with instant visual highlight
            self.play(bst.animate_search(35))

💡 Why Animora?

Capability Raw Manim With Animora
Programming Model Imperative, low-level coordinate positioning Declarative, component-based composition
Layouts Manual .next_to(), .shift(), and math calculations Automatic solvers (Grid, Circular, Tree, Graph, Flow)
Theming & Styling Hardcoded hex strings scattered in scripts Centralized design tokens (ModernDark, PaperLight, Cyberpunk)
Data Structures Manual construction of circles, arrows, and text Stateful Array, BST, Graph, Heap, Stack, Queue, HashTable
Algorithm Animations Ad-hoc animation choreography Traced execution (quick_sort, dijkstra, a_star, binary_search)
Extensibility Fixed to Manim APIs First-class Escape Hatch (.manim_object) on all components

🚀 Quick Start

1. Installation

Install Animora from PyPI:

pip install animora

(Optional: Install with development dependencies)

pip install "animora[dev]"

2. Verify Your Environment

Animora includes a built-in doctor to verify Python, Manim, and FFmpeg installations:

animora doctor
============================================================
 Animora System & Environment Diagnostics
============================================================
[PASS]   Python       : Python 3.11.8 (>= 3.10 supported)
[PASS]   Animora      : Animora 0.1.0 installed
[PASS]   Manim        : Manim Community 0.18.1 (compatible)
[PASS]   NumPy        : NumPy 1.26.4 installed
[PASS]   NetworkX     : NetworkX 3.2.1 installed
[PASS]   FFmpeg       : FFmpeg binary found at /usr/bin/ffmpeg
============================================================
Status: Environment is fully ready for Animora visualizations.

🛠️ CLI Tooling

Animora comes with a dedicated CLI for rapid prototyping and production export:

# 1. Scaffold a starter scene from template
animora new my_scene.py

# 2. Fast low-quality preview (instant rendering for iterative design)
animora preview my_scene.py --open

# 3. Full production quality render (1080p 60fps or 4K)
animora render my_scene.py --quality high

📦 Features & Examples

1. Visual Primitives & Container Panels

Compose shapes, text, arrows, and containers with semantic state animations:

from animora.core import Scene
from animora.components import Text, Shape, Panel, Arrow
from animora.theme import ModernDark, use_theme

class PrimitivesScene(Scene):
    def construct(self) -> None:
        with use_theme(ModernDark):
            title = Text("Visual Primitives", font_size=36)
            circle = Shape.circle(radius=0.6, fill_color="#38BDF8")
            rect = Shape.rounded_rectangle(width=2.0, height=1.2, corner_radius=0.15)
            card = Panel(circle, rect, title="Component Container")

            self.play(title.animate_fade_in())
            self.play(card.animate_create())
            self.play(circle.animate_highlight())

2. Automatic Layout Solvers

Pure geometric layout engines that automatically arrange collections of components:

from animora.components import Group, Shape
from animora.layout import GridLayout, CircularLayout

nodes = [Shape.circle(radius=0.3) for _ in range(8)]
group = Group(*nodes)

# Arrange in a 2x4 Grid
group.arrange(GridLayout(columns=4, col_spacing=0.5, row_spacing=0.5))

# Rearrange into a Circle
group.arrange(CircularLayout(radius=2.0))

3. Data Visualization

Mathematically rigorous chart components featuring dual-correctness:

from animora.core import Scene
from animora.dataviz import BarChart, Table

class ChartScene(Scene):
    def construct(self) -> None:
        chart = BarChart(
            data=[("MergeSort", 45), ("QuickSort", 30), ("BubbleSort", 120)],
            bar_width=0.7,
        )
        self.play(chart.animate_grow())
        self.play(chart.animate_highlight_bar(1, color="#10B981"))

4. Algorithm Visualizations & Tracing

Generate step-by-step algorithm animations directly from real execution traces:

from animora.core import Scene
from animora.datastructures import Array
from animora.algorithms import quick_sort

class SortingScene(Scene):
    def construct(self) -> None:
        arr = Array([45, 12, 89, 33, 7, 56])
        self.play(arr.animate_create())

        # Returns a sequence of step-by-step animations (compares, swaps, highlights)
        self.play(*quick_sort(arr))

5. Multi-Theme Scoping

Dynamically switch between built-in design systems (ModernDark, PaperLight, Cyberpunk, Monokai):

from animora.components import Text, Shape, Panel
from animora.theme import Cyberpunk, PaperLight, use_theme

with use_theme(Cyberpunk):
    neon_box = Panel(Shape.circle(), title=Text("Cyberpunk"))

with use_theme(PaperLight):
    clean_box = Panel(Shape.circle(), title=Text("Paper Light"))

🏗️ Architecture & Escape Hatch

Animora follows a strict 4-layer decoupled architecture:

┌────────────────────────────────────────────────────────┐
│ Layer 4: Algorithms & Data Visualization               │
│          (Sorting, Pathfinding, Charts, Trees, Tables) │
├────────────────────────────────────────────────────────┤
│ Layer 3: Layout Engines & Theme System                 │
│          (Grid, TreeLayout, ModernDark, Cyberpunk)     │
├────────────────────────────────────────────────────────┤
│ Layer 2: Visual Primitives & Containers                │
│          (Text, Shape, Connector, Arrow, Group, Panel) │
├────────────────────────────────────────────────────────┤
│ Layer 1: Core Abstractions & Manim Bridge              │
│          (Component, Scene, Animation, .manim_object)  │
└────────────────────────────────────────────────────────┘

The Native Manim Escape Hatch

You are never locked into Animora's abstractions. Every single component exposes its underlying Manim vector entity through .manim_object:

import manim
from animora.components import Shape

circle = Shape.circle(radius=1.0)
native_mobject = circle.manim_object  # Access raw Manim VMobject

# Use raw Manim shaders, gradients, or updaters freely
native_mobject.set_color_by_gradient(manim.BLUE, manim.PINK)

Check out runnable examples located in the examples/ directory:


🤝 Contributing

We welcome community contributions! Please read our Contributing Guide and review our Code of Conduct before submitting pull requests.

Development Setup

git clone https://github.com/himanshu-jadhav108/Animora.git
cd Animora
pip install -e ".[dev]"
pytest
ruff check src/
mypy src/

👤 Creator

Animora was created by Himanshu Jadhav and is developed as an open-source Python animation framework for educational, mathematical, algorithmic, and technical visualization.


Himanshu Jadhav

Artificial Intelligence & Data Science Engineer

Passionate about computer vision, mathematical animation engines, declarative developer tooling, and high-performance algorithms.

GitHub LinkedIn Portfolio Instagram



📄 License & Intellectual Property

Animora's source code is released under the MIT License.

  • Copyright Notice: COPYRIGHT.md — Copyright © 2026 Himanshu Jadhav.
  • Brand & Fork Policy: TRADEMARKS.md — Guidelines for project branding, naming forks, and derivative works.
  • Third-Party Notices: THIRD_PARTY_NOTICES.md — Dependency attributions and upstream license details.
  • Security Policy: SECURITY.md — Vulnerability reporting guidelines and security procedures.

(The MIT License applies to the source code and does not grant permission to use the Animora name, logo, or branding in a way that implies official affiliation or endorsement.)


💖 Acknowledgements

  • Manim Community for the foundational vector graphics and mathematical animation engine.
  • NumPy for high-performance numerical computing and array operations.
  • NetworkX for graph data structures and force-directed spring layout algorithms.
  • FFmpeg for specialized media demuxing and video stream encoding.
  • MkDocs Material for modern, responsive documentation tooling.
  • The open-source mathematical visualization and computer science community.

Animora — Declarative Animation Engine for Python

Metadata

Release files for animora 0.2.0a1

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

Source distribution (sdist)

Source distribution for animora 0.2.0a1
File Size Uploaded
animora-0.2.0a1.tar.gz 191.9 kB Details

Built distribution (wheel)

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

Total release size: 331.5 kB

Release files / animora-0.2.0a1.tar.gz

Download URL animora-0.2.0a1.tar.gz
Size 191.9 kB
Tags Source
SHA-256 checksum
How to use checksums
0c9b04f3387953abec9d999e8abadfa236ef4ffbee6d416f9dd76ce23b72e084
BLAKE2b-256 checksum
How to use checksums
32cc2ade021d42c6a2b80a4f5d1cd25370797f78331b6951337ff635939497e8
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 3, 2026.

Transparency log

Release files / animora-0.2.0a1-py3-none-any.whl

Download URL animora-0.2.0a1-py3-none-any.whl
Size 139.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39dbe60929d845d3c3807af6a2c7db04534cf5578296e73b9b16351cc5695533
BLAKE2b-256 checksum
How to use checksums
c9995db62c803784e067b6d996ef1f7ee022efb4259b70236cfbf0751fc2e5b1
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 3, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0a1 This release

2 release files

0.1.0

2 release files

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