Batch Rendering
Submit multiple render jobs in a single API call. Available on Studio tier.
Studio tier only. Batch rendering is not available on Free or Creator plans.
Creating a Batch
POST /v1/render/batch
{
"jobs": [
{
"waypoints": [
{ "lat": 29.9792, "lng": 32.5731, "label": "Suez Canal" },
{ "lat": 12.3567, "lng": 43.6028, "label": "Bab el-Mandeb" }
],
"style": "maritime-dark"
},
{
"waypoints": [
{ "lat": 1.2644, "lng": 103.8176, "label": "Singapore" },
{ "lat": 35.4437, "lng": 139.6380, "label": "Tokyo" }
],
"style": "satellite"
},
{
"waypoints": [
{ "lat": 51.5074, "lng": -0.1278, "label": "London" },
{ "lat": 40.7128, "lng": -74.0060, "label": "New York" }
],
"style": "minimal",
"transport": "plane"
}
],
"webhook_url": "https://your-server.com/batch-complete"
} Response
{
"batch_id": "batch_xyz123",
"jobs": [
{ "job_id": "job_1", "status": "queued" },
{ "job_id": "job_2", "status": "queued" },
{ "job_id": "job_3", "status": "queued" }
],
"total": 3,
"status_url": "https://api.georender.io/v1/batch/batch_xyz123"
} Checking Batch Status
GET /v1/batch/batch_xyz123
{
"batch_id": "batch_xyz123",
"status": "processing",
"jobs": [
{ "job_id": "job_1", "status": "complete", "video_url": "..." },
{ "job_id": "job_2", "status": "processing" },
{ "job_id": "job_3", "status": "queued" }
],
"completed": 1,
"processing": 1,
"queued": 1,
"failed": 0,
"total": 3
} Batch Webhook
When all jobs complete, you receive a single webhook:
{
"event": "batch.complete",
"batch_id": "batch_xyz123",
"jobs": [
{
"job_id": "job_1",
"status": "complete",
"video_url": "https://cdn.georender.io/renders/job_1.mp4"
},
{
"job_id": "job_2",
"status": "complete",
"video_url": "https://cdn.georender.io/renders/job_2.mp4"
},
{
"job_id": "job_3",
"status": "failed",
"error": "ROAD_ROUTE_ERROR",
"message": "No road found between waypoints"
}
],
"completed": 2,
"failed": 1,
"total": 3
} Batch Limits
| Tier | Max Jobs per Batch |
|---|---|
| Free | Not available |
| Creator | Not available |
| Studio | 25 |
Shared Options
Apply the same options to all jobs in a batch:
{
"jobs": [
{ "waypoints": [...] },
{ "waypoints": [...] },
{ "waypoints": [...] }
],
"shared_options": {
"style": "maritime-dark",
"duration": 15,
"resolution": "4k",
"hud": { "stats": { "show_distance": true } }
},
"webhook_url": "https://your-server.com/batch-complete"
} Individual job options override shared options:
{
"jobs": [
{ "waypoints": [...] }, // Uses shared style
{ "waypoints": [...], "style": "satellite" }, // Overrides to satellite
{ "waypoints": [...] } // Uses shared style
],
"shared_options": {
"style": "maritime-dark"
}
} SDK Examples
Python
batch = client.render_batch(
jobs=[
{"waypoints": [...], "style": "maritime-dark"},
{"waypoints": [...], "style": "satellite"},
{"waypoints": [...], "style": "geopolitics"},
],
shared_options={
"duration": 15,
"resolution": "4k"
},
webhook_url="https://your-server.com/batch"
)
# Wait for all jobs
results = batch.wait()
for result in results:
if result.status == "complete":
print(result.video.url)
else:
print(f"Failed: {result.error}") Node.js
const batch = await client.renderBatch({
jobs: [
{ waypoints: [...], style: 'maritime-dark' },
{ waypoints: [...], style: 'satellite' },
{ waypoints: [...], style: 'geopolitics' },
],
sharedOptions: {
duration: 15,
resolution: '4k',
},
webhookUrl: 'https://your-server.com/batch',
});
// Wait for all jobs
const results = await batch.wait();
for (const result of results) {
if (result.status === 'complete') {
console.log(result.video.url);
} else {
console.log(`Failed: ${result.error}`);
}
} Use Cases
- Comparison videos: Same route with different styles
- Localization: Same content with different text overlays
- Series production: Multiple routes for a documentary
- A/B testing: Variations for content testing
Tip: Batch rendering counts against your monthly quota.
A batch of 10 jobs uses 10 of your monthly renders.