Runs and Creatives
Monitor generation runs in real time, then browse, download, and manage the generated images in Creatives.
What it is
Runs (/dashboard/creative/runs) is the real-time monitor for every generation run. Each time you trigger a workflow, the platform creates a GenerationJob record that tracks how many items have been rendered, how many failed or were skipped, and the overall status.
Creatives (/dashboard/creative/creatives) is the image gallery that stores every successfully generated image across all your workflows. Images persist after a run completes and can be browsed, filtered, downloaded, or used downstream without re-running the workflow.
When you'd use it
- You triggered a workflow against a large data source and want to watch progress without refreshing the page.
- A run completed but some items show as failed — you want to identify which data source items caused errors.
- You want to download a batch of generated images as a ZIP.
- You need to find the generated image for a specific data source item or template.
- You are debugging a render issue and want to see the per-item error log.
Quick start (user)
Monitor an active run
- Go to Dashboard → Runs (
/dashboard/creative/runs). - Active runs appear at the top. The progress bar shows
(completed + failed + skipped) / totalItems. - Expand a run to see per-item logs and error details.
- To cancel an active run, click Cancel — the system sends a cancellation signal to the render worker and marks the run
CANCELLED.
Download images from Creatives
- Go to Dashboard → Creatives (
/dashboard/creative/creatives). - Use the filter bar to scope by workflow, template, artboard, or date range.
- Select the images you want (checkbox on each card).
- Click Download — the platform streams a ZIP of up to 500 images at a time.
Regenerate images via workflow
Individual image regeneration is triggered by re-running the workflow. Open the workflow, click Run, and choose whether to re-render all items or only changed ones. The Creatives gallery upserts each GeneratedImage row in place, preserving the same row ID, so existing integrations that reference image IDs are not broken.
Run status reference
| Status | Meaning |
|---|---|
PENDING |
Run is queued and waiting for a worker slot. Displays as In Queue in the UI. |
PROCESSING |
A worker has claimed the run and rendering is in progress. |
COMPLETED |
All items rendered successfully. |
PARTIAL |
Rendering finished but at least one item failed. |
FAILED |
All items failed, or the run was abandoned before any completed. |
CANCELLED |
A user cancelled the run mid-execution. Some images may have been written before cancellation. |
Progress formula
progress = (completed + failed + skipped) / totalItems
skipped items are data source entries where the output already matches the current template and variables (skip-check). They count toward completion so the progress bar does not stall.
completed and failed counters are monotonically increasing — the render worker may send multiple progress callbacks, and the platform always takes the highest value seen so far to prevent regressions.
Stale and orphaned runs
| Condition | Threshold | Outcome |
|---|---|---|
PROCESSING with no activity |
15 minutes | Marked stale in the UI (warning indicator) |
PENDING with no pickup |
60 minutes | Marked orphaned and automatically transitioned to FAILED |
PROCESSING running total |
4 hours | Marked orphaned and automatically transitioned to FAILED |
Creatives — Settings reference
GET /api/creative/library
Query parameters:
| Parameter | Type | Description |
|---|---|---|
automationId |
string | Filter by workflow. |
templateId |
string | Filter by template. |
artboardId |
string | Filter by artboard. Use __base__ for single-size images. |
jobId |
string | Filter by the run that produced the images. |
search |
string | Search by data source item externalId. |
startDate / endDate |
ISO 8601 | Date range filter on generation time. |
page |
integer | Page number (default: 1). |
limit |
integer | Items per page (default: 24, max: 100). |
POST /api/creative/library/download
Request body:
| Field | Type | Description |
|---|---|---|
imageIds |
string[] |
IDs of GeneratedImage rows to include. Maximum 500. |
Returns a application/zip stream.
ASCII diagram
Workflow run triggered
│
▼
GenerationJob created (status: PENDING)
│ (run queue polls every 10s, atomic claim)
▼
status: PROCESSING
│
├── per-item render on Thor (Playwright + Sharp)
│ ├── skip-check? → skipped++
│ ├── render ok → completed++, upsert GeneratedImage
│ └── render err → failed++, log error
│
▼
status: COMPLETED / PARTIAL / FAILED
│
▼
GeneratedImage rows in Creatives
└── url, format, feedItem, templateId, artboardId
Developer / API
List runs
GET /api/creative/runs
Returns paginated GenerationJob records for the current workspace.
Stream run logs
GET /api/creative/runs/{jobId}/stream
Server-sent events stream of log entries for an active run. Useful for integrations that need real-time progress without polling.
Cancel a run
POST /api/creative/runs/{jobId}/cancel
Cancels a PENDING or PROCESSING run. Returns 400 if the run is already in a terminal state.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Run stuck on In Queue for more than a few minutes | The render worker may be under heavy load, or no worker is available. | Check the worker status. Runs in PENDING for more than 60 minutes are automatically marked FAILED. |
| Progress bar stops advancing | A large batch of items may have all been skipped (already up to date). Check the skipped count in the run detail panel. |
Trigger the workflow with Force re-render to bypass the skip-check. |
Run shows PARTIAL |
Some data source items failed to render. | Expand the run, review per-item error logs, fix the underlying cause (bad image URL, missing variable, unsupported font weight), and re-run the workflow. |
Run shows FAILED immediately |
The task-build phase failed before any renders started. | Check the run error message. Common causes: the data source has no active items, the template is archived, or the workspace has no credits. |
| Credits exhausted mid-run | The workspace ran out of credits while the run was in progress. | The run stops accepting new render tasks. Top up credits and re-run the workflow for the remaining items. |
Creatives shows fewer images than completed count |
For cancelled runs, the completed counter reflects renders that finished on the worker but whose result chunk arrived after cancellation. The row was never written. This is expected. |
Re-run the workflow to fill in the missing rows. |
| Download ZIP is empty or truncated | The ZIP endpoint enforces a 500-image maximum per request. | Paginate your selection and download in batches of ≤ 500. |
Related
- Workflows — configure the workflow that creates generation runs.
- Templates — the canvas each run renders against.
- API keys and generate API — generate individual images without running a workflow.
- Background removal — remove image backgrounds before they reach the render step.