← Project overview

Experiments and results

This page reports the full experimental results, including sample counts, scoring rules, and additional analyses.

Profile-steered generation

Coding agents repeatedly grow the question collection with PixelProof

A discovery profile is a set of generation instructions that defines a family of questions by the computation they require, with five text-only examples. The nine profiles cover tracing, topology, correspondence, search, state tracking, measurement, prior conflict, global structure, and declared transforms.

Five coding-agent configurations were run on all nine profiles: 45 campaigns, each with six hours of cumulative agent-session time and a 20-minute session cap. The coding agents are GPT-5.6 Sol at high and maximum reasoning effort (Sol (high), Sol (max)) and GPT-5.6 Luna, all run through Codex; Claude Opus 5 in Claude Code; and DeepSeek V4 Flash (DS-V4-Flash) in OpenCode. An episode-hour counts agent-session time, including time spent waiting for model responses, but not verification. A 200-scene replay is a later agreement check on fresh sampled scenes.

45 / 45campaigns produced accepted worlds
1,331accepted worlds from 1,426 episodes
1,301worlds passed later replay

Overall throughput was 4.95 accepted worlds per episode-hour. Throughput did not drop over the six hours: in the second half it rose for three configurations, held steady for Sol (high) (7.37 vs. 7.33 per hour), and fell only for Opus 5 (4.30 to 3.83). Of the accepted worlds, 19 failed replay and 11 were not replayed.

Scroll horizontally to view all columns →

Generation outcomes: profile-steered generation
Coding agentEpisodesAccepted worldsPassed replayAccepted / hour
Sol (high)3963953927.35
Sol (max)2632552504.75
Luna2302041963.79
Opus 52482192114.06
DS-V4-Flash2892582524.78
Overall1,4261,3311,3014.95

No normalized question text was reused across worlds; exact decoded images were shared by two pairs of worlds. These checks address exact repetition, not semantic novelty.

The inverse program catches errors that other checks miss

For 29% of the worlds, the inverse program failed at least once during generation and the agent fixed its code. In one case, a renderer bug drew five black keys when the scene called for four; the inverse program counted five.

See the piano example
Explore the 3 × 3 steering grid and its questions ↗

Spatially-steered generation

Agents can control which parts of an image a question depends on

Some questions depend on a small object; others require a long path or several separated regions. This experiment requests one of nine size–shape combinations: focal, regional, or distributed extent, combined with compact, pathlike, or multipart shape.

The measured spatial pattern is given by the regions whose masking changes the inverse answer or causes an error. It measures the program’s sensitivity to masking, not human attention. The measured pattern does not determine acceptance.

835 / 874replay-verified worlds with complete measurements matched the request
7.09 vs. 5.20spatial patterns represented per campaign, with and without steering
3.35 / houraccepted worlds in steered campaigns

One of 875 replay-verified worlds had an incomplete pattern measurement. In random samples of ten worlds per campaign, steered campaigns covered 6.38 of the nine patterns on average, compared with 4.26 for unsteered campaigns with the same coding agent and profile (35 matched campaign pairs). The two sets of campaigns were run separately, so this comparison is descriptive.

Generation counts and the broader request-matching population

Scroll horizontally to view all columns →

Generation outcomes: spatially-steered generation
Coding agentEpisodesAccepted worldsPassed replayAccepted / hour
Sol (high)3553483416.47
Sol (max)2542352314.36
Luna1991401292.60
Opus 52031551492.88
DS-V4-Flash16825250.46
Overall1,1799038753.35

Across all 1,179 episodes, 981 returned a measured pattern and 918 matched the request. This broader population can include rejected submissions and differs from the replay-verified population above. Steered campaigns produced 903 accepted worlds; 875 passed replay.

Model evaluation

Generated questions challenge open models more than frontier models

We test six vision–language models (VLMs), which answer questions about images; we call them VLM evaluators. Three are frontier models (Sol (high), Opus 5, and Gemini 3.7 Flash) and three are open-weight models (Gemma 4 12B, Gemma 4 31B, and Qwen 3.8 27B).

Each VLM evaluator answers five fixed instances per world. The evaluation includes 1,298 profile-steered worlds (6,490 instances) and 874 spatially-steered worlds (4,370 instances). Accuracy in these tables counts scored responses only; missing, refused, and unparseable responses are left out.

Scroll horizontally to view all columns →

Evaluator accuracy (%): profile-steered generation
Coding agentWorldsSol (high)Opus 5Gemini 3.7 FlashGemma 4 12BGemma 4 31BQwen 3.8 27B
Sol (high)39296.493.295.855.660.153.7
Sol (max)25096.793.897.048.353.248.7
Luna19695.394.595.965.468.362.8
Opus 521196.092.894.443.645.340.4
DS-V4-Flash24995.994.796.372.478.071.6
Overall1,29896.193.795.956.961.055.4
Spatially-steered evaluation by coding agent

Scroll horizontally to view all columns →

Evaluator accuracy (%): spatially-steered generation
Coding agentWorldsSol (high)Opus 5Gemini 3.7 FlashGemma 4 12BGemma 4 31BQwen 3.8 27B
Sol (high)34194.185.694.351.154.854.5
Sol (max)23192.987.994.250.853.349.8
Luna12993.086.791.256.060.058.1
Opus 514994.084.792.631.535.234.4
DS-V4-Flash2495.896.798.377.580.080.8
Overall87493.786.593.649.152.551.1

Declared-transform questions were the most difficult profile for each frontier evaluator. The collections differ in composition; the score differences do not establish that steering causes greater difficulty.

Model-feedback-steered generation

PixelProof can incorporate model feedback to generate harder questions

A world is hard for frontier models if at least two of the three frontier models get two or more of its five instances wrong, with all 15 responses present. Of 1,547 worlds with complete frontier evaluations from the earlier experiments, 70 met this criterion.

Two disjoint sets of ten such worlds supplied example implementations and evaluator feedback. Each coding-agent configuration ran on both sets for six hours of cumulative agent-session time per campaign. Later episodes received errors on new verified worlds. Verification stayed independent of model predictions. Open-weight models provided no feedback.

266 → 264worlds passed final checks → later replay
21 / 252worlds with complete frontier evaluations were hard for frontier models (8.3%)
5worlds challenged all three frontier evaluators

The other 16 worlds hard for frontier models challenged exactly two evaluators. All 21 passed replay. This demonstrates generation under model feedback; without a matched no-feedback control, it does not isolate the effect of feedback itself.

Scroll horizontally to view all columns →

Model-feedback-steered generation: generation outcomes
Coding agentPassed final checksComplete frontier evaluationsPassed replayHard for frontier modelsHard (%)
Sol (high)877987810.1
Sol (max)63616311.6
Luna46454648.9
Opus 5454444818.2
DS-V4-Flash25232400.0
Overall266252264218.3
Frontier and post-run open-weight accuracy

Scroll horizontally to view all columns →

Model-feedback-steered generation: accuracy (%) on worlds with complete frontier evaluations
Coding agentSol (high)Opus 5Gemini 3.7 FlashGemma 4 12BGemma 4 31BQwen 3.8 27B
Sol (high)96.588.491.628.128.130.6
Sol (max)97.493.497.029.226.223.0
Luna97.893.890.742.240.437.3
Opus 590.987.388.620.925.521.4
DS-V4-Flash100.098.3100.051.342.646.1
Overall96.391.393.031.730.729.8

The frontier models supply in-loop feedback. Open-weight scores are measured after generation on 1,260 instances from the 252 worlds with complete frontier evaluations. Unparseable open-weight responses count as incorrect.

Human review

Most generated questions are clear and answerable to human reviewers

Two reviewers independently reviewed the same 800 instances from all three generation experiments. They answered the questions and recorded concerns about instructions, images, or recorded answers.

Scroll horizontally to view all columns →

Human-review outcomes
ExperimentInstancesFlagged by neitherFlagged by oneFlagged by both
Profile-steered400370255
Spatially-steered200183134
Model-feedback-steered200180164
Total8007335413

A reviewer flags an instance when they judge it invalid because of its instructions, image, or recorded answer. Neither reviewer flagged 733 instances (91.6%), one flagged 54, and both flagged 13.

Review agreement

The two reviewers agree on whether an instance is valid for 746 of 800 instances (93.25%). This is agreement on validity, not on the answer.

Training on generated questions

Fine-tuning VLMs on PixelProof images improves accuracy on held-out benchmarks

Supervised fine-tuning (SFT) trains a model on image–question pairs and their short answer labels. Low-rank adaptation (LoRA) updates small adapter matrices while keeping the base model weights fixed.

Training source748 profile-steered worlds

27,762 instances in the pool
555 reserved for validation

AdaptationShort answer labels

One epoch · LoRA rank 16
No chain-of-thought targets

Separate evaluation252 model-feedback-steered worlds

1,260 instances
Base and SFT checkpoints compared

The main training set contains only profile-steered worlds. It does not include the model-feedback-steered evaluation worlds or spatially-steered worlds. The training and evaluation sets contain different worlds, but may still contain similar questions.

A percentage point (pp) is the difference between two percentages: 30.7% → 36.0% is +5.3 pp. The table compares each unchanged base checkpoint with the mean and standard deviation across four independently fine-tuned checkpoints.

+ Increase in accuracy− Decrease in accuracy

Scroll horizontally to view all columns →

Transfer to 252 model-feedback-steered worlds · four fine-tuned checkpoints
ModelBase (%)SFT (%)Change (pp)
Gemma 4 12B31.734.5±1.5+2.8
Gemma 4 31B30.737.8±0.5+7.1
Qwen 3.8 27B29.835.8±0.3+6.0
Average30.736.0+5.3

All three models improve on the model-feedback-steered worlds. The mean change is +5.3 pp.

Training recipe

The main runs adapt attention and feed-forward projections in the language model; the vision tower is not directly adapted. LoRA uses rank 16, scaling 32, and dropout 0.05. Training uses one epoch, learning rate 0.0001, cosine decay, 3% warm-up, batch size two, and eight accumulation steps. The loss covers the answer and turn-end token. Qwen’s thinking mode is disabled.

Additional training studies

Held-out worlds from profile-steered generation

Scroll horizontally to view all columns →

Profile-steered test sets · four splits, 45 held-out worlds per split
ModelBase (%)SFT (%)Change (pp)
Gemma 4 12B57.8±1.069.2±3.7+11.5
Gemma 4 31B64.4±1.774.6±3.8+10.2
Qwen 3.8 27B59.8±2.270.2±4.7+10.4
Average60.771.3+10.7

Each of four splits holds out 45 worlds (1,669–1,700 instances) from the same generation experiment used for training. The mean improvement is 10.7 percentage points. This is a different test from transfer to model-feedback-steered worlds. In a separate answer-position check, balancing correct-answer positions changes SFT accuracy from 71.0% to 71.5% for Gemma 4 12B, from 74.4% to 75.7% for Gemma 4 31B, and from 71.8% to 72.5% for Qwen 3.8 27B.

Train directly on model-feedback-steered worlds

Scroll horizontally to view all columns →

Direct training on model-feedback-steered worlds · 50 held-out worlds, 250 instances
ModelBase (%)SFT (%)Change (pp)
Gemma 4 12B28.829.6+0.8
Gemma 4 31B27.246.4+19.2
Qwen 3.8 27B25.638.4+12.8
Average27.238.1+10.9

This separate experiment trains on 214 model-feedback-steered worlds, with 32,560 training instances selected from 63,857 available instances. Evaluation holds out 50 entire worlds. It does not use the same training or evaluation population as the main transfer result.

Exclude an entire discovery profile from training

Scroll horizontally to view all columns →

Exclude one profile from training: change in accuracy (pp)
Excluded profileGemma 4 12BGemma 4 31BQwen 3.8 27BMean change
Correspondence+8.7+13.0+12.6+11.4
Measurement-1.5+6.0+13.8+6.1
Prior conflict+6.4+1.7+7.1+5.1
Declared transform+3.1+2.7+4.0+3.3
Search+8.8+9.7+10.5+9.7
Global structure+4.1+1.2+8.6+4.6
State tracking+9.3+9.1+14.4+10.9
Topology+11.8+10.6+14.6+12.3
Tracing+10.7+11.7+16.7+13.0
Average+6.8+7.3+11.4+8.5

Scroll horizontally to view all columns →

Exclude one profile from training · Gemma 4 12B
Excluded profileBase (%)SFT (%)Change (pp)
Correspondence51.660.3+8.7
Measurement68.266.7-1.5
Prior conflict77.984.3+6.4
Declared transform51.854.9+3.1
Search60.569.3+8.8
Global structure64.568.6+4.1
State tracking36.245.5+9.3
Topology63.074.8+11.8
Tracing56.367.0+10.7
Average58.965.7+6.8

Scroll horizontally to view all columns →

Exclude one profile from training · Gemma 4 31B
Excluded profileBase (%)SFT (%)Change (pp)
Correspondence54.967.9+13.0
Measurement74.780.7+6.0
Prior conflict84.986.6+1.7
Declared transform58.661.3+2.7
Search65.174.8+9.7
Global structure69.770.9+1.2
State tracking40.749.8+9.1
Topology66.777.3+10.6
Tracing62.974.6+11.7
Average64.271.5+7.3

Scroll horizontally to view all columns →

Exclude one profile from training · Qwen 3.8 27B
Excluded profileBase (%)SFT (%)Change (pp)
Correspondence54.366.9+12.6
Measurement65.279.0+13.8
Prior conflict80.787.8+7.1
Declared transform51.255.2+4.0
Search61.672.0+10.5
Global structure63.672.3+8.6
State tracking33.547.9+14.4
Topology60.374.9+14.6
Tracing53.970.5+16.7
Average58.369.6+11.4

For each model, nine separate adapters are each trained without one profile and evaluated on that profile. Accuracy improves in 26 of the 27 model–profile combinations; the exception is Gemma 4 12B on measurement, which declines by 1.5 points. Averaged over profiles, the gains are +6.8 points for Gemma 4 12B, +7.3 for Gemma 4 31B, and +11.4 for Qwen 3.8 27B. Each cell is a single run; Gemma 4 12B uses sixteen accumulation steps.

External benchmark transfer

Transfer to external benchmarks

Three base models were each fine-tuned on four training splits. The table reports each model’s mean change and standard deviation across those four splits. The average across models and benchmarks is +1.9 points.

Positive changeNegative changeColors supplement the numerical values.

Scroll horizontally to view all columns →

External benchmarks: changes across four training splits
BenchmarkGemma 4 12BGemma 4 31BQwen 3.8 27BMean change
VLMsAreBlind+30.8 ± 0.7+8.3 ± 1.2+2.9 ± 1.1+14.0
PuzzleVQA+5.5 ± 2.3+3.7 ± 2.9+10.0 ± 2.2+6.4
VLMsAreBiased+4.5 ± 1.7+5.0 ± 3.1+4.4 ± 2.4+4.6
AlgoPuzzleVQA+1.6 ± 0.7+4.5 ± 1.4+3.2 ± 1.7+3.1
PGM+0.8 ± 1.4+1.5 ± 0.6+1.9 ± 1.0+1.4
V*-0.6 ± 0.9-3.1 ± 1.3+7.8 ± 1.2+1.4
NaturalBench+1.1 ± 0.5+0.6 ± 0.2+1.8 ± 0.5+1.2
VSR-0.2 ± 1.6+0.6 ± 0.3+1.7 ± 0.5+0.7
CV-Bench-0.2 ± 0.9+0.7 ± 0.5+0.6 ± 0.3+0.4
GQA+0.1 ± 1.0-1.2 ± 1.1+1.5 ± 0.2+0.1
BLINK-1.7 ± 1.2-0.3 ± 1.3+2.3 ± 1.3+0.1
A-OKVQA-2.7 ± 0.9+0.4 ± 0.3+1.1 ± 0.1-0.4
DocVQA-1.7 ± 0.6+0.3 ± 0.6+0.2 ± 0.4-0.4
CLEVR-5.3 ± 1.0+1.0 ± 3.7+2.5 ± 0.3-0.6
MathVista-2.9 ± 2.4-3.8 ± 6.3+4.6 ± 1.2-0.7
RAVEN-0.8 ± 5.6-1.8 ± 3.1-1.2 ± 4.4-1.2
Average+1.8+1.0+2.8+1.9

Entries are mean change ± standard deviation in percentage points. BLINK covers IQ_Test; RAVEN covers center_single. The average is taken over benchmarks, not over pooled examples.

VLMsAreBlind, PuzzleVQA, VLMsAreBiased, AlgoPuzzleVQA, PGM, and NaturalBench have positive mean changes for all three models. On the other ten, results differ by model; RAVEN declines for all three models, but by less than its standard deviation across splits.

Base and fine-tuned scores across four splits

These are the base scores and four-checkpoint SFT means underlying the changes above. SFT entries show mean ± standard deviation; changes are in percentage points. DocVQA instead uses Average Normalized Levenshtein Similarity (ANLS), a text-similarity score, multiplied by 100.

Scroll horizontally to view all columns →

External scores across four training splits · Gemma 4 12B
BenchmarkBaseSFT (mean ± SD)Change
VLMsAreBlind46.477.3±0.7+30.8
PuzzleVQA58.063.5±2.3+5.5
VLMsAreBiased26.731.2±1.7+4.5
AlgoPuzzleVQA35.737.3±0.7+1.6
PGM13.214.0±1.4+0.8
V*56.255.6±0.9-0.6
NaturalBench78.679.8±0.5+1.1
VSR80.079.8±1.6-0.2
CV-Bench83.283.0±0.9-0.2
GQA56.356.4±1.0+0.1
BLINK29.327.7±1.2-1.7
A-OKVQA84.181.4±0.9-2.7
DocVQA81.880.1±0.6-1.7
CLEVR60.054.7±1.0-5.3
MathVista54.651.7±2.4-2.9
RAVEN14.814.1±5.6-0.8
Average53.755.5+1.8

Scroll horizontally to view all columns →

External scores across four training splits · Gemma 4 31B
BenchmarkBaseSFT (mean ± SD)Change
VLMsAreBlind74.682.9±1.2+8.3
PuzzleVQA68.171.8±2.9+3.7
VLMsAreBiased23.628.6±3.1+5.0
AlgoPuzzleVQA38.843.3±1.4+4.5
PGM14.315.8±0.6+1.5
V*75.172.1±1.3-3.1
NaturalBench82.983.5±0.2+0.6
VSR84.084.6±0.3+0.6
CV-Bench85.686.3±0.5+0.7
GQA58.056.8±1.1-1.2
BLINK27.327.0±1.3-0.3
A-OKVQA89.389.8±0.3+0.4
DocVQA92.392.7±0.6+0.3
CLEVR68.469.4±3.7+1.0
MathVista55.852.0±6.3-3.8
RAVEN22.620.8±3.1-1.8
Average60.061.1+1.0

Scroll horizontally to view all columns →

External scores across four training splits · Qwen 3.8 27B
BenchmarkBaseSFT (mean ± SD)Change
VLMsAreBlind91.394.2±1.1+2.9
PuzzleVQA58.668.7±2.2+10.0
VLMsAreBiased43.147.5±2.4+4.4
AlgoPuzzleVQA36.940.1±1.7+3.2
PGM15.817.7±1.0+1.9
V*81.789.6±1.2+7.8
NaturalBench81.483.1±0.5+1.8
VSR85.887.5±0.5+1.7
CV-Bench87.187.7±0.3+0.6
GQA62.864.3±0.2+1.5
BLINK26.028.3±1.3+2.3
A-OKVQA87.688.7±0.1+1.1
DocVQA96.096.2±0.4+0.2
CLEVR95.097.5±0.3+2.5
MathVista53.357.9±1.2+4.6
RAVEN48.547.3±4.4-1.2
Average65.768.5+2.8

BLINK covers the IQ_Test subset and RAVEN covers center_single. Changes are computed from unrounded scores, so displayed values can differ by 0.1 point when subtracted.