Quality
Read the AI reviewer's verdicts and let the AI retoucher fix what it flags
Two AI agents look after the quality of your results:
- The AI reviewer checks every generated image against your inputs (the product, its details, the identity, the brief) and the set for consistency. It is free and runs on its own when a job completes, and again after a regenerate or a fix.
- The AI retoucher fixes what the AI reviewer flagged: logos and text, small garment details, artifacts. The fixed image becomes the image's latest version, and the AI reviewer checks it again. Each fixed image costs 1 credit, charged only when an image is fixed.
The agents are part of the Pro and Enterprise plans. On other plans the quality fields below are null and the agent options are ignored.
The agents cover Flat-to-Model, Create Packshot, Model Swap, Garment Recolor and Detail Repair. Identity drafts (Create Identity) and Image Playground images are not checked.
Reading the verdicts
GET /jobs/<id>/results carries the verdicts:
| Field | Description |
|---|---|
results[].quality.verdict | pass, check (worth a look), fail (should not ship as is), or unknown (could not be judged) |
results[].quality.findings | What the AI reviewer found on this image (see below) |
results[].quality_pending | true while this image's check is queued or running |
results[].quality_history | The AI reviewer's checks of the image's earlier versions, newest first, with what replaced each one |
results[].ai_fix | Whether the AI retoucher can fix this image now, and which findings it can and cannot handle |
results[].ai_retouch | The state of the AI retoucher's latest run on this image: running, delivered or failed |
quality_summary.verdict | The job's worst verdict, consistency across the set included |
quality_summary.findings | Consistency findings across the set |
quality_summary.flagged / judged | How many images were flagged, out of how many judged |
quality_summary.status | waiting while the job generates, checking, then done (or not_checked if a check failed) |
quality_summary.settled | true when the agents are done: no check and no fix running |
quality_summary.ai_retouch | auto when the job fixes flagged images on its own |
Each finding has a stable id, a code, a severity (fail, warning, or note for information that never counts), a short label, and what (what the reviewer saw on this image), why and fix. Close-up findings also carry the product and its box, as [ymin, xmin, ymax, xmax] on a 0 to 1000 scale.
When an image was replaced (fixed by the AI retoucher, retouched, or regenerated), its earlier checks stay readable in results[].quality_history. Each entry has the earlier version, its quality (same shape as above), the next_version and how it was made (next_by: ai_retouch, retouch or regenerate), and after an AI retouch the ids of the findings it fixed and the ones it worked on but did not fix (not_fixed).
Fixing automatically
Pass "ai_retouch": "auto" when you create a job (Flat-to-Model, Create Packshot, Model Swap, Garment Recolor, or a bulk run of these). On Detail Repair, start the AI retoucher on request instead (below). Once the AI reviewer has checked the outputs, the AI retoucher fixes each flagged image it can handle, once per generated image, without being asked.
{
"ai_retouch": "auto"
}The job itself completes as usual, and its images are usable right away. To know when the agents are done, wait for quality_summary.settled to be true, or for the job_quality notification:
{
"name": "job_quality",
"data": {
"id_task": "3f9c...",
"status": "settled",
"verdict": "pass",
"flagged": 0,
"judged": 6,
"unchecked": 0,
"ai_retouch": "auto"
}
}Then read the final images and verdicts from GET /jobs/<id>/results. A fixed image is the image's latest version; the version before stays in its history. job_quality is sent each time the agents settle, so it can arrive again later, for example after you regenerate an image.
An image the AI retoucher could not fully fix keeps its findings, so it still reads as flagged. Images beyond your credit balance are left as they are.
Fixing on request
POST /jobs/<id>/ai-fix asks the AI retoucher to fix the latest version of the images you name:
{
"images": [
{ "image_index": 0, "group_index": 0 },
{ "image_index": 2, "group_index": 0 }
]
}The response lists the images it started and the ones it refused, with a reason:
| Reason | Meaning |
|---|---|
not_flagged | The AI reviewer found nothing on this image |
nothing_fixable | What it found is not something the AI retoucher handles |
busy | A fix is already running on this image |
already_tried | The last fix on this version fixed nothing; regenerate it instead |
in_review | The image is in a review round; fix it from the review screen |
not_found | No such image in this job |
Check results[].ai_fix.available first to only send images that can be fixed. The request returns 402 when your balance does not cover the images it would start.
Dismissing a finding
If you think a finding is wrong, dismiss it: it stops counting in the image's verdict and the AI retoucher no longer tries to fix it.
POST /jobs/<id>/quality/findings/<finding_id>/dismisswith an optionalreason:not_an_issue(default),acceptableorwrong_spotPOST /jobs/<id>/quality/findings/<finding_id>/restoreto count it again
A dismissal is kept when the same image is checked again.