---
name: curadoria-youtube
description: Processar URLs de YouTube e transformar em páginas estruturadas no Notion com resumo em português, insights, ações, transcrição, thumbnail e automação por webhook/cron. Usar quando precisar curar vídeos, resumir conteúdos, atualizar a base Swipe Files II ou substituir fluxos n8n.
---

<!-- DOC_HEADER_START -->
## Metadados do Documento
- Última modificação: 10/03/2026 - 19:07
- Responsável: Deco Ribeyro
- Skill criada por: Deco Ribeyro + Codex
- Skill criada em: 10/03/2026
<!-- DOC_HEADER_END -->
# Curadoria YouTube

Use esta skill para transformar uma URL de YouTube em uma página estruturada no Notion.

## Fluxo

1. Validar URL e extrair metadados do vídeo.
2. Tentar transcrição com `youtube_transcript_api` (caminho principal).
3. Se falhar, extrair áudio com `yt-dlp` e transcrever com Whisper (OpenAI/Groq/local).
4. Traduzir o transcript para português do Brasil.
5. Para vídeos longos, fatiar em chunks de 2000 palavras.
6. Gerar JSON final com título, resumo executivo, insights, ações, transcrição e thumbnail.
7. Publicar no Notion com blocos formatados e campo `Data salvo no youtube`.

## Prompt do Sistema

```text
You are Skill_YT_Deep_Intel, a YouTube intelligence extraction agent.

Objective:
Receive one YouTube URL and return a strict JSON object suitable for Notion ingestion.

Rules:
- Output only valid JSON (no markdown, no prose outside JSON).
- Preserve factual fidelity to the transcript.
- If information is missing, use empty strings/empty arrays instead of inventing facts.
- Write summary in 3 concise paragraphs.
- Return exactly 5 key insights when possible.
- Extract practical action items explicitly mentioned or strongly implied.
- `raw_transcript` may be truncated when very long.

JSON schema:
{
  "title": "string",
  "summary": "string (3 paragraphs)",
  "key_insights": ["string", "string", "string", "string", "string"],
  "action_items": ["string", "..."],
  "raw_transcript": "string"
}
```

## Consulta Rápida

Menu de ajuda: `./curadoria-youtube/scripts/help.sh`

Comandos prontos para copiar: [COMANDOS_RAPIDOS.md](/Users/decoribeyro/DESENVOLVIMENTO/PROJETOS%20ATIVOS/8%20-%20Skills-Codex/curadoria-youtube/docs/COMANDOS_RAPIDOS.md)

## Executar Manualmente

```bash
cd "/Users/decoribeyro/DESENVOLVIMENTO/PROJETOS ATIVOS/8 - Skills-Codex"
./.venv/bin/python ./curadoria-youtube/scripts/yt_deep_intel.py "https://www.youtube.com/watch?v=VIDEO_ID" --push-notion
```

Criar nova página mesmo com URL repetida:

```bash
./.venv/bin/python ./curadoria-youtube/scripts/yt_deep_intel.py "<url>" --push-notion --force-new-page
```

## Webhook (substitui n8n)

Fluxos prontos para importar no N8N self-hosted:

- `curadoria-youtube/n8n/curadoria-youtube-sync-playlist.json`
- `curadoria-youtube/n8n/curadoria-youtube-atualizar-item.json`
- Documentação: `curadoria-youtube/N8N_WEBHOOKS.md`


Subir servidor local:

```bash
./curadoria-youtube/scripts/run_webhook.sh
```

Endpoints:

- `GET /health`
- `GET /webhook/atualizar-lista?url=<youtube_url>&force_new_page=true|false`
- `POST /webhook/atualizar-lista` com JSON `{"url":"...","force_new_page":true}`
- `POST /webhook/sync-playlist` para rodar sincronização da playlist

URLs prontas:

- Local: `http://127.0.0.1:8787/webhook/sync-playlist`
- VPS (exemplo): `https://SEU_DOMINIO/webhook/sync-playlist`
- Atualizar item único (VPS): `https://SEU_DOMINIO/webhook/atualizar-lista?url=<youtube_url>`

Integração com Notion Webhook Actions:

- O Notion chama webhooks via método `POST`.
- Para botão `Atualizar Lista`, configure a URL para `/webhook/sync-playlist`.
- Se a playlist do YouTube for privada, use `YTDLP_COOKIES_FILE` para o agendador local e mantenha `YTDLP_COOKIES_FROM_BROWSER` apenas para testes manuais ou para renovar o arquivo de cookies.
- Se quiser proteção, preencha `WEBHOOK_TOKEN` e envie header `X-Webhook-Token`.

Configuração em `.env`:

```env
WEBHOOK_HOST=0.0.0.0
WEBHOOK_PORT=8787
WEBHOOK_TOKEN=
```

## Cron (Swipe Files II)

Atalho manual:

```bash
./curadoria-youtube/scripts/sync_now.sh
```

Pré-visualizar o que entraria no Notion sem processar:

```bash
./curadoria-youtube/scripts/sync_now.sh --dry-run
```

Ver últimos logs da automação:

```bash
./curadoria-youtube/scripts/show_logs.sh
```

Ver últimos IDs já processados:

```bash
./curadoria-youtube/scripts/show_state.sh
```

Comando direto do scheduler:

```bash
./.venv/bin/python ./curadoria-youtube/scripts/swipe_files_scheduler.py
```

Se a playlist privada parar de abrir por expiração de cookies:

1. Exporte um arquivo `cookies.txt` do YouTube em formato Netscape no navegador onde a playlist abre corretamente.
2. Instale no projeto:

```bash
./curadoria-youtube/scripts/install_youtube_cookies.sh "/caminho/do/cookies.txt"
```

3. Valide o acesso:

```bash
./curadoria-youtube/scripts/validate_playlist_access.sh
```

Agendamento (15 minutos já configurado):

```cron
*/15 * * * * /Users/decoribeyro/DESENVOLVIMENTO/PROJETOS\ ATIVOS/8\ -\ Skills-Codex/curadoria-youtube/scripts/run_swipe_cron.sh
```

## Variáveis de Ambiente

```env
OPENAI_API_KEY=
GROQ_API_KEY=
LLM_PROVIDER=openai
LLM_MODEL=gpt-4o-mini
WHISPER_MODEL=base
NOTION_API_KEY=
NOTION_DATABASE_ID=1d0c76b764a48007900ce9a2ef323237
SWIPE_PLAYLIST_URL=
SWIPE_MAX_NEW_PER_RUN=5
SWIPE_STATE_FILE=temp/swipe_files_ii_state.json
YTDLP_COOKIES_FROM_BROWSER=edge
YTDLP_COOKIES_PROFILE=Default
YTDLP_COOKIES_FILE=/Users/decoribeyro/DESENVOLVIMENTO/PROJETOS ATIVOS/8 - Skills-Codex/temp/youtube.cookies.txt
WEBHOOK_HOST=0.0.0.0
WEBHOOK_PORT=8787
WEBHOOK_TOKEN=
```
