editorial-short

Cria um vertical curto no estilo 'editorial' (fundo de papel, apresentador que se transforma entre tela cheia / cartão / PiP redondo, gráficos explicativos, legendas serifadas palavra por palavra, gancho + cartão final, efeitos sonoros). Use quando for solicitado a criar, reestilizar ou corrigir um curto a partir de um episódio.

O que é editorial-short?

Este skill automatiza a criação de vídeos verticais curtos no estilo 'editorial', inspirado nos shorts de Greg Isenberg. Ele foca em manter um ritmo visual dinâmico: nunca exibe um rosto falando por mais de ~6 segundos, alterna gráficos a cada 3–5 segundos e exibe legendas palavra por palavra com palavras-chave em itálico laranja. O skill é compatível com plataformas como Claude Code e Cursor, e depende de um pipeline local que inclui transcrição de episódios, edição de áudio (remoção de vícios de linguagem), renderização com Remotion e aplicação de estilos visuais. Para usá-lo, o usuário seleciona um trecho de 30–50 segundos de um episódio, define um roteiro visual (spec) em JSON — especificando gancho, transições de cena, tipos de gráfico (estatística, pessoas, linhas, citação, manchete, lista) e cartão final — e então executa o script de renderização. O resultado é um vídeo no formato curto vertical, com gráficos sincronizados com a fala, mixagem de som profissional (LUFS -14) e efeitos sonoros sintetizados. O skill também inclui etapas obrigatórias de controle de qualidade para verificar posicionamento de legendas, legibilidade do gancho e centralização do PiP.

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

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Short editorial (Fringe Lines)

O visual é modelado nos shorts de Greg Isenberg. Mantenha todo short de acordo com:

  • Nunca exiba um rosto falando por mais de ~6 s.
  • Um gráfico ou mudança de layout ocorre a cada 3–5 s.
  • Legendas aparecem palavra por palavra, com algumas palavras-chave em itálico laranja.
  • Os gráficos acompanham o que está sendo dito, então um gráfico aparece na palavra que ilustra.

0. Pré‑requisitos (por máquina)

  • pipeline/setup.sh instala o venv ~/.shorts-skill e os node_modules do Remotion em ~/.cache/fringe-lines-video.
  • As transcrições dos episódios devem existir: work/<ep>/words-quinn.json e words-doom.json (do pipeline/transcribe_verbatim.py).
  • Código‑fonte do Remotion: pipeline/remotion/src/ShortV2.tsx (layout) e Graphics.tsx (tipos de gráfico).

1. Escolha o momento (30–50 s)

  • Pesquise nos arquivos de palavras por um trecho autocontido que tenha:
    • uma frase de abertura forte (afirmação, número ou confissão);
    • uma ideia;
    • um desfecho ou piada perto do final.
  • Bons sinais:
    • números concretos (porcentagens, valores em dólar, quantidade de pessoas);
    • empresas ou produtos nomeados;
    • uma opinião contrária;
    • um experimento pessoal ("Deixei o Codex…").
  • Evite trechos que dependam de contexto anterior ("como eu disse", "aquela coisa").
  • Vários --ranges podem ser costurados. Corte no final das frases e verifique se a emenda não repete palavras.

2. Corte o trecho

Adicione uma linha em work/<ep>/shorts.sh e execute‑a:

b --name short-NN --range START:END [--range ...] --replace "27=>27%" --replace "claude=>Claude"
  • build_short.py faz o seguinte:
    • remove vícios de linguagem, gaguejos e pausas longas;
    • escolhe a câmera ativa;
    • escreve work/<ep>/short-NN/clip.mp4 e props.json;
    • renderiza a versão simples v1 do short.
  • --replace corrige o texto da legenda. Um lado direito vazio oculta aquela palavra.
    • Sempre corrija: números ("27"→"27%"), nomes de produtos (Claude, Codex, Descript, GTM, SQL) e erros de transcrição do Whisper.
  • Para obter os timings exatos de saída ao escrever o spec, imprima‑os: python3 -c "import json;p=json.load(open('work/<ep>/short-NN/props.json'));print(' '.join(f\"{w['text']}@{w['startMs']/1000:.1f}\" for w in p['words']))"

3. Escreva o spec de estilo: work/<ep>/short-NN/style.json

{
  "hook":  {"text": "Microsoft quer que *27%* de sua equipe peça demissão", "end": 2.8},
  "outro": {"text": "Crescer *sem* aumentar o *quadro*", "hold": 2.0},
  "emphasis": ["microsoft", "27%", "sair"],
  "scenes": [
    {"at": 0.0,  "mode": "full"},
    {"at": 3.0,  "mode": "graphic", "graphic": {"type": "stat", "kicker": "Oferta de saída da Microsoft", "value": 27, "suffix": "%", "label": "dos funcionários receberam oferta para *sair*"}},
    {"at": 6.2,  "mode": "card"}
  ]
}

Os tempos estão em segundos no clipe cortado, obtidos a partir dos timings de palavras na etapa 2.

Regras para manter a consistência:

  • Estrutura:
    • A cena 0 é sempre full, com um hook de 4–8 palavras que termina em ~2,5–3 s.
    • Diga a afirmação; não resuma o clipe.
  • Ritmo:
    • Alterne modos como full → graphic → card → graphic → card … com 3–6 gráficos em um short de 40 s.
    • Use full novamente para uma reação ou risada impactante na segunda metade.
  • Tempo:
    • Inicie cada gráfico 0,1–0,3 s antes da palavra que ele ilustra e mantenha‑o por 2,5–5 s.
    • Dois gráficos podem se seguir diretamente, por exemplo, um cartão de $20 e depois um de $100.
  • Ênfase: escolha 10–18 palavras‑chave: números, nomes e as palavras do desfecho. A correspondência é em letras minúsculas, ignorando pontuação.
  • Acentos: em qualquer campo de texto, *palavra* renderiza itálico laranja. Use um ou dois por string.
  • Outro: um cartão final de 2 s com uma frase curta que reafirme a conclusão, ou uma pergunta ao espectador.
  • Honestidade:
    • Números na tela devem corresponder ao que foi dito no programa.
    • Gráficos são esquemáticos: use lines com formas, nunca eixos ou valores inventados.
    • Use "aproximadamente" ou "~" quando o apresentador o fizer.

Tipos de gráfico (Graphics.tsx):

tipocamposuso para
statkicker, prefix, value (número, conta crescente), decimals, suffix, labelum número de destaque
peoplekicker, value (string), label, filled (0–1)número de pessoas / participação
lineskicker, series: [{label, shape: up|flat|down}], captiontendência vs. tendência
quotetext, by?a frase de efeito, dita na tela
headlinesource, title, highlightnotícias, anúncios, um "veredito"
listtitle, items[]etapas, produtos, o que deu errado

Se um novo tipo de gráfico for necessário, adicione‑o a Graphics.tsx e ao seu tipo união. Mantenha o estilo do cartão: cartão branco ou tinta, raio de 36px, entrada com mola e uma animação que executa a partir do quadro local f.

4. Renderize

~/.shorts-skill/bin/python pipeline/style_short.py --ep <ep> --name short-NN --spec work/<ep>/short-NN/style.json
  • O rastreamento facial (pipeline/face_track.py, YuNet) é calculado uma vez e armazenado em cache em short-NN/faces.json. Ele mantém o PiP redondo e o cartão centralizados no rosto; exclua o arquivo se o clipe for recortado novamente.
  • Os efeitos sonoros são sintetizados: um whoosh em cada mudança de cena e um pop quando um gráfico aparece. Eles são mixados a --sfx-db -20.
  • Loudness: −14 LUFS.
  • Saída: out/shorts/<ep>-short-NN-v2.mp4.

5. QA (sempre, antes de relatar)

Extraia quadros e examine‑os:

for t in 1.5 5 10 15 20 25 30 35 40; do ffmpeg -v error -y -ss $t -i out/shorts/<ep>-short-NN-v2.mp4 -frames:v 1 -vf scale=270:-1 /tmp/q_$t.png; done

Verifique cada um destes itens:

  • Gancho: legível e sem cobrir o rosto.
  • Gráficos: não sobrepõem o bloco de legendas, que fica em y≈1340–1600. Nenhum texto transborda do cartão. Valores de estatísticas longos como "+$500K" encolhem automaticamente.
  • PiP: o rosto está centralizado no círculo.
  • Legendas: sem * soltos; palavras‑chave renderizam em laranja.
  • Loudness: ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:" exibe aproximadamente −14.

Relate ao usuário:

  • Sobre o que é o short e sua duração.
  • Quaisquer números para verificar.
  • Se há alguma linguagem explícita mantida.

Individual skills in this repo

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

carousel

Make a Fringe Lines image carousel (Instagram/LinkedIn, 1080x1350 PNG slides + PDF) — photo slides with big condensed caps headlines and accent words, large-type text-only slides, chart/screenshot slides, explainer-graphic slides and a follow CTA. Use when asked for a carousel, slide post, or "swipe" post from an episode or a topic.

engaging-monologue

Make a 16:9 FringeLines "engaging monologue" video from a solo talking-head take — jump cuts with punch-ins, the speaker shrinking into a portrait picture-in-picture while serif kinetic text, diagrams (pyramid stack, compare, roadmap, steps, big stat) and b-roll cards build on a paper canvas, plus callout cards, lower thirds, chips, a CTA pill and a green end card, all synced word by word to the speech. Use for YouTube explainers, solo commentary, newsletter-to-video and "one idea, told well" pieces.

infographic

Make a single-image editorial infographic (1080x1350) that explains one idea at a glance — two-tone headline, one-sentence dek, a hero visual with 2–4 numbered callouts and leader lines, an optional side note, a three-column "why it matters" row with icons, byline and sources. Use for "explain X in one graphic" posts about a company move, a framework, an architecture or a trend; the PNG can also be a carousel slide.

podcast-intro

Build the cold open for a long-form Fringe Lines episode — a 35–60 s highlight reel of the episode's best lines with explainer-graphic cutaways, keyword captions, whip transitions + SFX, ending on a title card with the topic list. Use when making or revising the intro of a full episode.

Habilidades Relacionadas