{
  "name": "LayerPSD text edit benchmark",
  "description": "Each design is sent with the page prompt (\"change the text A to B … change nothing else\") to each model once. A change counts as right when the new wording reads back from the result (at least 90% of its characters, in order) with the same vision read the editable-text PSD uses; \"old text still\" counts results where the old wording is still readable; \"other lines kept\" counts the design's other ground-truth lines that still read right; \"changed outside\" is the share of a 768 px greyscale copy that differs by more than 32 levels outside the edited lines (boxes padded 2%). \"lettering\" is our own judgement of the before/after crops: same (font, weight, colour and effects carried over), close (small drift), off (different lettering).",
  "license": "CC BY 4.0",
  "method": "https://layerpsd.com/edit-text-in-image",
  "date": "2026-10-09",
  "designs": 26,
  "changes": 32,
  "models": {
    "nb2": {
      "name": "Nano Banana 2",
      "modelId": "gemini-3.1-flash-image",
      "credits": 3.1,
      "usd": 0.055,
      "runs": 26,
      "failed": 0,
      "changesAsked": 32,
      "changesRight": 32,
      "runsAllRight": 26,
      "oldTextStill": 0,
      "othersKept": 191,
      "othersTotal": 191,
      "changedOutsideMedian": 0.0003,
      "changedOutsideMean": 0.0031,
      "secondsMedian": 20,
      "secondsMin": 18,
      "secondsMax": 31,
      "lettering": {
        "judged": 26,
        "same": 25,
        "close": 0,
        "off": 1
      }
    },
    "gpt": {
      "name": "GPT Image 2",
      "modelId": "gpt-image-2",
      "credits": 1.7,
      "usd": 0.03,
      "runs": 26,
      "failed": 0,
      "changesAsked": 32,
      "changesRight": 31,
      "runsAllRight": 25,
      "oldTextStill": 0,
      "othersKept": 189,
      "othersTotal": 191,
      "changedOutsideMedian": 0.0037,
      "changedOutsideMean": 0.006,
      "secondsMedian": 28.5,
      "secondsMin": 26,
      "secondsMax": 52,
      "lettering": {
        "judged": 26,
        "same": 23,
        "close": 2,
        "off": 1
      }
    },
    "flash": {
      "name": "Seedream 5.0 Flash",
      "modelId": "seedream-5-0-flash-260915",
      "credits": 1,
      "usd": 0.018,
      "runs": 26,
      "failed": 0,
      "changesAsked": 32,
      "changesRight": 32,
      "runsAllRight": 26,
      "oldTextStill": 0,
      "othersKept": 191,
      "othersTotal": 191,
      "changedOutsideMedian": 0.0025,
      "changedOutsideMean": 0.0055,
      "secondsMedian": 18.5,
      "secondsMin": 16,
      "secondsMax": 25,
      "lettering": {
        "judged": 26,
        "same": 25,
        "close": 0,
        "off": 1
      }
    }
  },
  "categories": [
    {
      "category": "social graphics and banners",
      "designs": 9,
      "changes": 12,
      "nb2": {
        "right": 12,
        "of": 12
      },
      "gpt": {
        "right": 12,
        "of": 12
      },
      "flash": {
        "right": 12,
        "of": 12
      }
    },
    {
      "category": "posters and flyers",
      "designs": 8,
      "changes": 10,
      "nb2": {
        "right": 10,
        "of": 10
      },
      "gpt": {
        "right": 10,
        "of": 10
      },
      "flash": {
        "right": 10,
        "of": 10
      }
    },
    {
      "category": "app and game screens",
      "designs": 5,
      "changes": 5,
      "nb2": {
        "right": 5,
        "of": 5
      },
      "gpt": {
        "right": 5,
        "of": 5
      },
      "flash": {
        "right": 5,
        "of": 5
      }
    },
    {
      "category": "slides, menus and infographics",
      "designs": 4,
      "changes": 5,
      "nb2": {
        "right": 5,
        "of": 5
      },
      "gpt": {
        "right": 4,
        "of": 5
      },
      "flash": {
        "right": 5,
        "of": 5
      }
    }
  ]
}
