Commit Graph
19 Commits
Author SHA1 Message Date
WildAi 3387dbcdcd pixelrush: adapters own the VAE<->model space conversion
Root fix for the SDXL 'compressed look': in VAE-space mode the
forward/reverse adapters previously applied noise_scaling directly to
VAE-space x with model-space eps, so for SDXL (scale_factor 0.13025)
the model saw noise 7.7x too small for the claimed timestep - the
input SNR never matched sigma and the refiner's prediction washed out.

Now forward_step converts x via process_latent_in, applies noise_scaling
in model space, and converts back via process_latent_out (reverse_step
mirrors it). predict_eps keeps returning model-space eps - principled
under the corrected theory since the slerp mixes it with std-1 random
noise. For pure-scaling formats the composition equals running the whole
algorithm in model space (exactness pinned by
process_latent_in(forward(x,e,s)) == s*x + s*e... i.e. noise at full
model-space scale).

The operate_in_vae_space flag is removed everywhere: the pipeline is
always VAE-space at the interfaces (ComfyUI LATENT convention); VAE
adapters no longer touch process_latent_out/in. Dominance guard gains
a lower bound (no-op detection) plus a refinement-changes-latent test.
2026-09-02 12:41:20 +03:00
WildAi 8b1bfc2bcc pixelrush: restore slerp noise injection, keep additive as opt-in
Default injection is now the paper's slerp(eps_refined, eps_random,
noise_lambda) per pixelrush-correct.txt. The 2026-08-13 additive mode
(eps_pred + lambda*eps_rand) remains available via
noise_injection='additive' (node combo input) for workflows tuned
against it. Tests pin both formulas exactly via seeded randn streams
(lambda=0 -> pure eps, lambda=1 -> pure random, additive formula),
the slerp default, and invalid-mode rejection. The legacy-calibrated
HF tests are pinned to additive; a new slerp-mode HF guard holds the
provisional >=0.5 bound pending Step 11 calibration.
2026-09-02 12:04:18 +03:00
WildAi c0c867cedf pixelrush: separate inversion_eps and refiner_eps adapters
Per pixelrush-correct.txt the core must accept distinct epsilon
adapters: inversion_eps (base generator, drives the 0->K partial DDIM
inversion) and refiner_eps (distilled one-step refiner, drives the K->0
prediction). The node currently passes the same base-model predict_eps
for both - an intentional choice the corrected theory allows; a
separate refiner_model input is added in a later step. Tests pin the
call pattern (inversion at t=0, refiner at t=K) and that a distinct
refiner changes the output.
2026-09-02 11:46:34 +03:00
WildAi d530be9917 pixelrush: analytic Gaussian feather mask (sigma default 24, no kernel)
Per pixelrush-correct.txt: the mask is exp(-(xx^2+yy^2)/(2 sigma^2))
centered on the patch and peak-normalized to 1 - an explicit encoding of
the paper's Gaussian-filtered patch mask. Replaces the blurred-all-ones
approximation (sigma=8, kernel=41); gaussian_kernel_size is removed from
config, node schema and execute. Node sigma range widened to 1..128 so
the corrected default 24 is reachable from the UI.
2026-09-02 11:31:51 +03:00
WildAi 1a8ef4f9a6 pixelrush: fix alpha_k NameError with partially-provided adapters
alpha_k was only computed when sigma_at was None, so sigma_at +
DDIM fallback (either adapter missing) raised NameError. Compute it
whenever any fallback branch can execute; when both adapters are
provided alpha_bar_at is never called (pinned by test).
2026-09-02 11:12:08 +03:00
WildAi c780c77e14 pixelrush: generic DDIM transition between arbitrary timesteps
Add predict_x0_from_epsilon + ddim_deterministic_step (eta=0, source ->
dest schedule values, same epsilon) per pixelrush-correct.txt. The old
0->K / K->0 functions become thin wrappers over the generic form.
Tests pin the formula, wrapper equivalence, and eta=0 path-independence.
2026-09-02 11:08:09 +03:00
WildAi 5deebc67dd pixelrush: corrected standard SLERP (raw-vector form with lerp fallback)
Per pixelrush-correct.txt: the 2026-08-12 unit-vector x linear-magnitude
form carried magnitudes separately; the paper convention is standard
vector slerp sin((1-t)w)/sin(w)*a + sin(tw)/sin(w)*b on raw flattened
vectors, with a lerp fallback when sin_omega < 1e-4. The conflicting
grep-tests (which forbade the corrected form) are rewritten to require it.
2026-09-02 11:02:32 +03:00
IrradiatedHaggis 8604d1f223 Fix PixelRush crash on float16: antialiased bicubic not implemented for Half 2026-08-29 17:10:30 -07:00
WildAi 900ceda564 fix: resolve review issues W1-W9; suite green (1107 passed) 2026-08-25 16:09:05 +03:00
WildAi a0d66f443b pixelrush: fix compressed/jpeg artifacts (H1 noise injection) 2026-08-13 15:25:42 +03:00
WildAi 102820c7bc pixelrush progress, sdxl better result 2026-08-13 14:52:38 +03:00
WildAi bad3415bfc pixelrush progress, sdxl bug not resolved 2026-08-12 18:58:23 +03:00
WildAi ce3d7e187c fix(pixelrush): support non-EPS prediction types (CONST/flow, V_PRED, X0) 2026-08-12 15:14:22 +03:00
WildAi 1c8561a5ac fix(pixelrush): resolve inference bugs causing noisy output 2026-08-11 18:13:08 +03:00
WildAi 2992c3f8f4 feat(pixelrush): add native ComfyUI progress bar 2026-08-11 14:48:52 +03:00
WildAi cfd73f01b3 fix(pixelrush): pass 5D latents for 3D latent models (Krea2/Qwen/Anima) 2026-08-11 11:26:35 +03:00
WildAi 914c3a6623 fix: ensure tensors are on same device in DDIM operations 2026-08-06 21:24:51 +03:00
WildAi e0c1f9afbd fix: move tensors to GPU and add progress logging 2026-08-06 21:12:23 +03:00
WildAi 65100aa533 feat: add PixelRush node for cascade-based high-res generation 2026-08-06 17:29:34 +03:00