🧬 Neural Network Fingerprints
Every trained network carries a signature in its weights. This playground reads a .safetensors file, reduces each tensor to a colored ring, and paints a mandala that deterministically encodes the actual weight values — a visual fingerprint of the model. The same weights always produce the same image; even a tiny change shifts it. Try the bundled networks or drop in your own — everything runs in your browser and nothing is uploaded.
Drag in a .safetensors file · palette presets · seed scrubber · download PNG
A single attention block with low-rank Q/K/V/O projections and an MLP. The smooth, banded rings come from the low-rank structure — visibly different from noise.
A small MNIST-style classifier with Xavier initialization. Three clean weight rings plus thin bias bands.
A CNN whose first layer is seeded with Gabor-like edge filters. The textured kernels give the fingerprint its grain.
An 85%-pruned network. The voids where weights were zeroed read as dark gaps — sparsity you can see.
Pure Gaussian init with no training. Maximum entropy — a busy, uniform speckle with no structure. The control case.
How it works
Each tensor becomes a 2-D matrix (1-D biases are padded into squares; conv kernels are flattened), sorted largest-first and laid out as concentric rings from the center. Within a ring the angle indexes columns and the radius indexes rows, with a per-ring spiral twist; the sampled weight sets the color — hue from sign, saturation and brightness from magnitude (tanh-compressed). The central core encodes the leading structure of the biggest layer, and the palette seed is derived from the raw weight bytes, so the image is a reproducible function of the model. safetensors is HuggingFace’s format and the de-facto standard for sharing weights — a JSON header plus raw bytes that, unlike pickled .pt/.pth files, can’t execute code on load. That’s exactly why it’s safe to open one in the browser.
Supports F32 · F16 · BF16 · F64 and integer dtypes. Best viewed on desktop.