Metadata-Version: 2.3
Name: animo
Version: 0.1.2
Summary: Create animations from text using Manim
License: MIT
Keywords: manim,animation,video,generative
Author: Marcelo
Author-email: team@animo.video
Requires-Python: >=3.9.6,<3.13
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.9
Requires-Dist: manim (==0.18.0)
Requires-Dist: manim-physics (==0.4.0)
Requires-Dist: requests (>=2.31.0,<3.0.0)
Project-URL: Homepage, https://animo.video
Project-URL: Repository, https://github.com/marcelo-earth/generative-manim
Description-Content-Type: text/markdown

# Animo

<p align="center">
  <a href="https://animo.video">
    <img src="https://img.shields.io/static/v1?label=Platform&message=Animo&color=E11D48&logo=openai&style=flat" />
  </a>
  <a href="https://github.com/marcelo-earth/generative-manim">
    <img src="https://img.shields.io/static/v1?label=GitHub&message=Repository&color=181717&logo=github&style=flat" />
  </a>
  <a href="https://discord.com/invite/HkbYEGybGv">
    <img src="https://img.shields.io/static/v1?label=Discord&message=Community&color=5865F2&logo=discord&style=flat" />
  </a>
</p>

## What is Animo?

Animo is a Python package that allows you to create animations from text using Manim under the hood. Visit [animo.video](https://animo.video) to learn more about the platform.

## Installation

```bash
pip install animo
```

## Usage

### Basic Usage

```python
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"
)

# Response format
response = {
    "message": "Video generation completed",
    "video_url": "https://animovideo.blob.core.windows.net/animocontainer/video-xxx.mp4"
}

# Export multiple scenes
scenes = [
    {"videoUrl": "https://animovideo.blob.core.windows.net/animocontainer/scene1.mp4"},
    {"videoUrl": "https://animovideo.blob.core.windows.net/animocontainer/scene2.mp4"}
]

export_response = client.videos.export(
    scenes=scenes,
    title_slug="my-animation"
)
```

### Generating Videos from Text Prompts

```python
from animo import Animo
import time
import sys

# Initialize client
client = Animo(api_key="your_api_key")

# Define your prompt
prompt = "Create a blue square"

print(f"🚀 Generating video for: '{prompt}'")

# Start generation
try:
    generation = client.videos.generate(prompt=prompt)
    request_id = generation.get("requestId")
    
    if not request_id:
        print("❌ No request ID received")
        sys.exit(1)
        
    print(f"✅ Generation started with ID: {request_id}")
    
    # Poll for status with a simple progress indicator
    print("⏳ Waiting for completion", end="")
    
    while True:
        status_data = client.videos.retrieve(request_id=request_id)
        status = status_data.get("status")
        
        # Update progress indicator
        sys.stdout.write(".")
        sys.stdout.flush()
        
        # Check for completion or error
        if status == "SUCCEEDED":
            video_url = status_data.get("videoUrl")
            print(f"\n\n🎬 Video ready! URL: {video_url}")
            
            # Print processing time if available
            if processing_time := status_data.get("processingTime"):
                print(f"⏱️  Processing time: {processing_time} seconds")
                
            break
            
        elif status == "FAILED":
            error = status_data.get("error") or "Unknown error"
            print(f"\n\n❌ Generation failed: {error}")
            break
            
        # Wait before next check
        time.sleep(3)
        
except Exception as e:
    print(f"\n\n❌ Error: {str(e)}")
```

## Contributing

We welcome contributions to Animo! Here's how to get started:

### Requirements
- Python 3.9.6 or later
- Poetry (recommended for dependency management)

### Setup for Development

1. Clone the repository
```bash
git clone https://github.com/marcelo-earth/generative-manim.git
cd generative-manim/animo
```

2. Install dependencies
```bash
poetry install
```

### Community

Join our [Discord community](https://discord.com/invite/HkbYEGybGv) to connect with other Animo users, share your creations, and get help.

## License

[MIT License](LICENSE)

