Use this file to discover all available pages before exploring further.
Try Kling O3 Edit - Video to Video in the Workbench
Run this model interactively, tune parameters, and compare outputs.
Model ID:kling-video-o3-pro-video-to-video-editKling Video 3.0 Video to Video is an all-in-one generative video model that unifies high-quality video creation and editing into a single workflow, letting you input text, images, or reference characters to produce cinematic, multi-shot sequences with coherent motion, physics-informed camera behavior, and synchronized audio.
Use the Workbench 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.
Sync
Async
Async with SSE
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 for more details.
Minimal
Basic parameters
All parameters
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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4"}'
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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_image": [], "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4", "elements": [ {} ]}'
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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_image": [], "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4", "elements": [ {} ], "keep_audio": false}'
# 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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4"}' | jq -r '.generations[0].generation_id')# Poll until the generation reaches a terminal status.while true; do STATUS=$(curl -s -H "Authorization: Bearer $OXEN_API_KEY" \ "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | jq -r '.status') echo "Status: $STATUS" case $STATUS in succeeded|failed|cancelled) break;; esac sleep 5done# Print the result.curl -s -H "Authorization: Bearer $OXEN_API_KEY" \ "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | jq .
# 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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_image": [], "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4", "elements": [ {} ]}' | jq -r '.generations[0].generation_id')# Poll until the generation reaches a terminal status.while true; do STATUS=$(curl -s -H "Authorization: Bearer $OXEN_API_KEY" \ "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | jq -r '.status') echo "Status: $STATUS" case $STATUS in succeeded|failed|cancelled) break;; esac sleep 5done# Print the result.curl -s -H "Authorization: Bearer $OXEN_API_KEY" \ "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | jq .
# 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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_image": [], "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4", "elements": [ {} ], "keep_audio": false}' | jq -r '.generations[0].generation_id')# Poll until the generation reaches a terminal status.while true; do STATUS=$(curl -s -H "Authorization: Bearer $OXEN_API_KEY" \ "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | jq -r '.status') echo "Status: $STATUS" case $STATUS in succeeded|failed|cancelled) break;; esac sleep 5done# Print the result.curl -s -H "Authorization: Bearer $OXEN_API_KEY" \ "https://hub.oxen.ai/api/ai/queue/$GEN_ID" | jq .
# 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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4"}' | 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 .
# 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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_image": [], "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4", "elements": [ {} ]}' | 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 .
# 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-o3-pro-video-to-video-edit", "prompt": "A red bird flies in and lands in-between the two birds on the wire. They fight for positioning before settling in their spots.", "input_image": [], "input_video": "https://hub.oxen.ai/api/repos/ox/Oxen-AI-Assets/file/main/images/birds_on_telephone_wire.mp4", "elements": [ {} ], "keep_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 .