Metadata-Version: 2.4
Name: movoa
Version: 0.1.0
Summary: Unlimited AI video generator with sound: on paid plans the tenth take of a shot costs what the first did, and your first clip is free to make right now. Official Python SDK for Movoa (movoa.ai): text to video and photo to video with sound from your own code.
Author: Movoa (https://movoa.ai)
License: MIT
Project-URL: Homepage, https://movoa.ai/?utm_source=pypi&utm_medium=package
Project-URL: Text to video, https://movoa.ai/video/text-to-video
Project-URL: API keys, https://movoa.ai/settings/apikeys
Project-URL: Pricing, https://movoa.ai/pricing
Project-URL: Source, https://github.com/hanshs474/movoa-py
Keywords: ai,video-generation,ai-video-generator,text-to-video,image-to-video,photo-to-video,ai-video-with-audio,minimax-h3,seedance-2-5,veo-3,movoa
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Video
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# movoa

Unlimited AI video generator with sound: on paid plans the tenth take of a shot costs what the first did, and your first clip is free to make right now. This is the official Python SDK for [Movoa](https://movoa.ai/?utm_source=pypi&utm_medium=package): one API key turns a prompt into [text to video](https://movoa.ai/video/text-to-video), or a still into [photo to video](https://movoa.ai/video/photo-to-video), and every clip comes back as [AI video with audio](https://movoa.ai/video/ai-video-with-audio).

```bash
pip install movoa
```

```python
from movoa import generate_video

clip = generate_video("a paper boat drifting down a rain gutter, low angle, slow push-in")
print(clip)  # URL of the finished MP4, sound included
```

Standard library only, no dependencies. `generate_video` submits the run, waits for it and returns the URL of the finished file.

## API key

Sign in on [movoa.ai](https://movoa.ai/?utm_source=pypi&utm_medium=package), create a key at [movoa.ai/settings/apikeys](https://movoa.ai/settings/apikeys), then pass it as `api_key=` or export it:

```bash
export MOVOA_API_KEY=sk-...
```

Runs cost credits on your Movoa account, at the prices on [movoa.ai/pricing](https://movoa.ai/pricing).

```python
from movoa import credits
print(credits())  # remaining credits on the account
```

## Text to video and photo to video

```python
from movoa import generate_video

# text to video, vertical, 10 seconds
generate_video("a fox trotting through fresh snow at dawn, tracking shot",
               duration=10, aspect_ratio="9:16")

# photo to video: the photo becomes the first frame
generate_video("the camera slowly orbits the statue", image_url="https://example.com/statue.jpg")

# another model
generate_video("a street drummer in the rain, close-up", model="seedance-2-5", duration=10, resolution="720p")
```

| model | options |
|---|---|
| `minimax-h3` (default) | `duration` 4 / 5 / 6 / 8 / 10 / 15 · `resolution` 480p / 768p · `aspect_ratio` 16:9 / 9:16 / 1:1 |
| `veo-3-1-fast` | `duration` 8 · `resolution` 720p · `aspect_ratio` 16:9 / 9:16 (photo to video: 16:9) |
| `seedance-2-5` | `duration` 5 / 10 / 15 / 20 / 25 / 30 · `resolution` 480p / 720p · `aspect_ratio` 16:9 / 9:16 / 1:1 |
| `seedance-2`, `seedance-2-fast`, `seedance-2-mini` | `duration` 4 / 6 / 8 / 10 · `resolution` 480p / 720p · `aspect_ratio` |

Any extra keyword argument is sent in `options` as it is. Every run asks for sound. On the site: [Seedance 2.5](https://movoa.ai/video/seedance-2-5) and [Veo 3](https://movoa.ai/video/google-veo-3).

## Submit now, collect later

```python
from movoa import submit, status, wait

task_id = submit("a lighthouse in a storm, waves crashing", "minimax-h3", duration=6)
print(status(task_id)["status"])  # pending | processing | success | failed | canceled
url = wait(task_id)               # polls every 10 seconds, 30 minutes by default
```

While a run waits in line, `status()` returns `queued: True` and `queueEta` in seconds.

## Errors worth catching

Each failure is its own subclass of `MovoaError`, so you can branch on what to do next:

- `AuthError`: no key, or the key is wrong or deleted; create one at [movoa.ai/settings/apikeys](https://movoa.ai/settings/apikeys)
- `QuotaError`: the account does not have enough credits for this run
- `PlanError`: that model or quality needs a plan on the account
- `BusyError`: too many runs on this account are generating at once
- `RejectedError`: the content filter refused the prompt, or a cooldown is active; reword it
- `GenerationError`: the run was accepted but failed or was canceled; `.error_message` says why
- `TimeoutError`: the wait ran out; `.task_id` lets you check the run later with `status()`

Any other refusal raises `MovoaError` with the server's message.

MIT licensed. Made by [Movoa](https://movoa.ai/?utm_source=pypi&utm_medium=package).
