monet_gdt

From one wallpaper image, monet_gdt scores 10 mood words (used to pick fonts), picks a 3-color theme, and scores 29 decorative shapes. It is the on-device model in libmonet apps: one ONNX graph, 5.55 MB, 10-16 ms on one Apple-silicon CPU core.

Version 2026.10.30. Changes: CHANGELOG.md.

Code, training and evaluation: github.com/Telosnex/monet_gdt. Training labels: Telosnex/monet_gdt_labels.

Files

File Contents
monet_gdt.onnx the model (8-bit weights), version 2026.10.30
monet_gdt_mood.json maps raw mood scores to wallpaper percentiles, for picking fonts
CHANGELOG.md changes per version

monet_gdt.onnx sha256: 552b0d79e674307d916d6442af7f9f7427aa01b2f52a7b6f7e50571acde93691

Usage

import numpy as np, onnxruntime as ort
from huggingface_hub import hf_hub_download
from PIL import Image

path = hf_hub_download('Telosnex/monet_gdt', 'monet_gdt.onnx')
session = ort.InferenceSession(path)
image = np.asarray(Image.open('wallpaper.jpg').convert('RGB'))
scores, feature, colors, shapes = session.run(None, {'image': image})

meta = session.get_modelmeta().custom_metadata_map
words = meta['monet_gdt.mood_words'].split(',')
shape_names = meta['monet_gdt.shapes'].split(',')
print(dict(zip(words, scores[0].round(2))))
print(['#%02x%02x%02x' % tuple(c) for c in colors])
print(shape_names[int(shapes.argmax())])
Input / output Shape Meaning
image uint8 [h, w, 3 or 4] the wallpaper, any size (the graph resizes)
scores float [1, 10] raw mood scores; word order in the monet_gdt.mood_words metadata
feature float [1, 192] the image embedding the heads share
colors int64 [3, 3] primary, secondary, tertiary RGB (0-255)
shapes float [1, 29] shape scores; names in the monet_gdt.shapes metadata

Model

  • Architecture: PE-Core tiny (Meta), the first 6 transformer blocks at 224 px, with small heads; distilled from a fine-tuned 384 px teacher.
  • Training data: about 75K images: CC0 / public-domain Megalith-10m photos, CC0 photos chosen because they look like wallpapers, and synthetic images from MONET (generated by Apache-2.0 models). Mood and shape labels: Jev (jev-1.14.0) answering fixed questions. Color labels: code, monet_ui 1.0.1's MonetGdtRule20261030, which chooses colorful colors before large areas.

Results

Measured against the labels on images held out from training. The last column is the labeler asked the same question twice: the practical ceiling.

Head Measure monet_gdt Labeler repeat
Mood mean Pearson r, test split 0.866
Mood mean Pearson r, 1,951 real wallpapers never trained on 0.776
Shapes top-1 matches the label 0.36 0.53
Shapes labeled top shape in the model's top 3 0.61 0.72

Colors, on 1,934 held-out wallpaper-like photos:

Measure 2026.10.30 2026.10.27
ฮ”E to the rule's triad (lower is better) 24.6 32.3
Jev: a colorful color is missing, with a dull swatch (of 512) 3 43
Jev: a small speck color (of 512) 12 0

In blind votes, a first version of the new color head beat 2026.10.27 34 to 8, and 2026.10.30 beat that first version 35 to 15.

Intended use

Theming an app (fonts, colors, decorative shapes) from a wallpaper the user chose, on the user's device.

Out of scope: any decision about people, including judging a person in a photo; content moderation; image classification or search. The mood words describe the look of an image, not its subject.

Limitations

  • Colors favor colorful areas over large ones. The model sometimes picks a color that covers only a small part of the image.

  • Synthetic images are saturated and centered; they help on wallpapers but cost everyday photos a little mood accuracy.

License

Apache-2.0: the weights derive from PE-Core (Apache-2.0, Meta); see NOTICE. The training code is MIT, on GitHub.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for telosnex/monet_gdt

Quantized
(1)
this model