Vérifiez la compatibilité du raccord d’une boucle vidéo
Une boucle vidéo convaincante doit revenir naturellement de sa fin à son début. Cet outil compare les valeurs moyennes de rouge, vert, bleu et luminosité des première et dernière images, transforme leurs écarts en un score clair et vérifie si celui-ci atteint le seuil choisi.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Les équipes de montage, de motion design et d’automatisation peuvent ainsi repérer un raccord probablement visible avant de visionner chaque exportation image par image ou de publier une boucle qui produit un flash à la jonction.
Préparez des moyennes d’image représentatives
Calculez d’abord une moyenne de rouge, vert, bleu et luminosité pour la première image, puis les quatre mêmes valeurs pour la dernière. Tous les canaux, luminosité comprise, doivent employer l’échelle habituelle de 0 à 255 afin que la comparaison reste cohérente. Utilisez les images décodées que le public verra réellement, après conversion colorimétrique, filtres, incrustations et compression finale. Une comparaison effectuée avant l’étalonnage peut masquer un raccord créé plus tard. Évitez aussi des vignettes produites par des services différents : le redimensionnement et la gestion des couleurs peuvent modifier leurs moyennes séparément. L’outil exige chaque canal dans les deux ensembles, car une couleur incomplète donnerait un score rassurant qui néglige une partie de l’image. Les moyennes réduisent l’image à un signal compact et rendent ce contrôle rapide et déterministe, mais elles ne décrivent pas l’emplacement des objets ou des contours. Considérez donc le résultat comme un premier filtre. Un score favorable indique un retour proche de la couleur et de la lumière globales, sans garantir l’alignement parfait du mouvement, de la composition ou de la texture.
Interprétez le score et le seuil
Le calcul mesure la distance euclidienne entre les moyennes RGB et la normalise par rapport à la plus grande distance RGB possible. Il mesure séparément l’écart absolu de luminosité et le normalise sur la même plage de 0 à 255. La couleur représente 80 pour cent de la similarité finale et la luminosité 20 pour cent : un changement général de teinte est souvent plus visible, tout en laissant un poids significatif à un flash ou à une baisse de lumière. Le score s’étend de 0 à 100, où 100 signifie que les quatre valeurs correspondent exactement. Le seuil par défaut est 90. Un score égal ou supérieur est déclaré compatible ; un score inférieur doit être examiné. Choisissez un seuil plus strict pour les ambiances discrètes, les présentations de produits ou les grands écrans. Un seuil moindre peut convenir aux coupes rapides, aux effets glitch ou aux petits aperçus décoratifs. Conservez le même seuil pour tout un lot afin de comparer les résultats. La réponse fournit aussi la distance colorimétrique et l’écart de luminosité, ce qui révèle si l’étalonnage ou l’exposition explique principalement le défaut.
Intégrez le résultat à votre flux de montage
Lancez le contrôle après chaque exportation candidate, puis renvoyez les échecs vers une personne chargée du montage ou une correction automatisée. Si l’écart de luminosité domine, harmoniser l’exposition, ajouter un bref fondu ou ajuster la fin d’une transition peut améliorer la jonction. Si la distance de couleur est grande, examinez la balance des blancs, les changements d’éclairage, les dégradés animés et la compression près de la limite. Après une modification, recalculez les moyennes au lieu de réutiliser les anciennes mesures. Dans un pipeline, conservez le score, le seuil et les écarts avec l’exportation afin d’expliquer chaque validation. L’API coûte $0.002 par élément, tandis que la version dans le navigateur convient aux contrôles ponctuels. Prévisualisez toujours les boucles importantes, même validées. Deux images peuvent partager la même couleur moyenne tout en plaçant leurs zones claires et sombres dans des coins opposés. Les moyennes ne testent pas non plus la position, la caméra, le flux optique ou la continuité sonore. Cet outil constitue surtout un contrôle économique qui détecte tôt les flashs et variations générales ; complétez-le par une inspection visuelle ou spatiale lorsqu’un raccord impeccable est indispensable.
Cas d’usage
Contrôlez les boucles pour les réseaux sociaux
Repérez les animations dont la dernière image change de couleur ou de luminosité avant leur programmation.
Validez des lots de motion design
Appliquez un seuil commun à plusieurs fonds animés et ne soumettez que les écarts probables à une personne.
Réglez les contenus d’affichage ambiant
Comparez des versions pour halls, bornes ou scènes où un flash récurrent au raccord serait gênant.
Questions fréquentes
Quelles valeurs devez-vous fournir ?
Indiquez les moyennes de rouge, vert, bleu et luminosité de 0 à 255 pour les première et dernière images.
Que se passe-t-il si un canal manque ?
La demande échoue avec une erreur de saisie plutôt que de calculer un score partiel ou trompeur.
Quel score indique un raccord compatible ?
Le seuil par défaut est 90 ; vous pouvez choisir toute valeur de 0 à 100 selon votre politique de contrôle.
Un score favorable garantit-il une boucle parfaite ?
Non. Le test mesure couleur et luminosité moyennes, pas la position, le mouvement, les textures ou le son.
Combien coûte le contrôle par API ?
Chaque élément coûte $0.002 via l’API. Le contrôle dans le navigateur convient aux vérifications interactives ponctuelles.
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/video/loop-seamless-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first_frame":{"red":124,"green":118,"blue":110,"brightness":117.6},"last_frame":{"red":126,"green":117,"blue":112,"brightness":118.1}}'const res = await fetch("https://api.kit.forhosting.com/video/loop-seamless-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first_frame": {
"red": 124,
"green": 118,
"blue": 110,
"brightness": 117.6
},
"last_frame": {
"red": 126,
"green": 117,
"blue": 112,
"brightness": 118.1
}
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/loop-seamless-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first_frame": {
"red": 124,
"green": 118,
"blue": 110,
"brightness": 117.6
},
"last_frame": {
"red": 126,
"green": 117,
"blue": 112,
"brightness": 118.1
}
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/loop-seamless-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first_frame":{"red":124,"green":118,"blue":110,"brightness":117.6},"last_frame":{"red":126,"green":117,"blue":112,"brightness":118.1}}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first_frame":{"red":124,"green":118,"blue":110,"brightness":117.6},"last_frame":{"red":126,"green":117,"blue":112,"brightness":118.1}}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/loop-seamless-check", 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
{
"first_frame": {
"red": 124,
"green": 118,
"blue": 110,
"brightness": 117.6
},
"last_frame": {
"red": 126,
"green": 117,
"blue": 112,
"brightness": 118.1
}
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.loop_seamless_check",
"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_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
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. |