S1 — Même fichier, N tailles (srcset largeur + ?query, même URL)
Attendu : 1 image · servie en N tailles (downscale ladder, comme Shopify).
S2 — Density srcset, MÊME image, noms DIFFÉRENTS (le piège a.png / b.png)
Sans comparaison pixels : « 4 images différentes » (noms diffèrent). Avec le hash perceptuel moteur : doit fusionner en 1 image (pixels identiques).
S3 — Density srcset, images VRAIMENT différentes (style WebKit)
Attendu : N images différentes (contenus distincts). Ne PAS fusionner.
S4 — Même NOM de fichier (hero.jpg), AR + contenu DIFFÉRENTS
Piège du regroupement par nom/stem. Attendu : 3 créatifs séparés (AR différents, pixels différents) — surtout ne pas les fusionner parce qu'ils s'appellent tous « hero.jpg ».



S5 — Même AR (1:1), images DIFFÉRENTES, noms différents
Piège du regroupement « même AR = même famille ». Attendu : 3 créatifs séparés (le hash perceptuel doit les distinguer).



S6 — <picture> multi-format (webp + jpeg), MÊME image
Attendu : 1 image, reconnue à travers ses variantes de format (le hash doit matcher webp ≈ jpeg du même visuel).
S7 — <picture> art-direction : même sujet, AR différent par device
Attendu : classification par device — carré (mobile) vs large (desktop), même sujet. Les deux crops appartiennent au même visuel.
S8 — Upscale : petite image affichée grande + grande version, MÊME image
Attendu : le hash perceptuel doit reconnaître que la petite (upscalée) et la grande sont la même image, malgré l'échelle.

