# Vidu Q3 Turbo Start-End-to-Video - Documentation

> For the complete documentation index, see [llms.txt](/llms.txt). Markdown is available with `Accept: text/markdown` and `.md` URL variants.

Source: /docs/api-reference/model-apis-vidu-q3-turbo-f2v

# Vidu Q3 Turbo Start-End-to-Video

POST

/

v3

/

async

/

vidu-q3-turbo-f2v

Vidu Q3 Turbo Start-End-to-Video

cURL

```
curl --request POST \
--url https://api.novita.ai/v3/async/vidu-q3-turbo-f2v \
--header 'Authorization: ' \
--header 'Content-Type: ' \
--data '
{
"seed": 123,
"audio": true,
"images": [
""
],
"is_rec": true,
"prompt": "",
"duration": 123,
"off_peak": true,
"resolution": ""
}
'
```

```
import requests

url = "https://api.novita.ai/v3/async/vidu-q3-turbo-f2v"

payload = {
"seed": 123,
"audio": True,
"images": [""],
"is_rec": True,
"prompt": "",
"duration": 123,
"off_peak": True,
"resolution": ""
}
headers = {
"Content-Type": "",
"Authorization": ""
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
```

```
const options = {
method: 'POST',
headers: {'Content-Type': '', Authorization: ''},
body: JSON.stringify({
seed: 123,
audio: true,
images: [''],
is_rec: true,
prompt: '',
duration: 123,
off_peak: true,
resolution: ''
})
};

fetch('https://api.novita.ai/v3/async/vidu-q3-turbo-f2v', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
```

```
"https://api.novita.ai/v3/async/vidu-q3-turbo-f2v",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'seed' => 123,
'audio' => true,
'images' => [
''
],
'is_rec' => true,
'prompt' => '',
'duration' => 123,
'off_peak' => true,
'resolution' => ''
]),
CURLOPT_HTTPHEADER => [
"Authorization: ",
"Content-Type: "
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
```

```
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.novita.ai/v3/async/vidu-q3-turbo-f2v"

payload := strings.NewReader("{\n \"seed\": 123,\n \"audio\": true,\n \"images\": [\n \"\"\n ],\n \"is_rec\": true,\n \"prompt\": \"\",\n \"duration\": 123,\n \"off_peak\": true,\n \"resolution\": \"\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Content-Type", "")
req.Header.Add("Authorization", "")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
```

```
HttpResponse response = Unirest.post("https://api.novita.ai/v3/async/vidu-q3-turbo-f2v")
.header("Content-Type", "")
.header("Authorization", "")
.body("{\n \"seed\": 123,\n \"audio\": true,\n \"images\": [\n \"\"\n ],\n \"is_rec\": true,\n \"prompt\": \"\",\n \"duration\": 123,\n \"off_peak\": true,\n \"resolution\": \"\"\n}")
.asString();
```

```
require 'uri'
require 'net/http'

url = URI("https://api.novita.ai/v3/async/vidu-q3-turbo-f2v")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = ''
request["Authorization"] = ''
request.body = "{\n \"seed\": 123,\n \"audio\": true,\n \"images\": [\n \"\"\n ],\n \"is_rec\": true,\n \"prompt\": \"\",\n \"duration\": 123,\n \"off_peak\": true,\n \"resolution\": \"\"\n}"

response = http.request(request)
puts response.read_body
```

200

```
{
"task_id": ""
}
```

Vidu Q3 Turbo start-end-to-video generates high-quality videos from first and last frame images with text-guided motion interpolation, supporting up to 1080p resolution.

This is an asynchronous API; only the task_id will be returned. You should use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the video generation results.

##

[​](#request-headers)

Request Headers

[​](#param-content-type)

Content-Type

string

required

Supports: `application/json`

[​](#param-authorization)

Authorization

string

required

Bearer authentication format, for example: Bearer {{API Key}}.

##

[​](#request-body)

Request Body

[​](#param-seed)

seed

integer

Random seed for reproducibility. 0 means random.

[​](#param-audio)

audio

boolean

default:true

Enable audio-video sync output (dialogue and sound effects). When false, output is silent video. Q3 series only.

[​](#param-images)

images

string[]

required

Two image URLs or Base64 encoded images. First image as start frame, second as end frame. Supports png, jpeg, jpg, webp formats. Max 50MB per image. Both images must have similar resolution (ratio between 0.8-1.25). Aspect ratio must be < 1:4 or > 4:1.Array length: 2 - 2

[​](#param-is-rec)

is_rec

boolean

Whether to use recommended prompt. When true, system auto-generates prompt.

[​](#param-prompt)

prompt

string

Text description of desired video motion between start and end frames. Maximum 1500 characters.Length limit: 0 - 1500

[​](#param-duration)

duration

integer

default:5

Video duration in seconds, range 1-16.Value range: [1, 16]

[​](#param-off-peak)

off_peak

boolean

default:false

Whether to use off-peak mode. Task will be processed within 48 hours at lower cost.

[​](#param-resolution)

resolution

string

default:"720p"

Output video resolution.Optional values: `540p`, `720p`, `1080p`

##

[​](#response)

Response

[​](#param-task-id)

task_id

string

required

Use the task_id to request the [Task Result API](/docs/api-reference/model-apis-task-result) to retrieve the generated outputs.

Last modified on July 3, 2026
