Abertura de podcast longa (cold open)
O visual é modelado nos intros longos de Greg Isenberg. O que o torna envolvente:
- Abra na fala mais forte, sem logotipo primeiro.
- Corte a cada 3–6 s.
- Faça aproximadamente a cada dois clipes um corte: o apresentador desliza para um cartão à esquerda enquanto um gráfico aparece à direita.
- Mantenha as legendas curtas: 1–3 palavras, com palavras-chave em laranja.
- Termine no título: um cartão que mostra o que está por vir.
O pipeline é pipeline/build_episode.py, controlado por work/<ep>/episode.json → intro. A renderização usa a composição Remotion IntroV2 (pipeline/remotion/src/IntroV2.tsx); os gráficos vêm de Graphics.tsx.
1. Extraia clipes do episódio (8–10 candidatos, mantenha 7–9)
- Leia o transcript (
work/<ep>/words-*.json, ou o.txtdo Descript) e liste falas que se sustentam sozinhas em menos de 6 s. - Em ordem de preferência:
- Um número concreto: "pagam 27% dos funcionários para sair", "retenção de receita de 900%".
- Uma afirmação ousada ou previsão: "tokens vão se infiltrar em tudo".
- Uma confissão ou dor identificável: "Estou tão cansado de pagar assinaturas".
- Uma reação engraçada ou emocional: "Eu estaria maximizando tokens".
- Um fechamento citável: "não dá para colocar preço na superinteligência".
- Distribua entre tópicos: aproximadamente um clipe por capítulo, ambos os hosts representados, pelo menos uma risada.
- Ordene o resumo:
- Clipe 1 é o gancho mais forte, geralmente um número ou afirmação.
- Alterne apresentadores e energia.
- Coloque a fala mais citável por último, antes do cartão de título.
- Pule:
- falas que precisam de contexto ("como eu disse", "esse gráfico");
- falas com mais de ~6 s;
- falas com sobreposição de vozes.
- Palavrões: mantenha apenas se o usuário estiver de acordo com uma introdução explícita, e informe isso no relatório.
2. Configure episode.json → intro
"title": "FRINGE LINES",
"subtitle": "October 30, 2026",
"intro": {
"style": "v2",
"title": "Fringe Lines",
"title_seconds": 4.5,
"topics": ["The Morning Loop", "Microsoft headcount", "Build vs. buy", "Token limits", "Google vs. AI mode", "Anthropic's S-1", "AI spend"],
"emphasis": ["27%", "leave", "900%", "retention", "sql", "agents", "tokens", "everything", "maxing"],
"clips": [
{"say": "microsoft just offered", "until": "employees to leave", "tag": "AI & jobs", "replace": {"27": "27%"},
"graphic_on": "27%", "graphic": {"type": "stat", "kicker": "Microsoft buyout offer", "value": 27, "suffix": "%", "label": "of employees offered a payout to *leave*"}},
{"say": "tokens are going to seep", "until": "like the internet", "tag": "Tokens everywhere"}
]
}
say/until: as primeiras e últimas palavras faladas do clipe, correspondidas sem sensibilidade a maiúsculas e pontuação. A correspondência é a primeira ocorrência no episódio, então tornesaydistintivo (3–5 palavras). Se o outro apresentador falar por cima, o correspondente tenta novamente usando apenas as palavras de um apresentador.pre: segundos opcionais de introdução antes desay.tag: o rótulo do tópico mostrado no canto superior esquerdo com seu número. Use 1–3 palavras.replace: correções de legenda, por exemplo, números, "sequel"→"SQL", ou"a": ""para ocultar uma palavra.graphic+graphic_on: o corte de gráfico aparece cerca de 150 ms antes da palavra faladagraphic_on.graphic_offopcional (uma palavra posterior) retorna ao quadro completo.- Sem
graphic_off, o corte se mantém até o final do clipe.
- Número de cortes: adicione cortes a 3–5 clipes. Escolha aqueles com um número, uma empresa ou produto nomeado, ou uma fala citável. Deixe clipes de reação e risada em quadro completo.
- Tipos de gráfico (mesmo dos shorts editoriais):
stat: um número contável com kicker e rótulo;people: uma grade de ícones;lines: linhas de tendência esquemáticas;quote: um cartão de tinta;headline: um cartão estilo notícia com um destaque;list: linhas numeradas.- Use
*palavra*para itálico laranja.
- Honestidade: os números na tela devem ser os que foram ditos. Gráficos são esquemáticos, nunca dados inventados.
topics: 5–7 nomes curtos de capítulos para o cartão de título, na ordem do episódio.emphasis: 12–25 palavras-chave destacadas em laranja nas legendas: números, nomes, palavras de impacto.title_seconds: 4–5 s. O cartão de título é "Fringe Lines" em serifa com a última palavra em itálico laranja, a data e uma lista "Neste episódio".
3. Verifique o plano antes de renderizar
~/.shorts-skill/bin/python pipeline/build_episode.py --ep <ep> --stage plan
- Ele imprime a tag, duração e texto da legenda de cada clipe de introdução.
- Corrija qualquer
WARN intro clip not found: ajuste a redação desay/untilpara corresponder exatamente ao transcript. - Duração alvo: clipes de 35–50 s mais um título de 4.5 s. Remova ou encurte clipes com mais de 6 s.
- Leia cada linha de legenda em busca de palavras mal interpretadas e adicione correções em
replace.
4. Renderize
~/.shorts-skill/bin/python pipeline/build_episode.py --ep <ep> --stage graphics # intro clips + IntroV2 + lower-thirds
~/.shorts-skill/bin/python pipeline/build_episode.py --ep <ep> --stage final # join intro + body, chapters, loudness
- Adicione
--blura ambos os comandos para a versão com fundo desfocado. Ela precisa das câmeras desfocadas em~/.cache/fringe-lines-video/blur/(vejapipeline/bg_blur.py) e escreve<ep>-fringe-lines-blur.mp4a partir de um cache separado. - O corpo não precisa ser re-renderizado para alterações na introdução.
- O arquivo de capítulos é regenerado, então todos os timestamps mudam com a duração da introdução.
- Efeitos sonoros (whoosh, pop, whoosh longo até o título) são gerados na pasta de gráficos e mixados pelo Remotion.
5. QA
F=out/episode/<ep>-fringe-lines.mp4
ffmpeg -v error -y -i $F -t 50 -vf "fps=1,scale=320:-1,tile=8x7" -frames:v 1 /tmp/intro.png
Verifique:
- Cada cartão de corte de gráfico está totalmente na tela, seus números correspondem ao que foi dito e não há
*solto. - As legendas mostram palavras-chave em laranja e nenhuma legenda sobrepõe a borda inferior do cartão do apresentador.
- O cartão de título lista todos os tópicos em ordem.
- As durações de vídeo e áudio correspondem (
ffprobe -show_entries stream=codec_type,duration). - O episódio está em cerca de −15.5 LUFS.
- O arquivo de capítulos começa com "00:00 Cold open", depois a duração da introdução, depois "Catching up".
Relate ao usuário:
- a lista de clipes (tag + fala);
- quais clipes têm cortes de gráfico;
- a duração da introdução;
- qualquer linguagem explícita;
- quaisquer números para verificar.