Interpoler deux couleurs en HSL par le chemin de teinte court
Mélangez deux couleurs en parcourant l’espace HSL au lieu de calculer la moyenne de leurs canaux rouge, vert et bleu.
Lancer gratuitement
Indiquez deux couleurs hexadécimales et une fraction comprise entre zéro et un : cette capacité renvoie le point intermédiaire sous forme de valeurs hex, RGB et HSL normalisées. La teinte suit le côté le plus court du cercle chromatique et applique une règle fixe en cas d’égalité sur un demi-tour. Une requête identique produit donc toujours le même résultat. Une validation stricte convient aux outils de conception, aux pipelines de jetons, aux images clés et aux tests reproductibles.
Fonctionnement de l’interpolation HSL par le chemin court
Chaque entrée est une couleur hexadécimale de 3 ou 6 chiffres, avec ou sans dièse initial. Le moteur développe la notation abrégée, normalise la casse, convertit les canaux sRGB entiers en HSL, puis traite la teinte comme un angle plutôt que comme une valeur linéaire ordinaire. Cette différence devient essentielle près de la limite du cercle chromatique. Un mélange de 350 degrés à 10 degrés doit parcourir 20 degrés en passant par le rouge, et non traverser presque toutes les autres teintes par le chemin long. La différence signée est donc normalisée dans l’intervalle semi-ouvert allant de -180 degrés inclus à 180 degrés exclu. Une égalité exacte à 180 degrés prend toujours la direction négative, ce qui rend déterministe un choix autrement ambigu. La saturation et la luminosité sont interpolées directement avec la même fraction. La couleur HSL obtenue est reconvertie en canaux RGB entiers arrondis et en une chaîne hexadécimale minuscule de 6 chiffres. Les composantes HSL et le delta de teinte sont arrondis à 6 décimales afin de stabiliser le JSON tout en gardant une précision utile. Aucun réseau, hasard, horloge ni état mutable n’intervient.
Choisir la fraction et comprendre la réponse
Réglez t sur 0 pour recevoir la couleur initiale, sur 1 pour recevoir la couleur finale, ou sur une valeur décimale intermédiaire pour calculer un point entre les deux. La valeur 0.25 parcourt un quart de chaque composante HSL interpolée, tandis que 0.5 sélectionne le milieu. La réponse rappelle les deux couleurs limites normalisées et la fraction exacte, puis fournit hex, un objet rgb contenant les canaux entiers r, g et b, ainsi qu’un objet hsl dont h est exprimé en degrés et s et l en pourcentages. Le champ hue_delta révèle l’intégralité du parcours angulaire signé choisi avant sa multiplication par t. Le champ hue_path associé vaut increasing, decreasing ou none ; il facilite le diagnostic des dégradés qui franchissent zéro degré et la reproduction du trajet dans un autre moteur de rendu. Les extrémités en niveaux de gris reçoivent la teinte conventionnelle zéro, car une couleur RGB achromatique ne possède aucune teinte visuelle définie. L’interpolation reste déterministe, même si l’ajout de saturation entre un gris et une couleur peut révéler cette valeur conventionnelle. Envoyez t comme nombre JSON, sans guillemets.
Utilisation sûre en conception et en production
Cette opération convient partout où un système exige une couleur reproductible entre deux points connus. Un générateur de thèmes peut produire des jetons de survol, de pression ou de transition sans intégrer de bibliothèque chromatique. Un service de graphiques peut demander des échantillons régulièrement espacés avec des fractions telles que 0, 0.25, 0.5, 0.75 et 1. Un pipeline d’animation peut calculer des images clés dont la teinte ne parcourt pas accidentellement le grand arc par le vert ou le bleu. Les entrées normalisées et l’arrondi borné facilitent aussi les tests de régression. Le endpoint accepte volontairement uniquement les couleurs RGB hexadécimales ; les canaux alpha, noms CSS, chaînes rgb(), chaînes HSL et espaces à large gamut sortent de ce contrat ciblé. Les longueurs invalides, caractères non hexadécimaux, champs manquants, fractions non finies et valeurs hors limites échouent à la validation. Une exécution API réussie coûte $0.002 par élément, tandis que le navigateur utilise le même moteur pur. HSL n’étant pas perceptuellement uniforme, choisissez un outil fondé sur LAB si des étapes visuellement égales sont prioritaires.
Cas d’usage
Générer les états d’un thème
Créez des couleurs intermédiaires déterministes pour les jetons de survol, de focus, d’activation et de sélection.
Construire des échantillons de dégradé
Évaluez plusieurs fractions pour produire des points HSL qui suivent le plus court arc de teinte.
Créer des images clés d’animation
Calculez des couleurs stables sans longue rotation accidentelle autour du cercle chromatique.
Questions fréquentes
Que signifie t ?
t est la fraction d’interpolation : 0 renvoie la première couleur, 1 la seconde et les valeurs intermédiaires produisent les couleurs situées entre elles.
Comment la direction de teinte est-elle choisie ?
La teinte suit la différence circulaire la plus courte. Si les deux directions valent exactement 180 degrés, la direction décroissante est retenue.
Quels formats de couleur sont acceptés ?
Les entrées acceptent des couleurs RGB hexadécimales de 3 ou 6 chiffres, avec un dièse facultatif. Alpha, noms et fonctions CSS sont refusés.
Pourquoi les mélanges HSL et RGB diffèrent-ils ?
HSL interpole la teinte, la saturation et la luminosité, tandis que RGB moyenne les intensités des canaux ; leurs trajets diffèrent donc.
Quel est le prix d’un appel API ?
Un appel API réussi coûte $0.002 par élément. Le même moteur déterministe peut fonctionner dans le navigateur.
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/interpolate-hsl \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"color1":"#ff0000","color2":"#0000ff","t":0.5}'const res = await fetch("https://api.kit.forhosting.com/color/interpolate-hsl", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/interpolate-hsl",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/interpolate-hsl", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"color1":"#ff0000","color2":"#0000ff","t":0.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"color1":"#ff0000","color2":"#0000ff","t":0.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/interpolate-hsl", 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
{
"color1": "#ff0000",
"color2": "#0000ff",
"t": 0.5
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.interpolate_hsl",
"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.
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. |