---
name: reel-g1-fake
description: "Reel satirico de noticia falsa estilo Portal G1 com waveform animado, legendas karaoke e mix sidechain."
version: "1.0.0"
license: MIT
author: Junior Maia (@ojunior.maia)
---

## Quickstart pra quem nunca abriu terminal

Voce nao precisa saber programar. O Claude Code faz tudo por voce: instala dependencias, processa o audio, gera legendas, mixa, renderiza. Voce so manda audio + 2 fotos + responde algumas perguntas.

**Passo 1: Instale o Claude Code**
- Site: https://claude.com/claude-code
- Disponivel pra Mac, Windows e Linux
- Cria uma conta Anthropic se ainda nao tem (precisa de cartao, modelo grande consome creditos)

**Passo 2: Instale esta skill**

Abra o terminal/PowerShell que o Claude Code recomendar (no Mac: app "Terminal"; no Windows: "PowerShell"). Cole esses comandos um por linha:

macOS / Linux:
```bash
mkdir -p ~/.claude/skills/reel-g1-fake
cd ~/.claude/skills/reel-g1-fake
curl -L https://gist.github.com/administrador-ai-gita/539fa1ec487e9aad4eacf72093617456/archive/HEAD.zip -o skill.zip
unzip -j skill.zip && rm skill.zip
```

Windows (PowerShell):
```powershell
$dest = "$env:USERPROFILE\.claude\skills\reel-g1-fake"
New-Item -ItemType Directory -Path $dest -Force | Out-Null
Set-Location $dest
Invoke-WebRequest "https://gist.github.com/administrador-ai-gita/539fa1ec487e9aad4eacf72093617456/archive/HEAD.zip" -OutFile skill.zip
Expand-Archive skill.zip -DestinationPath . -Force
Get-ChildItem -Recurse -File | Move-Item -Destination . -Force
Remove-Item skill.zip, *HEAD
```

**Passo 3: Prepare seus inputs**

Crie uma pasta em qualquer lugar do computador (ex: Desktop > "meu-reel") e bote dentro:
- `audio.m4a` (ou .mp3 / .wav): grave no app Gravador de Voz do celular falando o roteiro
- `foto1.jpg`: sua foto (selfie ou foto que voce ja tem)
- `foto2.jpg`: foto publica da pessoa-alvo (baixe do Google, da noticia que ja circulou)

**Passo 4: Abra o Claude Code nessa pasta e cole**

```
Siga a skill reel-g1-fake pra produzir meu reel. Os inputs estao na pasta inputs/ desta pasta.
```

O Claude vai checar o que falta instalar, pedir confirmacao pra instalar, perguntar a manchete que voce quer, qual o momento que voce vira "brincadeira a parte" no audio, e renderizar tudo. Em 5-15 minutos voce tem o MP4 final pronto pra subir no Instagram.

Se algo travar, cole o erro no chat do Claude que ele te ajuda a destravar.

---

## O que essa skill faz

Produz um reel vertical 1080x1920 no formato "portal de noticia falsa" (G1 fake). A peca tem:

- Frame estatico com manchete serif, pill "AUDIO VAZADO", 2 cards de pessoas e microfone vermelho central
- Waveform animada reagindo ao audio (em volta do microfone e debaixo dos cards)
- Ripples vermelhos pulsando ao redor do microfone
- Legenda karaoke (palavra ativa em vermelho) que muda visualmente quando a peca vira do humor pro serio
- Mix com sidechain ducking (trilha de plantao policial abaixa quando voce fala)

Stack: ffmpeg + whisper-cli + yt-dlp + Node/Remotion. Funciona em macOS, Linux e Windows.

## Pre-requisitos

A skill auto-instala se faltar algo. Voce so precisa de:
- macOS, Linux ou Windows
- Conexao de internet (modelo whisper baixa 462MB na primeira vez)
- ~3GB livres em disco

## Instalacao das dependencias

**macOS e Linux:**
```bash
chmod +x install.sh
./install.sh
```

**Windows (PowerShell):**
```powershell
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
.\install.ps1
```

Os scripts checam e instalam (com sua confirmacao):
- `ffmpeg`: processamento de audio/video
- `yt-dlp`: baixar trilha do YouTube
- `node`: rodar Remotion
- `whisper-cli`: transcrever audio com timestamps
- Modelo whisper small (462MB) em `~/.whisper-models/ggml-small.bin`

## Setup do projeto Remotion

Se voce ainda nao tem um projeto Remotion:

```bash
npx create-video@latest reel-g1-fake --template blank
cd reel-g1-fake
npm install @remotion/media-utils
```

Copie 3 arquivos deste gist pro projeto:
- `FakeNewsReel.tsx` → `src/FakeNewsReel.tsx`
- `FakeNewsCaptions.tsx` → `src/FakeNewsCaptions.tsx`
- `Root.tsx` → `src/Root.tsx` (substitui o existente)

## Inputs

Crie uma pasta `inputs/` na raiz do projeto com 3 arquivos:

```
inputs/
  audio.m4a    # sua locucao (m4a/mp3/wav, pode ter pausas)
  foto1.jpg    # foto da pessoa esquerda (voce, idealmente 800x800+)
  foto2.jpg    # foto da pessoa direita (alvo da satira, foto publica)
```

**Dicas:**
- Foto da pessoa-alvo: pegue de noticia publica ja circulando (G1, CNN, Wikipedia). Em satira de noticia recente, baixo risco.
- Audio: grave em local quieto, fale claro. Pode incluir pausas e ate erros (a skill corta silencios e voce escolhe trechos pra remover).
- Reframe serio: deixe uma marca clara entre humor e serio (ex: "Brincadeira a parte, ..."). A skill destaca visualmente.

## Pipeline (6 etapas)

### 1. Pre-processar audio

Corta silencios e normaliza a voz:

```bash
ffmpeg -y -i inputs/audio.m4a \
  -af "silenceremove=stop_periods=-1:stop_duration=0.3:stop_threshold=-28dB,acompressor=threshold=-18dB:ratio=3" \
  /tmp/audio-clean.m4a

ffprobe -v error -show_entries format=duration -of csv=p=0 /tmp/audio-clean.m4a
```

Anote a duracao. Se ficou muito curto (cortou trechos validos) afrouxe `stop_threshold=-32dB`. Se ficou muito longo (silencios sobrando) aperte pra `-24dB`.

### 2. Transcrever com timestamps por palavra

Whisper gera JSON com a posicao exata de cada palavra:

```bash
ffmpeg -y -i /tmp/audio-clean.m4a -ar 16000 -ac 1 -c:a pcm_s16le /tmp/audio-clean.wav

whisper-cli \
  -m ~/.whisper-models/ggml-small.bin \
  -l pt \
  -f /tmp/audio-clean.wav \
  --max-len 1 --split-on-word \
  --output-json --output-file /tmp/words
```

Abra `/tmp/words.json` e revise. Procure repeticoes (voce falou a mesma coisa 2x?) ou ruidos (garganta, tosse). Anote os timestamps em `offsets` (em ms).

**Cortar repeticoes/ruidos:**

```bash
# Exemplo: voce repetiu "se voce quer" entre 67.8s e 68.24s
# Tambem cortou garganta a partir de 74.12s
ffmpeg -y -i /tmp/audio-clean.m4a -filter_complex \
  "[0:a]atrim=0:67.8,asetpts=PTS-STARTPTS[a1]; \
   [0:a]atrim=68.24:74.12,asetpts=PTS-STARTPTS[a2]; \
   [a1][a2]concat=n=2:v=0:a=1[out]" \
  -map "[out]" -c:a aac -b:a 192k /tmp/audio-final.m4a
```

### 3. Baixar e looper trilha

```bash
yt-dlp -x --audio-format mp3 -o "/tmp/trilha-raw.%(ext)s" "<URL_DO_YOUTUBE>"

# Pegue a duracao do audio final
DUR=$(ffprobe -v error -show_entries format=duration -of csv=p=0 /tmp/audio-final.m4a)

ffmpeg -y -stream_loop -1 -i /tmp/trilha-raw.mp3 -t $DUR \
  -af "afade=t=in:st=0:d=1,afade=t=out:st=$(echo "$DUR - 2.2" | bc):d=2.18" \
  -c:a aac -b:a 128k /tmp/trilha-loop.m4a
```

**Atencao Content ID:** audio de YouTube pode bater Content ID e silenciar seu reel. Alternativas seguras:
- Pixabay Music (royalty-free): https://pixabay.com/music/
- Archive.org (busque "no copyright" + "tension music"): https://archive.org

### 4. Gerar JSON de legendas em chunks

Crie um arquivo `scripts/make-captions.js`:

```javascript
const fs = require('fs');
const j = JSON.parse(fs.readFileSync('/tmp/words.json', 'utf8'));
const items = j.transcription.filter(x => x.text.trim()).map(x => ({
  text: x.text.trim(),
  from: x.offsets.from / 1000,
  to: x.offsets.to / 1000,
}));

const chunks = [];
let cur = { from: 0, to: 0, text: '' };
const maxChars = 22;
for (const w of items) {
  const next = (cur.text ? cur.text + ' ' : '') + w.text;
  const endsPhrase = /[.!?,]$/.test(cur.text);
  if (!cur.text) {
    cur = { from: w.from, to: w.to, text: w.text };
  } else if (next.length > maxChars || endsPhrase) {
    chunks.push(cur);
    cur = { from: w.from, to: w.to, text: w.text };
  } else {
    cur.text = next;
    cur.to = w.to;
  }
}
if (cur.text) chunks.push(cur);

fs.writeFileSync('public/captions.json', JSON.stringify({ chunks }, null, 2));
console.log('Wrote', chunks.length, 'chunks');
```

Rode:
```bash
mkdir -p public scripts
node scripts/make-captions.js
```

Abra `public/captions.json` e procure o chunk onde a peca vira pro serio (ex: "brincadeira a parte"). Anote o `from` desse chunk: voce vai usar como `TRANSITION_SEC` no `FakeNewsCaptions.tsx`.

### 5. Mixar voz + trilha com sidechain duck

A trilha abaixa quando voce fala. Voz sempre clara, trilha presente nos silencios:

```bash
ffmpeg -y -i /tmp/audio-final.m4a -i /tmp/trilha-loop.m4a -filter_complex \
  "[1:a]volume=0.6[bg]; \
   [0:a]volume=1.2,acompressor=threshold=-20dB:ratio=2.5:attack=5:release=80[voz]; \
   [bg][voz]sidechaincompress=threshold=0.025:ratio=12:attack=20:release=400:makeup=1[ducked]; \
   [voz][ducked]amix=inputs=2:duration=first:normalize=0[out]" \
  -map "[out]" -c:a aac -b:a 192k public/audio.m4a
```

Trilha muito alta? Diminua `volume=0.6` pra `0.4`. Quer ouvir mais trilha entre silencios? Aumente `ratio=12` pra `ratio=16`.

Copie tambem as fotos pra `public/`:
```bash
cp inputs/foto1.jpg public/foto1.jpg
cp inputs/foto2.jpg public/foto2.jpg
```

### 6. Customizar componentes e renderizar

Edite **`src/Root.tsx`**:
- `DURATION_SECONDS` → duracao do `public/audio.m4a` (use ffprobe)
- `manchete1/2/3` → 3 linhas da sua manchete
- `nomeEsq` / `nomeDir` → nomes dos 2 cards

Edite **`src/FakeNewsCaptions.tsx`**:
- `TRANSITION_SEC` → segundo da virada pro serio (anotado no passo 4)

Renderize:

```bash
npx remotion render src/Root.tsx FakeNewsReel out/reel.mp4 --codec=h264 --crf=18
```

MP4 final em `out/reel.mp4`. Pronto pra postar.

## Checklist antes de publicar

- [ ] Sem em-dash (—) em nenhum lugar da manchete/legenda
- [ ] Foto da pessoa-alvo e publica (ja circulou em noticia)
- [ ] Trilha sem risco de Content ID (CC0 ou royalty-free comprovado)
- [ ] Transicao visual marca claramente o reframe serio (testa pulando direto pra esse segundo)
- [ ] Voz audivel sobre a trilha em todos os trechos
- [ ] Duracao entre 50-90 segundos (Reel limit comfortable)

## Capa quadrada pro feed IG

O frame 9:16 vai cortar no feed (manchete pode sumir). Crie uma capa 1080x1080 separada:

1. Duplique `FakeNewsReel.tsx` como `FakeNewsCover.tsx`
2. Remova `<Audio>`, `<FakeNewsCaptions>`, `Ripples`, animacoes
3. Encurte a manchete pra caber em 2 linhas (em vez de 3)
4. Adicione uma `<Composition>` no `Root.tsx`:
```tsx
<Composition id="FakeNewsCover" component={FakeNewsCover}
  durationInFrames={1} fps={1} width={1080} height={1080} ... />
```
5. Render: `npx remotion still src/Root.tsx FakeNewsCover out/cover.png`

No Instagram, na hora de publicar, escolha "Adicionar capa da galeria" e suba o `cover.png`.

## Troubleshooting

**"whisper-cli not found"** (Linux): voce precisa compilar whisper.cpp manualmente. O `install.sh` faz isso se voce confirmar.

**"whisper-cli not found"** (Windows): baixe release pre-compilada em https://github.com/ggerganov/whisper.cpp/releases, adicione ao PATH, renomeie pra `whisper-cli.exe`.

**Audio sai sem som no MP4**: verifique se `public/audio.m4a` existe. O Remotion serve `public/` via `staticFile()`.

**Palavras grudadas na legenda**: voce ta usando flex gap com flex-wrap. O componente desta skill usa fluxo de texto natural (sem flex), entao palavras tem espaco mesmo quando quebram linha.

**Render trava em "Loading captions"**: o `FakeNewsCaptions.tsx` espera `public/captions.json`. Rode o passo 4.

**Trilha alta demais sobre a voz**: ajuste `volume=0.6` pra `0.4` no passo 5, ou aumente `ratio` do sidechain pra ducking mais agressivo.

## Variacoes

A skill funciona pra qualquer satira de pessoa publica em notícia atual:
- Politico fazendo declaracao polemica
- CEO de empresa em escandalo
- Atleta dando entrevista esquisita
- Influencer pego em fake

Manchete + audio + 2 fotos sao tudo que precisa.

## Disclaimer legal

- Use fotos publicas das pessoas envolvidas (que ja circularam em jornal/midia)
- Use **fatos publicamente noticiados**, nao invente
- Sempre tenha um reframe serio claro pra a peca nao virar pamfleto
- Sem ataque pessoal direto (use termos ja noticiados como "fundo perdido", "investigado")
- Pra peca de janela curta (24-48h) o risco e baixo; se viralizar muito, monitore comentarios e mensagens

Criado pelo Junior Maia (@ojunior.maia).

---

## Instrucoes pro Claude Code (orquestrador)

Voce e o assistente que vai executar essa skill pelo usuario. Trate o usuario como leigo. Siga essa ordem:

1. **Cheque a pasta atual.** Liste arquivos. Confirme que existe `inputs/` com `audio.*` + `foto1.*` + `foto2.*` (qualquer extensao de imagem). Se faltar, peça pro usuario adicionar antes de prosseguir.

2. **Rode `~/.claude/skills/reel-g1-fake/install.sh`** (Mac/Linux) ou `install.ps1` (Windows) pra checar e instalar dependencias. Pergunte ao usuario antes de cada instalacao. Não rode tudo de uma vez sem confirmacao.

3. **Se nao existir projeto Remotion na pasta atual**, ofereca criar: rode `npx create-video@latest . --template blank` e depois `npm install @remotion/media-utils`. Copie `FakeNewsReel.tsx`, `FakeNewsCaptions.tsx`, `Root.tsx` de `~/.claude/skills/reel-g1-fake/` pra `src/`.

4. **Execute o pipeline de 6 etapas** descrito acima. Pra cada etapa, mostre o comando antes de rodar e explique em uma frase o que faz. Apos cada etapa rode `ffprobe` ou similar pra validar que o output saiu certo.

5. **Pergunte ao usuario** (uma de cada vez, espere resposta):
   - Manchete em 3 linhas (sugira algo baseado na noticia que ele descrever)
   - Nome+cargo da pessoa esquerda
   - Nome+cargo da pessoa direita
   - URL do YouTube pra trilha (ou caminho local)
   - Em que segundo do audio ele diz "brincadeira a parte" ou equivalente
   - CTA da legenda IG

6. **Cortar repeticoes do audio**: depois do whisper-cli rodar (passo 2 do pipeline), abra `/tmp/words.json` e procure visualmente palavras repetidas em sequencia ou ruidos. Mostre os trechos suspeitos pro usuario e pergunte se ele quer cortar. Construa o `atrim` filter com os timestamps que ele confirmar.

7. **Edicao dos arquivos .tsx**: voce edita pelo usuario. Nao manda o usuario abrir editor de codigo. Use Edit/Write pra ajustar `DURATION_SECONDS`, `manchete1/2/3`, `TRANSITION_SEC`, etc.

8. **No final**, mostre o caminho do MP4 final e da capa quadrada. Pergunte se ele quer subir uma copia pra ~/Desktop pra facilitar enviar pro celular.

9. **Se algo falhar**, NAO retroceda destrutivamente. Mostre o erro, explique em portugues simples o que provavelmente aconteceu, e ofereca alternativas (ex: "trilha do YouTube nao baixou, quer tentar Pixabay?").

**Tom**: portugues brasileiro, frase curta, sem jargao tecnico desnecessario. Quando precisar usar termo tecnico (ex: "ffprobe"), explique entre parenteses (ex: "ffprobe (ferramenta que mostra metadados do audio)").
