Introduction
MiniMax H3 LoRA Image to video starts a clip from your opening frame and animates it for 3 to 15 seconds with a stereo soundtrack, with up to three of your own LoRA files loaded on the open-weights MiniMax H3. Add a closing frame to steer where the shot ends. Output is 480p, 540p, 768p or 1080p and keeps the shape of your picture.
Choose a mode by starting material
| What you have | Mode |
|---|---|
| a written scene | MiniMax H3 LoRA Text to video |
| an opening image | MiniMax H3 LoRA Image to video |
| reference images, clips or audio | MiniMax H3 LoRA Reference to video |
Key features & highlights
The first frame is yours
With the prompt written as what happens next, the clip opens on your exact picture. In our control test a full-length portrait on a plain backdrop held frame for frame, then the subject raised her arms and turned around as asked, with no LoRA and again with a LoRA at 0.6.
LoRAs on top of a fixed start
Load a character, style or motion LoRA to change how the scene moves or looks while the opening frame pins the subject. Up to three files per request, each with its own strength from 0 to 4.
Uncensored input and output
Opening frames are accepted as they are, whatever they show. With a LoRA trained for that content and our strongest prompt the clip rendered exactly as written, and the soundtrack came back with it in the same MP4.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Describe what happens next in this picture: the action, the camera and the sound. Describing a different scene fights the opening frame, especially with a strong LoRA loaded. at least 1 characters · at most 7000 characters |
image_url | Yes | The opening frame. The clip starts from this exact picture and keeps its aspect ratio: a square frame gives a square clip. |
last_image_url | No | Optional closing frame. The clip moves from the opening frame to this one, useful for a planned pose or reveal. |
resolution | No | 480p, 540p, 768p or 1080p. Price rises with each step; the shape follows your frame. |
duration_seconds | No | Any whole second from 3 to 15, billed per second requested. |
loras | No | Up to three {path, scale} entries trained for MiniMax H3; scale 0 to 4. Start concept LoRAs at 0.6 to 0.8 here: at 1 they can pull the clip away from your frame. Default: |
seed | No | Keeps runs comparable while you tune a LoRA's scale. |
Pricing
Billed per second of output at the chosen resolution. Loading LoRAs adds no separate charge.
| Specification | Price |
|---|---|
| $0.05 / second |
| $0.075 / second |
| $0.10 / second |
| $0.20 / second |
Use cases
Bring a finished still to life
Take an approved photo or render, keep it as the first frame and add movement, camera and sound. A realism LoRA at 0.8 keeps skin and fabric believable when the subject starts to move.
Planned start and end poses
Send both an opening and a closing frame for a reveal, a turn or a change of position, and let the model fill the motion in between. It is the most controlled way to get a specific ending.
Uncensored clips from your own frames
Start from a frame you generated or shot, load the LoRA your audience expects, and describe what happens next. Nothing is filtered on the way in or out.
Prompt guide & pro tips
Write what happens next, not a new scene
The prompt should continue the picture. In our testing, a prompt that moved the subject to a different room, combined with a concept LoRA at 1, replaced the opening frame entirely. The same frame held when the prompt described motion inside the existing shot.
Lower the scale before you blame the model
If the clip drifts from your frame, drop the strongest LoRA to 0.6 before rewriting anything. Style LoRAs are usually safe at 1; heavy concept LoRAs are the ones that take over.
Frame the picture for the clip you want
There is no aspect ratio field here: the clip keeps your frame's shape. Crop to 16:9 or 9:16 before you send it, and leave room in the frame for the movement you are asking for.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "minimax/h3-lora/image-to-video",
"input": {
"duration_seconds": 5,
"image_url": "https://example.com/reference.png",
"prompt": "A slow aerial shot drifting over a misty pine forest at sunrise",
"resolution": "480p"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.

















