Communitygithub.com

cassieliang6709/video-publish

Publie des vidéos terminées sur les plateformes de médias sociaux (principalement Bilibili, également YouTube / Douyin / Kuaishou / Xiaohongshu) : prépare le titre, la description, les tags et la vignette de couverture, demande confirmation à l'utilisateur pour chaque élément, puis télécharge et renvoie le numéro BV. Utilisation lorsque l'utilisateur dit « télécharger sur Bilibili », « envoyer sur YouTube », « publier sur Douyin », « publier sur Kuaishou », « publier sur Xiaohongshu », « soumettre », « publier une vidéo ». Généralement utilisé après tech-explainer-video.

Qu'est-ce que video-publish ?

Cette compétence d'agent AI automatise la publication de vidéos sur plusieurs plateformes de médias sociaux chinoises et internationales, avec un accent principal sur Bilibili (B站) et un support secondaire pour YouTube, Douyin (抖音), Kuaishou (快手) et Xiaohongshu (小红书). Elle prépare les métadonnées (titre, description, tags, vignette) en fonction de la vidéo, présente chaque élément à l'utilisateur pour confirmation, puis télécharge la vidéo et renvoie l'identifiant de publication (BV pour Bilibili). La compétence fonctionne avec divers outils d'automatisation de navigateur (comme dreammis/social-auto-upload) et patchright pour masquer les traces d'automatisation. Elle intègre des règles strictes de sécurité : jamais de connexion automatisée, l'utilisateur doit scanner un code QR ou utiliser son propre navigateur. Elle gère les limites de téléchargement, les retards, les pannes réseau et les vérifications de conformité. Pour Bilibili, elle prend en charge les publications par chapitre avec des vidéos multipistes, l'ajout à des collections existantes et le traitement par lots avec des files d'attente. Pour YouTube, elle propose à la fois une automatisation par navigateur (headful) et une option API (via youtubeuploader). Pour Douyin, Kuaishou et Xiaohongshu, elle génère des commandes que l'utilisateur exécute dans son terminal. La compétence est conçue pour être utilisée avec des assistants de codage comme Claude Code, Cursor ou Codex, dans le cadre d'un pipeline de production vidéo. Elle suit un fichier modèle de métadonnées (`upload_meta.md`) et peut fonctionner en mode batch avec une autorisation explicite de l'utilisateur pour un traitement entièrement automatisé. Après téléchargement, elle nettoie les fichiers sources tout en conservant les ressources nécessaires pour un rendu futur, et met à jour le fichier de métadonnées avec les liens de publication.

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

Demander à votre IA préférée

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

Documentation

Publication de vidéos (Bilibili / YouTube / Douyin / Kuaishou / Xiaohongshu)

Règles absolues

  • Avant chaque publication, présentez à l'utilisateur un tableau indiquant : plateforme, compte, fichier, vignette, titre, description, tags, catégorie et méthode de publication. N'exécutez que lorsque l'utilisateur dit explicitement « publie ». L'utilisateur peut approuver plusieurs éléments à la fois (par exemple « publie EP2–EP4 »), mais cela ne couvre que les éléments et le contenu listés à ce moment-là ; tout changement de contenu nécessite une nouvelle confirmation.
  • La connexion ne peut être effectuée que par l'utilisateur lui-même (scan de code QR dans le terminal). Ne saisissez pas le nom d'utilisateur, le mot de passe, le numéro de téléphone ou le code de vérification à la place de l'utilisateur. Ne lisez ni n'imprimez le contenu des cookies.
  • Les téléchargements sur Douyin, Kuaishou et Xiaohongshu utilisent patchright (un navigateur qui masque les traces d'automatisation). L'utilisateur décide de l'utiliser, mais c'est l'utilisateur qui exécute les commandes de téléchargement dans son propre terminal : Claude prépare la commande complète et les informations de publication, mais n'exécute pas lui-même la connexion/le téléchargement pour ces plateformes, et ne gère pas les captchas de type curseur à la place de l'utilisateur.

Préparation

  1. Avant la publication, vérifiez la liste de conformité dans references/plotome-lessons.md de tech-explainer-video : cochez « contient du contenu généré par IA » (même si la narration est IA, cochez-la), incluez les crédits musicaux dans la description, n'utilisez pas de visages humains réels ni de marques déposées.
  2. Rédigez out/upload_meta.md selon references/upload-meta-template.md. La description ne doit contenir que ce qui est réellement abordé dans la vidéo. Commencez par « Notes d'étude personnelles. » (préférence de l'utilisateur).
  3. Vignette : 1920×1080, sans sous-titres ; générée par la composition cover-epK de tech-explainer-video.
  4. Envoyez-la à l'utilisateur pour vérification (SendUserFile). Demandez : la vignette, si un lien vers le code (GitHub/Gist) est nécessaire, et le nom de la collection.

Bilibili

Outil : dreammis/social-auto-upload (installé dans ~/tools/social-auto-upload). La soumission proprement dite utilise l'outil biliup téléchargé automatiquement par cet outil.

Première installation (informez d'abord l'utilisateur de la source, du contenu et de la taille, attendez son accord avant d'installer) :

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

Connexion (l'utilisateur exécute dans son propre terminal, choisit « Connexion par scan de code » dans le menu, scanne avec l'application Bilibili ; si le code QR n'est pas entièrement affiché, ouvrez qrcode.png) :

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

Ne choisissez pas la connexion par SMS : elle nécessite de passer un captcha de type curseur et de copier manuellement un challenge, qui expire facilement. Vérifiez la connexion : .venv/bin/sau bilibili check --account <nom_du_compte>. Si la sortie est valid, c'est bon.

Téléchargement :

  1. Testez d'abord les lignes : tools/probe_lines.sh, prenez la ligne la plus rapide (généralement tx ou bda2). Ne laissez pas biliup tester automatiquement la vitesse, cela peut bloquer si un proxy est utilisé.
  2. Soumettez un par un :
    ~/.claude/skills/video-publish/tools/bili_upload.sh <nom_du_compte> out/ep1.mp4 out/covers/ep1.jpg tx 231 "<titre>" "<description>" "<tags,séparés_par_des_virgules>"
    
    Le script convertit les chemins en chemins absolus (il cd dans social-auto-upload en interne). Utilisez des chemins relatifs dans le répertoire du projet vidéo. En cas de succès, il affiche Soumission réussie BVxxxx lien. En cas d'échec, il affiche la fin du journal. Transmettez les épisodes un par un dans l'ordre. Après chaque épisode, informez l'utilisateur du numéro BV.
  3. Après tous les téléchargements, rappelez à l'utilisateur : dans le Centre de création, créez une collection « Gestion des collections » et ajoutez les vidéos dans l'ordre. Elles ne seront publiques qu'après approbation.

Dépannage réseau :

  • Téléchargement très lent, error sending request, connection reset, erreur 500 du serveur : probablement dû au fait que le proxy TUN achemine le trafic via des nœuds à l'étranger. Demandez à l'utilisateur d'ajouter DOMAIN-SUFFIX,bilibili.com,DIRECT et DOMAIN-SUFFIX,bilivideo.com,DIRECT en haut des règles de proxy, puis de recharger la configuration ; réexécutez probe_lines.sh. Si la vitesse ne dépasse pas quelques centaines de Ko/s, ne téléchargez pas.
  • Voir la progression : nettop -p <pid_biliup> -L 1 -x -J bytes_out. Les journaux de biliup n'affichent presque rien avant la fin du téléchargement. Ne présumez pas un blocage en l'absence de journaux.
  • La commande timeout n'existe pas sur macOS.
  • Si le téléchargement de biliup par sau échoue lors de la première exécution (accès lent aux Releases GitHub) : utilisez https://gh-proxy.com/ ou https://gh-proxy.org/ devant l'URL de la release pour télécharger manuellement.
  • Avant de retélécharger, vérifiez d'abord que la soumission précédente n'a pas réussi (vérifiez la présence d'un bvid dans les journaux) pour éviter les soumissions en double.

Bilibili : Limites de soumission et vidéos multipistes

  • Environ 7 nouvelles soumissions par jour. Au-delà, l'erreur 21566 Soumissions trop fréquentes apparaît. Attendez le lendemain. Compilez chaque chapitre en une seule vidéo multipiste (biliup upload transfère plusieurs fichiers en une fois ; les noms de fichiers deviennent les titres des pistes. Utilisez des liens durs out/parts/P<k> <titre_de_l'épisode>.mp4 pour économiser de l'espace).
  • Pour ajouter des pistes à une vidéo existante, utilisez biliup append --vid BV…. Cela n'utilise pas le quota de nouvelles soumissions.
  • Maximum 12 tags. Tronquez au-delà. Testez d'abord les lignes avec probe_lines.sh. La ligne bldsa a déjà rencontré des certificats expirés ; en cas d'échec, utilisez tx/bda2.
  • Exemple de script de file d'attente : tools/examples/upload_chapters.sh (réessaye toutes les heures en cas d'erreur 21566, jusqu'à 24 fois ; en cas de succès, écrit - Résultat : BV… P<k> dans upload_meta.md).

Bilibili : Ajout à des vidéos existantes (collection de séries, testé avec la base de connaissances d'octobre-novembre 2026)

  • Une série = une vidéo multipiste. Chaque nouvel article est ajouté avec biliup append --vid BV…. Ne créez pas de nouvelle soumission (surtout si l'utilisateur a explicitement demandé de ne pas en créer).
  • Exemple de script de file d'attente tools/examples/upload_append.sh : chaque ligne app <nom> <BV> <répertoire_du_projet>. Ajoutez les fichiers out/parts/*.mp4 dans l'ordre.
    • Idempotent : en cas de succès, il écrit <nom> append <BV> <date> dans results.log. Une nouvelle exécution saute automatiquement les entrées déjà traitées (« déjà ajouté »). Pour un nouveau lot, ajoutez simplement de nouvelles lignes à la fin et réexécutez l'ensemble.
    • Rotation des lignes : alia → tx → bda2. Si les trois échouent, attendez 30 minutes et réessayez, jusqu'à 48 cycles. Le critère de succès est la présence de Modification de la soumission réussie dans la sortie.
    • Lancez avec nohup <script> > upload_kbN.log 2>&1 & disown. Les journaux sont numérotés par lot. Créez une boucle until en arrière-plan qui attend que « File d'attente terminée » apparaisse dans les journaux.
    • Échec courant : client error (Connect) : fluctuation de ligne. Le script réessaie automatiquement. N'intervenez pas manuellement (cela créerait des pistes en double).
  • Les titres des pistes sont les noms de fichiers : out/parts/P<k> <accroche> : <sujet>.mp4 (liens durs vers out/epK.mp4, ne consomment pas d'espace).
  • append ne peut pas modifier la description. Pour chaque lot, écrivez un paragraphe « Complément de description » dans upload_meta.md, puis ajoutez une note « À faire par l'auteur » dans le tableau de bord, afin que l'utilisateur puisse la coller manuellement à la fin de la description d'origine dans le Centre de création.
  • Les versions dans d'autres langues (par exemple, une version doublée en anglais) ne doivent pas être ajoutées à des soumissions en chinois. L'utilisateur décide où les publier.

YouTube

  • Outil : le même sau (sau youtube login/upload-video, doit être --headed ; Google n'autorise pas l'accès à Studio en mode headless). L'outil de téléchargement YouTube intégré à sau a deux bugs, corrigés dans tools/examples/sau-youtube-fixes.patch : la vérification de connexion ne dure que 3 secondes et utilise le mode headless (fausse indication d'invalidité) ; le sélecteur de playlist clique sur le mauvais élément (les playlists ne sont jamais ajoutées, et l'exception est avalée). Appliquez ce patch après l'installation de sau sur une nouvelle machine.
  • Les playlists doivent d'abord être créées dans Studio (sinon --playlist ne fonctionne pas). Après le téléchargement, vérifiez un épisode pour confirmer qu'il est dans la playlist. Sinon, allez dans la page d'édition vidéo de Studio pour l'ajouter.
  • Il y a une limite quotidienne de téléchargement. Si « Bouton de publication introuvable » apparaît ou si la vidéo reste en brouillon, la limite est probablement atteinte. Ne retéléchargez pas (cela créerait des brouillons en double). Allez dans Studio pour finaliser et publier les brouillons, puis téléchargez le reste le lendemain.
  • Exemple de script de file d'attente : tools/examples/youtube_queue.sh (pour les longues files d'attente, utilisez nohup … & disown ; les tâches d'arrière-plan d'une session peuvent être récupérées).
  • Solution API (sans navigateur) : youtubeuploader (brew install youtubeuploader) + tools/examples/youtube_api_upload.sh. Prérequis : projet Google Cloud avec YouTube Data API v3 activée, écran de consentement OAuth (externe, avec utilisateur test ajouté), identifiants d'application Web (callback http://localhost:8080/oauth2callback). Pour les projets non vérifiés, les vidéos téléchargées via l'API sont verrouillées en mode privé. Le formulaire de vérification https://support.google.com/youtube/contact/yt_api_form nécessite une page d'accueil publique, une politique de confidentialité et des conditions d'utilisation (exemple : GitHub Pages, cassieliang6709/video-uploader), des captures d'écran de la page d'accueil et de la politique de confidentialité, des captures d'écran du flux OAuth, un diagramme d'architecture, un diagramme de flux utilisateur et le script de téléchargement complet. Continuez à utiliser l'automatisation du navigateur en attendant la vérification.

Douyin / Kuaishou / Xiaohongshu

Outil : le même social-auto-upload avec sau douyin|kuaishou|xiaohongshu, automatisation du navigateur (patchright). L'utilisateur exécute les commandes dans son propre terminal (voir les règles absolues). Claude prépare uniquement les commandes et vérifie les résultats.

Vidéos : ces trois plateformes privilégient le format portrait. Recommandé : 1080×1920 ou des extraits d'environ 1 minute. Si nécessaire, revenez à tech-explainer-video pour générer une version portrait. Le format paysage fonctionne aussi, mais avec des bandes noires.

Première installation du navigateur (exécutée par l'utilisateur) :

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

Connexion et vérification (exécutées par l'utilisateur, <plateforme> est douyin / kuaishou / xiaohongshu) :

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

Téléchargement (Claude remplit la commande complète selon upload_meta.md et l'envoie à l'utilisateur. L'utilisateur confirme le contenu, puis exécute) :

cd ~/tools/social-auto-upload && .venv/bin/sau <plateforme> upload-video --account <nom_du_compte> \
  --file <chemin_absolu_mp4> --title "<titre>" --desc "<corps_du_texte>" --tags <tags,séparés_par_des_virgules> \
  [--thumbnail <vignette>] [--schedule "YYYY-MM-DD HH:MM"] [--collection <nom_de_la_collection_existante>]
  • Douyin : --thumbnail doit être au format portrait 3:4. Il existe également --thumbnail-landscape (4:3). Le titre ne doit pas dépasser 30 caractères.
  • Kuaishou : --thumbnail peut être dans n'importe quel format. Le script ne remplit que les 3 premiers tags. Placez les plus importants en premier.
  • Xiaohongshu : le titre ne doit pas dépasser 20 caractères. --collection n'est pas pris en charge.
  • L'utilisateur colle la sortie du terminal après l'exécution. Claude détermine si l'opération a réussi et écrit le lien dans upload_meta.md. Si un captcha de type curseur apparaît, l'utilisateur le gère lui-même.
  • Pour Douyin, publier un chapitre entier sous forme de collection complète (tous les épisodes fusionnés dans out/chapter.mp4, avec une vignette paysage 4:3) est plus facile à gérer que de publier épisode par épisode. Exemple de script de file d'attente : tools/examples/douyin_upload_all.sh (l'utilisateur exécute dans son terminal ; la vérification de connexion utilise le mode avec interface DOUYIN_COOKIE_AUTH_HEADLESS=false).

Alternative (si l'utilisateur ne souhaite pas utiliser de script) : dans le navigateur Chrome où l'utilisateur est déjà connecté, ouvrez la page de publication du centre de création, aidez l'utilisateur à sélectionner le fichier, à remplir le titre et le corps du texte, puis faites une capture d'écran juste avant le bouton de publication. L'utilisateur clique lui-même sur « Publier ».

Pipeline par lots (uniquement avec autorisation explicite de l'utilisateur)

L'utilisateur peut donner une autorisation à long terme pour une série : « une fois le rendu d'un lot terminé → téléchargez directement → supprimez les fichiers sources » (par exemple, pour la série Algorithmes illustrés de nudgecode, autorisation donnée le 24 octobre 2026). Cette autorisation ne couvre que la série spécifiée par l'utilisateur. Tout changement de série ou de plateforme nécessite une nouvelle demande. Dans le cadre de l'autorisation :

  1. Une fois le rendu de chaque chapitre de ce lot terminé, rédigez automatiquement le titre, la description et les tags selon le format de upload_meta.md existant de la série (la description commence toujours par « Notes d'étude personnelles. » et ne contient que ce qui est dans la vidéo). Ne présentez plus chaque élément à l'utilisateur un par un. Vérifiez tout de même la connexion avec sau bilibili check et choisissez la ligne avec probe_lines.sh.
  2. Téléchargez dans l'ordre (par chapitre, puis par épisode). Après chaque chapitre, listez dans la conversation les « Épisode / Titre / Lien ». Écrivez le numéro BV dans upload_meta.md.
  3. Supprimez uniquement les épisodes pour lesquels un numéro BV a été obtenu : out/epK.mp4, out/*.raw.mp4, out/check/, out/bundle/ (ainsi que le node_modules propre au projet ; ne touchez pas aux liens symboliques partagés). Conservez le code source, le doublage, les fichiers SRT, la vignette et upload_meta.md pour un éventuel rendu futur. Ne supprimez jamais les épisodes dont le téléchargement a échoué.
  4. Si la commande de suppression est bloquée par des autorisations, donnez la commande telle quelle à l'utilisateur pour qu'il l'exécute lui-même. Ne contournez pas le problème avec d'autres méthodes.

Nettoyage

  • Ne supprimez les fichiers sources qu'après avoir obtenu les liens sur toutes les plateformes cibles. La suppression est souvent bloquée par les autorisations. Écrivez-la dans un script que l'utilisateur exécute. Exemple : tools/examples/cleanup_uploaded.sh (ne supprime que les épisodes pour lesquels un résultat figure dans upload_meta.md ; peut être exécuté plusieurs fois).

Enregistrement

Après la publication, écrivez le numéro BV de chaque épisode dans la colonne « Résultat » de out/upload_meta.md. Liste dans la conversation un tableau « Épisode / Titre / Lien ».

Individual skills in this repo

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

Skills associés