Research notebook | updated

Nihonga 日本画

A smaller image model, with every cut measured.

We are compressing Qwen-Image-2.1: identify transformer blocks that can be replaced, learn inexpensive bridges, and distill the original model’s behavior back into the student. This is our working research record, including results that did not work.

This is the full research log. The released model, its final architecture, results and how to use it are on the Nihonga v1 page.

The notebooks. Every experiment on this page is a cell in a public notebook, with its code, measurements and conclusions (repository): 0 · Exploring the model · 1 · A 20k-prompt dataset · 2 · Baseline · 3 · Which blocks to remove · 4 · Bridge modules · 5 · Pretraining bridges · 6 · One block removed · 7 · Second block removed · 8 · Healing · 9 · Few-step baselines · 10 · Lightning LoRA and release.

Engraving of a Japanese painter’s low worktable with an unfurled pine-and-mountain landscape, brushes, an inkstone and bowls of mineral pigment, under the word Nihonga.

Phases 0–2 · establish the reference

Understand the model before removing anything

The inspected transformer has 32 blocks, a hidden width of 4,096, and approximately 7.115 billion parameters. The 60-layer examples in the original plan are illustrative; our experiments use this actual 32-block architecture. The model predicts a velocity that updates the noisy latent at each denoising step; the VAE decodes the final latent into an image.

How an image becomes transformer tokens: the VAE compresses a 1024 by 1024 RGB image 8 times into a 128 by 128 by 16 latent; the pipeline cuts the latent into 2 by 2 patches, giving 64 by 64 = 4,096 tokens of 64 numbers each, every token covering 16 by 16 pixels; a linear projection lifts each token to 4,096 numbers for the transformer blocks, and the output is projected back to 64 per token, unpacked and decoded by the VAE.
From pixels to tokens | the VAE compresses the image 8 times into 16 learned channels; 2 by 2 patches of that latent become the 4,096 tokens the transformer works on, each covering 16 by 16 pixels

What “internal” means

Internal means our own synthetic prompt dataset, built for this compression project. It is separate from Qwen-Image-Bench. The “Internal” baseline row is specifically its 1,007-prompt held-out internal-test split, not the training set and not all 20,000 pilot prompts. Qwen-Image-Bench supplies the other two rows, with the same 1,000 benchmark items evaluated in Chinese and English.

Why build our own dataset?

We need prompts to train the bridges and heal the student without training on benchmark questions. We also need validation prompts for choosing checkpoints and a separate test set for evaluating changes. A broad synthetic corpus lets us deliberately cover counting, spatial relations, text rendering, materials, scenes and visual styles instead of relying on whichever examples happen to be easy. For distillation, the original image model supplies hidden states and velocity targets; real-image training pairs are not required for this stage.

How we created it

1 · structured prompts
Generate a 100,000-prompt template pool across five capability groups and 38 subdimensions. Combine objects, counts, colors, relations, materials and scenes with difficulty levels 1–5, styles, prompt formats and aspect ratios. Exact normalized duplicate prompts are removed. Counting and spatial relations receive extra weight, and text rendering receives twice its unadjusted subdimension weight.
2 · stable partitions
Assign deterministic IDs and seeds, stratify within capability/subdimension/difficulty, then select a 20,000-prompt prefix by a saved pool rank. The intended split is approximately 90% train, 5% validation and 5% internal test. The actual pilot sizes are 17,991 / 1,002 / 1,007. Split assignments remain fixed when growing the pool.
3 · natural language
Use Qwen3-8B through vLLM on Modal to rewrite selected English prompts and translate about 10% into Chinese. Pure templates can cover a narrow set of sentence shapes; natural wording and Chinese prompts broaden the conditioning the student sees. Automatic checks try to preserve quoted text and key constraints; failed rewrites fall back to the original template. Raw responses are retained.
4 · benchmark separation
Check normalized exact matches and English 6-word / Chinese 8-character n-gram overlap against a pinned Qwen-Image-Bench prompt snapshot, both before and after rewriting. At the configured 0.5 overlap threshold, the template-pool check removed zero prompts; no final rewrites were rejected for benchmark overlap. These checks reduce detectable contamination, but do not prove every prompt is semantically unrelated.
5 · serialize the record
Save each prompt’s capability, subdimension, facet, difficulty, style, aspect ratio, language, source, original template, ID, seed and split. Save the generation configuration, raw LLM outputs, overlap checks, distributions and artifact hashes. Rerunning reads the existing results rather than generating the corpus again.
Our dataset · split sizesnumber of prompts · 20,000 total
  1. Train · fit parameters17991
  2. Validation · select checkpoints1002
  3. Internal test · held-out evaluation1007
Pilot prompt capabilitiesshare of 20,000 prompts
  1. Alignment25.980%
  2. Creative20.000%
  3. Aesthetics18.020%
  4. Visual Quality18.010%
  5. Real World17.990%
How the final pilot is writtenshare of final pilot prompts
  1. Retained template wording60.910%
  2. LLM English rewrite29.070%
  3. LLM Chinese translation10.020%
Pilot languagesshare of final pilot prompts
  1. English89.980%
  2. Chinese10.020%

The 100,000-prompt master pool is the template reservoir. Natural-language rewriting and translation were completed for the 20,000-prompt pilot; we have not trained on all 100,000 prompts. The bars show the actual pilot distributions from the saved Phase 1 statistics, not planned quotas. Wording checks are automatic rather than a guarantee of perfect constraint preservation.

A saved internal-test example

Create a photorealistic café chalkboard displaying “Today’s special: tomato soup and grilled cheese” in legible chalk writing, soft shadows, mysterious atmosphere.

This held-out example tests long text rendering: creative generation, difficulty 5, photographic style, square aspect ratio, English LLM rewrite. Its seed and original template are saved. It is a test prompt, not a bridge-training example.

“Internal” in the baseline is the held-out test row; validation is a different split
Split / benchmarkRoleHow used so far
Train · 17,991 promptsFit model parameters20 selected prompts in the bridge and healing pilots
Validation · 1,002 promptsChoose candidates and checkpoints10 selected prompts, reused across the small pilots
Internal test · 1,007 promptsOur held-out evaluation setAll baseline images; subsets for Phase 3 diagnostics
Qwen-Image-Bench · 1,000 bilingual itemsExternal benchmark · evaluation only1,000 Chinese and 1,000 English baseline images

The original image model baseline

We generated and judged 3,007 reference images: 1,000 Chinese benchmark prompts, 1,000 English benchmark prompts and 1,007 internal prompts. Another 301 paired regenerations measure generation-and-judge variation. Prompts, seeds, resolutions, scheduler settings, model revisions and judge outputs are saved.

Original model · overall judge score0–100 · higher is better
  1. Bench Cn53.615
  2. Bench En53.669
  3. Internal56.084
Original model scores · frozen local Q-Judger protocol · 0–100
Evaluation setImagesOverallPrompt adherenceText rendering
Bench Cn100053.6254.6443.59
Bench En100053.6753.8841.69
Internal100756.0857.1370.49

These are our local judge scores, not a claim of an official leaderboard result. Text scores cover only applicable prompts; contributing counts are included in the downloadable data. Judge calibration found an approximately 2.5-point aesthetics offset; the judge remains frozen for paired comparisons.

Baseline speed
6.172 seconds per image on an H100 80 GB, batch size 1, 40 denoising steps; 80 timed calls across eight aspect ratios after warm-up.
Baseline memory
36.92 GiB peak allocated VRAM across those calls. Student inference has not yet been benchmarked under the same protocol.

Phase 3 · measure the missing update

Similarity is a clue; images decide what it misses

We measured all 32 transformer blocks before choosing which ones to replace. On 64 prompts, at three denoising stages, we compared the hidden states entering and leaving every block. Blocks 2, 3, 4 and 5 had the smallest consistent changes, so we chose them as bridge candidates. The choice came from the measurements.

To make that choice, we took each block’s average relative L2 change at each of the three stages, kept the largest of those three averages, and ranked all 32 blocks from smallest to largest. The first four were blocks 2, 4, 5 and 3. After selecting them, we temporarily skipped each of those four blocks separately to measure how much that changed the model’s velocity prediction. The all-block activation comparison and the four-candidate bypass tests are two different experiments.

The initial candidate ranking

Initial shortlist · rank all 32 blocks by max(early mean, middle mean, final mean) · lower is smaller
RankOriginal blockLargest stage-average L2 changeDecision
128.681%Initial candidate
249.574%Initial candidate
3510.043%Initial candidate
4310.881%Initial candidate
5111.740%Comparison context
6615.500%Comparison context
7916.504%Comparison context
81016.912%Comparison context

This rule favors blocks with consistently small updates across the sampled denoising stages, rather than a block that appears unimportant at only one stage. It is a ranking of local hidden-state changes, not yet bypass velocity errors or image quality. “Largest stage average” means the largest of three means over 64 prompts; it is not the worst individual prompt. The initial rank order is 2, 4, 5, 3; written in model order, the selected set is 2–5.

The activation measurements

We measured all 32 blocks on 64 fixed internal prompts at denoising steps 0, 19 and 39 of the 40-step teacher: 6,144 block/stage observations. Hooks compare image-token states immediately before and after each block, excluding the text prefix. Each cosine is averaged over image tokens, then across prompts. The table shows the four tested candidates; the graph and downloadable record cover every block.

Direction · cosine, zoomedcloser to 1 means less rotation
Cosine for blocks 1–6, with a zoomed vertical axis from 0.994 to 1.000. Blocks 2–5 are highlighted. Open the SVG for a larger view.
Update size · relative L2smaller means a smaller update
Relative L2 hidden-state change for blocks 1–6, on a linear vertical axis from 0% to 18%. Blocks 2–5 are highlighted. Open the SVG for a larger view.
  • early · dashed
  • middle · dotted
  • final · solid

These views zoom into blocks 1–6, including a neighbor on each side of the tested 2–5 batch. The cosine axis is deliberately narrowed to 0.994–1.000; its larger-looking differences are still small absolute changes. Relative L2 is ‖h_out − h_in‖₂ / ‖h_in‖₂, reported as a percentage on a separate linear axis. Cosine compares direction; L2 also responds to changes in magnitude. The green wash identifies the tested batch, not an acceptance region.

Show all 32 blocks · full-range cosine and logarithmic relative L2
Cosine · full rangevertical axis 0–1
Full-range cosine across all 32 blocks at three stages, retaining the large changes at the first and final blocks.
Relative L2 · all blockslogarithmic axis · 5%–1,500%
Relative L2 changes across all 32 blocks, on a logarithmic axis from 5% to 1,500%, so the large block-0 update does not flatten the remaining blocks.

The L2 overview uses a log scale: equal vertical distances represent equal ratios rather than equal percentage-point changes. It preserves block 0’s update, which exceeds 800% of its input norm at the early stage, while keeping other blocks visible. All plotted observations fit the stated axes; none are clipped. The stage legend above applies to both overviews.

Mean input/output image-token cosine · 1 means same direction
Original blockEarly cosineMiddle cosineFinal cosine
20.9983210.9985970.997599
30.9971100.9981590.997847
40.9969890.9972810.997353
50.9958300.9961610.996551
Relative hidden-state change · ‖h_out − h_in‖₂ / ‖h_in‖₂ · lower is smaller
Original blockEarly changeMiddle changeFinal change
28.681%5.544%8.126%
310.881%7.473%8.003%
48.460%9.322%9.574%
59.916%10.043%10.034%

For example, block 2’s early cosine is 0.998321, but the update still has a norm equal to 8.681% of its input’s norm. High cosine does not imply a negligible update or 99.8% image quality. Block 1 and some later blocks also have high cosine; the shortlist was determined by the maximum stage-average relative L2 change, rather than cosine alone. These four earn a first test, not automatic approval for removal. Prompt-level distributions and per-capability aggregates are in the measurements.

What happens when each update is removed?

An identity bypass returns h_out = h_in, so the missing block contributes no update. We tested each candidate separately on the same five pilot prompts × three stages, using saved teacher-trajectory inputs and rebuilt student prefix caches. Each block has 15 velocity comparisons, with intact-teacher replay controls matching exactly within the diagnostic. These five-prompt Phase 3 probes are distinct from the later ten-prompt bridge-validation set.

Early stage · identity bypasslower is better
  1. Skip block 216.407%
  2. Skip block 315.801%
  3. Skip block 410.811%
  4. Skip block 512.740%
Middle stage · identity bypasslower is better
  1. Skip block 24.145%
  2. Skip block 33.442%
  3. Skip block 42.687%
  4. Skip block 52.813%
Final stage · identity bypasslower is better
  1. Skip block 218.962%
  2. Skip block 311.854%
  3. Skip block 45.433%
  4. Skip block 53.687%
Phase 3 identity-bypass velocity error · five prompts · lower is better
Skipped blockEarly errorMiddle errorFinal errorWorst case
216.407%4.145%18.962%21.396%
315.801%3.442%11.854%18.531%
410.811%2.687%5.433%17.797%
512.740%2.813%3.687%17.003%

Block 2 has the strongest activation similarity of the tested candidates early and in the middle, yet its omission causes the largest mean velocity errors at all three stages. Block 4 has the lowest mean bypass error early and in the middle; block 5 is lowest at the final stage. Similarity helps nominate experiments, but bypass sensitivity and finished images change the ranking.

The worst-case column is the largest error among that block’s 15 prompt/stage cases. Velocity error is a prediction difference, not a percentage of image-quality loss. These individual interventions do not establish that several blocks can be removed together, and no bridge is fitted in this diagnostic.

What the first image comparisons showed

Five prompts, one per capability, were generated with block 4 or block 5 skipped: ten bypass images. In the astronaut example, skipping block 4 loses the spacesuit. Skipping block 5 retains it. That initially favors block 5 for closer study, while all four candidates remain eligible for learned bridges.

Each sheet reads teacher / skip block 4 / skip block 5, left to right. These are identity-bypass images from Phase 3, before bridge training or healing. Teacher images came from an earlier run; unresolved cross-run variation limits causal pixel comparisons. Observations are manual, not a blinded quality study. Open any sheet at full resolution.

Pixel MAE and PSNR record changes in composition and appearance, but do not directly measure prompt adherence or aesthetic quality. None of these identity bypasses is accepted as the finished model.

Phases 4–5 · recover the missing update cheaply

A small residual bridge in place of a full block

The bridge projects 4,096 features down to 256, applies GELU, projects back up, and adds the input: h′ = h + W_up GELU(W_down h). Each bridge has 2,097,152 parameters. We fit four independent candidates, replacing one original block at a time; the four bridges are not inserted together.

Before · the original transformer block
Original block: 4,096-feature input, normalization, attention with a gated residual, normalization, feed-forward network with a gated residual, then a 4,096-feature output.
After · a residual bottleneck bridge
Replacement: preserve the input on a residual path; project 4,096 features down to 256, apply GELU, project back to a 4,096-feature correction, then add the original input.

The student keeps the same 4,096-feature input and output interface. Only the correction travels through the 256-feature bottleneck; the residual path keeps the original information. GELU is a nonlinear transformation of those 256 features. The bridge processes each token separately without attention and learns to approximate the removed block’s update. The diagrams show shapes and operations, not identical teacher and student values or measured speedups. Open either diagram for the standalone SVG.

What this bridge sees, and what it ignores

The rank-256 bridge receives exactly one thing: each token’s hidden state. It never looks at other tokens, does not know which denoising step it is in, and has no notion of where a token sits in the image. That is enough for block 5, whose update is small, but not for a block like 13. The attention bridge designed in Phase 7 adds each missing input.

What each bridge receives
InputRank-256 bridge (block 5)Attention bridge (block 13, Phase 7)
Hidden state of every token (4,096 numbers)yesyes
Other tokens (attention)no: each token is transformed aloneyes: 8 heads
Timestep (how noisy the image is)no: same correction at every stepyes: scale and gate
Token positions (RoPE)noyes
Prompt key/value cachenoyes: its own slot
Weights2.1M25.2M (original block: 218M)

Bridge-only pretraining keeps the rest of the model frozen. Each candidate gets 500 updates using cached hidden states from 20 training prompts, with 10 validation prompts selecting checkpoints. The fitting objective balances prompt tokens and early, middle and late image tokens, combining normalized direction matching with a smaller relative squared-error term. Block 5’s selected checkpoint is update 300.

Does a better hidden-state fit improve the whole prediction?

We replay each identity and trained student against the verified teacher, using the same saved inputs at three stages. Each candidate has 30 comparisons; there are 240 student forwards across four candidates and two variants.

Block 2 replacementlower is better
  1. Identity bypass12.879%
  2. Pretrained bridge12.023%
Block 3 replacementlower is better
  1. Identity bypass10.637%
  2. Pretrained bridge10.238%
Block 4 replacementlower is better
  1. Identity bypass7.160%
  2. Pretrained bridge5.873%
Block 5 replacementlower is better
  1. Identity bypass6.406%
  2. Pretrained bridge5.518%
  • identity bypass
  • pretrained bridge
Mean validation velocity error · lower is better
Original blockIdentity errorBridge errorRelative reductionCases improved
212.879%12.023%6.64%27 / 30
310.637%10.238%3.74%20 / 30
47.160%5.873%17.97%26 / 30
56.406%5.518%13.86%24 / 30

How to read the percentages. Velocity error is ‖student − teacher‖₂ / ‖teacher‖₂, averaged equally across prompts and stages. For block 2, 12.8788036% becomes 12.0234947%: a drop of 0.855309 percentage points. Dividing that drop by the original 12.8788036% gives a 6.64% relative reduction. This is a fraction of prediction error removed, not an image-quality improvement. “27 / 30” counts the cases with lower error.

Block 5 has the lowest mean trained error, 5.518%, and a worst case of 15.095%, so it is selected for the healing pilot. Block 4 removes a larger fraction of its identity error but ends at a slightly higher mean, 5.873%. Block 3 slightly regresses at the early and middle stages despite improving its overall mean. The small reused validation set does not establish statistical superiority.

Phase 6 · first make the supervision repeatable

A replay discrepancy paused training

Fresh teacher predictions initially disagreed with historical saved velocities beyond our 0.1% relative-L2 tolerance. Repeating a forward in the same process was stable, and full tensor-state fingerprints matched across fresh processes. The exact cause of the historical discrepancy remains unresolved.

The numerical contract we verified

We pinned the model revision and transformer source, H100 hardware and software versions, BF16 weights, deterministic algorithms, math attention, TF32 and reduction settings, exact input order and cache lifecycle. Each prompt gets a fresh cache; early-stage conditioning is extracted before cached middle and late forwards. Reference files are loaded after predictions are made. The audit covers 301 state tensors, including otherwise unregistered positional tables.

Under this contract, all 90 teacher predictions match the new saved references exactly. Historical targets and weights remain preserved. This establishes a working repeatable setup; it does not isolate which individual setting caused the old mismatch or prove that every setting is necessary.

Did the bridges need to be trained again?

We captured 360 fresh block/stage hidden-state pairs for the same 30 prompts and token selections. Frozen bridge validation objectives differ from the historical objectives by less than 0.05%. The replay change alone therefore does not justify replacing the Phase 5 training results.

Fresh hidden-state fit check · this is a different metric from velocity error
BlockFresh hidden-fit objectiveReduction vs identityChange vs historical fit
20.00396945.53%-0.0082%
30.00521338.00%-0.0432%
40.00503749.70%+0.0175%
50.00671261.40%-0.0273%

The hidden-fit objective combines direction and relative squared errors; it has no direct percentage interpretation. Its 38–61% reductions cannot be compared as if they were the same metric as the 3.74–17.97% velocity-error reductions.

Phase 6 | architecture healing

Full-student healing and generated-image QA

The original teacher has 32 transformer blocks. The current student has 31 surviving blocks and one pretrained bridge at slot 5. Phase 5 trained that bridge to replace the missing block's hidden-state update. Phase 6 then tested whether further training helps the student match the teacher's denoising velocity at the same prompt, noisy latent and timestep. Both models still use 40 denoising steps.

The intended healing pass updates the entire student: all surviving transformer weights and the single bridge, 6,899,117,824 parameters in total. The teacher stays frozen. We attached no LoRA in the full-student runs. A separate LoRA for few-step speed distillation belongs to a later phase.

Phase 6 pilot results; mean velocity relative L2 on the same 10 validation prompts at three noise stages; lower is better
ExperimentTrainable weightsUpdatesFinal validation errorSelected update
Bridge + LoRA, rate 0.000110,223,6161207.188%0
Bridge + LoRA, rate 0.0000110,223,6161206.113%0
Bridge only, rate 0.00012,097,1521206.153%0
Full student, rate 0.00016,899,117,8246054.387%0
Full student, rate 0.0000016,899,117,824605.654%0

All five pilots began at 5.518% with the pretrained bridge. Every saved training run selected update 0 on the original 10 prompts. The bridge + LoRA and bridge-only trials are diagnostic ablations; the two full-student trials answer the intended healing-scope question. A passed run means its execution controls passed, not that its trained checkpoint improved quality.

How the full-student trials worked

Each run made 60 shuffled updates from 20 training prompts at three saved noise stages. The loss combined teacher-student velocity error, hidden-state alignment at surviving slots 2-4, and bridge output alignment at slot 5. Ten different validation prompts chose among updates 0, 30 and 60. Exact teacher replay, baseline reproduction, gradient flow to the bridge and surviving weights, and selected-checkpoint reload were checked. Checkpoints, optimizer state, predictions, reports and hashes were saved separately.

Full-student mean validation velocity relative L2; 10 prompts times three stages
UpdatesRate 0.0001Rate 0.000001
05.518%5.518%
3038.183%5.585%
6054.387%5.654%

At update 60 the 0.0001 run reached 54.387%, a severe regression. Reducing the rate 100-fold kept the run near baseline, but its 5.654% still exceeded 5.518%. These short runs therefore did not produce a better healed student. They do not establish whether broader data, different loss weights or another optimizer could help.

A closer look at the lower-rate run shows why its mean can rise despite local gains: 21 of 30 validation prompt/stage comparisons improved, but the early-noise average rose from 9.947% to 10.371%. The largest regressions were early-noise cases. This is a small, reused validation set; the pattern guides diagnosis but does not identify a cause.

A broader check of the selected bridge

We tested the unchanged pretrained-bridge student on 50 additional validation prompts, 10 from each prompt group, at early, middle and late noise stages. The original 10-prompt calibration measured 5.531% in this replay, close to the earlier 5.518%. The new 50-prompt mean was 5.393%. No student weight was updated.

Selected pretrained bridge on 50 new validation prompts; lower is closer to the teacher
Noise stageMean teacher-student velocity error
Early10.051%
Middle2.572%
Late3.556%

This extends the selected bridge's fixed-input check to 150 new prompt/stage comparisons. It is still a validation set, not an independent image-quality benchmark. Early noise remains the largest source of teacher-student disagreement.

The trained checkpoint on the same new inputs

The low-rate update-60 checkpoint still regresses on the original 10 prompts: its control mean was 5.655%. On the 50 new prompts, however, it improved mean teacher agreement from 5.393% to 5.251%; 121 of 150 paired prompt/stage comparisons improved. The new prompt selection was fixed before this checkpoint comparison. The disagreement between samples makes the original 10-prompt selection uncertain.

Same 50 new prompts and saved teacher inputs; lower means closer velocity predictions
Noise stagePretrained bridgeLow-rate update 60
Early10.051%9.736%
Middle2.572%2.553%
Late3.556%3.465%

This is teacher-prediction agreement on saved noisy inputs, not an image-quality result. The separate matched-image pilot below examines what these numerical gains look like after full generation.

Longer full-student healing

We resumed the low-rate full-student checkpoint at update 60 with its saved optimizer state. Forty previously unused training prompts provided 120 new prompt/noise-stage updates; no validation prompt entered training. All 6,899,117,824 student weights were trainable, with one bridge and no LoRA. On the 50 monitored validation prompts, mean velocity relative L2 fell from 5.249% at update 60 to 5.139% at update 120 and 5.110% at update 180.

On 20 separate prompts untouched by training and checkpoint monitoring, the means were 5.439% pretrained, 5.427% at update 60, 5.398% at update 120, and 5.406% at update 180. Update 120 was best on this small test; the extra updates to 180 did not improve it further there.

These are teacher-prediction differences on saved noisy inputs. Early-noise agreement worsened with more updates while late-noise agreement improved; the overall test gain is small. The image comparison below tests full generations separately.

What the generated images show

The first pilot generated 10 fixed-seed teacher/pretrained-bridge image pairs. A later pilot generated 11 matched triples with teacher, pretrained bridge, and low-rate update 60. The two student versions usually retain similar subjects and styles; their composition and detail differences are mixed. In the poster below, the teacher renders the requested CRIMSON HARBOR title while both students replace HARBOR with unrelated letters. The trained checkpoint does not fix this known text failure.

Teacher poster with the requested CRIMSON HARBOR title
Original teacher | requested title
Pretrained-bridge poster with the second title word incorrect
Pretrained bridge | title error
Update-60 poster with the second title word still incorrect
Low-rate update 60 | title error remains

This visual review is small and unblinded. It does not establish a quality ranking: a lower teacher-velocity error on saved inputs has not shown a clear generated-image advantage here. Full-resolution PNGs are available by opening each poster.

Five-way image comparison after more updates

Eleven fixed-prompt, fixed-seed cases now compare the teacher, pretrained bridge, and cumulative updates 60, 120, and 180. Only two prompts request prominent text. The Northern Parade title is legible in every student version. In the other poster, update 120 renders CRIMSON HARBOR and Visit Kyoto legibly; the pretrained and update-60 versions miss HARBOR, and update 180 reads SIMSON and omits HARBOR. That is not a steady text improvement or deterioration as healing proceeds. Replacing block 5 with the bridge harms this particular poster relative to the teacher, but two posters cannot establish general bridge text fidelity. Most other image differences are subtle or mixed.

Teacher CRIMSON HARBOR poster
Teacher
Pretrained bridge poster
Pretrained bridge
Update 60 poster
Update 60
Update 120 poster with legible CRIMSON HARBOR and Visit Kyoto
Update 120 | title legible
Update 180 poster with title regression
Update 180 | title regresses

The viewer below shows all 11 prompts: four on the first sheet, four on the second, and three on the third. Each row holds the same prompt and seed across the five columns: teacher, pretrained, update 60, update 120, update 180. Open a sheet for full resolution.

This inspection was unblinded and includes one previously tracked poster. Only two of these 11 prompts request prominent text. The fresh text-focused test below checks whether that poster result repeats.

A fresh test of the update-120 text hypothesis

We rendered 16 previously unused explicit-text prompts: eight posters and eight other text scenes. Each uses the same fixed prompt and seed for teacher, pretrained bridge, update 120, and update 180, producing 64 saved images. The rubric was written before image review: a prompt passes only when every requested phrase is readable; ambiguous lettering remains uncertain. No weights were updated.

Manual full-requested-text review on 16 fixed prompts; each prompt counts once
ModelClear full-text passesUncertain
teacher151
pretrained130
update120131
update180120

Update 120 clearly restores the Northern Orchard title that the pretrained bridge and update 180 omit, although its small Visit Kyoto tagline is borderline. On a fresh ENDLESS HARBOR / Visit Kyoto poster, all three students render both phrases correctly, so the CRIMSON HARBOR failure did not repeat on that close template. Update 180 breaks Midnight River, which pretrained and update 120 render correctly. The strict full-prompt score is tied between pretrained and update 120 at 13 clear passes; update 120 has one additional uncertain case. This supports a local recovery and an update-180 regression, not a general claim that update 120 fixes text.

The viewer below shows all 16 prompts, four per sheet, with the four models in each row. The ENDLESS HARBOR, Northern Orchard, and Midnight River update-120 PNGs can also be opened at full resolution; each sheet links to its full-size image. The review is unblinded and uses one seed per prompt.

The observed 40-step generation averages on these 10 ordered pairs were 7.03 seconds for the teacher and 5.95 seconds for the student, a 1.18x ratio. This ordered pilot does not control for run order or establish a production speed benchmark. Velocity error measures denoising predictions, not image quality.

All 45 remaining validation text prompts

To check whether update 120 consistently improves text, we rendered all 45 other unused validation prompts with explicit text. The teacher, pretrained bridge, update 120, and update 180 produced 180 matched 40-step images at one fixed seed per prompt. A written rubric required every requested phrase to be readable. One AI visual reviewer scored anonymous A/B/C/D columns before revealing model identities; uncertain text was recorded separately. This step trained no weights.

45 matched prompts; each prompt counts once and passes only if all requested phrases are readable
ModelClear full-text passesClear failuresUncertain
teacher4320
pretrained4131
update1204131
update1803951

The pretrained bridge and update 120 received the same status on every prompt: 41 clear passes, three failures, and one uncertain. Update 120 clearly beat update 180 on two posters, PAPER STATION and NORTHERN PARADE. The teacher had 43 clear passes. This broader qualitative check gives no general text-rendering advantage to update 120 over pretrained, despite its CRIMSON HARBOR recovery in the earlier image pilot.

All four models garbled tiny Moonlight Motel print in one storefront and missed the Live in Berlin tagline on GOLDEN RIVER. Three student images spelled Fresh Bread Daily with an extra letter. The Electric Frontier flag lettering was too small to judge confidently in three student images. Literal text scoring also misses layout mistakes: one image has Live Music Tonight at the top but garbled lettering where the prompt requested it in sand. The viewer below contains all 15 labeled sheets, three prompts per sheet. One seed and one AI reviewer do not establish a population-level quality ranking; the separate internal test prompts remain unused.

These 45 prompts mainly ask for exact words on signs, posters, menus, or other surfaces. Turning each into a visual question would mostly repeat the text score. The broader 1,002-prompt validation split also includes 260 alignment prompts with counts, colors, objects, and spatial relations that support more specific question-based checks. Aesthetics and fine-detail prompts need different evidence; one question score cannot rank overall image quality.

Deciding test: 129 blind prompt-adherence questions

Velocity agreement and text tests had not clearly separated update 120 from the pretrained bridge, so one last test asked whether update 120 follows concrete prompt requirements more often. We used every unused validation prompt in four checkable categories: counting, spatial relations, colors, and multiple objects. That is 129 prompts in English and Chinese. Each was rendered by both models with the same seed, size, and 40-step sampler: 258 matched images and no training. Each category had one fixed question, such as "Are the requested number(s) of each named object visible?" Images were scored pass, fail, or uncertain as anonymous A/B columns before the model key was opened. The promotion rule was saved before any image existed.

  • 83 vs 86clear passes out of 129: pretrained bridge vs update 120
  • 126 / 129prompts where both models got the same result
  • 3 – 0clear paired wins for update 120 vs pretrained
  • +2.3 ptsgain; 95% CI [0.0, 5.4]; bar was +5 with CI above 0
Update 120 gain over the pretrained bridge against the promotion barPaired clear-pass gain of +2.3 percentage points with a 95% bootstrap interval from 0.0 to 5.4. Promotion needed at least +5 points and an interval above zero. promote zone promotion bar +5 no difference Gain +2.3 points; 95% CI [0.0, 5.4] +2.3 points 95% CI 0.0 to 5.4 -2+0+2+4+6+8 update 120 minus pretrained, clear-pass rate, percentage points (129 paired prompts)
The dot is the measured gain; the bar is its 95% paired bootstrap interval (20,000 resamples). Promotion required the dot to sit in the shaded zone and the interval to stay right of the dashed zero line. The dot falls short of +5 and the interval touches zero.
Update 120 needed all three conditions; the rule was saved before any image was rendered
Predeclared promotion conditionMeasuredMet?
Paired clear-pass gain >= 5 points+2.3 pointsNo
95% paired bootstrap interval excludes zero[0.0, 5.4]No
No clear loss on the 45 text prompts0 lossesYes

Decision: keep the pretrained bridge. Update 120 won 3 prompts, lost none, and tied on 126. That is a +2.3-point gain whose 95% interval reaches down to 0.0. It misses both promotion conditions. Correction, 18 October 2026: human review later found one reversed blind score (the hidden giraffe: the pretrained bridge passes, update 120 fails). Corrected, update 120 has 85 clear passes against 84, two wins and one loss: +0.8 points, 95% CI −1.6 to +3.9. The decision is unchanged and stronger. The healing run was safe, causing no measured regression, but its benefit is too small to detect in every Phase 6 test. The pretrained bridge also remains the simpler artifact: only the bridge is trained, and the 31 surviving blocks keep the teacher's original weights.

Clear passes on 129 fresh alignment promptsout of 129 · higher is better
  1. Pretrained bridge (selected)83
  2. Update 120 (healed)86
Clear passes by question category; uncertain images do not count as passes
CategoryPromptsPretrained clear passesUpdate 120 clear passesDifference
Counting351617+1
Spatial relation342122+1
Colors302626+0
Multiple objects302021+1
All1298386+3

What the differences look like

Below are all five prompts where the two models scored differently, followed by two typical failures shared by both and one typical tie. The pretrained bridge is always on the left and update 120 on the right; tags show the blind scores. Two of the three wins hold up: the right count of octopuses and a missing candle restored. The giraffe was scored the wrong way round; on human review the pretrained bridge is the one that hides the neck behind the mug (corrected below). Against 129 prompts, however, they are too few to clear the predeclared bar. Most prompts look like the last example: almost the same image, same verdict.

Corrected score, hidden giraffe: pretrained bridge pass, update 120 fail. Prompt: A giraffe partially hidden behind a coffee mug, stylized 3D
Reviewer error, corrected: hidden giraffe | blind score: pretrained fail, update 120 pass; corrected: pretrained pass, update 120 fail
The pretrained bridge hides the giraffe’s neck behind the mug, as asked. Update 120 draws the neck coming out of the mug, as if the giraffe were inside it. The blind reviewer had the two reversed; the original score stays in the record and the correction is noted beside it.
Update 120 win: four octopuses. Pretrained bridge fail, update 120 pass. Prompt: A candid photograph of four octopuses on a rocky hillside, high dynamic range.
Update 120 win: four octopuses | pretrained fail, update 120 pass
Update 120 shows four octopuses. The pretrained bridge adds a fifth, smaller octopus at the front.
Update 120 win: missing candle restored. Pretrained bridge fail, update 120 pass. Prompt: A digital illustration of a candle, an apple, a backpack, a brown potted cactus and an orange cherry on a white studio backdrop, soft shadows.
Update 120 win: missing candle restored | pretrained fail, update 120 pass
The pretrained bridge leaves out the requested candle. Update 120 includes all five objects.
Not a clear win: seven umbrellas. Pretrained bridge fail, update 120 uncertain. Prompt: Create a detailed image of seven umbrellas arranged on a lush grassy lawn, captured with high dynamic range. Style: claymation, handmade clay figures.
Not a clear win: seven umbrellas | pretrained fail, update 120 uncertain
The pretrained bridge shows six umbrellas (fail). Update 120 has seven or eight overlapping umbrellas, which cannot be counted confidently (uncertain), so this is not counted as a win.
The one case that leans toward pretrained. Pretrained bridge uncertain, update 120 fail. Prompt: 一个红色灯笼和一个藏红花色苹果放在大理石台面上,丰富的色彩,数字插画风格,简洁线条
The one case that leans toward pretrained | pretrained uncertain, update 120 fail
Prompt: a red lantern and a saffron-colored apple. Update 120 draws a lamp-like shade instead of a lantern (fail). The pretrained bridge draws a lantern, but its apple color is ambiguous (uncertain).
Shared failure: eight deer. Pretrained bridge fail, update 120 fail. Prompt: A stylized 3D render of eight deer in a grassy meadow. Sharp focus. Stylized 3D, clay-like materials.
Shared failure: eight deer | pretrained fail, update 120 fail
Both models draw more than eight deer. Counting errors like this are shared by both checkpoints, so healing did not fix them.
Shared failure: pear underneath a dog. Pretrained bridge fail, update 120 fail. Prompt: A stylized 3D render of an indigo pear underneath a dog, and a purple turtle hovering above a dog. Crisp details. Stylized 3D, clay-like materials.
Shared failure: pear underneath a dog | pretrained fail, update 120 fail
Both models put the pear on top of the dog instead of under it. The relation error is identical in both images.
Typical tie: near-identical images. Pretrained bridge pass, update 120 pass. Prompt: An orange sheep right next to a blue fox, DSLR photo
Typical tie: near-identical images | pretrained pass, update 120 pass
Most of the 126 tied prompts look like this: the same composition, with small differences in detail, and both pass.

Both checkpoints still fail about half of the counting prompts and about a third of the spatial-relation prompts in the same way. Those errors come from the base model and the bridge, not from healing. The viewer below shows all 129 prompts unblinded, three per sheet, with the score for every image.

Research decision: all Phase 6 evidence side by side

Every Phase 6 comparison between the selected pretrained bridge and cumulative update 120
Phase 6 comparisonSizePretrained bridgeUpdate 120Paired resultReading
Untouched fixed-input velocity test20 prompts x 3 stages = 60 comparisons5.439%5.398%update 120 lower on 46/60Consistent but very small numerical gain (0.04 points; 0.7% relative).
Fresh text pilot16 prompts, 64 images13130 clear wins / 0 clear losses for update 120Tie; update 120 restored one title but that prompt stays uncertain.
All remaining validation text prompts45 prompts, 180 images, blind41410 wins / 0 losses; same status on 44Exact tie.
Fresh alignment prompts (decision test)129 prompts, 258 images, blind83863 wins / 0 losses; same status on 126+2.3 points, 95% CI [0.0, 5.4]; below the 5-point promotion bar.

Every comparison points the same way. Update 120 is numerically a little closer to the teacher on saved inputs: lower velocity error on 46 of 60 untouched comparisons, by 0.04 points. It ties on text and is not reliably better on generated images. Phase 6 therefore closes with the pretrained single-bridge student as the selected model. The full-student checkpoints remain saved as evidence, but none is promoted.

Limits: one seed per prompt and one AI visual reviewer. A real effect of a few points cannot be ruled out, but this test was sized to detect the 5-point gain needed to justify the extra healing training. Per-prompt scores, the rubric, the blind key, and hashes are in the downloadable record.

Then: remove all four blocks at once

Phase 6 removed one block, and the pretrained bridge alone was enough. Phase 7 tested the four original candidates together, then the smaller cut of blocks 4 and 5. Importance is now recalculated inside the smaller student before choosing another removal. Healing remains conditional on a measured gap.

The LoRA in this plan is for speed. After architecture evaluation, a speed-distillation LoRA will teach the evaluated student to follow the teacher's 40-step trajectories in about 8 larger steps. That is roughly 5x fewer transformer passes; actual end-to-end speed must be measured.

Phase 7 | adaptive architecture pruning

A two-block cut that fails blinded review. Reassess from one block

Removing one block (Phase 6) is too small a cut to be worth releasing. Phase 7 tried bigger cuts. We first removed all four candidate blocks, 2, 3, 4 and 5, going from 32 blocks to 28, then tried a smaller cut of only blocks 4 and 5. Each student is compared with the teacher on the same noisy inputs. Its velocity error is how different its denoising answer is from the teacher's, where 0% means identical. The reference is the student with only block 5 removed. The predeclared gate allows at most 1 point more than that student on 10 check prompts, which is 6.52%.

Four blocks, bridges only: not enough

We tried the cheap options first: the four Phase 5 bridges stacked, and one bridge for the whole removed region at two sizes. All 90 teacher predictions were matched exactly first.

Velocity error against the teacher, blocks 2-5 removedmean of 10 prompts × 3 stages · lower is better
  1. One-block bridge (Phase 6 choice) · 31 blocks5.518%
  2. Blocks 2-5 skipped · 28 blocks22.155%
  3. Four per-block bridges stacked · 28 blocks19.641%
  4. One region bridge, 2.1M parameters · 28 blocks18.930%
  5. One region bridge, 8.4M parameters · 28 blocks17.731%
Velocity relative L2 error against the teacher on 10 validation prompts × 3 noise stages; all five students measured in one verified run
StudentBlocksEarlyMiddleLateMeanSkip damage removed
One-block bridge (Phase 6 choice)319.95%2.60%4.01%5.52%n/a
Blocks 2-5 skipped2832.62%9.67%24.18%22.15%0%
Four per-block bridges stacked2828.26%7.78%22.89%19.64%15%
One region bridge, 2.1M parameters2828.11%7.88%20.80%18.93%19%
One region bridge, 8.4M parameters2826.75%7.25%19.19%17.73%27%

In the intact teacher, replacing blocks 2 and 3 individually caused more error than replacing blocks 4 and 5. These measurements describe that original architecture; they do not rank the surviving blocks after other removals:

Each candidate block removed on its own; the same 10 prompts × 3 stages
Block removed alone (Phase 6 replay)SkippedWith its own bridge
212.88%12.02%
310.64%10.24%
47.16%5.87%
56.41%5.52%

The region bridge learns the text-prompt tokens almost perfectly, but leaves about 12% of the image hidden state unexplained. A bridge transforms each token on its own, while the removed blocks mix all tokens through attention, so quadrupling its size barely helps:

Region-bridge fit on the 10 validation prompts: error of the predicted hidden state after block 5; 0% would match the teacher
Hidden state after block 5SkipRegion bridge 2.1MRegion bridge 8.4M
Text-prompt tokens59.6%3.9%3.7%
Image tokens, early noise19.3%12.5%12.2%
Image tokens, middle noise26.8%11.8%11.5%
Image tokens, late noise31.8%12.4%11.6%

Four blocks, healed: better, but not close

Healing trains all 6.25 billion surviving weights and the bridge against the teacher. The first attempt gave each training step one prompt at one noise moment. The early moment, the first denoising step where the layout is decided, has about ten times larger errors and gradients, and it broke. Giving every step all three moments with equal weight fixed that at small learning rates, and 3e-6 was selected from a four-rate grid. Further passes then leveled off. On the 60 training prompts the early moment improved by about 60%, but on new prompts by only 4%: with just 60 saved early inputs, the student memorized them. We captured 600 extra early-moment examples, each verified by two identical deterministic teacher passes. They stopped the memorizing, but the early moment stayed unstable.

28-block student, error on the 50 wider prompts during healingsteps 1-60: learning-rate grid · 61-240: three more passes · 241-480: fresh early examples · lower is better
  1. Training step 016.63%
  2. Training step 6015.16%
  3. Training step 12014.59%
  4. Training step 18014.26%
  5. Training step 24014.21%
  6. Training step 30013.78%
  7. Training step 36013.47%
  8. Training step 42013.24%
  9. Training step 48013.61%
  10. One-block student (target)5.39%
Healing the 28-block student (blocks 2-5 removed): velocity error on the 50 wider validation prompts (with its early, middle and late moments) and on the 10 check prompts. The one-block student measures 5.39% and 5.52%
RunWider (50)EarlyMiddleLateCheck (10)
Untrained16.63%24.84%7.20%17.85%17.73%
One moment per step, rate 1e-5, step 12021.26%43.78%6.05%13.95%21.64%
All three moments, rate 1e-6, step 6015.64%23.71%6.62%16.57%16.73%
All three moments, rate 3e-6, step 6015.16%23.86%6.21%15.41%16.33%
All three moments, rate 1e-5, step 6017.41%32.17%6.02%14.03%17.82%
All three moments, rate 3e-5, step 6025.40%48.92%8.61%18.67%25.00%
Rate 3e-6 continued, step 24014.21%24.30%5.61%12.72%14.88%
+ extra early examples, step 420 (selected)13.24%22.72%5.37%11.62%14.94%
+ extra early examples, step 48013.61%24.07%5.34%11.41%14.76%

After 480 training steps the 28-block student reaches 13.2% on the 50 wider prompts, against 5.4% for the one-block student. Progress had slowed to a crawl, and most of the gap is at the early moment.

Two blocks: much closer

So we tested the smaller cut, removing only blocks 4 and 5, which were the easy ones on their own. One bridge maps the teacher's state before block 4 to its state after block 5. It was fitted with the same recipe, then measured in the full 30-block student:

Removing only blocks 4 and 5: velocity error against the teacher on the same 10 prompts × 3 stages, all five students in one verified run; the gate is 6.52%
StudentBlocksEarlyMiddleLateMeanSkip damage removed
One-block bridge (reference)319.95%2.60%4.01%5.52%n/a
Blocks 4-5 skipped3016.74%4.36%7.88%9.66%0%
Two per-block bridges3014.93%3.56%6.99%8.49%28%
One region bridge, 2.1M parameters3015.39%3.55%7.10%8.68%24%
One region bridge, 4.2M parameters3013.50%3.44%6.96%7.97%41%

The best bridge, with 4.2M parameters, reaches 7.97%, 2.45 points above the one-block student. Healing it with the four-block recipe improves the middle and late moments steadily, but the early moment gets worse after step 60:

Healing the 30-block student (blocks 4-5 removed): rate 3e-6, all three moments per step, fresh early examples; same columns as above
RunWider (50)EarlyMiddleLateCheck (10)
Untrained (bridge only)8.10%14.39%3.56%6.35%7.97%
Healed, step 60 (selected)7.41%13.76%3.35%5.12%7.97%
Healed, step 1208.15%16.46%3.18%4.82%9.19%
Healed, step 1807.84%15.48%3.16%4.88%8.29%
Healed, step 2407.98%16.28%3.09%4.58%7.69%

No 30-block student passes the 6.52% gate. The selected healed checkpoint, step 60, measures 7.41% on the wider prompts and 7.97% on the check prompts.

What the images show

The gate measures answer agreement, not pictures. So we generated the same 30 validation prompts with the teacher and four candidates: 25 prompts never used before, plus 5 text prompts. Every model got the same prompt, seed, size and 40 steps. A, B and C are the 30-block students, healed at steps 60 and 240 and bridge only. D is the healed 28-block student.

Text prompts: pass only if every requested phrase is readable and correctly spelled. A, B, C: 30 blocks (healed step 60, healed step 240, bridge only); D: 28 blocks
Requested textTeacherABCD
"GOLDEN RIVER" / "Live in Berlin"passpasspasspassfail
"Welcome Home"passpasspasspassfail
"Happy Birthday Emma"passpasspasspassfail
营业中passpasspasspassfail
"The Rusty Anchor" + small "Moonlight Motel" signpasspassfailfailfail
Passes5 / 55 / 54 / 54 / 50 / 5

Failures: D on "GOLDEN RIVER" / "Live in Berlin": "GOLDLEN RAVER"; D on "Welcome Home": "Wolome Home"; D on "Happy Birthday Emma": "Happy B'rday Emma"; D on 营业中: wrong first character; B on "The Rusty Anchor" + small "Moonlight Motel" sign: "The Rusty Anchar", sign has no text; C on "The Rusty Anchor" + small "Moonlight Motel" sign: sign has no text; D on "The Rusty Anchor" + small "Moonlight Motel" sign: "The Rusty Coit", sign has no text.

The tested 28-block student has visible failures. It draws wrong subjects, including a cat for a dog, an eye for a peacock feather and a harbour for a biplane, and it fails every text prompt. The 30-block students look comparable to the teacher in this screen. They often draw a different but valid composition. The healed step-60 student (A) rendered all five text prompts correctly, like the teacher, and is the strongest current research candidate.

The image review is a first screen by one unblinded reviewer (Claude), on 30 prompts with one seed each. It is not a blinded benchmark. Removing two of 32 blocks is a modest cut, and its actual speed gain has not been measured. Candidate A still fails the historical velocity gate; a larger blinded comparison remains required.

Candidate A under closer test: rejected

The plan was to use candidate A (blocks 4-5 replaced, 30 blocks) as the base for further pruning. Before building on it we measured three things: its image quality in a larger blinded test, its real speed, and which block could go next inside it. The blinded image test decided the question.

Blinded image test: candidate A loses to the teacher

Before viewing images we registered 159 fresh validation prompts (35 counting, 34 spatial, 30 color, 30 multiple-object, 30 text), one seed each, rendered by the teacher and A at 40 steps. Each image was scored pass, fail or uncertain against one fixed question, with left/right positions randomized and the identity key committed by hash and revealed only after all 318 scores were committed.

Blinded 159-prompt panel: clear passes for the teacher and candidate A
PanelTeacher passA passA betterA worseGate
Adherence (129)8978617gain -8.5 points, 95% CI -15.5 to -1.6; needs lower bound ≥ -5: fail
Text (30)2818010A must be within 1 of the teacher: fail

Candidate A is rejected as a base for further pruning. It fails both image gates as well as the velocity gate; only the speed gate passes. The earlier impression that A matched the teacher came from a small unblinded screen. Further pruning starts from the accepted one-block student.

One model-blind AI reviewer and one seed per prompt. The 10 and 50 validation prompts used for velocity are development data, not an untouched final test.

Measured speed of candidate A

30 balanced, randomized teacher/A pairs on one H100, 1024×1024, 40 steps, BF16, same prompts and seeds, warm models. Median end-to-end time: 21.91 s for the teacher and 20.58 s for A. Paired speedup 1.064× (bootstrap 95% CI 1.063-1.065). Peak allocated memory: 36.93 GiB vs 36.14 GiB.

Which block next inside A? The importance scan

A alone measures 7.49% on all 180 comparisons (7.40% on the 50 wider prompts and 7.97% on the 10 check prompts, reproducing the earlier 7.41% and 7.97%).

Candidate A scan: velocity error against the teacher with one extra block bypassed (lower is better); A alone measures 7.49%
BlockA + bypassEarlyMiddleLatep90
129.19%16.9%4.6%6.1%17.7%
139.41%17.8%4.5%5.9%18.3%
119.47%18.0%4.7%5.6%19.4%
149.50%17.5%4.7%6.3%19.1%
179.60%15.9%4.6%8.2%17.7%
169.62%16.1%5.0%7.8%17.4%
99.77%18.8%4.7%5.8%20.3%
89.79%18.5%4.9%6.0%20.3%
79.92%18.9%4.7%6.2%19.8%
69.97%18.8%4.8%6.4%19.2%
1510.00%17.6%4.9%7.5%19.3%
1010.13%19.8%4.9%5.7%21.7%
1810.90%16.3%5.4%11.0%17.7%
2011.51%15.2%5.9%13.4%16.9%
1911.70%16.9%8.1%10.0%18.2%
2511.71%15.9%5.7%13.5%17.6%
2611.80%18.1%5.3%11.9%19.7%
312.82%20.5%5.2%12.8%22.8%
2413.45%17.1%7.9%15.4%18.7%
2713.92%19.8%7.3%14.6%21.7%
2313.95%15.6%8.7%17.5%18.7%
2114.32%15.8%8.9%18.3%19.7%
2815.14%26.8%5.8%12.7%29.4%
215.77%21.9%6.0%19.4%24.6%
2216.22%16.1%8.6%23.9%25.1%
2917.31%31.8%7.1%13.0%34.4%
118.59%25.9%7.2%22.7%28.3%
3021.50%38.6%8.8%17.1%41.3%
31130.37%217.5%99.4%74.2%225.2%
0231.84%95.0%118.7%481.9%530.3%

Inside A, no single bypass stays within the gate. The gentlest, block 12, moves A from 7.49% to 9.19%. The middle blocks (6-17) cost least; blocks 0 and 31 cannot be skipped. A low bypass score only nominates a block for a learned bridge; it is not a removal.

Which block next? Importance measured inside the accepted student

The original ranking measured blocks in the intact teacher. After a cut, surviving blocks may compensate or become more redundant, so we measure again inside the smaller student. Each trial bypasses one surviving block, compares the prediction with the teacher on the same 60 development prompts at early, middle and late moments (180 comparisons), then restores the block. Bypasses never accumulate and no weight is updated. Before any trial, all 90 intact-teacher controls reproduced exactly and the student reproduced its saved predictions.

Because A is rejected, its scan describes a model we will not build on. The same scan is repeated inside candidate B: the accepted one-block student, 31 blocks plus the pretrained block-5 bridge. Block 4 is eligible again in B. Everything after this point starts from B.

Candidate B alone measures 5.40% against the teacher on these 180 comparisons (A: 7.49%). Each row adds one bypass to B; the last columns show the same block bypassed inside A.

Candidate B scan: velocity error against the teacher with one extra block bypassed (lower is better), next to the same bypass in candidate A
BlockB + bypassEarlyMiddleLateRank in AA + bypass
137.63%14.2%4.1%4.6%29.41%
127.75%14.7%4.1%4.4%19.19%
147.93%14.5%4.2%5.1%49.50%
177.96%12.2%4.1%7.6%59.60%
118.11%15.7%4.3%4.3%39.47%
98.27%16.3%4.1%4.4%79.77%
68.30%15.8%4.0%5.2%109.97%
168.30%13.6%4.4%6.8%69.62%
158.32%14.0%4.3%6.6%1110.00%
88.53%16.6%4.3%4.7%89.79%
78.54%16.6%4.0%5.1%99.92%
108.56%16.9%4.4%4.4%1210.13%
48.95%16.4%3.7%6.8%n/a (replaced)n/a
189.16%12.7%4.9%9.9%1310.90%
2610.02%13.9%4.9%11.4%1711.80%
2510.16%12.0%5.3%13.2%1611.71%
2010.46%12.3%5.4%13.6%1411.51%
1911.17%16.8%7.4%9.3%1511.70%
2411.99%13.3%7.6%15.1%1913.45%
312.01%19.4%4.4%12.3%1812.82%
2712.40%16.0%6.9%14.2%2013.92%
2312.90%12.6%8.4%17.7%2113.95%
2113.07%12.3%8.4%18.6%2214.32%
2813.76%24.1%5.4%11.8%2315.14%
214.46%19.5%5.0%18.9%2415.77%
2215.90%15.0%8.2%24.4%2516.22%
2916.38%29.9%6.8%12.4%2617.31%
117.44%23.7%6.6%22.1%2718.59%
3020.84%37.5%8.4%16.6%2821.50%
31127.98%211.5%98.3%74.1%29130.37%
0224.76%93.9%107.4%473.0%30231.84%

In B, the gentlest bypass is block 13: 5.40% → 7.63%. No single bypass stays within the 6.52% gate; any further removal needs a learned bridge. Top five in B: 13, 12, 14, 17, 11; in A: 12, 13, 11, 14, 17 (shared: 11, 12, 13, 14, 17).

Learned bridge for block 13: the velocity gates fail

Block 13 ranked first inside the accepted student, so we replaced it with a rank-256 bridge while keeping the block-5 bridge and every other weight frozen. Pass rules were committed before the run. The bridge was fitted to block 13’s own inputs and outputs captured inside the student: 60 training prompts at three moments plus 600 early training examples. The 10 check prompts were used only to choose the checkpoint. The fit worked on its own terms: the hidden-state objective fell from 0.0294 (plain skip) to 0.0182, a 38% reduction.

Candidate C (blocks 5 and 13 bridged, 30 blocks): velocity error against the teacher and the preregistered limits
MeasureCLimitResult
Check prompts (10)7.37%6.52%fail
Wider prompts (50)7.39%6.37%fail
Early moment13.53%12.01%fail
Middle moment4.08%4.57%pass
Late moment4.55%5.61%pass
90th percentile15.66%13.62%fail
Worst comparison24.33%27.93%pass
Skip penalty removed (check prompts)10%50%fail

Qualitative image check. Because the teacher is not a perfect reference, we also rendered the teacher, B and C on the 30 earlier Phase 7 prompts with matched seeds (the regenerated teacher images matched the earlier renders byte for byte) and judged each image against its prompt. C was worse than B on 15 prompts, similar on 13 and better on 2. The failures appear at unchanged composition: hair smearing into the jaw, circuit-board traces dissolving, an incoherent house cross-section, misspelled signs (“Happy Birtliday Emma”, “The Rusty Achor”) where B is exact, and a missing alarm clock. B stays close to the teacher.

Unblinded review by an AI visual reviewer, one seed per prompt; a screen, not a benchmark.

Candidate C fails the velocity gates; it is not promoted and no images or timings were produced for it. Skipping block 13 gives 7.56% on the check prompts; the bridge brings it only to 7.37%, against 5.52% for the accepted student. Middle and late moments stay within limits; the early moment does not. A likely reason: the bridge acts on each token separately, so it cannot reproduce the cross-token attention a mid-network block performs, and most of the damage of removing block 13 remains.

Better bridges for block 13: conditioning helps, attention helps more

Every real block receives the model’s shared timestep modulation (scale and gate values that tell it how noisy the image is); the first bridge ignored it, and its errors were worst at early, high-noise steps. We fitted three variants on identical data: a 4× wider plain bridge, and a bridge that mirrors a block’s MLP branch, h + tanh(gate) · MLP(LN(h) · (1 + scale)), with scale and gate learned mixes of the model’s own modulation, at rank 256 and 1024.

Block-13 bridge variants inside B: velocity error against the teacher (B with block 13 kept: 5.40% overall)
BridgeParametersOverallCheck (10)Wider (50)Early / middle / late
Plain, rank 256 (first bridge)2.1M7.39%7.37%7.39%13.5% / 4.1% / 4.6%
Plain, rank 10248.4M7.35%7.20%7.39%13.5% / 4.1% / 4.5%
Timestep-conditioned, rank 2562.1M7.02%7.26%6.98%12.7% / 3.9% / 4.5%
Timestep-conditioned, rank 10248.4M6.77%7.26%6.68%12.4% / 3.7% / 4.2%
+ attention branch, trained on the final output16.8M6.42%7.10%6.29%11.8% / 3.6% / 3.9%
Same, trained on the final output (no gain; best at its start)8.4M6.72%7.21%6.62%12.3% / 3.7% / 4.2%
+ 150 recorded text prompts, 600 more updates16.8M6.25%6.42%6.21%11.3% / 3.6% / 3.9%
8 attention heads, 450 recorded text prompts25.2M6.11%6.27%6.08%10.9% / 3.5% / 3.9%
Conditioned rank 1024, 3,000 updates8.4M6.72%7.20%6.62%12.3% / 3.7% / 4.2%
Conditioned rank 1024 + 3×3 local mixing, 3,000 updates8.4M6.74%7.24%6.64%12.4% / 3.7% / 4.2%

Capacity alone does nothing; conditioning does. The conditioned rank-1024 bridge recovers about a third of the gap between the first bridge and B on the wider prompts. Training three times longer, or adding 3×3 local mixing over the image-token grid, moves the error by only about 0.05 points: the per-token fitting objective has reached its ceiling. Training the same bridge on the final velocity instead (gradients through the frozen blocks 14-31) did not help either. Adding a small attention branch (4 heads, image tokens attending to the prompt and to each other, with its own prefix cache) and training it on the final velocity gave the first clear step: 6.42% overall and 6.29% on the wider prompts, still improving when training stopped. Continuing it on 200 newly recorded training prompts, 150 of them text, brought it to 6.25% overall and 6.21% on the wider prompts, and cut its single worst comparison from about 26% to 18.5% (B: 17.9%). Growing the attention branch to 8 heads and training on 450 text prompts reached 6.11% overall and 6.08% on the wider prompts, 0.7 points from B.

Inside the attention bridge

The best bridge for block 13 is a miniature block: modulated attention followed by a modulated MLP, the same structure as the original, with a quarter of the attention heads and a much narrower MLP. Its attention output starts at zero, so a fresh attention branch leaves the conditioned MLP bridge unchanged.

The attention bridge for block 13
Inputs: hidden states, timestep modulation, positions and a prefix cache. An attention branch with 8 heads updates image tokens; a conditioned MLP branch updates all tokens. About 25.2 million weights.
RoPE: position as a rotation
One pair of query numbers drawn as an arrow, rotated by position times a fixed frequency; the attention score depends only on the distance between tokens; pairs turn at different speeds; in images some pairs follow the row and others the column.

Timestep modulation: scale and gate. At every step the model turns the timestep into one vector shared by all blocks: [scale1, gate1, scale2, gate2], 4 × 4,096 numbers. A real block multiplies its normalised input by (1 + scale), which turns each channel up or down for this noise level, and its output by tanh(gate), which decides how much of the update to add. The bridge learns per-channel mixes of these same values (about 25,000 weights) and starts exactly like a real block: scale_attn = scale1, gate_attn = gate1, scale_mlp = scale2, gate_mlp = gate2. Prompt tokens use the row for a clean image (t = 0), as in the model.

Heads: 4,096 → 1,024 = 8 × 128. Each token’s query, key and value are projected to 1,024 numbers and split into 8 heads of 128. Each head compares tokens in its own 128-number space, so different heads can attend to different things; their outputs are joined and projected back to 4,096. The original block has 32 such heads. The bridge keeps 128 per head, because the model’s position code is built for that size, and saves cost with fewer heads.

RMSNorm on Q and K. Before comparing tokens, each 128-number query and key is rescaled to a standard length, x / √mean(x²), times learned weights. An attention score is a dot product; without this, a few large vectors can make scores explode and the softmax lock onto one token. The original blocks do the same.

RoPE: position as a rotation. On its own, attention does not know where a token is: shuffle the tokens and the scores do not change. RoPE pairs up each head’s 128 numbers into 64 two-dimensional pairs and rotates every pair by angle = position × frequency. Two patches showing the same letter at different places get the same arrows pointing in different directions. When a rotated query meets a rotated key, their score depends only on the difference of the angles, that is, on how far apart the two tokens are, so a head can learn “look at the patch just to my right” once and use it anywhere in the image. Nothing about the rotation is learned: frequency = 1 / 10000^(2i/d) per pair, fast for some pairs (neighbours) and slow for others (coarse layout), like the hands of a clock. In Qwen-Image 2.1 the 64 pairs are split by axis: 8 follow the image or text segment, 28 the row and 28 the column; image tokens get a (row, column) on their grid, centred at zero, and prompt tokens advance one step per word. The angles are precomputed once as a table. RoPE is applied to Q and K only, after RMSNorm; V, the content being passed along, is not rotated. This is why the attention bridge can help spelling: to write “Anchor”, the patch for “c” must know that “n” is just left of it and “h” just right.

Why rotations rather than classic position embeddings? The classic approach adds a learned (or fixed sinusoidal) vector for each absolute position to every token once, at the input. RoPE differs in four ways that matter here. (1) Relative by construction: the score depends exactly on the offset between two tokens, so a pattern learned in one corner works everywhere; with absolute vectors the model has to infer offsets indirectly. (2) Applied in every attention layer, directly to queries and keys, so position information cannot fade as it travels through 32 blocks, and it never mixes into the content passed in V. (3) Any grid size: the formula works for any number of rows and columns, which suits a model that renders 1024×1024, 1376×768 or 896×1184 images; a learned table only covers the sizes it was trained on. (4) No extra weights, and two-dimensional by simply splitting the pairs between rows and columns. RoPE is not perfect: positions far beyond the trained range still behave worse, but it has become the standard choice in modern diffusion transformers.

The two bridges and the block they replace
Rank-256 bridge (block 5)Attention bridge (block 13)Original block 13
Looks at other tokensnoyes, 8 heads × 128yes, 32 heads × 128
Knows the timestepnoyes (scale, gate)yes (scale, gate)
Token positionsnoyes (RoPE)yes (RoPE)
Prompt key/value cachenoyes, own slotyes
MLP4,096 → 256 → 4,096, GELU4,096 → 1,024 → 4,096, GELU, conditioned4,096 → 12,288 → 4,096, SwiGLU
Weights2.1M25.2M218.1M

Images. On the same 30 prompts and seeds, the conditioned rank-1024 bridge was worse than B on 8 prompts, similar on 20 and better on 2, against 15 worse for the first bridge. It fixes the hair smearing, spells “Happy Birthday Emma” correctly, keeps the alarm clock and one clean pair of glasses, and stops duplicating the pot. It does not recover fine local detail (lace and circuit board, the peacock eye, the star), the bent spoon or the melting clocks, and “The Rusty Anchor” is still misspelled.

Unblinded AI visual review, two reviewers, one seed per prompt; reviewers were not fully consistent, so column-by-column comparisons within a sheet are the reliable signal.

Is the misspelling systematic? Four seeds per text prompt

One seed per prompt cannot separate a real loss from bad luck, so we rendered every text prompt with three more seeds for the teacher, B and the best bridge (conditioned rank 1024, 3,000 updates) and counted exact spellings.

Exactly spelled signs out of four seeds
TextTeacherBC (best bridge)
The Rusty Anchor4/43/40/4
Moonlight Motel3/43/41/4
Happy Birthday Emma4/43/41/4
Welcome Home4/44/43/4
GOLDEN RIVER4/44/44/4
Live in Berlin3/43/44/4
营业中4/44/44/4

The loss is systematic. Without block 13 the model loses the spelling of longer, less common Latin words (“The Rusty Achor”, “Happy Bithday Enna”, “MonLght Motel”), while short or common phrases and Chinese survive. The earlier correct “Emma” was seed luck. A bridge that sees neither the prompt nor neighbouring letters cannot carry this; the next candidate adds a small attention layer.

The attention bridge spells “The Rusty Anchor” on one seed

On the original seed, every earlier bridge wrote “The Rusty Achor”. The attention bridge is the first to write the sign correctly, like the teacher and B. Across four seeds, however, it is right once (B: three times), so attention moves spelling in the right direction without restoring it.

The Rusty Anchor sign, seed 0: teacher, B and attention bridge correct; first and conditioned bridges write Achor
Seed 0, same prompt and noise for every model | teacher, B and the attention bridge write “Anchor”; both per-token bridges write “Achor”
B versus the attention bridge on four seeds: B correct three times, the attention bridge once
Four seeds, B (top) and the attention bridge (bottom) | B 3/4 correct; attention bridge 1/4 (“Achar”, “Ancher”, garbled)
Exactly spelled signs out of four seeds, by bridge
TextTeacherBPer-token (cond r1024)Attention+ 150 text prompts8 heads + 450 text prompts
The Rusty Anchor4/43/40/41/41/41/4
Happy Birthday Emma4/43/41/41/42/42/4
Moonlight Motel3/43/41/42/42/43/4
All three11/129/122/124/125/126/12

Spelling recovers step by step, then plateaus below B. More text data and a larger attention branch kept improving velocity (6.11% overall) but brought exact signs only from 5/12 to 6/12, against 9/12 for B. The rule registered before this last run said that 6/12 or fewer means a bridge alone does not carry spelling. Strategy change: choose and bridge the four blocks with this recipe, then heal the whole 28-block student on text-rich data, instead of perfecting each bridge on its own.

Healing the whole student does not bring spelling back

If one bridge cannot carry block 13, perhaps the rest of the network can adapt around it. We healed the two-bridge student (blocks 5 and 13 removed) with LoRA adapters (rank 16) on the attention of all 30 remaining blocks, the bridges trainable too, on the saved recordings (450 text prompts). A first run with a higher learning rate made the velocity worse at every evaluation and kept only its best-velocity checkpoint, so its spelling could not be checked; it was stopped. The second run saved every checkpoint and judged each by both tests: velocity on 180 comparisons (quantitative) and exact spelling of three signs over four seeds (qualitative).

Gentle LoRA healing: velocity and spelling at every checkpoint (teacher 11/12, B 9/12 exact signs)
CheckpointOverall velocityWider (50)Exact signs
step 0 (C, no healing)6.11%6.08%6/12
step 506.11%6.06%5-6/12
step 1006.06%6.00%6/12
step 1506.04%5.98%~7/12
step 2006.19%6.13%6-7/12

Healing moves velocity slightly and spelling hardly at all. The same seeds keep failing the same way at every step (“Achar”, “Acher”; “Cnna”, “Enna”). By the rule registered beforehand (8/12 or more), healing does not recover spelling. Removing block 13 takes something the model needs for spelling. The next step changes which blocks are removed: a text-aware scan measures what each block costs on text prompts, not on average velocity.

Is it block 13, or block 13 on top of a weak block-5 bridge?

B already spells a little worse than the teacher, and its block-5 bridge is the simplest one. Errors could compound. To separate the two, block 13 was removed from the intact teacher (block 5 kept): once as a plain skip and once with the best block-13 bridge.

Exactly spelled signs out of four seeds
TextTeacherBC (5 + 13)Teacher − 13 (skip)Teacher − 13 (bridge)
The Rusty Anchor43121
Happy Birthday Emma43222
Moonlight Motel333~1~1-2
Total / 121196~5~4-5

Block 13 breaks spelling on its own. Without it, even the intact teacher drops to about 5/12, with the same errors (“Achor”, “Enna”). The block-5 bridge costs much less (11 → 9). Which blocks are removed matters more than how they are replaced, so the next cut is chosen by measuring what each block costs on text prompts.

Choosing the next block by spelling

A scan skipped each block of B and measured velocity on 80 saved text prompts. It filters overall damage but cannot see spelling: block 13, which breaks it, sits mid-table, because letters are a tiny fraction of the pixels. So the five blocks with the lowest velocity cost and not next to block 5 (17, 25, 20, 18, 16) were each skipped inside B and rendered on the text prompts with four seeds. Block 25 ranked second only after the first images had been launched; it was added afterwards, as recorded in a dated addendum.

Exactly spelled signs out of four seeds, with one block skipped inside B (no bridge)
TextTeacherBTeacher − 13B − 17B − 20B − 18B − 16B − 25
The Rusty Anchor43234321
Happy Birthday Emma4323-44334
Moonlight Motel33~1~2~2-3~1~2-3~2
Total / 12119~5~8~10-11~7~7-8~7

Block 20 keeps spelling. Skipped with no bridge at all, the student writes both long signs correctly on every seed, at the level of B or better; block 17 also holds up well. Blocks 20 and 13 cost about the same by velocity, yet one keeps spelling and the other breaks it. Block 25 shows a systematic error of its own (“Anchar”).

Removing the chosen blocks together

Blocks 20 and 17 each keep spelling when skipped alone. Removals can compound, so combinations were skipped together inside B, with no new bridges, and judged by velocity on 180 comparisons and by the four-seed text grid.

Skipped-block combinations inside B: velocity and spelling
RemovedBlocksOverall velocityEarly / middle / lateExact signs
5 (B)315.40%10.0 / 2.6 / 3.69/12
5, 203010.46%12.3 / 5.4 / 13.6~11/12
5, 20, 172912.64%15.2 / 6.6 / 16.1~6/12
5, 20, 17, 252815.17%17.1 / 8.2 / 20.1~5/12
5, 20, 17, 162815.63%20.3 / 7.7 / 18.9~0/12

Removing 5 and 20 keeps spelling at teacher level, with no bridge for 20. Its velocity error doubles, almost entirely at the last denoising moment: block 20 refines detail after the letters have formed. The two tests disagree, so general images decide next. Removals compound: 17 keeps spelling alone but not on top of 20, and four blocks skipped without bridges break text, completely when 16 sits next to 17.

General images with 5 and 20 removed. On the 30 standard prompts it is worse than B on 9, similar on 20 and better on 1. Fine detail and texture are intact (lace, circuit board, skin, hair). The losses are mid-scale structure: a checkerboard breaks apart, simple solids lose their geometry, an alarm clock disappears, crowded scenes and figures lose coherence, and one letter is malformed (so about 10/12 exact signs). The first block-13 bridge was worse on 15 of these prompts and the best per-token one on 8: removing 20 with no bridge already matches the best block-13 bridge on general quality while keeping spelling. A bridge for block 20 is the next step.

A bridge for block 20

Block 20 got the recipe that worked best for block 13 (timestep-conditioned MLP plus an 8-head attention branch, trained end to end on 450 text and general recordings), starting from “skip block 20”. Every 100 updates it was saved and measured; two checkpoints were rendered on the 30 standard prompts and the four-seed text grid.

Blocks 5 and 20 removed: velocity, spelling and general quality
Block 20Overall velocityExact signsWorse than B (of 30)
no bridge for 2010.46%~10/129
bridge, step 2007.92%~11/127
bridge, step 6007.76%~10/125

Step 600 is chosen. It keeps spelling above B and restores most of the structure lost without a bridge: simple solids, the four friends, the cyclist, the melting clocks. A missing alarm clock and some clutter remain. The block-5 bridge was then rebuilt with the same recipe, with this block-20 bridge frozen in place.

A new bridge for block 5

Block 5 had kept its first bridge, a plain rank-256 bottleneck fitted per token in Phase 5. It was rebuilt with exactly the architecture and training of the block-20 bridge (timestep-conditioned rank-1024 MLP plus an 8-head attention branch with its own prefix cache, about 25.2 million weights, trained end to end against the teacher velocity for 600 updates), with the block-20 bridge (step 600) frozen. Every 100 updates the bridge was saved, measured on 180 velocity comparisons, and rendered on the four-seed text grid; the best spelling checkpoint was also rendered on the 25 general prompts.

Blocks 5 and 20 removed, block-20 bridge fixed: which block-5 bridge
Block 5Overall velocityExact signs (of 11 legible)
old rank-256 bridge (2.1M weights)7.76%9
new bridge, step 1008.09%9
new bridge, step 2008.09%10
new bridge, step 3008.06%8
new bridge, step 4008.11%9
new bridge, step 5008.20%6
new bridge, step 6007.93%7
The Rusty Anchor, four seeds: teacher, B, old block-5 bridge (seed 0 Anchar) and new block-5 bridge at step 200 (all correct)
The Rusty Anchor, four seeds | the old block-5 bridge writes “Anchar” in seed 0; the new bridge at step 200 spells all four headlines but adds a garbled second plaque in seed 3
GOLDEN RIVER poster, four seeds: the new bridge writes the tagline Live in Berlin legibly in seed 0
Poster, four seeds | the new bridge writes the tagline “Live in Berlin” in seed 0, which the old bridge garbles

Decision: the new block-5 bridge at step 200 replaces the old one. It spells one more sign (10 of 11 against 9; the seed-2 motel plaque is cut off by the frame in every row) and writes the poster tagline, while on the 25 general prompts it is indistinguishable from the old bridge. Its velocity is 0.3 points worse, but velocity cannot see letters: the checkpoint with the best velocity (step 600) is among the worst at spelling. The extra 23 million weights are about 0.3% of the model. One sign over four seeds is close to noise, so the next text grids will show whether the gain holds.

The 30-block student is B plus both attention bridges (block 5 at step 200, block 20 at step 600).

The 30-block student before healing, and after healing with the LoRA fused
Left: 32 slots, 30 original blocks plus attention bridges in slots 5 and 20. Middle: healing trains a rank-16 LoRA on q, k, v and out of the 30 blocks together with both bridges, then merges each LoRA into its weight matrix, W prime equals W plus B times A. Right: the same slots with fused blocks and fine-tuned bridges and no extra weights.

Healing the 30-block student

A rank-16 LoRA on q, k, v and out of the 30 original blocks (15.7 million weights, learning rate 2e-5) was trained together with both bridges (learning rate 1e-5) against the teacher velocity, on 450 text and 50 general recordings plus the original training data, for 200 updates. Every 50 updates the student was saved, measured on the 180 velocity comparisons, and rendered on the four-seed text grid.

Healing the 30-block student: velocity and spelling
CheckpointOverall velocityAnchor / Emma / MotelExact signs (of 11)
unhealed8.09%4 / 4 / 210
healed, step 508.01%4 / 4 / 19
healed, step 1007.97%4 / 4 / 19
healed, step 1507.90%2 / 4 / 17
healed, step 2007.84%4 / 3 / 29

Healing improves velocity, not spelling. Velocity falls steadily, from 8.09% to 7.84%, and was still falling at step 200. Spelling does not follow: every healed checkpoint is one to three signs below the unhealed student, with no trend, and the poster, banner and handwritten note do not change. As with block 13, a gentle LoRA trained on velocity does not teach letters back.

Version 1: two blocks removed

The plan changes. The first release removes two blocks (5 and 20) instead of four. Its base is the unhealed 30-block student, the best speller; the healed checkpoint at step 200 is kept as a backup. Next, a speed-distillation (lightning) LoRA takes sampling from 40 steps to 8, about five times faster, since the model already runs without classifier-free guidance. Every checkpoint is judged by velocity, by the text grids and by general images, and the chosen one is fused into the weights. Quantization follows, judged the same way. Removing blocks three and four may come in a later version.

Few steps without distillation, and a published lightning LoRA

Before training our own speed LoRA, the intact teacher was sampled with the same prompts and seeds as every earlier grid in 8 and 4 steps without any LoRA, and in 4 steps with the LightX2V Lightning LoRA for Qwen-Image 2.1 (a published distribution-matching distillation, rank 16 on attention, used here for comparison only; it is not reused).

Few-step baselines on the teacher
VariantExact signs (of 12)PSNR to the 40-step imageSeconds per image
teacher, 40 steps11referenceabout 6.9
teacher, 8 steps, no LoRA015.1 dB1.53
teacher, 4 steps, no LoRA014.1 dB0.86
teacher + LightX2V LoRA, 4 steps911.8 dB0.87
The Rusty Anchor, four seeds: teacher at 40 steps, smeared at 8 steps, no image at 4 steps, LightX2V clean but Acchor three times
The Rusty Anchor, four seeds | without distillation 8 steps smear and 4 steps give no image; the LightX2V LoRA is clean and sharp but writes “Acchor” in three of four seeds

Distillation is required, and it costs letters even when done well. The published 4-step LoRA spells Emma and the motel sign but misspells the Rusty Anchor three times, so our own training data is mostly text (450 of 500 prompts). It also has the cleanest images and the lowest PSNR: it reproduces the teacher’s kind of image, not the teacher’s image for the same noise, so distance to the teacher is not a quality score on its own. Spelling and the images remain the judges.

What removing two blocks buys

Batch 1 at 1024 by 1024 on one H100, each component timed separately. The transformer is almost all the time: text encoding takes 0.03 s and VAE decoding 0.13 s per image. The transformer shrinks from 7.12 to 6.73 billion weights (14.2 to 13.6 GB), but the untouched text encoder holds 17.5 GB, so memory falls by only 0.7 GB.

Time per denoising step and per slot (milliseconds)
ModelTransformer stepSlot 5 (block or bridge)Peak memory (GB)
teacher (32 blocks)1655.0 (real block)39.6
version 1, FP32 bridges1728.838.9
version 1, BF16 bridges1592.238.9

The bridges had to run in BF16. Kept in FP32 from training, each bridge cost 1.75 times a real block and made version 1 slower than the teacher. In BF16 a bridge costs less than half a block and version 1 is about 4% faster per step, as expected from removing 2 of 32 blocks, with nearly identical images (one small sign flips). The large gain is still to come from step distillation: 40 steps take 6.9 s per image, 8 steps about 1.5 s. Memory will fall with quantization.

Our own lightning LoRAs

Method: trajectory distillation. The intact teacher (32 blocks, 40 steps) was run on 500 training prompts (450 with text) and 45 held-out prompts, saving the latent after every step: 545 trajectories, 11.9 GB. The student’s 8 (or 4) steps are exact subsets of the teacher’s 40-step schedule. Starting from a teacher latent, one student step is trained to land where 5 (or 10) teacher steps land. A rank-32 LoRA on the attention of the 30 blocks of version 1 learns it (31.5 million weights; the BF16 bridges stay frozen). Every 500 updates the LoRA is saved and judged by the distance between its final latent and the teacher’s 40-step final latent for the same noise, and by the same 45 images.

Text distance to the teacher’s 40-step result, by update (lower is closer)
Run0500100015002000
8 steps38.9%35.8%35.5%37.9%39.2%
4 steps48.0%43.5%35.0%34.8%33.8%
8 steps, continued from 1500, letters weighted37.9%34.6%33.3%31.6%31.9%

The 8-step LoRA learned the teacher’s layouts and most letters within 500 updates and then stopped improving. The 4-step LoRA learned the layouts but stayed soft and grey: copying the teacher’s path averages at 4 steps, which distribution matching (the published LightX2V LoRA) avoids. The rest of this section is about 8 steps.

Making the loss see letters: OCR text regions

A misspelled sign hardly changes the loss: letters cover a few percent of the latent, and every token counts the same. So the loss was told where the letters are. Each teacher training image (its trajectory’s final latent, decoded by the VAE exactly as the pipeline does) was read by an off-the-shelf OCR detector (EasyOCR, Chinese and English). Each detected word box was mapped onto the latent token grid, where one token covers 16 by 16 pixels, and widened by one token. Those tokens then count 10 times in the loss: an error on a letter costs ten times an error on a wall. Only the boxes are used, not what the OCR reads, so a misread word still marks the right place. Text was found in 370 of the 450 text images, covering a median 12% of their tokens (and in 3 of the 50 general images).

Six teacher training images with the text tokens outlined in red. Found: a Chinese restaurant sign with a small English line, a Back in 5 Minutes shop sign, every word of a banner, a Quiet Please sign and a small card in a window. Missed: HOTEL written in sand, and large 3D Chinese characters on a blue sign.
Where the loss now looks hardest | red squares are the tokens weighted 10 times; stylized lettering (sand, puffy 3D letters, large carved characters) is sometimes missed and keeps weight 1

The best 8-step checkpoint was continued for 2000 updates with these weights, a learning rate decaying to zero and 2 examples per update.

Spelling, four seeds each (16 items)
ModelRusty AnchorEmmaPoster taglineHandwritten noteTotal
teacher, 40 steps444416
version 1, 40 steps443415
LightX2V on the teacher, 4 steps144413
ours, 8 steps, before weighting (step 1500)332311
ours, 8 steps, letters weighted (+2000)243312
Happy Birthday Emma, four seeds: the letter-weighted 8-step LoRA spells all four
Happy Birthday Emma | with letters weighted, all four seeds are right
The Rusty Anchor, four seeds: seeds 1 and 2 right, seeds 0 and 3 still wrong at every checkpoint
The Rusty Anchor | seeds 1 and 2 are right; seeds 0 and 3 stay wrong at every checkpoint

Weighting letters helped, modestly. The text distance fell from 37.9% to 31.6–31.9%, the best of any run; Emma became right in all four seeds and the poster tagline more reliable, from 11 to 12 of 16 items. It did not fix the hardest sign, and it stays below version 1 at 40 steps (15 of 16).

The main issue: structure

Averages hide it. On the 25 general prompts the 8-step LoRA is as close to the teacher as version 1 at 40 steps (median PSNR 17.7 against 17.8 dB; 8 steps without the LoRA, 15.0 dB), and weighting letters did not change its general images. But side by side with version 1 at 40 steps, 5 of the 25 images are clearly worse, and textures are slightly softer:

Five prompts, teacher, version 1 at 40 steps and ours at 8 steps: the checkerboard plate breaks up, the white star becomes a blob, four friends become a crowd, the cyclist turns semi-transparent, the alarm clock disappears
Five structure failures at 8 steps | teacher, version 1 at 40 steps, ours at 8 steps

All 25 general prompts side by side: teacher | version 1 at 40 steps | ours at 8 steps.

Why, and what next. These look like averaging: blobs, ghosts and merged figures. The LoRA is asked to reach the 32-block teacher’s images, which version 1 cannot draw even in 40 steps, so it settles between the two; and only 50 of its 500 training prompts were general. The next run records version 1’s own 40-step trajectories on 500 text and 500 general prompts and trains a fresh 8-step LoRA on them, with letters weighted as here, so it only has to compress steps; its ceiling is version 1 at 40 steps.

Learning from version 1’s own images

Version 1 recorded its own 40-step trajectories (BF16 bridges, as it ships) on 1000 training prompts, now balanced: 500 with text and 500 general, drawn from the Phase 1 training split across 38 subjects and checked against the held-out prompts (1045 trajectories with the 45 held-out ones). OCR found text in 406 of the 500 text images. A fresh 8-step LoRA was trained on them from zero, with letters weighted 10 times and a decaying learning rate. Its targets are now images version 1 can actually draw, so its ceiling is version 1 at 40 steps.

Distance to version 1 at 40 steps (its target) and to the teacher, by update
UpdateAll 45TextGeneralTeacher, all
0 (8 steps, no LoRA)38.5%38.3%38.7%41.5%
50029.2%29.5%28.9%36.7%
100029.5%28.4%30.4%36.7%
150029.2%29.1%29.3%36.3%
200027.6%26.9%28.1%34.6%
Spelling, four seeds each (16 items)
ModelRusty AnchorEmmaPoster taglineHandwritten noteTotal
version 1, 40 steps443415
8 steps, teacher targets (+2000)243312
8 steps, version 1 targets, update 1000423413
8 steps, version 1 targets, update 1500334313
The Rusty Anchor, four seeds: version 1 at 40 steps, the earlier 8-step LoRA, and the new one at updates 500, 1000 and 1500; the new one spells all four at update 1000
The Rusty Anchor | learning from version 1’s images, the 8-step LoRA spells all four seeds at update 1000; with teacher targets it never passed two

Structure. Against version 1 at 40 steps, 20 of the 25 general images match closely; 5 are clearly worse. The four friends are now right, but a new case appeared (the laptop lighting a face disappears), so the count stays at 5: the checkerboard pattern, the star’s outline, the semi-transparent cyclist, the missing alarm clock and the missing laptop. They are not random: precise geometry, a small object the image depends on, or a thin subject. These five did not change between updates 500 and 2000.

The 25 general prompts in pairs: version 1 at 40 steps and the new 8-step LoRA at update 2000
All 25 general prompts | version 1 at 40 steps (left) and the new 8-step LoRA at update 2000 (right)

Where the failures are made: a drift test

If the student’s first jump lands slightly off, the later steps may never recover. On the five failure prompts the 8-step LoRA was started not from noise but from version 1’s own latent after 5, 10 or 20 of its 40 steps.

Distance to version 1 at 40 steps, by starting point
PromptFrom noiseFrom step 5From step 10From step 20
Checkerboard plate31.8%12.5%7.3%2.4%
White star28.5%3.1%2.1%1.2%
Four friends24.0%6.7%2.9%1.9%
Cyclist39.4%10.8%5.5%1.8%
Alarm clock39.9%12.2%3.2%1.7%
Five failure prompts: version 1 at 40 steps, our 8-step LoRA from noise (broken), and from version 1 step 5, 10 and 20 (all right)
The first jump is the whole problem | from version 1’s step 5 the checkerboard is regular, the star is a star, the cyclist is solid and the clock is there

The structure failures are made entirely in the first jump, from noise to step 5 of 40, where the layout is decided. The LoRA does the other seven jumps well. That suggests a fix without training: let version 1 itself take the start in a few small steps, then hand over to the LoRA.

A gentler start

Version 1 takes the start from noise to step 5 of 40 in a few small Euler steps of its own schedule, then the LoRA does the seven big jumps. Two variants: with the LoRA switched off for the start (which needs the LoRA kept separate), and with it on throughout (what a single model with the LoRA fused into its weights does).

Median distance to version 1 at 40 steps, all 45 held-out images
Model calls (start steps)LoRA off for the startLoRA fused
8 (1 start step)37.7%25.8%
9 (2)23.1%26.2%
10 (3)14.5%29.1%
12 (5)7.7%34.7%
Checkerboard, star, laptop, four friends, cyclist, alarm clock, Rusty Anchor, Emma, handwritten note: version 1 at 40 steps, then 10 and 12 steps with the LoRA off for the start and fused
Version 1 at 40 steps, then 10 and 12 steps, LoRA off for the start or fused | off reproduces version 1; fused draws different but clean images

With the LoRA off for the start, 12 steps reproduce version 1 almost exactly (7.7%). Fused, the distance looks worse, but the images are not broken: the start drifts to a different composition and every step stays clean, so the star, cyclist, alarm clock and checkerboard come out sharp. Distance cannot tell a different good image from a broken one. A separate LoRA was ruled out, so the fused route was scored in full.

Spelling, four seeds each (16 items)
ModelStepsCorrect
teacher4016
version 14015
version 1, fused, uneven schedule1215
version 1, fused, uneven schedule1014
version 1, 8-step LoRA from noise813
LightX2V on the teacher413
The Rusty Anchor, four seeds: version 1 at 40 steps, fused at 10 and 12 steps
The Rusty Anchor | version 1 at 40 steps, fused at 10 and 12 steps
The 25 general prompts as triplets: version 1 at 40 steps, fused at 10 steps, fused at 12 steps
All 25 general prompts | version 1 at 40, fused 10, fused 12

Version 1 ships fused, at 10 steps: 4 times faster than 40, 14 of 16 spelling items (version 1 itself 15), and 2 of 25 general images clearly wrong (a laptop missing, five friends instead of four) instead of 5. 12 steps gains one sign and no structure.

How version 1 is run

The LoRA is fused into the weights (W + B·A in 120 attention layers), so the model is a single checkpoint. The 10-step schedule is points 0, 1, 3, 5, 10, 15, 20, 25, 30 and 35 of the stock 40-step schedule for the image size, then the end. The stock scheduler cannot produce it on its own, and passing those values naively would shift and stretch them a second time. Two ways to run it:

A · scheduler class
A small scheduler that builds the stock 40-step schedule for the image size and keeps those ten points; the reference implementation, shipped with the model.
B · plain sigmas
A helper returns the ten values for a width and height; they are passed as sigmas to the stock pipeline with a neutral scheduler (no shift, no terminal stretch). Works in diffusers as is, and in ComfyUI and other interfaces through a custom-sigmas input.
shipping
Both routes ship as files next to the weights: nihonga.py (the bridge modules, the loader, the scheduler class and the sigma helper) and sigmas.json (the ten values for each standard image size, for interfaces without code).

Nihonga v1

The release checkpoint uses the adapter of update 2500 (15 of 16 spelling items at 10 steps, against 14 for update 2000). Built in the shipping format, the transformer was reloaded through the shipped code with every tensor identical; the scheduler class and the plain sigmas used exactly the intended schedule and give pixel-identical images.

Qwen-Image-2.1 and Nihonga v1
Qwen-Image-2.1Nihonga v1
Transformer blocks3230 + 2 bridges
Transformer parameters7.115 B (14.2 GB)6.729 B (13.5 GB)
Sampling steps4010
Time per 1024 × 1024 image, one H1006.89 s1.75 s
Peak GPU memory39.6 GB39.3 GB
Spelling, 16 hard items1615
General images unlike the 40-step pruned model–2 of 25

3.9 times faster, the original’s spelling level less one item. Pruning gives a small part of the speed (about 4% per step); the 10-step schedule gives the rest. Memory hardly changes, because the unchanged text encoder holds 17.5 GB; that is for quantization, which is not part of v1. Nihonga v1 makes text-to-image only: editing, reference images and transparency were not trained or tested. It is a derivative of Qwen-Image-2.1 under the Qwen Research License, for non-commercial use, distributed as the modified transformer plus code, with the text encoder and VAE loaded from the original.

The research record

What is complete, what remains open

Phase 0
Architecture inspected: 32 blocks and 4,096-wide hidden states.
Phase 1
20k prompt pilot serialized, with a 100k template pool and fixed split assignments.
Phase 2
Original-model images, judged baseline, repeatability analysis and H100 efficiency measurements saved.
Phase 3
Layer diagnostics and identity-bypass image pilots; blocks 2–5 retained as learned-replacement candidates.
Phase 4
Residual bottleneck bridges implemented and insertion checked.
Phase 5
Four independent bridge-pretraining pilots completed; checkpoints and optimizer states saved.
Phase 6
Repeatable teacher contract verified; bridge and full-student healing pilots saved. The 120-update continuation was compared on an untouched 20-prompt fixed-input test, an 11-prompt five-way comparison, 16- and 45-prompt text reviews, and a blinded 129-prompt adherence test. Complete: the pretrained bridge is selected; update 120 (86 vs 83 clear passes, +2.3 points, 95% CI [0.0, 5.4]) missed the predeclared promotion bar; after correcting one reversed blind score (the hidden giraffe) it is 85 vs 84, +0.8 points.
Phase 7
In progress. Removing blocks 2-5 (28 blocks) failed even after healing: 13.2% velocity error against 5.4% for the one-block student, with broken images. Removing only blocks 4-5 (30 blocks) reaches 7.41% after healing. It is still above the numerical gate, but in a first 30-prompt image screen it looks comparable to the teacher in this sample, and the healed step-60 student rendered all 5 text prompts correctly. Candidate A is not accepted: in a blinded 159-prompt test it fell behind the teacher on adherence and text. The one-block student remains the selected model.
Later phases
Importance has been recalculated inside candidate A and is being recalculated inside the accepted one-block student; a learned replacement follows, with reranking after each accepted removal. A speed-distillation LoRA from 40 to about 8 steps and optional quantization remain planned.

Reproducibility and updates

Each executable notebook step has a method description and a plain-language explanation of its result. Targets, raw outputs, metrics, selected weights, optimizer state and manifests are serialized locally, with expensive experiment artifacts backed up remotely. Matching saved steps reuse their results; changed inputs stop rather than silently overwrite the record.

This page is a dated snapshot of saved experiments, not a live training dashboard. Its refresh script reads selected local summaries and copies existing comparison images; it runs no models and publishes no weights, caches or credentials. Every plotted value is available in the downloadable record.

Current result · development pilot

One block removed is still the accepted model. The next cut is ranked inside it

Phase 6 showed that one removed block, 5, needs only its pretrained bridge: 5.518% velocity error, with healing adding nothing measurable. That cut is too small to release. In Phase 7, removing four blocks (2-5) stayed far from the teacher even after 480 healing steps: 13.2% against 5.4%, with wrong subjects and broken text in the images. Removing only blocks 4 and 5, with one 4.2M-parameter bridge and 60 healing steps, reaches 7.41%. That is still above the predeclared gate, but in a first 30-prompt image screen it looked like the teacher and rendered all five text prompts correctly. The larger blinded 159-prompt test then showed A falling behind the teacher, so A is rejected as a base.

  • 30 + 1surviving transformer blocks plus one bridge in the strongest candidate, from 32 original blocks
  • 7.41%velocity error on 50 validation prompts, against 5.39% for the one-block student
  • 5 / 5text prompts rendered correctly, like the teacher
  • 0 / 5text prompts correct for the healed 28-block student

Research direction: the accepted model is still the one-block student. Importance scans inside both candidate A and the accepted student are complete; block 13 is the gentlest bypass in the accepted student. A rank-256 learned bridge for block 13 then failed the preregistered velocity gates, so the accepted model is unchanged. A's measured speedup is 1.064×.

Velocity errors are measured on saved teacher inputs at three denoising moments, not on finished images. Image results come from one model-blind AI reviewer with one seed per prompt.