mirror of
https://github.com/wiltodelta/remove-ai-watermarks.git
synced 2026-08-09 23:50:40 +02:00
SdxlZImagePipeline subclasses QwenZImagePipeline and overrides only _run_global and preload, so the face stage is inherited rather than copied and cannot drift between the two profiles. A test asserts the shared methods are the same objects. Four things are architecture-bound and swap with the model: the ControlNet, the four-step distillation LoRA (SDXL-Lightning at its documented 1.0, not the reference graph's 0.8, which belongs to a different LoRA), the sampler (Euler trailing, no AuraFlow shift), and the latent grid at 8 px against Qwen's 16. Strength is architecture-bound too, which is the easy mistake and cost two wrong conclusions before it was caught. An SDXL global pass leaves SynthID at the strength Qwen needs: through the Gemini app on a native 2816x1536 original, 0.154 is FOUND while 0.20, 0.25 and 0.30 are clean. The profile therefore takes a flat vendor policy - OpenAI 0.15, Gemini 0.25, unknown following Gemini - rather than resolution_adaptive_denoise, because flat values are what was measured and no size dependence has been established for this stage. requested_steps exists because the runtimes truncate differently: DiffSynth sets sigma_start = denoising_strength and runs every requested step, while Diffusers img2img truncates the step count, so four steps at 0.15 executes zero and returns a bare VAE round-trip. Also records both measured provider boundaries for the shipped qwen-zimage curve - OpenAI detected at 0.06 and clean from 0.08, Gemini detected at 0.08 and clean from 0.10 - together with the two low-resolution Gemini verdicts that explain why the curve's sub-1 MP rungs are not under-driven despite looking short against a boundary measured at 4.33 MP. The curve is left unchanged; nothing measured fails. The profile is not deployed and not production-ready: every verdict so far comes from one fixture and one seed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>