TLcube

Le QR se lit bien.
Il n'a simplement jamais été beau

Affiches, emballages, cartes de visite — le QR est partout, et poser un carré noir et blanc sur un design longuement travaillé a toujours laissé un regret. Mais s'il a cette allure, c'est pour une raison : c'est ce qu'on construit quand une caméra et un processeur de 1994 doivent pouvoir le lire.

Ces contraintes se sont largement levées. Les caméras de téléphone et la puissance de calcul ont de la marge. Alors, plutôt que de courir après la seule reconnaissance, nous avons dépensé cette marge du côté du plaisir des yeux. Il ne s'agit pas de remplacer le QR, mais de lui ajouter un siège voisin.

Pourquoi maintenant

Le QR était la bonne réponse à son époque. Deux valeurs, des modules carrés, de grands motifs de repérage — chacun de ces choix existait pour qu'une caméra faible puisse tout de même lire. Sous ces contraintes, renoncer à l'esthétique était rationnel.

Cette prémisse a changé. Les caméras de téléphone d'aujourd'hui n'ont plus rien à voir, et le traitement vidéo en temps réel tourne dans un navigateur. Cette marge pouvait aller à la densité — ou à l'apparence. C'est la raison d'être de ce format.

La densité, elle, a été sacrifiée. Les cellules en losange sont moins efficaces en surface que les modules carrés. Ce format ne concourt pas sur la densité. S'il faut transporter beaucoup, le QR reste l'outil adapté.

Trois types

Choisissez selon l'endroit où il sera posé. Les trois partagent le même contrat de données et ne diffèrent que par la silhouette. Tous les codes ci-dessous encodent https://tl.estre.so.

Type Y — cube unique

Type Y — cube unique

Trois faces n×n. Une marque d'un seul tenant, adaptée à la signalétique et aux objets.

n = 13 / 21 / 25 · charge utile nette 31 / 98 / 141 B
Type O — champ hexagonal

Type O — champ hexagonal

La forme de base. Les cellules en losange se déploient autour d'un repère central.

k = 6 / 8 / 10 · charge utile nette 18 / 39 / 65 B
Type A — silhouette triangulaire

Type A — silhouette triangulaire

Un cœur hexagonal complété de pièces d'angle, formant un triangle équilatéral.

k = 6 / 8 / 10 · charge utile nette 31 / 62 / 101 B

La charge utile nette est donnée pour ECC-M. Les trois types peuvent porter un QR de secours à côté, si bien qu'il reste un chemin là où un code TL ne peut pas être lu.

Fonctionnement

1. Cellule = trois losanges

Un pavage rhombille divise chaque cellule hexagonale en faces T, L et R.

2. Ordre = symbole

Classer les trois luminances donne 3! = 6 résultats — un chiffre en base 6.

3. 3 chiffres = 1 symbole

Un Reed–Solomon sur le corps premier GF(211) corrige les erreurs.

Ce que cela libère

Invariant par transformation monotone. Les changements d'éclairage global, le gamma et la table tonale d'une imprimante sont monotones — ils ne peuvent pas changer un ordre. Si l'ordre survit, la valeur survit.

Le rendu reste libre. Le contrat de données se réduit à « l'ordre entre les faces, plus un écart minimal ». À l'intérieur, la couleur, la matière, les dégradés par face et l'animation sont ouverts. Cette liberté est le cœur du format.

Cela ne rend rien beau tout seul. Ce qui s'ouvre, c'est le contrat, pas le résultat. Ce que vous dessinez à l'intérieur reste votre travail.

Scanner — où nous en sommes

Le décodeur fonctionne. Les trois types se lisent sur des photos prises avec de vrais appareils ; reste à faire monter la précision et la vitesse. Chaque temps ci-dessous correspond à un décodage d'une photo fixe prise avec un vrai téléphone — ce n'est ni un temps de premier accrochage ni un taux de réussite en direct.

TypePhotos réelles décodéesUn décodage sur photo fixeValidation en direct
Type Y — cube unique3 / 3≈ 0.1 smesures en cours
Type O — champ hexagonal3 / 3≈ 1.8 smesures en cours
Type A — silhouette triangulaire3 / 3≈ 0.86 smesures en cours
Variante QR central (les trois types)8 / 9mesures en cours

Pour un décodage d'une photo fixe, le Type Y est le plus court, O et A sont plus longs. La refonte des repères et les nouveaux essais de format ont élargi l'ensemble des photos réelles qui se décodent, au prix de plus de travail sur certains chemins ; Y tente désormais un chemin bon marché d'abord et ne balaie tout qu'une fois, après échec. Ces chiffres ne doivent pas se lire comme un temps de premier accrochage en direct.

Le temps d'un décodage sur photo fixe ne prédit pas le ressenti d'un scan en direct. Lors des premières mesures sur appareil réel, une image rapide pouvait tout de même donner un premier accrochage lent lorsqu'il fallait beaucoup d'images avant une réussite, et le classement des types différait de ce tableau sur photo fixe. Ces relevés portent sur un seul appareil et un petit échantillon : nous n'attribuons donc pas encore de note d'usage en direct.

Les conditions de prise de vue comptent aussi. À la mesure, 9 pixels par cellule était le plancher de décodage, et à distance égale un objectif ultra grand-angle cadre le code plus petit et passe sous cette ligne (ultra grand-angle 7.6 px en échec / grand-angle 9.1 px en réussite). C'est pourquoi le scanner propose un choix d'objectif.

Dans la variante QR central, un bloc QR remplace le repère central. Ses motifs de repérage fournissent le point d'entrée en position et en orientation qui sert à décoder le corps TL environnant. Le générateur utilise désormais ce chemin validé par défaut pour les types O et A. Par défaut, le QR reste un secours qui porte un lien de lecture ; la charge utile, elle, reste dans le corps TL.

Mesuré le 2026-08-13 · échantillon de 9 photos prises avec trois capteurs de téléphone (ultra grand-angle, grand-angle, téléobjectif) · petit côté 1440 px. L'échantillon est petit — lisez ceci comme un état actuel, pas comme un taux de réussite.

Spécification et implémentation

La spécification du format et l'implémentation de référence sont publiées sous licence Apache 2.0. JavaScript vanilla, aucune chaîne de build, zéro dépendance à l'exécution — cela tourne dans un seul fichier HTML.

N'implémenter que le décodeur suffit à être une implémentation conforme. L'adoption commence par le côté lecture.

SiteRôleÉtat
tlcube.estre.soGénérateuren ligne
tlscan.estre.soScanneren ligne — état ›
tl.estre.soSite de présentationvous êtes ici