Grok Imagine Extend Video
Integrate
xai/grok-imagine-video/extend-video
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/xai/grok-imagine-video/extend-video?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.ru/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/xai/grok-imagine-video/extend-video?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/xai/grok-imagine-video/extend-video", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
# 1. Connect once (Claude Code; Cursor, VS Code, Claude Desktop: https://doitong.com/en-US/developers/docs/mcp)
claude mcp add --transport http doitong-models https://api.doitong.ru/v1/mcp \
--header "Authorization: Bearer $DOITONG_API_KEY"
# 2. Your agent calls the "run" tool with:
{
"model_id": "xai/grok-imagine-video/extend-video",
"input": {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
}
Call the Grok Imagine Extend Video model (xai/grok-imagine-video/extend-video) through the Doitong API. Docs for agents: https://doitong.com/en-US/developers/models/xai/grok-imagine-video/extend-video.md
POST https://api.doitong.ru/v1/run/xai/grok-imagine-video/extend-video?wait=20
Authorization: Bearer $DOITONG_API_KEY
Content-Type: application/json
{
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}
If the response status is "queued" or "running", poll GET https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20 until it is "succeeded"; the files are in outputs[].url. POST https://api.doitong.ru/v1/quote/xai/grok-imagine-video/extend-video with the same body returns the exact price before the run.
Files like the example: $0.52 520 API credits · ≈ ₽55.88 your files are measured before the run Run it on this page
Your new API key. It is shown only now and is already in the code and in the API key field below. Keep it secret: never put it in code that runs in a browser.
Made on Doitong
Public works made with Grok Imagine by the Doitong community. Reuse a prompt in one click.
The camera starts with a close-up on the Uterus's face showing pure exhaustion, then slowly tilts down to reveal the tiny, injured Sperm hobbling into the frame. The Sperm stops and tries to puff out its chest heroically while waving a crutch in the air. As he speaks, he loses his balance and...
Камера плавно панорамирует слева направо, открывая вид на просыпающуюся деревню. Жители выходят из домов, обмениваясь приветствиями, пар от их дыхания виден в морозном воздухе. Мальчики похлопывают лошадей по шее, а девочки играют, подбрасывая снег. Движение размеренное, создающее ощущение начала...
Устойчивая, статичная камера. Классическая диалоговая последовательность "кадр-контркадр". Без резких движений, подчеркивающих формальность и окончательность ситуации. On-screen dialogue (characters speak with lip-sync): Юрист (voice: Женский голос. Теплый, мелодичный меццо-сопрано с уверенным,...
Пальцы Аиши быстро, но немного неуклюже бегают по клавишам, совершая ошибку. Она резко останавливается, сжимая кулаки. Камера совершает быстрый круговой облет вокруг неё, передавая чувство головокружения и фрустрации. Затем она снова кладет руки на клавиши, её взгляд становится жестким и...
Тигр медленно поворачивает голову к напарнику, произнося фразу с холодной уверенностью. Камера плавно приближается к лицу тигра. Лёгкий дождь усиливает блики на асфальте. Атмосфера растущей напряжённости. On-screen dialogue (characters speak with lip-sync): Барс (voice: Низкий грубый бас,...
Camera slowly pushes in, the boys wave enthusiastically and smile, dynamic and joyful movement. On-screen dialogue (characters speak with lip-sync): Роберт (voice: Звонкий, чистый детский голос с мягким тембром, спокойной интонацией и легкой, дружелюбной энергией.): "Всем привет!"; Рафаэль...
Искры от костра взлетают вверх, смешиваясь со звездами. Анастасия Георгиевна мягко гладит Юру по голове и что-то шепчет ему. Камера медленно приближается к их лицам, передавая интимность момента. Огонь мерцает, создавая живые тени на их лицах и на стене строящейся школы за их спинами. Это момент...
Палец Елены уверенно прокручивает список товаров в приложении, останавливаясь на продуктах категории «Здоровье». Камера совершает плавный боковой проезд вокруг рук, создавая динамику. На заднем плане мягко переливается свет, имитируя уютную домашнюю обстановку. В конце сцены на экране появляется...
Камера медленно наклоняется (tilt up) от фотографии к лицу Артёма. Мы видим его глаза, полные слез и нежности. Он подносит фотографию ближе к лицу и на мгновение прижимает ее к щеке. Кадр наполнен глубоким чувством раскаяния и любви. Освещение лампы создает мягкие тени, подчеркивая интимность и...
Девушка плавно идет по коридору, ее шаги почти бесшумны. Камера медленно следует за ней сбоку, сохраняя средний план. Солнечные лучи пересекают ее путь, создавая ритмичную игру света и тени на одежде. В воздухе медленно кружатся мелкие пылинки, подсвеченные золотом. Движение передает легкость и...
Котоклизм медленно закрывает глаза, подставляя мордочку морскому бризу, затем открывает их и понимающе кивает зрителю. Камера плавно отъезжает назад, пока его фигура не становится маленькой светящейся точкой на фоне гаснущего заката. Легкий ветер шевелит его звездную шерсть. Чувство глубокого...
Малыш сидит на пушистом ковре в тихой детской, смотрит вокруг с легким удивлением, затем внезапно его плечики начинают трястись от смеха, ручки хлопают по ковру. Камера медленно приближается с низкого угла, плавно поднимаясь к лицу. Солнечные лучики играют на ковре, игрушки в фоне слегка...
Общий план площадки, затем крупный план на отчаянное лицо Сергея, пытающегося вытащить коляску. Камера слегка трясется, передавая его напряжение. On-screen dialogue (characters speak with lip-sync): Сергей (бормочет себе под нос): "И почему все мамы на площадке выглядят такими спокойными? Что я...
Плавное движение камеры (dolly shot) вдоль рабочего стола Анны, показывая ее за работой. Она делает пометки, улыбается коллеге. Все выглядит спокойно и упорядоченно. On-screen dialogue (characters speak with lip-sync): Коллега (за кадром): "Анна, отличная работа! С возвращением в строй!" No...
Камера медленно облетает Викторию по дуге, переводя фокус с интерактивной карты России на ее лицо. Точки на карте пульсируют золотистым светом. Виктория делает приглашающий жест рукой. Видео заканчивается плавным затемнением, оставляя ощущение надежности и масштабности организации. On-screen...
Очень быстрая смена кадров. Сообщения появляются и исчезают с высокой скоростью. Эффект 'скроллинга' чата, который невозможно остановить. Динамичная анимация, передающая накал страстей в чате. On-screen dialogue (characters speak with lip-sync): Нина: "Днём здесь ругаются из-за мусора. Вечером...
Build a request
Controls are generated from the model schema. The code and the price update as you change them.
/run/xai/grok-imagine-video/extend-video?wait=20
quote → $0.52
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.ru/v1/run/xai/grok-imagine-video/extend-video?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.ru/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.ru/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/xai/grok-imagine-video/extend-video?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.ru/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/xai/grok-imagine-video/extend-video", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"model_id": "xai/grok-imagine-video/extend-video",
"input": {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
},
"wait_seconds": 20
}
}
}
Run this request
Your key stays in this browser: it is sent only to the Doitong API and saved (localStorage) only if you tick Remember. Get an API key
About Grok Imagine Extend Video
Adds new footage to the end of a video given in `video_url`, which must be MP4 (H.264, H.265 or AV1) and 2 to 15 seconds long. The `prompt` describes what should happen next, and `duration` sets the extension length from 2 to 10 seconds (default 6). The result is the original and the extension stitched into one video.
Parameters
Send either the canonical name or the native name, not both. Canonical names
promptrequired
video_urlrequired
video
durationoptional
enable_safety_checkeroptional
File parameters take a public https:// URL, a data: URI up to 10 MB, or the file_url of an upload. Files
Output
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "xai/grok-imagine-video/extend-video",
"status": "succeeded",
"created_at": "2026-10-20T12:00:00Z",
"started_at": "2026-10-20T12:00:02Z",
"completed_at": "2026-10-20T12:00:09Z",
"queue_position": null,
"cost": {
"credits": 520,
"usd": "0.52",
"charged": 520,
"refunded": 0
},
"input": {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
"video_url": "https://content.doitong.com/video/showcase/v3/gen_fox_cartoon.mp4"
},
"output": {
"video": {
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_name": "0-output.mp4",
"file_size": 1843200,
"width": 1024,
"height": 768,
"fps": 1.0,
"duration": 5,
"num_frames": 1
}
},
"outputs": [
{
"type": "video",
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_size": 1843200,
"width": 1280,
"height": 720,
"duration": 5,
"stored": true
}
],
"error": null,
"metrics": {
"inference_seconds": 6.8
},
"urls": {
"self": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
"cancel": "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
}
}
Fields of output
- video
- object {url, content_type, file_name, file_size, width, height, fps, duration, num_frames}Extended video combining the original with the extension stitched onto it.
Other Grok Imagine variants
More models: Video to Video
For AI agents: this page as Markdown is at https://doitong.com/en-US/developers/models/xai/grok-imagine-video/extend-video.md. All models and guides: https://doitong.com/developers/llms.txt