Pipeline YouTube · IA · multi-canal

Corta lives do YouTube em clips e publica sozinho

Sincroniza lives, transcreve, analisa tópicos com IA, corta com FFmpeg, gera thumbnail e publica no canal de destino — tudo orquestrado por um master-dashboard e N instâncias.

# Parte 1: sobe o master-dashboard (porta 8090)
git clone https://github.com/inematds/yt-pub-livesx.git
cd yt-pub-livesx
./setup.sh  # http://localhost:8090
O que é

Uma fábrica de clips a partir das suas lives

Pega as lives de um canal de origem, identifica tópicos com IA e publica os recortes num canal de destino com título, descrição, tags e thumbnail. Pensado para rodar como template multi-canal, isolando credenciais e cotas por instância.

✂️ Corte por tópico com IA

Transcrição automática (legendas do YouTube) → análise de tópicos com Piramyd / Claude / OpenRouter → timestamps → corte com FFmpeg.

✂️ Três fontes de vídeo

Lives do YouTube, import de vídeos da pasta imports/ e sync de canais do TikTok para o YouTube — todos caem no mesmo pipeline.

✂️ Master + N instâncias

1 master-dashboard agrega tudo na porta 8090; cada canal é uma cópia do template numa porta 809N, com SQLite, OAuth e projeto GCP próprios.

Como funciona

Da live ao clip publicado

O scheduler de cada canal baixa as lives novas, transcreve, analisa, corta, gera thumbnail e publica via OAuth, registrando tudo no SQLite local. O dashboard controla e o master agrega.

Lives (canal origem) Transcrição Análise IA Corte (FFmpeg) Thumbnail (IA) Publicação (canal destino)

1 canal = 1 instância

OAuth é por canal e a cota da YouTube Data API é por projeto GCP — separar instâncias garante cotas independentes e isolamento de falhas.

Systemd por canal

Cada par yt-dashboard<N> + yt-scheduler<N> é independente: se um canal cai, os outros seguem.

Dashboard de controle

Stats clicáveis, horários, tabela de lives por status, aba de clips unificada, reprocessar erros e status do scheduler em tempo real.

Pré-requisitos

O que você precisa antes de subir

Python 3.10+ e algumas ferramentas de linha de comando. Cada canal precisa de um projeto Google Cloud próprio com a YouTube Data API v3 ativa.

Ferramentas do sistema

Python 3.10+, ffmpeg, yt-dlp, deno (runtime JS do yt-dlp), curl e Pillow.

# ubuntu/debian
sudo apt-get install -y python3 ffmpeg curl git
pipx install yt-dlp

Deno

Usado internamente pelo yt-dlp para alguns extratores.

curl -fsSL https://deno.land/install.sh | sh

Projeto GCP por canal

YouTube Data API v3 ativada, OAuth Consent (External / Testing) e OAuth Client (Desktop App) com CLIENT_ID + CLIENT_SECRET + API Key.

# scopes necessários
youtube, youtube.upload
Guia de uso · passo a passo

Do master ao primeiro canal publicando

A instalação é dividida em duas partes: Parte 1 sobe o master (1x por máquina); Parte 2 cria uma instância por canal a partir deste template.

1

Parte 1 — Setup do sistema

Verifica dependências, instala pacotes Python e sobe o master-dashboard como systemd user service na porta 8090.

git clone https://github.com/inematds/yt-pub-livesx.git
cd yt-pub-livesx
./setup.sh  # http://localhost:8090
2

Parte 2 — Adicionar um canal

Faz as perguntas (ENTER aceita o default), copia o template para ~/projetos/<nome>, gera o .env e cria os services systemd da instância.

./scripts/setup-canal
3

Autenticar via OAuth

Quando o setup-canal pausar, rode o yt-auth em outro terminal, abra o link gerado e autorize com a conta dona do canal de destino.

GWS_CONFIG_DIR=~/projetos/<nome>/config \
  python3 ~/projetos/<nome>/scripts/yt-auth
# callback salva os tokens em config/credentials.enc
4

Cortar uma live

Manual gera o prompt; com --ai piramyd-api roda automático; --dry-run só mostra os tópicos; --publish corta e publica.

yt-clip <video_id> --dry-run        # só mostra tópicos
yt-clip <video_id> --ai piramyd-api  # automático
yt-clip <video_id> --publish        # corta e publica
5

Gerar thumbnail e publicar avulso

Os scripts yt-thumbnail e yt-publish funcionam fora do fluxo automático.

yt-thumbnail --title "Título do clip" --output thumb.jpg
yt-publish video.mp4 --title "Título" --description "Desc"
6

Operar pelo dashboard

Cada canal tem painel próprio na porta 809N (senha default Inema2026$$$, em config/.env). O master agrega todos em 8090.

python3 dashboard/server.py 8091  # http://localhost:8091
Exemplos

Casos de uso

Pensado para operar vários canais de uma vez, com sync de código opcional entre as instâncias.

Múltiplos canais em paralelo

Instâncias lives1..livesN, cada uma numa porta 809N, com scheduler e dashboard independentes e projeto GCP próprio por canal de destino.

Sync TikTok → YouTube

O tiktok_scanner varre canais do TikTok, baixa os vídeos e os joga na fila do pipeline para publicar no canal YouTube de destino.

Import de vídeos prontos

Largue arquivos em imports/ e o import_worker os transforma em fila do pipeline — thumbnail e publicação inclusos.

Deploy em VPS com SSH tunnel

Habilite lingering, rode as duas partes e acesse os dashboards via ssh -L sem expor portas publicamente.

Roadmap

Estado e endurecimento

O pipeline está funcional para uso interno via SSH tunnel; o foco de melhoria é segurança do dashboard antes de qualquer exposição pública.

Funciona
Pipeline completo multi-canalLives, import e TikTok → corte por tópico → thumbnail → publicação, com master + N instâncias e SQLite por canal.
Em uso
Operação em VPSSystemd user services com lingering, backups de credentials.enc + .encryption_key + lives.db e cleanup de lives/.
A revisar
Segurança do dashboardSem rate limit no login, senha em texto puro no .env, sem TLS nem 2FA — recomendado reverse proxy com HTTPS antes de expor.
Contínuo
Sync de código entre instânciasscripts/sync-instances propaga o template para as instâncias opt-in.