PixelModel πΌοΈ
A neural network where the weights are the image.
π What is this?
model.png is not a picture β it is the model.
Every pixel encodes neural network weights. At inference, the PNG is decoded into weight matrices forming a tiny MLP. The prompt is embedded into a vector, and the model generates a 32Γ32 image.
Training directly optimizes pixel values via gradient descent until the PNG becomes the model itself.
π¨ Weight Encoding
- R channel β weight magnitude (0β255 β 0.0β1.0)
- B channel β weight sign (<128 = negative, β₯128 = positive)
- G channel β unused / reserved
π§ Architecture
prompt string
β char embedding β 32-dim vector
β W1 (64Γ32) β tanh
β W2 (64Γ64) β tanh
β W3 (3072Γ64) β sigmoid
β reshape β 32Γ32Γ3 image
All weights live inside model.png.
π¦ Standard weights (safetensors)
model.png is the canonical model β training writes to it directly, and it's what makes PixelModel PixelModel. For tooling that expects standard weight files, the same 3 matrices are also exported as model.safetensors (202,752 parameters total, no bias terms):
python convert_to_safetensors.py # model.png -> model.safetensors
python convert_to_safetensors.py --model model.png --out model.safetensors
Re-run this after training if you retrain into a new model.png β model.safetensors doesn't update itself.
Parameter count is verifiable two ways without running any code: config.json (total_parameters: 202752, full per-layer breakdown) and the safetensors file's own header metadata (total_parameters, param_breakdown, has_bias, text_encoder_parameters, vae_parameters β all 0 except the MLP itself).
π§ͺ Dataset vs Outputs
| Target | Output |
|---|---|
π Files
model.png β THE MODEL (64Γ3200 px)
model.safetensors β same weights, standard format (generated, see below)
config.json β architecture + parameter-count metadata
main.py β inference, loads model.png
INFERENCE.py β inference, loads model.safetensors
convert_to_safetensors.py β model.png -> model.safetensors
train.py β training
model.py β architecture
dataset/
red.png
red.txt β prompt: "red"
...
βοΈ Usage
python train.py
python train.py --epochs 500 --lr 0.05
python main.py "red"
python main.py "a cat" --out cat.png --scale 8
# equivalent, but loads model.safetensors instead of model.png
python convert_to_safetensors.py
python INFERENCE.py "a cat" --out cat.png --scale 8
main.py and INFERENCE.py produce byte-identical output for the same prompt β they're the same architecture and weights, just loaded from different files.
π Tips
- 6β20 samples are enough
- Simple patterns converge fastest
- 200β500 epochs typical
- Loss < 0.001 is strong for toy datasets
Itβs a toy. Itβs not useful. But it works.
Bench Labs Β· Simple, Reliable, Open sourced
- Downloads last month
- -
Spaces using bench-labs/pixelmodel 2
Collection including bench-labs/pixelmodel
Evaluation results
- fid on fidself-reported566.840
- clip on clipself-reported0.186