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 /scheduleDELETE 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>