{
  "id": "clube-spotify-candidatura",
  "titulo": "Carta para o Spotify",
  "categoria": "produto",
  "resumo": "vídeo quadrado de 8,7 s a 60 qps, sem narração e sem música, feito como uma \"carta de candidatura\" para o Spotify. O logo cai e assenta, uma frase nasce ao lado dele, uma pílula verde encolhe e vira o avatar do meio, o título troca de palavra como um odômetro, uma lista dispara para cima e lança um chip, o chip explode numa moldura de luz e o logo volta para puxar o nome da marca. Nenhuma cena para, e cada uma nasce de uma peça da anterior. Só efeitos sonoros, um por evento. Um script do After Effects (`cenas.jsx`) monta a comp inteira. Feito pelo Clube do Motion como recriação do estilo de @illdari.",
  "indicado": "portfólio de motion designer pedindo trabalho a uma marca; apresentação de identidade de app em modo escuro; vídeo de produto digital sem trilha, só com sound design.",
  "estilo": [
    "identidade do Spotify",
    "modo escuro",
    "cada cena nasce da anterior",
    "60 qps",
    "entrada pelo desfoque",
    "troca de palavra em odômetro",
    "só efeitos sonoros"
  ],
  "ficha": {
    "formato": "1080×1080, 60 qps, desfoque de movimento com obturador de 270° (fase −135°, 16 amostras)",
    "duracao": "8,73 s (524 quadros), sem narração e sem música",
    "motor": "ae",
    "voz": "ver o guia de estilo",
    "musica": "ver o guia de estilo",
    "fontes": "DM Sans (Bold, SemiBold, Medium e Regular), a geométrica gratuita mais próxima da Circular do Spotify"
  },
  "ferramentas": [
    "Claude Code",
    "After Effects"
  ],
  "ficha_tecnica": {
    "Duração": "8,73 s (524 quadros), sem narração e sem música",
    "Formato": "1080×1080, 60 qps, desfoque de movimento com obturador de 270° (fase −135°, 16 amostras)",
    "Ferramenta": "After Effects: um script ExtendScript (`cenas.jsx`) cria a comp `RECRIACAO` com 67 camadas e um marcador por evento de som; o `.aep` já vem montado",
    "Assets": "logo oficial do Spotify (PNG e o SVG do Simple Icons); avatares neutros (um losango e duas silhuetas) e 7 capas abstratas gerados por código (`fazer_assets.py`)",
    "Fonte": "DM Sans (Bold, SemiBold, Medium e Regular), a geométrica gratuita mais próxima da Circular do Spotify",
    "Textos": "em inglês, como no original (\"Purity of Motion.\", \"Global Sound\", \"Global Imersion\", \"More than just audio\", \"Its an experience\"); trocáveis no bloco `TX`",
    "Som": "39 eventos, um efeito cada, com o pico de 1 a 2 quadros antes do movimento; −14,1 LUFS e pico de −1,1 dBFS",
    "Referência": "edit \"Spotify, hire me\" de @illdari (08/08/2026)",
    "Arquivo final": "MP4 H.264 com áudio AAC"
  },
  "etapas": [
    {
      "titulo": "O roteiro",
      "texto": "**Resumo:** o vídeo não tem narração nem música; o roteiro é a sequência de cenas, com o texto que aparece e os tempos do `cenas.jsx`, e a lista dos momentos de som. Cada cena nasce de uma peça da anterior.\n\n## De onde veio a estrutura\n\nO edit de @illdari é um pedido de emprego ao Spotify feito em motion: a identidade da marca contada em 13 trocas em menos de 9 segundos, só com efeitos sonoros. Esta recriação mantém as cenas, os tempos medidos a 60 qps e os textos em inglês do original, com avatares e capas neutros no lugar das fotos de artistas e das capas reais.\n\n## Cenas por tempo\n\n | \n\n | Tempo (s)\n | Texto na tela\n | O que acontece\n\n | 0,00–0,80\n | —\n | o logo do Spotify cai do alto, estica, achata no impacto e assenta\n\n | 0,33–0,95\n | \"Purity of Motion.\"\n | a frase nasce letra por letra à direita do logo, verde-escura que vira branca; o logo desliza para a esquerda para manter o grupo no centro\n\n | 0,98–1,37\n | —\n | o contorno verde de uma pílula envolve logo e frase, o fundo clareia e a pílula encolhe até virar um anel\n\n | 1,20–1,87\n | \"Global Sound\" · \"Você\" · \"Nova\" · \"Rio\"\n | o avatar do meio nasce de dentro do anel; os outros dois chegam borrados; o título entra palavra por palavra\n\n | 1,84–2,62\n | \"Global Imersion\"\n | \"Sound\" vira \"Imersion\" como um odômetro; os avatares caem e somem; o título desce e cresce\n\n | 2,14–2,90\n | parágrafo de quatro linhas · \"Go beyond\"\n | o texto se revela linha a linha; o botão nasce de uma mancha borrada\n\n | 3,12–3,95\n | \"Night Drive\" · \"Golden Hour\" · \"All the same way\" · \"Let it go\"\n | a lista de faixas entra de baixo e dispara para cima até borrar\n\n | 3,80–4,10\n | \"All\"\n | o chip verde sobe herdando a velocidade da rolagem\n\n | 4,09–5,06\n | \"All\" · \"Friends\" · \"Podcast\"\n | corte seco para a fileira de chips, que anda para a esquerda; a seleção passa de Friends para Podcast\n\n | 5,13–5,58\n | —\n | Podcast encolhe e estoura num anel verde desfocado que vira a moldura da tela\n\n | 5,40–6,10\n | \"More than just audio\"\n | a frase assenta no centro e sai letra por letra com desfoque horizontal\n\n | 6,16–7,17\n | \"Its an experience\"\n | a frase entra com as letras afastadas que se juntam, sobe e some\n\n | 7,20–8,00\n | \"Spotify\"\n | o logo volta de baixo, desliza para a esquerda e puxa a palavra de trás dele\n\n | 8,25–8,73\n | —\n | tudo escurece até o preto\n\n## Momentos para o som\n\n- 0,18–0,25 s: whoosh curto da queda, com o pico no pouso, e um pop grave no impacto.\n\n- 0,40–0,82 s: tiques de letra enquanto a frase se escreve.\n\n- 0,97–1,03 s: brilho e morph quando a pílula acende e começa a encolher; pops nos avatares em 1,29 e 1,43 s.\n\n- 1,82–2,26 s: whoosh na saída de \"Sound\", tiques nas letras de \"Imersion\" e um whoosh baixo no movimento do título.\n\n- 3,12–3,66 s: a lista sobe, dois toques de card, rolagem e chicote no auge da velocidade.\n\n- 3,82–4,58 s: o chip sobe e pousa, clique no corte para a fileira, pop no Podcast e clique na troca de seleção.\n\n- 5,12–5,33 s: encolhe, estoura e impacto, o único som forte do vídeo.\n\n- 5,40–7,40 s: entradas e saídas de texto; logo e revelação da marca em 7,40 s; saída de tela em 8,27 s.\n\nA lista completa dos 39 eventos está em `audio/eventos.json`."
    },
    {
      "titulo": "A identidade visual",
      "texto": "**Resumo:** fundo preto com três nuvens verdes muito desfocadas, verde da marca (`#21EB51`) só no que importa, texto branco (`#FDFDFD`) em DM Sans e glow suave no logo e na pílula. A 60 qps, com curva de saída rápida, entrada pelo desfoque e efeitos sonoros adiantados. Números tirados do `cenas.jsx` e do `trilha.py`.\n\n## Palco\n\n | \n\n | Peça\n | Como é\n\n | Tela\n | 1080×1080, 60 qps, 8,73 s (524 quadros), fundo preto\n\n | Desfoque de movimento\n | obturador 270°, fase −135°, 16 amostras (limite adaptativo 128)\n\n | Montagem\n | uma comp só (`RECRIACAO`, 67 camadas); nulos `AVATARES`, `ROLAGEM`, `TITULO`, `LISTA`, `BOTAO` e `FILEIRA` carregam os grupos\n\n | Nuvens\n | elipses `#12592A` de 700 e 650 px e `#0E4420` de 600 px, desfoque 320, `wiggle(0.25, 50)`; trocam de canto a cada cena e apagam durante a rolagem (3,4–4,6 s)\n\n## Cores\n\n | \n\n | Peça\n | Valor\n\n | Fundo\n | `#000000`\n\n | Verde da marca\n | `#21EB51` (pílula, chips selecionados, letras em troca)\n\n | Texto\n | `#FDFDFD`; parágrafo `#E2E2E2`; subtítulos `#8C8C8C`\n\n | Letra nascendo\n | `#1E5A2E`, que vira branco\n\n | Pílula\n | traço `#0C4A1D` › verde › `#9FD9AE`\n\n | Clarão da pílula\n | `#0F5A26` a 70% em 0,95–1,33 s\n\n | Chip apagado\n | fundo `#141414`, borda `#7A7A7A` de 2,5 px\n\n | Botão \"Go beyond\"\n | `#1E1E1E`\n\n | Moldura do estouro\n | traço `#196A32`\n\n## Fontes\n\n | \n\n | Fonte\n | Onde\n\n | DM Sans Bold\n | \"Purity of Motion.\" (438 px de largura), título, nomes dos avatares (30 px), \"More than just audio\" (536 px de largura) e \"Spotify\" (280 px de largura)\n\n | DM Sans SemiBold\n | nome das faixas (31 px), chips (40 px) e \"Its an experience\" (440 px de largura)\n\n | DM Sans Medium\n | \"Go beyond\" (21 px)\n\n | DM Sans Regular\n | parágrafo, subtítulos e artistas\n\n## Envelopes de texto (por letra)\n\n | \n\n | Função\n | Como anda\n\n | `eIn(t0, dt, d, 3)`\n | cada letra começa `dt` depois da anterior e vai de 100 a 0 em `d` com saída cúbica\n\n | `eOut(t0, dt, d, 2)`\n | o contrário, acelerando; com sinal alternado, as letras pares vão para um lado e as ímpares para o outro\n\n | `eInSinal`\n | a entrada do odômetro: letras alternando para cima e para baixo\n\n## Cena a cena\n\n | \n\n | Cena\n | Números\n\n | A · Logo\n | 160 px; cai de y 150 a 582 nos quadros 2–16, estica para 40 × 72% e achata para 114 × 99% no impacto, assenta em y 540 no quadro 46; desliza de x 538 a 308 nos quadros 12–54; Glow (raio 150, intensidade 0,5)\n\n | A · Frase\n | \"Purity of Motion.\" letra a letra, 1,7 quadro entre letras e 9 quadros cada, opacidade, desfoque 10 e cor verde-escura; anda junto com o logo\n\n | B · Pílula\n | traço de 4 px; 650×192 › 166×166 nos quadros 59–82; a frase só aparece dentro dela (track matte) e sai com desfoque horizontal\n\n | C · Avatares\n | 162 px; o do meio nasce do anel crescendo de 106 para 162 px (quadros 72–81); os outros em 1,29 e 1,44 s, subindo 20 px com desfoque 14 › 0; o grupo desce 33 px entre 1,25 e 1,88 s\n\n | D · Odômetro\n | \"Sound\" sai em 1,84 s e \"Imersion\" entra em 1,95 s: letras a 62 px na vertical, verdes e borradas, 2 quadros entre elas; os avatares caem 73 px com desfoque 16; o título vai para (194, 342) e cresce 106% até 2,62 s\n\n | E · Parágrafo\n | revela letra a letra desde 2,14 s (12 quadros cada, desfoque 8); o botão nasce em 2,40 s com escala 80 › 100% e desfoque 22 › 0\n\n | F · Lista\n | 4 faixas sobem 230 px, uma a cada 6 quadros, desde 3,12 s; a rolagem acelera com y = −1215·t² a partir de 3,05 s e uma camada de ajuste soma Directional Blur pela velocidade (até 50); a lista some em 3,55–3,86 s\n\n | G/H · Chips\n | \"All\" sobe 482 px em 3,80–4,07 s; corte seco em 4,09 s para a fileira All, Friends e Podcast; a fileira anda uns 8 px por quadro de 4,10 a 4,80 s e assenta em 5,06 s; a seleção passa de Friends para Podcast em 4,60–4,72 s\n\n | I · Estouro\n | Podcast encolhe para 70% em 5,13–5,23 s; um retângulo de traço vai de 175×72 a 1600×1260, com traço de 26 a 170 px e desfoque de 30 a 150 (5,16–5,58 s)\n\n | J/K · Frases\n | \"More than just audio\" entra a 116% e assenta em 100% em 5,40–5,75 s; sai letra a letra com desfoque horizontal 24 a partir de 5,98 s; \"Its an experience\" fecha o tracking de 70 a 0 em 28 quadros desde 6,16 s, sobe 40 px e some em 7,03–7,17 s\n\n | L · Marca\n | o logo volta de y 650 a 540 (7,20–7,42 s) e desliza de x 540 a 360 (7,36–7,98 s); \"Spotify\" sai de trás dele por uma máscara presa à borda do logo; fade para o preto em 8,25–8,55 s\n\n## Som\n\n | \n\n | Item\n | Valor\n\n | Música\n | nenhuma, como no original\n\n | Eventos\n | 39: viagem, pouso, letras (9), brilho, morph, pop (3), texto-sai (3), move, texto (2), pílula, sobe (3), card (2), rolagem, chicote, clique (2), encolhe, estoura, impacto, logo, revela e sai-tela\n\n | Efeitos\n | mapa padrão da Mesa, com seis trocas: whoosh curto com pico no pouso do logo, pop grave no pouso, whooshes baixos no morph, na saída de texto e no movimento, deslize curto na revelação da marca; impacto marcado em 5,30–5,6 s; fade final de 0,4 s\n\n | Medido\n | −14,1 LUFS, pico −1,1 dBFS; efeitos −12,9 LUFS\n\n## O que é \"humano\" neste vídeo\n\n- O layout nunca fica parado: desce, recentra ou deriva alguns pixels nas pausas.\n\n- As nuvens do fundo andam devagar o tempo todo.\n\n- O logo da abertura estica na queda e achata no impacto, com peso de verdade."
    },
    {
      "titulo": "A montagem no After Effects",
      "texto": "| \n\n | Arquivo\n | O que faz\n\n | `ae/cenas.jsx`\n | refaz a comp `RECRIACAO` a cada execução: apaga a anterior e a pasta `GERADO` e reaproveita os assets já importados. No topo ficam os textos (`TX`), as cores e as fontes. Ajudantes: `q(n)` (quadro n a 60 qps), `K` (chaves com influência ou hold), `T` (texto), `tamanho` (ajusta o corpo à largura medida no original), `ancora`, `anim` (animador de texto com Expression Selector) e os envelopes por letra `eIn`, `eOut` e `eInSinal`. As cenas vão de A a L, cada uma com os seus segundos; `ev(t, tipo)` grava o evento de som como marcador\n\n | `ae/spotify-hire-me.aep`\n | o resultado do script, pronto para abrir e renderizar\n\n | `ae/fazer_assets.py`\n | desenha com OpenCV os avatares (losango e silhuetas recortados em círculo, com anel claro) e as 7 capas (degradê, círculos desfocados e cantos de 40 px)\n\n | `audio/trilha.py`\n | lê `eventos.json`, coloca um efeito por evento pelo mapa padrão, troca seis tipos por efeitos escolhidos (queda do logo, pouso, morph, saída de texto, movimento e revelação da marca), marca o impacto do estouro em 5,30 s e mixa para −14 LUFS\n\n | `audio/eventos.json`\n | os tempos e tipos dos 39 eventos, copiados dos marcadores da comp\n\n- **Fonte:** instale a DM Sans (Google Fonts) em `C:\\Program Files\\Common Files\\Adobe\\Fonts` e reinicie o After Effects.\n\n- **Abrir:** `projeto/ae/spotify-hire-me.aep`. Se o AE pedir arquivos, aponte para `projeto/assets/`.\n\n- **Adaptar:** troque os textos em `TX` e as imagens em `assets/`, mantendo os nomes (ou rode `python ae/fazer_assets.py` para gerar outros avatares e capas; precisa de opencv-python e numpy). Rode File › Scripts › Run Script File › `cenas.jsx`; ele acha `assets/` uma pasta acima de `ae/`.\n\n- **Render:** fila do AE com a comp `RECRIACAO` em H.264, a 60 qps.\n\n- **Som:** no `audio/trilha.py`, troque o `sys.path` para a pasta `audio/mesa` e rode `python audio/trilha.py`. Sai `audio/mix.wav`; cole no vídeo com o ffmpeg (`-c:v copy -c:a aac -shortest`).\n\n**Pegadinhas:** duas chaves no mesmo quadro quebram a curva; o `K` empurra a segunda um quadro para frente. Sem a DM Sans, o `tamanho()` mede outra fonte e os textos mudam de largura. A largura das frases foi ajustada às do original; texto novo mais longo pede outro valor no `tamanho()`. O desfoque de movimento nativo não alcança o rastro da rolagem; ali entra uma camada de ajuste com Directional Blur proporcional à velocidade."
    },
    {
      "titulo": "As decisões de direção",
      "texto": "- **Cada cena nasce de uma peça da anterior.** A pílula vira o anel do avatar, a rolagem lança o chip, o chip estoura na moldura e o logo final puxa a palavra.\n\n- **Nada para.** Sempre há algo entrando enquanto outra peça sai; nas pausas, o layout desce ou recentra alguns pixels, e as nuvens derivam o tempo todo.\n\n- **A curva faz metade do caminho cedo.** Entradas de 13 a 18 quadros com saída rápida e chegada longa; quase nada quica, só a queda do logo, que passa 42 px e volta.\n\n- **A letra nasce na cor da marca.** Cada letra da frase surge verde-escura e borrada e termina branca.\n\n- **A troca de palavra é um odômetro.** As letras saem e entram na vertical, alternando para cima e para baixo, verdes e borradas, com 2 quadros entre elas.\n\n- **A rolagem é a transição.** A lista acelera até borrar e o chip \"All\" sobe na mesma direção, herdando a velocidade.\n\n- **O som chega um pouco antes.** O original foi criticado por efeitos atrasados; aqui o pico de cada efeito cai de 1 a 2 quadros antes do movimento.\n\n- **60 qps com desfoque de movimento**, para os chicotes e a rolagem ficarem lisos.\n\nDetalhes de cores, tempos e números: estilo.md. Cenas por tempo: roteiro.md. Para fazer a sua carta para outra marca: PROMPT.md."
    },
    {
      "titulo": "As versões até o final",
      "texto": "| \n\n | Versão\n | O que mudou\n\n | **v1**\n | recriação medida quadro a quadro a 60 qps; avatares e capas neutros no lugar das fotos de artistas e das capas reais do original; efeitos adiantados 1 a 2 quadros"
    }
  ],
  "pacote": [
    {
      "pasta": "projeto/",
      "conteudo": "`ae/cenas.jsx` (o gerador comentado), `ae/spotify-hire-me.aep` (o projeto montado), `ae/fazer_assets.py` (gera avatares e capas) e `assets/` (logo, 3 avatares e 7 capas)"
    },
    {
      "pasta": "audio/",
      "conteudo": "`trilha.py` (o som inteiro), `eventos.json` (os 39 eventos), `mix.wav`, `relatorio-som.json` e `mesa/`, com o motor de mix `mesa.py` e o `mapa_padrao.py`"
    },
    {
      "pasta": "referencias/",
      "conteudo": "`estudo-da-referencia.md` (o edit original quadro a quadro, medido a 60 qps, com receita), `links.md` e `fora-do-pacote.md`"
    },
    {
      "pasta": "render.mp4",
      "conteudo": "o vídeo final"
    },
    {
      "pasta": "ae/cenas.jsx",
      "conteudo": "refaz a comp `RECRIACAO` a cada execução: apaga a anterior e a pasta `GERADO` e reaproveita os assets já importados. No topo ficam os textos (`TX`), as cores e as fontes. Ajudantes: `q(n)` (quadro n a 60 qps), `K` (chaves com influência ou hold), `T` (texto), `tamanho` (ajusta o corpo à largura medida no original), `ancora`, `anim` (animador de texto com Expression Selector) e os envelopes por letra `eIn`, `eOut` e `eInSinal`. As cenas vão de A a L, cada uma com os seus segundos; `ev(t, tipo)` grava o evento de som como marcador"
    },
    {
      "pasta": "ae/spotify-hire-me.aep",
      "conteudo": "o resultado do script, pronto para abrir e renderizar"
    },
    {
      "pasta": "ae/fazer_assets.py",
      "conteudo": "desenha com OpenCV os avatares (losango e silhuetas recortados em círculo, com anel claro) e as 7 capas (degradê, círculos desfocados e cantos de 40 px)"
    },
    {
      "pasta": "audio/trilha.py",
      "conteudo": "lê `eventos.json`, coloca um efeito por evento pelo mapa padrão, troca seis tipos por efeitos escolhidos (queda do logo, pouso, morph, saída de texto, movimento e revelação da marca), marca o impacto do estouro em 5,30 s e mixa para −14 LUFS"
    },
    {
      "pasta": "audio/eventos.json",
      "conteudo": "os tempos e tipos dos 39 eventos, copiados dos marcadores da comp"
    }
  ],
  "prompt": "Quero uma \"carta de candidatura\" em motion no mesmo método do projeto \"spotify-candidatura\", que está em 07-videos/projetos/spotify-candidatura/: a identidade de uma marca contada sem cortes, cada cena nascendo de uma peça da anterior, a 60 qps e só com efeitos sonoros.\n\nMarca: {{MARCA}}\nSite oficial (para tirar logo, cores e fonte): {{SITE}}\nFrases da tela (4 a 6, curtas): {{FRASES}}\nElementos de interface da marca para usar (lista, chips, cards, player…): {{ELEMENTOS}}\nMeu nome ou @ (no avatar \"Você\" e, se quiser, no fim): {{PERFIL}}\n(Se algum desses estiver vazio ou com as chaves, me pergunte antes de começar.)\n\n1. Estude o projeto antes de propor qualquer coisa. Leia LEIA-ME.md, estilo.md e roteiro.md e abra projeto/ae/cenas.jsx: o bloco TX, os ajudantes q, K, T, tamanho, anim, os envelopes eIn, eOut e eInSinal, as cenas A a L e a função ev(), que grava cada evento de som como marcador. Me diga em poucas linhas o que vai reaproveitar.\n\n2. Tire a identidade da marca real: logo oficial, a cor de destaque do CSS ou do app, o fundo e a fonte (ou a gratuita mais próxima). Avatares e capas sem foto de pessoa nem capa real: gere com ae/fazer_assets.py ou desenhe.\n\n3. Escreva a sequência como transferências antes de animar: de qual peça nasce a próxima cena (pílula › avatar, rolagem › chip, chip › moldura, logo › palavra). Uma troca a cada 0,6 a 1,1 s. Me mostre a tabela tempo › cena › texto e espere meu ok.\n\n4. Construa copiando o projeto, sem editar o original. Mantenha os 60 qps, o desfoque de movimento, as entradas de 13 a 18 quadros com saída rápida e chegada longa, a letra que nasce na cor da marca e termina branca, a troca de palavra em odômetro e o fundo com nuvens que derivam. Só a primeira queda pode quicar.\n\n5. Nada pode parar: em cada pausa, algo entra enquanto outra peça sai, ou o layout desce e recentra alguns pixels.\n\n6. Som sem música: exporte os eventos dos marcadores para audio/eventos.json, faça o som pelo audio/trilha.py com um efeito por evento, o pico de 1 a 2 quadros antes do movimento, um único impacto forte no estouro e final em −14 LUFS.\n\n7. Antes do render, me mostre uma folha de contato com 12 quadros, incluindo o meio das trocas, e confira texto cortado, peça que surge do nada e trecho parado. Renderize a comp RECRIACAO em H.264 a 60 qps, cole o som com o ffmpeg e entregue o MP4 com uma anotação do que mudou.",
  "campos": [
    "ELEMENTOS",
    "FRASES",
    "MARCA",
    "PERFIL",
    "SITE"
  ],
  "fonte": {
    "nome": "Clube do Motion",
    "url": "https://clubedomotion.com/projeto/?id=spotify-candidatura",
    "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
  }
}