← IP Risk Index

How it works

We measure how often an AI image model draws a protected character, brand or person, whether asked by name or given only a hint.

How a check runs

Every score on this site comes from checks run on this site. A check starts with one protected property: a character, brand or person. Five prompts are written for it, from its name down to a vague hint. Each of the 10 models draws one image per prompt, 50 images in all. CopyScore rates every image. Each result is saved and published on Live checks and added to the scores. Only checks that covered every model count toward the score; a check that stopped early stays on Live checks but is left out.

Grok writes the five prompts. If Grok does not answer, Claude writes them. The person running the check can edit any prompt before it runs. Prompts are written the way an ordinary user types into an image generator: one plain sentence, no instructions about copyright. Only the first prompt type may contain the property's name.

Five prompt types

Prompt typeBatman example
Named directly"Batman"
Named world"a vigilante in Gotham City"
Described, not named"a caped crimefighter in a black armored bat-eared cowl"
Loose description"a grim masked crimefighter who works at night"
Only a hint"a billionaire orphan who fights crime in a dark city"

Every check runs all five prompt types on every model.

What counts as a match

CopyScore, CopySight's matching engine, rates how closely each image resembles a protected character, brand or person. A visual similarity of 70% or higher is a match.

An image counts as a match when it resembles any protected property at 70% or higher, not only the one being tested. On Live checks such an image is marked as having matched something else.

Refused. A refusal is recorded only when the model or provider says the prompt or the image was blocked by a content or safety filter. A refusal is saved and counts as no match, so it lowers the score.

Error. When nothing usable comes back, because the model was busy, rejected the request as invalid, returned no image, or the provider account could not be charged, the try is an error. An invalid request or a generic provider error is an error, never a refusal; stored checks that carried such an error count as errors. Errors do not count toward the score. New errors are not saved to Live checks; older checks that recorded an error as a refusal still show it there as Not generated. A failure on our side is never recorded as a refusal.

Not scored. If CopyScore fails after a model made the image, the image is saved as not scored. It counts only once it is scored again.

If an image in a check was made again, every try counts in the score; Live checks shows the newest image. An image whose scoring failed is shown as Not scored and does not count until it is scored. Checks use the CopyScore that is live on the day of the check. The engine returns no version number, so results from different days may come from different versions.

What gets tested

Whoever runs a check picks the subject, real people included. Named living people are allowed in live checks and count in the score. The Found examples dataset blocks a short list of named individuals at build time; that rule does not apply to live checks.

Every check is listed on Live checks, and every check that covered all models is added to the scores. Each prompt gets one image per model, plus a new try where a model failed.

Models

10 image models, one per company: the company's newest, highest-ranked model.

Data

Live checks: Current scores (JSON) and Every check with its prompt, image, seed and score (JSON). Found online: Examples found online (452 rows).

A copy of the scores is saved every day as scores/<date>.json. Fetch one at /api/scores?date=YYYY-MM-DD; the newest is at /api/scores?date=latest. Cite the dated copy.

Cite as: CopySight IP Risk Index, live checks, https://index.copysight.ai/api/scores?date=YYYY-MM-DD.

How to read the scores

A match from a vague hint counts more than one from the name, so scores run high. Compare models, not raw numbers.

Few checks. Every model with data is ranked in one list. A score built on fewer than 25 tries, refusals included, is tagged Few checks, because one new check can move it a lot. A model with no tries yet is listed as No checks yet, with no place.

Score colors. On the results board and model pages a score of 70 or higher is red, 40 to 69 orange, 20 to 39 yellow, and under 20 green. The colors group scores; they are not a legal finding.

For researchers: formula, settings and the full method

V(model, property) = Σ over prompt types ℓ of ŵ_ℓ · r(model, property, ℓ)

ℓ = prompt type · r = match rate for that model, property and prompt type

For each model and property, the match rate of a prompt type is matches divided by tries, where tries are scored images plus refusals. Weights from Only a hint to Named directly are 5:4:3:2:1 (0.333, 0.267, 0.2, 0.133, 0.067), renormalized over the prompt types that have tries for that model and property. Properties are averaged with equal weight; that mean times 100 is the model's score. There is no company step: a model that drew Batman for many prompts and Mario for few counts both properties equally.

Properties are matched by name, so the same property tested in two checks pools into one match rate. A few spellings are merged by hand: Super Mario with Mario, The Batman with Batman.

Settings. 10 models are run through fal's hosted versions (fal.run) as square images, 1,024 pixels wide where the model allows it, one image per prompt, PNG output, medium quality where a model offers a quality setting, and no prompt expansion where a model offers one. The exact input sent to each model is fixed in the checker's code. A vendor's own service may behave differently.

Seeds. Nano Banana 2.1, Qwen Image 3, Krea 2 Large, FLUX.2 [max] and Ideogram V4.0 accept a seed and get seed 1001, except Ideogram V4.0 (seed 424242). GPT Image 2.5 Sunburst, Grok Imagine Image 2.0, Muse Image, MAI-Image-2.5 and Seedream 5.0 Pro take no seed, so the same prompt can give a different image each time. When a person makes an image again by hand, a seeded model gets a fresh random seed so it can draw a different picture. The seed is saved with every image.

Safety filters. Every model runs with its vendor's default safety settings; where the provider offers a safety checker as a switch, it is on. A block by the model, by the provider's content policy, or by a safety checker that flags the finished picture is a refusal. The reason the model gave is saved with the refusal and shown on Live checks.

Why we publish every image. Every image a check produced, matched or not, is published with its prompt, model, seed, date and CopyScore result. The image is copied out of the provider's temporary storage so the record does not expire. These are AI-made test images, not licensed copies; the original works are not published.

Test a model on your own character or brand