Playbook de automatización

Publica en 4 redes sin tocar nada.

Guía general para subir reels verticales a Instagram, TikTok, YouTube y Facebook a la vez — y programarlos por semanas. Upload-Post como pasarela, Google Drive sirviendo los videos.

Programados
0
3/día · 4 redes
Redes
0
IG · TikTok · YT · FB
Semanas
0
en piloto automático
Duplicados
0
cola verificada
Publicaciones por semana0
Próximos slots
10:00Bohemian Rhapsody
17:00En el Muelle de San Blas
22:00Hotel California
Una sola subida → cuatro plataformas
InstagramTikTokYouTubeFacebook+ Shorts / Reels
◆

Resultados en 3 días

Lo que generaron estos reels en Instagram entre el 28 y el 30 de junio. 100% del alcance vino de Reels.

Visualizaciones
0
en 3 días
Cuentas alcanzadas
0
personas únicas
Seguidores
0
y subiendo
Desde Reels
0
todo el alcance
Top reels por visualizaciones
El clásico que explotó
Amor Eterno26,5 mil
Every Breath You Take3,2 mil
La Bamba2,4 mil
El Rey1,8 mil
Pumped Up Kicks1,7 mil
★

Empieza aquí

4 pasos para dejar tu canal listo. Marca cada uno y te lleva al siguiente. Tus avances se guardan en este navegador.

0/5 completados
  1. 1 Localiza la carpeta de tus videos Paso 1

    Pega aquí la ruta de la carpeta donde están tus .mp4 finales (verticales, ya editados).

    Se guarda solo en tu navegador.
  2. 2 Conecta tu Google Drive a Claude Paso 2

    Conecta el conector de Google Drive en Claude (conectores / adjuntar) y prepara la carpeta:

    • aCrea una carpeta en Google Drive (p. ej. "Reels").
    • bHazla pública → Compartir → "Cualquiera con el enlace → Lector". Si está privada, Upload-Post no puede descargar los videos.
    • cCopia el link de la carpeta y pégalo aquí abajo.
    Déjala pública hasta que salga todo lo programado.
  3. 3 Crea tu cuenta en Upload-Post Paso 3

    Regístrate en Upload-Post, entra a API Keys y copia tu key. Pégala aquí.

    Se guarda solo en tu navegador.
  4. 4 Conecta tus redes Paso 4

    Dentro de Upload-Post, conecta por OAuth cada red donde quieras publicar. Marca las que ya conectaste:

    Instagram TikTok YouTube Facebook
    Instagram debe ser cuenta profesional/creador.
  5. 5 Sube esta receta a Claude Code y observa la magia Paso 5

    Descarga tu receta.md — ya lleva tu ruta, tu API key, tus redes y todo el proceso paso a paso. Ábrela en Claude Code (en la carpeta de tu proyecto) y escribe: "sigue la receta y publica". Claude subirá los videos a Drive, escribirá los copies y los programará en tus redes. ✨

    Incluye tu configuración + la guía completa.

¡Listo! Ya tienes tu receta.

Carpeta localizada · Drive conectado · Upload-Post listo · redes enlazadas · receta descargada.

Ábrela en Claude Code y escribe "sigue la receta y publica".

Ver la guía completa ↓
00

El flujo, de principio a fin

Los videos viven en una carpeta pública de Drive; a Upload-Post le pasas una URL por video y él lo descarga y publica en las 4 redes.

01
Videos finales
Verticales 1080×1920, <3 min, +faststart
02
Google Drive
Carpeta pública · URL directa por archivo
03
Upload-Post
Descarga el video y lo publica
04
4 redes
IG · TikTok · YouTube · Facebook
Por qué Drive y no subir el archivo directo

El servidor corta la subida a los ~60 s. Un .mp4 de 30–80 MB desde una conexión casera no alcanza a subir en ese tiempo. Pasando una URL de Drive, la descarga la hace Upload-Post desde su servidor (rápido), sin límite de 60 s y con calidad original.

01

Requisitos previos

Configuración de una sola vez.

  • 1Cuenta + API key de Upload-Post. Guárdala en apikey.txt. Toda llamada lleva Authorization: Apikey <KEY>.
  • 2Perfil + redes por OAuth. Crea un perfil (parámetro user) y conecta IG, TikTok, YouTube y Facebook. Instagram debe ser cuenta profesional/creador.
  • 3Carpeta de Drive pública — "Cualquiera con el enlace → Lector". Si está privada, el server cae en el login de Google. Mantenla pública hasta que salga lo programado.
  • 4rclone con un remoto Drive (root_folder_id = tu carpeta). El token OAuth se auto-renueva.
  • 5Node.js (trae fetch/FormData), ffmpeg/ffprobe y curl.

Verificar redes conectadas

curl -s -H "Authorization: Apikey $KEY" \
  https://api.upload-post.com/api/uploadposts/users
# → profiles[].social_accounts con cada red, su handle y reauth_required
02

Preparar videos y subirlos a Drive

Vertical 9:16 (1080×1920), <3 min, mp4 H.264 + AAC con +faststart.

Medir un video

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height -show_entries format=duration \
  -of default=noprint_wrappers=1 "video.mp4"
# ffprobe también funciona sobre una URL (lee por rangos HTTP)

Subir con rclone y obtener el File ID

export RCLONE_CONFIG="/ruta/rclone.conf"
rclone copyto "local/Cancion_FINAL.mp4" "gdrive:Cancion_FINAL.mp4" --drive-chunk-size 32M
# Mismo nombre = actualiza el archivo y conserva el mismo File ID (clave para reemplazos)

rclone lsf gdrive: --files-only --format "ip"   # imprime  <id>;<nombre>

Validar la URL (sin gastar cuota)

# URL directa:  https://drive.google.com/uc?export=download&id=<FILE_ID>
curl -sL "https://drive.google.com/uc?export=download&id=<ID>" \
  -o probe.bin -r 0-1048576 -w "%{content_type}\n"
# Debe dar video/mp4. Si da text/html → la carpeta NO es pública.
03

Copy, portada y publicación

El endpoint que lo hace todo, con sus campos.

El caption

Estilo limpio: Canción, de Artista: mensaje corto. 🎭

O con hashtags: gancho + emoji + 3 hashtags (artista, canción, género).

Portada sin frame negro

thumb_offset = el milisegundo de portada. Regla: duración×1000÷2 (cuadro intermedio). No aplica a TikTok.

Trampa · título de YouTube ≤ 100

Upload-Post usa tu title como título del video de YouTube, y YouTube rechaza títulos >100 (HTTP 400). Manda un youtube_title aparte (≤100); solo afecta a YouTube.

POST /api/upload

CampoValor
usertu perfil
platform[]uno por red (repite el campo)
videoURL de Drive (string, sin @)
titlecaption (IG/TikTok/FB)
youtube_title≤100 para YouTube
thumb_offsetms de portada
async_uploadtrue
scheduled_dateISO-8601 c/offset (omitir = ya)
timezoneAmerica/Mexico_City

Script en Node (maneja acentos, emojis y comillas)

import fs from 'fs';
const KEY = fs.readFileSync('apikey.txt','utf8').trim();
const DRIVE = id => `https://drive.google.com/uc?export=download&id=${id}`;

async function schedule(v){        // {platforms, thumb_ms, caption, yt, id, date}
  const fd = new FormData();
  fd.append('user','mi_canal');
  for(const p of v.platforms.split(';')) fd.append('platform[]', p);
  fd.append('async_upload','true');
  fd.append('thumb_offset', String(v.thumb_ms));
  fd.append('title', v.caption);
  fd.append('youtube_title', v.yt);           // ≤100 chars
  fd.append('video', DRIVE(v.id));
  fd.append('scheduled_date', v.date);
  fd.append('timezone','America/Mexico_City');
  const r = await fetch('https://api.upload-post.com/api/upload',
    { method:'POST', headers:{ Authorization:`Apikey ${KEY}` }, body: fd });
  return (await r.json()).request_id;    // guárdalo en tu CSV
}
Dos trucos

· Escribe los scripts como archivo, no con here-docs de bash (los emojis/apóstrofes rompen <<EOF). · Guarda el CSV tras cada envío para no perder request_id si hay timeout.

04

Calendario y cobertura

Cadencia fija, sin duplicados, todo a Shorts.

Pipeline de un lote
De la PC a las 4 redes
Videos finales
Subidos a Drive
Programados (API)
Publicados
Formato del video
Todo entra a Shorts
0%verticales <3 min

YouTube marca como Short automáticamente si el video es vertical (9:16) y dura menos de 3 min. No hay parámetro: es por formato + duración.

Verificar y detectar duplicados

Cadencia p. ej. 3/día a las 10:00, 17:00 y 22:00. La API guarda en UTC (10:00 −06:00 = 16:00Z). Cada programado trae su job_id (≠ request_id).

curl -s -H "Authorization: Apikey $KEY" "…/api/uploadposts/schedule?limit=100"
# .scheduled_posts[] → job_id, scheduled_date, title. Agrupa por canción:
# si aparece 2+ veces, sobran → DELETE de los duplicados.
05

Gestionar los programados

Cancelar, editar y reemplazar sin romper YouTube.

DELETE Cancelar

curl -X DELETE -H "Authorization: Apikey $KEY" \
  "…/api/uploadposts/schedule/<job_id>"

PATCH Editar

curl -X PATCH "…/schedule/<job_id>" \
  -H "Content-Type: application/json" \
  -H "Authorization: Apikey $KEY" \
  -d '{"title":"…","scheduled_date":"…"}'
⚠ PATCH aplica el título a TODAS las plataformas

Solo acepta title, caption, scheduled_date, timezone — no youtube_title. El título se aplica también a YouTube: si el caption pasa de 100, fallará al publicar. Usa PATCH solo para la fecha o captions ≤100.

Cancelar + recrear (vía segura)

  • 1DELETE el programado viejo.
  • 2POST de nuevo con misma fecha/portada + title largo + youtube_title corto.
  • 3Guarda el nuevo request_id; verifica total y 0 duplicados.
06

Reemplazar un re-render

Al programar, Upload-Post descarga y cachea el video. Cambiar solo el archivo en Drive no actualiza el post.

  • 1Sobrescribe en Drive (mismo nombre → mismo File ID).
  • 2Confirma que la URL entrega el archivo nuevo (Content-Length cambió).
  • 3Cancela el programado viejo y recréalo → descarga la versión nueva.
07

Reformatear en lote

Para cambiar el estilo de todas las captions: recorre GET /schedule. Si el cambio no toca YouTube o queda ≤100 → PATCH; si supera 100 → cancelar + recrear con youtube_title corto.

Reanudable

Guarda el CSV tras cada uno y agrega un guard ("si ya tiene la caption nueva, omite") para reejecutar sin duplicar tras un timeout.

08

Errores comunes y solución

SíntomaCausaSolución
content_type=text/htmlCarpeta de Drive privadaCompartir "Cualquiera con el enlace → Lector"
HTTP 400 YouTube title too longCaption >100 como título YTMandar youtube_title ≤100 aparte
La subida corta a los 60 sSubida lenta + límite del serverUsar URL de Drive
Salió el video viejo tras re-renderSe cacheó al programarCancelar + recrear
Misma canción publicada 2 vecesDuplicados en la colaGET /schedule → DELETE sobrantes
Portada negraFrame 0 negrothumb_offset = dur×1000÷2
bash: "unexpected EOF"Apóstrofes/emojis en here-docEscribir el script como archivo
Node no halla /tmp/xWindows lo resuelve a C:\tmpUsar rutas del directorio de trabajo
09

Checklist de un lote

  • 1Videos 1080×1920, <3 min, +faststart.
  • 2rclone copyto a Drive público.
  • 3File IDs + validar 1–2 URLs.
  • 4ffprobe duración → thumb_offset.
  • 5Caption + youtube_title (≤100).
  • 6Cadencia + scheduled_date.
  • 7POST; guardar request_id.
  • 8GET /schedule: 0 duplicados.
  • 9Drive público hasta el último programado.
10

Endpoints

MétodoEndpoint
POST/api/upload
GET/…/users
GET/…/status?request_id=
GET/…/history
GET/…/schedule?limit=100
PATCH/…/schedule/<job_id>
DELETE/…/schedule/<job_id>

Base https://api.upload-post.com · header Authorization: Apikey <KEY>