Image to Video API — MiniMax Hailuo, Batch, Pay per Second
Pricing
from $50.00 / 1,000 video second delivereds
Image to Video API — MiniMax Hailuo, Batch, Pay per Second
Turn images or text prompts into short videos with MiniMax Hailuo and get, for each clip, a dataset item with the video URL and its exact duration. Image to video, text to video, optional last-frame keyframe, batch input, no API key, pay per second of delivered video.
Pricing
from $50.00 / 1,000 video second delivereds
Rating
0.0
(0)
Developer
Sherwood
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Turn images or text prompts into short mp4 videos and get, for each clip, a dataset item with the video URL and its exact duration — from $0.05 to $0.06 per second of delivered video depending on your Apify plan (a 5-second clip costs $0.25 to $0.30). Image to video, text to video, optional last-frame keyframe, batch input, no video-model API key to manage, failed clips are free.
What it does
- Image to video: send image URLs, get one animated clip per image. Without a prompt, a neutral motion prompt is used.
- Text to video: send prompts alone, get one 16:9 clip per prompt.
- Both:
promptsandimageUrlsare paired by index; a list of one is reused for every clip. - Keyframes:
endImageUrlspins the last frame of each clip — first-to-last transitions, or a clip that ends on a given image. - Batch by design: one call for the whole list, one dataset item per clip, in input order.
Images are accepted as public URLs, Google Drive or Dropbox share links, Drive file IDs, base64 or data URIs, files uploaded from your computer, or the dataset of another Actor (datasetId) — for example the output of an image generator or a product scraper.
Input
Every field is optional; with no input the Actor generates one sample clip so you can see the output shape.
{"imageUrls": ["https://example.com/product.jpg"],"prompts": ["Slow 360 rotation of the product, studio lighting"],"duration": 5,"resolution": "768P"}
| Field | Type | Notes |
|---|---|---|
prompts | array or string | What happens in each clip. Aliases: prompt, texts. Newline-separated strings are split. |
imageUrls | array or string | First frame of each clip. Aliases: imageUrl, urls, images, startUrls, imageFiles (upload). |
endImageUrls | array or string | Last frame of each clip (optional). Alias: endImageUrl. |
datasetId | string | Animate the image URLs found in another Actor's dataset; urlField picks the field, common ones are auto-detected. |
duration | integer | 1 to 15 seconds per clip, default 5. |
resolution | 768P / 1080P / 480P | All three cost the same per second. |
promptExpansion | balanced / disabled / quality | How much the model rewrites your prompt first. |
seed | integer | Fix it to reproduce a run. |
maxVideos | integer | Hard cap per run, default 20. |
Output
One dataset item per clip:
{"index": 0,"prompt": "Slow 360 rotation of the product, studio lighting","imageUrl": "https://example.com/product.jpg","outputUrl": "https://api.apify.com/v2/key-value-stores/.../records/video-0000.mp4","durationSeconds": 5.184,"billedSeconds": 5,"resolution": "768P","fileSize": 7300000,"model": "minimax/h3-max-turbo/image-to-video","format": "mp4","status": "ok","error": null}
durationSeconds is read from the delivered file, not assumed. A clip that fails — dead image link, content refused by the safety checker, upstream error — comes back as an item with "status": "error" and the reason, costs nothing, and never silently disappears: you always get as many answers as inputs.
Pricing at the time of writing
video-second— one event per second of delivered video, rounded to the nearest second. The model can produce slightly more than requested (~5.2 s for 5 s): you are billed on what you receive.- Per plan: $0.05 (Free), $0.06 (Starter), $0.055 (Scale), $0.05 (Business) per second.
- Failed clips: free. No subscription, no minimum. All resolutions, including 1080P, cost the same.
A 5-second product clip costs $0.25 to $0.30. Set maxTotalChargeUsd on the run and the Actor stops cleanly at the limit, telling you which clips remain instead of failing.
Call it by API
curl -s -X POST \"https://api.apify.com/v2/acts/sherwood~video-generator-batch/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"prompts": ["A paper plane gliding over pastel mountains, flat illustration"]}'
Or with the Apify clients:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("sherwood/video-generator-batch").call(run_input={"imageUrls": ["https://example.com/product.jpg"],"prompts": ["Slow 360 rotation of the product, studio lighting"],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["status"], item.get("outputUrl") or item.get("error"))
From n8n or an AI agent
- n8n: use the official Apify node with Actor
sherwood~video-generator-batch; the input above goes in the custom body, the results come back as items. - MCP: add the Apify MCP server to your agent and it can call this Actor like any tool — nothing in the input is required, so "animate these three images" maps onto one call.
- Chaining: pass the
datasetIdof asherwood/image-generator-batchorsherwood/image-upscaler-batchrun to animate its outputs directly.
The Actor is eligible for agentic payments (x402, Skyfire, MPP): an AI agent can run it and pay per request without an Apify account.
Limits, honestly
- Generation runs on MiniMax Hailuo (h3-max-turbo) via fal.ai — this is an AI model, named here on purpose. Its safety checker is always on; this Actor is not a way around model content rules.
- Clips top out at 15 seconds and 1080P. No audio track.
- Input images must be at least 256×256 pixels (smaller ones come back as a free error item; upscale them first, for example with
sherwood/image-upscaler-batch). - Output files live in the run's key-value store and follow your Apify account's data retention; copy them out if you need them long-term.
seedapplies to the whole run, not per clip.- If your brief needs a specific aesthetic from another video model, this is not that.
Related Actors
- AI Image Generator (FLUX) — generate the images to animate, then pass its
datasetIdhere. - AI Image Upscaler (SeedVR2) — bring small images above the 256×256 floor and sharpen them before animation.
- Instagram Scraper and Google Maps Scraper — two common sources of image URLs to animate through
datasetId.
FAQ
What is Hailuo AI? Hailuo is MiniMax's video generation model family. This Actor runs MiniMax Hailuo (h3-max-turbo) for both image-to-video and text-to-video, and says so openly — you know exactly which model renders your clips.
How do I turn a photo into a video?
Put its URL in imageUrls (a Drive or Dropbox link, a base64 string or a console upload also works) and optionally describe the motion in prompts ("slow zoom on the face", "steam rising from the cup"). One call, one mp4 per photo.
How much does image-to-video cost?
$0.05 to $0.06 per second of delivered video depending on your plan — a 5-second clip is $0.25 to $0.30. Failed clips are free, every resolution costs the same, and maxTotalChargeUsd caps any run.
Do I need a MiniMax or fal API key? No. No model account, no key to store: the Actor manages the model calls and bills per delivered second through Apify. Direct model APIs also bill the failures; this one does not.
Is there a free image-to-video API? Apify's free plan includes $5 of platform credit each month — enough for roughly 100 seconds of video — with no card required. Good for testing motion prompts before a batch.
Can I animate product photos in bulk?
Yes: send the whole list in imageUrls, or point datasetId at a scraper's or generator's output. Prompts and images are paired by index, and a single prompt is reused for every image — "slow 360 rotation, studio lighting" across a whole catalog is one call.