Communitygithub.com

monólogo envolvente

Crie um vídeo 16:9 no estilo 'monólogo envolvente' do FringeLines a partir de uma gravação solo — cortes com zoom, o apresentador reduzido a picture-in-picture, texto serifado cinético, diagramas (pirâmide, comparação, roadmap, etapas, estatísticas), cartões de b-roll, chamadas, barras inferiores e cartão final verde, tudo sincronizado palavra por palavra com a fala. Ideal para vídeos explicativos no YouTube, comentários solo, newsletter-para-vídeo e peças 'uma ideia, bem contada'.

O que é monólogo envolvente?

Monólogo Envolvente é uma habilidade especializada para agentes de IA (como Claude Code e Cursor) que transforma gravações de câmera única 16:9 em vídeos de alta qualidade no estilo 'monólogo envolvente' do FringeLines. A habilidade automatiza a pós-produção: cortes com zoom, transições animadas, sincronização palavra por palavra de texto cinético com a fala, e a criação de diagramas como pirâmides, roadmaps e estatísticas. Ela é dividida em duas etapas principais, 'cut' (corte) e 'render' (renderização), e funciona em um pipeline baseado em Remotion. O usuário fornece um arquivo de vídeo e um arquivo JSON com os beats, que define o roteiro visual e as transições. O sistema cuida da transcrição, remoção de pausas e vícios de linguagem, e sincronização precisa dos elementos visuais com o áudio, resultando em um vídeo final com qualidade profissional. É especialmente útil para criadores de conteúdo no YouTube que desejam produzir vídeos explicativos e de comentário com um visual consistente e envolvente, sem precisar editar manualmente cada detalhe.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qdevery/fringe-lines-video/tree/main/.agents/skills/engaging-monologue

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Monólogo envolvente (16:9)

Referência: Ali Abdaal, "How I'd Create Content in 2026 (If I Had To Start Over)" (youtu.be/A8PxRHQrLJ8, 16 min, 1080p). A linguagem de movimento é copiada desse vídeo. O visual é do kit FringeLines v2.1: My Drive/FringeLines Design System files/Fringe Lines Design system v2_1/ e os tokens em …/handoff/fringelines-tokens.css.

O que torna a referência eficaz

Medido a partir do vídeo a 1 quadro a cada 2 s, além de amostras densas perto das transições.

  • Cerca de 55% de cabeça falante pura. Uma câmera fixa, plano médio. Cortes a cada ~5 s (mediana): cerca de 122 cortes em 16 min. Cada corte alterna entre aberto e com zoom, parecendo intencional.
  • Dois layouts, nunca mais:
    1. Orador em tela cheia com elementos sobrepostos: barras inferiores com nome, cartão de chamada colorido no canto superior esquerdo com uma pílula de etiqueta, frases serifadas brancas na parte inferior, chips coloridos perto da cabeça e uma pílula de CTA/patrocínio no centro inferior.
    2. Tela de papel. O orador é reduzido a um PiP retrato (cantos arredondados, moldura branca, lado direito, cerca de 400×560) enquanto um gráfico é construído sobre uma página off-white quente com um leve swoosh. A tela contém frases cinéticas, cartões numerados de roadmap, diagramas em pílula, pirâmides e capturas de tela ou b-roll em cartões arredondados com uma legenda abaixo.
  • Sem legendas contínuas. O texto na tela é escolhido. Uma frase de cada vez, revelada palavra por palavra em sincronia com a fala. Cada palavra começa fraca e desfocada, depois se torna nítida. A frase-chave muda de cor.
  • Diagramas são construídos peça por peça à medida que cada item é dito. Pílulas aparecem com um pequeno overshoot. Camadas de pirâmide caem de cima.
  • A câmera se move dentro dos gráficos. O roadmap de 5 cartões retorna a cada capítulo, amplia o cartão ativo e desfoca os outros.
  • Saídas desfocam em vez de cortar. A transição tela cheia↔PiP é uma morph rápida e suave de cerca de 0,4 s.
  • Ritmo: uma nova ideia visual a cada 10–20 s, um momento de ênfase (preto e branco) por seção e uma barra inferior na primeira aparição de cada pessoa.
  • Som: whooshes suaves nas mudanças de layout e pops leves quando os itens chegam, sempre abaixo da voz.

Como mapear para o FringeLines (não se desvie disso)

ReferênciaVersão FringeLines
Serifa quente com destaques coralInstrument Serif para todo texto de exibição. O destaque é uma frase em itálico, azul-tinta #1A4F6B sobre papel ou branco sobre vídeo. Laranja #D4622A apenas para o número que importa ([7 AM], a estatística).
Sem arredondada em pílulasArchivo 500–600 para pílulas, chips, itens de lista, rótulos de pilha
Rótulos em versaleteIBM Plex Mono 600, maiúsculo, +0,14em, ≥ 22 px: sobrancelhas, pílulas de etiqueta, fontes, meta
Chamadas com gradiente coral/vermelhoGradientes do kit: verde (padrão), azul (segunda ideia), laranja (aviso ou "erro")
Cartões pastel de roadmapLavagens verde, azul e laranja, um crachá numérico mono e um conector laranja tracejado
Papel creme + swooshPapel #F7F7F5 com um leve swoosh verde
SombrasNenhuma. Superfícies planas, traços de 2 px #E3E5DF, uma moldura branca no PiP, raio 16–18
Pílula de patrocínioPílula CTA branca (fringelines.co / newsletter) com uma aba laranja mono "Link na descrição"
Outro do canalCartão final verde, a capa do Clip Slides: sobrancelha mono, linha laranja, título serifado com uma frase em itálico, subtítulo Archivo, ● fringelines.co

As regras do kit ainda se aplicam:

  • uma ideia por tela;
  • um laranja por tela;
  • verde é o padrão, azul a comparação;
  • toda estatística tem uma source;
  • nada abaixo de 22 px.

Peças

  • Template: pipeline/remotion/src/Monologue.tsx, a composição Monologue em 1920×1080 / 30 fps. Reutiliza o rastreamento facial de ShortV2.tsx.
  • Build: pipeline/build_monologue.py, que tem duas etapas, cut e render.
  • Pasta de trabalho: work/monologue/<slug>/ contém clip.mp4, props.json, transcript.txt, beats.json e faces.json.
  • Saída: out/monologue/<slug>.mp4, normalizado para −14 LUFS.
  • Exemplo trabalhado: work/monologue/morning-loop-test/beats.json, um clipe de 62 s de Quinn do episódio de 30 de outubro.

1. Obter uma gravação

Uma gravação 16:9 com uma única câmera, áudio bom, uma pessoa, aproximadamente 1–15 min. Coloque em inbox/monologue/<slug>/take.mp4.

Para extrair um trecho solo de um episódio, multiplexe a câmera com a trilha de som de estúdio. Pegue os offsets do XML do Descript com build_short.xml_offsets; veja como morning-loop-test foi feito:

ffmpeg -ss <t0-videoOffset> -t <dur> -i Quinn.mp4 -ss <t0-audioOffset> -t <dur> -i studio-sound-Quinn.m4a -map 0:v -map 1:a … take.mp4

2. Cortar

~/.shorts-skill/bin/python pipeline/build_monologue.py cut --slug <slug> --src inbox/monologue/<slug>/take.mp4 \
    [--range 12.0:95.5 --range 120:180] [--replace "gtm=>GTM" --replace "quick=>Quick"]

O que a etapa de corte faz:

  1. Transcreve a gravação com Whisper (armazenado em cache em words-src.json).
  2. Remove vícios de linguagem, gaguejos e pausas longas, usando o mesmo planejador dos shorts.
  3. Alterna o zoom (1.0 / 1.12, centrado no rosto) a cada corte.
  4. Escreve transcript.txt, com word@seconds no relógio cortado.

--replace apenas corrige as palavras usadas para temporizar as revelações; nada é legendado automaticamente.

3. Escrever work/monologue/<slug>/beats.json

Leia transcript.txt e planeje os beats contra ele.

{"brand": "FringeLines", "beats": [
  {"type": "title",   "at": 0.2,  "end": 2.0,  "eyebrow": "FringeLines · Monologue", "text": "The *morning loop*"},
  {"type": "name",    "at": 2.1,  "end": 5.4,  "text": "Quinn", "role": "Host · Fringe Lines"},
  {"type": "chips",   "at": 3.0,  "end": 7.4,  "items": [{"text": "GTM loops", "at": 3.1}, {"text": "Coding loops", "at": 5.1, "tone": "blue"}]},
  {"type": "text",    "at": 7.6,  "end": 11.3, "eyebrow": "What's a loop?", "text": "Loop's just a *stated goal* and then it works *autonomously*"},
  {"type": "callout", "at": 11.5, "end": 16.2, "label": "The setup", "tone": "green", "text": "I use Quick Desktop with routines that execute at any time"},
  {"type": "overlay", "at": 16.4, "end": 18.3, "text": "I usually run it at [7 AM]"},
  {"type": "stack",   "at": 22.4, "end": 36.4, "title": "My core team · 4 people", "items": [{"text": "Account executive", "at": 25.6}, "…"]},
  {"type": "stat",    "at": 51.2, "end": 55.1, "kicker": "My regular account team", "value": 14, "text": "people I'm interacting with on a regular basis", "source": "Quinn's own count · Fringe Lines, Oct 30 2026"},
  {"type": "end",     "at": 58.4, "end": 61.4, "text": "Building the *morning loop*", "sub": "The full walkthrough is in this week's episode."}
]}

Tempos

  • Os tempos estão em segundos no clipe cortado. end (ou hold) encerra um beat, e sua saída desfoca ao longo de 0,3 s.
  • O texto é revelado palavra por palavra em sincronia com a fala. Cada palavra em text é combinada com a transcrição dentro da janela do beat.
    • Cite o orador literalmente (pequenos ajustes são aceitáveis) para que a sincronia funcione.
    • Se o texto for uma paráfrase, a revelação recai para uma distribuição uniforme. Force isso com "reveal": "even".
  • Os tempos dos itens (at) padrão distribuem-se uniformemente. Defina-os para o momento em que cada item é dito, cerca de 0,1 s antes da palavra.

Marcação

  • *destaque em itálico*: uma frase por tela.
  • [número de destaque]: laranja, um por tela, apenas números.

Tipos de beat

Orador em tela cheia (sobreposições):

tipocamposuso
titletext, eyebrow?Título de abertura sobre um quadro escurecido (primeiros 2–3 s)
nametext, role?Barra inferior na primeira aparição de uma pessoa
overlaytextUma frase falada em serifa branca na parte inferior: a linha que você quer que seja lembrada
callouttext, label?, tone?, side?Cartão colorido no canto superior esquerdo (ou direito) com uma pílula de etiqueta mono: "Erro #1", "A configuração", "Regra"
chipsitems[{text, at, tone?}], side?, tone?2–3 tags curtas aparecendo ao lado da cabeça: voz interior, nomes, opções
ctatext, sub?Pílula inferior: a newsletter, o episódio ou a oferta. Uma vez, geralmente no meio do vídeo
bw(nenhum)Ênfase em preto e branco no orador; combine com um overlay
media + "full": truesrc, video?, from?B-roll em tela cheia com o orador no PiP

Tela de papel (o orador se move para o PiP):

tipocamposuso
texttext, eyebrow?, align?Uma frase cinética: definições, a tese, a linha "mais importante…"
stackitems[{text, at, tone?}] (de baixo para cima), title?Pirâmide ou camadas: fundamentos → estratégia → resultado, camadas de equipe
comparetitle?, left{label, items}, right{label, items}, winner?A vs B: hobby vs receita, antes vs depois. O perdedoro se torna cinza perto do final
roadmapitems[{text}] (≤6), active?, zoom?Os capítulos do vídeo. Mostre uma vez no início e reutilize por capítulo com active = índice do capítulo e zoom = quando ampliar
stepsitems[{text, at}], title?Uma lista numerada com linhas finas: especialistas, ferramentas, etapas
statvalue, prefix?, suffix?, decimals?, kicker?, text, sourceUm número contando em laranja; fonte (source) obrigatória
mediasrc, title?, meta?, video?, from?Uma captura de tela ou b-roll em um cartão arredondado com legenda (título + linha mono meta). Os arquivos vão para a pasta de trabalho
endtext, eyebrow?, sub?, url?, tone?O cartão final verde (2–4 s)

Beats de papel com menos de 0,7 s de diferença permanecem no layout PiP, para que o orador não oscile.

Regras de ritmo (da referência)

  • Abra com um title e um name, ambos nos primeiros 5 s.
  • Beats de papel ocupam 35–45% do tempo de execução. Nunca fique mais de ~20 s sem uma mudança visual e nunca permaneça no papel por mais de ~15 s.
  • Alterne os dois layouts. Não coloque dois callout consecutivos; coloque um text ou um diagrama entre eles.
  • Uma ideia por beat. Mantenha beats text com ≤ 14 palavras e callouts com ≤ 16.
  • Itens de diagrama devem chegar na palavra, nunca todos de uma vez. O primeiro item de um diagrama deve chegar dentro de ~1 s do início do beat; caso contrário, o beat começa mais tarde.
  • Seções:
    • Mostre um roadmap no final da introdução.
    • Reutilize-o no início de cada seção com active definido.
    • Feche cada seção com um overlay de sua linha-chave, com bw para a maior delas.
  • No máximo um cta a cada 5 min, nunca nos primeiros 30 s.
  • Termine no cartão end. Ele pode continuar após a última palavra.

Honestidade

  • Números na tela devem ser o que foi dito ou vir de uma fonte nomeada em source.
  • Capturas de tela de conteúdo de outras pessoas precisam de crédito em meta.
  • Não coloque palavras na boca do orador: um beat overlay ou text que não seja uma citação deve funcionar como um rótulo, não como fala.

4. Renderizar

~/.shorts-skill/bin/python pipeline/build_monologue.py render --slug <slug> [--sfx-db -22]
  • Ele rastreia o rosto uma vez (faces.json; exclua se você recortar novamente).
  • O tempo de renderização cresce com a duração do vídeo; um teste de 1 minuto levou alguns minutos no Mac mini.
  • Efeitos sonoros: um whoosh em cada mudança de layout, um pop quando um item chega, um crescendo no título e nos cartões finais. Aumente --sfx-db para −18 para mais energia.

5. QA (sempre)

for t in 1.5 5 10 20 30 40 50 60; do ffmpeg -v error -y -ss $t -i out/monologue/<slug>.mp4 -frames:v 1 -vf scale=640:-1 /tmp/m_$t.png; done

Verifique cada um destes itens:

  • Texto: nenhum texto passa por baixo do PiP (a área de papel termina em x = 1320). Rótulos de pilha cabem em uma linha.
  • Destaques: nenhum * ou [ solto. Há no máximo um laranja por tela.
  • Enquadramento do rosto: o rosto está centralizado no PiP e os zooms não cortam a cabeça.
  • Tempo das revelações: as revelações chegam na palavra falada. Se um beat mostrar palavras fracas por muito tempo, seu at está muito cedo.
  • Loudness: ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:" lê cerca de −14.

Relate ao usuário:

  • o tempo de execução e a lista de beats (tempo → tipo → texto);
  • o que ainda precisa ser verificado: números, nomes e créditos de capturas de tela;
  • qualquer beat que tenha caído para uma revelação uniforme, porque seu texto não era literal.

Ainda não construído

  • Uma versão 9:16: a composição é apenas 16:9. Para vertical, corte um short com a habilidade editorial-short.
  • Planejamento automático: escrever beats.json é uma questão de julgamento, por isso é feito manualmente ou pelo Claude a partir de transcript.txt.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Habilidades Relacionadas