Processamento em batch
O batch Sync Labs API processa até 500 gerações lip sync em uma única solicitação, enviada como um arquivo JSONL ou como um array JSON de linhas. Ela foi feita para grandes volumes de clipes curtos, como campanhas de video personalizadas ou localização de conteúdo, em que os resultados podem chegar ao longo de várias horas.
Quem pode usar a API de lotes?
A API de lotes exige um plano Scale ou superior e aprovação para sua organização. O acesso fica desativado por padrão, inclusive em novas assinaturas Scale. Entre em contato com o suporte para solicitar acesso. Usuários existentes também precisam de aprovação após uma análise de uso e faturamento.
Sem aprovação, a organização recebe 403 com errorCode: batch_access_not_enabled, inclusive com dry_run. Após a aprovação, os demais planos e as contas gratuitas recebem 402 com errorCode: plan_feature_unavailable. requiredPlan é scale, ou enterprise nos planos de créditos.
A remoção do acesso para criar lotes não interrompe os lotes já aceitos. Você pode consultar o status e baixar os resultados disponíveis.
- Um batch comporta de 20 a 500 registros por padrão, ou o limite próprio da sua conta.
- Cada batch ativo ocupa uma vaga do seu limite de batches, que é o limite de simultaneidade do seu plano. Os registros dele não contam para a simultaneidade de
/v2/generate. - A saída estimada de cada registro pode ter no máximo 30 segundos. Um registro mais longo falha no arquivo de resultados com
Input files exceed 30s duration, which is not supported in batch mode, enquanto o restante do batch é executado. - Cada registro é cobrado como a geração que ele executa.
Em uma solicitação multipart, envie exatamente um arquivo JSONL no campo input (file também funciona). Outros campos de arquivo ou vários arquivos retornam 400. Um erro 503 upload_capacity_unavailable não cria nenhum batch. Repita a mesma solicitação após o tempo indicado em Retry-After ou envie um corpo JSON com rows.
Quando usar batch, e quando não usar
Um batch é um pipeline com fila. Todos os registros são baixados e verificados antes que qualquer um comece, e os resultados podem levar horas, com um prazo alvo de até 24 horas. Use-o para grandes volumes de clipes curtos que não precisam terminar imediatamente.
Ele não é a forma de enviar algumas gerações ao mesmo tempo. Para isso:
- Envie solicitações normais a
POST /v2/generateem paralelo, dentro do seu limite de simultaneidade. Cada uma começa assim que é admitida. - Ou deixe um agente usar a ferramenta
jobs_create-manydo servidor MCP da sync. labs, que inicia vários jobs de uma vez pela API normal.
Limites de simultaneidade em batch
Quando você já executa tantos batches quanto o limite de simultaneidade do seu plano, a API retorna 429 Too Many Requests com errorCode: concurrency_limit_reached:
A resposta inclui um cabeçalho Retry-After (em segundos) e um cabeçalho X-Sync-Concurrency-Limit. Em vez de tentar novamente de imediato, aguarde retryAfterSeconds ou até que um dos seus batches ativos termine.
Como faço para criar um trabalho batch?
Prepare seu arquivo de entrada
Crie um arquivo JSON Lines (.jsonl) com suas solicitações de geração. Cada linha deve conter um request_id exclusivo, o endpoint (deve ser "/v2/generate") e um payload com o formato de solicitação de geração padrão (igual a Gerar API). O arquivo deve estar no formato JSON Lines (.jsonl) com tamanho máx de arquivo de 5 MB e comportar de 20 a 500 registros por padrão.
Crie um batch
<CodeGroup> <CodeBlock>```python from sync import Sync
sync = Sync()
batch = sync.batch.create( input=open(“input.jsonl”, “rb”) )
print(f”Batch created with ID: {batch.id}”)
O campo response contém os mesmos dados que respostas individuais Gerar API. Os nomes de campos no arquivo de resultados estão em snake_case, portanto o video de uma linha concluída fica em response.output_url e o ID da geração em response.id. Associe cada linha à sua entrada pelo request_id.
Para obter um exemplo funcional completo, consulte o exemplo de processamento batch em nosso repositório de exemplos.
Notificações de webhook
Ao fornecer um webhook_url, você receberá uma notificação POST quando seu batch for concluído ou falhar. Ela é assinada com um cabeçalho Sync-Signature como os webhooks de geração e segue a mesma política de novas tentativas: até 6 tentativas ao longo de cerca de 2 horas, com o mesmo cabeçalho Sync-Delivery-Id em todas.
Diferente da resposta de Get Batch, o payload do webhook usa nomes de campo em camelCase:
O webhook de conclusão pode ser entregue mais de uma vez para o mesmo batch. Use o cabeçalho Sync-Delivery-Id ou o id do batch para ignorar notificações que você já processou.
Linhas de edição de diálogo (acesso antecipado)
Uma linha de batch pode renderizar uma prévia de edição de diálogo concluída, em vez de combinar um video com um novo áudio. Use isso para transformar um video gravado em muitas variantes, como uma por nome de destinatário. Mensagens de vídeo personalizadas tem um script completo.
As linhas de edição de diálogo estão em acesso antecipado e são habilitadas por organização. Entre em contato para ativá-las. Até lá, as linhas que contêm dialogueEdit são recusadas no envio.
O payload de cada linha contém:
model, por exemplosync-3.inputcom exatamente um video: o mesmo video de origem a partir do qual a prévia foi feita.dialogueEdit: {"id": "..."}: o ID de uma prévia concluída dePOST /v2/dialogue-editsna sua organização.
Não adicione entradas de áudio ou texto, segments ou dubParams; a prévia fornece o áudio.
Os mesmos objetos de linha funcionam como linhas em um upload de arquivo JSONL.
No envio, cada linha de edição de diálogo é expandida exatamente na solicitação que POST /v2/generate monta para essa prévia, e é cobrada da mesma forma que essa geração. O payload no arquivo de resultados mostra a solicitação expandida (o video, o áudio da prévia e os segmentos editados), não a linha que você enviou. Envie primeiro o batch com dry_run: true: ele executa todas as verificações abaixo, incluindo a expansão, sem renderizar nada.
- Todas as linhas de edição de diálogo em um batch devem usar prévias feitas a partir do mesmo video de origem. Para vários videos, envie um batch por video.
- Os limites usuais de batch se aplicam: de 20 a 500 registros por padrão e 5 MB. A expansão adiciona o áudio da prévia e os segmentos editados a cada linha. O limite de 5 MB também se aplica ao batch expandido. Um batch com menos de 5 MB no envio pode ser recusado com um erro de tamanho de arquivo e status
400. Uma execução de teste também informa esse erro. Se isso acontecer, divida as linhas em batches menores. - A maioria das prévias é renderizada como segmentos editados do video. Uma prévia que só pode ser renderizada como lip sync do video inteiro é aceita em um batch apenas quando essa renderização tem 30 segundos ou menos; renderize as mais longas com
POST /v2/generate.
Recusas de edição de diálogo
Se alguma linha de edição de diálogo não puder ser renderizada, a solicitação inteira é recusada e nenhum batch é criado. A resposta traz o errorCode que POST /v2/generate retornaria para essa prévia, além do lineNumber da primeira linha com falha:
Apenas a primeira linha com falha é informada. Corrija-a e repita o dry run até que ele retorne {"status": "VALIDATED"}.

