hanshs474 / 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. Official PHP SDK for Movoa (movoa.ai): text to video and photo to video with sound from PHP.
Requires
- php: >=8.1
- ext-curl: *
- ext-json: *
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
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 PHP SDK for Movoa: one API key turns a prompt into text to video, or a still into photo to video, and every clip comes back as AI video with audio.
$movoa = new Movoa\Movoa(getenv('MOVOA_API_KEY')); $clip = $movoa->generateVideo('a paper lantern drifting down a night river, slow dolly-in'); echo $clip; // URL of the finished MP4, sound included
generateVideo submits the run, waits for it and returns the URL of the finished file.
Install
composer require hanshs474/movoa
PHP 8.1+ with ext-curl and ext-json; no other dependencies.
API key
Sign in on movoa.ai, create a key at movoa.ai/settings/apikeys, then pass it to the constructor or export it:
export MOVOA_API_KEY=sk-...
Runs cost credits on your Movoa account, at the prices on movoa.ai/pricing.
$movoa->credits(); // remaining credits on the account
Text to video and photo to video
// text to video, vertical, 10 seconds $movoa->generateVideo('a fox trotting through fresh snow at dawn', options: ['duration' => 10, 'aspect_ratio' => '9:16']); // photo to video: the photo becomes the first frame $movoa->generateVideo('the camera slowly orbits the statue', imageUrl: 'https://example.com/statue.jpg'); // another model $movoa->generateVideo('a street drummer in the rain', 'seedance-2-5', options: ['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 |
Every run asks for sound. On the site: Seedance 2.5 and Veo 3.
Submit now, collect later
$id = $movoa->submit('a lighthouse in a storm', options: ['duration' => 6]); $movoa->status($id)['status']; // pending | processing | success | failed | canceled $url = $movoa->waitFor($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
All extend Movoa\MovoaException:
Movoa\AuthError: no key, or the key is wrong or deleted; create one at movoa.ai/settings/apikeysMovoa\QuotaError: the account does not have enough credits for this runMovoa\PlanError: that model or quality needs a plan on the accountMovoa\BusyError: too many runs on this account are generating at onceMovoa\RejectedError: the content filter refused the prompt, or a cooldown is active; reword itMovoa\GenerationError: the run was accepted but failed or was canceled;$errorMessagesays whyMovoa\TimeoutError: the wait ran out;$taskIdlets you check the run later
Any other refusal throws Movoa\MovoaException with the server's message.
MIT licensed. Made by Movoa.