Product Promo Video (promo-video)
Skill para fazer vídeos promocionais verticais polidos, com baixo custo (LLM → Remotion).
Apenas escolha cenas e preencha textos. Não escreva código, não modifique arquivos em template/, scripts/, industries/, não insira coordenadas, frames, valores de cor.
Abaixo, <SKILL> = diretório onde este arquivo está. Comandos rodam com Node 22 / Python 3.10. Para falantes de inglês ou vídeo em inglês → leia <SKILL>/SKILL.en.md.
Fluxo
- Definir setor e idioma.
meta.industry:software(padrão) /food/ecommerce/education/beauty/travel. Escolher o setor errado fará com que as cenas disponíveis e regras de compliance estejam incorretas.meta.lang:zh(padrão) /en. Se o vídeo precisar de legendas em inglês ou o usuário for falante de inglês, definaen(uso explicado no passo 5).- Se o setor não for
software→ primeiro leia<SKILL>/industries/<industry>/recipe.md(para projetos em inglês, leiarecipe.en.md): contém combinações de cenas recomendadas,brief-template.md(perguntas do brief para este setor),test-brief.md/expected.md(exemplos de violações de compliance). Pular este passo leva a conteúdo bloqueado.
- Ler o brief. Entenda as seções do
brief-template.mdcorrespondente; se faltar "nome do produto / proposta de valor em uma frase / cenário de dor / ação principal / 2–4 pontos fortes", pergunte primeiro, não invente dados e funcionalidades.meta.product= nome exato do produto do brief. Use apenas este nome em todo o vídeo (hook, endCard). Obrandno endCard deve ser idêntico.meta.action: obrigatório. Uma frase: "o que o usuário faz → o que o produto fornece" (ex.: "tirar foto do comprovante → valores e categorias preenchidos automaticamente"), sem descrição visual. Cenas de demonstração (chat/phone/mockApp/photoShot) devem refletir esta ação no texto da tela; a validação verificará.- Se o brief tiver "como obter" → escreva em
meta.cta, e octano endCard deve ser idêntico. Se o brief disser "nenhum" → não escreva em nenhum dos dois. Não invente "baixe na loja XX". - Funcionalidades não mencionadas no brief não devem aparecer nos pontos fortes nem no endCard.
- Se o brief tiver "números e fontes" → copie cada um em
meta.facts, formato[{"id":"f1","text":"texto original…"}](não é array de strings simples). Qualquer número com unidade na tela (duração, porcentagem, múltiplo, quantidade, valor monetário) deve ter o mesmo número aqui. Sem fonte → erro, não aviso. Se não houver dados, use texto qualitativo, não invente números. O campoparams.refs: ["f1"]em uma cena pode associar uma afirmação (ex.: "feito na hora") a um fato, para verificação de regras do setor. - Todo o vídeo deve usar apenas um número para a mesma duração: se o
counterdiz "3 minutos", não pode haver "segundos" ou "3 seg" em outro lugar. Se o hook diz "meio dia", o valor antigo docountertambém deve ser "meio dia". A validação bloqueará. Emcompare, osstateitemsde uma mesma coluna não podem ser contraditórios (ex.: coluna esquerda com "5 minutos" e "três dias"). - Para sobrescrever a faixa de duração padrão de 15–45 segundos (ex.: estrutura recomendada pelo setor exige >27s), use
meta.durationRange: [15, 60](array de dois elementos). - Se precisar de texto fixo no rodapé (ex.: "Oferta por tempo limitado. Consulte página de detalhes do grupo"), use
meta.notices: array de strings, máximo 3 itens, exibido em uma linha no rodapé.
- Criar diretório:
promo/<nome_do_produto_em_ingles>/, storyboard empromo/<nome_do_produto_em_ingles>/storyboard.json. Capturas de tela, gravações de tela, logotipos fornecidos pelo usuário → copiar para o mesmo diretório. - Escolher tema (
meta.theme):- Emocional, social, estilo de vida →
warm-emotion - Desenvolvedores, IA, ferramentas avançadas →
tech-dark - Saúde, aprendizado, controle financeiro, ferramentas leves →
fresh-light - Escritório, B2B, produtividade →
business-blue - Festas, promoções, lançamentos →
festival-red - Premium, minimalista, design →
mono-premiumSe houver cor da marca, usemeta.brandColor(#RRGGBB); ela altera apenas a cor de destaque.
- Emocional, social, estilo de vida →
- Escolher 5–9 cenas (descrição das cenas em
<SKILL>/shots.md; tabela resumo das 18 cenas no topo).hookdeve ser a 1ª cena (2–3s),endCarda última (4s). Deve haver pelo menos uma cena demonstrando a ação principal (passo 2,meta.action); a validação bloqueará:chat: escrevamessages+panel(pergunta → resposta); oumockApp: escrevainput(entrada/pergunta do usuário) + resultado (dashboardstat, editoritems,done). Se houver captura de tela, usephone.meta.industrydetermina quais cenas estão disponíveis (vejaindustries/<industry>/rules.jsonparaenabledShots, ou diretamente o recipe.md). Selecionar cenas não permitidas causará erro na validação. 7 cenas específicas por setor (software não as habilita por padrão):photoShot: fotos/vídeos reais (pratos, produtos, obras, quartos, áreas comuns, cozinha)priceCard: cardápio/preços;storeCard: loja/mapa/reserva;reviewCard: avaliações reais de clientes (citação exata, sem exageros)factSheet: ficha técnica/lista de itens/grade curricular/informações de exame/amostra de cores;credCard: credenciais/premiaçõesbeforeAfter: slider de antes/depois (apenas para beleza, requerconsent:true+retouched:false)
- Escolha cenas de acordo com o tipo de produto, não use template fixo.
features(card de pontos fortes) não é obrigatório. Dois requisitos (validação alertará):- Pelo menos uma cena do meio deve vir de {compare, steps, phone, meter};
quickListecounternão podem ser usados juntos (ambos resultam em hook → quickList → mockApp → counter → endCard, um template genérico).
- Para setor software, combinações opcionais (escolha uma e adapte ao produto; outros setores sigam
industries/<industry>/recipe.md):- B2C emocional/social (chat, emoção, companhia): hook(bubble) → chat demo (2–3 legendas) → meter ou compare mostrando o impacto → quickList → endCard
- Ferramenta de produtividade (escrita, finanças, postagem, edição): hook(stat) → compare "antes vs. agora" → mockApp editor/form demo "entrada → resultado" → steps "como usar" → endCard; ou hook → quickList mostrando problemas → mockApp → steps → endCard
- B2B dados/escritório (relatórios, reuniões, CRM): hook(icon) → phone com captura anotada ou mockApp dashboard com input "pergunte → dados" → compare ou meter mostrando resultado → steps → endCard; use
counterapenas se o brief der números de tempo (e então não usequickList)
- Duração total ideal: 20–30s (permitido 15–45s, ou faixa personalizada em
meta.durationRange). Não use o mesmo tipo de cena consecutivamente. A diferença demoodentre duas cenas adjacentes não deve exceder 0.5 (insira uma cena de transição intermediária), caso contrário o fundo cortará abruptamente.
- Escrever legendas (
captionde cada cena): uma frase por cena, letras grandes estilo TikTok, falando para o espectador, não descrevendo animações (❌ "cards aparecem um por um, mostrando o que ele faz" é descrição de cena, não legenda).- Chinês: máximo 2 linhas, use
\npara quebra; cada linha ≤12 caracteres chineses (letras/números contam como meio). Parameta.lang: "en", legendas em inglês seguem limite de caracteres latinos (~1.8x o limite chinês; verdocs/shots/<type>.en.md). - Use
{}para destacar 2–5 caracteres mais importantes (cor de destaque); no máximo 1 ocorrência por legenda. captiondo hook = título da capa; escreva o problema do usuário ou uma pergunta contra-intuitiva.endCardnão usacaption; o slogan vai emparams.slogan.- Cada legenda pode ficar na tela no máximo 5 segundos. Para cenas >5s (ex.: chat 8–10s), escreva
captioncomo array de 2–3 frases, dividindo igualmente a duração:"caption": ["Não saia sem entender,\nele quer {sua atenção}", "Escolha uma e preencha,\n{decida você}"] - As legendas devem falar da situação do usuário ou da mudança que o produto traz, e se conectar com as cenas anterior e posterior. A animação é responsabilidade do componente, não precisa ser descrita. Palavras entre «» na legenda devem ter aparecido na tela nesta cena ou em cena anterior (validação bloqueará).
- Se a legenda menciona quantidade ("estes 4 itens", "três respostas"), deve corresponder ao número de itens na cena (validação bloqueará).
- Evite frases genéricas ("três coisas, {ele…}", "estes três passos", "esses momentos, você também…") e não copie legendas/parâmetros dos exemplos, shots.md ou especificações; a validação alertará e fornecerá um modelo para preenchimento direto. Exemplos servem apenas para mostrar formato.
- Não repita caracteres ("排期排期"), não remova caracteres para caber no limite ("卡脖子" → "卡脖"), não escreva erros de digitação ("登陆" = "登录", a menos que seja literalmente navio de desembarque/lua). Se ultrapassar o limite de caracteres, reformule toda a frase.
- Evite linguagem absoluta ("resolve tudo", "cristalino", "100% seguro"): o produto dificilmente cumpre; a validação alertará; substitua por termos moderados.
- Use apenas uma barra invertida
\npara quebra de linha; use «» para aspas na legenda, não".
- Chinês: máximo 2 linhas, use
- Escrever
mood(0–1): dor/tensão 0.8–1, virada 0.5, produto e pontos fortes 0–0.3, endCard 0. A cor do fundo e a trilha sonora acompanham este valor. - Escrever storyboard.json (formato no exemplo completo no final). Duração em
dur(segundos), múltiplos de 0.5. O arquivo deve estar em UTF-8. Windows em chinês usa GBK por padrão: use editor/ferramenta de escrita de arquivo que suporte UTF-8; no PowerShell use[IO.File]::WriteAllText($p, $json, [Text.UTF8Encoding]::new($false)); no Python useopen(p, "w", encoding="utf-8"). Não useecho >ouOut-File(versão 5.1) para escrever chinês. Nochat,panel.repliessão sugestões do produto "eu" envia para a outra pessoa; escreva do ponto de vista do "eu" (se eu digo que preciso fazer hora extra, a resposta sugerida não deve ser "não faça hora extra, fique comigo" — isso é do ponto de vista do outro). Se houverpanel, não usetyping. - Validar, corrigindo cada erro até passar:
Formato do erro: "cena N (tipo) campo: problema → como corrigir". Siga "como corrigir". Resultado em três níveis:node <SKILL>/scripts/validate.mjs promo/<nome>/storyboard.json- Erros (errors): devem ser corrigidos; sem correção, não gera vídeo.
- Avisos (warnings): tente corrigir (qualidade do texto, estrutura não muito similar a template); se não der, ainda gera vídeo, mas na entrega explique ao usuário por que não foi corrigido.
- Revisão humana (human): itens que a validação não consegue julgar (ex.: "esta avaliação é realmente uma citação exata?", "esta credencial é realmente do brief?"). Não altere o storyboard, apenas liste para o usuário confirmar.
- Gerar vídeo (~2 minutos, a trilha sonora é gerada automaticamente):
node <SKILL>/scripts/make.mjs promo/<nome>/storyboard.json --out promo/<nome>--outé obrigatório (para testes, use--round <rodada>, os artefatos vão paratests/<rodada>/<nome>/; vários vídeos da mesma rodada usam o mesmo nome de rodada, não crie diretórios com timestamp manualmente). Artefatos:video.mp4,sheet.png(mosaico de um frame por segundo),check/(frame 0 + frame full-size antes do fim de cada cena),report.txt(relatório de layout de texto: quebra de palavras, estouro de largura),layout.json. Para ver rapidamente alguns frames: adicione--stills 0,3.5,8(em segundos); apenas gera frames, não o vídeo completo. - Primeiro veja o final de
report.txt("autoverificação", "relatório de layout de texto", "autoverificação de layout" — o make.mjs faz automaticamente: verifica barras invertidas, nome do produto, forma de obtenção, tempo de exibição da legenda, ícone do endCard e texto de aviso não se sobrepõem, linhas quebradas/largura excedida; durante a renderização mede a posição de cada bloco de texto, verificando se o texto é cortado por cards, blocos se sobrepõem, texto sai da área x150–930). Corrija qualquer ✗ (✗ de layout geralmente é causado por muitos itens ou texto longo demais: remova itens ou encurte o texto). Depois vejasheet.pngecheck/e faça a autoinspeção abaixo; se houver problemas, corrija storyboard.json e volte ao passo 9. - Entrega: forneça ao usuário o caminho de
video.mp4esheet.png, junto com a "lista de verificação pré-publicação" (abaixo) — itens do passo 9 marcados como "revisão humana" devem ser listados exatamente como estão, para o usuário confirmar um por um. Não decida pelo usuário.
Lista de Autoinspeção (veja o mosaico, escreva conclusões para cada item, não apenas marque)
- O frame 0 já tem título grande + visual principal, não está em branco ou cortado; a capa não tem
\n, barras invertidas ou caracteres estranhos - Cada cena tem um protagonista animado (ponteiro, número, card, bolha de chat), não é uma imagem estática; não é "zoom in/out de imagem" para preencher
- As legendas não cobrem o elemento principal, não são cortadas, não quebram palavras (uma palavra partida em duas linhas); legenda e tela falam da mesma coisa, a história das cenas se conecta
- As legendas falam para o espectador, não são descrições de cena (não aparecem frases como "cards aparecem um por um")
- A ação principal está realmente demonstrada (vê-se "entrada/pergunta → resultado"), não apenas um painel pronto
- Cor de fundo muda com a emoção: dor tende a vermelho, pontos fortes e endCard tendem a cores frias
- Nome do produto no endCard =
meta.product; forma de obtenção = texto original do brief ou nenhum; sem URLs, QR codes - Números consistentes: recalcule os números do
compare(30 min vs. 5s → conclusão não pode ser "economizou 25 minutos"); números na tela devem ter fonte emmeta.facts - Sem erros de digitação, sem palavras inventadas removendo caracteres para caber no limite ("自动上传" não pode virar "自传"), sem linguagem absoluta
- Cenas específicas do setor usadas corretamente:
beforeAfterapenas em beleza;reviewCardcom citação exata, sem exageros
Lista de Verificação Pré-Publicação (entregue ao usuário, não apenas para sua própria conferência)
- Liste todos os itens de "revisão humana": a lista
humando passo 9 de validação, copie exatamente para o usuário, não decida por ele "deve estar tudo bem". Comuns: citações emreviewCard/credCardsão idênticas ao brief? Regras da plataforma foram atualizadas? Qualificações do setor estão completas? meta.industryestá correto? (se não, cenas disponíveis e regras de compliance estarão erradas).- Para aparições de pessoas reais, avaliações de clientes, fotos antes/depois: já obteve consentimento por escrito? (campos como
consent/retouchedsão apenas exigência de validação; obter consentimento real é responsabilidade do usuário, não da validação). - A plataforma de destino (Douyin/WeChat Video/Xiaohongshu/exterior) coincide com
meta.platform? As regras específicas da plataforma (ex.: carrinho de compras não pode ter legenda de preço) já foram verificadas? - Projetos bilíngues (zh/en): as legendas em inglês foram revisadas por um falante nativo? A máquina só verifica contagem de caracteres e palavras sensíveis, não detecta expressões estranhas.
Regras Rígidas (validação bloqueará)
- 1ª cena deve ser
hook;endCarddeve ser a última - Duração total entre 15–45s (ou faixa personalizada em
meta.durationRange); cada tipo de cena tem sua própria faixa de duração (ver shots.md) - Cada campo tem limite de caracteres; se ultrapassar, reformule a frase inteira para uma mais curta; não remova caracteres de dentro da palavra para caber, nem mude para inglês (para
meta.lang: "en", o inglês tem seu próprio limite de caracteres, ver documentação do campo) - Use apenas os campos, valores opcionais e nomes de ícones listados em shots.md; nomes errados ou campos extras causarão erro
- Pelo menos uma cena demonstra
meta.action(ver passo 5); cada legenda pode ficar no máximo 5 segundos na tela brandno endCard =meta.product;ctano endCard =meta.cta(se o brief não fornecer, nenhum dos dois terácta)- O texto na tela não pode conter barras invertidas literais (no JSON,
\\naparecerá literalmente na tela) - Na tela não pode aparecer: URLs, QR codes, "escaneie", @contas, "XX号: nome", "siga/pesquise XX号". Palavras da própria categoria do produto (ex.: ferramenta de formatação de "公众号" WeChat Official Account) não são consideradas desvio de tráfego: adicione a palavra a
meta.allowWords. Não altere o nome do produto para passar na validação. - Proibido usar palavras de propaganda absoluta da Lei de Publicidade: "o mais", "primeiro", "único", "primeiro", "preferido", "exclusivo", "top", "absoluto", "100%", "em toda a rede", "muito à frente"... (exceções: "recentemente", "último", "primeiro passo" não contam). Se houver fundamento real, adicione a
meta.allowWords. - Números com unidade (duração/porcentagem/múltiplo/quantidade/valor monetário) devem ter o mesmo número em
meta.facts; sem fonte, é invenção, e será erro. - Regras do setor têm três níveis: block (bloqueia) — ex.: alegação de eficácia de procedimentos estéticos, preço com desconto sem base legal, avaliação real sem mês; warn (avisa, mas não bloqueia); human (validação não decide, lista para usuário na entrega — ver item 1 da "Lista de Verificação Pré-Publicação").
- Caminhos de assets relativos ao diretório do storyboard.json; arquivos devem existir. Capturas de tela suportam png/jpg/webp; gravações de tela suportam mp4.
Proibições
- Não modifique arquivos em
template/,scripts/,industries/; não escreva coordenadas, pixels, números de frame, valores de cor, CSS - Não invente dados ou fontes que o usuário não forneceu; números na tela devem estar em
meta.facts; sem fonte, escreva "dados de exemplo, consulte situação real" - Não use nomes, logotipos ou cores características de aplicativos de terceiros (ex.: bolha verde de um app de chat); refira-se como "outra pessoa", "colega", "cliente"
- Não use nomes reais de pessoas, números de telefone, contas
- Não use o campo
bgm(make.mjs o preenche automaticamente) - Não decida por conta própria sobre áreas cinzentas de compliance do setor (ex.: "esta frase conta como termo médico?"): se a validação bloquear, corrija; se a validação permitir mas você estiver em dúvida, inclua em "revisão humana" para o usuário, não decida sozinho que "deve estar tudo bem"
Erros Comuns e Como Corrigir
| Erro | Como corrigir |
|---|---|
| Linha N … caracteres, máximo 12 por linha | Encurte, ou use \n para quebrar em duas linhas em pausa semântica |
| Usou 2 pares de {} para destaque | Deixe apenas o mais importante |
| {} sem fechamento | Cada { deve ter } correspondente, e não pode cruzar linhas |
| Contém palavra absoluta da Lei de Publicidade "mais" | Substitua por afirmação verificável: "mais rápido" → "resultado em 3 segundos" |
| 1ª cena deve ser hook | Adicione hook no início |
| Cena endCard não pode ter legenda | Remova caption, texto grande vai em params.slogan |
| Campo desconhecido | Veja "campos disponíveis" no erro, corrija ortografia (ex.: mockApp usa kind, não variant) |
| Não existe ícone chamado "xx" | Escolha da lista de ícones no topo de shots.md |
| Duração total … deve estar entre 15–45s | Adicione/remova cenas, ou altere dur |
| Arquivo de asset não encontrado | Verifique caminho relativo ao diretório do storyboard.json |
| Falha ao analisar JSON: linha N | Veja a linha: vírgula faltando, vírgula sobrando no final, legenda com aspas duplas inglesas (troque por «») |
| Esta legenda ficará na tela por N segundos | Escreva caption como array de 2–3 frases, ou divida esta cena em duas |
| Nenhuma cena demonstra a ação principal | Adicione chat (pergunta → resposta no panel) ou mockApp (input + resultado) |
Nome do produto no endCard é diferente de meta.product | Altere brand para ser idêntico a meta.product |
cta foi escrito, mas meta.cta está vazio | Se o brief tiver forma de obtenção, escreva em meta.cta e depois copie; senão, remova cta |
Contém \n literal no texto | No JSON, quebra de linha é apenas uma barra invertida \n |
| Contém nome de plataforma "公众号" (aviso) | Se for categoria do produto: adicione a meta.allowWords; se for desvio de tráfego: remova |
Campo obrigatório meta.action ausente | Escreva "o que o usuário faz → o que o produto fornece" |
Número sem fonte em meta.facts | Se o brief forneceu o número, copie exatamente em meta.facts (formato {"id":"f1","text":"…"}). Se não forneceu, substitua o número específico por texto qualitativo |
| Legenda contém descrição de cena (ex.: "cards aparecem um por um") | É legenda para o espectador, não instrução de edição. Substitua por uma frase na perspectiva do usuário |
| "登陆" é erro de digitação, deveria ser "登录" | Corrija para "登录" (exceção: "登陆舰/登陆月球" não conta) |
| "一清二楚" é promessa absoluta | Substitua por termo moderado, ex.: "informações-chave visíveis" |
| Setor "XX" não permite cena "YY" | Troque por uma cena permitida para este setor, ou verifique se meta.industry está correto |
| [B-xxx] Viola regra de compliance do setor | Siga o "como corrigir" na mensagem de erro; apenas para palavras absolutas com fundamento real, considere meta.allowWords (válido apenas para nível warn; nível block deve remover) |
Quando Não Há Captura de Tela Real
Prefira usar cena mockApp (ela é animada). Se for absolutamente necessário mostrar "clicar aqui no celular", primeiro renderize um mockApp como screenshot de exemplo e depois use em phone:
cd <SKILL>/template
npx remotion still src/index.ts Screen <caminho_absoluto_do_diretorio_da_cena>/screen.png --frame=145 --props=<caminho_absoluto_do_diretorio_da_cena>/screen-props.json
screen-props.json deve conter {"type":"mockApp","theme":"<tema>","dur":5,"params":{...params do mockApp...}}. Consulte <SKILL>/examples/_src/screen-props.json. Em seguida, na cena phone, use "src": "screen.png" e adicione em meta.disclaimer: "Tela de demonstração, conteúdo simulado".
Mais Exemplos (estruturas variadas; escolha pelo tipo de produto, não copie legendas)
<SKILL>/examples/jev.json: B2C emocional, setor software (chat demo com 2 legendas → dashboard → quickList → endCard; obtenção: "baixe a versão Android no site oficial")<SKILL>/examples/ledger.json: Ferramenta de produtividade, setor software (quickList de problemas → compare → mockApp foto do comprovante → resultado → counter → endCard; brief sem forma de obtenção → sem cta no endCard)<SKILL>/examples/meeting.json: B2B escritório, setor software (captura de tela anotada → mockApp dashboard → counter → steps → endCard; obtenção: "solicite teste gratuito no site oficial")<SKILL>/examples/en-focus.json: Exemplo em inglês (meta.lang: "en", app fictício, mostra como escrever legendas em inglês)- Outros setores (food/ecommerce/education/beauty/travel): exemplos de compliance em
industries/<industry>/test-brief.md+expected.md: test-brief é um brief de exemplo, expected mostra quais partes do storyboard baseado neste brief seriam bloqueadas e por quê. Recomendado ler ambos antes de criar o primeiro vídeo para um novo setor.
Exemplo Completo (examples/ledger.json, passa na validação diretamente)
{
"meta": {
"title": "App Controle Financeiro - Vídeo Promocional (Dor → Produto → 3 Pontos Fortes → EndCard)",
"product": "App Controle Financeiro",
"theme": "fresh-light",
"disclaimer": "Tela de demonstração, dados são exemplos",
"action": "Tirar foto do comprovante → valores e categorias preenchidos automaticamente",
"facts": [
{"id": "f1", "text": "Usuários de teste economizaram cerca de R$ 120 a mais este mês comparado ao mês anterior (dados de exemplo)"},
{"id": "f2", "text": "Exemplo de livro contábil: delivery R$ 180, café/refri R$ 30, assinatura automática esquecida R$ 19,90, corrida noturna R$ 45 (dados de exemplo)"},
{"id": "f3", "text": "Lançamento manual leva em média 5 minutos; com este app, foto do comprovante leva cerca de 10 segundos (dados de exemplo)"},
{"id": "f4", "text": "Resultado da leitura: almoço R$ 38,50, orçamento de alimentação deste mês já usado 62% (dados de exemplo)"}
]
},
"shots": [
{
"type": "hook",
"dur": 2.5,
"caption": "Salário caiu,\nmas no fim do mês {sumiu tudo}",
"mood": 0.85,
"params": {"visual": "stat", "text": "R$ 0,00", "sub": "Onde foi parar este mês?", "badge": "Tire foto do comprovante e pronto", "tone": "bad"}
},
{
"type": "quickList",
"dur": 3.5,
"caption": "Onde foi parar o dinheiro?\n{Mal lembro de nada}",
"mood": 0.8,
"params": {
"title": "Destinos do Mês",
"items": [
{"text": "Delivery", "tag": "R$ 180", "tone": "bad", "icon": "bell"},
{"text": "Café/Refri", "tag": "R$ 30", "tone": "warn", "icon": "heart"},
{"text": "Assinatura automática esquecida", "tag": "R$ 19,90", "tone": "bad", "icon": "calendar"},
{"text": "Corrida noturna", "tag": "R$ 45", "tone": "warn", "icon": "clock"}
]
}
},
{
"type": "compare",
"dur": 4.5,
"caption": "Controlar gastos\n{é mais fácil do que parece}",
"mood": 0.45,
"params": {
"mode": "lr",
"left": {"title": "Manual", "items": ["Lançamento um por um", "Categoria? Adivinha", "Desisto no fim do mês"], "tone": "bad", "icon": "doc", "stat": "5 minutos", "level": 8},
"right": {"title": "App Controle", "items": ["Foto do comprovante automática", "Categorias preenchidas", "Resumo mensal com um clique"], "tone": "good", "icon": "bolt", "stat": "10 segundos", "level": 2},
"meterLabel": "Nível de Dificuldade",
"verdict": "Lançar um gasto leva apenas 10 segundos"
}
},
{
"type": "mockApp",
"dur": 4.5,
"caption": "Tire foto do comprovante,\n{valor e categoria já preenchidos}",
"mood": 0.25,
"params": {
"kind": "editor",
"title": "Novo Lançamento",
"source": "Dados de exemplo, não são faturas reais",
"input": "Foto: comprovante de almoço",
"button": "Reconhecer",
"items": [
{"text": "Almoço R$ 38,50"},
{"text": "Estabelecimento: Padaria do Bairro"},
{"text": "Categoria: Alimentação (automático)"},
{"text": "Orçamento de alimentação usado: 62%"}
],
"highlight": 3,
"done": "Lançado!"
},
"note": "Demonstração da ação principal: usuário tira foto → app retorna valor, estabelecimento e categoria"
},
{
"type": "counter",
"dur": 3,
"caption": "Fim do mês,\n{surpresa: sobrou dinheiro!}",
"mood": 0.1,
"params": {"to": 120, "prefix": "R$ ", "label": "Economia extra neste mês", "sub": "Dados de exemplo, resultados variam", "icon": "money", "tone": "good"}
},
{
"type": "endCard",
"dur": 4,
"mood": 0,
"params": {
"brand": "App Controle Financeiro",
"slogan": "Cada centavo gasto,\n{você sabe exatamente onde foi}",
"points": ["Foto do comprovante = lançamento automático", "Livro contábil só no seu celular"],
"icon": "money"
}
}
]
}