> ## Documentation Index
> Fetch the complete documentation index at: https://oxenai-eric-revamp-getting-started.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Kling 2.6 Pro - Image to Video

> Transforms static images into cinematic videos with synchronized audio, dialogue, and sound effects in 1080p.

<CardGroup cols={1}>
  <Card title="Try Kling 2.6 Pro - Image to Video in the Workbench" icon="flask" href="https://www.oxen.ai/ai/workbench?model=kling-video-v2-6-pro-image-to-video">
    Run this model interactively, tune parameters, and compare outputs.
  </Card>
</CardGroup>

**Model ID:** `kling-video-v2-6-pro-image-to-video`

Kling 2.6 Pro - Image to Video is a **Diffusion model** designed for generating short video clips from a static input image. It excels in producing motion with visual consistency from the reference image, along with optional synchronized native audio including sound effects and dialogue.

Some other noteworthy features of Kling 2.6 Pro - Image to Video include support for 1080p resolution in 16:9, 9:16, or 1:1 aspect ratios, and clip durations of 5 or 10 seconds.

| Metric             | Value   |
| ------------------ | ------- |
| Parameter Count    | Unknown |
| Mixture of Experts | Unknown |
| Context Length     | Unknown |
| Multilingual       | No      |
| Quantized\*        | Unknown |

\**Quantization is specific to the inference provider and the model may be offered with different quantization levels by other providers.*

## Example request

<Tip>
  Use the [Workbench](https://www.oxen.ai/ai/workbench?model=kling-video-v2-6-pro-image-to-video) as a request builder: configure parameters for this model in the UI, then open the **API** tab to copy the exact cURL or Python call.
</Tip>

<Tabs>
  <Tab title="Sync">
    This blocks until the video is ready (typically 5-15 minutes). Prefer **Async** or **Async with SSE** for anything beyond quick experimentation.

    See the [video generation reference](/inference-api/reference/video_generation) for more details.

    <Tabs>
      <Tab title="Minimal">
        <CodeGroup>
          ```bash cURL theme={null}
          curl -X POST https://hub.oxen.ai/api/ai/videos/generate \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."
          }'
          ```

          ```python Python theme={null}
          import os
          import requests

          response = requests.post(
              "https://hub.oxen.ai/api/ai/videos/generate",
              headers={
                  "Content-Type": "application/json",
                  "Authorization": f"Bearer {os.environ['OXEN_API_KEY']}",
              },
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."
              },
          )
          response.raise_for_status()
          print(response.json())
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Basic parameters">
        <CodeGroup>
          ```bash cURL theme={null}
          curl -X POST https://hub.oxen.ai/api/ai/videos/generate \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
            "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"
          }'
          ```

          ```python Python theme={null}
          import os
          import requests

          response = requests.post(
              "https://hub.oxen.ai/api/ai/videos/generate",
              headers={
                  "Content-Type": "application/json",
                  "Authorization": f"Bearer {os.environ['OXEN_API_KEY']}",
              },
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
                  "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"
              },
          )
          response.raise_for_status()
          print(response.json())
          ```
        </CodeGroup>
      </Tab>

      <Tab title="All parameters">
        <CodeGroup>
          ```bash cURL theme={null}
          curl -X POST https://hub.oxen.ai/api/ai/videos/generate \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
            "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png",
            "negative_prompt": "blur, distort, and low quality",
            "duration": 5,
            "generate_audio": false
          }'
          ```

          ```python Python theme={null}
          import os
          import requests

          response = requests.post(
              "https://hub.oxen.ai/api/ai/videos/generate",
              headers={
                  "Content-Type": "application/json",
                  "Authorization": f"Bearer {os.environ['OXEN_API_KEY']}",
              },
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
                  "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png",
                  "negative_prompt": "blur, distort, and low quality",
                  "duration": 5,
                  "generate_audio": false
              },
          )
          response.raise_for_status()
          print(response.json())
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="Async">
    See the [async queue reference](/inference-api/reference/async_queue) for more details.

    <Tabs>
      <Tab title="Minimal">
        <CodeGroup>
          ```bash cURL theme={null}
          # Enqueue, capture the generation id.
          GEN_ID=$(curl -s -X POST https://hub.oxen.ai/api/ai/queue \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."
          }' | jq -r '.generations[0].generation_id')

          # Poll the single generation until it 404s (terminal state).
          while curl -s -o /dev/null -w "%{http_code}" \
              -H "Authorization: Bearer $OXEN_API_KEY" \
              "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | grep -q "^200$"; do
            sleep 5
          done
          echo "Done. See the 'Async with SSE' tab to receive the result URL."
          ```

          ```python Python theme={null}
          import os
          import time
          import requests

          HEADERS = {
              "Content-Type": "application/json",
              "Authorization": f"Bearer {os.environ['OXEN_API_KEY']}",
          }

          enqueue = requests.post(
              "https://hub.oxen.ai/api/ai/queue",
              headers=HEADERS,
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."
              },
          )
          enqueue.raise_for_status()
          generation_id = enqueue.json()["generations"][0]["generation_id"]

          while True:
              resp = requests.get(
                  f"https://hub.oxen.ai/api/ai/queue/{generation_id}",
                  headers=HEADERS,
              )
              if resp.status_code == 404:
                  break
              time.sleep(5)
          print("Done. See the 'Async with SSE' tab to receive the result URL.")
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Basic parameters">
        <CodeGroup>
          ```bash cURL theme={null}
          # Enqueue, capture the generation id.
          GEN_ID=$(curl -s -X POST https://hub.oxen.ai/api/ai/queue \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
            "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"
          }' | jq -r '.generations[0].generation_id')

          # Poll the single generation until it 404s (terminal state).
          while curl -s -o /dev/null -w "%{http_code}" \
              -H "Authorization: Bearer $OXEN_API_KEY" \
              "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | grep -q "^200$"; do
            sleep 5
          done
          echo "Done. See the 'Async with SSE' tab to receive the result URL."
          ```

          ```python Python theme={null}
          import os
          import time
          import requests

          HEADERS = {
              "Content-Type": "application/json",
              "Authorization": f"Bearer {os.environ['OXEN_API_KEY']}",
          }

          enqueue = requests.post(
              "https://hub.oxen.ai/api/ai/queue",
              headers=HEADERS,
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
                  "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"
              },
          )
          enqueue.raise_for_status()
          generation_id = enqueue.json()["generations"][0]["generation_id"]

          while True:
              resp = requests.get(
                  f"https://hub.oxen.ai/api/ai/queue/{generation_id}",
                  headers=HEADERS,
              )
              if resp.status_code == 404:
                  break
              time.sleep(5)
          print("Done. See the 'Async with SSE' tab to receive the result URL.")
          ```
        </CodeGroup>
      </Tab>

      <Tab title="All parameters">
        <CodeGroup>
          ```bash cURL theme={null}
          # Enqueue, capture the generation id.
          GEN_ID=$(curl -s -X POST https://hub.oxen.ai/api/ai/queue \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
            "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png",
            "negative_prompt": "blur, distort, and low quality",
            "duration": 5,
            "generate_audio": false
          }' | jq -r '.generations[0].generation_id')

          # Poll the single generation until it 404s (terminal state).
          while curl -s -o /dev/null -w "%{http_code}" \
              -H "Authorization: Bearer $OXEN_API_KEY" \
              "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | grep -q "^200$"; do
            sleep 5
          done
          echo "Done. See the 'Async with SSE' tab to receive the result URL."
          ```

          ```python Python theme={null}
          import os
          import time
          import requests

          HEADERS = {
              "Content-Type": "application/json",
              "Authorization": f"Bearer {os.environ['OXEN_API_KEY']}",
          }

          enqueue = requests.post(
              "https://hub.oxen.ai/api/ai/queue",
              headers=HEADERS,
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
                  "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png",
                  "negative_prompt": "blur, distort, and low quality",
                  "duration": 5,
                  "generate_audio": false
              },
          )
          enqueue.raise_for_status()
          generation_id = enqueue.json()["generations"][0]["generation_id"]

          while True:
              resp = requests.get(
                  f"https://hub.oxen.ai/api/ai/queue/{generation_id}",
                  headers=HEADERS,
              )
              if resp.status_code == 404:
                  break
              time.sleep(5)
          print("Done. See the 'Async with SSE' tab to receive the result URL.")
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="Async with SSE">
    See the [async queue reference](/inference-api/reference/async_queue) for more details.

    <Tabs>
      <Tab title="Minimal">
        <CodeGroup>
          ```bash cURL theme={null}
          # Enqueue, capture the generation id.
          GEN_ID=$(curl -s -X POST https://hub.oxen.ai/api/ai/queue \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."
          }' | jq -r '.generations[0].generation_id')

          # Stream the SSE channel, grab the data line that follows a
          # media_generation_completed event for our id, and pretty-print it.
          curl -sN -H "Authorization: Bearer $OXEN_API_KEY" https://hub.oxen.ai/api/events \
            | awk -v id="$GEN_ID" '
              /^event: media_generation_completed$/ { expect=1; next }
              /^data: / && expect {
                payload = substr($0, 7)
                if (index(payload, "\"generation_id\":\"" id "\"")) { print payload; exit }
                expect = 0
              }
            ' | jq .
          ```

          ```python Python theme={null}
          import json
          import os
          import requests

          API_KEY = os.environ["OXEN_API_KEY"]
          AUTH = {"Authorization": f"Bearer {API_KEY}"}

          enqueue = requests.post(
              "https://hub.oxen.ai/api/ai/queue",
              headers={**AUTH, "Content-Type": "application/json"},
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."
              },
          )
          enqueue.raise_for_status()
          generation_id = enqueue.json()["generations"][0]["generation_id"]

          with requests.get(
              "https://hub.oxen.ai/api/events",
              headers=AUTH,
              stream=True,
          ) as stream:
              event_name = None
              for line in stream.iter_lines(decode_unicode=True):
                  if line.startswith("event: "):
                      event_name = line.removeprefix("event: ")
                  elif line.startswith("data: ") and event_name == "media_generation_completed":
                      payload = json.loads(line.removeprefix("data: "))
                      if payload.get("generation_id") == generation_id:
                          print(payload)
                          break
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Basic parameters">
        <CodeGroup>
          ```bash cURL theme={null}
          # Enqueue, capture the generation id.
          GEN_ID=$(curl -s -X POST https://hub.oxen.ai/api/ai/queue \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
            "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"
          }' | jq -r '.generations[0].generation_id')

          # Stream the SSE channel, grab the data line that follows a
          # media_generation_completed event for our id, and pretty-print it.
          curl -sN -H "Authorization: Bearer $OXEN_API_KEY" https://hub.oxen.ai/api/events \
            | awk -v id="$GEN_ID" '
              /^event: media_generation_completed$/ { expect=1; next }
              /^data: / && expect {
                payload = substr($0, 7)
                if (index(payload, "\"generation_id\":\"" id "\"")) { print payload; exit }
                expect = 0
              }
            ' | jq .
          ```

          ```python Python theme={null}
          import json
          import os
          import requests

          API_KEY = os.environ["OXEN_API_KEY"]
          AUTH = {"Authorization": f"Bearer {API_KEY}"}

          enqueue = requests.post(
              "https://hub.oxen.ai/api/ai/queue",
              headers={**AUTH, "Content-Type": "application/json"},
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
                  "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"
              },
          )
          enqueue.raise_for_status()
          generation_id = enqueue.json()["generations"][0]["generation_id"]

          with requests.get(
              "https://hub.oxen.ai/api/events",
              headers=AUTH,
              stream=True,
          ) as stream:
              event_name = None
              for line in stream.iter_lines(decode_unicode=True):
                  if line.startswith("event: "):
                      event_name = line.removeprefix("event: ")
                  elif line.startswith("data: ") and event_name == "media_generation_completed":
                      payload = json.loads(line.removeprefix("data: "))
                      if payload.get("generation_id") == generation_id:
                          print(payload)
                          break
          ```
        </CodeGroup>
      </Tab>

      <Tab title="All parameters">
        <CodeGroup>
          ```bash cURL theme={null}
          # Enqueue, capture the generation id.
          GEN_ID=$(curl -s -X POST https://hub.oxen.ai/api/ai/queue \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $OXEN_API_KEY" \
            -d '{
            "model": "kling-video-v2-6-pro-image-to-video",
            "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
            "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png",
            "negative_prompt": "blur, distort, and low quality",
            "duration": 5,
            "generate_audio": false
          }' | jq -r '.generations[0].generation_id')

          # Stream the SSE channel, grab the data line that follows a
          # media_generation_completed event for our id, and pretty-print it.
          curl -sN -H "Authorization: Bearer $OXEN_API_KEY" https://hub.oxen.ai/api/events \
            | awk -v id="$GEN_ID" '
              /^event: media_generation_completed$/ { expect=1; next }
              /^data: / && expect {
                payload = substr($0, 7)
                if (index(payload, "\"generation_id\":\"" id "\"")) { print payload; exit }
                expect = 0
              }
            ' | jq .
          ```

          ```python Python theme={null}
          import json
          import os
          import requests

          API_KEY = os.environ["OXEN_API_KEY"]
          AUTH = {"Authorization": f"Bearer {API_KEY}"}

          enqueue = requests.post(
              "https://hub.oxen.ai/api/ai/queue",
              headers={**AUTH, "Content-Type": "application/json"},
              json={
                  "model": "kling-video-v2-6-pro-image-to-video",
                  "prompt": "A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief.",
                  "input_image": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png",
                  "negative_prompt": "blur, distort, and low quality",
                  "duration": 5,
                  "generate_audio": false
              },
          )
          enqueue.raise_for_status()
          generation_id = enqueue.json()["generations"][0]["generation_id"]

          with requests.get(
              "https://hub.oxen.ai/api/events",
              headers=AUTH,
              stream=True,
          ) as stream:
              event_name = None
              for line in stream.iter_lines(decode_unicode=True):
                  if line.startswith("event: "):
                      event_name = line.removeprefix("event: ")
                  elif line.startswith("data: ") and event_name == "media_generation_completed":
                      payload = json.loads(line.removeprefix("data: "))
                      if payload.get("generation_id") == generation_id:
                          print(payload)
                          break
          ```
        </CodeGroup>
      </Tab>
    </Tabs>
  </Tab>
</Tabs>

## Fetch model details

The [models endpoint](/inference-api/reference/models/overview) returns the full model object, including its `json_request_schema`.

```bash theme={null}
curl -H "Authorization: Bearer $OXEN_API_KEY" https://hub.oxen.ai/api/ai/models/kling-video-v2-6-pro-image-to-video
```

## Request parameters

### Required parameters

| Field    | Type     | Default                                                                                                                  | Description                                                                                       |
| -------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| `prompt` | `string` | `"A man making it to the summit on top of a mountain. The man raises his arms in victory and exhales a sigh of relief."` | Text description of what you want to generate, or the instruction on how to edit the given image. |

### Optional parameters

| Field             | Type      | Default                                                                             | Description                                                              |
| ----------------- | --------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| `input_image`     | `string`  | `"https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/man-hiking.png"` | Image to use as reference. Must be jpeg, png, gif, or webp. Format: uri. |
| `negative_prompt` | `string`  | `"blur, distort, and low quality"`                                                  | Text description of what you *do not* want the model to do.              |
| `duration`        | `integer` | `5`                                                                                 | Video duration in seconds One of: 5, 10.                                 |
| `generate_audio`  | `boolean` | `false`                                                                             | Generate audio with the video.                                           |
