Verifique a compatibilidade de loop de vídeo
Um loop de vídeo convincente depende de um final que retorne naturalmente ao começo.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
Este verificador compara as médias de vermelho, verde, azul e brilho do primeiro e do último quadro, transforma as diferenças em uma pontuação clara e verifica se ela alcança o limite escolhido. Assim, editores, motion designers e pipelines de mídia podem identificar prováveis emendas antes de assistir a cada exportação quadro a quadro ou publicar um loop que pisca na transição.
Prepare médias representativas dos quadros
Primeiro, calcule uma média de vermelho, verde, azul e brilho para o quadro inicial e os mesmos quatro valores para o quadro final. Todos os canais, inclusive o brilho, devem usar a escala comum de 0 a 255 para manter a comparação consistente. Use os quadros decodificados que o público realmente verá, depois de conversão de cor, filtros, sobreposições e compressão da exportação. Comparar fontes antes da correção de cor pode esconder uma emenda criada posteriormente. Evite miniaturas produzidas por serviços diferentes, pois redimensionamento e gerenciamento de cor podem alterar cada média. O verificador exige todos os canais nos dois conjuntos: aceitar uma cor incompleta criaria uma pontuação tranquilizadora que ignora parte da imagem. As médias condensam o quadro em um sinal compacto, tornando o teste rápido e determinístico, mas não mostram a localização de objetos ou bordas. Considere o resultado uma triagem inicial. Uma aprovação indica retorno semelhante da cor e da luminosidade gerais; não garante que movimento, composição ou textura se alinhem perfeitamente no corte.
Entenda a pontuação e o limite
O cálculo mede a distância euclidiana entre as médias RGB e a normaliza pela maior distância RGB possível. Separadamente, mede a diferença absoluta de brilho e a normaliza na mesma faixa de 0 a 255. A cor representa 80 por cento da similaridade final e o brilho, 20 por cento. Essa ponderação reconhece que uma mudança ampla de matiz costuma ser evidente, sem deixar de considerar um clarão ou escurecimento. A pontuação vai de 0 a 100, e 100 significa que os quatro valores coincidem exatamente. O limite padrão é 90. Uma pontuação igual ou superior é marcada como compatível; uma inferior pede revisão. Escolha um limite maior para loops ambientes discretos, fundos de produtos ou telas grandes. Um limite menor pode servir para cortes rápidos, estilos de glitch ou pequenas prévias decorativas. Mantenha o mesmo limite em um lote para comparar os resultados. A resposta também informa a distância de cor e a diferença de brilho, permitindo descobrir se a gradação ou a exposição é a principal origem da incompatibilidade.
Use o resultado no fluxo de edição
Execute a verificação depois de cada exportação candidata e encaminhe os vídeos reprovados para um editor ou uma etapa automática de correção. Se a diferença de brilho predominar, igualar a exposição, adicionar uma transição curta ou ajustar o fim de um fade pode melhorar a emenda. Se a distância de cor for grande, examine balanço de branco, mudanças de iluminação, gradientes animados e compressão próxima ao limite. Após qualquer alteração, calcule novamente as médias em vez de reutilizar medições antigas. Em um pipeline, armazene pontuação, limite e diferenças junto à exportação para que a equipe entenda cada decisão. A API custa US$ 0,002 por item, enquanto a versão no navegador atende verificações individuais. Sempre visualize loops importantes, mesmo quando aprovados. Dois quadros podem ter a mesma cor média e distribuir áreas claras e escuras em cantos opostos; médias não testam posição, câmera, fluxo óptico nem continuidade de áudio. Esta ferramenta funciona melhor como uma barreira de qualidade econômica que detecta cedo clarões e saltos gerais. Combine-a com inspeção visual ou comparação espacial quando um resultado realmente contínuo for essencial.
Casos de uso
Analise loops para redes sociais
Sinalize animações exportadas cujo quadro final muda de cor ou brilho antes de agendar a publicação.
Valide lotes de motion design
Aplique um limite único a vários fundos em loop e envie apenas possíveis incompatibilidades para revisão humana.
Ajuste conteúdo para telas ambientes
Compare versões para saguões, quiosques ou palcos nos quais um clarão recorrente na emenda seria perceptível.
Perguntas frequentes
Quais valores você deve fornecer?
Forneça médias de vermelho, verde, azul e brilho entre 0 e 255 para o primeiro e o último quadro.
O que acontece se faltar um canal?
A solicitação falha com um erro de entrada inválida, em vez de calcular uma pontuação parcial ou enganosa.
Qual pontuação conta como compatível?
O limite padrão é 90, e você pode escolher qualquer valor entre 0 e 100 de acordo com sua política de revisão.
Uma aprovação garante um loop perfeito?
Não. O teste mede cor e brilho médios globais, não posição, movimento, alinhamento de textura ou continuidade de áudio.
Quanto custa a verificação pela API?
Cada item custa US$ 0,002 pela API. O verificador no navegador está disponível para verificações interativas individuais.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"first_frame": {
"red": 124,
"green": 118,
"blue": 110,
"brightness": 117.6
},
"last_frame": {
"red": 126,
"green": 117,
"blue": 112,
"brightness": 118.1
}
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.loop_seamless_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |