Publicación de videos (Bilibili / YouTube / Douyin / Kuaishou / Xiaohongshu)
Reglas de hierro
- Antes de cada publicación, presenta al usuario una tabla con: plataforma, cuenta, archivo, portada, título, descripción, etiquetas, categoría y método de publicación. Solo ejecuta cuando el usuario diga explícitamente "publicar". El usuario puede aprobar varios a la vez (por ejemplo, "publicar EP2–EP4"), pero solo cubre los que se listaron en ese momento y su contenido; cualquier cambio requiere una nueva confirmación.
- El inicio de sesión solo lo puede hacer el usuario (escaneo de código QR en terminal). No ingreses nombres de usuario, contraseñas, números de teléfono o códigos de verificación en lugar del usuario. No leas ni imprimas el contenido de las cookies.
- Las subidas a Douyin, Kuaishou y Xiaohongshu se basan en patchright (un navegador que oculta las huellas de automatización). El usuario decide usarlo, pero es el usuario quien debe ejecutar los comandos de subida en su propia terminal: Claude se encarga de preparar el comando completo y la información de la publicación, pero no ejecuta el inicio de sesión ni la carga de estas plataformas, ni resuelve los captchas de deslizamiento por el usuario.
Preparación
- Antes de publicar, revisa la lista de cumplimiento en
references/plotome-lessons.mdde tech-explainer-video: marca "Contiene contenido generado por IA" (incluso si la narración es IA), incluye la atribución de música y licencias en la descripción, no uses rostros humanos reales ni marcas comerciales. - Redacta
out/upload_meta.mdsiguiendo la plantillareferences/upload-meta-template.md. La descripción solo debe incluir contenido que realmente aparezca en el video, comenzando con "自用学习笔记。" (preferencia del usuario). - Portada: 1920×1080, sin subtítulos; generada por la composición
cover-epKde tech-explainer-video. - Envía al usuario para revisión (SendUserFile): pregunta sobre la portada, si necesita enlaces al código (GitHub/Gist) y el nombre de la colección.
Bilibili
Herramienta: dreammis/social-auto-upload (instalado en ~/tools/social-auto-upload), las publicaciones reales usan biliup que se descarga automáticamente con él.
Primera instalación (informa al usuario sobre la fuente, el contenido y el tamaño; espera su consentimiento antes de instalar):
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
Inicio de sesión (el usuario lo ejecuta en su terminal, selecciona "Iniciar sesión con código QR" en el menú y escanea con la aplicación de Bilibili; si el código QR no se muestra completo, abre qrcode.png):
cd ~/tools/social-auto-upload && .venv/bin/sau bilibili login --account <nombre_de_cuenta>
No selecciones inicio de sesión por SMS: requiere resolver un captcha de deslizamiento y copiar manualmente el challenge, lo que caduca fácilmente y falla.
Verifica el inicio de sesión: .venv/bin/sau bilibili check --account <nombre_de_cuenta>, la salida debe ser valid.
Subida:
- Primero prueba las líneas:
tools/probe_lines.sh, elige la más rápida (normalmentetxobda2). No dejes que biliup mida automáticamente la velocidad, se atascará si hay un proxy. - Publica cada video por separado:
El script convierte las rutas a rutas absolutas (internamente hace cd a social-auto-upload); puedes usar rutas relativas desde el directorio del proyecto de video. En caso de éxito, imprime~/.claude/skills/video-publish/tools/bili_upload.sh <nombre_de_cuenta> out/ep1.mp4 out/covers/ep1.jpg tx 231 "<título>" "<descripción>" "<etiquetas,separadas por comas>"投稿成功 BVxxxx 链接; en caso de error, imprime el final del registro. Si hay múltiples episodios, súbelos uno por uno en orden; informa al usuario del BV después de cada uno. - Después de subir todo, recuerda al usuario: en el Centro de Creadores, ve a "Administración de colecciones" para crear una colección y agregar los episodios en orden; el video se hará público solo después de la revisión.
Solución de problemas de red:
- Carga muy lenta,
error sending request,connection reset, error 500 del servidor: probablemente el proxy TUN está enrutando el tráfico a nodos internacionales. Pide al usuario que agregueDOMAIN-SUFFIX,bilibili.com,DIRECTyDOMAIN-SUFFIX,bilivideo.com,DIRECTal principio de las reglas del proxy y recargue la configuración; luego vuelve a ejecutarprobe_lines.sh; la velocidad debe estar por encima de unos cientos de KB/s antes de subir. - Para ver el progreso:
nettop -p <pid_de_biliup> -L 1 -x -J bytes_out. biliup casi no genera registros hasta que termina la subida, no asumas que está atascado por falta de logs. - macOS no tiene el comando
timeout. - Si la primera ejecución de sau falla al descargar biliup (acceso lento a GitHub Releases): usa
https://gh-proxy.com/ohttps://gh-proxy.org/añadido delante de la URL de release para descargar manualmente. - Antes de reintentar una subida, confirma que la anterior no tuvo éxito (busca
bviden los logs) para evitar duplicados.
Bilibili: Límite de subidas y episodios múltiples (P)
- Cada día se permiten aproximadamente 7 nuevos envíos. Superar el límite devuelve
21566 投稿过于频繁y hay que esperar al día siguiente. Cada capítulo se publica como un video con múltiples partes (P) (biliupuploadsube varios archivos a la vez; los nombres de archivo son los títulos de las partes. Usa enlaces durosout/parts/P<k> <título_del_episodio>.mp4para ahorrar espacio). - Para agregar partes a un video existente, usa
biliup append --vid BV…, que no consume la cuota diaria de nuevos envíos. - Máximo 12 etiquetas; si se superan, se truncan. Primero prueba las líneas con
probe_lines.sh;bldsaha presentado certificados caducados, si falla, cambia atx/bda2. - Script de ejemplo para cola:
tools/examples/upload_chapters.sh(reintenta cada hora hasta 24 veces si aparece el error 21566; en caso de éxito, escribe- 结果:BV… P<k>en upload_meta.md).
Bilibili: Agregar a un video existente (colección de serie, probada con la base de conocimientos de octubre a noviembre de 2026)
- Toda la serie se publica como un solo video con múltiples partes (P); cada artículo posterior se agrega con
biliup append --vid BV…; no crees un nuevo video (especialmente cuando el usuario diga explícitamente que no lo haga). - Script de ejemplo para cola:
tools/examples/upload_append.sh: cada líneaapp <nombre> <BV> <directorio_del_proyecto>, agrega secuencialmenteout/parts/*.mp4.- Idempotente: escribe
<nombre> append <BV> <fecha>enresults.log; al ejecutarse de nuevo, omite automáticamente ("已追加过"). Por lo tanto, para un nuevo lote, solo agrega líneas al final y vuelve a ejecutar el script completo. - Rotación de líneas: alia → tx → bda2. Si las tres fallan, espera 30 minutos y reintenta, hasta 48 rondas; el éxito se determina si la salida contiene
稿件修改成功. - Inicia con
nohup <script> > upload_kbN.log 2>&1 & disown; los logs se numeran por lote. Inicia otro bucle en segundo plano que espera hasta que aparezca "队列完成" en el log. - Error común
client error (Connect): fluctuación de la línea; el script reintentará automáticamente, no reintentes manualmente (crearía partes duplicadas).
- Idempotente: escribe
- Los títulos de las partes (P) son los nombres de archivo:
out/parts/P<k> <gancho>:<tema>.mp4(enlace duro aout/epK.mp4, no ocupa espacio adicional). appendno puede modificar la descripción: escribe un párrafo "简介补充" en upload_meta.md por lote, y luego agrega una nota "待作者" en el tablero para que el usuario la pegue manualmente al final de la descripción del video original en el Centro de Creadores.- Las versiones en otros idiomas (por ejemplo, doblaje en inglés) no deben agregarse a un video en chino; el usuario decide dónde publicarlas.
YouTube
- Herramienta: el mismo sau (
sau youtube login/upload-video, obligatorio--headed; el modo sin cabeza no permite entrar a YouTube Studio). El cargador de YouTube de sau tiene dos errores, corregidos entools/examples/sau-youtube-fixes.patch: la verificación de inicio de sesión espera solo 3 segundos y usa modo sin cabeza (falso positivo de inválido); el selector de listas de reproducción hace clic incorrecto (las listas nunca se añaden y la excepción se traga). Después de instalar sau en una máquina nueva, aplica este parche primero. - Las listas de reproducción deben crearse primero en Studio (de lo contrario,
--playlistno funciona); después de la subida, verifica un episodio al azar para asegurarte de que esté en la lista; si no, ve a la página de edición del video en Studio para agregarlo manualmente. - Hay un límite diario de subidas: si aparece "未找到发布按钮" o el video se queda en borrador, probablemente se alcanzó el límite. No vuelvas a subir (dejarías borradores duplicados). Ve a Studio para completar los borradores y publicarlos; sube el resto al día siguiente.
- Script de ejemplo para cola:
tools/examples/youtube_queue.sh(para colas largas, usanohup … & disown; las tareas en segundo plano de la sesión se reciclan). - Alternativa con API (sin abrir navegador): youtubeuploader (
brew install youtubeuploader) +tools/examples/youtube_api_upload.sh. Requisitos previos: Proyecto de Google Cloud con YouTube Data API v3 habilitada, pantalla de consentimiento OAuth (externa, agregar usuarios de prueba), credenciales de aplicación web (callbackhttp://localhost:8080/oauth2callback). Los proyectos no verificados bloquearán todos los videos subidos por la API como privados; el formulario de verificación https://support.google.com/youtube/contact/yt_api_form requiere una página de inicio, política de privacidad y términos de servicio públicos (puedes usar GitHub Pages, ejemplo cassieliang6709/video-uploader), capturas de pantalla de la página de inicio/política de privacidad, capturas de pantalla del flujo OAuth, diagrama de arquitectura, diagrama de flujo de usuario y script de carga completo. Hasta la verificación, continúa usando la automatización del navegador.
Douyin / Kuaishou / Xiaohongshu
Herramienta: el mismo social-auto-upload con sau douyin|kuaishou|xiaohongshu, automatización del navegador (patchright).
Los comandos los ejecuta el usuario en su propia terminal (consulta las reglas de hierro); Claude solo prepara los comandos y verifica los resultados.
Video: estas tres plataformas se orientan principalmente a pantalla vertical; se recomienda 1080×1920 o cortar a unos 1 minuto de contenido destacado; si es necesario, vuelve a tech-explainer-video para renderizar una versión vertical. El formato horizontal también se puede subir, pero tendrá bordes negros.
Primera instalación del navegador (lo ejecuta el usuario):
cd ~/tools/social-auto-upload && PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright" .venv/bin/patchright install chromium
Inicio de sesión y verificación (lo ejecuta el usuario, <plataforma> es douyin / kuaishou / xiaohongshu):
cd ~/tools/social-auto-upload && .venv/bin/sau <plataforma> login --account <nombre_de_cuenta> --headed
.venv/bin/sau <plataforma> check --account <nombre_de_cuenta>
Subida (Claude completa el comando completo según upload_meta.md y lo envía al usuario; el usuario confirma el contenido y lo ejecuta):
cd ~/tools/social-auto-upload && .venv/bin/sau <plataforma> upload-video --account <nombre_de_cuenta> \
--file <ruta_absoluta_del_mp4> --title "<título>" --desc "<cuerpo>" --tags <etiquetas,separadas por comas> \
[--thumbnail <portada>] [--schedule "YYYY-MM-DD HH:MM"] [--collection <nombre_de_colección_existente>]
- Douyin:
--thumbnaildebe ser vertical 3:4; también existe--thumbnail-landscape(4:3); el título no debe exceder 30 caracteres. - Kuaishou:
--thumbnailde cualquier proporción; el script solo rellena las primeras 3 etiquetas, pon las más importantes al principio. - Xiaohongshu: el título no debe exceder 20 caracteres; no admite
--collection. - Después de que el usuario ejecute el comando, debe pegar la salida de la terminal; Claude determina si la subida fue exitosa y escribe el enlace en upload_meta.md. Si aparece un captcha de deslizamiento, el usuario lo resuelve por sí mismo.
- Para Douyin, es mejor publicar un capítulo completo como una colección (unir todos los episodios en
out/chapter.mp4, con portada horizontal 4:3) que episodio por episodio para facilitar la gestión; script de ejemplo para cola:tools/examples/douyin_upload_all.sh(el usuario lo ejecuta en su terminal; la verificación de inicio de sesión usa modo con interfazDOUYIN_COOKIE_AUTH_HEADLESS=false).
Alternativa (si no se quiere usar el script): abre la página de publicación de la plataforma de creadores en Chrome donde el usuario ya haya iniciado sesión, selecciona el archivo, rellena el título y el cuerpo, y deja el cursor en el botón de publicar. Toma una captura de pantalla y el usuario hace clic en "publicar".
Pipeline por lotes (solo con autorización explícita del usuario)
El usuario puede dar una autorización a largo plazo para una serie: "cuando termine de renderizar un lote, súbelo directamente y elimina el archivo final" (por ejemplo, la serie nudgecode algoritmo ilustrado, autorizada el 24 de octubre de 2026). Esta autorización solo cubre la serie que el usuario haya mencionado; cambiar de serie o plataforma requiere volver a preguntar. Dentro del alcance de la autorización:
- Después de renderizar cada capítulo de este lote, escribe el título, la descripción y las etiquetas según el formato de upload_meta.md ya existente para esa serie (la descripción aún debe comenzar con "自用学习笔记。" y solo incluir contenido del video),
sin necesidad de mostrar cada elemento al usuario por separado; aún así, primero verifica el inicio de sesión con
sau bilibili check, y selecciona la línea conprobe_lines.sh. - Sube por capítulo y por episodio en orden. Después de subir cada capítulo, enumera en la conversación "episodio / título / enlace" y escribe el BV en upload_meta.md.
- Solo elimina el episodio que haya obtenido un BV:
out/epK.mp4,out/*.raw.mp4,out/check/,out/bundle/(y los node_modules de ese proyecto, no toques los enlaces simbólicos compartidos). Conserva el código fuente, la narración, los archivos srt, la portada y upload_meta.md para posibles re-renderizados futuros. Los episodios que no se hayan subido correctamente no se eliminan bajo ninguna circunstancia. - Si el comando de eliminación es bloqueado por permisos, pasa el comando exacto al usuario para que lo ejecute; no uses otro método para evitarlo.
Limpieza
- El archivo final solo se elimina después de obtener enlaces en todas las plataformas objetivo; la eliminación suele ser bloqueada por permisos; escribe un script y pásalo al usuario para que lo ejecute. Ejemplo:
tools/examples/cleanup_uploaded.sh(solo elimina los episodios que tienen resultados en upload_meta.md; se puede ejecutar varias veces).
Registro
Después de publicar, escribe el BV de cada episodio en la columna "resultado" de out/upload_meta.md y enumera en la conversación una tabla con "episodio / título / enlace".