Communitygithub.com

youtube-publish

Téléchargez des vidéos ou des Shorts terminés sur YouTube en toute sécurité depuis le terminal.

Qu'est-ce que youtube-publish ?

Cette compétence permet à un agent IA (comme Claude Code, Cursor ou Codex) de télécharger des vidéos ou des Shorts vers YouTube via l'API Data v3, sans dépendance SDK externe (utilisation simple de `fetch` et téléchargement fractionné reprenable). Conçue pour les traitements par lots, elle fixe par défaut la confidentialité à « privée », tient un registre SHA256 pour éviter les doublons lors des ré-exécutions, et inclut une vérification des métadonnées, un mode dry-run et une gestion du quota API. L'agent peut ainsi publier des vidéos avec titres, descriptions, tags, programmations, tout en respectant les limites de quota (10 000 unités/jour, environ 6 uploads). Le processus d'autorisation OAuth est sécurisé via PKCE et un fichier token avec permissions restrictives. L'utilisateur garde le contrôle : l'agent doit toujours passer en dry-run avant l'upload réel, et les vidéos publiques sont refusées sauf autorisation explicite via `--allow-public`. Cette compétence est idéale pour les workflows de publication automatisée sans risque de double envoi ou de dépassement de quota.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait youtube-publish ?

Téléchargeur via l'API Data v3 de YouTube sans dépendance SDK (simple fetch, téléchargement fractionné reprenable). Conçu pour les lots : privé par défaut, un registre sha256 pour éviter les doublons lors des ré-exécutions, vérification des métadonnées, dry-run et gestion du quota.

Configuration unique (l'utilisateur fait ceci, pas l'agent)

  1. Google Cloud Console : créez un projet, activez YouTube Data API v3, créez un ID client OAuth de type Application de bureau.
  2. Fournissez le client aux scripts sans le versionner : export YOUTUBE_CLIENT_ID=... YOUTUBE_CLIENT_SECRET=... (ou conservez le JSON téléchargé en dehors du dépôt et passez --client-secrets).
  3. Autorisez la chaîne une fois :
    node scripts/auth.mjs --token-file .youtube-token.json
    
    Ouvre la page de consentement, capture la redirection sur 127.0.0.1 (PKCE + vérification d'état), stocke le token de rafraîchissement avec les droits 600. Le token n'est jamais affiché.

Flux de travail

# 1. dry-run : valide les métadonnées, hache les fichiers, affiche le plan d'upload/skip et le coût en quota
node scripts/upload.mjs --jobs jobs.json --dry-run

# 2. upload (privé par défaut)
node scripts/upload.mjs --jobs jobs.json --token-file .youtube-token.json

# fichier unique
node scripts/upload.mjs --file publish/short.mp4 --title "Comment j'ai automatisé mes montages" --tags shorts,automatisation --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" }
]

Les chemins file relatifs sont résolus par rapport au dossier du fichier jobs.

Règles

  • Ne téléchargez que les fichiers ayant passé render-qc et approuvés par l'utilisateur.
  • La confidentialité par défaut est private. public est refusé sauf si l'utilisateur l'a explicitement demandé et que vous passez --allow-public. Les vidéos programmées (publishAt) doivent être private ; YouTube les rend publiques à ce moment-là.
  • Toujours faire un --dry-run d'abord et montrer le plan à l'utilisateur.
  • Ne jamais afficher, journaliser ou versionner les tokens, secrets clients, fichiers .env* ou le registre. Le .gitignore du dépôt couvre *token*.json, *credentials*.json, *client_secret*.json, .env* et *ledger*.json.
  • Le registre (.youtube-upload-ledger.json) est la source de vérité pour ce qui a été publié. Il est sauvegardé après chaque upload. Ne le supprimez pas pour « réessayer » ; utilisez --force-duplicate uniquement si l'utilisateur veut vraiment une deuxième copie.
  • Quota : un projet obtient 10 000 unités/jour par défaut et un upload coûte historiquement 1 600 unités (environ 6 uploads/jour). --max-uploads (par défaut 6) arrête une exécution avant d'épuiser le quota ; --units-per-upload ajuste l'estimation si Google modifie le coût. En cas de quotaExceeded, l'exécution s'arrête et les jobs restants peuvent être relancés le lendemain (le registre ignore ceux déjà faits).
  • Titres : pas de placeholders (TODO, untitled, {{...}}), maximum 100 caractères, pas de < ou >. Tags : maximum 500 caractères au total. La vérification applique cela.
  • Les projets API non vérifiés peuvent forcer les uploads en privé jusqu'à ce que Google audite l'application ; informez l'utilisateur si chaque upload revient privé.

Vérification

Chaque résultat a un videoId (ouvrez https://youtu.be/<id> tant qu'il est encore privé) ou une raison skipped. node scripts/upload.mjs --check-auth teste les identifiants sans télécharger.

Individual skills in this repo

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

Skills associés