JsonCut
BULK IMAGE AND VIDEO GENERATION

Turn rows into
finished creative.

Generate personalized image and video batches from CSV or JSON while keeping row-level results, validation and failures understandable.

CSV or JSONImages and videoPartial success
launch-markets.csv500 rows
skumarketpricepreflight
1042-DEBerlin€79ready
1042-GBLondon£69ready
1042-NOOslokr 899ready
1042-FRParischeck
BATCH 2026-08Market launch
87%
436complete61running3review
Every row keeps its own result.
START WITH THE DATA YOU HAVE

Bring the rows.
Skip the repeated setup.

Upload a CSV in Studio or send a JSON array through the API. Column names map to published fields, while batch defaults fill values shared by every row.

CSVExisting files stay useful.market,price,productImage
DE,€79,media_1042
GB,£69,media_1042
OR
JSONApplications send objects.[{ "market": "DE", "price": "€79" }, { "market": "GB", "price": "£69" }]
MAP
Published inputs
marketText
priceText
productImageImage
campaignDefault
Rows normalized
Map once

Studio suggests matching columns and lets you ignore data the visual does not need.

Set shared defaults

Campaign, language or media can be applied once and overridden only where needed.

Keep payloads clear

Stable media references replace repeated base64 payloads and oversized rows.

ROW-LEVEL PREFLIGHT

Check the data
before compute starts.

Required values, types and media references are validated against the pinned template version. Valid rows continue while a bad row stays visible with a useful reason.

  • Required and typed fields
  • Media references and output kind
  • Exact published template version
Preflight · 6 rows5 READY · 1 NEEDS INPUT
rowmarketproductImagepriceresult
001DEcarry-light.webp€79valid
002GBcarry-light.webp£69valid
003NOcarry-light.webpkr 899valid
004FRmissing€75invalid
005NLcarry-light.webp€82valid
006DKcarry-light.webpkr 610valid
RUNNING BATCHAutumn launch · v12
94%
500Total rows472Completed26Rendering2Failed
#0468completedoutput-0468.webp
#0469completedoutput-0469.webp
#0470renderingFrame 84 / 180
#0471failedMedia could not be read
Completed files stay complete.
VISIBLE WHILE IT RUNS

One batch.
Independent outcomes.

A batch is not one opaque job. Every row moves through queued, rendering, completed or failed states independently, so partial success remains useful.

Correct only failed rowsApply row-specific values without rerendering completed work.
Keep the source pinnedCorrections continue against the same template version.
Cancel deliberatelyStop remaining work while preserving completed outputs.
BOUNDED BATCHES · CONTINUOUS PRODUCTION

From a short list
to thousands of outputs.

Batch size follows the active plan. Large feeds can be divided into traceable runs with stable caller keys, predictable status and no duplicate submissions.

1data source500tracked rows
Need more?Start the next bounded batch with its own idempotency key.
COLLECT THE RUN

Take the files.
Keep the operational record.

Studio packages successful artifacts with human-readable and machine-readable reports. API workflows can follow batch status and hand completed results to the next system.

BATCH COMPLETE498 outputs2 rows need correction
Artifacts ZIP

Completed files in one Studio download.

CSV report

Every row with status, render ID and error.

JSON manifest

Structured results for downstream processing.

CONTINUEStore, publish or reviewOperation IDs keep retries harmless.
THE DEVELOPER PATH

Submit the rows.
Keep the request responsive.

The API returns an asynchronous batch immediately. Poll its operation ID for row-level results or cancel work that should no longer continue.

  • JSON items or CSV in one request
  • Batch and row idempotency keys
  • Version-pinned execution
  • Row-level status and artifact references
Open the V2 API reference
Start a bulk renderPOST · 202
curl -X POST "$JSONCUT_API/api/v2/templates/$TEMPLATE_ID/bulk-renders" \
  -H "X-API-Key: $JSONCUT_API_KEY" \
  -H "Idempotency-Key: autumn-launch-2026" \
  -H "Content-Type: application/json" \
  -d '{
    "version": 12,
    "defaults": { "campaign": "Autumn 2026" },
    "items": [
      { "idempotencyKey": "sku-1042-de", "values": { "market": "DE", "price": "€79" } },
      { "idempotencyKey": "sku-1042-en", "values": { "market": "GB", "price": "£69" } }
    ],
    "output": { "kind": "image", "format": "webp" }
  }'
curl -X POST "$JSONCUT_API/api/v2/templates/$TEMPLATE_ID/bulk-renders" \ -H "X-API-Key: $JSONCUT_API_KEY" \ -H "Idempotency-Key: autumn-launch-2026" \ -H "Content-Type: application/json" \ -d '{ "version": 12, "defaults": { "campaign": "Autumn 2026" }, "items": [ { "idempotencyKey": "sku-1042-de", "values": { "market": "DE", "price": "€79" } }, { "idempotencyKey": "sku-1042-en", "values": { "market": "GB", "price": "£69" } } ], "output": { "kind": "image", "format": "webp" } }'
Asynchronous responseJSON
{
  "success": true,
  "data": {
    "id": "bulk-41f9...",
    "templateVersion": 12,
    "status": "queued",
    "totalItems": 2,
    "validItems": 2,
    "completedItems": 0,
    "failedItems": 0
  }
}
{ "success": true, "data": { "id": "bulk-41f9...", "templateVersion": 12, "status": "queued", "totalItems": 2, "validItems": 2, "completedItems": 0, "failedItems": 0 } }
UPLOAD · VALIDATE · PRODUCE

Bring the next dataset.
Keep every result visible.

Start with a published image or video template, then move from one reviewed result to a controlled production run.

Open JsonCut Studio