Introduction
Wan 2.2 LoRA animates an opening frame with Alibaba's Wan 2.2 image-to-video model and lets you load your own trained LoRA weights on top of it to steer style, character or motion. The frame and a motion prompt are required. LoRAs go into three optional slots with up to three entries each, and every entry is a direct URL to a weights file of up to 1 GB plus a strength from 0 to 4. Clips are exactly 5 or 8 seconds long, at 480p or 720p.
Key features & highlights
Three slots mapped to two denoising passes
Wan 2.2 denoises in two passes. high_noise_loras attaches weights to the high-noise expert, where composition and motion are decided; low_noise_loras attaches them to the low-noise expert, where detail and texture resolve; loras applies them to both. A line-art or grain treatment usually belongs in the low-noise slot, and a camera or movement style in the high-noise one.
Separate strengths for camera style and render style
Because the slots attach to different passes, a motion LoRA and a texture LoRA can share one request with their own scales, and you can turn one up and the other down instead of balancing a single blended weight. Inside a single slot, stacked LoRAs blend rather than layer, which is why adding them one at a time is the safer order.
Weights stay on your hosting
Each file is fetched from the URL you supply for the duration of the run, and nothing is stored on the platform. Direct download links work, as do Civitai model pages or download links and Hugging Face blob or resolve links, which are resolved to the file automatically. Other share pages and anything behind a login fail the fetch, so weights that must stay private belong behind a signed link.
The base model when the slots are empty
All three arrays default to empty. A request without LoRAs returns the base Wan 2.2 image-to-video result for the same frame and prompt, which is the reference that any strength sweep is measured against.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Required. Describe what moves and how the camera behaves. at least 1 characters |
image_url | Yes | The opening frame. Subject, wardrobe, set and the clip's aspect ratio all come from it; a LoRA restyles it rather than replacing it. at least 1 characters |
resolution | No | 480p or 720p, default 480p. Prove the LoRA combination at 480p before re-rendering at 720p. |
duration_seconds | No | Exactly 5 or 8. Any other value is rejected rather than rounded, so the length you pay for is never a surprise. |
loras | No | Up to three LoRAs applied to both noise experts. Each entry takes a direct weight URL and a strength; use this slot when the style should touch composition and texture alike. Default: |
high_noise_loras | No | Up to three LoRAs on the high-noise expert, the pass where composition and motion are decided. The right slot for a camera or movement style. Default: |
low_noise_loras | No | Up to three LoRAs on the low-noise expert, the pass where detail and texture resolve. The right slot for line art, grain or a rendering treatment. Default: |
seed | No | 0 to 2147483647. Hold it fixed while sweeping a LoRA's scale, or you cannot tell the scale from the noise. |
Pricing
| Specification | Price |
|---|---|
| $0.024 / second |
| $0.048 / second |
Use cases
A house illustration style across a series
Train a LoRA on your line art and colour treatment and load it into the low-noise slot at a strength near 1. The opening frame supplies the character and set of each clip while the LoRA supplies the rendering, so every clip in the series shares it. The rooftop-walk example is the kind of starting point this needs: a cel-shaded character on a rooftop at night, run without a LoRA, with the prompt asking for the anime style to hold through a tracking move.
Camera style kept apart from render style
Put a motion or camera LoRA in the high-noise slot and a texture LoRA in the low-noise slot of the same request. When the movement is right but the texture is too heavy, lower only the low-noise scale and rerun with the same frame, prompt and seed.
Uncensored-style weights
Weights trained for uncensored styles run the same as any other file: nothing in the request declares content and no LoRA is inspected. What bounds the work is your rights to the weights, the training data and the opening frame, together with consent, age and local law for everyone depicted.
Finding the right strength
Hold the frame, the prompt and the seed, then sweep one LoRA's scale from 0.5 to 1.5 across four runs at 480p. Above roughly 1.5 the style tends to consume the subject instead of styling it. Keep the run where the style is present and the subject from the frame is still intact, and rerender that combination at 720p.
Prompt guide & pro tips
Choose the slot before you write
Decide what the LoRA is supposed to change. Rendering style goes in the low-noise slot, motion or camera style in the high-noise slot, and the shared slot when the style should touch composition and texture alike. The prompt then only has to describe what moves and how the camera behaves.
Do not name the style twice
Naming a style in the prompt while also loading a LoRA for it tends to double the effect. When a LoRA carries the look, keep the prompt about action and camera, and adjust the strength instead of adding more style words.
Adapt the included example
The rooftop-walk example runs at duration_seconds 5 and resolution 480p with all three LoRA slots empty:
She pushes off the railing, straightens her blazer over one shoulder and turns to walk along the rooftop, city lights and the vending machine glow sliding past behind her, hair lifting in the night wind. Smooth tracking move, anime cel-shaded style held stable.
Run your own frame with a prompt in the same shape (one action, one camera move) and a fixed seed to get the base clip. Then add one weights URL to a single slot at scale 1, keep everything else unchanged, and compare the two clips to see what that LoRA changes.
Set length, seed and frame deliberately
duration_seconds accepts only 5 or 8, and any other value is rejected rather than rounded. For the seed, 0 requests a random draw, so use a non-zero value while you sweep. The frame can be JPEG, PNG without transparency, BMP or WebP of up to 20 MB, and the clip takes its aspect ratio from it, so crop it to the delivery shape first.
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.2-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.




























