Communitygithub.com

cassieliang6709/video-publish

Veröffentlicht fertiggestellte Videos auf sozialen Medien (hauptsächlich Bilibili, ergänzend YouTube / Douyin / Kuaishou / Xiaohongshu): Bereitet Titel/Beschreibung/Tags/Cover vor, lässt den Benutzer einzeln bestätigen, lädt hoch und gibt die BV-Nummer zurück.

Was ist video-publish?

Dieses Skill automatisiert den Prozess der Veröffentlichung von Videos auf mehreren chinesischen und internationalen Plattformen, mit Schwerpunkt auf Bilibili. Es unterstützt auch YouTube, Douyin, Kuaishou und Xiaohongshu. Der Benutzer bestätigt Metadaten wie Titel, Beschreibung und Tags vor dem Upload. Das Skill generiert Upload-Befehle basierend auf einer zentralen Metadaten-Datei (`upload_meta.md`) und führt sie entweder selbst aus (Bilibili, YouTube) oder bereitet sie für die Ausführung durch den Benutzer vor (Douyin, Kuaishou, Xiaohongshu), um Automatisierungserkennung zu vermeiden. Es integriert Prüfungen auf Plattformlimits (tägliche Upload-Kontingente, Tag-Anzahl), bietet Fehlerbehebung bei Netzwerkproblemen (Proxy-Konfiguration) und handhabt besondere Anforderungen wie das Anhängen von Kapiteln an bestehende Bilibili-Beiträge oder das Erstellen von Wiedergabelisten auf YouTube. Das Skill ist als nützlich für Entwickler und Content-Ersteller beschrieben, die ihren Veröffentlichungs-Workflow optimieren möchten, insbesondere bei der Serienproduktion. Es stellt die Einhaltung von Compliance-Richtlinien (z. B. Kennzeichnung von KI-generierten Inhalten) sicher und bietet Fallback-Lösungen für Browser-basierte Uploads, wenn API-Methoden aufgrund fehlender OAuth-Überprüfung nicht öffentlich sind.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cassieliang6709/video-skills/tree/HEAD/skills/video-publish

In Ihrer bevorzugten KI fragen

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

Dokumentation

Video-Veröffentlichung (Bilibili / YouTube / Douyin / Kuaishou / Xiaohongshu)

Eiserne Regeln

  • Vor jeder Veröffentlichung dem Benutzer eine Tabelle mit Plattform, Konto, Datei, Cover, Titel, Beschreibung, Tags, Kategorie und Veröffentlichungsmethode vorlegen. Erst nach ausdrücklicher Bestätigung („Veröffentlichen") ausführen. Der Benutzer kann mehrere auf einmal genehmigen (z. B. „EP2–EP4 alle veröffentlichen"), aber dies gilt nur für die zu diesem Zeitpunkt aufgeführten Einträge und Inhalte; bei Änderungen ist eine erneute Bestätigung erforderlich.
  • Das Einloggen kann nur der Benutzer selbst durchführen (Terminal-Scan). Keine Eingabe von Benutzernamen, Passwörtern, Telefonnummern oder Verifizierungscodes für den Benutzer. Kein Lesen oder Ausdrucken von Cookie-Inhalten.
  • Der sau-Upload für Douyin, Kuaishou und Xiaohongshu basiert auf patchright (einem Browser, der Automatisierungsspuren verbirgt). Der Benutzer entscheidet über die Verwendung, führt die Upload-Befehle jedoch in seinem eigenen Terminal aus: Claude ist dafür verantwortlich, den vollständigen Befehl und die Beitragsinformationen vorzubereiten, führt jedoch kein login/upload für diese Plattformen selbst aus und umgeht auch nicht die Schieberegler-Verifizierung für den Benutzer.

Vorbereitung

  1. Vor der Veröffentlichung die Compliance-Checkliste in references/plotome-lessons.md von tech-explainer-video durchgehen: „Enthält KI-generierte Inhalte" ankreuzen (auch wenn der Voice-Over von KI ist), Musiklizenzen und Namensnennung in die Beschreibung aufnehmen, keine echten Gesichter oder Markenzeichen verwenden.
  2. out/upload_meta.md gemäß references/upload-meta-template.md schreiben. Die Beschreibung sollte nur Inhalte enthalten, die tatsächlich im Video vorkommen. Mit „Persönliche Lernnotizen." beginnen (Benutzerpräferenz).
  3. Cover: 1920×1080, ohne Untertitel; wird von der cover-epK-Komposition von tech-explainer-video generiert.
  4. Dem Benutzer zur Überprüfung senden (SendUserFile), nachfragen: Cover, ob Code-Links benötigt werden (GitHub/Gist), Sammlungsname.

Bilibili

Werkzeug: dreammis/social-auto-upload (installiert in ~/tools/social-auto-upload), verwendet das automatisch heruntergeladene biliup für die eigentlichen Beiträge.

Erstinstallation (zuerst die Quelle, den Inhalt und die Größe mitteilen, auf Zustimmung warten):

git clone --depth 1 https://github.com/dreammis/social-auto-upload.git ~/tools/social-auto-upload
cd ~/tools/social-auto-upload && uv venv --python 3.12 && uv pip install -e . && uv pip install playwright
cp conf.example.py conf.py

Anmelden (vom Benutzer im eigenen Terminal ausführen lassen, im Menü „Scan-Login" auswählen, mit der Bilibili-App scannen; falls der QR-Code nicht vollständig angezeigt wird, qrcode.png öffnen):

cd ~/tools/social-auto-upload && .venv/bin/sau bilibili login --account <Kontoname>

Nicht „SMS-Login" wählen: Dies erfordert das Lösen eines Schiebereglers und das manuelle Kopieren eines Challenge-Codes, was leicht fehlschlägt oder abläuft. Anmeldung überprüfen: .venv/bin/sau bilibili check --account <Kontoname>, Ausgabe sollte valid sein.

Hochladen:

  1. Zuerst die Leitungen testen: tools/probe_lines.sh, die schnellste auswählen (normalerweise tx oder bda2). biliup kein automatisches Speedtest durchführen lassen, es kann bei Proxy-Verbindung hängen bleiben.
  2. Beiträge einzeln einreichen:
    ~/.claude/skills/video-publish/tools/bili_upload.sh <Kontoname> out/ep1.mp4 out/covers/ep1.jpg tx 231 "<Titel>" "<Beschreibung>" "<Tags,durch Komma getrennt>"
    
    Das Skript wandelt Pfade in absolute Pfade um (es wechselt intern zu social-auto-upload), relative Pfade können im Video-Projektverzeichnis verwendet werden. Bei Erfolg wird Beitrag erfolgreich BVxxxx Link ausgegeben, bei Fehler das Ende des Logs. Bei mehreren Episoden diese nacheinander hochladen und nach jeder Episode die BV-Nummer mitteilen.
  3. Nach Abschluss den Benutzer daran erinnern: Im „Kreativzentrum" unter „Sammlungsverwaltung" eine Sammlung erstellen und Episoden in der richtigen Reihenfolge hinzufügen; die Sammlung wird nach der Überprüfung öffentlich.

Netzwerk-Fehlerbehebung:

  • Sehr langsame Uploads, error sending request, connection reset, Server 500: Meistens leitet der TUN-Proxy den Traffic über internationale Knoten um. Den Benutzer anweisen, DOMAIN-SUFFIX,bilibili.com,DIRECT und DOMAIN-SUFFIX,bilivideo.com,DIRECT in den Proxy-Regeln weit oben zu platzieren und die Konfiguration neu zu laden; dann probe_lines.sh erneut ausführen; erst hochladen, wenn die Geschwindigkeit mehrere hundert KB/s oder mehr beträgt.
  • Fortschritt anzeigen: nettop -p <biliup pid> -L 1 -x -J bytes_out. biliup gibt vor dem Abschluss fast keine Log-Ausgabe; nicht wegen fehlender Logs auf einen Stillstand schließen.
  • macOS hat keinen timeout-Befehl.
  • Wenn das erste Ausführen von sau das Herunterladen von biliup fehlschlägt (GitHub Release ist langsam): Manuell mit https://gh-proxy.com/ oder https://gh-proxy.org/ vor der Release-URL herunterladen.
  • Vor einem erneuten Upload sicherstellen, dass der vorherige Beitrag nicht erfolgreich war (ob eine bvid im Log vorhanden ist), um doppelte Beiträge zu vermeiden.

Bilibili: Upload-Limit und Multi-Part-Videos (P-Segmente)

  • Es gibt etwa 7 neue Beiträge pro Tag. Bei Überschreitung wird 21566 Zu häufiges Hochladen zurückgegeben; bis zum nächsten Tag warten. Ein Kapitel als einen Multi-Part-Beitrag (P-Segment) hochladen (biliup upload sendet mehrere Dateien auf einmal, Dateinamen sind die P-Segment-Titel, harter Link out/parts/P<k> <Kapiteltitel>.mp4 spart Speicherplatz).
  • Um P-Segmente zu einem bestehenden Beitrag hinzuzufügen, biliup append --vid BV… verwenden; dies verbraucht kein neues Upload-Kontingent.
  • Maximal 12 Tags, bei Überschreitung werden diese abgeschnitten. Leitung vorher mit probe_lines.sh testen; bldsa hatte ein abgelaufenes Zertifikat, bei Fehler zu tx/bda2 wechseln.
  • Beispiel für ein Warteschlangen-Skript: tools/examples/upload_chapters.sh (21566 wird stündlich wiederholt, maximal 24 Mal; bei Erfolg wird - Ergebnis: BV… P<k> zurück in upload_meta.md geschrieben).

Bilibili: Anhängen an bestehende Beiträge (Seriensammlung, für Wissensdatenbank ab 2026-10 ~ 11 getestet)

  • Eine Serie als einen Multi-Part-Beitrag (P-Segment) anlegen, dann für jeden weiteren Artikel biliup append --vid BV… verwenden; keine neuen Beiträge erstellen (erst recht nicht, wenn der Benutzer explizit keine neuen möchte).
  • Beispiel für ein Warteschlangen-Skript tools/examples/upload_append.sh: Pro Zeile app <Name> <BV> <Projektverzeichnis>, hängt der Reihe nach out/parts/*.mp4 an.
    • Idempotenz: Erfolgreiche Ausführung schreibt <Name> append <BV> <Datum> in results.log, ein erneuter Durchlauf überspringt den Eintrag („Bereits angehängt"). Neue Batch-Einträge einfach am Ende der Datei hinzufügen und das gesamte Skript erneut ausführen.
    • Leitungswechsel: alia → tx → bda2; wenn alle drei fehlschlagen, 30 Minuten warten, maximal 48 Runden; Erfolgskriterium ist die Ausgabe Beitragsänderung erfolgreich.
    • Mit nohup <Skript> > upload_kbN.log 2>&1 & disown starten, Logs werden pro Batch nummeriert; ein separater Hintergrundprozess wartet mit until auf das Erscheinen von „Warteschlange abgeschlossen" im Log.
    • Häufiger Fehler client error (Connect): Leitungsinstabilität; das Skript wiederholt den Vorgang selbstständig; nicht manuell erneut hochladen (führt zu doppelten P-Segmenten).
  • P-Segment-Titel sind die Dateinamen: out/parts/P<k> <Haken>: <Thema>.mp4 (harter Link zu out/epK.mp4, spart Speicherplatz).
  • append kann die Beschreibung nicht ändern: Für jede Batch einen Abschnitt „Beschreibungsergänzung" in upload_meta.md schreiben und dann eine Notiz „An Autor" im Dashboard hinzufügen, damit der Benutzer diese manuell im Kreativzentrum an die ursprüngliche Beitragsbeschreibung anhängen kann.
  • Versionen in anderen Sprachen (z. B. englische Vertonung) nicht in chinesische Beiträge anhängen; der Benutzer entscheidet, wo sie veröffentlicht werden.

YouTube

  • Werkzeug: Dasselbe sau (sau youtube login/upload-video, muss --headed sein, Headless-Modus verweigert Google den Zugang zum Studio). Der mitgelieferte YouTube-Uploader von sau hat zwei Fehler; die Behebung befindet sich in tools/examples/sau-youtube-fixes.patch: Die Login-Überprüfung wartet nur 3 Sekunden und verwendet Headless (fälschlicherweise „invalid"); der Playlist-Selektor klickt auf die falsche Stelle (Playlists wurden nie hinzugefügt, und die Ausnahme wird geschluckt). Nach der Installation von sau auf einem neuen Rechner zuerst diesen Patch einspielen.
  • Playlists müssen zuerst im Studio erstellt werden (sonst wird --playlist nicht wirksam); nach dem Upload stichprobenartig prüfen, ob eine Episode zur Playlist hinzugefügt wurde, falls nicht, im Studio auf der Video-Bearbeitungsseite nachwählen.
  • Es gibt ein tägliches Upload-Limit: Wenn „Veröffentlichungsbutton nicht gefunden" erscheint oder Videos als Entwurf bleiben, ist das Limit wahrscheinlich erreicht. Nicht erneut hochladen (hinterlässt doppelte Entwürfe); die Entwürfe im Studio vervollständigen und veröffentlichen, den Rest am nächsten Tag hochladen.
  • Beispiel für ein Warteschlangen-Skript: tools/examples/youtube_queue.sh (lange Warteschlangen mit nohup … & disown starten, da Hintergrundaufgaben in der Sitzung sonst beendet werden).
  • API-Methode (ohne Browser): youtubeuploader (brew install youtubeuploader) + tools/examples/youtube_api_upload.sh. Voraussetzung: Google Cloud-Projekt mit aktivierter YouTube Data API v3, OAuth-Zustimmungsbildschirm (extern, Testnutzer hinzufügen), Webanwendungs-Anmeldedaten (Callback http://localhost:8080/oauth2callback). Bei nicht überprüften Projekten sind alle über die API hochgeladenen Videos standardmäßig privat; das Überprüfungsformular https://support.google.com/youtube/contact/yt_api_form erfordert eine öffentliche Startseite, Datenschutzrichtlinie, Nutzungsbedingungen (z. B. mit GitHub Pages, Beispiel cassieliang6709/video-uploader), Screenshots der Startseite/Datenschutzseite, Screenshots des OAuth-Ablaufs, Architekturdiagramm, Benutzerablaufdiagramm und das vollständige Upload-Skript. Bis zur Überprüfung weiterhin die Browser-Automatisierung verwenden.

Douyin / Kuaishou / Xiaohongshu

Werkzeug: Dasselbe social-auto-upload mit sau douyin|kuaishou|xiaohongshu, Browser-Automatisierung (patchright). Die Befehle werden vom Benutzer in seinem eigenen Terminal ausgeführt (siehe eiserne Regeln), Claude bereitet nur die Befehle vor und überprüft die Ergebnisse.

Videos: Diese drei Plattformen bevorzugen Hochformat, empfohlen 1080×1920 oder auf etwa 1 Minute gekürzte Highlights; bei Bedarf zu tech-explainer-video zurückkehren, um eine Hochformat-Version zu rendern. Querformat kann ebenfalls hochgeladen werden, hat aber schwarze Balken.

Erstinstallation des Browsers (vom Benutzer ausgeführt):

cd ~/tools/social-auto-upload && PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright" .venv/bin/patchright install chromium

Anmelden und Überprüfen (vom Benutzer ausgeführt, <Plattform> ist douyin / kuaishou / xiaohongshu):

cd ~/tools/social-auto-upload && .venv/bin/sau <Plattform> login --account <Kontoname> --headed
.venv/bin/sau <Plattform> check --account <Kontoname>

Hochladen (Claude füllt den vollständigen Befehl gemäß upload_meta.md aus und sendet ihn an den Benutzer; der Benutzer bestätigt den Inhalt und führt ihn selbst aus):

cd ~/tools/social-auto-upload && .venv/bin/sau <Plattform> upload-video --account <Kontoname> \
  --file <absoluter Pfad zur mp4> --title "<Titel>" --desc "<Text>" --tags <Tags,durch Komma getrennt> \
  [--thumbnail <Cover>] [--schedule "YYYY-MM-DD HH:MM"] [--collection <Name der bestehenden Sammlung>]
  • Douyin: --thumbnail muss 3:4 Hochformat sein, zusätzlich gibt es --thumbnail-landscape (4:3); Titel maximal 30 Zeichen.
  • Kuaishou: --thumbnail in beliebigem Seitenverhältnis; das Skript füllt nur die ersten 3 Tags, die wichtigsten zuerst.
  • Xiaohongshu: Titel maximal 20 Zeichen; --collection wird nicht unterstützt.
  • Der Benutzer fügt die Terminalausgabe nach der Ausführung ein; Claude bewertet den Erfolg und schreibt den Link in upload_meta.md. Das Lösen von Schieberegler-Verifizierungen erfolgt durch den Benutzer selbst.
  • Für Douyin ist es oft besser, ein Kapitel als ganze Sammlung (alle Episoden zusammengefügt zu out/chapter.mp4, mit 4:3 Querformat-Cover) hochzuladen, anstatt Episode für Episode; Beispiel-Warteschlangenskript tools/examples/douyin_upload_all.sh (vom Benutzer im eigenen Terminal ausgeführt, Login-Überprüfung verwendet die GUI-Modus-Variable DOUYIN_COOKIE_AUTH_HEADLESS=false).

Alternative (wenn kein Skript verwendet werden soll): Im bereits angemeldeten Chrome des Benutzers die Veröffentlichungsseite des Kreativzentrums öffnen, dem Benutzer helfen, die Datei auszuwählen, Titel und Text auszufüllen, vor dem Klick auf den Veröffentlichungsbutton einen Screenshot machen und den Benutzer selbst „Veröffentlichen" klicken lassen.

Batch-Pipeline (nur mit ausdrücklicher Autorisierung des Benutzers)

Der Benutzer kann eine langfristige Autorisierung für eine Serie erteilen: „Sobald eine Batch gerendert ist → direkt hochladen → fertige Videos löschen" (z. B. für die nudgecode-Algorithmus-Diagramme, autorisiert am 2026-10-24). Diese Autorisierung gilt nur für die genannte Serie; bei einem Wechsel der Serie oder Plattform muss erneut nachgefragt werden. Innerhalb des autorisierten Rahmens:

  1. Nachdem jedes Kapitel dieser Batch gerendert wurde, die Titel, Beschreibungen und Tags gemäß dem vorhandenen upload_meta.md-Format der Serie selbstständig schreiben (Beschreibung beginnt weiterhin mit „Persönliche Lernnotizen." und enthält nur Inhalte aus dem Video), ohne sie dem Benutzer einzeln vorzulegen; dennoch zuerst sau bilibili check zur Überprüfung der Anmeldung und probe_lines.sh zur Leitungsauswahl ausführen.
  2. Kapitelweise und episodenweise hochladen; nach jedem Kapitel im Chat eine Tabelle mit „Episode / Titel / Link" auflisten, die BV-Nummer in upload_meta.md zurückschreiben.
  3. Nur die Episode, für die eine BV-Nummer vorliegt, löschen: out/epK.mp4, out/*.raw.mp4, out/check/, out/bundle/ (sowie die node_modules dieses Projekts, freigegebene Symlinks bleiben unberührt). Quellcode, Sprachaufnahmen, SRTs, Cover und upload_meta.md werden beibehalten, um ein erneutes Rendern in Zukunft zu ermöglichen. Fehlgeschlagene Episoden werden auf keinen Fall gelöscht.
  4. Wenn der Löschbefehl durch eine Berechtigung blockiert wird, den Befehl unverändert dem Benutzer zur Ausführung geben und keine anderen Methoden zur Umgehung verwenden.

Bereinigung

  • Fertige Videos werden erst gelöscht, wenn von allen Zielplattformen ein Link vorliegt; das Löschen wird häufig durch Berechtigungen blockiert, daher als Skript schreiben und dem Benutzer zur Ausführung geben, Beispiel tools/examples/cleanup_uploaded.sh (löscht nur Episoden mit Ergebnissen in upload_meta.md, kann mehrfach ausgeführt werden).

Aufzeichnung

Nach der Veröffentlichung die BV-Nummer jeder Episode in die Spalte „Ergebnis" von out/upload_meta.md eintragen und im Chat eine Tabelle mit „Episode / Titel / Link" auflisten.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills