Saltar al contenido principal
SocialCutter

IA y agentes

Automatiza el recorte de imágenes con Make

Monta un escenario de Make que reciba una imagen y genere todas sus medidas con SocialCutter: Create JSON, cabecera X-API-Key y uso de las salidas.

  • Make
  • Integromat
  • no-code
  • automatización
  • módulo HTTP
  • SocialCutter
  • API key

Por qué automatizar el recorte en Make

Una imagen maestra alimenta Instagram, LinkedIn, X y la portada del blog, y cada hueco pide una proporción distinta. Hacerlo a mano no escala cuando publicas a diario o el catálogo tiene cientos de productos.

Make encaja porque ya vigila dónde aparecen imágenes nuevas y porque sus módulos HTTP y JSON permiten hablar con cualquier API REST sin escribir código. SocialCutter recorta la imagen de forma centrada a las medidas exactas de cada destino y devuelve una URL por salida; el escenario de Make mueve esa URL al sitio que toca. El encuadre es centrado y predecible.

Cómo funciona la API

La API REST vive en https://api.socialcutter.theboomer.dev y la autenticación va en la cabecera X-API-Key (también vale Authorization: Bearer sc_tu_clave).

  • POST /api/v1/images/process — recibe una imagen y devuelve una salida por destino.
  • POST /api/v1/images/upload — acepta la imagen como cadena base64 en el cuerpo JSON.
  • POST /api/v1/images/process/upload — multipart con el fichero en file y destinations como campo de formulario.
  • POST /api/v1/images/batch — varias imágenes en una sola llamada.
  • GET /api/v1/history, GET /api/v1/wallet, GET /api/v1/platforms — historial, cuota y catálogo real de destinos.

La referencia completa está en https://docs.socialcutter.theboomer.dev.

Make y el binario: la diferencia con el multipart

El módulo HTTP → Make a request puede enviar multipart/form-data, pero necesita el fichero como binario real de un módulo anterior (por ejemplo Google Drive → Download a file) y el campo destinations como cadena JSON. Depende entonces de dos cosas frágiles: que el binario llegue íntegro y que el JSON vaya bien escapado. La vía que funciona siempre es no enviar binario:

  1. Pasar la URL pública del fichero en el campo source del cuerpo JSON. Es la recomendada y la que usa esta guía.
  2. Usar base64 con POST /api/v1/images/upload, cuando el origen no expone una URL accesible.

Si de verdad necesitas subir el fichero, usa POST /api/v1/images/process/upload con el tipo de cuerpo multipart/form-data, el campo file alimentado por el binario del módulo de origen y destinations como texto JSON. Prueba ese camino aparte antes de ponerlo en producción.

Crear la API key

Entra en https://dash.socialcutter.theboomer.dev, abre Perfil → API keys, crea una clave con un nombre reconocible (por ejemplo make-produccion) y cópiala: empieza por sc_ y solo se muestra una vez. En Make guárdala como variable de entorno del escenario o como conexión, no pegada en el texto de un módulo.

Componer el cuerpo con Create JSON

El cuerpo real de una petición es este:

{
  "source": { "type": "url", "value": "https://example.com/foto.jpg" },
  "destinations": [
    { "platform": "instagram", "format": "post" },
    { "platform": "linkedin", "format": "post" },
    { "platform": "twitter", "format": "post" }
  ],
  "options": { "fit_mode": "cover" }
}

En Make, el módulo JSON → Create JSON evita escribir el texto a mano y escapa las comillas: añade source (objeto con type y value) y destinations (array con un objeto platform + format por destino). Si prefieres pegar el JSON, usa el tipo de cuerpo Raw en el módulo HTTP con Content-Type: application/json, pero revisa las comillas: una sin escapar devuelve 422.

source acepta url o base64 y destinations es la lista de plataforma y formato. fit_mode: cover escala y recorta el exceso de forma centrada (el valor por defecto); para encajar la imagen completa, usa contain con background_color.

Destinos que acepta la API

PlataformaFormatoMedidasRelación
instagrampost1080x10801:1
instagramstory1080x19209:16
instagramlandscape1080x5661.91:1
facebookpost1200x6301.91:1
facebookstory1080x19209:16
facebookcover820x3122.63:1
twitterpost1200x67516:9
twitterheader1500x5003:1
linkedinpost1200x6271.91:1
linkedincover1128x1915.9:1
youtubethumbnail1280x72016:9
youtubebanner2560x144016:9
tiktokcover1080x19209:16

Estos datos salen de GET /api/v1/platforms, que es público. El catálogo no incluye un formato 4:5.

La llamada con el módulo HTTP

En el módulo HTTP → Make a request:

  • URL: https://api.socialcutter.theboomer.dev/api/v1/images/process
  • Method: POST
  • Headers: X-API-Key = sc_tu_clave, y Content-Type = application/json si envías el JSON como Raw. Añade Idempotency-Key con un id estable del fichero para que un reintento no duplique trabajo.
  • Body type: Raw (o application/json), con el JSON del módulo Create JSON. Con multipart/form-data, el campo file lleva el binario y destinations va como texto.

Comprueba la respuesta en crudo antes de montar el escenario:

curl -s -X POST "https://api.socialcutter.theboomer.dev/api/v1/images/process" \
  -H "X-API-Key: sc_tu_clave" \
  -H "Content-Type: application/json" \
  -d '{"source":{"type":"url","value":"https://example.com/foto.jpg"},"destinations":[{"platform":"instagram","format":"post"}]}' \
  | jq '.image_id, (.outputs[] | {url, platform, format, width, height})'

Leer la respuesta y usarla después

La respuesta trae image_id y un array outputs, una entrada por destino, con la URL, la plataforma, el formato y las medidas. Para usarla después:

  1. JSON → Parse JSON sobre el cuerpo de la respuesta convierte image_id y outputs en campos enlazables.
  2. Flow Control → Iterator sobre outputs recorre una salida por ciclo.
  3. En cada ciclo, una HTTP → Get a file descarga la URL si necesitas el binario, o pasa la URL al módulo de destino.

Encadenar a un CMS o a un almacenamiento

  • WordPress: sube la salida a la biblioteca de medios (POST /wp-json/wp/v2/media) y asigna el id del adjunto a featured_media del post.
  • Shopify: usa el campo image del producto con la URL de la salida.
  • Almacenamiento: el módulo de subida necesita binario; descarga la salida primero con un paso HTTP GET y luego súbela. Si no acepta el binario, deja que el CMS descargue la URL.

Límites del plan

  • Máximo 5 MB por imagen; por encima la API responde 413.
  • 1 uso por destino (plataforma y formato) por petición. Los destinos repetidos no se cobran dos veces y los procesamientos fallidos se devuelven.
  • Cuota diaria por plan: Free (0 €) 3 usos/día, Basic (3 €) 10/día, Pro (9 €) 30/día, Agency (29 €) 100/día. Todos incluyen API y MCP.
  • En Make, cada módulo consume una operación de tu plan: un Iterator gasta una por elemento.

Errores típicos

CódigoSignificado
401Falta la cabecera X-API-Key o la clave es incorrecta
429Cuota agotada: superaste los usos diarios de tu plan
413La imagen supera 5 MB
422Error de validación: source o destinations mal formados, o JSON roto
400Payload inválido: plataforma o formato desconocido

Coste por petición

1 uso por destino. Un escenario que pida Instagram post, LinkedIn post y X post consume 3 usos por imagen. Si el disparador recibe ráfagas, agrupa antes de llamar o usa POST /api/v1/images/batch. Consulta GET /api/v1/wallet para ver la cuota diaria.

Siguientes pasos

Preguntas frecuentes

¿Hace falta una app de SocialCutter en Make?

No. Se usa el módulo HTTP → Make a request, que viene de serie, o los módulos de JSON para componer y leer el cuerpo. SocialCutter es una API REST y basta con la URL, la cabecera X-API-Key y un cuerpo JSON.

¿Cómo compongo el cuerpo en Make sin equivocarme con las comillas?

Con el módulo JSON → Create JSON: añades los campos source y destinations como elementos y Make escapa las comillas por ti. Si escribes el cuerpo a mano, cualquier comilla sin escapar rompe el JSON.

¿Por qué evitar el multipart en Make?

El módulo HTTP puede enviar multipart/form-data, pero necesita un binario real de un módulo anterior y el campo destinations como texto JSON. Es más frágil que enviar la URL pública del fichero en el campo source, que es la vía que funciona siempre.

¿Cómo uso la respuesta en módulos posteriores?

Con un módulo JSON → Parse JSON sobre el cuerpo de la respuesta para convertir el array outputs en datos enlazables, y después un Iterator para recorrerlo y guardar cada URL.

¿Cuánto cuesta cada operación?

1 uso por destino, es decir por cada combinación de plataforma y formato. Un escenario que pida Instagram post y LinkedIn post consume 2 usos de tu cuota diaria de SocialCutter.