Derek G / small experiments

Portrait lab · 2021 → 2026

Same noise.
Different weights.

A five-year-old portrait generator, revisited. We edited its weights and rebuilt its upsampling—without retraining. Put the original next to the result.

01
OriginalThe 2021 model
02
Round11Direct weight edits + overlap
Loading saved comparisons…Native 128 × 128 · same input, same scale

Sixteen saved pairs. No cherry-picking, no independent flips.

What to look for

Less mesh.
Still imperfect.

Look across the cheeks, forehead, and background. The regular mesh is weaker. Turn on Reveal the grid to compare edge maps at a shared exposure.

Some detail is softer. Distorted faces remain distorted. These edits improve specific artifact measurements; they do not recover missing anatomy or prove new identities.

Saved pairs are the first eight Gaussian inputs from seed 88920 and the first eight uniform [−1,1] inputs from seed 88921. Live mode runs both models on exactly the same intermediate vector and displays the pair together. It never crossfades finished images.

What changed inside the model?

We rebalanced latent directions, corrected subpixel phase responses, removed unreachable first-layer weights, and added controlled spatial overlap to the final upsampler. Round11 replaces a 1×1 phase projection with an analytically constructed 3×3 projection. The original model file is preserved.

The last step alone reduced an edge-periodicity score by about 30% and per-image brightness phase4 RMS by about 23% versus round9 on 512 fresh noise inputs. Broad-edge energy fell about 4%. These numbers compare round11 with round9; the portraits above compare round11 with the original.

How can I run this myself?

Clone the source repository, run python3 -m http.server 8000 from its root, then open http://localhost:8000/web/. The two model files are included. No backend inference, package install, API key, or external JavaScript library is needed.

This hosted copy downloads static weights from the source repository. Once loaded, inference runs locally. The evaluator is custom JavaScript/WebGL2, not native LiteRT. It checks the GPU against CPU outputs before enabling it; native-runtime acceptance remains unverified.