Framework graphique solarpunk

Tessera

Une tessera est la pièce unitaire d'un vitrail : un morceau de verre serti dans le plomb. Tout ce que l'outil produit est fait de ça. Une description en quinze lignes de YAML devient un SVG, puis un thème web, un VectorDrawable Android, une illustration imprimable.

Le principe

Un seul chemin, du texte jusqu'à l'image

Tessera n'est pas une banque d'images. C'est une grammaire de style, un vocabulaire de motifs et de rôles de couleur, et des générateurs déterministes. Même source et même seed donnent la même image, au bit près, ce qui permet à un humain de reproduire et à un agent d'itérer.

La source

Quinze lignes de YAML

Un LLM ne sait pas dessiner, mais il écrit très bien du YAML qui respecte un schéma. Un humain écrit le même fichier.

Le rendu

Un sous-ensemble strict de SVG

Uniquement ce qu'un VectorDrawable Android sait représenter : des path, des remplissages, des dégradés à deux arrêts. Ni filtre, ni masque, ni texte.

Les cibles

Dérivées, jamais redessinées

Web, Android, raster. Chaque sortie embarque sa source : une image retrouvée dans dix ans se régénère.

La grammaire

Ce qui fait qu'une image est de Tessera

Sept règles, chacune tirée d'une référence précise plutôt que d'un goût général. Elles contraignent la façon de dessiner, pas seulement le rendu.

Le plomb
Tout contour est un trait épais et uniforme. Pas de contour fin, pas de contour dégradé.vitrail — le plomb ferme chaque pièce de verre
Les aplats
L'intérieur d'une forme est une couleur unie, ou un dégradé à deux arrêts. Jamais d'ombre portée, jamais de flou.verre coloré, sérigraphie
La ligne coup de fouet
Les courbes sont des Béziers à tension asymétrique : lentes au départ, rapides à la fin.Art nouveau — Mucha, Horta
L'hexagone
La géométrie de structure est hexagonale, jamais carrée : grilles, pavages, cadres.baubotanik, alvéoles, panneaux solaires
Le soleil
Un rayonnement est le motif de lumière par défaut. Il remplace le halo blanc habituel des interfaces.solarpunk
La lumière chaude
Les fonds sont chauds et jamais neutres. Le blanc et le noir purs sont refusés par check.papier, crépuscule
Le végétal déborde
Une feuille peut sortir du cadre d'un demi-plomb : le vivant n'est pas contenu.forêt comestible, baubotanik

La palette

Des rôles, pas des couleurs

Les couleurs sont décrites en OKLCH, où deux teintes de même clarté se lisent comme également claires. Un site, une application ou une icône ne référence jamais leaf : elle référence ok. Changer de schéma ne change donc aucun fichier consommateur.

L'accessibilité

Ce que la couleur ne peut pas porter

Le contraste contre le fond, que la section précédente mesure, est la couche la plus superficielle. La vraie question n'est pas « ce texte se lit-il sur ce fond » mais « ces deux choses qui veulent dire des choses différentes se distinguent-elles l'une de l'autre ».

L'œil ne mesure pas une longueur d'onde : il compare trois réponses de cônes, que le cerveau recombine en une clarté et deux axes, rouge–vert et bleu–jaune. Il manque un cône ? Ce n'est pas une couleur qui disparaît, c'est un axe entier. Les quatre rôles de statut ci-dessous sont simulés en direct, avec les matrices de Viénot, Brettel et Mollon appliquées en sRGB linéaire — le même calcul que tessera palette check.

Un statut est un glyphe et une couleur, jamais une couleur seule.

Ce n'est pas une précaution, c'est un résultat. Le plomb doit garder 4,5 de contraste contre chaque pièce de verre, ce qui interdit les remplissages sous l ≈ 0,60 ; il reste environ 0,30 de plage de clarté. Quatre rôles séparés de 0,12 chacun en réclament 0,36. Ça ne rentre pas — et sans vision des couleurs, la clarté est tout ce qui reste. Aucun choix de couleurs ne répare ça, donc la forme porte ce que la couleur ne peut pas porter. C'est aussi la seconde vie du schéma paper : une interface lisible à une encre est une interface lisible sans vision des couleurs.

Les icônes

Un vocabulaire fermé, sur une grille de 32

Une icône n'est pas un chemin SVG écrit à la main, mais une composition de motifs : stem, leaf, sun, hex, wave, soil. C'est ce qui garantit le style quel que soit l'auteur, humain ou agent. Le même fichier donne les deux styles.

style pane — l'illustration

style line — l'interface

Les sources

Ce qu'on écrit réellement

# palette.yaml
name: tessera
space: oklch
default_scheme: noon
dark_scheme: dusk

colors:
  sun:   { l: 0.860, c: 0.150, h: 85 }
  leaf:  { l: 0.620, c: 0.140, h: 140 }
  lead:  { l: 0.220, c: 0.020, h: 280 }
  linen: { l: 0.960, c: 0.015, h: 85 }

schemes:
  noon:
    bg: linen
    text: soil
    outline: lead
    accent: sun
    ok: leaf
    # ... les douze rôles
# icons/seedling.yaml
name: seedling
grid: 32
lead: 3
bleed: 1.5
motifs:
  - soil: { y: 28, width: 16 }
  - stem:
      from: [16, 28]
      to:   [16, 12]
      whip: 0.15
  - leaf:
      at: [16, 16]
      dir: left
      size: 7
      fill: ok
  - sun: { at: [24, 7], r: 4, fill: accent }
tags: [nature, growth, start]

Les sorties

Une source, chaque cible

ObjetWebAndroidRaster et impression
palette tessera.css, palette.json colors.xml, objet Compose tessera.gpl, planche de couleurs
icon SVG, sprite <symbol> VectorDrawable PNG de 24 à 512 px
pattern SVG <pattern> tuile par densité JPG grande taille, métadonnées embarquées

L'état

La palette est écritev0.1

Le binaire lit palette.yaml, le valide et en dérive le CSS, le JSON, la palette GIMP et la planche de revue. Vingt-deux tests, dont ceux qui épinglent les hexadécimaux et les ratios affichés sur cette page.

check a refusé la palette de la spécification le lendemain de son écriture, sur trois points réels : sun hors du gamut sRGB, water trop sombre pour que le plomb reste visible, et une règle de contraste insatisfiable. C'est l'argument pour écrire les règles avant les dessins : une palette qui a l'air juste ne l'est pas.

v0.1La palette : le format, check, build. Faite.
v0.2Les icônes line : le vocabulaire de motifs, lint, VectorDrawable, vingt icônes de base.
v0.3Les icônes pane : remplissages par rôle, ressources Android et Compose.
v0.4Les patterns : treillis hexagonal, vigne, et le pavage de verre proprement dit.
v0.5La galerie et schema : un agent produit une icône depuis une phrase.

Ce qui reste ouvert

Deux questions sans réponse

Q4

Le vocabulaire de motifs est-il assez expressif pour vingt icônes d'interface sans recourir à l'échappatoire path ? Si path dépasse un tiers des icônes, le vocabulaire est trop court. Cela ne se tranche pas sur le papier : la v0.2 le mesure en dessinant.

Q5

Sous quelle licence les icônes et les patterns ? CC0 laisse tout prendre, y compris fermer un dérivé. CC BY-SA protège le commun mais pose à chaque application la question de l'œuvre dérivée. Les assets étant générés, la valeur est dans le générateur, pas dans le PNG.