DeveloperDocumentation

Animo

What is Animo?

Animo is a platform for creating animations with code built on top of Generative Manim. We built an API and a Python package that allows you to create animations from text using Manim under the hood, but Animo offers much more for developers.

Quick Start

Get up and running with Animo in minutes with our quick start guide.

Learn more

API Reference

Explore the complete API reference to understand all available endpoints.

Learn more

Installation

You can install Animo using pip:

pip install animo

API Key

To use Animo, you'll need an API key. You can generate your API key in the developer section of your account:

Visit account/developer to generate your API key.

Usage

Here's how to use Animo to create animations:

from animo import Animo

client = Animo(api_key="your_api_key")

# Create a single video
code = """
class GenScene(Scene):
    def construct(self):
        circle = Circle(color=BLUE)
        self.play(Create(circle))
"""

response = client.videos.create(
    code=code,
    file_class="GenScene",
    aspect_ratio="16:9"
)

# Access the video URL from the response
video_url = response["videoUrl"]

Voice Over

Animo supports adding voice-over narration to your animations. Simply include voice over instructions in your prompt:

from animo import Animo

client = Animo(api_key="your_api_key")

# Generate a video with voice over specified in the prompt
response = client.videos.generate(
    prompt="Create an animation of a blue circle appearing. Add a voice over saying: This is a blue circle being created.",
    engine="anthropic",
    model="claude-3-7-sonnet-20250219"
)

# Get the request ID
request_id = response["requestId"]

# Check the status and get the video URL when ready
status = client.videos.retrieve(request_id)
video_url = status["videoUrl"]  # Only available when status is "SUCCEEDED"

How It Works

The AI understands natural language instructions within your prompt. To add voice over:

  • Include phrases like "add a voice over saying..." or "with narration that says..." in your prompt
  • Specify the exact text you want spoken in the voice over
  • The AI will automatically generate and sync the voice over with your animation

Pro Tip

For best results, be specific about when the voice over should play. For example: "Add a voice over saying 'The circle grows larger' when the circle starts expanding."

API Usage with curl

You can also interact with the Animo API directly using curl. The animation generation process is asynchronous, so you'll need to:

  1. Submit a generation request and receive a request ID
  2. Check the status of your request using the ID
  3. Once completed, obtain the video URL from the status response

Step 1: Submit Generation Request

curl -X POST https://api.animo.video/v1/video/generation \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "prompt": "Create an animation explaining gravity",
    "engine": "anthropic",
    "model": "claude-3-7-sonnet-20250219"
  }'

This will return a response like:

{
  "message": "Your request has been submitted and is being processed.",
  "requestId": "cec393e9-1c18-4d4e-bd6b-ae8d6003c0bb",
  "status": "PENDING"
}

Step 2: Check Generation Status

curl -X GET https://api.animo.video/v1/video/generation/status/cec393e9-1c18-4d4e-bd6b-ae8d6003c0bb \
  -H "Authorization: Bearer YOUR_API_KEY"

Once completed, the status response will include the video URL:

{
  "createdAt": "2025-03-18T04:04:01.384000+00:00",
  "error": null,
  "generatedCode": "from manim import *
...", // Truncated for brevity
  "processingTime": 335.894314289093,
  "requestId": "cec393e9-1c18-4d4e-bd6b-ae8d6003c0bb",
  "status": "SUCCEEDED",
  "updatedAt": "2025-03-18T04:09:39.381000+00:00",
  "videoUrl": "https://animovideo.blob.core.windows.net/animocontainer/video-None-untitled-20250317_230936.mp4"
}

You can extract the videoUrl from this response to access your generated animation.

Example Prompts

Here are some examples of prompts that generate animations with voice over:

Hello World Example

{
  "prompt": "Say hello world with manim voice over",
  "engine": "anthropic",
  "model": "claude-3-7-sonnet-20250219"
}

This simple prompt creates an animation with "Hello World" text and synchronized voice over.

curl command
curl -X POST https://api.animo.video/v1/video/generation \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "prompt": "Say hello world with manim voice over",
    "engine": "anthropic",
    "model": "claude-3-7-sonnet-20250219"
  }'

What is Love? Example

{
  "prompt": "Create a shape of a heart and explain the concept of love while drawing it",
  "engine": "anthropic",
  "model": "claude-3-7-sonnet-20250219"
}

This example shows how Animo can create a heart shape animation while the voice over explains the concept of love.

curl command
curl -X POST https://api.animo.video/v1/video/generation \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "prompt": "Create a shape of a heart and explain the concept of love while drawing it",
    "engine": "anthropic",
    "model": "claude-3-7-sonnet-20250219"
  }'

Shape Transformation Example

{
  "prompt": "Generate a scene transforming objects from a circle, triangle and then square. Explain them.",
  "engine": "anthropic",
  "model": "claude-3-7-sonnet-20250219"
}

This example demonstrates morphing between basic geometric shapes with a voice over explaining each shape's properties.

curl command
curl -X POST https://api.animo.video/v1/video/generation \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "prompt": "Generate a scene transforming objects from a circle, triangle and then square. Explain them.",
    "engine": "anthropic",
    "model": "claude-3-7-sonnet-20250219"
  }'

Physics

Animo provides specialized tools for creating physics-based animations. Here's an example:

from animo import Animo

client = Animo(api_key="your_api_key")

# Create a physics simulation
code = """
class PhysicsScene(Scene):
    def construct(self):
        # Create a pendulum
        pendulum = Pendulum(length=3.0, angle=PI/4, weight_diameter=0.5)
        
        # Add gravity
        gravity = Vector(DOWN * 9.8)
        
        # Run simulation for 5 seconds
        self.add_physics(pendulum, gravity)
        self.simulate(duration=5)
        
        # Render the simulation
        self.play(self.physics_animation)
"""

response = client.videos.create(
    code=code,
    file_class="PhysicsScene",
    aspect_ratio="16:9"
)

print(response["videoUrl"])

Available Physics Objects

Animo's physics engine supports various objects and forces:

  • Rigid bodies (circles, rectangles, polygons)
  • Joints and constraints
  • Forces (gravity, springs, drag)
  • Collisions with customizable properties
  • Fluid simulations

API Reference

The Animo API provides several methods for creating and managing animations.

Client Initialization

from animo import Animo

client = Animo(api_key="your_api_key")

Creating Videos

The videos.create method allows you to generate a video from Manim code:

response = client.videos.create(
    code=code,          # Manim code as a string
    file_class="GenScene",  # The Scene class to render
    aspect_ratio="16:9"     # Optional: aspect ratio (default: "16:9")
)

# Access the video URL from the response
video_url = response["videoUrl"]

Exporting Multiple Scenes

The videos.export method allows you to combine multiple scenes into a single video:

export_response = client.videos.export(
    scenes=[
        {"videoUrl": "https://animovideo.blob.core.windows.net/animocontainer/scene1.mp4"},
        {"videoUrl": "https://animovideo.blob.core.windows.net/animocontainer/scene2.mp4"}
    ],
    title_slug="my-animation"  # Optional: custom title for the exported video
)

# Access the exported video URL from the response
exported_video_url = export_response["videoUrl"]

Community & Contributing

Animo is built on top of Generative Manim, an open-source project that welcomes contributions from the community. Here's how you can get involved:

GitHub

Explore the source code, submit issues, or contribute pull requests to help improve Generative Manim.

Visit Repository

Discord Community

Join our Discord server to connect with other developers, share your creations, and get help.

Join Discord

How to Contribute

We welcome contributions of all kinds, from code improvements to documentation updates. Here are some ways you can help:

  • Improve documentation and examples
  • Report bugs and suggest features
  • Submit pull requests with code improvements
  • Share your animations and use cases
  • Help others in the community