Files
Kevin Gilper f7061c7057 Correct the layer-values determination from the model + dev history
Traced the real provenance (Kevin's Codex dev sessions) and verified the
mechanism against the Krea 2 model on the render box. Two earlier claims
(07d2f0b) were wrong and are now fixed across the docs:

1. Mechanism: the 12 "deepstack chunks" are the 12 TEXT-encoder layer taps
   Krea 2 conditions on (comfy/text_encoders/krea2.py: hidden_states
   [2,5,8,...,35], (B,12,seq,2560) flattened to 30720), NOT the 3 vision
   deepstack taps (qwen3vl.py deepstack_visual_indexes=[5,11,17]) the name
   implies. 30720 % 12 == 0, so the node's split lands on the taps and the
   per-layer gains do apply (no fallback) - confirmed from the model weights
   (txtfusion.projector [1,12], layerwise blocks at 2560).

2. Provenance: the 12 values were NOT derived by a per-chunk sweep. They
   were adopted from the third-party ComfyUI-ConditioningKrea2Rebalance node
   (DEFAULT_WEIGHTS spike 8>10>7, matching STYLE_LAYER_PULL) plus the
   shallow=structure/deep=appearance principle; only the scalar shape (0.45
   ->0.35) and cap (->0.9) were empirically tuned. The four role tables are
   scalings of one template, so their agreement is design self-consistency,
   not independent measurement - the "convergent evidence" framing is
   withdrawn.

docs/deepstack-layers/ rewritten to separate verified mechanism, traced
provenance, and the still-unrun single-tap sweep. Corrections propagated to
the V9 technical paper (5.2 + architecture note + glossary), the V10 guide
and companion, custom_recipes/README, the V10 node doc, and CHANGELOG. Full
evidence chain preserved in local_records (gitignored).
2026-07-03 01:53:39 -04:00

50 lines
2.1 KiB
Markdown

# Scoring the deepstack sweep
After `generate_sweep.py --server ...` renders the grid, score every spike
render **against the control** (`<ref>__sweep-control.png`) to determine what
each chunk carries. The control and the spike share prompt, seed, reference,
strength, pooled channel, and all other chunks - so any visible difference is
attributable to the spiked chunk alone.
## Procedure
For each reference (`subject`, `palette`) and each chunk `L`:
1. Open `<ref>__sweep-control.png` and `<ref>__sweep-chunk-LL-gain-4.png`
side by side.
2. Judge which single aspect changed **most** relative to the control, and how
strongly (none / subtle / clear / dominant):
| Aspect | What to look for |
| --- | --- |
| structure | subject shape, pose, layout, spatial composition shifting toward the reference |
| palette | overall color cast, hue relationships moving toward the reference |
| texture | surface/material grain, finish, micro-detail |
| lighting | light direction, contrast, glow, shadow, mood |
| (none) | no meaningful change from control |
3. Record: `chunk L -> <aspect> (<strength>)`. If two aspects move together,
record both with the dominant one first.
## Recording
Fill the verdict table in [README.md](README.md) - one row per chunk, with the
verdict from each reference and a consensus column. A determination is
"solidified" when:
- both references agree on each chunk's dominant aspect, and
- the measured structure->transition->appearance ordering matches the
tables' design prediction (taps 0-4 structure, 5-6 transition, 7/8/10
appearance with 8 strongest), OR any disagreement is documented with its
consequence for the tables (a mismatch means the borrowed template does not
match Krea 2's actual per-tap response).
If a scoring pass is done by an agent, have a second independent agent score
the same grid blind and reconcile; note both in the record.
## Optional: multi-level confirmation
Re-run with `--gains 2 4 6` to confirm each chunk's response is monotonic in
gain (a real carrier gets stronger with a bigger spike; noise does not). Note
the gain at which each chunk's effect first becomes clearly visible.