MiniMax H3 Singularity Image-to-Video API

wavespeed-ai/minimax-h3-singularity/image-to-video

MiniMax H3 Singularity Open Weights Image-to-Video animates a first-frame image, with optional last-frame guidance, into coherent 480P / 540P / 768P videos with native stereo audio, 5-15 second duration, flexible aspect ratios, and per-second billing. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Image to Video
Input

Drag & drop or click to upload

preview

Drag & drop or click to upload

50% OFF

Idle

$0.05per run·~20 / $1

ExamplesView all

The golden butterfly lifts from her finger and flies toward a sealed stone door. She watches it closely and follows one step forward. As the butterfly lands on the door, faint golden symbols begin appearing across the stone. The camera begins close on her and the butterfly, then slowly pans toward the glowing doorway. Elegant fantasy mystery, subtle magical movement.

Related Models

README

MiniMax H3 Singularity Image-to-Video (Open Weights)

MiniMax H3 Singularity Image-to-Video runs the open-weights edition of MiniMax H3 Singularity on WaveSpeedAI infrastructure. Provide a first-frame image and a text prompt to generate a video with prompt-guided motion, camera movement, scene progression, and native stereo audio.

Why Choose This?

  • Open-weights video generation
    Run MiniMax H3 Singularity on WaveSpeedAI-hosted GPU infrastructure.

  • Image-to-video generation
    Animate a first-frame image with prompt-guided subject motion and scene progression.

  • Native stereo audio
    Generate video and synchronized stereo audio together in a single pass.

  • Optional last-frame guidance
    Use last_image to guide the ending frame and create a more controlled start-to-end transition.

  • Prompt-guided motion and sound
    Describe camera movement, action, timing, dialogue, music, ambience, and sound effects directly in the prompt.

  • Four resolution tiers
    Generate at 480p, 540p, 768p, or 1080p.

  • Flexible duration
    Generate videos from 3 to 15 seconds.

Parameters

ParameterRequiredDescription
promptYesText instructions describing the desired motion, camera movement, timing, scene progression, and audio direction.
imageYesFirst-frame image URL used as the starting frame for generation. The output canvas follows the input image's aspect ratio.
last_imageNoOptional last-frame image URL used to guide the ending frame of the generated video.
resolutionNoOutput resolution: 480p, 540p, 768p, or 1080p. Default: 768p.
durationNoOutput duration in seconds. Range: 3–15. Default: 5.
seedNoFixed seed for reproducible output.

How to Use

  1. Upload the first-frame image — Provide the image that defines the opening frame, subject, composition, and visual direction.
  2. Add last-frame guidance optional — Use last_image when you want stronger control over the final frame or ending direction.
  3. Write the prompt — Describe subject motion, camera movement, timing, scene progression, and audio direction.
  4. Choose resolution — Select 480p, 540p, 768p, or 1080p.
  5. Set duration — Choose a video length from 3 to 15 seconds.
  6. Set seed optional — Use a fixed seed when reproducibility is needed.
  7. Submit — Generate the final video with native stereo audio.

Pricing

Pricing is based on generated video duration and selected resolution.

ResolutionPer Second5s15s
480p$0.05$0.25$0.75
540p$0.075$0.375$1.125
768p$0.10$0.50$1.50
1080p$0.20$1.00$3.00

Best Use Cases

  • Image animation — Turn portraits, illustrations, product images, or concept art into motion.
  • Character animation — Add expressions, body movement, and camera motion to character images.
  • Start-and-end-frame control — Use image and last_image to guide both the opening and ending of the video.
  • Cinematic scenes — Combine character action, camera movement, atmosphere, and audio in one generation.
  • Audio-driven scenes — Generate dialogue, music, ambience, and sound effects together with the video.
  • Creative prototyping — Test motion direction, camera behavior, timing, and audio from a still image.

Pro Tips

  • Use a clear, well-lit first-frame image for stronger subject and composition consistency.
  • Use last_image when the final pose, framing, or scene state matters.
  • Describe visible actions with specific verbs instead of relying only on mood or style descriptions.
  • Break complex actions into clear timeline beats when timing matters.
  • Specify camera movement explicitly, including when the camera should remain still.
  • Include an Audio: line when you want stronger control over dialogue, music, ambience, or sound effects.
  • Start with a 5s generation while testing motion direction before increasing duration.
  • Use 480p for lower-cost iteration before moving to higher resolutions.
  • Set a fixed seed when comparing prompt changes.

Notes

  • prompt and image are required.
  • last_image is optional.
  • duration supports 3–15 seconds and defaults to 5.
  • resolution supports 480p, 540p, 768p, and 1080p.
  • resolution defaults to 768p.
  • The output canvas follows the first-frame image's aspect ratio.
  • Video and native stereo audio are generated together.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Minimax H3 Singularity Image To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/minimax-h3-singularity/image-to-video with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Minimax H3 Singularity Image To Video below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "resolution": "768p",
    "duration": 5
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/minimax-h3-singularity/image-to-video" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/minimax-h3-singularity/image-to-video";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "resolution": "768p",
        "duration": 5
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "resolution": "768p",
    "duration": 5
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/minimax-h3-singularity/image-to-video", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

Minimax H3 Singularity Image To Video API — Frequently asked questions

What is the Minimax H3 Singularity Image To Video API?

Minimax H3 Singularity Image To Video is a WaveSpeedAI model for video generation from images, exposed as a REST API on WaveSpeedAI. MiniMax H3 Singularity Open Weights Image-to-Video animates a first-frame image, with optional last-frame guidance, into coherent 480P / 540P / 768P videos with native stereo audio, 5-15 second duration, flexible aspect ratios, and per-second billing. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Minimax H3 Singularity Image To Video API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/minimax-h3-singularity-image-to-video.

How much does Minimax H3 Singularity Image To Video cost per run or per second?

Minimax H3 Singularity Image To Video starts at $0.05 per run or per second. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does Minimax H3 Singularity Image To Video accept?

Key inputs: `prompt`, `image`, `resolution`, `duration`, `seed`, `last_image`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/minimax-h3-singularity-image-to-video.

How do I get started with the Minimax H3 Singularity Image To Video API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use Minimax H3 Singularity Image To Video outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — wavespeed-ai/minimax-h3-singularity/image-to-video for AI agents and LLMs