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
- Vor der Veröffentlichung die Compliance-Checkliste in
references/plotome-lessons.mdvon 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. out/upload_meta.mdgemäßreferences/upload-meta-template.mdschreiben. Die Beschreibung sollte nur Inhalte enthalten, die tatsächlich im Video vorkommen. Mit „Persönliche Lernnotizen." beginnen (Benutzerpräferenz).- Cover: 1920×1080, ohne Untertitel; wird von der
cover-epK-Komposition von tech-explainer-video generiert. - 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:
- 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. - Beiträge einzeln einreichen:
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~/.claude/skills/video-publish/tools/bili_upload.sh <Kontoname> out/ep1.mp4 out/covers/ep1.jpg tx 231 "<Titel>" "<Beschreibung>" "<Tags,durch Komma getrennt>"Beitrag erfolgreich BVxxxx Linkausgegeben, bei Fehler das Ende des Logs. Bei mehreren Episoden diese nacheinander hochladen und nach jeder Episode die BV-Nummer mitteilen. - 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,DIRECTundDOMAIN-SUFFIX,bilivideo.com,DIRECTin den Proxy-Regeln weit oben zu platzieren und die Konfiguration neu zu laden; dannprobe_lines.sherneut 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/oderhttps://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 Hochladenzurückgegeben; bis zum nächsten Tag warten. Ein Kapitel als einen Multi-Part-Beitrag (P-Segment) hochladen (biliupuploadsendet mehrere Dateien auf einmal, Dateinamen sind die P-Segment-Titel, harter Linkout/parts/P<k> <Kapiteltitel>.mp4spart 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.shtesten;bldsahatte ein abgelaufenes Zertifikat, bei Fehler zutx/bda2wechseln. - 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 inupload_meta.mdgeschrieben).
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 Zeileapp <Name> <BV> <Projektverzeichnis>,hängt der Reihe nachout/parts/*.mp4an.- Idempotenz: Erfolgreiche Ausführung schreibt
<Name> append <BV> <Datum>inresults.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 & disownstarten, Logs werden pro Batch nummeriert; ein separater Hintergrundprozess wartet mituntilauf 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).
- Idempotenz: Erfolgreiche Ausführung schreibt
- P-Segment-Titel sind die Dateinamen:
out/parts/P<k> <Haken>: <Thema>.mp4(harter Link zuout/epK.mp4, spart Speicherplatz). appendkann die Beschreibung nicht ändern: Für jede Batch einen Abschnitt „Beschreibungsergänzung" inupload_meta.mdschreiben 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--headedsein, Headless-Modus verweigert Google den Zugang zum Studio). Der mitgelieferte YouTube-Uploader von sau hat zwei Fehler; die Behebung befindet sich intools/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
--playlistnicht 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 mitnohup … & disownstarten, 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 (Callbackhttp://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:
--thumbnailmuss 3:4 Hochformat sein, zusätzlich gibt es--thumbnail-landscape(4:3); Titel maximal 30 Zeichen. - Kuaishou:
--thumbnailin beliebigem Seitenverhältnis; das Skript füllt nur die ersten 3 Tags, die wichtigsten zuerst. - Xiaohongshu: Titel maximal 20 Zeichen;
--collectionwird 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-Warteschlangenskripttools/examples/douyin_upload_all.sh(vom Benutzer im eigenen Terminal ausgeführt, Login-Überprüfung verwendet die GUI-Modus-VariableDOUYIN_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:
- 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 zuerstsau bilibili checkzur Überprüfung der Anmeldung undprobe_lines.shzur Leitungsauswahl ausführen. - Kapitelweise und episodenweise hochladen; nach jedem Kapitel im Chat eine Tabelle mit „Episode / Titel / Link" auflisten, die BV-Nummer in
upload_meta.mdzurückschreiben. - 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 undupload_meta.mdwerden beibehalten, um ein erneutes Rendern in Zukunft zu ermöglichen. Fehlgeschlagene Episoden werden auf keinen Fall gelöscht. - 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 inupload_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.