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.
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:
- Submit a generation request and receive a request ID
- Check the status of your request using the ID
- 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 RepositoryDiscord Community
Join our Discord server to connect with other developers, share your creations, and get help.
Join DiscordHow 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