Compruebe la compatibilidad de un bucle de video
Un bucle de video convincente necesita que el final regrese al principio con naturalidad.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Este verificador compara los valores medios de rojo, verde, azul y brillo del primer y último fotograma, convierte sus diferencias en una puntuación clara y comprueba si alcanza el umbral elegido. Así, editores, diseñadores de movimiento y procesos multimedia pueden detectar posibles cortes antes de revisar cada exportación manualmente o publicar un bucle con un destello en la unión.
Prepare promedios representativos de los fotogramas
Calcule primero un valor medio de rojo, verde, azul y brillo para el primer fotograma, y los mismos cuatro valores para el último. Todos los canales, incluido el brillo, deben usar la escala habitual de 0 a 255 para que la comparación sea coherente. Utilice los fotogramas decodificados que verá el público, después de aplicar la conversión de color, filtros, capas y compresión final. Una comparación anterior al etalonaje puede ocultar una discontinuidad introducida más tarde. Evite también miniaturas creadas por servicios distintos, ya que el cambio de tamaño y la gestión de color pueden alterar los promedios de forma independiente. El verificador exige los cuatro canales en ambos conjuntos porque aceptar un color incompleto produciría una puntuación engañosa. Los promedios resumen la imagen y permiten una prueba rápida y determinista, pero no describen dónde están los objetos o bordes. Interprete el resultado como un primer filtro: una buena puntuación indica que el color y la luminosidad globales regresan de forma parecida, no que el movimiento, la composición o la textura coincidan perfectamente en el corte.
Interprete la puntuación y el umbral
El cálculo mide la distancia euclídea entre los promedios RGB y la normaliza frente a la mayor distancia RGB posible. También mide por separado la diferencia absoluta de brillo y la normaliza en la misma escala de 0 a 255. El color aporta el 80 por ciento de la similitud final y el brillo el 20 por ciento: un cambio amplio de tono suele percibirse más, aunque un destello o una caída de luz conserva un peso importante. La puntuación va de 0 a 100; 100 significa que los cuatro valores coinciden exactamente. El umbral predeterminado es 90. Una puntuación igual o superior se marca como compatible; una inferior requiere revisión. Elija un umbral mayor para fondos ambientales, productos o pantallas grandes donde cualquier salto distraiga. Uno menor puede servir para cortes rápidos, efectos de fallo o vistas decorativas pequeñas. Mantenga el mismo umbral en todo un lote para comparar resultados. La respuesta incluye además la distancia de color y la diferencia de brillo, por lo que puede saber si conviene corregir principalmente el color o la exposición.
Integre el resultado en su flujo de edición
Ejecute la comprobación después de cada exportación candidata y envíe los fallos a un editor o a una corrección automática. Si domina la diferencia de brillo, igualar la exposición, añadir un fundido breve o ajustar el final de una transición puede mejorar la unión. Si la distancia de color es grande, revise el balance de blancos, los cambios de iluminación, los degradados animados y la compresión cerca del límite. Tras modificar el video, calcule de nuevo los promedios en vez de reutilizar mediciones anteriores. En un proceso automatizado, guarde la puntuación, el umbral y las diferencias junto a la exportación para explicar cada aprobación o rechazo. La API cuesta $0.002 por elemento; la versión del navegador resulta práctica para comprobaciones individuales. Previsualice siempre los bucles importantes, incluso si aprueban. Dos fotogramas pueden compartir el mismo color medio y colocar zonas claras y oscuras en esquinas opuestas. Los promedios tampoco evalúan posición, movimiento de cámara, flujo óptico ni continuidad del audio. Esta herramienta funciona mejor como control económico que detecta pronto destellos y cambios generales; combínela con inspección visual o comparación espacial cuando el acabado deba ser impecable.
Qué puede hacer con ella
Revise bucles para redes sociales
Detecte animaciones exportadas cuyo último fotograma cambia de color o brillo antes de programar su publicación.
Valide lotes de diseño de movimiento
Aplique un único umbral a muchos fondos en bucle y remita solo los posibles fallos a una persona revisora.
Ajuste contenido para pantallas ambientales
Compare versiones para vestíbulos, quioscos o escenarios donde un destello periódico en la unión sería evidente.
Preguntas frecuentes
¿Qué valores debe proporcionar?
Indique promedios de rojo, verde, azul y brillo entre 0 y 255 para el primer y el último fotograma.
¿Qué ocurre si falta un canal?
La solicitud devuelve un error de entrada no válida en lugar de calcular una puntuación parcial o engañosa.
¿Qué puntuación se considera compatible?
El umbral predeterminado es 90 y puede elegir cualquier valor entre 0 y 100 según su política de revisión.
¿Una aprobación garantiza un bucle perfecto?
No. Mide el color y brillo medios globales, no la posición, el movimiento, las texturas ni la continuidad del audio.
¿Cuánto cuesta la comprobación por API?
Cada elemento cuesta $0.002 mediante la API. El verificador del navegador sirve para comprobaciones interactivas individuales.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"first_frame": {
"red": 124,
"green": 118,
"blue": 110,
"brightness": 117.6
},
"last_frame": {
"red": 126,
"green": 117,
"blue": 112,
"brightness": 118.1
}
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.loop_seamless_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |