Open Video Image To Video LoRA
Playground
Try it on WavespeedAI!OpenVideo Image to Video LoRA is a fast AI image-to-video generation model that creates short cinematic clips with native audio from a single reference image, with optional preset control and per-LoRA strength settings for style, motion, and look-and-feel. Supports 480p, 720p, and 1080p output and 3–20 second duration tiers. Ready-to-use REST inference API for cinematic clips, character-consistent videos, stylized motion, product videos, social media content, advertising creatives, and professional LoRA-based image-to-video workflows with simple integration, no coldstarts, and affordable pricing.
Features
OpenVideo — Unlimited Image-to-Video (LoRA tier)
Full creative control — same audio-video pipeline as the base image-to-video endpoint, plus a curated LoRA stack you can preset or override per request. Unlimited generation freedom for style, motion and look-and-feel.
Extra Inputs (on top of the base endpoint)
| Field | Required | Default | Notes |
|---|---|---|---|
preset | no | tuned | original (light styling) or tuned (recommended stack). |
loras | no | {} | Per-LoRA strength overrides merged on top of the preset (e.g. {"omninft": 0.5, "better_motion": 0.3}). Unknown keys dropped. |
Available LoRA keys
sulphur, sulphur_v1, vbvr, dreamly, synth, plora, singularity, omninft, omninft_bf16, better_motion, physics_v2, hardcut, transition.
Pricing
| Resolution | Per 5s | Per second | Max length |
|---|---|---|---|
| 480p | $0.15 | $0.03 / s | 20 s |
| 720p | $0.25 | $0.05 / s | 20 s |
| 1080p | $0.35 | $0.07 / s | 20 s |
- Minimum charge: 5 seconds.
- Maximum billed duration: 20 seconds.
Notes
preset = tunedis the default and works well for most prompts. Useoriginalfor closer-to-input outputs.- Each active LoRA adds ~0.5-0.8 s at 480p / 5s. 13-LoRA worst case ≈ +30% vs no-LoRAs.
- Pass
loras: {"omninft": 0}to fully turn off a preset’s LoRA without changing the rest. - You retain full control over output content — by using this endpoint you confirm you have the right to generate the requested content under your jurisdiction.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/open-video/image-to-video-lora" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"preset": "tuned",
"loras": [],
"resolution": "480p",
"duration": 5,
"seed": -1
}'
# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| image | string | Yes | - | Reference image for the first frame (JPG/PNG recommended). | |
| prompt | string | Yes | - | Positive prompt describing the desired motion / scene. | |
| preset | string | No | tuned | tuned, original | LoRA preset bundle. `original` = light styling. `tuned` = the recommended general-purpose stack. Overridden per-LoRA via `loras`. |
| loras | array | No | max undefined items | Optional list of LoRA strength overrides merged on top of the preset, e.g. `[{"path": "sulphur", "scale": 0.3}, {"path": "omninft", "scale": 0.5}]`. | |
| loras[].path | string | Yes | - | Path to the LoRA model | |
| loras[].scale | float | Yes | - | 0.0 ~ 4.0 | Scale of the LoRA model |
| resolution | string | No | 480p | 480p, 720p, 1080p | Output resolution tier. |
| duration | integer | No | 5 | 3 ~ 20 | Output duration in seconds (3-20). |
| seed | integer | No | -1 | -1 ~ 2147483647 | Random seed. -1 for a random seed. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Array of URLs to the generated content (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content (empty when status is not completed). |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |