Diretor de cena
O usuário pede um vídeo; o agente cria o quadro inicial, o quadro final e renderiza o clipe interpolando entre os dois — com job assíncrono e progresso na conversa.
Atualizado em 01 de set. de 2026
O pedido é simples — "quero um vídeo de um filhote que acorda e olha pra câmera" — e o resultado é um clipe com narrativa: o agente decide o que existe no começo e no fim da cena, gera as duas imagens, e manda o modelo de vídeo interpolar o movimento entre elas.
O truque técnico é o modo primeiro/último quadro do /v1/videos (images: [inicial, final]), somado ao modo assíncrono ("async": true): a rota responde na hora com um job_id, o agente avisa o progresso e consulta o resultado — nada fica pendurado esperando os ~2 minutos da renderização.
Custo por clipe
Nas configurações do exemplo: 2 imagens (flux-2-dev, ~$0,03 cada) + 5s de vídeo (seedance-2.0-mini, ~$0,58) ≈ US$ 0,64 por clipe. O prompt instrui o agente a confirmar antes de gerar vários.
Como importar
Na plataforma: Agents → Importar, escolha o arquivo baixado. Ele entra como um rascunho novo (nada existente é alterado), com ids de observabilidade renovados. Depois preencha o que é do seu ambiente — credenciais, URLs e bases de conhecimento — e publique.
{
"format": "hinow.agent",
"version": 1,
"exported_at": "2026-09-01T00:00:00Z",
"credentials_included": false,
"agent": {
"name": "Diretor de cena",
"description": "O usuário pede um vídeo; o agente cria o quadro inicial, o quadro final e renderiza o clipe interpolando entre os dois — job assíncrono, com progresso na conversa.",
"avatar": null,
"model": null,
"system_prompt": null,
"config": {},
"tools": null,
"workflow": {
"nodes": [
{
"id": "start",
"type": "start",
"position": {
"x": 300,
"y": 0
},
"data": {
"label": "Início",
"variables": []
}
},
{
"id": "agent-1",
"type": "agent",
"position": {
"x": 290,
"y": 160
},
"data": {
"name": "diretor",
"model": "hinow/himax",
"system_prompt": "Você é um diretor de cena: transforma um pedido de vídeo em um clipe curto com narrativa.\n\nO MÉTODO (siga sempre, avisando o usuário a cada etapa)\n1. Entenda a cena: o que existe no COMEÇO e o que existe no FIM. Se o pedido não deixar claro, proponha você mesmo um começo e um fim em uma frase e siga.\n2. Diga \"🎬 Criando o quadro inicial...\" e chame gerar_imagem com um prompt visual rico EM INGLÊS do primeiro quadro (cena, luz, enquadramento, estilo). Use model=black-forest-labs/flux-2-dev e n=1.\n3. Diga \"🎬 Agora o quadro final...\" e gere o último quadro com o MESMO cenário, mesma luz e mesmo enquadramento — só o que a narrativa muda deve mudar.\n4. Mostre as duas imagens (markdown de imagem) e chame gerar_video com: model=bytedance/seedance-2.0-mini, images=[url_inicial, url_final] NESTA ORDEM, duration=5 e um prompt EM INGLÊS do MOVIMENTO entre os quadros. Ela responde NA HORA com um job_id — o vídeo continua sendo renderizado no servidor.\n5. Avise: \"🎬 Vídeo em renderização (~2 minutos)...\" e consulte consultar_video com o job_id. Se status for queued/running, consulte no máximo mais 3 vezes; se ainda não tiver terminado, ESCREVA O CÓDIGO DO JOB NA SUA MENSAGEM (ex.: `job: 8370e7b8-…`, o id completo) e diga que o usuário pode perguntar \"e aí?\" em um instante. IMPORTANTE: só o que você escreve fica na conversa — na próxima mensagem, retome o job pelo código que VOCÊ anotou, nunca invente um.\n6. Quando status=succeeded, entregue a URL do mp4 exatamente como veio em result.urls[0] e descreva a cena em uma frase.\n\nREGRAS\n- URLs sempre exatamente como as ferramentas devolveram — nunca invente nem encurte.\n- Os dois quadros devem parecer o mesmo lugar: repita cenário, paleta e enquadramento nos dois prompts.\n- Se uma etapa falhar, diga qual foi e o erro — não repita mais de uma vez sem avisar.\n- Um vídeo por pedido. Custo aproximado: US$ 0,70 por clipe — se pedirem vários, confirme antes.",
"config": {
"temperature": 0.6,
"max_tool_loops": 12
}
}
},
{
"id": "hook-1",
"type": "webhook",
"position": {
"x": 575,
"y": 160
},
"data": {
"label": "HINOW mídia",
"config": {
"name": "HINOW mídia",
"baseUrl": "https://api.hinow.ai/v1",
"timeout": 30000,
"auth": {
"type": "bearer",
"token": "COLE_SUA_API_KEY_hi"
},
"retryOnError": false,
"maxRetries": 0,
"routes": [
{
"id": "r1",
"name": "gerar_imagem",
"method": "POST",
"path": "/images",
"description": "Gera uma imagem a partir de um prompt e devolve a URL pública.",
"whenToUse": "Para criar o quadro inicial e o quadro final da cena.",
"responseDescription": "data.urls[0] é a URL pública da imagem. data.cost.amount é o custo.",
"bodyTemplate": "{\"model\": \"{{model}}\", \"prompt\": \"{{prompt}}\", \"n\": {{n}}}",
"parameters": [
{
"name": "model",
"type": "string",
"required": true,
"description": "Modelo de imagem",
"example": "black-forest-labs/flux-2-dev"
},
{
"name": "prompt",
"type": "string",
"required": true,
"description": "Descrição visual detalhada, em inglês"
},
{
"name": "n",
"type": "number",
"required": true,
"description": "Quantas imagens. Sempre 1",
"example": "1"
}
],
"enabled": true
},
{
"id": "r2",
"name": "gerar_video",
"method": "POST",
"path": "/videos",
"description": "Inicia a renderização do vídeo interpolando do primeiro ao último quadro. Responde na hora com um job_id.",
"whenToUse": "Depois de ter as DUAS imagens prontas. images[0]=quadro inicial, images[1]=quadro final. Depois acompanhe com consultar_video.",
"responseDescription": "202 com data.job_id e data.poll_url. A renderização continua no servidor.",
"parameters": [
{
"name": "model",
"type": "string",
"required": true,
"description": "Modelo de vídeo",
"example": "bytedance/seedance-2.0-mini"
},
{
"name": "prompt",
"type": "string",
"required": true,
"description": "O movimento entre os quadros, em inglês"
},
{
"name": "images",
"type": "array",
"required": true,
"description": "[url_quadro_inicial, url_quadro_final], nesta ordem",
"howToObtain": "As URLs devolvidas por gerar_imagem"
},
{
"name": "duration",
"type": "number",
"required": true,
"description": "Segundos de vídeo. Use 5",
"example": "5"
}
],
"enabled": true,
"bodyTemplate": "{\"model\": \"{{model}}\", \"prompt\": \"{{prompt}}\", \"images\": \"{{images}}\", \"image_mode\": \"frames\", \"duration\": {{duration}}, \"async\": true}"
},
{
"id": "r3",
"name": "consultar_video",
"method": "GET",
"path": "/media/jobs/{{job_id}}",
"description": "Consulta o andamento da renderização do vídeo.",
"whenToUse": "Depois de gerar_video, com o job_id devolvido. Repita enquanto status for queued/running (máx. 4 por turno).",
"responseDescription": "data.status: queued | running | succeeded | failed. Quando succeeded, data.result.urls[0] é o mp4 e data.result.cost o custo.",
"parameters": [
{
"name": "job_id",
"type": "string",
"required": true,
"description": "Id do job",
"howToObtain": "Veio da resposta de gerar_video",
"example": "7796d83b-..."
}
],
"enabled": true
}
]
}
}
},
{
"id": "end-1",
"type": "end",
"position": {
"x": 305,
"y": 330
},
"data": {
"label": "Fim",
"status": "success"
}
}
],
"edges": [
{
"id": "e1",
"source": "start",
"target": "agent-1"
},
{
"id": "e2",
"source": "hook-1",
"target": "agent-1",
"sourceHandle": "tool",
"targetHandle": "slot-1"
},
{
"id": "e3",
"source": "agent-1",
"target": "end-1"
}
]
}
}
}| Card | Por que está aqui | O que faz |
|---|---|---|
**Agent diretor** | O roteirista. | Transforma o pedido em dois prompts visuais EM INGLÊS com o mesmo cenário/luz/enquadramento (só a narrativa muda), e descreve o MOVIMENTO entre os quadros para o modelo de vídeo. |
| **Webhook → api.hinow.ai** (3 rotas) | A própria API da HINOW como ferramenta. | gerar_imagem (POST /images), gerar_video (POST /videos com async: true) e consultar_video (GET /media/jobs/{{job_id}}). Bearer = sua chave hi_.... |
- 1
Gera os dois quadros e mostra
O usuário vê as imagens antes do vídeo — e pode corrigir a cena barato, sem pagar a renderização.
- 2
Dispara o vídeo e recebe o job na hora
gerar_videocomimages:[inicial, final]e"async": trueresponde em milissegundos comjob_id+poll_url. - 3
Consulta algumas vezes e, se preciso, adia
Até 3 consultas no turno; se ainda estiver renderizando, o agente escreve o código do job na mensagem e convida o usuário a perguntar "e aí?".
- 4
O "e aí?" retoma pelo código
A conversa continua no mesmo
thread_id; o agente relê o job anotado, consulta de novo e entrega a URL do mp4 exatamente como voltou.
Por que anotar o job na mensagem
O histórico do thread guarda o texto da conversa — não os resultados de ferramenta. Um id que só existiu num retorno de tool não sobrevive ao turno; escrito na mensagem, sobrevive. É a regra de ouro de qualquer fluxo assíncrono em conversa.
- Cole a sua chave
hi_...noauth.tokendo card (o arquivo vem com placeholder). - Qualidade acima de custo: troque os modelos nos prompts do sistema —
seedream-5-litenas imagens eveo-31no vídeo mudam o patamar (e o preço). - Clipe maior:
durationaté o limite do modelo; o job assíncrono aguenta renderizações longas (deadline de 35 min). - Sem narrativa, só animar uma foto: mande uma imagem só em
images— vira image-to-video simples.
Todos os fluxos prontos
Outros agents completos para importar e adaptar.

