{
 "title": "What goes wrong in AI-generated product photos: a measured breakdown",
 "measured_on": "2026-10-12",
 "generated_between": [
  "2026-09-24",
  "2026-10-12"
 ],
 "outputs_total": 311,
 "judged": 303,
 "not_judged_by_model": 8,
 "judge_could_not_run": 0,
 "flagged": 63,
 "flagged_pct": 20.8,
 "passed": 240,
 "passed_pct": 79.2,
 "problems": [
  {
   "name": "invented detail",
   "what": "a print, logo, label, pocket or trim that the product photo does not show",
   "outputs": 29,
   "pct_of_judged": 9.6,
   "pct_of_flagged": 46.0
  },
  {
   "name": "unnatural look",
   "what": "plastic or glassy surface, a visible mannequin, an obvious edit seam",
   "outputs": 17,
   "pct_of_judged": 5.6,
   "pct_of_flagged": 27.0
  },
  {
   "name": "different product",
   "what": "the generated product is not the one in the photo",
   "outputs": 12,
   "pct_of_judged": 4.0,
   "pct_of_flagged": 19.0
  },
  {
   "name": "collar or neckline changed",
   "what": "a shirt collar became a crew neck, a hood appeared, and similar",
   "outputs": 11,
   "pct_of_judged": 3.6,
   "pct_of_flagged": 17.5
  },
  {
   "name": "inside label showing",
   "what": "the neck label is drawn on the outside",
   "outputs": 10,
   "pct_of_judged": 3.3,
   "pct_of_flagged": 15.9
  },
  {
   "name": "anatomy",
   "what": "extra, missing or fused body parts, or an object that floats",
   "outputs": 8,
   "pct_of_judged": 2.6,
   "pct_of_flagged": 12.7
  },
  {
   "name": "wrong number of people",
   "what": "two people where one was asked for, or nobody where a model was expected",
   "outputs": 7,
   "pct_of_judged": 2.3,
   "pct_of_flagged": 11.1
  },
  {
   "name": "wrong text or logo",
   "what": "letters or a logo on the product changed",
   "outputs": 5,
   "pct_of_judged": 1.7,
   "pct_of_flagged": 7.9
  },
  {
   "name": "product cut off or badly framed",
   "what": "the subject is cut by the image edge, off-centre or too small",
   "outputs": 2,
   "pct_of_judged": 0.7,
   "pct_of_flagged": 3.2
  },
  {
   "name": "collage instead of one photo",
   "what": "several panels or an inset instead of a single photograph",
   "outputs": 2,
   "pct_of_judged": 0.7,
   "pct_of_flagged": 3.2
  },
  {
   "name": "missing print",
   "what": "the front print of the garment is gone",
   "outputs": 1,
   "pct_of_judged": 0.3,
   "pct_of_flagged": 1.6
  },
  {
   "name": "watermark or overlay",
   "what": "a watermark, web address or caption on the image",
   "outputs": 1,
   "pct_of_judged": 0.3,
   "pct_of_flagged": 1.6
  }
 ],
 "tools": {
  "apparel_tryon": {
   "name": "Virtual try-on",
   "outputs": 115,
   "judged": 115,
   "flagged": 26,
   "flagged_pct": 22.6,
   "top_problems": [
    [
     "invented detail",
     18
    ],
    [
     "inside label showing",
     10
    ],
    [
     "different product",
     7
    ]
   ],
   "median_seconds": 34.9
  },
  "canvas": {
   "name": "Canvas (scene from a description)",
   "outputs": 38,
   "judged": 38,
   "flagged": 8,
   "flagged_pct": 21.1,
   "top_problems": [
    [
     "invented detail",
     4
    ],
    [
     "collar or neckline changed",
     3
    ],
    [
     "different product",
     1
    ]
   ],
   "median_seconds": 21.2
  },
  "model_maker": {
   "name": "Model maker",
   "outputs": 33,
   "judged": 33,
   "flagged": 2,
   "flagged_pct": 6.1,
   "top_problems": [
    [
     "wrong number of people",
     2
    ],
    [
     "collage instead of one photo",
     2
    ],
    [
     "watermark or overlay",
     1
    ]
   ],
   "median_seconds": 17.1
  },
  "product_studio": {
   "name": "Product studio",
   "outputs": 30,
   "judged": 30,
   "flagged": 6,
   "flagged_pct": 20.0,
   "top_problems": [
    [
     "anatomy",
     3
    ],
    [
     "invented detail",
     3
    ],
    [
     "different product",
     1
    ]
   ],
   "median_seconds": 24.9
  },
  "ghost_mannequin": {
   "name": "Ghost mannequin",
   "outputs": 18,
   "judged": 18,
   "flagged": 9,
   "flagged_pct": null,
   "top_problems": [
    [
     "unnatural look",
     7
    ],
    [
     "product cut off or badly framed",
     2
    ],
    [
     "different product",
     2
    ]
   ],
   "median_seconds": 21.4,
   "small_sample": true
  },
  "colorway": {
   "name": "Colorway",
   "outputs": 17,
   "judged": 17,
   "flagged": 2,
   "flagged_pct": null,
   "top_problems": [
    [
     "invented detail",
     2
    ],
    [
     "different product",
     1
    ]
   ],
   "median_seconds": 20.5,
   "small_sample": true
  },
  "pose_change": {
   "name": "Pose change",
   "outputs": 15,
   "judged": 15,
   "flagged": 1,
   "flagged_pct": null,
   "top_problems": [
    [
     "invented detail",
     1
    ]
   ],
   "median_seconds": 19.5,
   "small_sample": true
  },
  "seamless_pattern": {
   "name": "Seamless pattern",
   "outputs": 13,
   "judged": 13,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "median_seconds": 23.2,
   "small_sample": true
  },
  "reframe": {
   "name": "Reframe",
   "outputs": 8,
   "judged": 8,
   "flagged": 5,
   "flagged_pct": null,
   "top_problems": [
    [
     "unnatural look",
     4
    ],
    [
     "anatomy",
     1
    ]
   ],
   "median_seconds": 21.5,
   "small_sample": true
  },
  "retouch": {
   "name": "Retouch",
   "outputs": 8,
   "judged": 8,
   "flagged": 4,
   "flagged_pct": null,
   "top_problems": [
    [
     "wrong text or logo",
     3
    ],
    [
     "unnatural look",
     2
    ]
   ],
   "median_seconds": 46.0,
   "small_sample": true
  },
  "background_remove": {
   "name": "Background remove",
   "outputs": 6,
   "judged": 0,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "median_seconds": 7.9,
   "small_sample": true
  },
  "detail_shot": {
   "name": "Detail shot",
   "outputs": 5,
   "judged": 5,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "median_seconds": 20.8,
   "small_sample": true
  },
  "fabric_studio": {
   "name": "Fabric studio",
   "outputs": 3,
   "judged": 3,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "median_seconds": 30.9,
   "small_sample": true
  },
  "upscale": {
   "name": "Upscale",
   "outputs": 2,
   "judged": 0,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "median_seconds": 31.8,
   "small_sample": true
  }
 },
 "tryon_by_product_type": {
  "bag": {
   "judged": 4,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "small_sample": true
  },
  "bottom": {
   "judged": 11,
   "flagged": 8,
   "flagged_pct": null,
   "top_problems": [
    [
     "invented detail",
     8
    ],
    [
     "inside label showing",
     6
    ],
    [
     "wrong number of people",
     1
    ]
   ],
   "small_sample": true
  },
  "eyewear": {
   "judged": 4,
   "flagged": 0,
   "flagged_pct": null,
   "top_problems": [],
   "small_sample": true
  },
  "footwear": {
   "judged": 7,
   "flagged": 1,
   "flagged_pct": null,
   "top_problems": [
    [
     "anatomy",
     1
    ]
   ],
   "small_sample": true
  },
  "jewelry": {
   "judged": 20,
   "flagged": 3,
   "flagged_pct": null,
   "top_problems": [
    [
     "anatomy",
     2
    ],
    [
     "wrong number of people",
     1
    ],
    [
     "different product",
     1
    ]
   ],
   "small_sample": true
  },
  "one_piece": {
   "judged": 11,
   "flagged": 2,
   "flagged_pct": null,
   "top_problems": [
    [
     "wrong number of people",
     1
    ],
    [
     "unnatural look",
     1
    ],
    [
     "collar or neckline changed",
     1
    ]
   ],
   "small_sample": true
  },
  "top": {
   "judged": 58,
   "flagged": 12,
   "flagged_pct": 20.7,
   "top_problems": [
    [
     "invented detail",
     10
    ],
    [
     "different product",
     6
    ],
    [
     "collar or neckline changed",
     6
    ]
   ]
  }
 },
 "judge_answers": {
  "product_match": {
   "match": 238,
   "minor": 52,
   "wrong": 13
  },
  "text_fidelity": {
   "none": 213,
   "minor": 32,
   "match": 53,
   "wrong": 5
  },
  "neckline": {
   "match": 142,
   "none": 149,
   "changed": 12
  },
  "framing": {
   "ok": 300,
   "bad": 3
  },
  "added_decoration": {
   "no": 272,
   "yes": 31
  },
  "anatomy_or_physics": {
   "no": 295,
   "yes": 8
  },
  "unnatural_look": {
   "no": 283,
   "yes": 20
  },
  "collage": {
   "no": 301,
   "yes": 2
  },
  "watermark_or_overlay": {
   "no": 302,
   "yes": 1
  }
 },
 "generation_seconds_median": 27.4,
 "generation_seconds_p90": 41.8,
 "distinct_product_photos": 212,
 "small_sample_below": 30,
 "validation": {
  "flagged_sample_checked_by_eye": {
   "checked": 18,
   "confirmed": 16,
   "unclear": 2,
   "wrong": 0,
   "how": "18 flagged outputs, up to three per problem type, compared with the product photo by eye"
  },
  "framing_blind_spot": {
   "outputs_cut_off_by_eye": 9,
   "of_scene_images_checked": 19,
   "flagged_by_judge": 0,
   "how": "19 scene images from 11 October were checked by eye; 9 cut the product at the image edge and the judge flagged none of them"
  }
 },
 "excluded": {
  "ad_creative": {
   "outputs": 5,
   "why": "judge runs before the headline is typeset in production; the bench file is the typeset result"
  }
 },
 "caveats": [
  "The images are Herofab's own test cases, generated while the product was being built. They include deliberately hard inputs and earlier prompt versions; they are not a sample of customer work and not an industry average.",
  "A flag is the automated judge's reading, not a human one. The judge misses some defects and sometimes flags a correct image.",
  "Flagged outputs are not delivered: the job is generated once more, and if the second output is flagged as well the customer is not charged."
 ],
 "derived": {
  "product_match": {
   "match": 238,
   "match_pct": 78.5,
   "minor": 52,
   "minor_pct": 17.2,
   "wrong": 13,
   "wrong_pct": 4.3
  },
  "text_on_product": {
   "images_with_readable_text": 90,
   "match": 53,
   "match_pct": 58.9,
   "minor": 32,
   "minor_pct": 35.6,
   "wrong": 5,
   "wrong_pct": 5.6
  },
  "collar": {
   "images_with_comparable_collar": 154,
   "changed": 12,
   "changed_pct": 7.8
  },
  "tools_measured": 14
 }
}
