Design in the editor, export JSON later
This path works best when non developers need to build the base scene. Once the layout is approved, export editor JSON and wire it into code.
Use editor JSON to define scenes, layers, text, charts, and export specs, then turn that JSON to video through the public API or typed SDKs.
Editor JSON available. Node.js client available. Python client available.
{
"editorState": {
"timebaseTicksPerSecond": 240000,
"compositionWidth": 1920,
"compositionHeight": 1080,
"outputRatio": "16:9",
"globalBackground": {
"type": "none"
},
"brandRuntime": {
"brandId": null,
"logoX": 50,
"logoY": 50,
"managedItemIds": [],
"managedAssetIds": [],
"introShiftInFrames": 0,
"overlayTrackId": null,
"underlayTrackId": null
},
"tracks": [
{
"id": "qVAV",
"items": [
"nSrW"
],
"hidden": false,
"muted": false
}
],
"assets": {},
"items": {
"nSrW": {
"id": "nSrW",
"type": "text",
"text": "Hello World",
"color": "#ffffff",
"top": 492,
"left": 755,
"width": 411,
"height": 96,
"align": "center",
"opacity": 1,
"rotation": 0,
"fontFamily": "Roboto",
"fontSize": 80,
"lineHeight": 1.2,
"letterSpacing": 0,
"resizeOnEdit": true,
"direction": "ltr",
"fontStyle": {
"variant": "normal",
"weight": "400"
},
"isDraggingInTimeline": false,
"strokeWidth": 0,
"strokeColor": "#000000",
"background": null,
"startTicks": 0,
"durationTicks": 384000
}
},
"transitions": {},
"deletedAssets": []
},
"fps": 30,
"ratio": "16:9",
"scale": 1,
"format": "mp4"
}JSON to video means the video structure itself becomes data. Scenes, timing, assets, captions, and export settings can all live in a payload your app controls.
Best for
Teams exporting templates from a visual editor and reusing them in code
Developers authoring or patching payloads inside backend jobs
Products that need video output as a repeatable API response
Workflows that need validation before long running export tasks start
This path works best when non developers need to build the base scene. Once the layout is approved, export editor JSON and wire it into code.
This path works best when your template logic already lives in a service and the team wants the export payload to stay close to the application code.
Tracks, timing, transforms, transitions, and layout all live inside the same editor JSON document.
Headlines, subtitle timing, on screen copy, and style choices can all be encoded in the payload.
Swap asset URLs, values, labels, colors, and supporting content without rebuilding the surrounding scene.
Ratio, scale, fps, format, and custom output dimensions are all part of the export request.
Choose the runtime that fits your team, then send the same editor JSON through a direct export flow.
import { IndreamClient } from '@indreamai/client'
const client = new IndreamClient({
apiKey: process.env.INDREAM_API_KEY!,
baseURL: 'https://api.indream.ai',
timeout: 60_000,
maxRetries: 2,
})
await client.editor.validate(editorState)
const created = await client.exports.create({
editorState,
ratio: '9:16',
scale: 0.6,
fps: 30,
format: 'mp4',
})
const done = await client.exports.wait(created.taskId, {
timeoutMs: 10 * 60 * 1000,
pollIntervalMs: 2_000,
})
console.log(done.status, done.outputUrl)Start with editor exported JSON if the scene is still changing often.
Move to code authored JSON once the template shape is stable and versioned.
Use the pricing page for current credit and export details instead of hard coding assumptions.
Pair validation with webhook delivery so failed payloads never reach long running jobs.
Reuse the same JSON across one off exports and larger programmatic batches.
Keep docs, SDK examples, and the exported template side by side during rollout.
Start with the docs, validate your editor JSON, and wire export create into the stack you already run for jobs and assets.
See the broader API workflow, delivery model, and production considerations.
Focus on chart animation, transparent overlays, and report ready outputs.
See how the same export system maps spreadsheet data into campaign video volume.