Knobs inside the weights: single-block scaling in Krea-2 — results

Scope. Everything here is about one model, Krea-2 (28 single-stream transformer blocks), edited without any training by multiplying the weights of single blocks. It's an investigation into whether controllable "knobs" already exist inside the weights — not a tool to compete with post-production. The exploratory lab notebook that led here is in the exploratory notebook and stays the record of every test I ran; this folder holds only the results that were confirmed, or that I need here to be honest about what wasn't.

New here? Start from the story: what I found, told with pictures. This page is the report: abstract, related work, and the table of every claim.

Abstract

Does a text-to-image diffusion transformer hold controllable "knobs" in its own weights — directions that do one thing, consistently across prompts, seeds and wordings, and can be reached without training? I study Krea-2, a diffusion transformer with 28 single-stream blocks, edited by multiplying the weight matrices of one block by 1 + d. An exploratory atlas of 1,412 renders (23 prompts, every block in both directions) produced claims that were then frozen and tested on new benches, each pre-registered with its decision rule and scoring code, opened by a pixel-identical reproduction check, and scored only after an eye pass had been deposited. Block 23 is a saturation knob: chroma moves monotonically with the dose in 15 of 16 prompt-seed cells, roughly in proportion to it (doubling the dose multiplies the gain by 1.76), and at the same colour gain it disturbs the rest of the picture less than adding "colorful" to the prompt (layout 6 of 7 cells, LPIPS 7 of 7, DINOv2 6 of 7) — although in 9 of 16 cells the words reach further. Presets built from late blocks are coherent inside a family of prompts written in one style: within-family coherence 0.53 against 0.26 between families and 0.76 across seeds, strongest on cartoon and weakest on photographs, at a visible cost in noise at the doses used. Middle blocks change content most (DINOv2 similarity 0.87–0.88) at no measured quality cost and look family-coherent to the eye, but no metric I tried records that coherence, and one of them can change a subject's identity. A preset written by eye from the block map carries over to new pictures: calibrated on four character portraits and frozen, it gave three characters it had never seen the look its author had described, about as coherently as on the four (0.51 against 0.61), and an observer blind to the condition chose it as the closer match in 56 of 56 comparisons; each character stays recognisable, though the face moves slightly more than under a change of seed (ArcFace 0.74 against 0.80) and a prompted expression can go flat. Inside a block, the two halves differ: labelled blind, the MLP is the noisier half in 13 of 19 cells and the attention only at the end of the stack; on new comic and cartoon prompts, edits to blocks 1-19 change the picture more than edits to blocks 20-27 and damage its surface in 19% of pairs against 79%, not in none. The fine-texture cost of a push measured earlier replicates on its own comic prompts and was not shown on photographs. Editing the text encoder instead (Qwen3-VL-4B, one layer half zeroed or doubled) changes the genre of a picture, and usually who is drawn, rather than its surface; how much the picture changes is predicted by how far the edit moves the conditioning (Spearman 0.71 and 0.80, pre-registered), though mostly by telling kinds of edit apart, but where it goes — anime in 39 of 50 genre switches — is explained neither by less attention on the style words nor by a push resembling the words "anime style"; removing the style words shows the fallback directly — the elf is then drawn as anime in 9 of 9 cases (pre-registered), while seven other characters fall back to painting or realistic renders, so there is no single default — and random pushes of the same size reach it only when they vary from token to token, while each real edit follows its own direction. A dose ladder shows that these edits do not break the picture up to full dose and that the style holds up to about two thirds of it; what goes first is the character. In blind yes/no labels on every trait the prompt names, two edits cost the character far more than random pushes of the same size, labelled by a second labeller who knew nothing of the study (traits kept at full dose 0.48 and 0.63 against 0.87-0.95), while a third costs less; and when those two edits change the skin, it becomes lighter (52 of 53 changes; 14 of 14 for the second labeller), which random pushes almost never do (pre-registered). Rewriting a prompt changes what a block does about as much as changing the seed, and far less than changing the subject; the pre-registered test of this is inconclusive by its own rule. I also report four claims that were made from statistics and withdrawn after the images were opened, and the limits of a study whose eye passes were made by a single observer who knew the conditions — all except the portrait test, which was judged blind.

Introduction

The usual ways to steer a diffusion model add something to it: a trained adapter, a learned direction, a hook on the activations at inference. I wanted to know whether some control is already there, hidden in the base weights, at the scale of a single block. So I used the simplest edit I could think of: the eight weight matrices of a block multiplied by one number. A preset is just a list of such numbers. Nothing is trained, nothing runs at inference beyond the patched weights, and any preset fits in one line.

What does that buy you in practice? The last test shows it best. I looked at what every block does to four drawn characters, wrote a preset of ten small numbers aiming at a more American-comic look, flat colours and clean lines, froze it, and applied it to seven characters at four new seeds. Three of them had never been rendered while I was tuning it. Here they are, base above and preset below:

Try it yourself. The same blind choice, 14 pairs, takes two minutes: take the test. Take it before looking at the pictures below if you can.

The three characters never seen while the preset was tuned, large, at one seed: each keeps face, hair and costume, while the preset flattens the colour, removes many wrinkle and hatching lines, simplifies the ornament, and turns the tiefling's patterned jacket plain yellow.

Someone who had never seen the project, shown each pair side by side without knowing which was which, picked the preset as the closer match to that description every single time: 56 out of 56. The characters stay themselves, but not untouched: the face moves a little more than a change of seed would move it, and a prompted expression can turn into a frown (page 28).

Then I turned to the other half of the model, the language model that reads the prompt. The same kind of edit there doesn't add noise: it changes the genre of the picture, and often who is drawn. Where the picture ends up depends on the edit and on the character — and when I took the style words away, each character fell back to a style of its own. And when I walked the dose up step by step, the first thing to go wasn't the style: it was the character. Tusks, braids, armour, the elf's androgynous look, all gone while the picture is still a comic, and dark skin turning lighter on the way. Random pushes of the same strength don't do it, and someone who knew nothing about the study saw the same thing I did: it's where the edit points, not how hard it pushes (page 30).

I started with hand-calibrated presets over the whole stack (notebook page 01) and a notebook full of tests on permutations, rotations and block groups (notebook). Single blocks turned out to be the more useful unit: they're finer than the tuner's macro-blocks, and some of them behave the same way on every prompt I tried. The pages below report what survived confirmation:

Related work

Layer and block specialisation. B-LoRA finds two blocks of SDXL that separate content from style [1]. Sparse autoencoders on SDXL Turbo find blocks specialised in composition, local detail, and colour, illumination and style [2]. Stable Flow finds that the layers that matter for editing in diffusion transformers are scattered through the stack, detecting them by bypassing layers and measuring the DINOv2 change [3]; FluxSpace edits attributes through the representations of transformer blocks in rectified-flow models [4]. Our map agrees that blocks specialise in a diffusion transformer and that the specialisation is not contiguous (page 21), but works on the weights rather than on activations.

Training-free re-weighting. FreeU rescales backbone and skip features of a U-Net at inference to change output quality [5]. It is the closest precedent for scaling part of a network without training; here the scaling is applied once to the weights of one block of a transformer.

Learned controls in weight space. Concept Sliders train low-rank adaptors that act as attribute sliders [6]; weights2weights finds interpretable directions in the space of customised LoRA weights [7]; LoRA Block Weight scales a LoRA's effect block by block in practice [8]. Here nothing is learned and the knob is a block of the base model, not a learned direction.

The same edit already exists as a tool. Scaling the base weights of single blocks, training-free, is what two ComfyUI tools for Flux, published in September 2024 and developed independently of the tuner used here, already do: the FluxBlocksBuster node [17] gives one multiplier per block, and Block Patcher [18] sweeps a list of regular expressions over the block tensors, rendering one image per value. Read from their source, both apply exactly the operation studied here — W := W x v through ComfyUI's add_patches with strength_patch = 0 — and so does the tuner used in this report; Block Patcher's regex is in fact finer than my per-block vector, reaching one tensor at a time. Neither tool publishes a map, a dose, or a claim about what any block does: their author calls them probing tools. The contribution here is therefore not the edit but its characterisation — a measured per-block map with calibrated doses, pre-registered confirmations, and the failures (docs/prior_work_block_scaling_tools.md).

Learned per-block scaling. Calibri calibrates a diffusion transformer with about a hundred scaling coefficients — one per block, or one per attention and MLP layer, or one per gate — found by an evolutionary search against a reward, and reports that the calibrated FLUX, SD-3.5 and Qwen-Image models are better than the originals [19]. It is the closest published work to this report: the same kind of edit, a multiplier on part of a block, but searched by a reward model rather than mapped by eye. Scaling the output projection of an attention or an MLP, as my edits do among others, is close to scaling that layer's output, which is what Calibri tunes. Calibri does not analyse attention against MLP or early against late blocks; page 29 does, and finds that they differ.

Inside the text side. Knowledge about styles and objects can be localised in the text encoder of a text-to-image model and edited there [20]; Diffusion Lens reads the intermediate layers of the text encoder by generating images from them [21]; the per-token text embedding of a diffusion model can be probed and edited token by token [22]. Where the picture reads each word has been studied through cross-attention maps in U-Nets [23, 24] and, for dual-stream transformers, through the joint attention [25]. Page 30 edits the weights of a language-model text encoder and follows the edit into the conditioning and into the attention of a single-stream transformer, where the methods of [25] do not apply directly.

What the prompt asked for, and whom the model draws. Checking a picture against its prompt with a list of yes/no questions derived from the prompt is the scheme of TIFA [26] and Davidsonian Scene Graph [27], which answer them with a vision-language model; page 30 uses the same scheme with human labellers, blind to the edit and the dose. Audits of text-to-image models report that, when a prompt leaves identity open, the models default to lighter-skinned and stereotyped people [28, 29]. Page 30 finds the same direction appearing under edits of the text encoder, and not under random pushes of the same size.

Model and metrics. Krea-2 is described in its technical report [9]. Image quality and similarity are measured with CLIP-IQA [10], BRISQUE [11], CLIPScore [12], LPIPS [13], DISTS [14], SSIM [15] and DINOv2 [16] (page 25).

References

  1. Frenkel, Vinker, Shamir, Cohen-Or. Implicit Style-Content Separation using B-LoRA. ECCV 2024. arXiv:2403.14572
  2. Surkov, Wendler, Mari, Terekhov, Deschenaux, West, Gulcehre, Bau. One-Step is Enough: Sparse Autoencoders for Text-to-Image Diffusion Models (first version titled Unpacking SDXL Turbo: Interpreting Text-to-Image Models with Sparse Autoencoders). arXiv:2410.22366
  3. Avrahami, Patashnik, Fried, Nemchinov, Aberman, Lischinski, Cohen-Or. Stable Flow: Vital Layers for Training-Free Image Editing. CVPR 2025. arXiv:2411.14430
  4. Dalva, Venkatesh, Yanardag. FluxSpace: Disentangled Semantic Editing in Rectified Flow Transformers. arXiv:2412.09611
  5. Si, Huang, Jiang, Liu. FreeU: Free Lunch in Diffusion U-Net. CVPR 2024. arXiv:2309.11497
  6. Gandikota, Materzyńska, Zhou, Torralba, Bau. Concept Sliders: LoRA Adaptors for Precise Control in Diffusion Models. ECCV 2024. arXiv:2311.12092
  7. Dravid, Gandelsman, Wang, Abdal, Wetzstein, Efros, Aberman. Interpreting the Weight Space of Customized Diffusion Models. NeurIPS 2024. arXiv:2406.09413
  8. hako-mikan. sd-webui-lora-block-weight (software). github.com/hako-mikan/sd-webui-lora-block-weight
  9. Lee, Millon, Zhuo, Newton, Filatov, et al. (Krea). Krea 2 Technical Report, 23 June 2026. krea.ai/blog/krea-2-technical-report
  10. Wang, Chan, Loy. Exploring CLIP for Assessing the Look and Feel of Images. AAAI 2023. arXiv:2207.12396
  11. Mittal, Moorthy, Bovik. No-Reference Image Quality Assessment in the Spatial Domain. IEEE TIP 2012.
  12. Hessel, Holtzman, Forbes, Le Bras, Choi. CLIPScore: A Reference-free Evaluation Metric for Image Captioning. EMNLP 2021. arXiv:2104.08718
  13. Zhang, Isola, Efros, Shechtman, Wang. The Unreasonable Effectiveness of Deep Features as a Perceptual Metric. CVPR 2018. arXiv:1801.03924
  14. Ding, Ma, Wang, Simoncelli. Image Quality Assessment: Unifying Structure and Texture Similarity. IEEE TPAMI 2022. arXiv:2004.07728
  15. Wang, Bovik, Sheikh, Simoncelli. Image Quality Assessment: From Error Visibility to Structural Similarity. IEEE TIP 13(4), 2004.
  16. Oquab, Darcet, Moutakanni, Vo, Szafraniec, et al. DINOv2: Learning Robust Visual Features without Supervision. arXiv:2304.07193
  17. cubiq. FluxBlocksBuster+, node in ComfyUI_essentials (software), conditioning.py. github.com/cubiq/ComfyUI_essentials
  18. cubiq. Block_Patcher_ComfyUI — experimental sampler to iterate through blocks weight (software). github.com/cubiq/Block_Patcher_ComfyUI
  19. Tokhchukov, Mirzoeva, Kuznetsov, Sobolev. Calibri: Enhancing Diffusion Transformers via Parameter-Efficient Calibration. arXiv:2603.24800, 2026.
  20. Basu, Rezaei, Kattakinda, Rossi, Zhao, Morariu, Manjunatha, Feizi. On Mechanistic Knowledge Localization in Text-to-Image Generative Models. arXiv:2405.01008
  21. Toker, Orgad, Ventura, Arad, Belinkov. Diffusion Lens: Interpreting Text Encoders in Text-to-Image Pipelines. ACL 2024. arXiv:2403.05846
  22. Yu, Luo, Wang, Zhao. Uncovering the Text Embedding in Text-to-Image Diffusion Models. arXiv:2404.01154
  23. Hertz, Mokady, Tenenbaum, Aberman, Pritch, Cohen-Or. Prompt-to-Prompt Image Editing with Cross Attention Control. ICLR 2023. arXiv:2208.01626
  24. Tang, Liu, Pandey, Jiang, Yang, Kumar, Stenetorp, Lin, Ture. What the DAAM: Interpreting Stable Diffusion Using Cross Attention. ACL 2023. arXiv:2210.04885
  25. Helbling, Meral, Hoover, Yanardag, Chau. ConceptAttention: Diffusion Transformers Learn Highly Interpretable Features. arXiv:2502.04320
  26. Hu, Liu, Kasai, Wang, Ostendorf, Krishna, Smith. TIFA: Accurate and Interpretable Text-to-Image Faithfulness Evaluation with Question Answering. ICCV 2023. arXiv:2303.11897
  27. Cho, Hu, Garg, Anderson, Krishna, Baldridge, Bansal, Pont-Tuset, Wang. Davidsonian Scene Graph: Improving Reliability in Fine-grained Evaluation for Text-to-Image Generation. ICLR 2024. arXiv:2310.18235
  28. Luccioni, Akiki, Mitchell, Jernite. Stable Bias: Analyzing Societal Representations in Diffusion Models. NeurIPS 2023 Datasets and Benchmarks. arXiv:2303.11408
  29. Bianchi, Kalluri, Durmus, Ladhak, Cheng, Nozza, Hashimoto, Jurafsky, Zou, Caliskan. Easily Accessible Text-to-Image Generation Amplifies Demographic Stereotypes at Large Scale. FAccT 2023. arXiv:2211.03759

What holds, and what does not

ClaimWhat it rests on
HoldsThe tuner adds nothing of its own at zero, and a render made again days later, in another session and another bench, is the same file pixel for pixel; differences between conditions are therefore the edit and not the pipeline.Integrity checks with a pass/fail criterion fixed before the value. Tuner in the graph at zero against no tuner: maximum channel difference 0 on 15 cells (notebook page 00). Before each confirmatory bench of this report, the rows that already existed on older benches were rendered again: 1 of 1 on the wording bench, 26 of 26 on the saturation bench, 1 of 1 on the prompt-family bench, all at maximum difference 0.
HoldsWith the tuner active, a patch that leaves every weight unchanged gives the same image pixel for pixel: the node and ComfyUI's patch path add nothing beyond the multiplication itself.Pre-registered (C55), decisive rule fixed before the renders. Block 27's eight bf16 matrices multiplied by 1.0001 (no weight changes after rounding; the tuner reported 8 layers patched): maximum channel difference 0 against a baseline re-rendered in the same session, itself identical to the C47 baseline. Block 27 at +0.0001, which changes only its float32 scales, is also identical, as those parameters never reach the model (notebook page 13). One step of bf16 rounding (block 27 at ±0.004) changes 87-88% of the pixels.
HoldsHashed filenames do not hide the condition from an observer who knows the edits, so every eye pass in this report is declared as made with the condition known.Pre-registered in notebook page 03: four-way forced choice, 17 of 20 and 12 of 20 correct against a 25 percent chance level; 12 of 20 joint hits against a threshold of 5.
HoldsScaling block 23 alone moves the saturation of a Krea-2 picture in one direction, monotonically with the dose and roughly in proportion to it.Pre-registered. Chroma falls strictly from -0.45 to +0.30 in 15 of 16 prompt-seed cells (threshold 14); doubling the dose from -0.15 to -0.30 multiplies the gain by 1.76 (window 1.6-2.4). On every older render with a blk23 arm, 83 of 83 move chroma the expected way.
HoldsWhere blk23 reaches the same saturation gain as adding "colorful, vivid highly saturated colors" to the prompt, it leaves the rest of the picture closer to the original than the words do.Pre-registered on layout r: 6 of 7 scorable cells, median +0.08. Confirmed afterwards with standard metrics: LPIPS 7 of 7, DINOv2 6 of 7. The comparison is possible in 7 of 16 cells only: in the other 9 the words add more saturation than blk23 at its strongest tested dose.
HoldsA preset built from late blocks changes different subjects written in the same style in a common direction, clearly more than it does across styles.Pre-registered (C49), all four rules supported. Within-family coherence above between-family coherence on 6 of 6 tested arms, median gap +0.19 (threshold 0.10); median within-family coherence 0.53 (threshold 0.40), about 70 percent of the coherence the same arm has across two seeds of one prompt (0.76). Middle-block arms 0.16 (H3, H4).
HoldsReordering whole blocks inside the checkpoint crosses the hatching strokes when pushed one way and runs them parallel when pushed the other, and the sign decides which.Pre-registered in notebook page 06, on 16 prompts sharing nothing with the corpus of the observation: 16 of 16 prompts and 79 of 80 image pairs in the predicted direction, Holm p 9.2e-5 at the permutation floor.
HoldsA block-reordering edit makes the subject take more of the frame, more so at the higher dose, on styles that did not exist when the prediction was frozen.Pre-registered in notebook page 03: geometric mean area ratio 1.234 across 10 new styles, 9 of 10 above 1, Holm-corrected p 0.018 to 0.035. Whether the structure or the size of the edit causes it is open: the control that separates them was not rendered.
HoldsA preset calibrated by eye on four character portraits changes three characters it never saw in a common direction, about as coherently as it changes the four it was tuned on.Pre-registered (C52), preset frozen before any test render. Median coherence across the held-out characters 0.51 (threshold 0.40), against 0.61 on the calibration characters (allowed gap 0.15); the preset agrees with itself across seeds at 0.78 (H1, H2).
HoldsAn observer who did not know which image carried the preset chose it as the one closer to the look its author described, on every sheet.Pre-registered amendment 2 (H4): 56 of 56 sheets, held-out characters 12/12 on the original and 12/12 on the mirrored set (p = 0.0002 each); she named LEFT exactly 28 times and never the same side on both versions of a pair (position check 0/28). One observer.
HoldsOn comic and cartoon prompts, edits to blocks 1-19 change the picture more than edits to blocks 20-27 at the same dose, and damage its surface far less often.Pre-registered (C60), new prompts and seeds, blind pairs. Layout r per edit: median 0.72 against 0.84, one-sided Mann-Whitney p = 0.007. Change seen by eye: 1.59 against 0.47 on a 0-2 scale, p = 0.0002 (0.002 with unanswered pairs scored as the most change). Damage of medium or stronger on the edited side: 17 of 90 pairs against 71 of 90; baseline sides 0 of 180.
HoldsEven the middle-block edits chosen because they looked clean carry a visible surface cost on new prompts; the cost is concentrated in a few edits and depends on the prompt.Pre-registered (C60) P4: edited-side damage of medium or stronger 0.19 against 0 on the baseline side, Newcombe 95% [0.11, 0.28], above the 0.10 bound for "no detectable cost". Four of the ten edits carry all of it (block 19 MLP + 8 of 9 pairs); six are at 0 of 9. Self-agreement on 15 repeats: 1.00. A follow-up on the six clean edits (C63, four new illustration prompts, 72 pairs) could not decide whether they are free: 4 of 72 damaged against 0, Newcombe [-0.005, 0.134], three of the four from block 9 attention +.
HoldsThe size of the change a text-encoder edit makes to the conditioning predicts how much the picture changes, without looking at the picture.Pre-registered twice. C67 E1: mean relative change over the words and readings an edit reaches against the eye's "how much it changed" on 140 elf edits, Spearman 0.71 (threshold 0.50); style changed against unchanged, AUC 0.80. C70 G3d: against the mean intensity of change by eye over five word orders, 20 edits, Spearman 0.80 (threshold 0.50); G3, rate of genre switches, 0.73. Exploratory check added after a review: the relation is carried mostly by differences between kinds of edit. Within the MLP-doubled edits, the ones that change genre, it nearly vanishes (C67 material 0.06, n 35, with 28 of 35 already labelled strong; C70 material 0.36, n 11, p 0.28); within the other kinds it stays 0.46-0.66.
HoldsBeyond a push shared by the whole prompt, an edit pushes small groups of two to four tokens in their own directions, and the boundaries of those groups follow the commas.Pre-registered (C68), all 12 readings, 241 encodes. Half-life of the residual similarity 3 tokens (median over 20 edits, range 2-5). H1: clauses pushed less alike than whole prompts across orders in 20 of 20 edits (0.54 against 0.97-0.99). H2: at equal distance, tokens of one clause pushed more alike than across clauses in 18 of 20, sign test p = 0.0002.
HoldsAt dose ±1, text-encoder edits change the genre and the content of a picture, usually including who is drawn, while costing less surface quality than a DiT preset.Pre-registered prediction P2 (C65): BRISQUE change -1.52 against +8.09 for the DiT preset of page 28, CLIP-IQA -0.001 against -0.037. Identity (ArcFace, C65) kept for at most 2 eligible characters in 19 of 20 edits. Exploratory eye pass (C64, 140 edits): surface medium or strong in 8 of 140; strong changes 40 of 70 when a half is doubled against 4 of 70 when it is zeroed.
HoldsInside the image model, the two strongest text-encoder edits move where the picture reads each phrase of the prompt about twice as much as two mild edits.Pre-registered (C69 P4), 25 re-renders pixel-identical to the originals: change of the attention maps against the original 0.29 and 0.30 for L06 and L12 MLP doubled, 0.16 and 0.13 for L10 MLP and L19 attention zeroed.
HoldsWith its style words removed, the elf character is drawn as anime: anime is the model's fallback for this description when nothing names a style, though not its default for an empty prompt.Pre-registered (C72 A1): the prompt without "realistic western comics style, bold ink outlines, hatched shadows", five word orders at two seeds, labelled anime in 9 of 9 labelled pictures (one unlabelled; bar 7 of 10). The same prompts with the style words: Western comic in 9 of 9. The empty prompt at four seeds: anime, realistic, anime, painting. One labeller, not blind. C73 found that anime is this prompt's fallback only: seven portraits without "Western comics style" fall back to painting or realistic renders (anime in 1 of 28).
HoldsWithout its style words, each character falls back to a genre of its own; there is no single default style.Pre-registered (C73 H1): seven C52 portraits without "Western comics style", four seeds each. Painting for the elf rogue, dragonborn and tiefling, realistic for the half-orc, mixed painting / realistic / 3D for the dwarf, gnome and halfling; anime in 1 of 28. With the style clause all 28 are Western comic. One labeller, not blind.
HoldsUp to the full dose (one MLP of the text encoder doubled), the edits change style and content without breaking the picture: the style moves before coherence is lost, and coherence is not lost at all.Pre-registered (C74 H3, amendment 2 fixing what counts as loss of coherence): L06 and L14 MLP on three portraits at two seeds, twelve doses from 0.10 to 1.00. The style changes before coherence is lost in 11 of 11 changing strips (bar 2/3); coherence is marked lost in none of the 18 strips, the L28 control included. One labeller, not blind.
HoldsAlong a dose ladder the intermediate pictures move toward the picture at full dose: the destination is set by the edit, not reached by a detour.Pre-registered (C74 H2): yes in 10 of 11 changing strips of L06 and L14 (0.91, bar 0.7). The one "no" is the elf rogue under L06, which passes through a painted look before ending in anime.
HoldsThe style change along the dose is gradual rather than a sudden step (*: pooled over two edits that disagree).Pre-registered (C74 H1), pooled over L06 and L14: gradual in 8 of 11 changing strips (0.73, bar 0.6), so the rule says gradual. *Split by edit, the two disagree: L14 is gradual in 6 of 6, L06 is a step in 4 of 5, from comic to photograph around d = 0.80. The split was not pre-registered. No strip changes style below d = 0.70.
HoldsThe first and largest cost of the L06 and L14 text-encoder edits is the character the prompt asks for: its traits fall steadily with dose and go before the style changes.Pre-registered (C75), blind yes/no labels, one question at a time. Part A (my labels, 222 pictures of the C74 ladder): retention falls with dose, median Spearman -0.89 over 18 strips (bar -0.50); traits go before the style in 11 of 11 L06/L14 strips (bar 2/3; 8 of 11 with a stricter criterion, exploratory); kappa 0.93 on repeats. Mean retention at d = 1.00: L06 0.52, L14 0.63, L28 0.93. Unchanged without the five traits the unedited model never draws (B0, eight seeds). C74 first noted it in free text. Status changed from open to holds by Alessandro on 2026-10-13.
HoldsHow much a text-encoder edit costs the character depends on its direction, not its size: L06 and L14 cost far more traits than random pushes of the same size, L28 fewer.Pre-registered (C75 B1), labelled blind by a second person who knew nothing of the study: retention under random pushes minus the real edit over 36 matched cells, +0.18 pooled (token +0.20, permuted +0.17; bar +0.15). At d = 1.00: L06 real 0.48 against random 0.89 / 0.87; L14 0.63 against 0.95 / 0.94; L28 0.97 against 0.92 / 0.83. Her repeats kappa 0.98; agreement with my labels kappa 0.85.
HoldsWhen the L06 or L14 edits change a character's skin, it becomes lighter; random pushes of the same size almost never change it. The prompts name no skin tone, so this is a drift toward the model's default, not a failure to follow the prompt.Pre-registered (C75 T4, part A, my labels): lighter in 52 of 53 skin changes (bar 0.80), lighter majority for 2 of 3 characters (the dwarf's skin never changes). Part B2, second labeller: lighter in 14 of 14 changes under real edits; random pushes change the skin in 6 of 108 pictures.
AmbiguousHow much a block rewrites the picture can be read, in part, from the spectra of its own MLP weights, beyond what its depth explains.Pre-registered (C46). Best Spearman rho 0.615 with depth removed, above the Bonferroni threshold 0.57, so the rule says supported; leaving one block out moves it between 0.50 and 0.70, so a single block can undo it. Correlational, 28 blocks, one checkpoint.
AmbiguousRewriting a prompt — reordering it, turning it into tags, using synonyms — changes the direction of a block's effect no more than changing the seed does, while changing the subject changes it a great deal.Pre-registered (C45), verdict inconclusive by its own rule. Writing against seed, median -0.04 (threshold -0.10): met. Writing more alike than subject on 12 of 12 scored arms (threshold 75 percent): met. Writing more alike than a one-object content change on 0 of 12 (threshold 60 percent): not met. By eye, the same change under every writing on all 24 arms.
AmbiguousA block permutation makes an attribute the prompt asks for, and the model usually drops, appear in almost every render, while a sign scramble moving the weights exactly as far does nothing.Exploratory, scored by me with the condition visible: 19 of 20 seeds against 1 of 20 for the stock model and 1 of 20 for the scramble. One prompt family; the test of generality was designed and never run.
AmbiguousThe fine-texture cost per block measured in notebook page 05 replicates on new seeds for its own two comic prompts, but does not extend as measured to photographs.Pre-registered attempt to overturn page 05 (C61): the gate failed (blocks 23-27, G = 0.989, p = 0.26) and the primary was undecided, so by its own rule nothing is decided. On P01 and P02, four new seeds: blocks 1-22 0.989 (page 05: 0.989), blocks 23-27 0.934 (0.932). On two photographs the tail turns into a gain (0.989 overall, block 27 at 1.27).
AmbiguousThe strong edits make the five word orders read the same phrases in more different places than the mild edits do, from the first steps of sampling.Pre-registered (C69 P1, P2). P1 holds by its rule with a margin of 0.003, and only L12 MLP doubled raises the divergence (+0.060); L06 does not (-0.004) although its pictures scored as high. P2 holds at step 0 but the separation is not kept at steps 3-6.
AmbiguousA random push of the conditioning as large as an edit's changes the genre of the picture as often as the edit does.Pre-registered (C72 C1-C3, amendment 2: read together). Per-token random pushes switch the genre about as often as the real edits (permuted 11/27, token 10/27, against 14/27; R 0.79 and 0.71, bar 0.5), mostly to anime (15 of 21 switches); the same random vector added to every token switches none (0/27). By the rule fixed before the labels the joint reading is "depends on the form of the push".
AmbiguousL28 MLP doubled, which never changes the style, still costs the character's traits.Pre-registered (C75 T3): mean retention at d = 1.00 minus at 0.10 = -0.07 (bar -0.15: inconclusive). The half-orc loses her orc features from 0.60-0.70; other traits mostly stay; the elf's face turns green. Under random pushes of its size the character fares worse (B1).
OverturnedThe family-coherent change the eye saw on the middle blocks is a change of content that a content embedding, DINOv2, would record.Pre-registered (H5): supported if the median within-family coherence of the five middle arms on DINOv2 changes reached the style-feature value plus 0.10 (0.26). It is 0.007, below the style-feature value 0.159: refuted. In DINOv2 space no arm is family-coherent (all W at most 0.06).
OverturnedPushed to dose 0.500, the macro-block sliders Block_4 and Block_1 move the picture far from the baseline while keeping its line work, and are the best operating points found.Published from two statistics, then retracted the next day when the renders were opened: Block_4 + at 0.500 leaves no subject, only a crumpled-stroke texture; Block_1 + at 0.500 is colour confetti. Block_4 + is already broken at 0.350.
OverturnedStructure coherence, a statistic of oriented line work, can rank edits by how much of the drawing they preserve.Pre-registered eye veto: 7 agreements in 9 resolved pairs against a threshold of 8 in 12. Both disagreements are one condition, Block_6 + 0.080, which the statistic scores above its baseline and which I and six blind model observers call broken; Block_1 - 0.500 is the same case. The sign is wrong, not the size.
OverturnedThe central macro-blocks give way under a push in a different way from the two at the ends of the stack.Pre-registered primary of the centre-push bench: T = +0.053, p = 0.19 over 495 relabellings, with the range guard passed, so a null and not an inconclusive. Block_5 sits in the centre and gives way hardest of all.
OverturnedThe difference between how consistent an edit's CLIP direction is on one prompt and on many prompts separates blocks that route meaning from blocks that filter structure.Audit of an unpublished analysis: no script computes its p-values; doses are mixed under one key; the measure tracks how alike the images are; its second-ranked semantic router, blk26 +, lays the same mosaic of colour cells over any content.
OverturnedThe preset changes a character's face no more than changing the seed does.Pre-registered (H3), refuted: on both eligible held-out characters the face under the preset is less similar to the base (ArcFace 0.75 and 0.74) than the base is to itself at another seed (0.82 and 0.75). Described after the test: 0.74 on average against 0.80 for a seed change and 0.29 for two different characters.
OverturnedA single text-encoder edit moves different comic characters in the same direction, as the DiT preset of page 28 does.Pre-registered (C65 H1), refuted: coherent in 4 of 20 edits against a bar of 14; median coherence 0.21 against 0.51 for the DiT preset. Identity (ArcFace) is kept for at most 2 eligible characters in 19 of 20 edits.
OverturnedPictures that leave the Western-comic style are the ones whose image model pays less attention to the words that name the style.Pre-registered three times, never supported. C69 P5 (between edits): L06 lowers the style share 0.095 to 0.054, L12 raises it to 0.121. C70 G1 (20 pictures, switched or not): AUC 0.46 (bar 0.70). C70 G1d (intensity 0-3): Spearman +0.05 (bar -0.40).
OverturnedThe edits that end in anime push the conditioning in the direction that writing "anime style" instead of "western comics style" would.Pre-registered (C71), 16 encodes, gate bit-identical. H1: cosine with the comics-to-anime direction against the number of anime pictures, Spearman -0.01 (bar 0.50). H2: with the anime-minus-painting direction, -0.00 (bar 0.40). Every cosine lies between -0.12 and +0.07.
OverturnedA strong text-encoder edit sends each character to the genre that character falls back to without style words.Pre-registered (C73 H2), not supported: of 43 switched pictures of the four characters with a clear fallback, 0.28 land on that fallback, against 0.27 expected if destinations ignored the character (bar: +0.20).
OpenBlocks near the output keep the composition of the picture and change its surface; the middle of the stack, worst at blocks 8 to 10 pushed positive, rewrites the picture itself.Exploratory, 23 prompts on three benches, doses calibrated by eye. Layout r with the baseline 0.88 for blocks 21-27, 0.65 for blocks 05-14; blk09 positive 0.46. Agrees with the pre-registered result of notebook page 05 that the cost of a push grows toward the output.
OpenOnce the change shared by every edit is removed, blocks 08-10, 15-16 and 23-26 pushed positive change the picture in the same direction, and blocks 22-27 pushed negative do too.Groups formed on the 12 styles prompts and found again on 11 prompts of two other benches, with other seeds and other doses (residual correlation +0.15 to +0.37); the group 02-05 did not come back (+0.01 to +0.14). Not pre-registered.
OpenThe blocks at the two ends of the stack change properties of the picture — colour, grain, sharpness — in the same way on every picture; the middle blocks change what is depicted, and differently on each picture.At one dose for all blocks, a block is recognisable as itself on another picture only at the ends (positive: blocks 0, 1, 25, 26, 27; criteria fixed before measuring, p = 0.0015). The ends keep the layout (0.88 for 21-27) and the middle rewrites it (0.65 for 05-14); middle blocks change the content most by DINOv2 (page 25). Counted in rendering statistics, however, the ends move more of them at once (effective number 9.6 for 21-27 against 7.5 for 05-14), so "fewer things" holds for kinds of property, not for statistics.
OpenAt the same dose, the blocks near the output reach visible artefacts first, while most middle blocks show none; the middle has room before artefacts but drifts toward pictures that are clean and incoherent.My artefact labels at dose 0.350, three prompts, one seed: blocks 4 to 11 OK in both directions; positive, strong artefacts on 19, 21, 22, 24 and 25, broken on 26 and 27. Agrees with the pre-registered result that the cost of a push grows toward the output (notebook page 05). The split into hard and soft limits is an observation, not measured.
OpenA provisional, by-eye description of what each of the 28 blocks does in each direction, offered as a starting point for anyone who wants to try the tuner, not as a measured result.Written by me while looking at the v4 bench (five prompts, one seed) on a page that also showed the 18 prompts of the styles and v3 benches. Where a measurement touches an entry, it agrees on blocks 00, 22, 23 and 27, partly on 01, and the statistic is the suspect on 26. Most Style-band entries have no measurement at all.
OpenAgainst a saturation slider applied to the finished image, block 23 is not a cleaner way to change colour: it also regenerates the picture and changes its lightness contrast. Adding colour it may look more natural than the slider; removing colour the slider looks more natural.C53, no new render; slider matched in chroma gain. Layout r 1.00 for the slider against 0.87 and 0.85 for blk23 (16 of 16 cells). Blind forced choice, one observer who knew the renders but not the side: adding colour blk23 chosen 12/16 and 11/16 (rule: 12 on both, not met); removing colour 1/16 and 4/16 (slider). The block also repairs shapes (a half-formed hood), so the choice mixes colour with content. The primary blind observer has not answered yet.
OpenLate-block presets are most coherent on cartoon prompts, less on oil paintings and least on photographs, where the eye found no common look for two of the arms.Split by family after the test, descriptive: up to 0.80 on cartoon, 0.28-0.71 on oil, 0.12-0.53 on photographs; the eye said no common look for blk20 and blk23 on photographs, where the numbers are 0.29 and 0.12.
OpenMiddle blocks also give a family a recognisable common change, but it is a change of what is depicted, and no measure used here sees it.Eye, deposited before the numbers: a common look in 8 of 12 Style-band cells and 2 of 3 blk09 cells. Style features: within-family coherence 0.06-0.17. DINOv2: 0.007, refuted as a substitute (page 25).
OpenBlock 9 pushed positive can change the identity of a subject, turning the female blacksmith into a man, and it does so at one seed and not at the other.Eye notes on the oil and photo families at seed 1414213; at seed 5772156 she stays a woman in all three families. CLIPScore on the blacksmith prompts drops by 3.8, the largest drop of any arm. Two seeds, one subject.
OpenFor an identical vocabulary, the order of the words changes the pose and framing of the picture but not what a block does to it.Exploratory, one prompt in five orders, two seeds, 56 arms. Consistency across orders tracks consistency across seeds (r = 0.92) and is on average 0.06 higher; median 0.69 on the 43 arms larger than the reordering itself. Baselines of different orders differ by Delta E 16-31.
OpenMiddle-block edits change the content of the picture more than late-block edits and cost nothing measurable in image quality, while late blocks change less and cost more.Pre-specified descriptive measurement, no decision threshold. DINOv2 similarity to the baseline 0.87 and 0.88 for blk17 + and blk09 +, against 0.90-0.96 for the late arms; BRISQUE -0.5 and -0.3 for those two, +9.6 for blk27 -0.25 and for the combo.
OpenThe portrait preset can flatten an expression the prompt asks for and remove small details the prompt names, while keeping the character recognisable.Analyst's look after all numbers, not blind, on seven pairs selected because ArcFace marked them: the gnome's prompted wide-eyed curiosity becomes a frown at three seeds of three; the half-orc's snarl becomes a stern closed face; prompted dirt smudges and chalk dust vanish. No deformation in any of the seven. Untested; block 8 (+0.15) is the first suspect.
OpenPushed at the same dose, the MLP half of a block is noisier than its attention half in most blocks; the attention adds noise only at the very end of the stack.Blind eye pass on the split atlas (C59), one seed, three prompts, one observer: of 19 block-sign cells with noise in either half, the MLP is noisier in 13, the attention in 2, tied in 4 (at medium or stronger: 7, 1, 3). Protocol fixed before the labels, no decision rule. The pre-registered measure of C58 could not decide.
OpenIn the first block the two halves compensate each other: either half lowered alone destroys the picture, while the whole block lowered by the same amount keeps its composition, though not its surface.C59 at -0.35: attention alone and MLP alone break the image in 9 of 9 cells each by eye; the whole block keeps the layout in 3 of 3 cells (layout r 0.69-0.80 against 0.05-0.36) but is labelled strong blotches blind. The whole block exists at one seed only.
OpenWhen a text-encoder edit makes a Western-comic picture change genre, it lands on anime far more often than on anything else, and only edits that double a layer half do it.Described, not tested (C70, one observer, seed 3141592, elf in five word orders). Of 100 edited pictures, 50 changed genre: 39 to anime, 11 to cartoon, none to realistic or painting. None of the four edits that zero a layer half changed genre; 13 of the 16 that double one did, in at least one order.
OpenWhere a strong text-encoder edit sends the picture depends on the edit's own direction, not only on its size.Reported, not tested (C72, 9 labelled cells per edit). L28 MLP doubled, the largest push, keeps the Western comic in 9 of 9 while random pushes of its size switch 16 of 18; L05 MLP doubled goes to anime in 9 of 9 while random pushes of its size switch 1 of 18. On seven portraits (C73, 14 pictures per edit): L06 MLP doubled gives realistic renders in 11 of 14, L14 cartoon in 9 of 14, L26 and L28 keep the Western comic in 14 of 14.
OpenSingle phrases of the prompt carry strong priors of their own, and they match what surfaces under edits: a female dwarf with a beard, a uniform drawn as anime.Described (C72 block B, four seeds, one labeller): "female dwarf" and the full dwarf prompt give a bearded woman in 4 of 4; "uniform" an anime girl in 4 of 4; "realistic western comics style" a bearded cowboy comic in 4 of 4; "female antlered elf brawler" anime in 3 of 4; phrases without a person are mostly realistic (78 of 165).

Holds33 renders · 10 prompts · 4 seeds · 2026-10-05

The edit, the instrument, and what a result had to pass

The direction I'm chasing. Before asking whether a block of weights is a knob, I need to know that the edit does only what I say it does, that the same render comes out twice, and that my own eye — the main instrument of this project — is described honestly.

What would kill it. A tuner that changes the picture at zero, a re-render that differs by a single pixel value, or an eye pass presented as blind when it was not.

Where we are. The pipeline is deterministic and the tuner is inert at zero, checked again before every confirmatory bench. The eye is not blind and is declared as such; every image it judged is published.

In two minutes

Krea-2 is a diffusion transformer with 28 single-stream blocks. Each block holds 13 weight tensors; eight of them are 2-D matrices (attention projections and the MLP), and the tuner reaches those eight. An edit in this report is one number per block: the block's eight matrices are multiplied by 1 + d, where d is the signed dose. Nothing is trained, nothing is added at inference, and a preset is just a vector of such numbers.

One picture, one block changed at a time: blk23 -0.30 makes it more saturated, blk09 +0.45 more three-dimensional and changes the scene, blk27 -0.25 softer and flatter.

Three blocks, three different kinds of change: colour, what is depicted, softness. The rest of this report asks how far such a change can be trusted to be the same on another picture.

A single-block edit multiplies the eight reachable 2-D tensors of one of the 28 blocks by the same factor 1 + d; the 1-D tensors stay untouched, and a preset is a vector of 34 such factors.

The same sampling is used throughout: euler_ancestral, simple scheduler, 9 steps, CFG 1.0, 1024×1280. Every result in this folder went through the same sequence: an observation by eye on an exploratory bench, a claim written down, a pre-registration with its decision rule and its scoring code committed, a reproduction check, the renders, my eye pass deposited in the repository, and only then the numbers.

The verdict

The instrument does what it says. With the tuner in the graph and every gain at zero the render is the render without the tuner, bit for bit; renders reproduce exactly across restarts and across benches, and that was checked again, on 28 images, before each of the three confirmatory benches in this report. The eye pass that every result here leans on is not blind, and is reported as made by one observer who knew the conditions.

Why I might be wrong

The data

The edit

The tuner node (ArthemyKrea2ModelTuner, Real Value mode, preceded by ArthemyKrea2ResetPatcher) takes a 34-slot vector; slot k is the dose of block k for k = 0 … 27. Only the 2-D tensors are scaled: the 1-D norm scales are never reached, so they cannot carry an effect (docs/normscales_never_applied.md). Doses are small — between 0.075 and 0.45 in this report — and differ by block, because a block near the output breaks at a dose a middle block barely feels (docs/RENDERS_2026-09-30_single_blocks_styles.md).

The same render twice

check where result
tuner at zero against no tuner notebook page 00, 15 cells, 3 prompts max channel difference 0
same render across a restart notebook page 00 max channel difference 0
wording bench, first row against the prompt-order baseline benchmark_prompt_writing 1 / 1 identical
saturation bench, rows already on older benches benchmark_blk23_colorful 26 / 26 identical
prompt-family bench, first row against the styles baseline benchmark_prompt_family 1 / 1 identical
tuner active, no weight changed (block 27 matrices x1.0001) against no tuner benchmark_null_patch max channel difference 0
tuner active, block 27 at +0.0001 (float32 scales only) benchmark_null_patch max channel difference 0
tuner active, block 27 at +0.004 / −0.004 (every weight one bf16 step) benchmark_null_patch 87% / 88% of pixels differ (mean 2.3 / 2.1 of 255)

Each reproduction row was queued alone first and compared before the rest of the bench was allowed to run. The outputs of the checks are in the render notes listed under Provenance.

The first row only shows that the tuner is clean when it is switched off: at zero it adds no patch at all. Whether it stays clean when switched on was a question I raised on 2026-10-06, and the C55 rows answer it (docs/prereg_null_patch.md). Read from the code, an active patch is W × (1 + d) computed in float32 and rounded back to bfloat16, on the patched tensors only; a multiplier of 1.0001 rounds every bf16 weight of block 27 back to itself. With the node active on that patch the image is the same file pixel for pixel. The node is a clean multiplier. The last row shows the other side: the smallest change the matrices can take, one rounding step on every weight of one block, already redraws the picture slightly almost everywhere. Every edit in this report, however small, therefore re-draws the image along a nearby path; page 22 shows what that does to an unstable detail.

Why the eye pass is declared open

In notebook page 03, a pre-registered round asked me to tell which edit produced an image whose filename was a hash. I was right 17 times in 20 on one condition and 12 in 20 on the other, against 5 in 20 by chance. Hiding names does not hide an edit with a visible signature from someone who has looked at hundreds of them. So every eye pass in this report is declared as made with the condition known, it is deposited in data/ before the numbers are computed, and all the images are published so that anyone can repeat it.

The measures

When a statistic and the eye disagree, the statistic is suspected first: twice in this project a statistic ranked destroyed images as the best (page 26).

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override
prompts:
  files: [data/prompt_writing_plan.csv, data/blk23_colorful_plan.csv, data/prompt_family_plan.csv]
  ids: [V1_Original, E1_cartoon, E3_oil, E7_sepiaphoto, C2_rally, C3_fox, C4_stilllife, P3_archerforest, P4_selfie, REPRO_C3_fox]
seeds: [3141592, 2718281, 1618033, 4669201]
conditions:
  - name: repro_baseline
    dose: 0
    measured_D: 0 (no edit)
  - name: repro_b23
    dose: "-0.300, +0.150, +0.300 on block 23"
    measured_D: not measured; the dose is a per-block gain, not a calibrated displacement
outputs:
  folders: [benchmark_prompt_writing, benchmark_blk23_colorful, benchmark_prompt_family]
  manifest: data/prompt_writing_plan.csv, data/blk23_colorful_plan.csv, data/prompt_family_plan.csv
analysis:
  scripts:
    - experiments/check_prompt_writing_repro.py  # 170a82a27b99ef708b314890096f01bf0d21c14e7c4c27b4ed866a83deca28c7
    - experiments/blk23_colorful.py --repro      # cbfc0f8354fdc869d400b7d45c698f6828e1dd04835def28f4ecd9da09154924
    - experiments/prompt_family.py --repro       # 67fc54ec7a5fdce93dd86ea0190378f230bfcfac00e731843a2d2e4d4c69b427
  criterion: maximum absolute pixel difference 0

Provenance

Open1583 renders · 26 prompts · 4 seeds · 2026-10-05

A map of the 28 blocks

The direction I'm chasing. If knobs live in the weights, they should live in particular places. I pushed every block on its own, in both directions, on 23 prompts, and wrote down what each one does, so that the confirmatory tests on the other pages had somewhere to aim.

What would kill it. A stack where every block does a bit of everything, with no region that behaves differently from the others and nothing that comes back on a second set of prompts.

Where we are. The two ends behave like controls on the surface of the picture; the middle rewrites what is depicted. A few groups of neighbouring blocks push the same way on a second set of prompts. This page is a map, not a test: only the weights claim was pre-registered, and it passed by a thin margin.

In two minutes

The atlas behind this page is three benches — 12 prompts in eight styles, 6 prompts at two seeds, 5 prompts with comic pages and crowns seen from above — with every block pushed on its own in both directions at a dose I calibrated by eye. Looking at the sheets, the stack sorts itself into four bands: Base (00–01, grain and detail), Style (02–18, light, form, abstraction), Details (19–22) and Correction (23–27: saturation, sharpness, grain). My block-by-block definitions are in data/single_blocks_v4_definitions_alessandro.md.

Blocks 21 to 27 keep the layout of the picture (layout r around 0.88) while the middle of the stack, worst at block 9 positive, rewrites it.

What the eye saw first was a split between blocks that redraw and blocks that re-shoot. Blocks 02–07 pushed positive keep frame, pose and props and redraw the subject (a younger face, a cleaner line, smoke over the forge). Blocks 08–09 pushed positive change the picture itself: a crown seen from above turns to a side view, the blacksmith becomes a photograph, the selfie changes identity.

The verdict

The ends of the stack are where a single block behaves like a surface control: the layout stays, and colour, grain or sharpness move. The middle is where single blocks change content — viewpoint, identity, medium — and are least predictable. A few groups of neighbouring blocks push in the same direction on a second set of prompts. The split between stable and unstable blocks is partly visible in the weights themselves, but that result is marginal.

Why I might be wrong

The data

Where the layout holds

Layout r is the correlation of the lightness channel with the baseline at 64×80 (1 = the same composition), averaged over 23 prompts and both signs (data/block_colour_layout.csv):

blocks 00–01 02–04 05–14 15–20 21–27
layout r 0.75 0.75 0.65 0.73 0.88

The bands hold at the two ends and blur in the middle; the sharpest break is at the Correction end, not between Style and Details. Positive pushes of blocks 08, 09 and 10 are the least stable of all (0.55, 0.46, 0.51). This agrees with two pre-registered results of the exploratory notebook: every push costs fine texture and the cost grows toward the output, and two places pushed the same distance move the picture in distinguishable directions — position, not only distance, decides what an edit does.

What the ends change, and what the middle changes

A separate bench pushed every block by the same amount, 0.350, on three prompts, so that blocks can be compared at equal dose. The test asked, before measuring, whether a block's change on one picture is recognisable as that block's change on another. On the positive side only five blocks are: 0, 1, 25, 26 and 27 — the two ends of the stack (p = 0.0015; on the negative side 0, 8, 20 and 27). Everywhere else, a block does something reproducible on the same picture but something different on another (docs/single_blocks_atlas_result.md, data/single_blocks_tests.csv).

Put together with the layout above and with DINOv2 on page 25, the picture is consistent: the ends act on properties of the image — colour, grain, sharpness, softness — and act the same way whatever is depicted; the middle acts on what is depicted — viewpoint, shape, identity, realism — and how it does so depends on the picture. The two sheets in the guide below show it directly: the crown stays the same crown under blocks 21 to 27 and becomes another object under many middle blocks.

One measure does not fit the simple wording "the ends change fewer things". Counting how many of 29 rendering statistics an edit moves at once (the participation ratio of the change, at dose 0.350), the ends move more of them, not fewer: median 9.6 for blocks 21–27 and 10.1 for 00–01, against 7.5 for 05–14 (data/block_change_breadth.csv). Grain and sharpness move many texture statistics together. The ends change fewer kinds of property, through many statistics; the middle changes content, which rendering statistics only partly see.

Blocks that push together

For each pair of arms on the same prompt, the change each makes to the picture is correlated pixel by pixel after removing the prompt's common mode — the part of the change that every edit shares, simply because any edit moves the picture away from that particular baseline. Before removal the two signs of one block correlate positively on 27 of 28 blocks; after it, negatively on 25 of 28.

Once the change every arm shares is removed, positive arms 08-10 push the same way, 23-26 push the same way, and the early-middle blocks push against the late ones.

group styles, 12 prompts other benches, 11 prompts
08 · 09 · 10, positive +0.24 to +0.27 +0.15 to +0.23
23 · 24 · 25 · 26, positive +0.21 to +0.51 +0.23 to +0.37
15 · 16, positive +0.17 +0.21
02 · 03 · 04 · 05, positive +0.19 to +0.23 +0.01 to +0.14 — does not come back
block 05 against block 24, positive −0.23 −0.22

Negative arms 22–27 form one group as well (most pairs +0.19 to +0.54). Blocks 25 and 26 are the exceptions where both signs push the same way even after removal — the two blocks I had already marked as damaging in both directions. The tuner's six macro-block sliders (Block_1 … Block_6, each a run of consecutive blocks) cut across two of these groups: 08–10 straddles Block_2/Block_3 and 23–26 straddles Block_5/Block_6. A single block is the finer lever.

What the weights show

A pre-registered test (C46) asked whether any of 34 statistics of a block's weight matrices tracks how much the block rewrites the picture, beyond what depth alone explains. The analyst's registered prediction was that depth would explain everything; it failed.

The blocks that rewrite the picture most, 08 and 09, have the largest singular value of their MLP gate in the whole stack; the late blocks that keep the layout have the smallest.

statistic ρ raw ρ with depth removed
mlp.down.sigma1 −0.41 −0.615
mlp.gate.stable_rank +0.53 +0.613
mlp.down.stable_rank −0.36 +0.585

Three statistics pass the Bonferroni threshold of 0.57; leaving one block out keeps them between 0.50 and 0.70. Two readings are worth recording. Blocks 08–09 have the strongest single direction in their MLP gate in the stack (σ₁ 113 and 130 against 34–97 elsewhere). Blocks 26–27 write through almost one direction (stable rank of the attention output 26 and 13 against 100–260 elsewhere), which is one mechanical reading of a knob. Block 23, the saturation knob of page 22, does not stand out on any of the 40 values.

How far each block can be pushed

At the same dose, blocks do not break at the same point. I labelled every edit of the equal-dose bench by the artefacts I could see, from OK to BROKEN (data/single_blocks_eye_artifacts_alessandro.csv).

At the same dose 0.350 blocks 4 to 11 show no artefact in either direction, while most blocks from 19 to 27 pushed positive show artefacts and blocks 26 and 27 break the picture.

The output end is the most sensitive: pushed positive, blocks 19, 21, 22, 24 and 25 show strong artefacts at 0.350 and blocks 26 and 27 destroy the picture; their negative side is safer. This matches a pre-registered result of the exploratory notebook — the cost of a push grows toward the output, and the tail is rectified: positive pushes wreck it, negative ones barely move it. The middle, from block 4 to 11, shows no artefact at this dose in either direction. These labels became the starting doses of the later benches: up to 0.45–0.55 in the middle, 0.05–0.15 on the positive side of blocks 26 and 27.

Two kinds of limit show up, and the labels above see only the first:

The soft limit is my observation, not a measurement; no statistic in this project detects it, and page 26 shows how statistics can read such a picture as an improvement.

A starting guide: what each block seems to do

Read this as a map drawn by hand, not a measurement. I wrote it while looking at the v4 bench — four crowns and one comic page at seed 1234567 — on a page that also showed the 18 prompts of the styles and v3 benches. Each entry is the change I found most evident; Style-band blocks do many other things. It is provisional and meant to be expanded and corrected. Its use is practical: where to start, roughly where "style" begins, and what to expect from each block in each direction.

The same guide in pictures, on two of the v4 prompts: each pair is the block pushed negative and positive, at the doses below.

Every block pushed in both directions on a crown seen from above: from block 21 onward the crown stays the same object, while middle blocks turn it into an open ring, a side view or another crown.

Every block pushed in both directions on a four-panel comic page: the last blocks change colour, softness and grain of the same panels, the middle blocks redraw the characters and the panels themselves.

Doses are those of the v4 bench (data/block_colour_layout.csv, rows v4); they are where these effects were seen, not safe defaults, and page 23 shows that doses chosen on single images can be too strong for a preset.

block dose − / + negative positive
Base
00 −0.20 / +0.25 more grain, detail, colour variety, colour confetti soft and hazy: less grain, detail and colour variety
01 −0.40 / +0.25 softer colours, subtle textures patchy colour, flat tints, more grain and detail (the opposite of 00)
Style
02 −0.45 / +0.40 fine textures and micro-detail; less camera control flat fills, toward close-up, more camera control, colour blocks
03 −0.55 / +0.40 less natural, less three-dimensional light natural, three-dimensional light (changes a lot with the prompt)
04 −0.55 / +0.55 fine-grained detail, less abstraction coarse, merged detail; simplification and abstraction
05 −0.55 / +0.55 darker, dirtier, messier brighter, cleaner
06 −0.55 / +0.55 more volume, more organic; fewer colours, less stylisation more colour, more stylised and artificial; less volume
07 −0.55 / +0.55 elements blend less (less concept bleeding), fewer deformations elements blend more (more concept bleeding), more deformations
08 −0.55 / +0.55 more expression and natural poses; less texture realism, less flattening more texture realism, deformation and flattening; less expression
09 −0.55 / +0.55 less realism of volumes and materials more realism of volumes and materials
10 −0.45 / +0.45 more expression (varies with the prompt) less expression
11 −0.45 / +0.45 more camera control, style emphasised; less deformation more deformation and abstraction; camera control and style lost
12 −0.45 / +0.40 more camera control, perspective, imperfections; less deformation more deformation; less camera control, perspective, imperfections
13 −0.45 / +0.40 organic geometric
14 −0.55 / +0.40 details more distinct; less colour contrast, less texture depth more colour contrast and texture depth; details less distinct
15 −0.45 / +0.40 more depth (light, shadow, reflections, translucency), more realistic detail less depth (simplified, flattened subjects), less realistic detail
16 −0.45 / +0.30 more complex textures, more detail, less abstraction muffled textures, fewer details, more abstraction
17 −0.45 / +0.40 less synthesis: less stylised, closer to the prompt more synthesis: simpler, further from the prompt
18 −0.45 / +0.30 more depth and volume less depth and volume
Details
19 −0.45 / +0.25 subjects shaped by form, more complex detail subjects shaped by light, less complex detail
20 −0.55 / +0.45 parts of the subject blend together parts of the subject separate, more distinct in colour
21 −0.45 / +0.25 finer grain of detail and imperfection coarser, accentuated grain of detail and imperfection
22 −0.45 / +0.25 sharpens and flattens textures blurs and softens textures (borders on Correction)
Correction
23 −0.30 / +0.30 more saturation less saturation (page 22)
24 −0.40 / +0.20 more colour contrast (flatter, more distinct colours), harsher textures less colour contrast (softer, more complex colours), gentler textures
25 −0.45 / +0.25 less colour blur more colour blur (damaging in both directions on other benches)
26 −0.25 / +0.15 fewer fine textures more fine texture, adds grain
27 −0.25 / +0.05 blurs and darkens adds grain and lightens, like an aggressive sharpen filter

Where a measurement touches an entry (docs/block_groups_and_prompt_order.md §4, on the prompt-order images): the statistics agree on 00, 22, 23 and 27; on 01 "opposite of 00" holds for grain and detail but not for the whole effect; on 26 the spectral statistic says the opposite, and a 1:1 crop sides with the description — what reads as grain is a mosaic of colour cells. On page 23, blk09 + raised realism by eye on every family, as the guide says; blk17 + read on photographs as "focus on the subject", which the guide does not anticipate. The other Style-band entries have not been measured.

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override (one block at a time)
prompts:
  measured_on: data/block_colour_layout.csv (12 styles prompts, 6 v3 prompts, 5 v4 prompts)
seeds: [2718281, 3141592, 1618033, 1234567]
conditions:
  - name: single block, negative dose, each of 28 blocks
    dose: calibrated by eye per block and per bench
    measured_D: not measured; the dose is a per-block gain, not a calibrated displacement
  - name: single block, positive dose, each of 28 blocks
    dose: calibrated by eye per block and per bench
    measured_D: not measured
outputs:
  folders: [benchmark_single_blocks_styles, benchmark_single_blocks_v3, benchmark_single_blocks_v4, benchmark_single_blocks_atlas]
  manifest: no single committed manifest for all three benches; data/block_colour_layout.csv lists every measured image
analysis:
  scripts:
    - experiments/block_colour_layout.py        # 9b9aea19f1d6f43920cf0cc832d4be23063815d3290723cc4dd7e3bc27147de1
    - experiments/block_effect_overlap.py       # 29853a9f70e6f86987c119d0f74112517cf56e92a3754cb6cf212ca32c4ae188
    - experiments/block_weight_structure.py     # 1df6cc4b4cedf27e99efba52f19cf7318b7a5572f228e53abcd17e900e405645
    - experiments/block_change_breadth.py       # 564ed1578c1c6db997e489241d3cb1991f7ef5859de50c153e15b218bec575b1
  produces: data/block_colour_layout.csv, data/block_effect_overlap_mean.csv, data/block_weight_structure.csv, data/block_weight_structure_test.csv, data/block_change_breadth.csv

Provenance

Holds128 renders · 8 prompts · 4 seeds · pre-registered · 2026-10-04

One block that turns saturation up and down

The direction I'm chasing. If the weights hold knobs, one of them should do one thing everywhere. Block 23 looked like a saturation control on every bench where I pushed it, and I wanted to know whether it could replace the words people type to get colour.

What would kill it. Colour moving the wrong way, or not growing with the dose, on more than two of sixteen prompt-seed pairs — or the words "colorful" disturbing the picture less than the block at the same colour gain.

Where we are. The knob is real and gentle. It moves colour the right way almost everywhere and touches the rest of the picture less than the words do, but on half the prompts the words simply reach further.

In two minutes

Krea-2 has 28 transformer blocks. Multiplying the weights of block 23 by a little more than one lowers the saturation of the picture; by a little less than one, raises it. I rendered eight prompts — a cartoon elf, an oil-painted elf, a sepia photograph, a rally car, a fox, a still life, an archer, a selfie — at two seeds each, along a ladder of five doses, and next to the same prompts with "colorful, vivid highly saturated colors" or "muted colors, desaturated, low saturation" added to the text.

On all eight prompts blk23 moves colour the expected way at every rung, while the words "colorful" redraw the cartoon elf and add a cut lemon and a new composition to the still life; under each panel, the measured chroma change.

Read the sheet by columns. Along the ladder the picture stays the same picture and only its colour moves. The second column is what the words do: the cartoon elf turns blonde and is redrawn, the still life gains a cut lemon and a pink table. The words do more — more colour and more of everything else.

The verdict

Block 23 is a saturation knob: monotone on 15 of 16 cells and roughly proportional to the dose. At the same colour gain it disturbs the picture less than the words, on every standard metric tried. It is a gentle knob — on 9 of 16 cells the words reach more colour than the block at its strongest tested dose — and its desaturating side is weaker and less clean than its saturating one. Against a saturation slider applied afterwards it is not the cleaner tool: it also regenerates the picture.

Why I might be wrong

The data

How it was measured

Each image is compared with the baseline of the same prompt and seed in CIELAB at 64×80: mean chroma change, and layout r, the correlation of the lightness channel with the baseline. The words are matched to the ladder by linear interpolation of chroma between rungs; layout r, LPIPS and DINOv2 cosine are interpolated at the same point.

Direction and proportion

On all eight prompts blk23 -0.45 adds colour and blk23 +0.30 removes it while the picture stays the same picture.

Chroma change falls monotonically from blk23 -0.45 to +0.30 in 15 of 16 prompt-seed cells, with a median of +3.9 at -0.45 and -3.1 at +0.30.

test registered threshold result
chroma falls strictly along the ladder ≥ 14 of 16 15 of 16
gain at -0.30 over gain at -0.15, median 1.6 – 2.4 1.76

The one exception is the sepia photograph at seed 4669201, where +0.15 and +0.30 remove almost the same colour (−1.62, −1.51). Before this bench, every render with a blk23 arm in the repository — 83 images across five benches — already moved chroma the expected way (data/blk23_saturation_all.csv).

Against the words

Where blk23 reaches the chroma gain of the words "colorful" (7 of 16 cells), it leaves the picture closer to the baseline: layout in 6 of 7, LPIPS in 7 of 7, DINOv2 in 6 of 7.

median over 16 cells layout r
"colorful" chroma +5.7 0.80
blk23 −0.45 chroma +3.9 0.87

In 9 of 16 cells the words add more colour than blk23 at −0.45; on the cartoon elf +9.8 against +1.6. On the sepia photograph it runs the other way: blk23 +5.2, the words +2.2. My eye, asked which of the two changed the content more with colour ignored, said the words in 9 of 16 cells, blk23 in 2, equal in 5 (data/blk23_colorful_eye_alessandro.csv, deposited before the numbers).

No measured quality cost: BRISQUE moves by +0.9 for blk23 −0.45 and −0.95 for the words; CLIP-IQA by at most 0.02 (data/standard_metrics_summary.csv).

Against a slider in post-production

A reader asked for the comparison that matters in practice: not the words, but the baseline with its saturation raised or lowered afterwards. No new render was needed. Each baseline was passed through an ordinary saturation slider, with the strength chosen so that its colour change equals that of the blk23 image it is compared with (C53, docs/prereg_blk23_vs_postproc.md).

On every prompt the slider keeps the baseline exactly and only moves colour, while blk23 -0.45 adds colour with deeper shadows and blk23 +0.30 removes it with a softer, hazier picture; the words change the picture most.

What was expected, and written down before measuring, holds: the slider leaves the layout of the picture untouched (layout r 1.00) and the block does not (0.87 adding colour, 0.85 removing it), in 16 of 16 cells. Block 23 is not a cleaner way to change saturation than a slider: it changes colour and regenerates the picture, raising lightness contrast when it adds colour (+0.9 in the standard deviation of L) and lowering it when it removes colour (−0.6). That is the softening my eye had marked on the desaturating side.

Which looks more natural is the question a slider cannot answer for itself. In a blind forced choice of 64 sheets — each pair twice with the sides swapped — I answered without knowing which side was which, though I had seen these renders before:

original mirrored rule (≥ 12 of 16 on both)
adding colour: blk23 −0.45 more natural 12/16 11/16 not met — no difference shown
removing colour: blk23 +0.30 more natural 1/16 4/16 the slider looks more natural

The position check passed (the same side on both versions in 4 of 32 pairs). But the comparison cannot isolate colour: block 23 regenerates the picture, and sometimes repairs a shape the baseline left half-formed — the archer's hood, torn between the hood and the long hair of the prompt. I recognised the blk23 images and was drawn to them for that repair, even where the baseline's colours looked better to me. This is the diagnostic observer; the primary one, who has not seen the project, has not answered yet. LPIPS and DINOv2 for this comparison are pending. Data: data/blk23_postproc_match.csv, data/blk23_postproc_measures.csv, data/blk23_postproc_blind_tests_alessandro.csv; details in docs/blk23_postproc_result.md.

A curiosity: the hood that almost any edit completes

In the comparison with the slider I found myself drawn to some blk23 images for a reason that had nothing to do with colour: on the archer at seed 3141592 the baseline draws the hood only halfway — a grey fragment on one side, hair on the other. The prompt asks for "a dark grey hood obscuring some of her hair" and "brown hair", and the model finishes neither: a watershed, a point where the picture is balanced between two requests. Block 23 completed the hood. So I labelled, blind to the condition, all 78 renders of this prompt that already existed (C54, exploratory; my labels agreed with themselves on 12 of 12 repeats, and with Claude's independent labels on 74 of 78).

On the archer at seed 3141592 the baseline hood is half-formed; blk27 -0.075, blk09 +0.55, blk23 -0.45 and the words "colorful" all complete it, blk21 +0.25 leaves it half-formed and blk13 -0.45 lowers it.

Block 23 is not special here. Of 69 edits of that seed, 58 complete the hood — blocks from 00 to 27, both signs, a dose as small as blk27 −0.075, and the words "colorful". Six leave it half-formed, four lower it, one is unclear. The expectation I wrote down first, that the middle blocks would change it more often than the end blocks, did not hold (21 of 23 against 17 of 22). At seed 4669201, where the baseline hood is whole, none of the seven edits broke it.

How small can the push be? The smallest change the weights of a block can take — one rounding step on every weight of block 27, in either direction (C55, page 20) — redraws 87% of the pixels slightly and leaves the hood half-formed. A dose ladder on four blocks, one per band (C56, 40 renders, labelled blind, 7 of 8 repeats consistent), finds a threshold, and a step: below it the hood stays half-formed, above it it never comes back.

Pushed negative, blocks 10, 00 and 20 complete the hood from dose 0.02 and block 23 from 0.08; pushed positive, block 10 lowers it at 0.04 and completes it at 0.16, block 00 completes it at 0.08, block 23 lowers it at 0.08 and block 20 leaves it half-formed up to 0.16.

Nothing moves at 0.01. Pushed negative, three of the four blocks complete the hood at 0.02; block 23, the one that changes content least, needs 0.08. Pushed positive, the thresholds are higher and the hood is as likely to be lowered as completed. Across the eight block-and-sign pairs the threshold falls as the block's content change at equal dose rises (Spearman −0.60), as I expected; but the direction of the push matters more than the block. One seed, one ridge.

How common is the ridge itself? Thirty more baselines of this prompt, at thirty new seeds, produced no half-formed hood at all (C57): over the 32 seeds now rendered it appears once, so the state is rare, and the ladder above stands on a single case. The four predictions I had written for a second seed were never tested.

The half-formed hood is an unstable state of one seed, and any displacement of the weights, however small, sends the sampler (euler_ancestral, which adds noise at every step) down a slightly different path that lands on one side of the ridge. Two things follow. Every edit in this report carries this re-draw of the unstable details along with its intended effect, which is part of what a slider on the finished image does not do. And a claim that an edit fixes a detail, made on one seed, needs other edits of the same seed as its control. Data: data/hood_tally_alessandro.csv, data/hood_threshold_tally.csv, data/hood_scout_seeds.csv; details in docs/hood_watershed_result.md, docs/hood_threshold_result.md, docs/hood_second_ridge_result.md.

The controls

Every image of the 26 conditions that already existed on older benches at the original seed was re-rendered and came out pixel-identical (docs/RENDERS_2026-10-04_blk23_colorful.md).

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override (slot 23 = signed dose)
prompts:
  file: data/blk23_colorful_plan.csv
  ids: [E1_cartoon, E3_oil, E7_sepiaphoto, C2_rally, C3_fox, C4_stilllife, P3_archerforest, P4_selfie]
seeds: [2718281, 3141592, 1618033, 4669201]
conditions:
  - name: b23_m0.450
    dose: -0.450
    measured_D: not measured; the dose is a per-block gain, not a calibrated displacement
  - name: b23_m0.300
    dose: -0.300
    measured_D: not measured
  - name: b23_m0.150
    dose: -0.150
    measured_D: not measured
  - name: b23_p0.150
    dose: +0.150
    measured_D: not measured
  - name: b23_p0.300
    dose: +0.300
    measured_D: not measured
  - name: txtpos
    dose: 0
    measured_D: 0 (prompt + ", colorful, vivid highly saturated colors")
  - name: txtneg
    dose: 0
    measured_D: 0 (prompt + ", muted colors, desaturated, low saturation")
outputs:
  folder: benchmark_blk23_colorful
  manifest: data/blk23_colorful_plan.csv
analysis:
  script: experiments/analyze_blk23_vs_colorful.py
  sha256: 3ac2b673851d036e18658833016c32a774cc90ba6754753ce89c62fc9897d311
  produces: data/blk23_colorful_measures.csv, data/blk23_colorful_test.csv
  related: experiments/analyze_standard_metrics.py, data/blk23_matched_chroma.csv

Provenance

Holds433 renders · 18 prompts · 2 seeds · pre-registered · 2026-10-05

One preset for a whole family of prompts

The direction I'm chasing. If I settle on a way of writing prompts — "Cartoon style illustration." followed by whatever I need — can one preset give everything I write that way a common look, whatever the subject? That is what a knob would be good for in practice.

What would kill it. A preset whose change is no more alike across the subjects of one family than across different families, or too weak to be of use.

Where we are. For late blocks it works: strongly on cartoon, less on oil, weakly on photographs. Middle blocks do something more interesting that no measure here can see, and they can change who is in the picture. The doses I calibrated on single images are too strong for a preset.

In two minutes

Three families — "Cartoon style illustration.", "Oil painting.", "Photograph." — each followed by the same six subjects: a blacksmith, a rally car, a fox, a still life, a fisherman, a lighthouse. Two seeds each. Eleven edits: five late blocks at my calibrated doses, a combined preset of four of them at lower doses, block 9 as a pre-declared control, and four middle blocks added at my request before any render.

The combined late-block preset gives the six cartoon subjects the same flatter, brighter, more saturated look, and changes the oil and photo families in their own, weaker ways.

Read the cartoon columns first: six different subjects and one recognisable change — flatter fills, brighter colour, cleaner outlines. In the oil and photo columns the same preset does something milder, and different from what it does to cartoons.

The verdict

Late-block presets are coherent inside a family: on all six tested arms the change is more alike across the subjects of one family than across families, and inside a family it keeps about 70% of the agreement it has across two seeds of one prompt. Coherence is strongest on cartoon and weakest on photographs. Middle blocks give a common change that I see and no measure here records, and block 9 can change a subject's identity. At these doses the late blocks cost visible noise; "clean it up afterwards" was not tested.

Why I might be wrong

The data

Coherence inside a family

For each arm, each image's change from its own baseline is a vector of 23 standardised style features. W is the mean cosine between the changes of different subjects in the same family; B between prompts of different families; S between the two seeds of one prompt (the ceiling).

Every arm is more coherent within a family than between families; for the late blocks the gap is large and coherence reaches about 70 percent of the coherence across seeds.

rule threshold result verdict
H1 the family matters W > B on ≥ 5 of 6, median W − B ≥ 0.10 6 of 6, +0.19 supported
H2 coherence is usable median W ≥ 0.40 0.53 supported
H3 blk09 + below the tested median W < 0.53 0.16 supported
H4 the Style band is less coherent median W < 0.53 − 0.10 0.16 supported

The combo: W 0.53, B 0.26, S 0.75 (data/prompt_family_test.csv, data/prompt_family_arms.csv).

Family by family

Late-block presets are coherent across subjects inside a family, most on cartoon (up to 0.80) and least on photographs; middle blocks stay near 0.2 everywhere.

arm cartoon oil photo eye: common look? (cartoon / oil / photo)
blk16 +0.30 0.79 0.34 0.14 yes / yes / partly
blk20 +0.45 0.80 0.55 0.29 yes / yes / no
blk23 −0.30 0.55 0.28 0.12 yes / yes / no
blk26 +0.15 0.65 0.71 0.53 yes / yes / yes
blk27 −0.25 0.56 0.59 0.42 yes / yes / yes
combo 0.76 0.36 0.48 yes / yes / yes

Where I saw no common look, the numbers are among the lowest. This agrees with what the exploratory benches kept suggesting: photographic style is the hardest to steer.

The middle blocks: the eye against the numbers

The four Style-band arms and the blk09 control sit at W 0.06–0.17, barely above B. My eye pass said the opposite in most cells: a common, recognisable change in 8 of 12 Style-band cells and in 2 of 3 blk09 cells. What I wrote down is a change of content: blk09 + "raises realism coherently in all", and on photographs it "idealises instead of making more realistic"; blk17 + reads as "focus on the subject". In the sheet below (seed 5772156) the cartoon rally car becomes a three-dimensional render.

Block 9 pushed positive makes the cartoon subjects more three-dimensional and realistic and rearranges the scenes, a change of content more than of rendering.

The 23 style features measure how a picture is rendered — texture, edges, colour. H3 and H4 are supported as statements about rendering statistics; they do not show that middle blocks lack a family-coherent effect, only that their effect is not a rendering effect. The obvious candidate for a content measure, DINOv2, was tried with a pre-registered threshold and failed (page 25): "more realistic" points in a different direction for a fox and for a car in a content embedding. The middle blocks' coherence remains an observation by eye.

A change of identity

Under blk09 +0.45 the female blacksmith stays a woman at seed 5772156 in all three styles, and at seed 1414213 turns into a man in the oil painting and in the photograph.

At seed 1414213 blk09 + turns the female blacksmith into a man in the oil and photo families; at seed 5772156 — the seed of the sheet above — she stays a woman in all three. In the cartoon family the same edit turns the drawing into a three-dimensional render and keeps the woman. The edit moves the picture toward the more common reading of the words: "blacksmith" toward a man. CLIPScore on the six blacksmith prompts falls by 3.8 under blk09 +, the largest drop of any arm (data/standard_metrics_summary.csv). One subject, two seeds: this is an observation with a number that agrees, not a test.

The cost

By eye, blk26 +0.15 and blk27 −0.25 are not acceptable in any family — a uniform patina of noise — and the combo is acceptable only in part in two families. BRISQUE agrees on blk27 and the combo (+9.6) and does not see blk26 (+0.4, page 25). The doses I had calibrated on single images are too strong for a preset applied across a family. Whether a clean-up pass can remove the cost without removing the look is untested.

Against an earlier overturned result

Notebook page 09 tested, with criteria frozen in advance, whether the direction a weight edit imprints depends on the declared style more than on the subject, and it was overturned: at the usable dose 6 of 12 cells carried the opposite sign. This page finds that, for single late blocks, the change is more alike within a style than across styles. The two are not the same experiment — a calibrated whole-stack preset and block derangements there, single late blocks here; eight styles sharing one scene there, three styles crossed with six subjects here — and this page does not claim to reconcile them. A reader should keep both.

An open question: middle blocks for a series of assets

Middle blocks are the ones I find most valuable: they change the picture more deeply than a retouch could, which is what a series of assets with a fixed prompt structure and style would want. What the data say so far: a deeper change at no measured quality cost (page 25); a common change inside a family, seen by eye only; but the least predictable blocks, able to change a subject's identity — a risk for a series whose characters must stay the same. The test that would decide it (C51, not run): fixed characters across poses and scenes in one style, with a middle-block preset on and off; does the identity hold?

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override
prompts:
  file: data/prompt_family_plan.csv
  families: [F1cartoon, F2oil, F3photo]
  subjects: [blacksmith, rally, fox, stilllife, fisherman, lighthouse]
seeds: [5772156, 1414213]
conditions:
  - name: blk16_pos_d0.300
    measured_D: not measured; the dose is a per-block gain, not a calibrated displacement
  - name: blk20_pos_d0.450
    measured_D: not measured
  - name: blk23_neg_d0.300
    measured_D: not measured
  - name: blk26_pos_d0.150
    measured_D: not measured
  - name: blk27_neg_d0.250
    measured_D: not measured
  - name: combo
    dose: blk16 +0.20, blk20 +0.30, blk23 -0.20, blk27 -0.10
    measured_D: not measured
  - name: blk09_pos_d0.450
    measured_D: not measured
  - name: blk03_pos_d0.400
    measured_D: not measured
  - name: blk06_pos_d0.450
    measured_D: not measured
  - name: blk13_neg_d0.450
    measured_D: not measured
  - name: blk17_pos_d0.400
    measured_D: not measured
outputs:
  folder: benchmark_prompt_family
  manifest: data/prompt_family_plan.csv
analysis:
  script: experiments/analyze_prompt_family.py
  sha256: 8518e7c0a5b7014496999bfc89f285f55bb92c23a84e9dd2db73896c9419330b
  produces: data/prompt_family_style_features.csv, data/prompt_family_arms.csv, data/prompt_family_test.csv, data/prompt_family_within_by_family.csv

Provenance

Ambiguous971 renders · 13 prompts · 2 seeds · pre-registered · 2026-10-05

Does the way a prompt is written change what a block does?

The direction I'm chasing. A knob is useful only if it does the same thing however I happen to write the prompt. My claim: moving the weights gives similar results when the prompt describes the same content; the structure of the text matters less than the content.

What would kill it. A block whose change depends on the wording as much as on the subject, or more than on the seed.

Where we are. The first half holds by eye and by the numbers: rewriting matters about as much as the seed and far less than the subject. The registered verdict is still inconclusive, because a small change of content disturbed a block's effect even less than rewriting did — the opposite of what the design assumed.

In two minutes

Two subjects — an elf brawler in a comic style, a woman asleep in a canoe on a lotus pond — each written four ways with the same facts (original, reordered, a pure tag list, prose with synonyms), plus one version with a single object changed (the elf's gauntlet; the sleeper turned into an old bearded man). Twelve blocks in both directions, two seeds.

Block 19 pushed positive makes the same change to the elf under all four writings of the prompt and after the gauntlet is changed: the antlers shrink and the pauldron turns to fur.

The baselines differ from row to row: each writing gives a different pose and framing. The edit does not: under every writing and after the gauntlet change, blk19 + turns the gold pauldron into a straw-like fur, and the antlers shrink or disappear in most frames.

The verdict

By eye the claim holds on every arm: same change across the four writings and after the content change. By the numbers, writing behaves like the seed and the subject dominates. The registered verdict is inconclusive, not supported, because its third condition failed on all twelve arms: changing one object in the prompt disturbed a block's effect less than rewriting it. Stated plainly: the text's structure matters about as much as the seed, less than the subject, and more than a one-object change of content.

Why I might be wrong

The data

How it was measured

Each image is reduced to 23 style features; an arm's effect on a prompt is its vector of feature changes from the same prompt's baseline. A is the mean cosine between two such vectors: A_writing across writings of the same subject, A_seed across seeds, A_content_small between the original and the one-object change, A_subject between the two subjects. Only arms whose change is larger than what rewriting does to the baseline (size > 1.15) are scored.

A block's change is as consistent across writings of the prompt as across seeds, more consistent after a one-object content change, and much less consistent across subjects.

The registered rule

condition needed result
median (A_writing − A_seed) ≥ −0.10 −0.04 met
A_writing > A_subject ≥ 75% of arms 12 of 12 met
A_writing > A_content_small ≥ 60% of arms 0 of 12 not met

Scored arms: blk00 ±, blk09 −, blk12 +, blk13 +, blk15 +, blk17 ±, blk19 +, blk23 +, blk27 ±. On them A_writing runs 0.53–0.92 and A_subject −0.15 to 0.52: what the picture contains decides what a block does to it. A tag list against the original behaves like the other rewrites. The third condition failed because the one-object change kept the picture (layout r of its baseline with the original 0.68–0.76) while rewriting moved pose and framing (0.48–0.76). The design assumed the opposite ordering. The same ordering appears in DINOv2 space (page 25): A_content_small 0.29 > A_seed 0.22 > A_writing 0.16 ≫ A_subject 0.02.

Word order

Before C45, an exploratory bench rendered one prompt in five word orders, two seeds, 56 arms. By eye, blk19 + shrinks or removes the antlers and turns the pauldron to fur in 10 of 10 renders, blk26 + lays the same mosaic of colour cells over the frame in 10 of 10, and blk17 + slims the collar and simplifies the figure in 5 of 5 orders at one seed. With the same features: consistency across orders tracks consistency across seeds (r = 0.92 over 56 arms) and is on average 0.06 higher. Every arm with low consistency is among those whose change is smaller than the reordering itself. The order does change the picture — baselines differ by ΔE 16–31, as much as most edits — but it changes the frame, not the character, and not what a block does to it.

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override
prompts:
  file: data/prompt_writing_plan.csv
  ids: [S1_W3_tags, S1_W4_synonyms, S1_C1_flamegauntlet, S2_W1_original, S2_W2_reordered, S2_W3_tags, S2_W4_synonyms, S2_C1_oldman]
  reused: S1_W1 and S1_W2 are V1_Original and V5_Inverse of benchmark_prompt_order
seeds: [3141592, 1234567]
conditions:
  - name: blocks 00, 02, 05, 08, 09, 12, 13, 15, 17, 19, 23 at -0.35 and +0.35 (blk00 -0.25 / +0.30)
    measured_D: not measured; the dose is a per-block gain, not a calibrated displacement
  - name: blk27_neg_d0.075, blk27_pos_d0.100
    measured_D: not measured
outputs:
  folders: [benchmark_prompt_writing, benchmark_prompt_order]
  manifest: data/prompt_writing_plan.csv
analysis:
  scripts:
    - experiments/analyze_prompt_writing.py             # 4f7034db6a713f82c7135b64062586b4277db29afb4f53c6ee6eeb697dccc468
    - experiments/prompt_order_feature_consistency.py   # 3a62edb33adf9d6afd161e24a6e04eeeaa2cc667b40ba3ce6a4ed5803ec0f23e
  produces: data/prompt_writing_arms.csv, data/prompt_writing_test.csv, data/prompt_order_feature_consistency.csv

Provenance

Overturned962 renders · 35 prompts · 7 seeds · pre-registered · 2026-10-05

What the standard metrics see, and what they miss

The direction I'm chasing. The results on the other pages rest on my eye and on statistics written for this project. A reader will ask what the usual metrics say: image quality, prompt adherence, perceptual distance, content similarity. I wanted them on the same images, decided before they were computed.

What would kill it. Standard metrics that contradict the published verdicts — or that see, without my eye, what only my eye had seen.

Where we are. They confirm the saturation knob against the words and put a price on each preset. They do not see what the middle blocks do across a family: the one prediction I made about them failed.

In two minutes

No new renders: BRISQUE and CLIP-IQA (quality without a reference), CLIPScore (adherence to the prompt), LPIPS, DISTS and SSIM (distance from the baseline), and DINOv2 cosine (same content as the baseline) were computed on every image of the three confirmatory benches — wording, saturation, prompt family — under a plan written before any of them was run.

Middle blocks change the content most (DINOv2 0.87-0.88) at no BRISQUE cost, while the late blocks and the combined preset change less and cost up to +9.6 BRISQUE.

Read the figure as two corners. Bottom right: the middle blocks, which move the content most and leave BRISQUE where it was. Top left: the late blocks and the combined preset, which keep the content and raise BRISQUE.

The verdict

On the saturation knob the standard metrics agree with the published verdict: at the same colour gain, block 23 stays closer to the original than the words "colorful" (LPIPS 7 of 7, DINOv2 6 of 7). On the prompt-family presets they put a price on each arm: the late blocks and the combo cost up to +9.6 BRISQUE, the middle blocks nothing measurable, while changing the content most. The pre-registered prediction that DINOv2 would see the middle blocks' family-coherent change is refuted: it is an observation by eye that no metric here reproduces.

Why I might be wrong

The data

The saturation knob, again

measure blk23 closer to the original than "colorful" at the same chroma gain median difference
LPIPS 7 of 7 scorable cells −0.10
DINOv2 cosine 6 of 7 +0.019
layout r (page 22, pre-registered) 6 of 7 +0.08

Quality: BRISQUE moves by −0.95 for "colorful", +0.87 for blk23 −0.45 and −3.7 for blk23 +0.30; CLIP-IQA by at most 0.02 anywhere. The full comparison is on page 22.

Depth against cost

arm ΔBRISQUE (higher = worse) LPIPS to base DINOv2 cosine to base ΔCLIPScore, blacksmith
blk23 −0.30 +3.4 0.27 0.96 −0.9
blk26 +0.15 +0.4 0.38 0.92 −0.2
blk16 +0.30 +3.3 0.45 0.92 −1.2
blk20 +0.45 +5.3 0.46 0.92 −1.9
blk27 −0.25 +9.6 0.46 0.93 −2.2
combo +9.6 0.49 0.90 −3.0
blk13 −0.45 −0.2 0.43 0.95 −0.2
blk03 +0.40 +1.7 0.45 0.93 −1.1
blk06 +0.45 +0.8 0.49 0.91 −1.0
blk17 +0.40 −0.5 0.50 0.87 −2.4
blk09 +0.45 −0.3 0.53 0.88 −3.8

Medians over 36 images per arm (data/standard_metrics_summary.csv). Not every middle block goes deep: blk13 − stays at 0.95, close to the late blocks. The two that do, blk09 + and blk17 +, are also the two that lower adherence most on the blacksmith prompts — where blk09 + turned the woman into a man at one of the two seeds (page 23).

A content embedding does not see it

H5 asked whether the middle blocks' common change, seen by eye inside each family, would show up as coherence of DINOv2-embedding changes. Median within-family coherence of the five middle arms: 0.007 against 0.159 on the style features and a threshold of 0.259. Refuted. In DINOv2 space no arm is family-coherent, late blocks included (all W ≤ 0.06): the same change, "more realistic", points one way for a fox and another way for a car in an embedding built around content.

Wording, in DINOv2 space

A_content_small 0.29 > A_seed 0.22 > A_writing 0.16 ≫ A_subject 0.02: the same ordering as the style features on page 24. The subject dominates; rewriting behaves like the seed.

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override
prompts:
  files: [data/prompt_writing_plan.csv, data/blk23_colorful_plan.csv, data/prompt_family_plan.csv]
seeds: [2718281, 3141592, 1618033, 4669201, 5772156, 1414213, 1234567]
conditions:
  - name: every condition of the three benches, as listed on pages 22, 23 and 24
    measured_D: not measured; the doses are per-block gains, not calibrated displacements
outputs:
  folders: [benchmark_prompt_writing, benchmark_blk23_colorful, benchmark_prompt_family]
  manifest: data/standard_metrics_c45.csv, data/standard_metrics_c47.csv, data/standard_metrics_c49.csv
analysis:
  scripts:
    - experiments/standard_metrics.py           # 744fc3854a7b6a6be4b3ca95cacd54f2337d3ba3521119eb82d0936a3195c245 (GPU, piq + open_clip + DINOv2 ViT-B/14)
    - experiments/analyze_standard_metrics.py   # eb36aa06bca4a9db9a4537cb3a30e34a29975ed4b9c3af13d587322bfa83d08c
  produces: data/standard_metrics_summary.csv

Provenance

Overturned295 renders · 2 prompts · 3 seeds · 2026-10-05

What did not work, and the limits of everything else

The direction I'm chasing. A report that shows only what held invites the reader to wonder what was left out. This page collects the claims this project made and then lost, how they were lost, and what the remaining pages cannot say.

What would kill it. A retraction stated more softly than the claim was, or a limit the other pages hide.

Where we are. Four claims are withdrawn here. Every one of them was made from a statistic and undone by opening the images. That pattern is why every confirmatory page of this report puts the eye pass first.

In two minutes

On 2026-09-28 the analysis of the centre-push bench, written by the assistant I work with, recommended two edits as the best operating points of the project: the macro-block sliders Block_4 and Block_1 pushed to 0.500. Two statistics said they moved the picture far (V, distance from the baseline in units of seed noise) while keeping its line work (L, structure coherence). Nobody had opened those renders. I had been saying the images were breaking; the analysis kept answering with numbers.

The two doses a statistic ranked best, Block_4 and Block_1 positive at 0.500, are a crumpled-stroke texture and colour confetti with no subject left.

Opened at my prompting the next day, both are destroyed. A destroyed picture is far from its baseline, so V is high; and a regular texture is oriented line everywhere, so L is high too. High V with high L meant "destroyed into a regular texture". The bench proposed to push them further was withdrawn.

The verdict

Four claims are overturned: that strong pushes of two macro-blocks keep the drawing; that the structure-coherence statistic can tell damage from steering; that the centre of the stack gives way differently from its ends; and that a CLIP-based delta separates "semantic" from "structural" blocks. The common cause is a statistic read without the images. Every result that survives in this report was scored after an eye pass deposited in advance — which makes that eye, a single observer who knows the conditions, the largest limit of the report.

Why I might be wrong

The data

The best doses by the statistic

macro-block, positive V at 0.500 L at 0.500 what the render shows
Block_4 3.28 1.204 no subject; crumpled-paper texture of dense black strokes
Block_1 3.84 1.058 no subject; colour confetti

Arm means over prompts and seeds (docs/centre_push_result.md §4); the figure shows the unit means of one prompt (data/centre_push_units.csv). At 0.350, Block_4 + already flattens faces into masks; Block_1 + at 0.350 on this prompt and seed keeps the blacksmith intact, framed closer. The retraction is in docs/centre_push_result.md §4, where the original table is kept and struck through.

A measure with the sign wrong

The centre-push bench had a pre-registered eye veto: twelve pairs of renders, and for each I said which was more broken. I resolved 9 and agreed with L on 7, below the registered 8 of 12, so the label "L not validated by eye" applies. Seven of nine is not a rout. The rout is in the two disagreements: both are Block_6 + 0.080, which L scores above its own baseline and which I, and six blind model observers in both orientations of the sheets, call broken. Block_1 − 0.500 is the same case (L 1.02–1.03, broken in both pairs). A statistic that says a picture gained structure on the condition three independent looks call damaged has the sign wrong.

The centre is not special

The bench's primary asked whether the four central macro-blocks give way under a push differently from the two at the ends. T = +0.053, p = 0.19; the range guard passed, so this is a null. Block_5, in the centre, gives way hardest of all; Block_1, at an end, less than five of the eight central arms. A post hoc reclassification of Block_5 as an end gives p = 0.02 and is recorded as such, not as the verdict. The single-block map on page 21 shows why macro-blocks were the wrong unit: they cut across the groups that push together.

Semantic routing

An analysis written by another assistant, never published, ranked 56 single-block arms by the difference between how consistent an arm's CLIP-embedding change is across ten images of one prompt and across 26 images of different prompts, and read a large difference as a "semantic router". The audit (docs/semantic_routing_audit.md) found:

What survives is each column on its own: for a fixed content most arms move the CLIP embedding the same way whatever the word order (page 24), and the arms most stable across 26 different scenes are grain, blur and texture.

What the numbers could not see

Notebook page 11 records three more cases. Five conditions recommended from displacement statistics ranked 75th to 80th of 80 on structure coherence; the condition picked by eye ranked 12th. An edit removed all colour from a leaf while leaving the leaf intact, in 9 of 20 fresh seeds and 0 of 20 controls, and never when the prompt named a colour — an open lead on which colours an edit can reach. A generality test for that effect was run on subjects whose colour was never in doubt, so its null meant nothing.

The style-direction result of notebook page 09 is also overturned; it is discussed beside the result it seems to contradict, on page 23.

Lessons kept as rules

Limits of this report

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
tuner:
  node: ArthemyKrea2ModelTuner
  version: not recorded — the tuner is a separate repository
  mode: macro-block group gains Block_1 … Block_6
prompts:
  file: data/centre_push_plan.csv
  ids: [P01, P02]
seeds: [2718281, 3141592, 1618033]
conditions:
  - name: Block_1 … Block_6, both signs, doses 0.080, 0.200, 0.350, 0.500
    measured_D: not measured; V is reported in units of the seed noise of the same prompt
outputs:
  folder: benchmark_centre_push/renders
  manifest: data/centre_push_plan.csv
analysis:
  script: experiments/analyze_centre_push.py
  sha256: 53e00f1353f070aa35be907fe4503b6c715528b962980786ced4d810b5d3ee6a
  produces: data/centre_push_units.csv, data/centre_push_tests.csv, data/centre_push_veto_result.csv

Provenance

Ambiguous1730 renders · 54 prompts · 2026-10-05

Appendix A: other kinds of edit

The direction I'm chasing. Before single blocks, this project edited the weights in other ways: reordering whole blocks inside the checkpoint, permuting them, scrambling signs. Some of those results passed pre-registered tests, and one produced an observation worth keeping.

What would kill it. Nothing new is tested here. The appendix only reports, with their status, results that live in the exploratory notebook.

Where we are. Two pre-registered results hold for block reordering. One observation — attributes appearing that the model normally leaves out — is kept as a curiosity, with its weaknesses stated.

In two minutes

These edits are not single-block scaling. A block derangement swaps the weights of whole blocks with one another, scaled by a dose; a permutation reorders them; a sign scramble flips signs so that the weights move exactly as far without any structure. They are reported here because two of their results are pre-registered and replicated, and because one of them tells something about what a weight edit can bring into a picture. The full pages, with figures, data and reproducibility blocks, are in the exploratory notebook.

The verdict

Block derangement has two confirmed effects: the sign of the edit decides whether hatching strokes cross or run parallel (16 of 16 prompts), and the edit enlarges the subject in the frame (9 of 10 new styles). A permutation brought out an attribute the prompt asked for and the model usually leaves out, in 19 of 20 seeds; it is an observation, not a result, and is boxed as such below.

Why I might be wrong

The data

The hatching axis

In a comic-style corpus, block derangement pushed positive crossed the hatching strokes and pushed negative ran them parallel. A pre-registered test on 16 new prompts confirmed the sign: crosshatch entropy +0.288, 16 of 16 prompts, 79 of 80 pairs. The same test overturned the third family of the prediction — the sign scramble's exploratory effect did not come back (5 of 16 prompts). Full page: notebook page 06.

The subject grows

Pre-registered on ten styles that did not exist when the prediction was frozen: under block derangement at double dose the subject's area grows by a geometric mean of 1.234, in 9 of 10 styles, with all three predicted signs correct. The same round measured the blinding of the eye pass and found it failed (page 20). Full page: notebook page 03.

A curiosity: attributes that appear

Observed, not established. A prompt asked for "small barnacle-like clusters studding one earlobe". The stock model drew them in 1 of 20 seeds; a block permutation drew them in 19 of 20; a sign scramble moving the weights exactly as far (D = 0.0538) drew them in 1 of 20. On a separate corpus — a rally car in a jungle, eight drawing styles, no lights named in the prompt — lit headlights went from 10 of 35 at baseline to 31 of 38 under one edit and to 0 of 39 under another.

Its weaknesses. A different kind of edit from the rest of this report. The barnacle round was scored by me with the condition visible. The headlights were scored blind, but on the very renders that produced the observation; the exact test is at its floor (p = 0.031, Holm 0.19). The pre-registered confirmation on a second corpus could not decide anything: 9 of its 10 prompts never lit a headlight in any condition. One prompt family; the test of generality was designed and never run.

What makes it worth keeping is the control: the same distance in weight space, without structure, does nothing. How the weights move mattered, not how far. Full page: notebook page 02.

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  source: each notebook page's own reproducibility block (pages 02, 03, 06)
tuner:
  node: ArthemyKrea2PresetLoader (preset JSON files in presets/)
  version: recorded per page in the notebook
  mode: preset_json
prompts:
  source: notebook pages 02, 03 and 06
seeds: as recorded on each notebook page
conditions:
  - name: block derangement, block permutation, sign scramble, calibrated preset
    measured_D: recorded per condition on each notebook page (for example 0.0538 for the norm-matched scramble)
outputs:
  source: notebook pages 02, 03 and 06
analysis:
  source: notebook pages 02, 03 and 06

Provenance

Holds514 renders · 7 prompts · 6 seeds · pre-registered · 2026-10-05

A preset made by eye, tested blind on characters it never saw

The direction I'm chasing. The block map is only useful if someone can use it: look at what each block does, mix a few of them into a preset of their own, and get the look they had in mind — on new pictures, not only on the ones they tuned it on. And the character has to stay the same character.

What would kill it. A preset that only works on the pictures it was tuned on; a look that someone who does not know which image carries it cannot pick out; a face that changes into someone else.

Where we are. The look carries over to characters the preset never saw, and a blind observer picked it 56 times out of 56. The character stays recognisable, but the face moves a little more than a change of seed moves it, and an expression can go flat. The test had one observer and no sheets with two different characters.

In two minutes

Try it yourself. The same blind choice, 14 pairs, takes two minutes: take the test. Take it before looking at the pictures below if you can.

Seven character portraits written in one template ("Western comics style, close-up portrait, frontal view.", then the character). On four of them I looked at every single block pushed both ways (457 renders) and wrote a preset by eye: ten blocks, doses between 0.05 and 0.35. What I wanted, in my words before any test: a more American-comic look leaning toward animation: flat colours and clean lines, with proportions exaggerated only slightly compared with the default. The preset was frozen, the rules and scoring code committed, and only then were all seven characters rendered at four new seeds, with and without it.

Seven characters, base above and preset below at one seed: each stays recognisably the same character, and the preset row has cleaner outlines and less shading on the faces; the first three were never seen while the preset was tuned.

The three columns marked new are the test: the halfling, the dragonborn and the tiefling were written into the plan but never rendered while I was tuning. Then someone who had never seen the project looked at the pairs without knowing which side carried the preset.

The three characters never seen while the preset was tuned, large, at one seed: each keeps face, hair and costume, while the preset flattens the colour, removes many wrinkle and hatching lines, simplifies the ornament, and turns the tiefling's patterned jacket plain yellow.

The verdict

A preset written by eye from the single-block map transfers: its change is as coherent on three unseen characters as on the four it was tuned on (0.51 against 0.61), and a blind observer chose it as the closer match to the described look in 56 of 56 comparisons. The characters stay themselves — far closer to their own base than to any other character — but the rule I set for the face, "no more change than a new seed", was not met. Looking at the worst cases, the preset can also turn a prompted expression flat and remove small prompted details.

Why I might be wrong

The data

The look carries over

Coherence is the agreement between the changes the preset makes on two pictures, measured on 23 style statistics (page 20): 1 means the same change, 0 unrelated. The rules, written before the test renders:

rule threshold result verdict
G_S the preset agrees with itself across seeds median ≥ 0.50 0.78 pass
H1 coherent across the three new characters median ≥ 0.40 0.51 supported
H2 no worse than on the four calibration characters ≥ 0.61 − 0.15 0.51 supported

Data: data/portrait_preset_tests.csv, data/portrait_preset_measures.csv, data/portrait_preset_style_features.csv. The reproduction check opened the batch: a phase A base, rendered again, is the same file pixel for pixel (largest difference 0); all 57 planned renders are present.

A blind observer

Each sheet showed the base and the preset of one character at one seed, side by side, under a random number; every pair appeared twice, once with the sides swapped, in a shuffled order of 56. The key was committed before anyone answered.

One blind sheet as the observer saw it: the held-out halfling with the preset on the left and the base on the right; she chose the left.

Left: the preset was chosen on every sheet, held-out and calibration, original and mirrored. Right: ArcFace similarity of the face is 0.80 for the same character at another seed, 0.74 for base against preset, 0.29 for different characters.

original set mirrored set verdict
position check: same side named on both versions of a pair 0 of 28 pass
H4 preset chosen, held-out characters 12/12 (p = 0.0002) 12/12 supported
H5 "same character", held-out characters 12/12 12/12 passes, without foils
calibration characters, preset chosen (reported) 16/16 16/16

Answers: data/portrait_preset_blind_answers_human.csv; key: data/portrait_preset_blind_key.csv; tally: data/portrait_preset_blind_tests_human.csv. The model observer's answers and diagnostic tally are in data/portrait_preset_blind_answers_model_obs1.csv and data/portrait_preset_blind_tests_model_obs1_diagnostic.csv.

The face

ArcFace, a face-recognition network, gives one vector per detected face; two faces of the same person score high. It found no face in three of the four gnome preset images and in two tiefling images, one of them a base, so the identity rule was scored on the halfling and the dragonborn:

character base vs preset, same seed base vs base, another seed rule: first above second
halfling (new) 0.75 0.82 no
dragonborn (new) 0.74 0.75 no

H3 is refuted. The calibration characters show the same pattern. Described after the test, over every detected face: the same character at another seed 0.80 (39 pairs), base against preset 0.74 (23), two different characters 0.29 (312, highest 0.68). The preset keeps each face far closer to itself than to anyone else, and a little further than a seed change does — and these prompts are so specific that a seed change barely moves the face. Data: data/portrait_preset_faces.csv.

What the preset takes away

After every number was in, I opened at 1:1 the seven pairs ArcFace marked worst — the gnome at three seeds, the tiefling at two, the half-orc and the dwarf at one. Not blind, and selected.

The held-out tiefling at all four test seeds: at every seed the preset flattens the skin, turns the patterned yellow jacket plain, and makes the horns larger and heavier, where the prompt asked for short horns swept flat against the hair.

The preset contains block 8 at +0.15, which my own guide on page 21 lists as giving less expression; it is the first suspect, and scaling it alone on these portraits would test it. Details: docs/portrait_preset_result.md.

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value, driven by a 34-slot vectors_override
prompts:
  file: data/portraits_preset_plan.csv
  calibration: [D1_dwarf_paladin, E2_elf_rogue, O4_halforc_fighter, G5_gnome_wizard]
  held_out: [H3_halfling_druid, R6_dragonborn_cleric, T7_tiefling_bard]
seeds:
  phase_a: [2236067, 1732050]
  phase_c: [2645751, 3316624, 3605551, 4123105]
conditions:
  - name: baseline
    measured_D: not measured
  - name: preset
    file: presets/portrait_preset_alessandro.json
    dose: blk01 +0.10, blk08 +0.15, blk09 -0.35, blk11 +0.05, blk14 +0.10, blk18 +0.10, blk19 -0.10, blk20 +0.10, blk24 -0.10, blk25 -0.12
    measured_D: not measured; the preset is a vector of per-block gains, not a calibrated displacement
outputs:
  folder: benchmark_portraits/phase_c (test), benchmark_portraits/renders (phase A atlas)
  manifest: data/portraits_preset_plan.csv
analysis:
  script: experiments/analyze_portrait_preset.py
  sha256: 971e7e8443308b5abdff8ffb69ff0309ecb7175da3db14cb00dcea3873406221
  produces: data/portrait_preset_style_features.csv, data/portrait_preset_faces.csv, data/portrait_preset_measures.csv, data/portrait_preset_tests.csv
  blind_test: experiments/portrait_preset_blind.py (sha256 28387514a91f195f9e62f8303a9a89e6193f582a63dc63a7f0a355145ad6b56e)

Provenance

Holds2120 renders · 7 prompts · 10 seeds · pre-registered · 2026-10-08

Inside a block — attention, MLP, and what an edit costs

The direction I'm chasing. Every block of Krea-2 has two halves, an attention and an MLP, and until now we had only ever scaled them together. If the knobs live at a finer grain than the block, the halves should do different things, and the noise that comes with a push might belong to one of them.

What would kill it. The two halves doing the same thing, or the noise following the dose rather than the half; and, for the practical claim, middle-block edits costing as much as late ones once they are tried on pictures they were not chosen on.

Where we are. The halves differ, and an eye blind to the condition puts the noise mostly in the MLP. Middle-block edits reshape a drawing and spare its surface far more than late ones do, pre-registered on new prompts. But they are not free: a few of them pay on new pictures.

In two minutes

Each block of the model has an attention part (five matrices) and an MLP part (three). An atlas (C59) scaled each half alone, in both directions, for all 28 blocks, on three prompts and three seeds: 1016 renders. The person who knows the images best then labelled every block, half and direction blind, choosing among nine kinds of artefact and three strengths.

Noise lives mostly in the MLP. The attention joins it only in the last three blocks. The first block is the strangest: either half alone wrecks the picture, while both together keep its composition.

The labels also showed that the edits praised as "good for the comic" were the ones that changed the picture most, and they sat in the middle of the stack. A pre-registered test on new prompts and seeds (C60) confirmed it: middle-block edits change more and damage less. They still cost something, in four of ten edits.

A third test (C61) tried to overturn the older claim that every push costs fine texture. It could not: on its own comic prompts the old numbers came back almost to the third decimal.

Block 0 at -0.35 is wrecked by its attention alone and by its MLP alone but keeps its composition as a whole block, with strong blotches; at block 23 the attention is clean and the MLP grainy; at blocks 26 and 27 both halves are noisy and the whole block is worst.

The verdict

Holds for the practical claim, pre-registered (C60): on comic and cartoon prompts, edits to blocks 1-19 change the picture more than edits to blocks 20-27 and damage its surface in 19% of pairs against 79%. Holds that this is not free either: by the rule fixed before the labels, the middle edits carry a detectable cost. Open for where the noise sits (blind, but without a decision rule) and for the first block. Ambiguous for the cost of a push: page 05 replicates on its own prompts, the test as a whole did not decide.

Why I might be wrong

One observer. Every eye label is mine. I was blind to the condition, and my self-agreement on the damage threshold was 1.00 on the 15 repeats of C60, but my eye is also the one that chose the middle-block edits in C59. New prompts and seeds guard against fitting the images, not against fitting a taste.

"Slight" does not reproduce. In both eye passes every disagreement between a first and a repeated showing was "slight" against "none". Only medium and stronger count as damage here.

The measures do not see the noise. The fine-texture measure of page 05, the noise estimator of C58 and a band-pass measure all failed against the eye on the noise that matters. As a size of change, the same measures rank the eye's noise only moderately (AUC 0.75-0.81). A pre-registered search for a better one (C62, eight candidates chosen on C59 and tested on C60) found none: the best remained the size of the fine-texture change, AUC 0.79 on the test set, below its 0.85 bar (docs/noise_metric_result.md). Every noise statement on this page rests on the eye.

One dose, illustration-heavy. All tests use ±0.35, except C61 at ±0.20. Six of seven prompts are drawn; the only photographs are in C61, where they behaved differently.

The data

Where the noise sits

The split atlas pushed the attention (wq, wk, wv, gate, wo) or the MLP (gate, up, down) of one block by ±0.35, through granular_json. Both checks passed to the pixel: the atlas baseline reproduced, and all eight matrices through the granular path equalled the whole block through the vector. I labelled 168 sheets at seed 2718281, one per block, half and sign, each showing the same edit on the three prompts, plus 20 unannounced repeats.

68 of 168 sheets carry an artefact and 46 carry noise (blotches, grain, collapse or a regular screen). Blocks 2, 3, 5 and 7 to 9 are clean in all six conditions. Among the 19 block-sign cells where either half is noisy, the MLP is noisier in 13, the attention in 2, with 4 ties. At blocks 26 and 27 pushed positive both halves are noisy and the whole block is worse than either. A first reading of mine from small thumbnails had put the block-26 noise in the attention alone; at full resolution both halves carry it, and that reading was withdrawn (docs/split_atlas_eye_result.md).

The first block

At -0.35 the attention alone posterises every picture into flat saturated colour, and on the rally into a mosaic. The MLP alone replaces the subject. Both happen in 9 of 9 cells. Lowered together, the composition holds (layout r 0.69-0.80), but at full resolution the surface is covered in blotches. The two halves compensate each other for content, not for texture.

The damage also changes kind. Unbalanced, the block breaks the picture at the level of content and colour: the attention alone pushes chroma up by 13 to 68 points and streaks the surface with rainbow fringes, the MLP alone smooths it into a painted, screen-textured surface and replaces the subject. Balanced, it keeps the content and the colour (chroma within 2 points) and pays in blotches. One way to read it, not tested: in the first block the two halves write large, partly opposite contributions, so lowering one alone leaves the other uncompensated, while lowering both keeps the balance but thins the fine detail the block adds.

Searched across the whole atlas (seed 2718281, where the whole block exists), this is unique to the first block lowered: in 3 of 3 prompts there, and in only 5 other cells of the remaining 165. Everywhere else the rule runs the other way: in 125 of 168 cells the whole block changes the composition more than either half alone. Block 0 raised does not compensate either. A milder echo exists for colour at block 24 raised, where the attention adds chroma (+2.1) and the MLP removes it (−1.6) and the whole block moves it little (−0.2).

Form against surface

The labels suggested, after the fact, that the sheets praised for the comic changed the picture more than the noisy ones (layout r 0.74 against 0.87). C60 tested it on three new prompts (two comics, one cartoon) and three new seeds. It used ten middle-block edits chosen by rule, the praised sheets, and ten late-block edits drawn at random from the noisy ones. 191 renders; 180 blind pairs of edit and baseline with the side random, plus 15 repeats.

On the elf at a new seed, edits to blocks 8, 9 and 18 redraw pose and light with no damage or slight, block 19 MLP + costs medium damage, and every late-block edit costs medium or strong.

middle edits (blocks 1-19) late edits (blocks 20-27) test
layout r with the baseline, median per edit 0.721 0.837 p = 0.007
change seen by eye, 0-2 1.59 0.47 p = 0.0002
damage medium or stronger, edited side 17 / 90 71 / 90 baseline sides 0 / 180

A preference question was dropped before any label, at my request, as too subjective.

The elf at a new seed, large: block 8 pushed up redraws her pose, arm and gauntlet with no damage, while the MLP of block 27 pushed up keeps the same picture and covers it in blotches.

What the middle costs

The middle edits are not free. By the rule fixed before the labels, a cost is present: 0.19 against 0, Newcombe 95% [0.11, 0.28]. It sits in four edits, all at medium: block 19 MLP + in 8 of 9 pairs, block 1 attention + and block 17 whole + in 4 of 9, block 13 whole - in 1 of 9. Six edits are at 0 of 9. At 100% the damage is not the late blocks' grain: flat areas such as a sky break into patches or rectangles. Block 19 MLP + was clean on the prompts it was chosen on and is the most damaged here, so the cost depends on the prompt.

A follow-up (C63, docs/clean_six_result.md) put the six edits that came out clean on four new illustration prompts at three new seeds, 72 blind pairs, with two late-block edits as a positive control (damaged in 24 of 24). Four of the 72 were damaged against none of their baselines, three of them from block 9 attention +: too few pairs to call the six free (the interval reaches 13%) or costly (it reaches below zero). Block 2 whole −, block 8 MLP +, block 9 whole + and block 18 MLP − are at 0 of 21 damaged pairs across the two tests.

The cost of a push, revisited

Notebook page 05 found, pre-registered, that pushing any block costs fine texture, more toward the output. C61 tried to overturn the general wording. It pushed every whole block by ±0.20, page 05's dose and path, on its two comic prompts and two photographs, at four new seeds: 913 renders. The first render matched page 05's own file to the pixel. By its own rules the test decided nothing. The gate, which required the bench to see the late-block cost, failed (0.989, p = 0.26). The primary, blocks 1-22, was undecided (0.996, 95% [0.981, 1.011]).

Per block, the fine-texture common mode on four new seeds follows page 05 almost exactly on the two comic prompts, while on two photographs the last blocks gain high frequency instead of losing it.

The figure shows why. On the comic prompts both of page 05's numbers come back: 0.989 for blocks 1-22 and 0.934 for 23-27, against 0.989 and 0.932. On the photographs the last blocks add high frequency instead (block 27: 1.27), which this measure counts as a gain. Page 05 stands on its own ground, and its "any block" is untested beyond it. Including block 27 in the gate, a block page 05 itself called an outlier, was a weakness of the design.

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2ModelTuner, after ArthemyKrea2ResetPatcher
  version: not recorded — the tuner is a separate repository
  mode: Real Value; halves through granular_json (blocks.B.attn.{wq,wk,wv,gate,wo}, blocks.B.mlp.{gate,up,down}), whole blocks through the 34-slot vectors_override in C61
prompts:
  files: [data/split_atlas_plan.csv, data/comic_form_plan.csv, data/cost_floor_plan.csv]
  ids: [P01_blacksmith, F4_closeup, S1_rally, P02, P1_elfbrawler, F1cartoon_fisherman, P4_selfie]
seeds: [2718281, 3141592, 4669201, 1618033, 1414213, 2236067, 1259921, 1732050, 2645751, 3162277]
conditions:
  - name: attention or MLP of block B, +-0.35 (C59, C60)
    dose: 0.350
    measured_D: not measured; the dose is a per-matrix gain, not a calibrated displacement
  - name: whole block B, +-0.20 (C61)
    dose: 0.200
    measured_D: not measured
outputs:
  folders: [benchmark_split_atlas, benchmark_comic_form, benchmark_cost_floor]
  manifests: [data/split_atlas_plan.csv, data/comic_form_plan.csv, data/cost_floor_plan.csv]
analysis:
  scripts: [experiments/split_atlas.py, experiments/split_atlas_eye.py, experiments/comic_form_test.py, experiments/cost_floor_test.py]
  produces: data/split_atlas_measures.csv, data/split_atlas_eye_tally_alessandro.csv, data/comic_form_eye_tally_alessandro.csv, data/comic_form_layout.csv, data/cost_floor_measures.csv

Provenance

Holds1649 renders · 70 prompts · 8 seeds · pre-registered · 2026-10-13

The text encoder — how hard it pushes, and where the picture goes

The direction I'm chasing. Krea-2 reads the prompt with a language model, Qwen3-VL-4B, before the image model draws anything. If the same weight edits that work on the image model work on that text encoder, they might change what the picture is about — the genre, the style — rather than its surface. And once the picture changes, I want to know why it goes where it goes.

What would kill it. Edits whose effect cannot be predicted from anything we can measure on the text side; and, for the "why", an explanation that does not survive a test fixed before the data.

Where we are. How much a picture changes is predictable from the text side alone, mostly by the kind of edit. Where it goes is now clearer: anime is this character's fallback when the style words stop working, shown directly by removing them — but only for the elf: other characters fall back to painting or realistic renders. Random pushes reach that fallback only if they vary from token to token, and each real edit has a direction of its own: one protects the comic, another drives it to anime. Why a given edit points where it does is still open. And a dose ladder showed that the full-strength edits do not break the picture: the style holds up to about d = 0.70, and before it moves, the edit has often already changed who is drawn. Blind labels by two people confirm it: two of the edits cost the character far more than random pushes of the same size, and turn dark skin lighter.

In two minutes

Before the image model draws, a language model reads the prompt and hands over a long list of numbers, the conditioning. That's all the image model will ever know about your words. So I edited that language model the same way I edit the image model: one layer, its attention or its MLP, zeroed or doubled.

Schema: the prompt goes through a 36-layer text encoder, one layer of which is edited; the conditioning carries 12 readings of every token to the 28-block image model, which draws the picture; each experiment looked at a different stage.

The pictures change a lot, and in a particular way. They do not get noisy, as they do when the image model is pushed hard. They change genre — a Western comic becomes anime or a cartoon — and usually who is drawn: the character loses her antlers, her ears, her skin tone, often her identity. The same edit on the same words in a different order can land in a different genre.

Five word orders of the same prompt: the originals are all Western comic; L05 MLP doubled turns all five into anime, L06 MLP doubled scatters them between comic, anime and cartoon, L10 MLP zeroed keeps all five as Western comic.

The useful part: how much a picture changes can be predicted without rendering it. Measure how far the edit moves the conditioning, and you know roughly how far the picture will move. That held in two tests fixed in advance — but mostly because it tells kinds of edit apart. Among the edits that change genre, all of them large, it says little about which change more.

The puzzle: where the picture goes. When the elf changes genre, she goes to anime in 39 of 50 cases. I tested two explanations. Maybe the picture stops paying attention to the words "western comics": no. Maybe the edit pushes the text the way writing "anime" would: no, the push points somewhere else entirely, and it is 5 to 24 times larger than swapping a style word.

Then I stopped guessing and looked at the fallback directly. Remove the three style words and the elf is drawn as anime, every time. Anime is where this description goes when nothing holds it in a style. Seven other characters, stripped of their style words, fall back to painting or realistic renders instead: there is no single default.

The elf in five word orders at two seeds, with and without the three style phrases: with them every picture is labelled Western comic, without them every labelled picture is anime, with the same character and pose.

Random pushes as large as the edits, with no weight touched, also reach it, but only when they vary from token to token: the same random vector added to every token changes nothing. And the real edits are not random: the edit with the largest push keeps the comic every time, while random pushes of its size break it almost every time.

Last, I asked whether those edits were simply too strong. I rendered three of them at twelve doses, from a tenth of the edit to the full one. Nothing changes style below 0.70, and no picture breaks, even at full dose. But the character goes first. The half-orc stops looking like a half-orc — pointed ears, grey skin, undercut and warrior knot go — while she is still drawn as a comic; the style changes only later. For me this is the real damage: the edit makes the model forget what I asked for, and it fills the gap with a more generic person.

So I measured it blind: a yes/no question for every trait in the prompt, one question at a time, with no dose or edit shown. The traits fall steadily with the dose, and they go before the style. Then the control: random pushes of the same size. Someone else labelled those, without knowing anything about the study. Random pushes keep nine traits in ten; L06 and L14 keep half to two thirds. And when the skin changes under those two edits, it becomes lighter, every time; under random pushes it almost never changes. The prompts never name a skin tone: the edit takes away what holds the character, and the model fills the gap with its default.

Three portraits at full dose: the original, the real edit and two random pushes of the same size; under L06 and L14 the real edit turns the elf and the half-orc into lighter-skinned generic humans while the random pushes keep them, and under L28 the real edit keeps the dwarf while the random pushes change her.

Three portraits along the dose ladder: under L06 the half-orc loses her orc features by 0.70 and becomes a photograph at 0.80; under L14 the elf rogue's skin lightens before the picture turns more cartoon; under L28 the half-orc stays a comic while her face and collar change.

The verdict

Holds, pre-registered twice: the size of the push on the conditioning predicts how much the picture changes (Spearman 0.71 and 0.80), mostly between kinds of edit; within the edits that change genre it nearly vanishes (exploratory). Holds: the push is shared by the whole prompt plus small regions of 2-4 tokens bounded by commas. Holds: these edits change genre and identity, with less surface-quality loss than a DiT preset. Overturned: one edit moving different characters the same way; the genre switch coming from less attention on the style words; the switch coming from a text-like push toward "anime". Holds, pre-registered (C72): without its style words the elf is drawn as anime. Holds (C73): each character has its own fallback, mostly painting or realistic. Overturned (C73): strong edits send a character to its own fallback. Ambiguous: whether random pushes of the same size reach the fallback as often as edits — yes if they vary across tokens, no if they are one shared vector. Open: that each edit's own direction decides; what single phrases draw alone; anime as the usual destination of a switch. Ambiguous: whether the strong edits separate word orders inside the image model. Holds (C74): along a dose ladder the pictures move toward the full-dose picture, and the style changes before coherence breaks, which it never does. Holds* (C74): the change is gradual, by the rule fixed in advance; *but only pooled: L14 slides, L06 jumps. Holds (C75): the first cost of L06 and L14 is the character, before the style; the cost depends on the edit's direction, not its size (random pushes of the same size keep the character, and L28 keeps it better than they do); under L06 and L14 dark skin turns lighter. Ambiguous (C75): that L28 costs traits without changing style.

Why I might be wrong

One observer, not blind. Every genre and intensity label is mine. On the order grids I saw the edit names, and I had seen these pictures before. I gave the intensity labels after I knew the first test had failed.

One prompt carries the word-order story. C69, C70 and C71 rest on the elf in five word orders at one seed. The anime default may be specific to this prompt or this character.

The fallback rests on one character. Anime is the fallback of this elf description; C73 confirmed that other characters fall back elsewhere. In the no-style pictures the character, pose and composition stay; what changes is the rendering — flatter cel shading, no hatching — and the label "anime" is my reading of that change.

Genre labels hide sub-styles, and the doses are extreme. While labelling I noticed that each label covers very different sub-styles: two pictures labelled "Western comic" can look nothing alike, so "no switch" does not mean "same style". All these edits zero or double a layer half; at that strength part of what is labelled a change of genre may be a loss of stylistic coherence. C74 checked this with a dose ladder and comparative judgements: no picture lost coherence, up to full dose. The labels of sub-style remain mine.

Size mostly sorts kinds of edit. The two tests of the size of the push were fixed on all edits together. Checked afterwards within one kind, the relation nearly vanishes for the MLP-doubled edits — the ones that change genre — and holds at 0.46-0.66 for the others (data/te_size_within_type.csv). Part of that may be a ceiling: 28 of the 35 MLP-doubled edits were already labelled strong.

Mostly large doses. Almost everything here is at ±1: a layer half doubled or removed. C74 adds twelve doses, but for three edits, three characters and two seeds only.

Traits are judgements too. C75 fixed the list of traits before any label and asked them blind, but some are judgements of degree (age, androgyny, "reads as a dwarf"), and those are where the two labellers disagree most. The part B2 set was shortened after I had seen part A (every cell at full dose, half at 0.70 and half at 0.85), and two questions were reworded for the second labeller, so on those two our answers are not compared. Three characters, two seeds, one kind of edit. In C74, one row has an onset of "never" although the picture changes at 0.80 (I checked); it is kept as downloaded and changes no verdict.

What the measures do not see. The conditioning is what the image model receives, not what it does with it. Attention says where a phrase is read, not what it says. C71 averages over all the tokens of a prompt, which can hide an effect concentrated on a few words.

The intensity scale mixed two things. On L28 MLP doubled, all five pictures are labelled Western comic but intensity 3, "entirely another genre". Opened next to the original, they stay comics with a very different rendering. In practice intensity measured the overall change of style.

The data

The size of the push

C67 encoded the elf prompt under every edit of the C64 pilot (721 encodes, no images) and measured, for every token and every reading the edit can reach, how far the conditioning moved. Doubling an MLP moves it most (median 0.89), then doubling an attention (0.29), removing an MLP (0.18) and removing an attention (0.11) — the same order in which the eye ranked the pictures. Scaling only the queries and keys of a layer changes nothing the image model receives: a normalisation inside the attention cancels it.

Per edit, the size of the change in the conditioning against the mean intensity of change seen by eye over five word orders: the two rise together across all edits but only weakly within the MLP-doubled ones, with L28 MLP doubled changing the picture more than its size predicts and L10 attention doubled less.

test value rule verdict
C67 E1 — size against "how much it changed", 140 elf edits Spearman 0.71; AUC 0.80 for style changed ≥ 0.50 supported
C70 G3 — size against the rate of genre switches, 20 edits Spearman 0.73 ≥ 0.50 supported
C70 G3d — size against the mean intensity 0-3, 20 edits Spearman 0.80 ≥ 0.50 supported

These tests pooled every kind of edit, and the kinds differ a lot in size. Within one kind the picture is different (exploratory, data/te_size_within_type.csv): attention doubled 0.66, MLP zeroed 0.65, attention zeroed 0.46 on the C67 material, but MLP doubled 0.06 (n 35). On the C70 material the MLP-doubled edits give 0.36 (n 11, p 0.28). So the size of the push tells a strong kind of edit from a mild one; among the strong ones, the ones that change genre, it does not say which changes the picture more.

A shared push made of small regions

An exploratory analysis of C67 found that each edit pushes the conditioning of very different prompts in nearly the same direction (cosine 0.91-0.99 between prompts, 0.55 between different edits). C68 took away that shared push and looked at what was left. Two neighbouring tokens are pushed in related directions; four or five tokens apart the relation has halved (half-life 3 tokens). Groups follow the commas, most clearly in the middle of the encoder. These regions are as stable across word orders as the shared push, so they do not explain why word order matters (C68 H3, Spearman -0.37, not supported).

By depth of the text-encoder reading, the residual push stays related over two to four tokens, and tokens of the same clause are pushed more alike than tokens across clauses from layer 11 on, most at layers 20-26.

Genre and identity, not surface

The C64 pilot doubled or removed each half of each of the 35 layers the image model reads, on the elf, and I labelled every picture blind (140 edits, 10 repeats). Doubling changes far more than removing: strong changes in 40 of 70 against 4 of 70. Surface damage is rare (medium or strong in 8 of 140). My notes describe genres more often than noise: anime, chibi, a 1990s cartoon, children's illustration. C65 confirmed the quality side on seven characters: BRISQUE improves slightly (-1.52) where the DiT preset of page 28 costs +8.09.

No common direction across characters

C65 applied 20 edits chosen from the pilot to seven fantasy characters at two seeds. A DiT preset moves them the same way (page 28); these edits do not. Only 4 of 20 were coherent across characters (the bar was 14). The eye and the statistics disagreed in a telling way: the strong edits shift every picture the same way in colour and contrast, but each character lands in a different genre. At ±1 these edits also change who is drawn: identity is kept for at most two eligible characters in 19 of 20 edits.

Four characters at one seed under three edits: L19 attention zeroed keeps each face (similarity 0.77-0.91 where a face is found), L12 MLP doubled redraws them in another style with lower similarity, and L06 MLP doubled turns the dwarf and the gnome into realistic photographs (similarity 0.15 and 0.17).

The figure also shows that the destination depends on the character. On these portraits L06 MLP doubled turns the dwarf and the gnome into photographs, not anime; on the elf (below) the same edit scatters the word orders between comic, anime and cartoon. Anime is the elf's fallback, not every character's.

Where the switches go

In C70 I named the genre of each of the 105 pictures of the word-order test (seed 3141592) and, separately, how far each one moved from its original (0-3). The five originals are all Western comic, so word order alone does not change the genre. Of the 100 edited pictures, 50 changed genre: 39 to anime, 11 to cartoon, none to realistic or painting. No edit that zeroes a layer half changed the genre. Two patterns appear among those that do. L05, L20 and L25 MLP doubled send all five orders to anime. L06, L09, L12 and L14 MLP doubled scatter them across genres; these are the edits he had scored highest for word-order dependence.

For each of the 20 edits, sorted by the size of their push, the genre of the five word-order pictures: the edits that zero a layer half and the smallest pushes stay Western comic, the larger pushes turn mostly anime, a few scatter into cartoon, and L28 MLP doubled stays comic despite a mid-size push.

Inside the image model

C69 re-rendered 25 pictures — the elf in five orders, the original and four edits — with a probe that only reads the image model's attention. All 25 came out identical to the originals, pixel for pixel. At every step and in every block, the probe recorded where each part of the picture looks among the phrases of the prompt.

Where the picture reads "realistic western comics style", averaged over steps and blocks: attention to the style phrase is spread over the whole picture, slightly weaker under L06 MLP doubled (style share 0.089) than in the original (0.120) or under L12 MLP doubled (0.108).

The strong edits move these maps about twice as much as the mild ones (P4: 0.29 and 0.30 against 0.16 and 0.13). Whether they also make the five orders read the prompt in more different places is not settled. P1 passed by a margin of 0.003, carried by L12 alone; L06 does not do it, though its pictures diverge as much. The blocks where L12 raises the divergence most are 12, 25, 18, 15 and 16.

Not less attention on the style words

The first explanation for the genre switch: weaken the words that name the style, and the model's own taste takes over. L06 MLP doubled does cut the attention on the three style phrases, from 0.095 to 0.054 of all attention on text, in every order. But L12 MLP doubled raises it to 0.121 and switches genre just as often. Picture by picture, the share does not separate the pictures that switched from those that did not.

Each of the 25 C69 pictures by its share of attention on the style phrases, marked by whether its genre switched: under L06 the switched and unswitched pictures sit at the same low share, under L12 the switched ones sit at the highest shares.

test value rule verdict
C69 P5 — strong edits lower the style share more than mild ones L06 -0.041, L12 +0.026, L10 -0.020, L19 +0.005 max(strong) < min(mild) not supported
C70 G1 — share lower in switched pictures (20) AUC 0.46 ≥ 0.70 not supported
C70 G1d — share against intensity (20) Spearman +0.05 ≤ -0.40 not supported

Not a text-like push

The second explanation: the edit moves the conditioning the way the words "anime style" would. C71 encoded the five orders with "realistic western comics style" replaced by "anime style", "cartoon style" or "oil painting style", and compared the direction of each swap with the push of each edit. Nothing lines up: every cosine is between -0.12 and +0.07. The three edits that send every order to anime point, if anywhere, slightly away from it. The pushes are 5 to 24 times larger than the word swap (exploratory). The only hint of a direction is cartoon: the cartoon-minus-painting cosine follows the number of cartoon pictures (Spearman 0.52, reported, counts of at most 3).

Left, for each of 20 edits, the cosine between its push and the text's own comics-to-anime direction is near zero whatever the number of anime pictures; right, each push is 5 to 24 times the size of swapping the style word.

The fallback is anime

C72 asked what the picture becomes when nothing names a style. The elf prompt was rendered in its five word orders at two seeds without "realistic western comics style", "bold ink outlines" and "hatched shadows". Every labelled picture is anime: 9 of 9, against a bar of 7 of 10 fixed before the labels (one picture was not labelled; the result holds whatever it is). With the style words, the same orders and seeds are Western comic in 9 of 9. The empty prompt is not anime (anime, realistic, anime, painting), so this is not the model's global default. It is what this description of a character becomes when the style words are gone.

Random pushes of the same size

C72 then added to the plain conditioning random pushes as large as the real push of three edits, tap by tap, with no weight edited. The edits were L05 (all orders to anime), L06 (orders scattered) and L28 (largest push, stays comic). A gate checked the instrument first: with no push the render is pixel-identical to the plain one, and passing the real edit's conditioning through gives exactly the edit's render. A first version of the gate, built on stored float16 encodes, failed and was replaced before any other render (amendment 1).

For L05, L06 and L28 MLP doubled at order 1: the real edit, then three random pushes of the same size; L05's real edit is anime while its random pushes stay comic, and L28's real edit stays comic while its permuted and token random pushes turn cartoon.

push genre switches (27 labelled cells) ratio to the real edits rule
real edits 14 — —
random, permuted channels 11 0.79 size alone suffices
random, one vector for all tokens 0 0.00 the direction matters
random, noise per token 10 0.71 size alone suffices

By the rule fixed before the labels (amendment 2), the variants disagree, so the answer is "depends on the form of the push". Random pushes that vary from token to token reach the fallback, mostly anime (15 of 21 switches); a shift shared by every token, as large, does nothing to the genre. Edit by edit, the real pushes are not like random ones. L28's random pushes switch 16 of 18 pictures, yet the real L28 edit keeps all 9 a Western comic. L05's random pushes switch 1 of 18, yet the real L05 edit turns all 9 anime.

Genre switches per edit and kind of push: the real L05 edit switches 9 of 9 and its random pushes at most 1; the real L28 edit switches none and its permuted and token random pushes 9 and 7; the shared random pushes switch none for any edit.

So size alone does not decide where a strong edit goes; each edit's direction does, and why each points where it does is not known. One untested reason a shared shift may be harmless: the image model's text path normalises what it receives, which could absorb an offset common to every token.

Every character has its own fallback

C73 repeated the no-style test on the seven portraits of page 28 and C65, removing only "Western comics style" from their frame, at four seeds. With the clause all 28 pictures are Western comic; without it, the same faces and costumes come back as paintings or realistic renders, and only one picture of 28 is anime. The fallback depends on the character (pre-registered H1, supported).

Seven portraits at two seeds with and without 'Western comics style': with it every picture is a Western comic; without it the same character comes back as a painting or a realistic render, with the same face, costume and framing.

Do the edits lead each character to that fallback? No (H2, not supported): switched pictures land on the character's own fallback 0.28 of the time, as often as chance (0.27). What they show instead is a destination per edit, across characters: L06 MLP doubled gives realistic renders, L14 cartoons, L26 and L28 leave the comic alone, others spread. Elves bend several edits toward anime: the elf rogue, whose own fallback is painting, switches to anime in 10 of its 12 switched pictures.

For each MLP-doubled edit, the genres of its fourteen portrait pictures: L06 is mostly realistic, L14 mostly cartoon, L26 and L28 stay Western comic in all fourteen, L05 and L12 spread over anime, painting and realistic.

What each phrase draws alone

The same pass rendered each of the 36 phrases of the elf prompt alone, plus a few words, at four seeds. Described, not tested: * "female dwarf" is drawn as a woman with a beard in 4 of 4, and so is the full dwarf prompt. The beard that appears on the dwarf under edits is the model's own picture of a dwarf, not something the edit invents. * "uniform" is an anime girl in a school uniform in 4 of 4. * "realistic western comics style" alone draws bearded cowboys in comic panels: the model reads "western" as the genre of the American West. * The elf's description ("female antlered elf brawler") is anime in 3 of 4. * Phrases without a person are mostly drawn as realistic photographs (78 of 165 labelled single-phrase pictures).

Four phrases alone at four seeds: 'realistic western comics style' draws bearded cowboys in comic panels, 'uniform' anime schoolgirls, 'female dwarf' a woman with a beard every time, and the elf's own description mostly anime.

A dose ladder

C74 rendered three MLP edits at twelve doses (0.10 to 1.00) on three portraits at two seeds: L06 (to realistic), L14 (to cartoon) and L28 (keeps the comic, the control). The full-dose render was re-made first and is pixel-identical to the C65 one. For each strip I answered, side by side, where the style starts to differ, whether it moves gradually or in a step, whether the intermediate pictures head toward the full-dose one, where the picture loses coherence and where it loses a trait the prompt asks for. Before labelling I fixed the definitions (amendment 2): a hybrid that reads as one intended style, such as comic lines with painted textures, is a change of style, not a loss of coherence.

test (L06 and L14, 11 changing strips) value rule verdict
H1 — gradual rather than a step 8 of 11 = 0.73 ≥ 0.6 gradual* (pooled)
H2 — intermediate doses head toward the full dose 10 of 11 = 0.91 ≥ 0.7 supported
H3 — style changes before coherence is lost 11 of 11 ≥ 2/3 supported

*The pooled H1 hides two behaviours. L14 slides toward cartoon in 6 of 6 strips. L06 jumps from comic to photograph around 0.80 in 4 of 5. And H3 is met in the simplest way: I marked no loss of coherence anywhere.

For each of the 18 strips, the dose where the style changes and the dose where the first prompt trait is lost: no style change below 0.70, L06 changes at 0.80-0.85, L14 between 0.70 and 1.00, L28 never; traits are lost at or before the style change in most L06 and L14 strips and in four of six L28 strips.

What the ladder shows beyond the tests (reported, not tested):

What the edit costs the character

C75 turned the C74 notes into a blind test. Every phrase of the three prompts became a yes/no question ("Is the hair copper-coloured?", "Are there lower tusks jutting past the lips?"), two common ones were added (frontal close-up, white background), and two questions compare with the original: is the skin the same colour, and could it be the same character drawn by another artist. The page asks one question over every picture of a character, shows no dose, edit or seed, and repeats some pictures to measure consistency.

Part A (my labels, the 222 pictures of the C74 ladder). Retention, the share of the original's traits still present, falls with dose under L06 and L14 and barely moves under L28.

Mean share of the original's traits kept, by dose: L06 and L14 stay near 1 up to 0.5, then fall to 0.52 and 0.63 at full dose; L28 stays above 0.93.

test (pre-registered) value rule verdict
T1 — retention falls with dose median Spearman -0.89, 18 strips ≤ -0.50 supported
T2 — traits go before the style (L06, L14) 11 of 11 strips ≥ 2/3 supported
T3 — L28 costs traits without changing style -0.07 ≤ -0.15 inconclusive
T4 — skin changes go lighter 52 of 53 ≥ 0.80, 2 of 3 characters supported
reliability on repeats kappa 0.93 ≥ 0.60 passed

T2 compares a blind measure made of many questions with a single style judgement made without blinding, so it leans toward the traits by construction. With a stricter onset (about two traits lost), traits still go first in 8 of 11 strips, style first in 1 (exploratory).

What goes first are expressions and judgements of degree (the elf's smirk, androgyny, the dwarf's age), then race and costume: the half-orc stops reading as a half-orc at 0.60, then loses her knot, undercut and collar; the dwarf loses her braids and her armour. The elf's pointed ears are never lost.

Part B2, the control. A second labeller, who had seen none of these pictures and did not know what the study is about, labelled the real edits at 0.70, 0.85 and 1.00 next to random pushes of the same size (C72's node, token and permuted variants), plus the unedited portraits at eight seeds.

Share of the original's traits kept under the real edit and two random pushes of the same size: at full dose L06 keeps 0.48 and L14 0.63 against 0.87-0.95 for the random pushes, while L28 keeps 0.97 against 0.92 and 0.83; at 0.70 and 0.85 the same pattern, smaller.

test (pre-registered) value rule verdict
B1 — random minus real retention, 36 matched cells +0.18 (token +0.20, permuted +0.17) ≥ +0.15, both variants alike the edit costs more than its size
reliability on her repeats kappa 0.98 ≥ 0.60 passed
agreement with my labels, shared pictures kappa 0.85 reported —

The pooled verdict is carried by L06 and L14. L28 goes the other way: its real edit keeps the character better than random pushes of its size, as it kept the comic in C72. So the cost is a property of each edit's direction. Under the real edits, skin changes go lighter in 14 of 14; random pushes change the skin in 6 of 108 pictures. The unedited model never draws five asked traits at any of eight seeds (the dwarf's scars, the half-orc's tusks, dirt and snarl); leaving them out changes no verdict. The two labellers disagree most on whether the dwarf "reads as a dwarf" (8 of 14).

Reproducing this

model:
  checkpoint: krea2_turbo_bf16.safetensors
  weight_dtype: default
  sha256: not recorded — the file is outside the repository
sampling:
  sampler: euler_ancestral
  steps: 9
  cfg: 1.0
  denoise: 1.0
  scheduler: simple
  resolution: 1024x1280
  vae: qwen_image_vae.safetensors
  text_encoder: qwen3vl_4b_bf16.safetensors (CLIPLoader type krea2)
tuner:
  node: ArthemyKrea2CLIPTuner
  version: not recorded — the tuner is a separate repository
  mode: Real Value; one layer half through granular_json (layers.L.self_attn.{q,k,v,o}_proj.weight or layers.L.mlp.{gate,up,down}_proj.weight), weight x (1 + d)
prompts:
  files: [data/te_pilot_plan.csv, data/te_characters_plan.csv, data/te_bridge_plan.csv, data/te_default_plan.csv, data/te_fallback_plan.csv, data/te_dose_plan.csv, data/te_traits_plan.csv]
  ids: [P1_elfbrawler, V1_Original, V2_SubjectFirst, V3_BGFirst, V4_ActionFirst, V5_Inverse, D1_dwarf_paladin, D1W_dwarf_paladin_watercolor, E2_elf_rogue, G5_gnome_wizard, H3_halfling_druid, O4_halforc_fighter, R6_dragonborn_cleric, T7_tiefling_bard, "V1-V5 without the style clauses (C72)", EMPTY, W00-W42 (C72 single phrases), "the seven portraits without 'Western comics style' (C73)"]
seeds: [1618033, 1234567, 2645751, 3141592, 3316624, 2718281, 3605551, 4123105]
conditions:
  - name: one layer half of the text encoder, d = -1.00 (zeroed) or +1.00 (doubled); C64 also at ±0.10 and ±0.35
    dose: 1.000
    measured_D: not measured; the dose is a per-matrix gain, not a calibrated displacement
  - name: C74 dose ladder, MLP of L06, L14, L28 at d = 0.10, 0.25, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90, 0.95, 1.00
    dose: 0.10-1.00
    measured_D: not measured; the dose is a per-matrix gain, not a calibrated displacement
outputs:
  folders: [benchmark_te_pilot, benchmark_te_characters, benchmark_te_bridge, benchmark_te_default, benchmark_te_fallback, benchmark_te_dose, benchmark_te_traits]
  manifests: [data/te_pilot_plan.csv, data/te_characters_plan.csv, data/te_bridge_plan.csv, data/te_default_plan.csv, data/te_fallback_plan.csv, data/te_dose_plan.csv, data/te_traits_plan.csv]
  encodes_without_images: [benchmark_te_conditioning (C67, 721), benchmark_te_regions (C68, 241), benchmark_te_direction (C71, 16)]
analysis:
  scripts: [experiments/te_pilot_phase1_tally.py, experiments/te_characters.py, experiments/te_conditioning.py, experiments/te_regions.py, experiments/te_bridge.py, experiments/te_genre_tally.py, experiments/te_genre_dose_tally.py, experiments/te_direction.py, experiments/te_size_within_type.py, experiments/te_default.py, experiments/te_default_tally.py, experiments/te_fallback.py, experiments/te_fallback_tally.py, experiments/te_dose.py, experiments/te_dose_tally.py, experiments/te_traits.py, experiments/te_traits_page.py, experiments/te_traits_tally.py, experiments/te_traits_explore.py, experiments/te_traits_explore_B2.py]
  produces: data/te_conditioning_tests.csv, data/te_regions_tests.csv, data/te_bridge_readings.csv, data/te_bridge_style.csv, data/te_genre_tests.csv, data/te_genre_dose_tests.csv, data/te_direction_tests.csv, data/te_dose_tests.csv, data/te_traits_tests.csv, data/te_traits_B2_tests.csv

Provenance