Record the FLUX.2 klein global-stage measurement

Stock Flux2KleinInpaintPipeline feeds the clean source back as reference
tokens, so it copies the source and OpenAI SynthID survives strength 0.30.
Without those tokens klein clears OpenAI between 0.05 and 0.20, at lower
fidelity than qwen-zimage at its floor. Google is unmeasured: the Gemini
Verify AI tool answered with a tool error or quota limit, which also casts
doubt on two of the earlier color-restoration "inconclusive" rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Victor KuznetsovandClaude Opus 5.5 committed 2026-09-27 15:17:26 -07:00
1 parent 7341e1a648
commit a103b4ec15
3 files changed
+49 -5

No files matched your search

+39 -3
View File
@@ -12,9 +12,9 @@
Correction 2026-09-23: the claim below is out of date. diffusers now ships
`Flux2KleinInpaintPipeline`, whose `strength` argument drives `get_timesteps`
and `scheduler.scale_noise` (checked against the installed 0.40.0 source); with an all-white mask it is partial-noise img2img, and FLUX.2 klein 4B
is Apache-2.0. A measured FLUX.2 klein global stage is a pending experiment, not
a shipped profile.
and `scheduler.scale_noise` (checked against the installed 0.40.0 source), and FLUX.2 klein 4B
is Apache-2.0. An all-white mask does not make it plain img2img, though: see
[FLUX.2 klein as a global stage](#flux2-klein-as-a-global-stage-2026-09-27).
Cited experiment behind issue #88 ("Please integrate Flux 2"): FLUX.2 has no
native strength img2img anywhere (BFL reference code or diffusers; its image
@@ -644,3 +644,39 @@ rule here and then survive unused generation indices without changing it.
`@synthid` hung once after attach, then returned a tool CLEAN on a
second human-drag chat. Do not drive the live Chrome while it is in
active use (wrong-tab risk).
## FLUX.2 klein as a global stage (2026-09-27)
`black-forest-labs/FLUX.2-klein-4B` (Apache-2.0, step-distilled) through
diffusers 0.40.0 `Flux2KleinInpaintPipeline`, all-white mask, the neutral
scrub prompt, guidance 1.0, seed 0, and the Chroma step compensation
(`ceil(4 / strength)` requested, four or five effective steps). Global stage
only, no face repair. Seven tracked originals from
`data/synthid/full-pipeline-quality.csv`; compared with `qwen-zimage` at its
vendor floors (OpenAI 0.15625, Google 0.35) on the same files. Harness:
`flux2_klein_ladder.py`, kept outside this repository.
The inpaint pipeline always appends the clean source latents as in-context
reference tokens (`ref_images = [image_latents_encoded]`), whatever the mask
and strength. With them the model copies the source: PSNR 30-37 dB and LPIPS
0.003-0.02 at every strength up to 0.50, although the start sigma is already
about 0.71 at strength 0.30 on a 1448x1086 image (the resolution-dependent
shift, `mu` 1.48; 0.94 at 2816x1536). The official OpenAI API returned
`detected` on all three OpenAI carriers at 0.30. Stock klein inpainting is
therefore not a remover.
Dropping the reference tokens leaves plain partial-noise img2img. OpenAI
brackets from the official API: one carrier `(0.05, 0.10]`, two
`(0.10, 0.20]`. At 0.20 klein reached PSNR 20.6 dB and LPIPS 0.054-0.058 on
the two limiting carriers, against `qwen-zimage` at 22.4-24.0 dB and
0.037-0.043 at its floor, before klein gets any cross-source margin. For
OpenAI klein is the worse engine. It is fast, under one second per image on a
warm H100.
Google is unmeasured. At 0.10 klein kept far more of the Google carriers
(LPIPS 0.04-0.07 against `qwen-zimage` 0.11-0.19 at 0.35, which also redraws
objects), but the Gemini Verify AI tool returned an empty answer on the
first upload and "a tool error or quota limit" on the second, so no Google
verdict exists yet. Outputs, reports and oracle records:
`.local-eval/flux2-klein-2026-09-27/`.
+6 -1
View File
@@ -59,7 +59,12 @@ This page is an index. Each finding lives in its canonical page.
measured on 2026-09-27 and is not shipped: transplanted source chroma left
three of four Gemini checks inconclusive and ghosts redrawn objects
([removal research](synthid-removal-research.md#color-restoration-after-regeneration-2026-09-27)).
Still open: FLUX.2 klein and
FLUX.2 klein 4B was measured the same day: stock inpainting copies the
source through its reference tokens and keeps OpenAI SynthID, and without
them it clears OpenAI only at lower fidelity than `qwen-zimage`; its Google
verdict waits on the Gemini tool
([Chroma1 research](chroma1-engine-research.md#flux2-klein-as-a-global-stage-2026-09-27)).
Still open:
Z-Image-Turbo as global stages (with an Apple Silicon arm through mflux),
linear probes on newer frozen backbones for `classify`, Resemble Perth and
Meta PixelSeal as benchmark oracles, re-watermarking as a removal primitive
+4 -1
View File
@@ -269,7 +269,10 @@ output `a,b`) and `AB` (output `L`, source `a,b`).
`AB` outputs gave one settled "no SynthID", two "couldn't confirm" answers
(one naming an inconclusive tool result, "edits that are too subtle or
small to detect") and one empty `[source: 2]` answer. Recorded as one
`not_detected` and three `indeterminate`; no row was retried.
`not_detected` and three `indeterminate`; no row was retried. Only the
"inconclusive" answer is an explicit tool verdict. Forty minutes later the
same Gemini account answered "a tool error or quota limit", so the empty
and bare "couldn't confirm" answers may be tool failures rather than signal.
- At 0.35 the regeneration redraws objects, and transplanted source chroma
paints the old objects' colors onto the new ones as visible ghosts.