Video rendering · Text to video

Render API

Render a varg composition written as code into a finished video in the cloud. Flat price per run.

Price
From $0.05 per run
Typical time
~2 min
Model id
render

Render runs on one varg API key and one credit balance, the same as every other model here. You pay the provider's price, with no markup.

POST /v2/tools/render/call
curl -X POST https://api.varg.ai/v2/tools/render/call \
  -H "Authorization: Bearer $VARG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "render",
  "code": "\nconst music = Music({\n  prompt: \"dark cyberpunk electronic odyssey, brooding synth bass, pulsing industrial beats, neon noir atmosphere, dystopian city vibes\",\n  model: elevenlabs.musicModel(\"music_v1\"),\n  volume: 0.75,\n  duration: 10\n});\n\nconst vid = Video({\n  prompt: \"slow cinematic drone glide low through rain-soaked cyberpunk alleyway at night, neon signs reflecting in puddles, steam rising from grates, holographic advertisements flickering on walls, atmospheric fog, flying vehicles in the distance\",\n  model: varg.videoModel(\"kling-v3\"),\n  duration: 10,\n  aspectRatio: \"16:9\"\n});\n\nexport default (\n  <Render width={1920} height={1080}>\n    <Clip duration={10}>\n      {vid}\n    </Clip>\n    {music}\n  </Render>\n);\n",
  "verbose": true
}'
Real output

Render pricing

From $0.05 per run. Prices are in US dollars and are the provider's own, with no markup. For the exact price of a request, send the same body to POST https://api.varg.ai/v2/estimate.

  • varg $0.05
    varg:render

    Text to video

    Fixed price
    $0.05
    Typical time
    ~2 min

Render inputs

The JSON body of the request. Media inputs are URLs: upload a local file with POST /v2/files and pass the URL it returns. Full JSON Schema, no key needed: api.varg.ai/v2/tools/render?model=render

Render request fields
FieldWhat it does
model string requiredrender picks a route automatically.
code string required —
verbose boolean —
mode string Allowed strict | preview
output string Allowed video | frames

Call the Render API

POST https://api.varg.ai/v2/tools/render/call with Authorization: Bearer $VARG_API_KEY. It answers 202 with a job right away.

1. Send the request

cURL
curl -X POST https://api.varg.ai/v2/tools/render/call \
  -H "Authorization: Bearer $VARG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "render",
  "code": "\nconst music = Music({\n  prompt: \"dark cyberpunk electronic odyssey, brooding synth bass, pulsing industrial beats, neon noir atmosphere, dystopian city vibes\",\n  model: elevenlabs.musicModel(\"music_v1\"),\n  volume: 0.75,\n  duration: 10\n});\n\nconst vid = Video({\n  prompt: \"slow cinematic drone glide low through rain-soaked cyberpunk alleyway at night, neon signs reflecting in puddles, steam rising from grates, holographic advertisements flickering on walls, atmospheric fog, flying vehicles in the distance\",\n  model: varg.videoModel(\"kling-v3\"),\n  duration: 10,\n  aspectRatio: \"16:9\"\n});\n\nexport default (\n  <Render width={1920} height={1080}>\n    <Clip duration={10}>\n      {vid}\n    </Clip>\n    {music}\n  </Render>\n);\n",
  "verbose": true
}'
JavaScript
JavaScript
const headers = {
  Authorization: `Bearer ${process.env.VARG_API_KEY}`,
  'Content-Type': 'application/json',
}

const res = await fetch('https://api.varg.ai/v2/tools/render/call', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    "model": "render",
    "code": "\nconst music = Music({\n  prompt: \"dark cyberpunk electronic odyssey, brooding synth bass, pulsing industrial beats, neon noir atmosphere, dystopian city vibes\",\n  model: elevenlabs.musicModel(\"music_v1\"),\n  volume: 0.75,\n  duration: 10\n});\n\nconst vid = Video({\n  prompt: \"slow cinematic drone glide low through rain-soaked cyberpunk alleyway at night, neon signs reflecting in puddles, steam rising from grates, holographic advertisements flickering on walls, atmospheric fog, flying vehicles in the distance\",\n  model: varg.videoModel(\"kling-v3\"),\n  duration: 10,\n  aspectRatio: \"16:9\"\n});\n\nexport default (\n  <Render width={1920} height={1080}>\n    <Clip duration={10}>\n      {vid}\n    </Clip>\n    {music}\n  </Render>\n);\n",
    "verbose": true
  }),
})
const job = await res.json() // { id: "job_…", status: "queued" }
Python
Python
import os
import requests

headers = {"Authorization": f"Bearer {os.environ['VARG_API_KEY']}"}

job = requests.post(
    "https://api.varg.ai/v2/tools/render/call",
    headers=headers,
    json={
      "model": "render",
      "code": "\nconst music = Music({\n  prompt: \"dark cyberpunk electronic odyssey, brooding synth bass, pulsing industrial beats, neon noir atmosphere, dystopian city vibes\",\n  model: elevenlabs.musicModel(\"music_v1\"),\n  volume: 0.75,\n  duration: 10\n});\n\nconst vid = Video({\n  prompt: \"slow cinematic drone glide low through rain-soaked cyberpunk alleyway at night, neon signs reflecting in puddles, steam rising from grates, holographic advertisements flickering on walls, atmospheric fog, flying vehicles in the distance\",\n  model: varg.videoModel(\"kling-v3\"),\n  duration: 10,\n  aspectRatio: \"16:9\"\n});\n\nexport default (\n  <Render width={1920} height={1080}>\n    <Clip duration={10}>\n      {vid}\n    </Clip>\n    {music}\n  </Render>\n);\n",
      "verbose": True
    },
).json()  # {"id": "job_…", "status": "queued"}

2. Get the result

Poll the job until its status is completed, failed or cancelled; Render typically takes about 2 min. The result is at output.outputs[0].url.

GET /v2/jobs/{id}
curl https://api.varg.ai/v2/jobs/$JOB_ID \
  -H "Authorization: Bearer $VARG_API_KEY"

# Poll until "status" is completed, failed or cancelled.
# The result is in output.outputs[0].url
JavaScript
JavaScript
let current = job
while (!['completed', 'failed', 'cancelled'].includes(current.status)) {
  await new Promise((resolve) => setTimeout(resolve, 3000))
  current = await (await fetch(`https://api.varg.ai/v2/jobs/${current.id}`, { headers })).json()
}
console.log(current.output?.outputs?.[0]?.url)
Python
Python
import time

while job["status"] not in ("completed", "failed", "cancelled"):
    time.sleep(3)
    job = requests.get(f"https://api.varg.ai/v2/jobs/{job['id']}", headers=headers).json()

print(job["output"]["outputs"][0]["url"])
Or take a webhook instead of polling

Add options.webhook_url and varg POSTs the finished job to it.

request body
{
  "model": "render",
  "code": "\nconst music = Music({\n  prompt: \"dark cyberpunk electronic odyssey, brooding synth bass, pulsing industrial beats, neon noir atmosphere, dystopian city vibes\",\n  model: elevenlabs.musicModel(\"music_v1\"),\n  volume: 0.75,\n  duration: 10\n});\n\nconst vid = Video({\n  prompt: \"slow cinematic drone glide low through rain-soaked cyberpunk alleyway at night, neon signs reflecting in puddles, steam rising from grates, holographic advertisements flickering on walls, atmospheric fog, flying vehicles in the distance\",\n  model: varg.videoModel(\"kling-v3\"),\n  duration: 10,\n  aspectRatio: \"16:9\"\n});\n\nexport default (\n  <Render width={1920} height={1080}>\n    <Clip duration={10}>\n      {vid}\n    </Clip>\n    {music}\n  </Render>\n);\n",
  "verbose": true,
  "options": {
    "webhook_url": "https://your-app.com/varg-webhook"
  }
}

From Claude, ChatGPT or Cursor (MCP)

The varg MCP server, https://mcp.varg.ai/mcp, runs Render with call_tool. Sign in with varg, no API key to paste. How to connect it

call_tool
{
  "tool": "render",
  "input": {
    "model": "render",
    "code": "\nconst music = Music({\n  prompt: \"dark cyberpunk electronic odyssey, brooding synth bass, pulsing industrial beats, neon noir atmosphere, dystopian city vibes\",\n  model: elevenlabs.musicModel(\"music_v1\"),\n  volume: 0.75,\n  duration: 10\n});\n\nconst vid = Video({\n  prompt: \"slow cinematic drone glide low through rain-soaked cyberpunk alleyway at night, neon signs reflecting in puddles, steam rising from grates, holographic advertisements flickering on walls, atmospheric fog, flying vehicles in the distance\",\n  model: varg.videoModel(\"kling-v3\"),\n  duration: 10,\n  aspectRatio: \"16:9\"\n});\n\nexport default (\n  <Render width={1920} height={1080}>\n    <Clip duration={10}>\n      {vid}\n    </Clip>\n    {music}\n  </Render>\n);\n",
    "verbose": true
  },
  "wait": true
}

Render API: questions

How much does Render cost on varg?
Render costs from $0.05 per run on varg. varg charges the provider's price with no markup, from one credit balance. For the exact price of a request before you run it, send the same body to POST https://api.varg.ai/v2/estimate.
How do I call the Render API?
Send POST https://api.varg.ai/v2/tools/render/call with the header "Authorization: Bearer $VARG_API_KEY" and a JSON body that includes "model": "render". The call answers 202 with a job right away. Poll GET https://api.varg.ai/v2/jobs/{id} until "status" is "completed", then read output.outputs[0].url, or pass options.webhook_url to be called back.
Can I use Render from Claude, ChatGPT or Cursor?
Yes. Add the varg MCP server (https://mcp.varg.ai/mcp) to Claude, ChatGPT, Cursor or any other MCP client and sign in with varg, with no API key to paste. The agent runs Render with call_tool, passing tool "render" and "model": "render".
How long does a Render request take?
Typically about 2 min on the fastest route, by the catalog's estimate. The API answers at once with a job id, so nothing waits on an open connection while it runs.

For AI agents: this page as Markdown is varg.ai/models/render.md, and every model is listed in varg.ai/models/llms.txt.