Voltar à vitrine ↖

PROJETO 002 / CAFETERIA IMAGINADA

CAPI
CAFÉ.

Uma cafeteria que só existe na tela, feita para você querer ficar.

Do vídeo de 8 segundos ao olhar que acompanha o mouse: como 192 frames reais viraram um hero interativo, e o que ficou de fora por decisão.

Entrar no site ↗

Capi Café é uma cafeteria fictícia criada para este estudo. Cardápio e valores são ilustrativos; não há vendas.

A capivara Capi segurando um copo de café no hero do site, acompanhando o cursor CAPTURA DO SITE REAL · PRÉVIA MUDA

Um personagem, um vídeo e a pergunta: como fazer alguém ficar?

O Jorge pediu um site de cafeteria fofinho e muito interativo, com a capivara Capi no centro. A marca inteira nasceu no projeto: nome, cardápio de 12 itens, ilustrações, logo e tom de voz. O hero usa os frames do vídeo original para a cabeça e o corpo acompanharem o cursor sem cortes; o cookie é um objeto 3D procedural; o cantinho é uma maquete em camadas com achados escondidos.

192frames reais do vídeo no herodocs/REVIEW-R4F.md · trilha 36→8 | 89→120

≤350 mspara a cabeça assentar no cursor.qa/claude-r4f-fluidez.json · 287/286 ms nas pontas

14.336triângulos no cookie proceduraldocs/REVIEW-R3-ETAPA2.md · data-triangles

  • Olhar que segue o mouseScrub contínuo pelos frames reais do vídeo, com caminho mais curto entre poses e retorno ao vídeo em loop quando o cursor para.
  • Cookie Patinha em 3DMalha procedural em Three.js com relevo derivado da textura; salta no hover, gira ao arrastar e solta migalhas ao clicar.
  • Cantinho interativoMaquete isométrica em camadas: luminária, planta e xícara reagem ao toque e guardam três achados.

NÃO É UM BOTÃO MÁGICO.

É UMA SEQUÊNCIA
DE DECISÕES.

O raio-X mostra inclusive o que foi reprovado. Porque saber o que corrigir também é construir.

  1. 01

    Pesquisar a marca

    Referências, linguagem e fidelidade do produto antes da ferramenta.

  2. 02

    Escrever a experiência

    Um roteiro de cenas, transições e intenção de cada momento.

  3. 03

    Dirigir a arte

    Gerar, compor, comparar e corrigir as imagens no contexto.

  4. 04

    Dar movimento às imagens

    Frames aprovados, prompts de UGC e seleção das saídas do Flow.

  5. 05

    Construir com código

    Astro, 3D, movimento de scroll e alternativas por capacidade do dispositivo.

  6. 06

    Revisar de verdade

    Rótulo, recortes, teclado, contraste, carga e comportamento.

  7. 07

    Preparar a publicação

    SEO, segurança, artefatos estáticos e entrega para integração.

RAIO-X

O resultado tem bastidores.

12 recortes de um único projeto: o vídeo, os testes de fluidez, as imagens aprovadas e as reprovadas. Artefatos reais, instruções documentadas e limites explícitos.

RAIO-X / Capi Café · hero

Um vídeo de 8 segundos virou o hero.

O Jorge entregou uma imagem obrigatória e um vídeo de 8 s (1280×720, 24 fps, 192 frames). Em vez de gerar poses, o hero usa o próprio vídeo: em repouso ele toca em loop; ao mover o mouse, um playhead percorre os frames reais até a pose que olha para o cursor. Nenhum corte: a transição é o movimento gravado.

Imagem obrigatória entregue pelo Jorge
Imagem obrigatória entregue pelo Jorge
Hero em tela cheia, vídeo em loop
Hero em tela cheia, vídeo em loop
Ferramenta / modelo · conforme registro
FFmpeg (ffmpeg-static) para extrair e validar 192 frames; Codex · gpt-6-astra escreveu o controlador em JavaScript vanilla.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · Rodada 4f
Extrair todos os frames decodificados sem filtro de fps; master horizontal com os 192 frames; runtime em atlas WebP; playhead contínuo com amortecimento exponencial (tau 130 ms), caminho mais curto no grafo de frames com junção 8↔89, retorno ao vídeo pelo frame atual após 2,5 s parado.

Documento de origem: docs/REVIEW-R4F.md · Rodada 4f

Entrada: video/Character_looking_around_drinking….mp4
Saída: public/immersive/capi-loop.mp4

RAIO-X / Capi Café · frames

Nenhum frame inventado.

O vídeo não tem uma varredura limpa esquerda→direita: ela olha para vários lados e bebe no fim. Foram escolhidos os trechos 36→8 (esquerda→frente) e 89→120 (frente→direita), unidos por dois frames frontais quase idênticos. Frames com piscada só podem ser atravessados, nunca servem de pose de descanso.

Contact sheet dos frames do vídeo
Contact sheet dos frames do vídeo
13 poses de descanso, esquerda → direita
13 poses de descanso, esquerda → direita
Ferramenta / modelo · conforme registro
Contact sheets por FFmpeg; comparação pixel a pixel (MAE 2,66/255 na junção); Codex.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · análise do vídeo
Mapear os 192 frames por direção do olhar; medir abertura dos olhos por frame e marcar como não descansáveis os que ficam abaixo de 65% da abertura máxima; calibrar x do cursor → ângulo → frame descansável mais próximo.

Documento de origem: docs/REVIEW-ETAPA1.md · docs/REVIEW-R4D.md · análise do vídeo

Entrada: .qa/contact-1.jpg
Saída: .qa/r4f-settled-contact.png

RAIO-X / Capi Café · olhos

Vinte e cinco olhares.

Para o olhar acompanhar o cursor em duas direções, 24 edições do frame 89 alteraram só os olhos; o corpo e o cenário vieram do original por máscara. Cada saída foi validada contra a base (diferença fora da cabeça ≤ 8/255). A grade foi usada na primeira versão imersiva e depois recuou para refinamento, quando o corpo inteiro passou a acompanhar.

Frame frontal de referência
Frame frontal de referência
Grade 5×5 aprovada (diferença 1,95–2,80/255)
Grade 5×5 aprovada (diferença 1,95–2,80/255)
Ferramenta / modelo · conforme registro
ImageGen integrado ao Codex, uma edição por chamada; auditoria de diferença por script.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · Rodada 3 · entrega 1
Mesma imagem; a capivara olha para [cima-esquerda | cima | cima-direita | esquerda | frente | direita | baixo-esquerda | baixo | baixo-direita], em intensidade leve ou forte. Não alterar luz, fundo, copo, patas ou pelo do corpo.

Documento de origem: docs/REVIEW-R3-ETAPA1.md · Rodada 3 · entrega 1

Entrada: assets/gaze/base-89.png
Saída: public/immersive/gaze-desktop.webp

RAIO-X / Capi Café · teste

Fluidez é número, não opinião.

Depois que o Jorge disse “não ficou fluida”, um teste em Chromium real passou a ser o critério: nenhum salto maior que 3 arestas por quadro, latência até assentar ≤ 350 ms, 60 fps, zero tremor com o mouse parado. Quatro rodadas (4b a 4f) corrigiram mapeamento por ângulo, zona morta no centro e distribuição das poses.

Ponta esquerda antes (rodada 4b)
Ponta esquerda antes (rodada 4b)
Poses equidistantes aprovadas (rodada 4f)
Poses equidistantes aprovadas (rodada 4f)
Ferramenta / modelo · conforme registro
Playwright (Chromium 151) · .qa/claude-fluidez.cjs e .qa/claude-tracking-diag.cjs, escritos pelo Claude.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · medições 4d–4f
Aceite: latencia_ate_assentar_ms ≤ 350 nas pontas; frames finais esquerda ≤ 34 e direita ≥ 116; jitterCentro.trocasDeFrame ≤ 2 e cruzamentosJuncao = 0; só modo gaze durante os movimentos; poses visualmente equidistantes nos dois lados.

Documento de origem: docs/REVIEW-R4D.md · docs/REVIEW-R4F.md · medições 4d–4f

Entrada: .qa/claude-r4b-fluidez.json
Saída: .qa/claude-r4f-fluidez.json

RAIO-X / Capi Café · resolução

Nítida quando para.

O Jorge notou perda de qualidade ao mexer o mouse: o atlas de 512 px por frame era esticado para a tela inteira. Solução: 50 frames descansáveis em 1280×720 carregados sob demanda e desenhados quando a cabeça assenta, e atlas de movimento em 640 px. PSNR na cabeça subiu de 34 para 45 dB.

Repouso desenhado do atlas de 512 px
Repouso desenhado do atlas de 512 px
Repouso com frame integral 1280×720
Repouso com frame integral 1280×720
Ferramenta / modelo · conforme registro
sharp/FFmpeg para derivados; cache LRU de ImageBitmap no controlador; Codex.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · Rodada 5 · item 0
Pose de descanso em resolução total: um WebP 1280×720 por frame descansável, prefetch dos vizinhos do alvo; trocar para o frame integral após ~80 ms no mesmo frame, sem transição. Atlas de movimento 640×360. Canvas em devicePixelRatio até 2.

Documento de origem: docs/REVIEW-R5-FASE1.md · Rodada 5 · item 0

Entrada: public/immersive/r5/*.webp
Saída: public/immersive/full/*.webp

RAIO-X / Capi Café · descarte

O que foi reprovado.

O vídeo não tem cabeça erguida de frente nem olhar para baixo. Doze poses geradas ficaram convincentes, mas o pelo regenerado “fervilha” entre vizinhos: 3 de 12 transições passaram do limite de continuidade (≤ 2,5× a diferença média entre frames reais), mesmo após separação de frequências. Nada foi integrado; a solução completa é um novo vídeo.

Candidatos gerados (cima e baixo)
Candidatos gerados (cima e baixo)
Estado publicado: só o frame real 89 no eixo vertical
Estado publicado: só o frame real 89 no eixo vertical
Ferramenta / modelo · conforme registro
ImageGen integrado; scripts/consolidate-r5b-texture.cjs (separação de frequências, σ = 3 px); tabela .qa/r5b-continuidade.json.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · Rodada 5 · fase 1b
Manter as baixas frequências do frame gerado (forma, sombra, olhos) e reinjetar as altas frequências do pelo do frame real 89 dentro da máscara da cabeça; recalcular a continuidade; aprovar só se todas as arestas ficarem ≤ 13,91.

Documento de origem: docs/QA-RODADA5B.md · Rodada 5 · fase 1b

Entrada: assets/gaze/r5b/
Saída: .qa/r5b-continuidade.json

RAIO-X / Capi Café · 3D

Um cookie que salta da tela.

A conta de image-to-3D estava sem créditos. O cookie foi construído em Three.js como um disco espesso de borda irregular, com relevo derivado da luminância da textura, lateral e base texturizadas. Hover aproxima da câmera com mola, arrastar gira, clique solta migalhas; fallback em sprite de 12 ângulos para quem não tem WebGL.

Textura do topo recortada
Textura do topo recortada
Capítulo do cookie em WebGL
Capítulo do cookie em WebGL
Ferramenta / modelo · conforme registro
Three.js 0.186 em chunk carregado sob demanda; 14.336 triângulos; Codex.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · Rodada 3 · entrega 2
Cookie procedural: geometria de disco espesso com bordas irregulares (ruído no perímetro), displacement da luminância da textura do topo, textura lateral dourada com craquelado; material com roughness alta; giro lento em idle interrompido no hover.

Documento de origem: docs/REVIEW-R3-ETAPA2.md · Rodada 3 · entrega 2

Entrada: assets/immersive/cookie-top-v1.png
Saída: public/products/cookie-patinha.glb

RAIO-X / Capi Café · cardápio

Doze produtos, uma louça.

O Capiccino foi gerado primeiro e virou referência de louça marfim, fundo caramelo, luz da esquerda-alta e perspectiva ¾. Cada produto foi uma chamada separada, inspecionada individualmente; os 12 itens do cardápio ganharam imagem e a galeria horizontal usa todas.

Piloto: Capiccino
Piloto: Capiccino
Galeria com os 12 itens
Galeria com os 12 itens
Ferramenta / modelo · conforme registro
ImageGen integrado, um asset por chamada (8 + 6 + 1 revisão); prompts em assets/generated/PROMPTS.md.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · piloto Capiccino
A single rounded warm ivory glazed ceramic cappuccino cup on a matching saucer, edible microfoam, seamless warm caramel studio background, soft light from upper left, three-quarter slightly above, ~50 mm; no typography, no animal, opaque background.

Documento de origem: assets/generated/PROMPTS.md · piloto Capiccino

Entrada: assets/generated/capiccino-v1.png
Saída: public/img/*-800.webp

RAIO-X / Capi Café · vapor

Fumaça com medida.

O pedido era “fumaça de café saindo”. A primeira implementação tinha alfa máximo 0,13 e quase não aparecia (0,8% dos pixels). Dobrou-se a presença (60 partículas, alfa 0,28, vida mais longa, vento do cursor) e a versão B foi escolhida comparando quadros iguais, sem tapar os olhos.

Versão A (0,80% dos pixels)
Versão A (0,80% dos pixels)
Versão B escolhida (2,21% dos pixels)
Versão B escolhida (2,21% dos pixels)
Ferramenta / modelo · conforme registro
Canvas 2D, campo de ruído e vento do ponteiro; emissor segue a tampa do copo frame a frame; Codex.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · retoque 1
Alfa de pico ~0,28, raio 10→40 px, vida mais longa subindo até ~35% da altura do palco, 60 partículas, deriva pelo vento do cursor, cor creme quente; A/B em screenshot e escolher o que fica bonito sem tapar o rosto.

Documento de origem: docs/REVIEW-R3-ETAPA1.md · retoque 1

Entrada: .qa/r3-smoke-A.png
Saída: .qa/r3-smoke-B.png

RAIO-X / Capi Café · cantinho

Uma maquete para mexer.

A cena isométrica gerada foi separada em fundo, mobília, planta e luminária (peças geradas em fundo ciano para chave cromática). Parallax com o ponteiro; a luminária acende e apaga, a planta balança, a xícara solta vapor; os três “achados” do site moram aqui.

Cena gerada original
Cena gerada original
Cena interativa com a luz apagada
Cena interativa com a luz apagada
Ferramenta / modelo · conforme registro
ImageGen (5 gerações) + scripts/prepare-scene-assets.cjs (alpha real); Codex.
Tempo de produção
Não documentado. Não estimado.
Prompt ou instrução real · Rodada 3 · entrega 4
Separar a maquete em 3–4 camadas (fundo, banco+mesa, planta, luminária) e criar hotspots: clicar na luminária acende/apaga (mudar a iluminação com overlay), clicar na planta balança, clicar na xícara solta vapor.

Documento de origem: docs/REVIEW-R3-ETAPA4.md · Rodada 3 · entrega 4

Entrada: assets/generated/cantinho-cafe-v1.png
Saída: assets/scene/

O PRÓXIMO PROJETO PODE SER O SEU.

DE “COMO FIZERAM?”
PARA “EU FIZ”.

Aprenda a conectar direção de arte, IA e código. Comece pelo processo, não pela lista de ferramentas.

Quero aprender a fazer isso