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 enfileydestinationscomo 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:
- Pasar la URL pública del fichero en el campo
sourcedel cuerpo JSON. Es la recomendada y la que usa esta guía. - 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
| Plataforma | Formato | Medidas | Relación |
|---|---|---|---|
| post | 1080x1080 | 1:1 | |
| story | 1080x1920 | 9:16 | |
| landscape | 1080x566 | 1.91:1 | |
| post | 1200x630 | 1.91:1 | |
| story | 1080x1920 | 9:16 | |
| cover | 820x312 | 2.63:1 | |
| post | 1200x675 | 16:9 | |
| header | 1500x500 | 3:1 | |
| post | 1200x627 | 1.91:1 | |
| cover | 1128x191 | 5.9:1 | |
| youtube | thumbnail | 1280x720 | 16:9 |
| youtube | banner | 2560x1440 | 16:9 |
| tiktok | cover | 1080x1920 | 9: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, yContent-Type=application/jsonsi envías el JSON como Raw. AñadeIdempotency-Keycon un id estable del fichero para que un reintento no duplique trabajo. - Body type:
Raw(oapplication/json), con el JSON del módulo Create JSON. Conmultipart/form-data, el campofilelleva el binario ydestinationsva 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:
- JSON → Parse JSON sobre el cuerpo de la respuesta convierte
image_idyoutputsen campos enlazables. - Flow Control → Iterator sobre
outputsrecorre una salida por ciclo. - 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 afeatured_mediadel post. - Shopify: usa el campo
imagedel producto con la URL de la salida. - Almacenamiento: el módulo de subida necesita binario; descarga la salida primero con un paso HTTP
GETy 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ódigo | Significado |
|---|---|
| 401 | Falta la cabecera X-API-Key o la clave es incorrecta |
| 429 | Cuota agotada: superaste los usos diarios de tu plan |
| 413 | La imagen supera 5 MB |
| 422 | Error de validación: source o destinations mal formados, o JSON roto |
| 400 | Payload 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
- Guía de n8n: Automatiza el recorte con n8n
- Guía de la API con curl: Procesa imágenes desde la terminal
- Guía de Python: Automatiza SocialCutter con Python
- Guía de WordPress: Integra SocialCutter con WordPress y WooCommerce
- Documentación de la API: https://docs.socialcutter.theboomer.dev
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.