Introduction
Wan 2.1 LoRA Image to video animates one photo with up to three of your LoRA files loaded on Alibaba's open 14B video model. Clips are 5 or 10 seconds at 480p or 720p, keep the shape of the photo, and come back without a content filter.
Choose a mode by starting material
| What you have | Mode |
|---|---|
| a written description | Wan 2.1 LoRA Text to video |
| a photo to animate | Wan 2.1 LoRA Image to video |
| a clip to restyle | Wan 2.1 LoRA Video to video |
| a still image instead of a clip | Wan 2.1 Image LoRA Text to image |
Key features & highlights
Camera and effect LoRAs
Orbit, dolly and other effect LoRAs trained for Wan 2.1 image-to-video load by direct link. In our example an orbit LoRA swung the camera round behind the subject; without it, at the same seed, the camera stayed still.
Repeatable runs
The same seed and inputs gave a byte-identical clip in our test. That makes this endpoint the cleanest place to tune a LoRA: change one scale at a time and every difference you see comes from that change.
Wan 2.2 low-noise LoRAs
In our test the low-noise file of a Wan 2.2 image-to-video LoRA changed the clip in the same direction as its Wan 2.1 version, so many newer LoRAs are usable here too.
Uncensored with custom weights
LoRAs are not reviewed and the output is not filtered; the photo you send is not judged either.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Required. Trigger words first if your LoRA has them, then what happens after the opening frame and how the camera moves. at least 1 characters |
negative_prompt | No | What to keep out of the clip, such as blur, extra fingers, text or watermarks. Optional, no effect on price. |
image_url | Yes | The opening frame. The clip keeps this photo's shape; a public, directly downloadable JPEG, PNG or WebP. at least 1 characters |
resolution | No | 480p (the default) or 720p. 720p costs more per clip and takes longer; the shape follows your photo. |
duration_seconds | No | 5 (the default) or 10 seconds; other lengths are rejected. A 10-second clip costs one and a half times a 5-second clip. |
loras | No | Up to three {path, scale} entries trained for Wan 2.1 14B (most image-to-video LoRAs were trained on the 480P checkpoint and work at 720p too); path is a public direct link to a… Default: |
guidance_scale | No | How strictly the clip follows the prompt, 0 to 20, default 5. Raising it while lowering steps gave us oversaturated, artefact-ridden frames. |
flow_shift | No | Flow-matching timestep shift, 1 to 10. Leave it out to use 3 at 480p and 5 at 720p; change it only when a LoRA author recommends a value. |
steps | No | Denoising steps, 1 to 40, default 30. Fewer steps are faster and softer. |
seed | No | Same seed and same inputs returned a byte-identical clip in our test, so it is the easiest way to see what a LoRA changes. Treat it as a comparison tool rather than a promise. |
Pricing
Billed per clip by resolution and length; a 10-second clip costs one and a half times a 5-second one. LoRAs and the shape of your photo do not change the price.
| Resolution | Duration: 5 | Duration: 10 |
|---|---|---|
| $0.24 / request | $0.36 / request |
| $0.36 / request | $0.54 / request |
Use cases
Moving portraits
Turn a still into a shot with a camera move you choose, from a slow push-in to a full orbit, while the face and the outfit stay those of your photo.
Fashion and product stills
An orbit LoRA shows an outfit or an object from every side, starting from one good photograph, which saves a second shoot.
Platforms without a content filter
Animate your own imagery with the LoRA your audience expects. Everyone on screen must be an adult.
Prompt guide & pro tips
Write the trigger phrase
Effect LoRAs usually need their trigger words, for example the orbit phrase their author lists. Put it in the sentence that describes the camera, as our orbit example does.
Ask for the change
The model stays close to the photo: clothing and setting in the photo tend to stay. Name the action and the change you want early in the prompt, one main action per clip.
Compare at the same seed
Run once with loras empty and once with your LoRA at the same seed; the clips are directly comparable here, so you see exactly what the LoRA does.
Use direct, public links
Use a public link that downloads the .safetensors file itself, such as a Hugging Face "resolve/main" link. A repository page, a file behind a login, or a Civitai link that redirects to sign-in fails the request, and failed requests are not charged.
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": "alibaba/wan-2.1-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.
























