2Slides Logo
Automatiza Presentaciones de Informes de Marketing: API Deck to Video (2026)
2Slides Team
19 min read

Automatiza Presentaciones de Informes de Marketing: API de Deck a Video (2026)

Para automatizar presentaciones de informes de marketing, ejecuta un cron de lunes que extraiga métricas de campañas, pida a un LLM una narrativa de 8 diapositivas y llame a tres endpoints de 2Slides: create-pdf-slides para un deck resumen diseñado con imágenes en formato 16:9, generate-narration en modo multi para una pista de dos voces, y download-slides-pages-voices para archivos PNG y WAV por página que ffmpeg une en un MP4. Un deck de 8 páginas en 2K cuesta 810 créditos (unos $2), la narración añade 1,680 créditos (unos $4.20), por lo que un resumen semanal narrado ronda los $6 por cliente. Creado para operaciones de marketing, ingenieros de crecimiento y agencias.

Puntos clave

  • Un trabajo programado reemplaza el ritual del lunes: exportación de métricas, deck resumen de 8 diapositivas, voz en off de dos hablantes y un MP4 1920×1080.
  • Tres endpoints de 2Slides hacen el trabajo: create-pdf-slides (10 + 100 créditos por página a 2K), generate-narration (210 créditos por página) y download-slides-pages-voices (gratis).
  • Un resumen narrado de 8 diapositivas cuesta 2,490 créditos, aproximadamente entre $5 y $6.25 según el paquete de créditos; solo el deck cuesta 810 créditos.
  • Cada endpoint de escritura está limitado a 6 solicitudes por minuto por clave, así que una ejecución para 50 clientes debe encolarse, no lanzarse en paralelo.
  • Fast PPT (generate) no puede narrarse; para video, comienza con create-pdf-slides o create-like-this.

Para quién es esto

Líderes de operaciones de marketing que reconstruyen el mismo deck resumen cada lunes, ingenieros de crecimiento que ya tienen las métricas en un warehouse, y agencias que deben entregar una actualización semanal a 20, 50 o más clientes. El problema es el mismo: los números están listos a las 6 a.m., el deck a la hora del almuerzo, y la mitad de los interesados nunca lo abre.

No uses esta receta si los interesados necesitan editar las diapositivas en PowerPoint después; la tubería diseñada con imágenes produce un PDF final más imágenes por página, no un PPTX nativo. Para decks semanales editables, la ruta Fast PPT en Automatiza informes semanales con Zapier y 2Slides es más adecuada.

El flujo de trabajo de un vistazo

PasoHerramientaQué sucedeEndpoint 2Slides / créditos
1. DisparadorCron (GitHub Actions, Cloud Scheduler, cron en VM)Se ejecuta lunes 06:00 en la zona horaria del clienteninguno
2. Extraer métricasGoogle Ads, Meta, exportación GA4 o consulta SQL en warehouseUn objeto JSON por cliente: gasto, plan, conversiones, CPA, canales top, creatividades topninguno
3. Escribir narrativaTu LLM preferidoDevuelve 8 secciones tituladas: resultado principal, gasto vs plan, canales top, creatividades ganadoras, notas de audiencia, tests, riesgos, plan para la próxima semananinguno
4. Generar deck2SlidesDeck diseñado con imágenes 16:9 en 2K con tu designStyle de marcaPOST /api/v1/slides/create-pdf-slides, 810 créditos por 8 páginas
5. Añadir narración2SlidesDos hablantes alternan en el deckPOST /api/v1/slides/generate-narration, 1,680 créditos por 8 páginas
6. Descargar activos2SlidesZIP con pages/page_01.png, voices/page_01.wav y transcript.txtPOST /api/v1/slides/download-slides-pages-voices, gratis
7. Montar y entregarffmpeg en tu worker, o Workspace ExportMP4 H.264 publicado en Slack, email o portal clienteffmpeg: gratis; Workspace Generate Video: 20 créditos por página

Cada llamada a 2Slides usa el mismo encabezado Authorization: Bearer $SLIDES_API_KEY, y cada trabajo asíncrono se consulta en GET /api/v1/jobs/{jobId}.

Paso 1: Obtén una clave API y configura el programador

Crea una clave en 2slides.com/api en la pestaña API Keys. Las cuentas nuevas reciben 500 créditos gratis sin suscripción, suficientes para ejecutar esta tubería una vez completa antes de comprar un paquete. Guarda la clave como SLIDES_API_KEY en el almacén secreto de tu programador, nunca en un navegador ni en un notebook compartido, y confirma con el endpoint echo antes de programar nada.

curl -s https://2slides.com/api/v1/echo \ -H "Authorization: Bearer $SLIDES_API_KEY"

Referencia API de 2Slides con autenticación Bearer
Figura 1: La referencia API en 2slides.com/api lista todos los endpoints, el encabezado Bearer y los costos en créditos.

Para el disparador, un workflow de GitHub Actions con on: schedule: - cron: "0 6 * * 1" es suficiente para unos pocos clientes. Para 50 o más, pon a los clientes en una cola y deja que un worker los procese secuencialmente, manteniéndote bajo el límite de 6 solicitudes por minuto con margen para reintentos.

Paso 2: Extrae las métricas y deja que un LLM escriba la narrativa de 8 diapositivas

La API de 2Slides no sabe qué debe decir un buen resumen semanal; esa parte es tuya y determina la calidad del deck. Extrae los números de la semana pasada desde tus plataformas de anuncios o warehouse en un objeto JSON plano por cliente, luego pide a tu LLM que devuelva exactamente ocho secciones tituladas:

  1. Resultado principal: un número, una frase ("CPA bajó 18% semana a semana con gasto estable").
  2. Gasto vs plan: real, planeado, variación, ritmo al mes.
  3. Canales top: tres canales con gasto, conversiones, CPA y cambio.
  4. Creatividades ganadoras: dos o tres anuncios que mejor convirtieron y por qué.
  5. Notas de audiencia y geografía: qué cambió.
  6. Tests en curso: hipótesis, estado, fecha de lectura.
  7. Riesgos y bloqueos: límites presupuestarios, brechas de seguimiento, estacionalidad.
  8. Plan para la próxima semana: tres puntos con responsables.

Pide frases claras con números en línea y menos de 60 palabras por sección. create-pdf-slides trata tu texto como fuente de verdad para copia y diseño, así que una narrativa limpia de 400 a 500 palabras produce un deck más ajustado que un volcado de 3,000 palabras con todas las métricas.

// narrative.mjs: da forma a la salida del LLM antes de enviarla a 2Slides export function toUserInput(client, sections) { const header = `Resumen semanal de medios pagados para ${client.name}, semana del ${client.week}. ` + `Audiencia: ${client.stakeholders}. Tono: directo, números primero.`; const body = sections .map((s, i) => `Diapositiva ${i + 1}: ${s.title}\n${s.body}`) .join("\n\n"); return `${header}\n\n${body}`; }

Paso 3: Automatización del deck del informe de campaña con create-pdf-slides

Envía la narrativa a create-pdf-slides. Configura page: 8 para que el número de diapositivas coincida con tus ocho secciones, aspectRatio: "16:9" para pantallas, y resolution: "2K" para que los PNG mantengan calidad a 1920×1080 sin reescalado. designStyle es donde vive tu marca: colores, tipo, reglas de diseño y qué evitar.

curl -s https://2slides.com/api/v1/slides/create-pdf-slides \ -H "Authorization: Bearer $SLIDES_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "userInput": "Resumen semanal de medios pagados para Northwind Outdoor, semana del 2026-09-01 al 2026-09-07. Audiencia: CMO y líder ecommerce. Tono: directo, números primero.\n\nDiapositiva 1: Resultado principal\nEl CPA bajó 18% a $31.40 con gasto estable de $48,200; 1,535 compras vs. 1,301 la semana anterior.\n\nDiapositiva 2: Gasto vs plan\nPlaneado $50,000, gastado $48,200 (-3.6%). Ritmo mensual al 97% del plan.\n\nDiapositiva 3: Canales top\nMeta $22,100 gasto, 812 compras, $27.20 CPA (-22%). Google Search $18,400, 571 compras, $32.20 CPA (-9%). YouTube $7,700, 152 compras, $50.66 CPA (+4%).\n\nDiapositiva 4: Creatividades ganadoras\nVideo UGC \"Trail-ready en 3 capas\": 334 compras, CTR 3.1%. Estático \"Venta de otoño, devoluciones gratis\": 218 compras.\n\nDiapositiva 5: Notas de audiencia y geografía\nDMAs del Noroeste Pacífico suben 31% en compras; mujeres 25-34 ahora 41% de conversiones en Meta.\n\nDiapositiva 6: Tests en curso\nTargeting amplio vs. intereses en Meta, día 9 de 14, lectura el 12 de septiembre. Test de exclusión de marca en Search pausado por arreglo de seguimiento.\n\nDiapositiva 7: Riesgos y bloqueos\nLos conteos de compras en GA4 y Meta divergen 11%; CPA de YouTube subiendo dos semanas seguidas.\n\nDiapositiva 8: Plan próxima semana\nMover $3,000 de YouTube a Meta UGC (responsable: Priya). Lanzar dos variantes nuevas de UGC (responsable: Sam). Cerrar brecha de etiquetado GA4 para miércoles (responsable: Dev).", "designStyle": "Marca Northwind Outdoor: verde bosque profundo #1F3D2B, arena #E8DCC4, blanco; titulares sans-serif geométricos y audaces; un número grande por diapositiva; tarjetas de datos limpias y comparaciones simples de barras; márgenes generosos; sin fotos de stock, sin degradados", "aspectRatio": "16:9", "resolution": "2K", "page": 8, "contentDetail": "concise", "imageModel": "gemini-3-pro-image", "responseLanguage": "English", "mode": "async" }'

La respuesta es { "jobId": "..." }. Consulta GET https://2slides.com/api/v1/jobs/{jobId} cada 5 a 10 segundos hasta que status sea success (el PDF está en downloadUrl) o failed. Espera unos minutos para ocho páginas en 2K. Costo: 10 créditos de planificación más 100 por página, total 810 créditos para el deck de 8 páginas.

Página de diapositivas diseñadas con Nano Banana de 2Slides, la tubería detrás de create-pdf-slides
Figura 2: La tubería diseñada con imágenes detrás de Nano Banana presentation slides es lo que create-pdf-slides expone vía API.

Para igualar una diapositiva de marca existente en lugar de una descripción textual, cambia a create-like-this con referenceImageUrl apuntando a una imagen pública de una diapositiva de marca. El cuerpo, costo y límites son idénticos.

Paso 4: Dos hablantes con la API de presentación en video narrado

Cuando el trabajo del deck reporte success, llama a generate-narration con el mismo jobId. Usa mode: "multi" con dos hablantes nombrados y dos de las 30 voces disponibles; Kore y Puck están lo suficientemente diferenciados para que los oyentes sigan quién habla sin pista visual. includeIntro: true añade una breve introducción que nombra al cliente y la semana.

curl -s https://2slides.com/api/v1/slides/generate-narration \ -H "Authorization: Bearer $SLIDES_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jobId": "<jobId del deck del paso 3>", "mode": "multi", "speaker1Name": "Maya", "speaker2Name": "Theo", "speaker1Voice": "Kore", "speaker2Voice": "Puck", "contentMode": "standard", "includeIntro": true }'

El endpoint responde con 202 y el trabajo vuelve a processing. Consulta el mismo jobId hasta que retorne success otra vez. La narración cuesta 210 créditos por página (10 para el guion, 200 para el audio), es decir, 1,680 créditos para ocho diapositivas. Para guía sobre longitud y ritmo del guion, consulta Mejores prácticas para narración y video de diapositivas.

Una comparación común: el sitio para desarrolladores de Gamma (https://developers.gamma.app) documenta una receta de video narrado que encadena n8n, Synthesia, ElevenLabs y su propia API Generate, y sus claves requieren plan Pro. La ruta 2Slides arriba usa un solo proveedor y una clave que funciona en cualquier cuenta, con ffmpeg en tu lado para ensamblar; no produce un avatar presentador como hace una capa Synthesia. Divulgación: 2Slides es nuestro producto.

Paso 5: Convierte el informe semanal de marketing a video con ffmpeg

Llama a download-slides-pages-voices con el mismo jobId. Devuelve un ZIP gratuito con pages/page_01.png hasta page_08.png, voices/page_01.wav hasta page_08.wav y transcript.txt con el guion hablado para subtítulos o resumen por email.

curl -s https://2slides.com/api/v1/slides/download-slides-pages-voices \ -H "Authorization: Bearer $SLIDES_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jobId": "<jobId del deck>" }' \ -o recap.zip && unzip -q -o recap.zip -d recap

Luego une cada PNG con su WAV y concatena. Este comando genera un MP4 H.264 1920×1080 donde cada diapositiva permanece en pantalla exactamente el tiempo de su narración:

cd recap && for i in $(seq -w 1 8); do ffmpeg -y -loop 1 -i pages/page_$i.png -i voices/page_$i.wav -c:v libx264 -tune stillimage -pix_fmt yuv420p -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -c:a aac -b:a 192k -shortest clip_$i.mp4; done && printf "file 'clip_%s.mp4'\n" $(seq -w 1 8) > list.txt && ffmpeg -y -f concat -safe 0 -i list.txt -c copy weekly-recap.mp4

El demuxer concat al final está documentado en la referencia de formatos de ffmpeg. Para un corte vertical, cambia ambos valores 1920:1080 a 1080:1920 y regenera el deck con aspectRatio: "9:16".

¿No tienes worker con ffmpeg? Abre el mismo trabajo en 2Slides Workspace y usa Exportar, luego Generar Video. Renderiza el MP4 H.264 a 1920×1080 o 1080×1920 en el navegador por 20 créditos por página (160 para un resumen de 8 diapositivas). Eso sirve para un caso puntual; ffmpeg sirve para 50 clientes cada lunes.

Paso 6: La tubería Node.js para automatizar presentaciones de informes de marketing

Todo en un script Node 20 sin dependencias más allá de fetch. Reemplaza loadMetrics y writeNarrative con tu consulta al warehouse y llamada al LLM.

// weekly-recap.mjs: Node 20+, ejecuta desde tu cron de lunes import { writeFile } from "node:fs/promises"; import { execFile } from "node:child_process"; import { promisify } from "node:util"; import { toUserInput } from "./narrative.mjs"; import { loadMetrics, writeNarrative } from "./your-data-layer.mjs"; const BASE = "https://2slides.com"; const headers = { Authorization: `Bearer ${process.env.SLIDES_API_KEY}`, // solo servidor "Content-Type": "application/json", }; const sleep = (ms) => new Promise((r) => setTimeout(r, ms)); const run = promisify(execFile); async function post(path, body) { const res = await fetch(`${BASE}${path}`, { method: "POST", headers, body: JSON.stringify(body) }); if (!res.ok) throw new Error(`${path} -> ${res.status}: ${await res.text()}`); return res.json(); } async function waitForJob(jobId, everyMs = 8000) { for (;;) { const res = await fetch(`${BASE}/api/v1/jobs/${jobId}`, { headers }); const job = await res.json(); console.log(` job ${jobId}: ${job.status} ${job.progress ?? ""}`); if (job.status === "success") return job; if (job.status === "failed") throw new Error(`job ${jobId} failed: ${job.message ?? ""}`); await sleep(everyMs); // consulta cada 5–10 s; jobs/{id} permite 10 req/min } } export async function buildRecap(client) { // 1) métricas -> narrativa de 8 secciones const metrics = await loadMetrics(client); const sections = await writeNarrative(client, metrics); // 2) deck diseñado con imágenes: 10 + 100 créditos/página a 2K const { jobId } = await post("/api/v1/slides/create-pdf-slides", { userInput: toUserInput(client, sections), designStyle: client.designStyle, aspectRatio: "16:9", resolution: "2K", page: 8, contentDetail: "concise", responseLanguage: client.language ?? "English", mode: "async", }); const deck = await waitForJob(jobId); console.log("deck PDF:", deck.downloadUrl); // 3) narración de dos hablantes: 210 créditos/página await post("/api/v1/slides/generate-narration", { jobId, mode: "multi", speaker1Name: "Maya", speaker2Name: "Theo", speaker1Voice: "Kore", speaker2Voice: "Puck", contentMode: "standard", includeIntro: true, }); await waitForJob(jobId); // 4) PNG + WAV por página (gratis) -> MP4 con ffmpeg const zipRes = await fetch(`${BASE}/api/v1/slides/download-slides-pages-voices`, { method: "POST", headers, body: JSON.stringify({ jobId }), }); if (!zipRes.ok) throw new Error(`descarga fallida: ${zipRes.status}`); const zipPath = `out/${client.slug}.zip`; await writeFile(zipPath, Buffer.from(await zipRes.arrayBuffer())); await run("bash", ["./stitch.sh", zipPath, `out/${client.slug}-recap.mp4`]); // el loop ffmpeg del paso 5 return { jobId, pdf: deck.downloadUrl, video: `out/${client.slug}-recap.mp4` }; } // Procesa clientes uno a uno: 3 POST por cliente mantiene bajo 6 req/min const clients = JSON.parse(process.env.CLIENTS_JSON ?? "[]"); for (const client of clients) { try { const out = await buildRecap(client); console.log(`terminado ${client.name}`, out); } catch (err) { console.error(`FALLÓ ${client.name}:`, err.message); // alerta, no reintentar ciegamente } }

Cada cliente consume tres solicitudes de escritura (deck, narración, descarga) más lecturas de polling en un límite separado de 10 solicitudes por minuto.

Elegir un estilo de referencia

Si describir tu marca en designStyle no funciona, usa una imagen de referencia. La Galería 2Slides aloja decks reales que puedes explorar para inspiración o pasar a create-like-this como referenceImageUrl. Son decks de referencia, no salida API: las diapositivas abajo provienen de un deck Adobe Creative Trends 2026 en la Galería y muestran un estilo sobrio, enfocado en datos, que funciona bien en un resumen semanal.

Deck de referencia Adobe Creative Trends 2026 de la Galería 2Slides, referencia de estilo para decks de resumen de marketing
Figura 3: Diapositiva de portada del deck de referencia Adobe Creative Trends 2026 en la Galería 2Slides.

Deck de referencia Adobe Creative Trends 2026 de la Galería 2Slides, referencia de estilo para decks de resumen de marketing
Figura 4: Diapositiva interior del mismo deck de la Galería. Pasa una diapositiva así como referenceImageUrl y create-like-this extrae colores, tipografía y diseño.

Galería 2Slides de decks listos para descargar
Figura 5: La Galería 2Slides. Abre un deck y copia la URL de imagen de la diapositiva cuyo estilo quieres heredar.

Para agencias, guarda una URL de diapositiva de referencia por cliente junto a su configuración de métricas, y cada deck semanal se mantiene en el sistema visual de ese cliente.

Cuánto cuesta

Por resumen de 8 diapositivas: 810 créditos para el deck 2K, 1,680 para narración, nada por el ZIP ni por ffmpeg en tu worker. Los paquetes de créditos van desde $5 por 2,000 créditos ($0.0025 cada uno) hasta $80 por 40,000 créditos ($0.002 cada uno).

VolumenCréditos deckCréditos narraciónCréditos totalesUSD a $0.0025USD a $0.002 ($80 paquetes)
1 resumen narrado8101,6802,490$6.23$4.98
20 resúmenes / mes (5 campañas semanales)16,20033,60049,800$124.50$99.60
500 resúmenes / mes (125 clientes semanales)405,000840,0001,245,000n/a$2,490
20 decks / mes, sin narración16,200016,200$40.50$32.40

Dos notas. Bajar a resolution: "1K" no ahorra nada (100 créditos por página aplica a 512px, 1K y 2K; solo 4K lo duplica), así que mantente en 2K. Renderizar el MP4 en Workspace en lugar de ffmpeg añade 160 créditos ($0.32 a $0.40) por resumen.

Fast PPT o diapositivas diseñadas con imágenes para este caso

NecesidadFast PPT generatecreate-pdf-slides / create-like-this
Los interesados editan el deck en PowerPointSí, PPTX nativo desde 1,500+ plantillasNo, salida es PDF más imágenes por página
Video para ver en lugar de leer con voz en offNo, no hay narración disponibleSí, generate-narration y luego MP4
Costo para 8 páginas80 créditos (unos $0.20)810 créditos deck, 2,490 con narración
Tiempo de respuestaUnos 30 segundos, sincronizado por defectoUnos minutos, asíncrono por defecto
Control de marcaElige un themeId de GET /api/v1/themes/searchTexto libre designStyle o referenceImageUrl

Muchos equipos usan ambos: un deck Fast PPT para el gestor de cuentas que lo anota, y el video narrado para el cliente que lo ve en el móvil. Cómo los equipos de marketing generan decks AI a escala cubre el lado editable en profundidad.

Errores comunes

  • Lanzar 50 clientes en paralelo. Cada endpoint de escritura permite 6 solicitudes por minuto por clave. Encola clientes y procesa secuencialmente, o reparte envíos a lo largo de la hora.
  • Llamar a generate-narration en un trabajo Fast PPT. La narración solo acepta trabajos de create-pdf-slides o create-like-this; un trabajo generate es rechazado y no puede convertirse.
  • Poner la clave API en un dashboard de navegador. Mantén SLIDES_API_KEY en el servidor o en el almacén secreto del programador. Si una página para clientes necesita el video, sirve el MP4 que ya renderizaste.
  • Usar page: 0 cuando quieres exactamente ocho diapositivas. 0 significa detectar automáticamente el número de páginas. Pon page: 8 para que cada video semanal tenga la misma forma y duración.
  • Pasar un código de idioma. responseLanguage acepta un nombre como "Spanish", no "es". Guarda el nombre en la configuración de cada cliente.
  • Enviar la exportación cruda de métricas. Un CSV de 3,000 filas pegado en userInput produce un deck confuso. Resume primero, entrega una narrativa de 400 a 500 palabras y conserva el CSV como adjunto.

Preguntas Frecuentes

¿Cuánto cuesta automatizar un informe semanal de marketing como video narrado?

Un resumen narrado de 8 diapositivas cuesta 2,490 créditos, entre $4.98 y $6.23 según el paquete de créditos. Se desglosa en 810 créditos para el deck 2K diseñado con imágenes (10 de planificación más 100 por página) y 1,680 créditos para narración de dos voces (210 por página). La descarga PNG y WAV por página es gratis, y el ensamblaje con ffmpeg en tu máquina no añade costo.

¿Puede una API de voz AI para diapositivas usar dos voces diferentes en un mismo deck?

Sí. generate-narration con mode: "multi" recibe speaker1Name, speaker2Name, speaker1Voice y speaker2Voice, y alterna los dos hablantes por diapositiva. Hay 30 voces disponibles, incluyendo Kore, Puck, Zephyr, Charon, Aoede y Leda. Usa mode: "single" con speakerName y voice cuando un solo narrador es suficiente, al mismo costo de 210 créditos por página.

¿Qué endpoints necesita una tubería API para presentaciones en video narrado?

Tres, en orden: POST /api/v1/slides/create-pdf-slides (o create-like-this con referenceImageUrl) para diseñar el deck, POST /api/v1/slides/generate-narration con el jobId resultante para añadir audio, y POST /api/v1/slides/download-slides-pages-voices para obtener los pares PNG y WAV. Consulta GET /api/v1/jobs/{jobId} cada 5 a 10 segundos entre pasos. El generate de Fast PPT no forma parte de esta cadena porque no puede narrarse.

¿Puedo entregar el mismo informe semanal en varios idiomas?

Sí. Configura responseLanguage en create-pdf-slides con un nombre de idioma como "Spanish" o "Japanese" y el texto de las diapositivas se escribe en ese idioma; la narración sigue el contenido. Se soportan más de 20 idiomas. Cada idioma es un trabajo de deck separado, así que un cliente que quiera videos en inglés y español paga dos ejecuciones de 2,490 créditos.

¿Cuánto tarda la tubería del lunes por cliente?

Calcula varios minutos por cliente: un deck 2K de 8 páginas tarda unos minutos en renderizar, la narración suma unos minutos más, y el ensamblaje con ffmpeg suele ser menos de un minuto para ocho clips. Consultar cada 5 a 10 segundos y procesar clientes uno a uno respeta el límite de 6 solicitudes por minuto, y una ejecución para 50 clientes iniciada a las 06:00 normalmente termina antes del primer stand-up.

Próximos pasos

About 2Slides

Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.

Try For Free