See us on the Leaderboard β‡—


Blog post read it here β‡—

PixelModel v1 πŸ–ΌοΈ

The entire PixelModel v1: a 160x149 PNG containing all 23,747 weights

A neural network where the weights are the image. Now the model is a thumbnail.

πŸ“Œ 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, the prompt is hashed into an embedding, and a coordinate-conditioned decoder paints an image β€” at any resolution.

v0 was a 202,752-parameter MLP welded to 32Γ—32 output, trained on 6 color swatches. v1 is 8.5Γ— smaller (23,747 parameters), renders at any resolution (native 64Γ—64), and is trained on ~20K real MS-COCO caption/image pairs.

cherry on top πŸ’

The model generates 600 images (cpu) in 5 (five) seconds. Thats 5000 images in 24 seconds on cpu. The model trained on cpu for just 30 minutes.

πŸ†• v0 β†’ v1

v0 v1
Parameters 202,752 23,747
model.png 64Γ—3200 px 160Γ—149 px (a thumbnail)
Output head 1 weight row per pixel (196K params, 97% of model) CPPN decoder on (x, y) β€” resolution-free
Resolution fixed 32Γ—32 any; native 64Γ—64
Prompt embedding char-sum (order-blind, collision-heavy) hashed trigrams + words (FNV-1a), still 0 params
Biases none yes
Weight precision 8-bit (G channel wasted) 16-bit (R=high byte, G=low byte)
Training data 6 solid-color swatches ~20K MS-COCO caption/image pairs
Training loss curve crossing below both naive-predictor baselines

🎨 Weight Encoding

Each pixel stores one weight at 16-bit precision, mapped from [-2, 2]:

  • R channel β†’ high byte
  • G channel β†’ low byte
  • B channel β†’ reserved

Round-trip quantization error β‰ˆ 3Γ—10⁻⁡ per weight.

🧠 Architecture

prompt string
  β†’ hashed char-trigram + word embedding (64-dim, deterministic, 0 params)
  β†’ T1 (80Γ—64)+b β†’ tanh
  β†’ T2 (64Γ—80)+b β†’ tanh          = latent z (64)

for every pixel (x, y):
  concat(z, fourier features of (x, y))   ← 18 coord dims, freqs 1/2/4/8
  β†’ D1 (80Γ—82)+b β†’ tanh
  β†’ D2 (80Γ—80)+b β†’ tanh
  β†’ D3 (3Γ—80)+b  β†’ sigmoid  = RGB

Because pixels are decoded from coordinates, parameter count is independent of resolution β€” --res 256 works with the same 23,747 weights.

All weights live inside model.png (160Γ—149 px).

πŸ“¦ Standard weights (safetensors)

model.png is the canonical model β€” training writes to it directly. For tooling that expects standard weight files, the same 10 tensors are exported as model.safetensors (23,747 parameters total):

python convert_to_safetensors.py            # model.png -> model.safetensors

Parameter count is verifiable without running code: config.json (total_parameters: 23747, full per-layer breakdown) and the safetensors header metadata (total_parameters, param_breakdown, has_bias, text_encoder_parameters: 0, vae_parameters: 0).

πŸ“Š Benchmark results

Measured per the Tiny-T2I-Leaderboard protocol β€” see eval.md for full method and EVAL_REPRODUCTION.md to re-run:

Metric v0 v1 Tooling
FID ↓ 566.84 (n=40) 439.46 (n=5000) torchmetrics.image.fid.FrechetInceptionDistance
CLIP Score ↑ 18.60 (n=40) 20.02 (n=5000) torchmetrics.multimodal.CLIPScore, openai/clip-vit-base-patch32
Native resolution 32Γ—32 64Γ—64

Real set: MS-COCO val2014 pairs from sayakpaul/coco-30-val-2014 (256Γ—256 center-crop). Training images are hash-checked to be disjoint from the eval images.

Expectation management: a 23K-parameter model does not draw recognizable objects. It learns caption-conditioned color, layout, and texture statistics of COCO photos β€” the outputs are blurry impressions, not pictures. The point is the size:quality ratio and the PNG-as-model gimmick, executed honestly.

Target photos vs model outputs: the model produces caption-conditioned color washes

βš™οΈ Usage

# training data (COCO subset)
python fetch_coco_subset.py --out ../pm-work

# train (writes model.png every epoch)
python train.py --data ../pm-work/coco_train.npz --epochs 50

# inference from model.png (canonical)
python main.py "a red double decker bus" --out bus.png

# inference from model.safetensors (standalone, needs only this one file + torch)
python convert_to_safetensors.py
python INFERENCE.py "a red double decker bus" --out bus.png

# any resolution from the same 23,747 weights
python main.py "a beach with palm trees" --res 256 --scale 1

# benchmark eval
python eval/run_eval.py --work ../pm-work --model model.png --n 5000

main.py and INFERENCE.py produce identical output for the same prompt and resolution.

πŸ“ Files

model.png                   ← THE MODEL (160Γ—149 px)
model.safetensors           ← same weights, standard format + param metadata
config.json                 ← architecture + parameter-count metadata
main.py                     ← inference, loads model.png
INFERENCE.py                ← inference, loads model.safetensors (standalone)
convert_to_safetensors.py   ← model.png -> model.safetensors
train.py                    ← training
model.py                    ← architecture + PNG weight codec
fetch_coco_subset.py        ← builds train/eval data from COCO
eval/run_eval.py            ← FID + CLIP Score via torchmetrics
eval.md                     ← benchmark results + method
EVAL_REPRODUCTION.md        ← step-by-step reproduction guide

Still a toy. Slightly less useless. The model is literally a thumbnail.

Bench Labs Β· Simple, Reliable, Open sourced

Downloads last month
-
Safetensors
Model size
23.7k params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Spaces using bench-labs/pixelmodel-v1 2

Collections including bench-labs/pixelmodel-v1

Evaluation results