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.
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.

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.
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.
| Split / benchmark | Role | How used so far |
|---|---|---|
| Train · 17,991 prompts | Fit model parameters | 20 selected prompts in the bridge and healing pilots |
| Validation · 1,002 prompts | Choose candidates and checkpoints | 10 selected prompts, reused across the small pilots |
| Internal test · 1,007 prompts | Our held-out evaluation set | All baseline images; subsets for Phase 3 diagnostics |
| Qwen-Image-Bench · 1,000 bilingual items | External benchmark · evaluation only | 1,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.
| Evaluation set | Images | Overall | Prompt adherence | Text rendering |
|---|---|---|---|---|
| Bench Cn | 1000 | 53.62 | 54.64 | 43.59 |
| Bench En | 1000 | 53.67 | 53.88 | 41.69 |
| Internal | 1007 | 56.08 | 57.13 | 70.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
| Rank | Original block | Largest stage-average L2 change | Decision |
|---|---|---|---|
| 1 | 2 | 8.681% | Initial candidate |
| 2 | 4 | 9.574% | Initial candidate |
| 3 | 5 | 10.043% | Initial candidate |
| 4 | 3 | 10.881% | Initial candidate |
| 5 | 1 | 11.740% | Comparison context |
| 6 | 6 | 15.500% | Comparison context |
| 7 | 9 | 16.504% | Comparison context |
| 8 | 10 | 16.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.
- 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
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.
| Original block | Early cosine | Middle cosine | Final cosine |
|---|---|---|---|
| 2 | 0.998321 | 0.998597 | 0.997599 |
| 3 | 0.997110 | 0.998159 | 0.997847 |
| 4 | 0.996989 | 0.997281 | 0.997353 |
| 5 | 0.995830 | 0.996161 | 0.996551 |
| Original block | Early change | Middle change | Final change |
|---|---|---|---|
| 2 | 8.681% | 5.544% | 8.126% |
| 3 | 10.881% | 7.473% | 8.003% |
| 4 | 8.460% | 9.322% | 9.574% |
| 5 | 9.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.
| Skipped block | Early error | Middle error | Final error | Worst case |
|---|---|---|---|---|
| 2 | 16.407% | 4.145% | 18.962% | 21.396% |
| 3 | 15.801% | 3.442% | 11.854% | 18.531% |
| 4 | 10.811% | 2.687% | 5.433% | 17.797% |
| 5 | 12.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.

The teacher depicts an astronaut. The block-4 identity bypass loses the spacesuit; block 5 retains it, with a different pose and background.
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.
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.
| Input | Rank-256 bridge (block 5) | Attention bridge (block 13, Phase 7) |
|---|---|---|
| Hidden state of every token (4,096 numbers) | yes | yes |
| Other tokens (attention) | no: each token is transformed alone | yes: 8 heads |
| Timestep (how noisy the image is) | no: same correction at every step | yes: scale and gate |
| Token positions (RoPE) | no | yes |
| Prompt key/value cache | no | yes: its own slot |
| Weights | 2.1M | 25.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.
- identity bypass
- pretrained bridge
| Original block | Identity error | Bridge error | Relative reduction | Cases improved |
|---|---|---|---|---|
| 2 | 12.879% | 12.023% | 6.64% | 27 / 30 |
| 3 | 10.637% | 10.238% | 3.74% | 20 / 30 |
| 4 | 7.160% | 5.873% | 17.97% | 26 / 30 |
| 5 | 6.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.
| Block | Fresh hidden-fit objective | Reduction vs identity | Change vs historical fit |
|---|---|---|---|
| 2 | 0.003969 | 45.53% | -0.0082% |
| 3 | 0.005213 | 38.00% | -0.0432% |
| 4 | 0.005037 | 49.70% | +0.0175% |
| 5 | 0.006712 | 61.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.
| Experiment | Trainable weights | Updates | Final validation error | Selected update |
|---|---|---|---|---|
| Bridge + LoRA, rate 0.0001 | 10,223,616 | 120 | 7.188% | 0 |
| Bridge + LoRA, rate 0.00001 | 10,223,616 | 120 | 6.113% | 0 |
| Bridge only, rate 0.0001 | 2,097,152 | 120 | 6.153% | 0 |
| Full student, rate 0.0001 | 6,899,117,824 | 60 | 54.387% | 0 |
| Full student, rate 0.000001 | 6,899,117,824 | 60 | 5.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.
| Updates | Rate 0.0001 | Rate 0.000001 |
|---|---|---|
| 0 | 5.518% | 5.518% |
| 30 | 38.183% | 5.585% |
| 60 | 54.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.
| Noise stage | Mean teacher-student velocity error |
|---|---|
| Early | 10.051% |
| Middle | 2.572% |
| Late | 3.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.
| Noise stage | Pretrained bridge | Low-rate update 60 |
|---|---|---|
| Early | 10.051% | 9.736% |
| Middle | 2.572% | 2.553% |
| Late | 3.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.



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.
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.
| Model | Clear full-text passes | Uncertain |
|---|---|---|
| teacher | 15 | 1 |
| pretrained | 13 | 0 |
| update120 | 13 | 1 |
| update180 | 12 | 0 |
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.
| Model | Clear full-text passes | Clear failures | Uncertain |
|---|---|---|---|
| teacher | 43 | 2 | 0 |
| pretrained | 41 | 3 | 1 |
| update120 | 41 | 3 | 1 |
| update180 | 39 | 5 | 1 |
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
| Predeclared promotion condition | Measured | Met? |
|---|---|---|
| Paired clear-pass gain >= 5 points | +2.3 points | No |
| 95% paired bootstrap interval excludes zero | [0.0, 5.4] | No |
| No clear loss on the 45 text prompts | 0 losses | Yes |
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.
| Category | Prompts | Pretrained clear passes | Update 120 clear passes | Difference |
|---|---|---|---|---|
| Counting | 35 | 16 | 17 | +1 |
| Spatial relation | 34 | 21 | 22 | +1 |
| Colors | 30 | 26 | 26 | +0 |
| Multiple objects | 30 | 20 | 21 | +1 |
| All | 129 | 83 | 86 | +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.

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 shows four octopuses. The pretrained bridge adds a fifth, smaller octopus at the front.

The pretrained bridge leaves out the requested candle. Update 120 includes all five objects.

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.

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).

Both models draw more than eight deer. Counting errors like this are shared by both checkpoints, so healing did not fix them.

Both models put the pear on top of the dog instead of under it. The relation error is identical in both images.

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.

Direct links to all 43 full-size sheets
1-3 · 4-6 · 7-9 · 10-12 · 13-15 · 16-18 · 19-21 · 22-24 · 25-27 · 28-30 · 31-33 · 34-36 · 37-39 · 40-42 · 43-45 · 46-48 · 49-51 · 52-54 · 55-57 · 58-60 · 61-63 · 64-66 · 67-69 · 70-72 · 73-75 · 76-78 · 79-81 · 82-84 · 85-87 · 88-90 · 91-93 · 94-96 · 97-99 · 100-102 · 103-105 · 106-108 · 109-111 · 112-114 · 115-117 · 118-120 · 121-123 · 124-126 · 127-129
Research decision: all Phase 6 evidence side by side
| Phase 6 comparison | Size | Pretrained bridge | Update 120 | Paired result | Reading |
|---|---|---|---|---|---|
| Untouched fixed-input velocity test | 20 prompts x 3 stages = 60 comparisons | 5.439% | 5.398% | update 120 lower on 46/60 | Consistent but very small numerical gain (0.04 points; 0.7% relative). |
| Fresh text pilot | 16 prompts, 64 images | 13 | 13 | 0 clear wins / 0 clear losses for update 120 | Tie; update 120 restored one title but that prompt stays uncertain. |
| All remaining validation text prompts | 45 prompts, 180 images, blind | 41 | 41 | 0 wins / 0 losses; same status on 44 | Exact tie. |
| Fresh alignment prompts (decision test) | 129 prompts, 258 images, blind | 83 | 86 | 3 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.
| Student | Blocks | Early | Middle | Late | Mean | Skip damage removed |
|---|---|---|---|---|---|---|
| One-block bridge (Phase 6 choice) | 31 | 9.95% | 2.60% | 4.01% | 5.52% | n/a |
| Blocks 2-5 skipped | 28 | 32.62% | 9.67% | 24.18% | 22.15% | 0% |
| Four per-block bridges stacked | 28 | 28.26% | 7.78% | 22.89% | 19.64% | 15% |
| One region bridge, 2.1M parameters | 28 | 28.11% | 7.88% | 20.80% | 18.93% | 19% |
| One region bridge, 8.4M parameters | 28 | 26.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:
| Block removed alone (Phase 6 replay) | Skipped | With its own bridge |
|---|---|---|
| 2 | 12.88% | 12.02% |
| 3 | 10.64% | 10.24% |
| 4 | 7.16% | 5.87% |
| 5 | 6.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:
| Hidden state after block 5 | Skip | Region bridge 2.1M | Region bridge 8.4M |
|---|---|---|---|
| Text-prompt tokens | 59.6% | 3.9% | 3.7% |
| Image tokens, early noise | 19.3% | 12.5% | 12.2% |
| Image tokens, middle noise | 26.8% | 11.8% | 11.5% |
| Image tokens, late noise | 31.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.
| Run | Wider (50) | Early | Middle | Late | Check (10) |
|---|---|---|---|---|---|
| Untrained | 16.63% | 24.84% | 7.20% | 17.85% | 17.73% |
| One moment per step, rate 1e-5, step 120 | 21.26% | 43.78% | 6.05% | 13.95% | 21.64% |
| All three moments, rate 1e-6, step 60 | 15.64% | 23.71% | 6.62% | 16.57% | 16.73% |
| All three moments, rate 3e-6, step 60 | 15.16% | 23.86% | 6.21% | 15.41% | 16.33% |
| All three moments, rate 1e-5, step 60 | 17.41% | 32.17% | 6.02% | 14.03% | 17.82% |
| All three moments, rate 3e-5, step 60 | 25.40% | 48.92% | 8.61% | 18.67% | 25.00% |
| Rate 3e-6 continued, step 240 | 14.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 480 | 13.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:
| Student | Blocks | Early | Middle | Late | Mean | Skip damage removed |
|---|---|---|---|---|---|---|
| One-block bridge (reference) | 31 | 9.95% | 2.60% | 4.01% | 5.52% | n/a |
| Blocks 4-5 skipped | 30 | 16.74% | 4.36% | 7.88% | 9.66% | 0% |
| Two per-block bridges | 30 | 14.93% | 3.56% | 6.99% | 8.49% | 28% |
| One region bridge, 2.1M parameters | 30 | 15.39% | 3.55% | 7.10% | 8.68% | 24% |
| One region bridge, 4.2M parameters | 30 | 13.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:
| Run | Wider (50) | Early | Middle | Late | Check (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 120 | 8.15% | 16.46% | 3.18% | 4.82% | 9.19% |
| Healed, step 180 | 7.84% | 15.48% | 3.16% | 4.88% | 8.29% |
| Healed, step 240 | 7.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.
| Requested text | Teacher | A | B | C | D |
|---|---|---|---|---|---|
| "GOLDEN RIVER" / "Live in Berlin" | pass | pass | pass | pass | fail |
| "Welcome Home" | pass | pass | pass | pass | fail |
| "Happy Birthday Emma" | pass | pass | pass | pass | fail |
| 营业中 | pass | pass | pass | pass | fail |
| "The Rusty Anchor" + small "Moonlight Motel" sign | pass | pass | fail | fail | fail |
| Passes | 5 / 5 | 5 / 5 | 4 / 5 | 4 / 5 | 0 / 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.
| Panel | Teacher pass | A pass | A better | A worse | Gate |
|---|---|---|---|---|---|
| Adherence (129) | 89 | 78 | 6 | 17 | gain -8.5 points, 95% CI -15.5 to -1.6; needs lower bound ≥ -5: fail |
| Text (30) | 28 | 18 | 0 | 10 | A 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%).
| Block | A + bypass | Early | Middle | Late | p90 |
|---|---|---|---|---|---|
| 12 | 9.19% | 16.9% | 4.6% | 6.1% | 17.7% |
| 13 | 9.41% | 17.8% | 4.5% | 5.9% | 18.3% |
| 11 | 9.47% | 18.0% | 4.7% | 5.6% | 19.4% |
| 14 | 9.50% | 17.5% | 4.7% | 6.3% | 19.1% |
| 17 | 9.60% | 15.9% | 4.6% | 8.2% | 17.7% |
| 16 | 9.62% | 16.1% | 5.0% | 7.8% | 17.4% |
| 9 | 9.77% | 18.8% | 4.7% | 5.8% | 20.3% |
| 8 | 9.79% | 18.5% | 4.9% | 6.0% | 20.3% |
| 7 | 9.92% | 18.9% | 4.7% | 6.2% | 19.8% |
| 6 | 9.97% | 18.8% | 4.8% | 6.4% | 19.2% |
| 15 | 10.00% | 17.6% | 4.9% | 7.5% | 19.3% |
| 10 | 10.13% | 19.8% | 4.9% | 5.7% | 21.7% |
| 18 | 10.90% | 16.3% | 5.4% | 11.0% | 17.7% |
| 20 | 11.51% | 15.2% | 5.9% | 13.4% | 16.9% |
| 19 | 11.70% | 16.9% | 8.1% | 10.0% | 18.2% |
| 25 | 11.71% | 15.9% | 5.7% | 13.5% | 17.6% |
| 26 | 11.80% | 18.1% | 5.3% | 11.9% | 19.7% |
| 3 | 12.82% | 20.5% | 5.2% | 12.8% | 22.8% |
| 24 | 13.45% | 17.1% | 7.9% | 15.4% | 18.7% |
| 27 | 13.92% | 19.8% | 7.3% | 14.6% | 21.7% |
| 23 | 13.95% | 15.6% | 8.7% | 17.5% | 18.7% |
| 21 | 14.32% | 15.8% | 8.9% | 18.3% | 19.7% |
| 28 | 15.14% | 26.8% | 5.8% | 12.7% | 29.4% |
| 2 | 15.77% | 21.9% | 6.0% | 19.4% | 24.6% |
| 22 | 16.22% | 16.1% | 8.6% | 23.9% | 25.1% |
| 29 | 17.31% | 31.8% | 7.1% | 13.0% | 34.4% |
| 1 | 18.59% | 25.9% | 7.2% | 22.7% | 28.3% |
| 30 | 21.50% | 38.6% | 8.8% | 17.1% | 41.3% |
| 31 | 130.37% | 217.5% | 99.4% | 74.2% | 225.2% |
| 0 | 231.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.
| Block | B + bypass | Early | Middle | Late | Rank in A | A + bypass |
|---|---|---|---|---|---|---|
| 13 | 7.63% | 14.2% | 4.1% | 4.6% | 2 | 9.41% |
| 12 | 7.75% | 14.7% | 4.1% | 4.4% | 1 | 9.19% |
| 14 | 7.93% | 14.5% | 4.2% | 5.1% | 4 | 9.50% |
| 17 | 7.96% | 12.2% | 4.1% | 7.6% | 5 | 9.60% |
| 11 | 8.11% | 15.7% | 4.3% | 4.3% | 3 | 9.47% |
| 9 | 8.27% | 16.3% | 4.1% | 4.4% | 7 | 9.77% |
| 6 | 8.30% | 15.8% | 4.0% | 5.2% | 10 | 9.97% |
| 16 | 8.30% | 13.6% | 4.4% | 6.8% | 6 | 9.62% |
| 15 | 8.32% | 14.0% | 4.3% | 6.6% | 11 | 10.00% |
| 8 | 8.53% | 16.6% | 4.3% | 4.7% | 8 | 9.79% |
| 7 | 8.54% | 16.6% | 4.0% | 5.1% | 9 | 9.92% |
| 10 | 8.56% | 16.9% | 4.4% | 4.4% | 12 | 10.13% |
| 4 | 8.95% | 16.4% | 3.7% | 6.8% | n/a (replaced) | n/a |
| 18 | 9.16% | 12.7% | 4.9% | 9.9% | 13 | 10.90% |
| 26 | 10.02% | 13.9% | 4.9% | 11.4% | 17 | 11.80% |
| 25 | 10.16% | 12.0% | 5.3% | 13.2% | 16 | 11.71% |
| 20 | 10.46% | 12.3% | 5.4% | 13.6% | 14 | 11.51% |
| 19 | 11.17% | 16.8% | 7.4% | 9.3% | 15 | 11.70% |
| 24 | 11.99% | 13.3% | 7.6% | 15.1% | 19 | 13.45% |
| 3 | 12.01% | 19.4% | 4.4% | 12.3% | 18 | 12.82% |
| 27 | 12.40% | 16.0% | 6.9% | 14.2% | 20 | 13.92% |
| 23 | 12.90% | 12.6% | 8.4% | 17.7% | 21 | 13.95% |
| 21 | 13.07% | 12.3% | 8.4% | 18.6% | 22 | 14.32% |
| 28 | 13.76% | 24.1% | 5.4% | 11.8% | 23 | 15.14% |
| 2 | 14.46% | 19.5% | 5.0% | 18.9% | 24 | 15.77% |
| 22 | 15.90% | 15.0% | 8.2% | 24.4% | 25 | 16.22% |
| 29 | 16.38% | 29.9% | 6.8% | 12.4% | 26 | 17.31% |
| 1 | 17.44% | 23.7% | 6.6% | 22.1% | 27 | 18.59% |
| 30 | 20.84% | 37.5% | 8.4% | 16.6% | 28 | 21.50% |
| 31 | 127.98% | 211.5% | 98.3% | 74.1% | 29 | 130.37% |
| 0 | 224.76% | 93.9% | 107.4% | 473.0% | 30 | 231.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.
| Measure | C | Limit | Result |
|---|---|---|---|
| Check prompts (10) | 7.37% | 6.52% | fail |
| Wider prompts (50) | 7.39% | 6.37% | fail |
| Early moment | 13.53% | 12.01% | fail |
| Middle moment | 4.08% | 4.57% | pass |
| Late moment | 4.55% | 5.61% | pass |
| 90th percentile | 15.66% | 13.62% | fail |
| Worst comparison | 24.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.
| Bridge | Parameters | Overall | Check (10) | Wider (50) | Early / middle / late |
|---|---|---|---|---|---|
| Plain, rank 256 (first bridge) | 2.1M | 7.39% | 7.37% | 7.39% | 13.5% / 4.1% / 4.6% |
| Plain, rank 1024 | 8.4M | 7.35% | 7.20% | 7.39% | 13.5% / 4.1% / 4.5% |
| Timestep-conditioned, rank 256 | 2.1M | 7.02% | 7.26% | 6.98% | 12.7% / 3.9% / 4.5% |
| Timestep-conditioned, rank 1024 | 8.4M | 6.77% | 7.26% | 6.68% | 12.4% / 3.7% / 4.2% |
| + attention branch, trained on the final output | 16.8M | 6.42% | 7.10% | 6.29% | 11.8% / 3.6% / 3.9% |
| Same, trained on the final output (no gain; best at its start) | 8.4M | 6.72% | 7.21% | 6.62% | 12.3% / 3.7% / 4.2% |
| + 150 recorded text prompts, 600 more updates | 16.8M | 6.25% | 6.42% | 6.21% | 11.3% / 3.6% / 3.9% |
| 8 attention heads, 450 recorded text prompts | 25.2M | 6.11% | 6.27% | 6.08% | 10.9% / 3.5% / 3.9% |
| Conditioned rank 1024, 3,000 updates | 8.4M | 6.72% | 7.20% | 6.62% | 12.3% / 3.7% / 4.2% |
| Conditioned rank 1024 + 3×3 local mixing, 3,000 updates | 8.4M | 6.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.
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.
| Rank-256 bridge (block 5) | Attention bridge (block 13) | Original block 13 | |
|---|---|---|---|
| Looks at other tokens | no | yes, 8 heads × 128 | yes, 32 heads × 128 |
| Knows the timestep | no | yes (scale, gate) | yes (scale, gate) |
| Token positions | no | yes (RoPE) | yes (RoPE) |
| Prompt key/value cache | no | yes, own slot | yes |
| MLP | 4,096 → 256 → 4,096, GELU | 4,096 → 1,024 → 4,096, GELU, conditioned | 4,096 → 12,288 → 4,096, SwiGLU |
| Weights | 2.1M | 25.2M | 218.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.
| Text | Teacher | B | C (best bridge) |
|---|---|---|---|
| The Rusty Anchor | 4/4 | 3/4 | 0/4 |
| Moonlight Motel | 3/4 | 3/4 | 1/4 |
| Happy Birthday Emma | 4/4 | 3/4 | 1/4 |
| Welcome Home | 4/4 | 4/4 | 3/4 |
| GOLDEN RIVER | 4/4 | 4/4 | 4/4 |
| Live in Berlin | 3/4 | 3/4 | 4/4 |
| 营业中 | 4/4 | 4/4 | 4/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.


| Text | Teacher | B | Per-token (cond r1024) | Attention | + 150 text prompts | 8 heads + 450 text prompts |
|---|---|---|---|---|---|---|
| The Rusty Anchor | 4/4 | 3/4 | 0/4 | 1/4 | 1/4 | 1/4 |
| Happy Birthday Emma | 4/4 | 3/4 | 1/4 | 1/4 | 2/4 | 2/4 |
| Moonlight Motel | 3/4 | 3/4 | 1/4 | 2/4 | 2/4 | 3/4 |
| All three | 11/12 | 9/12 | 2/12 | 4/12 | 5/12 | 6/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).
| Checkpoint | Overall velocity | Wider (50) | Exact signs |
|---|---|---|---|
| step 0 (C, no healing) | 6.11% | 6.08% | 6/12 |
| step 50 | 6.11% | 6.06% | 5-6/12 |
| step 100 | 6.06% | 6.00% | 6/12 |
| step 150 | 6.04% | 5.98% | ~7/12 |
| step 200 | 6.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.
| Text | Teacher | B | C (5 + 13) | Teacher − 13 (skip) | Teacher − 13 (bridge) |
|---|---|---|---|---|---|
| The Rusty Anchor | 4 | 3 | 1 | 2 | 1 |
| Happy Birthday Emma | 4 | 3 | 2 | 2 | 2 |
| Moonlight Motel | 3 | 3 | 3 | ~1 | ~1-2 |
| Total / 12 | 11 | 9 | 6 | ~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.
| Text | Teacher | B | Teacher − 13 | B − 17 | B − 20 | B − 18 | B − 16 | B − 25 |
|---|---|---|---|---|---|---|---|---|
| The Rusty Anchor | 4 | 3 | 2 | 3 | 4 | 3 | 2 | 1 |
| Happy Birthday Emma | 4 | 3 | 2 | 3-4 | 4 | 3 | 3 | 4 |
| Moonlight Motel | 3 | 3 | ~1 | ~2 | ~2-3 | ~1 | ~2-3 | ~2 |
| Total / 12 | 11 | 9 | ~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.
| Removed | Blocks | Overall velocity | Early / middle / late | Exact signs |
|---|---|---|---|---|
| 5 (B) | 31 | 5.40% | 10.0 / 2.6 / 3.6 | 9/12 |
| 5, 20 | 30 | 10.46% | 12.3 / 5.4 / 13.6 | ~11/12 |
| 5, 20, 17 | 29 | 12.64% | 15.2 / 6.6 / 16.1 | ~6/12 |
| 5, 20, 17, 25 | 28 | 15.17% | 17.1 / 8.2 / 20.1 | ~5/12 |
| 5, 20, 17, 16 | 28 | 15.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.
| Block 20 | Overall velocity | Exact signs | Worse than B (of 30) |
|---|---|---|---|
| no bridge for 20 | 10.46% | ~10/12 | 9 |
| bridge, step 200 | 7.92% | ~11/12 | 7 |
| bridge, step 600 | 7.76% | ~10/12 | 5 |
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.
| Block 5 | Overall velocity | Exact signs (of 11 legible) |
|---|---|---|
| old rank-256 bridge (2.1M weights) | 7.76% | 9 |
| new bridge, step 100 | 8.09% | 9 |
| new bridge, step 200 | 8.09% | 10 |
| new bridge, step 300 | 8.06% | 8 |
| new bridge, step 400 | 8.11% | 9 |
| new bridge, step 500 | 8.20% | 6 |
| new bridge, step 600 | 7.93% | 7 |


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).
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.
| Checkpoint | Overall velocity | Anchor / Emma / Motel | Exact signs (of 11) |
|---|---|---|---|
| unhealed | 8.09% | 4 / 4 / 2 | 10 |
| healed, step 50 | 8.01% | 4 / 4 / 1 | 9 |
| healed, step 100 | 7.97% | 4 / 4 / 1 | 9 |
| healed, step 150 | 7.90% | 2 / 4 / 1 | 7 |
| healed, step 200 | 7.84% | 4 / 3 / 2 | 9 |
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).
| Variant | Exact signs (of 12) | PSNR to the 40-step image | Seconds per image |
|---|---|---|---|
| teacher, 40 steps | 11 | reference | about 6.9 |
| teacher, 8 steps, no LoRA | 0 | 15.1 dB | 1.53 |
| teacher, 4 steps, no LoRA | 0 | 14.1 dB | 0.86 |
| teacher + LightX2V LoRA, 4 steps | 9 | 11.8 dB | 0.87 |

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.
| Model | Transformer step | Slot 5 (block or bridge) | Peak memory (GB) |
|---|---|---|---|
| teacher (32 blocks) | 165 | 5.0 (real block) | 39.6 |
| version 1, FP32 bridges | 172 | 8.8 | 38.9 |
| version 1, BF16 bridges | 159 | 2.2 | 38.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.
| Run | 0 | 500 | 1000 | 1500 | 2000 |
|---|---|---|---|---|---|
| 8 steps | 38.9% | 35.8% | 35.5% | 37.9% | 39.2% |
| 4 steps | 48.0% | 43.5% | 35.0% | 34.8% | 33.8% |
| 8 steps, continued from 1500, letters weighted | 37.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).

The best 8-step checkpoint was continued for 2000 updates with these weights, a learning rate decaying to zero and 2 examples per update.
| Model | Rusty Anchor | Emma | Poster tagline | Handwritten note | Total |
|---|---|---|---|---|---|
| teacher, 40 steps | 4 | 4 | 4 | 4 | 16 |
| version 1, 40 steps | 4 | 4 | 3 | 4 | 15 |
| LightX2V on the teacher, 4 steps | 1 | 4 | 4 | 4 | 13 |
| ours, 8 steps, before weighting (step 1500) | 3 | 3 | 2 | 3 | 11 |
| ours, 8 steps, letters weighted (+2000) | 2 | 4 | 3 | 3 | 12 |


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:

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.
| Update | All 45 | Text | General | Teacher, all |
|---|---|---|---|---|
| 0 (8 steps, no LoRA) | 38.5% | 38.3% | 38.7% | 41.5% |
| 500 | 29.2% | 29.5% | 28.9% | 36.7% |
| 1000 | 29.5% | 28.4% | 30.4% | 36.7% |
| 1500 | 29.2% | 29.1% | 29.3% | 36.3% |
| 2000 | 27.6% | 26.9% | 28.1% | 34.6% |
| Model | Rusty Anchor | Emma | Poster tagline | Handwritten note | Total |
|---|---|---|---|---|---|
| version 1, 40 steps | 4 | 4 | 3 | 4 | 15 |
| 8 steps, teacher targets (+2000) | 2 | 4 | 3 | 3 | 12 |
| 8 steps, version 1 targets, update 1000 | 4 | 2 | 3 | 4 | 13 |
| 8 steps, version 1 targets, update 1500 | 3 | 3 | 4 | 3 | 13 |

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.

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.
| Prompt | From noise | From step 5 | From step 10 | From step 20 |
|---|---|---|---|---|
| Checkerboard plate | 31.8% | 12.5% | 7.3% | 2.4% |
| White star | 28.5% | 3.1% | 2.1% | 1.2% |
| Four friends | 24.0% | 6.7% | 2.9% | 1.9% |
| Cyclist | 39.4% | 10.8% | 5.5% | 1.8% |
| Alarm clock | 39.9% | 12.2% | 3.2% | 1.7% |

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).
| Model calls (start steps) | LoRA off for the start | LoRA 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% |

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.
| Model | Steps | Correct |
|---|---|---|
| teacher | 40 | 16 |
| version 1 | 40 | 15 |
| version 1, fused, uneven schedule | 12 | 15 |
| version 1, fused, uneven schedule | 10 | 14 |
| version 1, 8-step LoRA from noise | 8 | 13 |
| LightX2V on the teacher | 4 | 13 |


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
sigmasto 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) andsigmas.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 | Nihonga v1 | |
|---|---|---|
| Transformer blocks | 32 | 30 + 2 bridges |
| Transformer parameters | 7.115 B (14.2 GB) | 6.729 B (13.5 GB) |
| Sampling steps | 40 | 10 |
| Time per 1024 × 1024 image, one H100 | 6.89 s | 1.75 s |
| Peak GPU memory | 39.6 GB | 39.3 GB |
| Spelling, 16 hard items | 16 | 15 |
| 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.
- Download the measurementsJSON · exact values and source SHA-256 hashes
- Research repository ↗Phase notebooks and original plan
- Page source ↗Public research record
- Earlier bridge + LoRA graphStandalone SVG · diagnostic ablation
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.








