Communitygithub.com

zaddy99999/youtube-publish

Faça upload de vídeos concluídos ou Shorts para o YouTube com segurança diretamente do terminal. Use quando o usuário quiser autorizar um canal do YouTube, fazer upload de um ou vários vídeos com títulos, descrições e tags, agendar um horário de publicação ou garantir que um lote nunca publique duplicatas. O padrão é upload privado e mantém um registro de upload.

O que é youtube-publish?

Este skill permite enviar vídeos ou Shorts finalizados para o YouTube de forma segura diretamente do terminal, utilizando a API Data v3 do YouTube sem dependência de SDK (apenas `fetch` e upload retomável em blocos). Ele foi projetado para lotes: por padrão, os uploads são privados, usa um registro SHA256 para evitar que uma reexecução publique duplicatas, oferece lint de metadados, simulação (dry-run) e consciência de cota. O fluxo inclui uma configuração única (criação de projeto no Google Cloud, autorização do canal via OAuth) e, em seguida, o agente pode executar uploads únicos ou em lote a partir de um arquivo JSON, sempre validando antes com `--dry-run`. A ferramenta respeita rigorosamente a cota diária da API (padrão de 6 uploads por dia) e mantém um ledger local como fonte da verdade para evitar duplicação não desejada.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zaddy99999/video-editing-skills/tree/main/skills/youtube-publish

Perguntar na sua IA favorita

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

Documentação

O que youtube-publish faz?

Ferramenta de upload da YouTube Data API v3 sem dependência de SDK (usando apenas fetch, upload retomável em blocos). Construída para lotes: privado por padrão, um registro SHA256 para que uma reexecução nunca publique duplicatas, lint de metadados, simulação e consciência de cota.

Configuração única (feita pelo usuário, não pelo agente)

  1. Console Google Cloud: crie um projeto, ative a YouTube Data API v3 e crie um ID de cliente OAuth do tipo Aplicativo para desktop.
  2. Forneça o cliente aos scripts sem versioná-lo: export YOUTUBE_CLIENT_ID=... YOUTUBE_CLIENT_SECRET=... (ou mantenha o JSON baixado fora do repositório e passe --client-secrets).
  3. Autorize o canal uma vez:
    node scripts/auth.mjs --token-file .youtube-token.json
    
    Abre a página de consentimento, captura o redirecionamento em 127.0.0.1 (PKCE + verificação de estado), armazena o token de atualização com modo 600. O token nunca é exibido.

Fluxo de trabalho

# 1. simulação: valida metadados, gera hash dos arquivos, mostra plano de upload/pulo e custo de cota
node scripts/upload.mjs --jobs jobs.json --dry-run

# 2. upload (privado por padrão)
node scripts/upload.mjs --jobs jobs.json --token-file .youtube-token.json

# arquivo único
node scripts/upload.mjs --file publish/short.mp4 --title "Como automatizei minhas edições" --tags shorts,automation --privacy unlisted

jobs.json:

[
  { "file": "publish/short-01.mp4", "title": "...", "description": "...", "tags": ["shorts"], "privacy": "private" },
  { "file": "publish/short-02.mp4", "title": "...", "privacy": "private", "publishAt": "2026-11-01T17:00:00Z" }
]

Caminhos de file relativos são resolvidos em relação à pasta do arquivo de jobs.

Regras

  • Faça upload apenas de arquivos que passaram em render-qc e foram aprovados pelo usuário.
  • A privacidade padrão é private. public é recusado a menos que o usuário tenha solicitado explicitamente e você tenha passado --allow-public. Vídeos agendados (publishAt) devem ser private; o YouTube os torna públicos nesse horário.
  • Sempre execute --dry-run primeiro e mostre o plano ao usuário.
  • Nunca exiba, registre ou faça commit de tokens, client secrets, arquivos .env* ou o registro. O .gitignore do repositório cobre *token*.json, *credentials*.json, *client_secret*.json, .env* e *ledger*.json.
  • O registro (.youtube-upload-ledger.json) é a fonte da verdade para o que foi publicado. Ele é salvo após cada upload individual. Não o exclua para "tentar novamente"; use --force-duplicate apenas se o usuário realmente quiser uma segunda cópia.
  • Cota: um projeto recebe 10.000 unidades/dia por padrão e um upload histórico custa 1.600 unidades (cerca de 6 uploads/dia). --max-uploads (padrão 6) interrompe uma execução antes de queimar a cota; --units-per-upload ajusta a estimativa se o Google alterar o custo. Em quotaExceeded, a execução para e os jobs restantes podem ser reexecutados no dia seguinte (o registro pula os já concluídos).
  • Títulos: sem placeholders (TODO, untitled, {{...}}), no máximo 100 caracteres, sem < ou >. O total de tags no máximo 500 caracteres. O lint aplica isso.
  • Projetos de API não verificados podem forçar uploads para privado até que o Google audite o aplicativo; avise o usuário se todo upload voltar como privado.

Verificação

Cada resultado tem um videoId (abra https://youtu.be/<id> enquanto ainda estiver privado) ou um motivo de skipped. node scripts/upload.mjs --check-auth testa as credenciais sem fazer upload.

Individual skills in this repo

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

Habilidades Relacionadas