Search by

hanshs474 / movoa

hanshs474

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.

v0.1.0 2026-10-25 06:36 UTC

This package is auto-updated.

Last update: 2026-10-25 07:29:10 UTC


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/apikeys
  • Movoa\QuotaError: the account does not have enough credits for this run
  • Movoa\PlanError: that model or quality needs a plan on the account
  • Movoa\BusyError: too many runs on this account are generating at once
  • Movoa\RejectedError: the content filter refused the prompt, or a cooldown is active; reword it
  • Movoa\GenerationError: the run was accepted but failed or was canceled; $errorMessage says why
  • Movoa\TimeoutError: the wait ran out; $taskId lets you check the run later

Any other refusal throws Movoa\MovoaException with the server's message.

MIT licensed. Made by Movoa.