One model. Both recommendations.
MiniMax H3
MiniMaxOne model leads both performance and value in the supplied image-to-video comparison.
Choose your workload
Models for adding motion to existing images and visual concepts.
One model. Both recommendations.
One model leads both performance and value in the supplied image-to-video comparison.
Arena · supplied snapshot·Supplied Arena snapshot · date pending·How we compare
The same model holds both recommendation positions. Its supplied unit price is approximate and actual billing may vary. Arena scores and prices are from the supplied snapshot. The leaderboard source and snapshot date still need confirmation.
The same workload, with the details that help you choose.
| Comparison | MiniMax H3Best Performance & Best Value |
|---|---|
| Arena score | 1494 Supplied Arena snapshot · date pending |
| Relative score | Same recommendation |
| Billing rate | ~$0.08 / second |
| Arena difference | Same model |
| Cost difference | Same model |
| Supported modalities | image → video |
| Main reason to choose | One model holds both recommendation positions. |
| Best fit | Video generation from existing visual assets |
| Billing details | Approximate supplied reference price per second. Resolution, duration and actual billing may vary. |
The same model holds both recommendation positions. Its supplied unit price is approximate and actual billing may vary.
Implementation
Copy a model test, replace the API key with your own, and run.
Copy the Python or cURL test for MiniMax H3. Replace the API-key placeholder with your own key and run.
MiniMax H3 · image to video · Includes a built-in sample image, submits a five-second video test and polls for the video URL.
import json
import time
from urllib.parse import quote
from urllib.error import HTTPError
from urllib.request import Request, urlopen
API_KEY = "YOUR_ROTEN_API_KEY"
def send(url, payload=None):
data = json.dumps(payload).encode("utf-8") if payload is not None else None
request = Request(url, data=data, headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"})
try:
with urlopen(request, timeout=180) as response:
return json.load(response)
except HTTPError as error:
raise SystemExit(f"HTTP {error.code}: {error.read().decode('utf-8')}")
payload = json.loads(r'''{
"prompt": "Animate the abstract shapes in this image with gentle motion while keeping the composition recognizable.",
"duration": 5,
"size": "768p",
"model": "MiniMax-H3",
"image": "iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAMAAABIw9uxAAAADFBMVEUKJUBjW//Hw//2+fz1WrJUAAALlElEQVR42u3UwQEAIAgDMZT9d2YI9SEkM7QXAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK0tOOdIAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAAAgACIAAgAAIAAiAAIAACAAIgACAAAgACIAAgAAIAAiAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAiAAIAACAAIgACAAAgACIAAgAAIAAiAAIAACAAIgACAAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAAGC7CIAAgAAIAAiAAIAACAAIgACAAAgACIAAgAAIAAiAAIAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAsDIAGxeEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAATAkQRgegDyLgFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEAAFAABAABAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAAfFUAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABMCRBEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEAAEQAAFAAARAABAAARAABEAABAABoDdHEgAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABEAAQAAEAARAAEAABAAEQABAAAQABEAAQAAEAARAAEAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAABAAEQABAAAQABEAAQAAEAARAAEAABAAEQABAAAQABEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABADbRQAEAARAAEAABAAEQABAAAQABEAAQAAEAARAAEAABAAEQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhGAaq0FA3Y21yRAAAAAElFTkSuQmCC"
}''')
result = send("https://api.roten.ai/v1/video/generations", payload)
task_id = result["task_id"]
for attempt in range(120):
result = send("https://api.roten.ai/v1/video/generations" + "/" + quote(str(task_id), safe=""))
status = result.get("status")
if status == "completed":
print(result["url"])
break
if status == "failed":
raise SystemExit(json.dumps(result.get("error", result)))
if status not in ("pending", "processing"):
raise SystemExit("Unexpected task response: " + json.dumps(result))
time.sleep(5)
else:
raise SystemExit("The video is still processing. Task ID: " + str(task_id))# Requires curl and Python 3 for reading JSON responses.
set -eu
API_KEY='YOUR_ROTEN_API_KEY'
created=$(curl --fail-with-body --silent --show-error 'https://api.roten.ai/v1/video/generations' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
--data '{
"prompt": "Animate the abstract shapes in this image with gentle motion while keeping the composition recognizable.",
"duration": 5,
"size": "768p",
"model": "MiniMax-H3",
"image": "iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAMAAABIw9uxAAAADFBMVEUKJUBjW//Hw//2+fz1WrJUAAALlElEQVR42u3UwQEAIAgDMZT9d2YI9SEkM7QXAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK0tOOdIAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAAAgACIAAgAAIAAiAAIAACAAIgACAAAgACIAAgAAIAAiAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAiAAIAACAAIgACAAAgACIAAgAAIAAiAAIAACAAIgACAAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAoAAIAAIAAKAAGC7CIAAgAAIAAiAAIAACAAIgACAAAgACIAAgAAIAAiAAIAACAACgAAgAAgAAoAAIAAIAAKAACAACAACgAAgAAgAAsDIAGxeEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAATAkQRgegDyLgFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEAAFAABAABAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAAfFUAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAARAAAQAARAAAUAABEAAEAABEAAEQAAEAAEQAAFAAARAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAAARAABEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABEAABMCRBEAABAABEAABQAAEQAAQAAEQAARAAAQAARAAAUAABEAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAABEAAEQAAEAAEQAAFAAARAABAAARAABEAABAABEAABQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEAAEQAAFAAARAABAAARAABEAABAABoDdHEgAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABEAAQAAEAARAAEAABAAEQABAAAQABEAAQAAEAARAAEAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAABAAEQABAAAQABEAAQAAEAARAAEAABAAEQABAAAQABEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAEAAFAABAABADbRQAEAARAAEAABAAEQABAAAQABEAAQAAEAARAAEAABAAEQAAQAAQAAUAAEAAEAAFAABAABAABQAAQAAQAAUAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhGAaq0FA3Y21yRAAAAAElFTkSuQmCC"
}')
task_id=$(printf '%s' "$created" | python3 -c 'import json,sys;from urllib.parse import quote;print(quote(str(json.load(sys.stdin)["task_id"]),safe=""))')
attempt=0
while [ "$attempt" -lt 120 ]; do
result=$(curl --fail-with-body --silent --show-error "https://api.roten.ai/v1/video/generations/$task_id" \
-H "Authorization: Bearer $API_KEY")
status=$(printf '%s' "$result" | python3 -c 'import json,sys;print(json.load(sys.stdin).get("status",""))')
case "$status" in
completed) printf '%s' "$result" | python3 -c 'import json,sys;print(json.load(sys.stdin)["url"])'; exit 0 ;;
failed) printf '%s\n' "$result" >&2; exit 1 ;;
pending|processing) sleep 5 ;;
*) printf '%s\n' "$result" >&2; exit 1 ;;
esac
attempt=$((attempt + 1))
done
printf 'Video still processing. Task ID: %s\n' "$task_id" >&2
exit 1Python tests use the standard library. Video cURL tests also use Python 3 to read task responses.
A clear reference point
Recommendations combine the supplied Arena scores with the supplied model prices. A benchmark score is one signal for choosing a model for your workload.
Arena · supplied snapshot·Supplied Arena snapshot · date pending·How we compare
Built for production
Talk to us about volume pricing, model selection and migration.