Communitygithub.com

youtube-publish

Hochladen fertiger Videos oder Shorts auf YouTube direkt vom Terminal aus – sicher und zuverlässig.

Was ist youtube-publish?

Das Skill `youtube-publish` ermöglicht es einem KI-Agenten, fertig gerenderte Videos und Shorts über die YouTube Data API v3 hochzuladen – ganz ohne zusätzliches SDK, sondern mit plain `fetch` und einem wiederaufsetzbaren Chunk-Upload. Es ist speziell für Batch-Workflows optimiert: Standardmäßig werden alle Uploads als `private` eingestellt, ein SHA256-Ledger verhindert Doppel-Uploads bei erneuter Ausführung, und es gibt eine Metadaten-Prüfung, einen Dry-Run-Modus sowie eine Quota-Überwachung. Das Skill unterstützt die Autorisierung eines YouTube-Kanals mittels OAuth (Desktop-App), das Planen von Veröffentlichungszeiten (`publishAt`), das Setzen von Titeln, Beschreibungen und Tags sowie das strikte Einhalten der API-Quota (standardmäßig max. 6 Uploads pro Tag). Es eignet sich für Claude Code, Cursor, Codex oder andere agentenbasierte Tools, die im Terminal arbeiten, und stellt sicher, dass keine geheimen Tokens oder Client-Secrets im Code landen oder geloggt werden.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht youtube-publish?

YouTube Data API v3 Uploader ohne SDK-Abhängigkeit (reines fetch, wiederaufsetzbarer Chunk-Upload). Entwickelt für Batches: standardmäßig privat, ein SHA256-Ledger, sodass ein erneuter Durchlauf nie doppelt postet, Metadaten-Prüfung, Dry-Run und Quota-Bewusstsein.

Einmalige Einrichtung (der Benutzer führt dies aus, nicht der Agent)

  1. Google Cloud Console: Projekt erstellen, YouTube Data API v3 aktivieren, einen OAuth-Client-ID vom Typ Desktop-App erstellen.
  2. Client dem Skript bereitstellen, ohne es zu committen: export YOUTUBE_CLIENT_ID=... YOUTUBE_CLIENT_SECRET=... (oder die heruntergeladene JSON außerhalb des Repos behalten und --client-secrets übergeben).
  3. Kanal einmal autorisieren:
    node scripts/auth.mjs --token-file .youtube-token.json
    
    Öffnet die Zustimmungsseite, fängt die Weiterleitung auf 127.0.0.1 ab (PKCE + State- Prüfung), speichert das Refresh-Token mit Modus 600. Der Token wird niemals ausgegeben.

Arbeitsablauf

# 1. Dry Run: prüft Metadaten, hasht Dateien, zeigt Überspringen/Hochladen-Plan und Quota-Kosten
node scripts/upload.mjs --jobs jobs.json --dry-run

# 2. Hochladen (standardmäßig privat)
node scripts/upload.mjs --jobs jobs.json --token-file .youtube-token.json

# einzelne Datei
node scripts/upload.mjs --file publish/short.mp4 --title "How I automated my edits" --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" }
]

Relative file-Pfade werden relativ zum Ordner der Jobs-Datei aufgelöst.

Regeln

  • Nur Dateien hochladen, die den render-qc bestanden haben und vom Benutzer genehmigt wurden.
  • Standard-Datenschutz ist private. public wird verweigert, es sei denn, der Benutzer hat explizit danach gefragt und du übergibst --allow-public. Geplante Videos (publishAt) müssen private sein; YouTube schaltet sie zu diesem Zeitpunkt auf öffentlich um.
  • Immer zuerst --dry-run und den Plan dem Benutzer anzeigen.
  • Niemals Tokens, Client-Secrets, .env*-Dateien oder das Ledger ausgeben, protokollieren oder committen. Die .gitignore des Repos deckt *token*.json, *credentials*.json, *client_secret*.json, .env* und *ledger*.json ab.
  • Das Ledger (.youtube-upload-ledger.json) ist die maßgebliche Quelle dafür, was gepostet wurde. Es wird nach jedem einzelnen Upload gespeichert. Lösche es nicht, um es „erneut zu versuchen“; verwende --force-duplicate nur, wenn der Benutzer wirklich eine zweite Kopie möchte.
  • Quota: Ein Projekt hat standardmäßig 10.000 Einheiten/Tag und ein Upload hat historisch 1.600 Einheiten gekostet (ca. 6 Uploads/Tag). --max-uploads (Standard 6) stoppt einen Durchlauf, bevor die Quota aufgebraucht ist; --units-per-upload passt die Schätzung an, falls Google die Kosten ändert. Bei quotaExceeded stoppt der Durchlauf und die verbleibenden Jobs können am nächsten Tag erneut ausgeführt werden (das Ledger überspringt die erledigten).
  • Titel: keine Platzhalter (TODO, untitled, {{...}}), maximal 100 Zeichen, keine < oder >. Tags insgesamt maximal 500 Zeichen. Die Prüfung setzt dies durch.
  • Nicht verifizierte API-Projekte können Uploads bis zur Überprüfung der App durch Google auf privat erzwingen; informiere den Benutzer, wenn jeder Upload als privat zurückkommt.

Überprüfen

Jedes Ergebnis enthält eine videoId (öffne https://youtu.be/<id>, während es noch privat ist) oder einen skipped-Grund. node scripts/upload.mjs --check-auth testet Anmeldeinformationen, ohne hochzuladen.

Individual skills in this repo

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

Verwandte Skills