# Vision Model Bake-off: seven AI models read the same four portraits

> Seven AI vision models described the same four portraits at 20 settings. Claude Opus 5.5 at High won; more reasoning made no model read better, only slower.

Source: https://nodaro.ai/docs/research/vision-model-bakeoff

Before we chose the AI model behind Nodaro's [Describe to Picker](https://nodaro.ai/docs/nodes/image/describe-to-picker) node, we had seven vision models describe the same four portraits at their default and at higher reasoning efforts: 20 settings, 80 reads. On detail and agreement, the models were close. On speed, they were more than 20 times apart. **Claude Opus 5.5 at High** gave one of the most detailed readings in about 9 seconds and never failed, so it is now the default. **More reasoning made no model read better**, only slower. **The GPT models never named an ethnicity.**

- Models: 7
- Settings: 20
- Portraits: 4
- Reads: 80
- Pickers: 5
- Failed reads: 3

## What we found
**Claude Opus 5.5 at High is the best all-round setting.** 
It named 33.5 traits per portrait, agreed with the majority on 85% of them and answered in 9.1 seconds. All four of its reads succeeded.
  

  
**More reasoning made no model read better.** 
Claude Opus 5.5 at Max took 17 times as long as at High and named 0.3 more traits. The highest GPT settings took 85 to 109 seconds and failed two reads.
  

  
**The same job took 7 seconds or more than 2.5 minutes.** 
Claude Opus 5.5 was the fastest, with a median of 7.2 seconds at its default. Claude Opus 5.5 at Max was the slowest, at 154.5 seconds.
  

  
**Gemini 3.8 Flash is the best value.** 
At 11 credits a read, it agreed with the majority on 85% to 92% of its answers. It named fewer traits than the Claude models.
  

  
**The GPT models never named an ethnicity.** 
GPT-6 Astra and GPT-6.1 Sol left the field empty in all 21 of their reads. The other five models filled it on almost every portrait.
  

  
**The same settings give different answers.** 
Three runs of Claude Fable 5 on the same settings varied by 3.5 traits per portrait and 6 points of agreement. Read smaller gaps as ties.
  

## The scoreboard
Each setting read the same four portraits once. **Traits per portrait** is how many fields the setting filled, on average. **Agreement** is the share of those answers that matched the answer most settings gave for the same field and portrait.

| Model | Reasoning effort | Traits per portrait | Agreement | Median time | Reads | Credits per read |
| --- | --- | --- | --- | --- | --- | --- |
| Claude Opus 5.5 | Default | 32.0 | 85% | 7.2 s | 4 of 4 | 28 |
| Claude Opus 5.5 | High | 33.5 | 85% | 9.1 s | 4 of 4 | 28 |
| Claude Opus 5.5 | Max | 33.8 | 82% | 154.5 s | 4 of 4 | 28 |
| Claude Fable 5 | Default | 33.0 | 87% | 11.0 s | 4 of 4 | 28 |
| Claude Fable 5 | High, see note | 35.3 | 85% | 20.5 s | 4 of 4 | 28 |
| Claude Fable 5 | Max, see note | 31.8 | 81% | 69.7 s | 4 of 4 | 28 |
| Gemini 3.1 Pro | Default | 32.8 | 80% | 28.2 s | 4 of 4 | 11 |
| Gemini 3.1 Pro | Default, Advanced mode | 31.0 | 80% | 27.4 s | 4 of 4 | 28 |
| Gemini 3.8 Flash | Default | 30.0 | 91% | 17.2 s | 4 of 4 | 11 |
| Gemini 3.8 Flash | High | 31.3 | 85% | 22.0 s | 4 of 4 | 11 |
| Gemini 3.8 Flash | Default, Advanced mode | 31.8 | 85% | 13.7 s | 4 of 4 | 11 |
| Gemini 3.8 Flash | High, Advanced mode | 28.0 | 92% | 19.8 s | 4 of 4 | 11 |
| Kimi K3 | Default | 31.8 | 83% | 29.9 s | 4 of 4 | 11 |
| Kimi K3 | High | 32.5 | 80% | 20.9 s | 4 of 4 | 11 |
| GPT-6.1 Sol | Default | 32.0 | 85% | 21.7 s | 3 of 4 | 11 |
| GPT-6.1 Sol | High | 30.3 | 83% | 21.6 s | 4 of 4 | 11 |
| GPT-6.1 Sol | Max | 30.3 | 83% | 84.6 s | 3 of 4 | 11 |
| GPT-6 Astra | Default | 30.0 | 83% | 42.3 s | 4 of 4 | 11 |
| GPT-6 Astra | High | 30.3 | 83% | 43.8 s | 4 of 4 | 11 |
| GPT-6 Astra | Very high | 30.0 | 83% | 108.8 s | 3 of 4 | 11 |

**Note on Claude Fable 5:** in this test, Fable 5 wrote no reasoning at any effort. Its High and Max rows are repeat runs of its default, so they show how much one setting varies from run to run.

## Does more reasoning help a model read a photo?
**No.** No model named measurably more traits at a higher reasoning effort, and no model agreed more. The cost was time, and on the GPT models, failed reads.

| Model | Lowest effort | Highest effort | Change in traits | Change in time |
| --- | --- | --- | --- | --- |
| Claude Opus 5.5 | Default: 32.0 traits, 7.2 s | Max: 33.8 traits, 154.5 s | +1.8 | 21 times as long |
| GPT-6 Astra | Default: 30.0 traits, 42.3 s | Very high: 30.0 traits, 108.8 s | 0 | 2.6 times as long, 1 failed read |
| GPT-6.1 Sol | Default: 32.0 traits, 21.7 s | Max: 30.3 traits, 84.6 s | −1.7 | 3.9 times as long, 1 failed read |
| Gemini 3.8 Flash | Default: 30.0 traits, 17.2 s | High: 31.3 traits, 22.0 s | +1.3 | 1.3 times as long |
| Kimi K3 | Default: 31.8 traits, 29.9 s | High: 32.5 traits, 20.9 s | +0.7 | Faster |

Every change in traits is smaller than the 3.5 traits that separated three identical runs of Claude Fable 5. Reading a photo into fixed catalog choices is mostly seeing, not thinking. A model either sees the jawline or it does not, and more reasoning does not change what it sees.

High is the exception worth keeping on Claude Opus 5.5. It cost 2 seconds more than the default and gave the most traits of any setting that answered in under 20 seconds. Max added 145 seconds for 0.3 more traits.

## Where the models agree and where they split
**The models agree on what they can see and split on judgment.** The table shows, for each field, the share of answers that matched the most common answer for the same portrait.

| Field | Picker | Agreement | What happened |
| --- | --- | --- | --- |
| Eye spacing | Person | 100% | Every setting that answered gave the same answer, on all four portraits |
| Fabric | Styling | 100% | Every setting that answered gave the same answer, on all four portraits |
| Eye color | Person | 100% | Every named color matched, but a quarter of the answers left the field empty |
| Eye shape | Person | 97% | Every setting that answered agreed on three portraits |
| Skin tone | Person | 92% | Every setting that answered agreed on three portraits |
| Age | Person | 64% | Mostly precision: "20s" against "Early 20s" |
| Skin texture | Person | 61% | Three different answers per portrait |
| Type | Person | 58% | The same woman was a "Woman", a "Girl Next Door" or a "Beautiful Woman" |
| Hair state | Styling | 51% | Four different answers on each of the two portraits it applied to |

**Type** is a judgment, not an observation, so the models split on it. One model sometimes gave a different type on a second run of the same photo.

**Age** split two ways. On the other three portraits, the models mostly agreed on the decade and differed on how precise to be. On the bearded man, the split was real: the Claude models and Gemini 3.8 Flash said 30s, and GPT, Gemini 3.1 Pro and Kimi K3 said 40s.

**Ethnicity** split by model, not by photo. GPT-6 Astra and GPT-6.1 Sol left it empty in every read. The other five models filled it, and most of them gave the same main answer on each portrait.

## What we shipped
**Describe to Picker** now uses Claude Opus 5.5 at **High** by default. A default read costs 28 credits, because a premium model with a reasoning effort runs directly with its maker. Every model in the **AI Model** list stays available.

- **For the most detail**, keep the default.
- **For the best value**, choose Gemini 3.8 Flash. A read costs 11 credits and answers in under 25 seconds.
- **Leave Reasoning Effort at High or lower.** Very high and Max made reads slower in this test, without better answers.
- **If ethnicity matters for your character**, do not use a GPT model, or set ethnicity by hand on the [Person](https://nodaro.ai/docs/nodes/creative-controls/person) picker. Its **Fill empty only** mode keeps your choice when the next photo is read.
- **For judgment fields such as Type**, check the result. Models disagree on them, so choose the value you want by hand.

[Describe to Picker](https://nodaro.ai/docs/nodes/image/describe-to-picker) fills the [Person](https://nodaro.ai/docs/nodes/creative-controls/person), [Styling](https://nodaro.ai/docs/nodes/creative-controls/styling), [Framing](https://nodaro.ai/docs/nodes/creative-controls/framing), [Lens](https://nodaro.ai/docs/nodes/creative-controls/lens) and [Camera / Film Stock](https://nodaro.ai/docs/nodes/creative-controls/camera-format) pickers from one photo. [Consistent characters](https://nodaro.ai/docs/guides/consistent-characters) shows how to reuse the result across scenes.

## How we ran it
- Every setting read the same four portraits on Nodaro, on 2026-10-09, through the Describe to Picker node. The prompt, the picker catalogs and the photos were the same for every read.
- Each read filled the five pickers at once: Person, Styling, Framing, Lens and Camera / Film Stock.
- We ran each model at its default and at the higher reasoning efforts it offers. Every Claude read ran directly with its maker, where Claude's reasoning efforts are served. On the two Gemini models, we also ran **Advanced mode**, which runs the model directly with its maker.
- The portraits are four stock photos from Unsplash, two women and two men. They show a laughing woman in a red sweater, a man with a dark quiff, a woman with short natural hair and a bearded man in black and white.
- We do not show the photos or each portrait's full reading. The fields describe real people's bodies and backgrounds, so this page reports only totals across portraits.
- Agreement compares each answer with the answer most settings gave. A tie scores nobody. A model can be right alone and still lose points, so agreement measures stability, not truth.
- GPT-6.1 Sol at its default filled 4 fields that no other setting filled, and Kimi K3 at its default filled 1. Agreement does not count those answers.
- Times are medians, from the start and the end of each run on the platform. Credits are what the platform charged per read on the test date.
- Three reads failed, all on GPT models. GPT-6 Astra at **Very high** ran out of time. GPT-6.1 Sol at **Max** found the model busy, and GPT-6.1 Sol at its default ran out of time once. No Claude, Gemini or Kimi read failed.
- One read per portrait per setting is a hint, not proof. The pattern across settings is the finding. The [Image Model Bake-off](https://nodaro.ai/docs/research/image-model-bakeoff) used the same approach for image generation.

## Frequently asked questions

### Which AI model is best at describing a person in a photo?

In our test, Claude Opus 5.5 at High reasoning effort. It named 33.5 traits per portrait, agreed with the other models on 85% of them, answered in about 9 seconds and never failed. Nodaro's Describe to Picker node now uses it by default.

### Does more reasoning effort help an AI model read a photo?

Not in this test. No model named measurably more traits at a higher effort. Claude Opus 5.5 at Max took 155 seconds instead of 9, and the GPT models at their highest efforts took up to 109 seconds and failed reads.

### Which AI vision model is the best value for describing photos?

Gemini 3.8 Flash. At 11 credits a read, it agreed with the other models on 85% to 92% of its answers, in 14 to 22 seconds. It named fewer traits than the Claude models: 28 to 32 per portrait.

### Why did the GPT models leave ethnicity empty?

GPT-6 Astra and GPT-6.1 Sol left the ethnicity field empty in all 21 of their reads, at every setting. The other five models filled it. If ethnicity matters for your character, choose another model or set it by hand on the Person picker.

### Is agreement the same as accuracy?

No. Agreement is how often a model gave the answer most models gave. Nobody knows the true age or background of a stranger in a stock photo, so agreement shows which readings are stable, not which are true.
