# vidu/vidu-q2/image-to-video > The latest Vidu Q2 models provide significantly improved quality and more refined control for your videos. ## Overview - **Endpoint**: `https://api.shortapi.ai/api/v1/job/create` - **Model ID**: `vidu/vidu-q2/image-to-video` - **Category**: image-to-video - **Kind**: inference ## Pricing In Turbo Mode, 540p starts at $0.03 plus $0.01/sec, 720p starts at $0.04 ($0.05 at 2s) plus $0.05/sec, and 1080p starts at $0.175 plus $0.05/sec; meanwhile, in Pro Mode, 540p starts at $0.04 ($0.05 at 2s) plus $0.025/sec, 720p starts at $0.075 plus $0.05/sec, and 1080p starts at $0.275 plus $0.075/sec; finally, in Pro-Fast Mode, 720p starts at $0.04 plus $0.01/sec, and 1080p starts at $0.08 plus $0.02/sec. For more details, please check our pricing page. ## API Information This model can be used via our HTTP API or more conveniently via our client libraries. See the input and output schema below, as well as the usage examples. ### Input Schema The API accepts the following input parameters: - **`mode`** (`string`, _required_): Video generation mode - Default: `pro` - Options: "turbo", "pro", "pro-fast" - **`prompt`** (`string`, _required_): Text prompt - Examples: "An action shot of a black lab swimming..." - **`duration`** (`string`, _optional_): Video Length, unit: s (seconds) - Default: `5` - Range: `1` to `10` - **`image`** (`string`, _required_): Reference Image - **`resolution`** (`string`, _optional_): Output video resolution, while 540p is not supported in pro-fast mode - Default: `720p` - Options: "540p", "720p", "1080p" - **`generate_audio`** (`bool`, _optional_): Whether to generate original audio for the video. When this parameter is true, the voice_id parameter is required - Default: `false` - Options: "true", "false" - **`voice_id`** (`string`, _optional_): It is used to determine the timbre of the sound in the video, and the timbre ID can be found in the official documentation. ### Output Schema The API returns a JSON response with a `job_id` for tracking the request status. **Create Job Response:** ```json { "code": 0, "data": { "amount": "0.02", "job_id": "" } } ``` **Query Job Result (when status is 2, meaning succeeded):** ```json { "code": 0, "data": { "status": 2, "result": { "images": [{ "url": "https://..." }] } } } ``` ## Use Example To use this model, make an HTTP POST request to the API endpoint, then poll for results using the returned `job_id`. ### Bash (cURL) ```bash # Step 1: Create a job response=$(curl --request POST \ --url https://api.shortapi.ai/api/v1/job/create \ --header "Authorization: Bearer $SHORTAPI_KEY" \ --header "Content-Type: application/json" \ --data '{ "model": "vidu/vidu-q2/image-to-video", "args": { "mode": "pro", "prompt": "Astronaut snowboarding directly on dense clouds, snowboard visibly pressing and gliding across cloud surface, compressing clouds slightly underfoot. Astronaut actively carves smooth turns. Clouds drift slowly around. The drone camera pulls steadily backward, revealing a wide-angle view of the astronaut snowboarding across the endless cloudscape. Ultra-realistic lighting, cinematic depth of field, cloud shadows, helmet reflections, atmospheric sunlight", "image": "https://file.shortapi.ai/assets/examples/vidu/vidu-q2/image-to-video-image.png" }, "callback_url": "CALLBACK_URL" }') JOB_ID=$(echo "$response" | grep -o '"job_id": *"[^"]*"' | sed 's/"job_id": *//; s/"//g') # Step 2: Poll for results curl --request GET \ --url "https://api.shortapi.ai/api/v1/job/query?id=$JOB_ID" \ --header "Authorization: Bearer $SHORTAPI_KEY" ``` ### JavaScript (Fetch API) ```javascript // Step 1: Create a job const response = await fetch(`https://api.shortapi.ai/api/v1/job/create`, { method: "POST", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "model": "vidu/vidu-q2/image-to-video", "args": { "mode": "pro", "prompt": "Astronaut snowboarding directly on dense clouds, snowboard visibly pressing and gliding across cloud surface, compressing clouds slightly underfoot. Astronaut actively carves smooth turns. Clouds drift slowly around. The drone camera pulls steadily backward, revealing a wide-angle view of the astronaut snowboarding across the endless cloudscape. Ultra-realistic lighting, cinematic depth of field, cloud shadows, helmet reflections, atmospheric sunlight", "image": "https://file.shortapi.ai/assets/examples/vidu/vidu-q2/image-to-video-image.png" }, "callback_url": "CALLBACK_URL" }) }); const data = await response.json(); const JOB_ID = data.job_id; // Step 2: Poll for results const result = await fetch(`https://api.shortapi.ai/api/v1/job/query?id=${JOB_ID}`, { method: "GET", headers: { "Authorization": `Bearer ${SHORTAPI_KEY}` } }); const resultData = await result.json(); console.log(resultData); ``` ### Python (Requests) ```python import requests # Step 1: Create a job url = "https://api.shortapi.ai/api/v1/job/create" payload = { "model": "vidu/vidu-q2/image-to-video", "args": { "mode": "pro", "prompt": "Astronaut snowboarding directly on dense clouds, snowboard visibly pressing and gliding across cloud surface, compressing clouds slightly underfoot. Astronaut actively carves smooth turns. Clouds drift slowly around. The drone camera pulls steadily backward, revealing a wide-angle view of the astronaut snowboarding across the endless cloudscape. Ultra-realistic lighting, cinematic depth of field, cloud shadows, helmet reflections, atmospheric sunlight", "image": "https://file.shortapi.ai/assets/examples/vidu/vidu-q2/image-to-video-image.png" }, "callback_url": "CALLBACK_URL" } headers = { "Authorization": f"Bearer {SHORTAPI_KEY}", "Content-Type": "application/json" } response = requests.post(url, headers=headers, json=payload) data = response.json() JOB_ID = data.get("job_id") # Step 2: Poll for results result_url = f"https://api.shortapi.ai/api/v1/job/query?id={JOB_ID}" result = requests.get(result_url, headers={"Authorization": f"Bearer {SHORTAPI_KEY}"}) print(result.json()) ```