Wan FLF2V
Wan-2.1 flf2v generates dynamic videos by intelligently bridging a given first frame to a desired end frame through smooth, coherent motion sequences.
Features
FLF2V stands for First-Last Frame to Video. The model uses two image anchors—the first frame and last frame—and generates a short cinematic sequence that connects the two via plausible and creative motion.
Rather than simply blending frames, it leverages the architecture of Wan 2.1, integrating LoRA conditioning, diffusion guidance, and temporal consistency training to produce meaningful transitions.
The FLF2V model bridges the creative gap between keyframes. The results often feel like scenes from short animated films—with character motion, background transitions, and action unfolding fluidly.
Key Features
- Dual-Anchor Motion Synthesis: Generates video by connecting two key frames with context-aware motion sequences.
- Supports Prompt + Image Input: Combine text guidance with first/last frame images for even finer control over content and style.
- LoRA Compatible: Natively supports all LoRA models—customize characters, styles, and environments with precision.
- High Fidelity + Realism: Trained to avoid warping, artifacts, or lazy interpolation—motion unfolds naturally and consistently.
- Fast Inference with WaveSpeedAI Inference: Run WAN-FLF2V at blazing speeds with our optimized inference engine, saving time and compute costs.
Limitations
- Input Dependency: The quality of the generated video heavily relies on the clarity and relevance of the starting and ending frames, as well as the specificity of the text prompt.
- Creative Control: While FLF2V offers enhanced control over motion synthesis, achieving highly specific or complex transitions may require iterative prompt tuning and experimentation.
- Output Length: The duration of the generated video is influenced by the number of frames specified, which may limit the length of the output in certain scenarios.
Out-of-Scope Use
The model and its derivatives may not be used in any way that violates applicable national, federal, state, local, or international law or regulation, including but not limited to:
- Exploiting, harming, or attempting to exploit or harm minors, including solicitation, creation, acquisition, or dissemination of child exploitative content.
- Generating or disseminating verifiably false information with the intent to harm others.
- Creating or distributing personal identifiable information that could be used to harm an individual.
- Harassing, abusing, threatening, stalking, or bullying individuals or groups.
- Producing non-consensual nudity or illegal pornographic content.
- Making fully automated decisions that adversely affect an individual’s legal rights or create binding obligations.
- Facilitating large-scale disinformation campaigns.
Accelerated Inference
Our accelerated inference approach leverages advanced optimization technology from WavespeedAI. This innovative fusion technique significantly reduces computational overhead and latency, enabling rapid image generation without compromising quality. The entire system is designed to efficiently handle large-scale inference tasks while ensuring that real-time applications achieve an optimal balance between speed and accuracy. For further details, please refer to the blog post.
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/wan-flf2v" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"first_image": "https://raw.githubusercontent.com/Comfy-Org/example_workflows/refs/heads/main/wan2.1_flf2v/input/start_image.png",
"last_image": "https://raw.githubusercontent.com/Comfy-Org/example_workflows/refs/heads/main/wan2.1_flf2v/input/end_image.png",
"prompt": "glass flower blossom",
"negative_prompt": "",
"duration": 5,
"size": "832*480",
"num_inference_steps": 30,
"enable_fast_mode": false,
"guidance_scale": 5,
"seed": -1,
"enable_safety_checker": true
}'
# 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 |
---|---|---|---|---|---|
first_image | string | Yes | https://raw.githubusercontent.com/Comfy-Org/example_workflows/refs/heads/main/wan2.1_flf2v/input/start_image.png | - | URL of the starting image. |
last_image | string | Yes | https://raw.githubusercontent.com/Comfy-Org/example_workflows/refs/heads/main/wan2.1_flf2v/input/end_image.png | - | URL of the ending image. |
prompt | string | No | glass flower blossom | - | |
negative_prompt | string | No | - | - | The negative prompt for generating the output. |
duration | integer | No | 5 | 5 ~ 10 | |
size | string | No | 832*480 | 832*480, 480*832, 1280*720, 720*1280 | The size of the output. |
num_inference_steps | integer | No | 30 | 1 ~ 40 | The number of inference steps. |
enable_fast_mode | boolean | No | false | - | using accelerator technology to speed up the model, which may slightly decrease output quality. |
guidance_scale | number | No | 5 | 1.01 ~ 10.00 | The guidance scale for generation. |
seed | integer | No | -1 | -1 ~ 9999999999 | The seed for random number generation. |
enable_safety_checker | boolean | No | true | - | Whether to enable the safety checker. |
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.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
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 Query Parameters
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 |
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.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
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 |