Trier les couleurs par luminance
Transformez un ensemble désordonné de couleurs hex en une gamme prévisible du sombre au clair.
Lancer gratuitement
Cet outil valide chaque valeur, normalise les notations hex courte et complète, convertit les canaux sRGB en lumière linéaire et trie selon la luminance relative WCAG. Chaque résultat fournit la couleur normalisée et sa luminance, afin que vous puissiez examiner les écarts subtils sans vous fier à une impression visuelle. Les ex æquo gardent leur ordre initial, les doublons restent présents et une même entrée produit toujours la même sortie.
Créez une gamme lumineuse depuis une palette désordonnée
Les collections suivent souvent la création des jetons ou la sérialisation du fichier, et non leur luminosité. Envoyez le tableau colors pour recevoir des enregistrements classés par luminance relative croissante. Les formes à trois chiffres sont développées, celles à six chiffres acceptent un dièse facultatif et la sortie emploie #rrggbb en minuscules. Cette normalisation simplifie les instantanés, fichiers de jetons, feuilles CSS et comparaisons. Les doublons sont conservés, car ils peuvent désigner des jetons différents. À luminance strictement égale, l’ordre d’entrée est maintenu afin d’éviter toute variation. La réponse précise aussi le nombre, le sens et la méthode. Utilisez-la pour produire une palette séquentielle ou étudier des teintes voisines. L’opération réordonne seulement les couleurs : elle ne crée aucune nuance, ne renomme aucun jeton et ne garantit pas des intervalles perceptuellement uniformes.
Comprenez comment la luminance relative impose l’ordre
La luminance relative n’est pas une simple moyenne des octets rouge, vert et bleu. Les couleurs hex encodent des canaux sRGB selon une courbe non linéaire : chaque canal est ramené entre zéro et un, puis converti en lumière linéaire. Les valeurs sous le seuil sRGB sont divisées par 12.92 ; les autres utilisent la fonction de puissance standard. Les coefficients 0.2126, 0.7152 et 0.0722 sont ensuite appliqués. Le vert pèse le plus et le bleu le moins ; le résultat va de zéro pour le noir à un pour le blanc. Le tri exploite la valeur complète non arrondie. Les six décimales affichées facilitent uniquement la lecture et la sérialisation stable. Ce modèle intervient dans WCAG, mais un classement ne démontre pas l’accessibilité : contrôlez séparément chaque couple premier plan–arrière-plan.
Validez les entrées et intégrez un résultat déterministe
Le champ colors doit être un tableau non vide de 1000 éléments au maximum. Chaque élément doit être une chaîne comportant exactement trois ou six chiffres hexadécimaux après un dièse facultatif. Les espaces extérieurs sont ignorés, mais l’alpha, les noms CSS, les fonctions rgb(), les longueurs erronées et les autres types sont refusés. L’erreur indique l’index concerné sans supprimer ni deviner une valeur. Une chaîne de conception ne peut donc pas accepter une gamme partielle trompeuse. L’implémentation effectue uniquement des calculs locaux et un tri en mémoire, sans réseau, horloge, hasard ni conservation. Le même tableau produit ainsi le même JSON dans le navigateur, en CI et via API. Le navigateur est gratuit et chaque appel API coûte $0.002. Doublons conservés et ex æquo stables permettent de rattacher sûrement les résultats aux métadonnées sources.
Cas d’usage
Classer des jetons de conception
Transformez des couleurs héritées ou générées en séquence stable avant de numéroter la gamme.
Préparer les couleurs séquentielles d’un graphique
Classez les nuances par luminance relative pour faire progresser l’échelle dans un sens cohérent.
Auditer la progression d’une palette
Examinez luminances et couleurs normalisées pour repérer inversions, doublons ou écarts trop faibles.
Questions fréquentes
Quel est le prix d’un appel API ?
Chaque appel API coûte $0.002. Vous pouvez aussi exécuter gratuitement le même solveur déterministe dans le navigateur.
Quels formats de couleur sont acceptés ?
Utilisez trois ou six chiffres hex avec un dièse facultatif, par exemple #abc, abc, #aabbcc ou AABBCC.
L’alpha et les noms CSS sont-ils admis ?
Non. L’hex alpha, les noms, rgb(), hsl() et les autres syntaxes CSS sont refusés pour éviter toute ambiguïté.
Que se passe-t-il si deux couleurs ont la même luminance ?
Elles conservent leur ordre relatif initial. Cette règle stable préserve également les doublons.
L’ordre sombre-clair garantit-il un contraste accessible ?
Non. Le classement décrit des couleurs seules ; l’accessibilité exige d’évaluer des couples précis de premier plan et de fond.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/color/sort-by-luminance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"colors":["#f8fafc","#0f172a","#22c55e","#64748b"]}'const res = await fetch("https://api.kit.forhosting.com/color/sort-by-luminance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"colors": [
"#f8fafc",
"#0f172a",
"#22c55e",
"#64748b"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/sort-by-luminance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"colors": [
"#f8fafc",
"#0f172a",
"#22c55e",
"#64748b"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/sort-by-luminance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"colors":["#f8fafc","#0f172a","#22c55e","#64748b"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"colors":["#f8fafc","#0f172a","#22c55e","#64748b"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/sort-by-luminance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"colors": [
"#f8fafc",
"#0f172a",
"#22c55e",
"#64748b"
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.sort_by_luminance",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_items | 1000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |