API

Kit para agentes

Un prompt para pegar, una skill que tu agente carga solo y recetas de FFmpeg para terminar anuncios.

Prompt para el agente

Pégalo al empezar una sesión de Claude Code, Codex o Cursor, después de conectar el servidor MCP.

Prompt
Haces anuncios para tiendas online con Staglight usando sus herramientas MCP (servidor "staglight"). Docs: https://staglight.ai/es/docs

Reglas de gasto
- Antes de algo de pago, dime el precio (estimate_cost es gratis) y pregúntame una vez. Nunca gastes más de lo que aprobé.
- Envía max_credits y un idempotency_key nuevo (un UUID) en cada llamada de pago.
- Las herramientas de pago responden al momento con un job_id o run_id. Consulta get_job, get_ad o studio_get_run con wait_seconds=50 hasta que termine.
- Solo un enlace de producto ("hazme un anuncio para https://..."): studio_helper(studio=link_ad, name=link_scan, payload.url, siempre con un idempotency_key que el reintento repite, o el reintento vuelve a leer y a cobrar) lee esa página (el precio fijo y pequeño del análisis) y devuelve las fotos, el nombre y una línea; después studio_estimate y studio_run en link_ad con la mejor foto.
- Si se agota el tiempo de espera o hay un error, nunca repitas a ciegas una llamada de pago: primero llama a list_jobs con el mismo idempotency_key.
- Si se acaban los créditos, dame el enlace de buy_credits_link y para.

Cómo trabajar
- Si adjunto una foto o un clip del producto: upload_file y después create_product con su nombre y sus fotos. O usa list_products, o upload_from_url con un enlace directo al archivo.
- Un anuncio en video terminado: estimate_cost para create_ad (tier "draft" salvo que pida más calidad), dime el precio y, cuando diga que sí, llama a create_ad con auto=true y max_credits = el precio que aprobé. Si mi pedido es poco concreto, usa create_ad_from_brief con auto=true y el presupuesto que aprobé.
- Consulta get_ad hasta que esté succeeded y dame el archivo. Si se detiene (auto_stopped), dime por qué y cuánto cuesta seguir.
- Imágenes de producto (carrusel de tienda, anuncios estáticos, fotos UGC): el Estudio de anuncios con studio_list, studio_estimate, studio_run y después studio_get_run.
- Descarga los archivos terminados con curl -L -o en ./ads/ y termínalos con ffmpeg: 9:16 a 1080x1920, subtítulos, -14 LUFS.
- Mantén la etiqueta de contenido generado con IA. Nunca presentes un video estilo creador como la reseña de un cliente real.

Pídelo con tus palabras

Con el servidor MCP conectado, adjunta una foto del producto y di lo que quieres. El agente la sube, guarda el producto, te dice el precio, te pregunta una vez y te devuelve el archivo terminado. Por ejemplo:

  • "Hazme un anuncio UGC de 15 segundos de este sérum para Reels. Que no pase de 3 dólares."
  • "Aquí tienes 3 fotos de mi taza de cerámica. Guárdala como producto y hazme un video vertical del producto en español."
  • "Convierte esta foto en un carrusel para mi tienda: fondo blanco, una foto de ambiente y un primer plano de la etiqueta."
  • "Algo para TikTok que venda esta botella de agua a gente que va al gimnasio. Dime antes el precio."

Tu visto bueno fija un tope de créditos para todo el anuncio: nunca gasta más y, si el siguiente paso lo superara, se detiene a preguntarte.

Skill para Claude Code, Codex y Cursor

La skill le dice a tu agente cuándo usar Staglight, las reglas de gasto y cómo terminar los anuncios. Los agentes la cargan solos cuando la tarea encaja.

  • SKILL.md para leerla primero.
  • staglight-ads.zip con la skill, las recetas de FFmpeg y un script para terminar anuncios.
  • Necesita el servidor MCP conectado, y curl y ffmpeg instalados en el equipo.

Claude Code

Terminal
mkdir -p ~/.claude/skills && curl -sL -o /tmp/staglight-ads.zip https://staglight.ai/agent/staglight-ads.zip \
  && unzip -o /tmp/staglight-ads.zip -d ~/.claude/skills/

Codex y Cursor

Terminal
mkdir -p ~/.agents/skills && curl -sL -o /tmp/staglight-ads.zip https://staglight.ai/agent/staglight-ads.zip \
  && unzip -o /tmp/staglight-ads.zip -d ~/.agents/skills/

Claude Code carga la skill en la sesión que tienes abierta; otros agentes pueden necesitar una sesión nueva para verla.

Archivos del plugin para Claude Code

Para equipos con su propio marketplace de plugins: la carpeta del plugin trae .claude-plugin/plugin.json, .mcp.json y la skill. Al instalarlo pide la clave y la guarda en el almacén seguro del sistema.

Terminal
curl -sL -o staglight-plugin.zip https://staglight.ai/agent/staglight-plugin.zip && unzip -o staglight-plugin.zip
claude plugin validate ./staglight

Para una sola persona, el comando claude mcp add y la skill de arriba hacen lo mismo.

Terminar anuncios con FFmpeg

Descarga las tomas y termínalas en tu equipo. Salida: H.264 yuv420p, AAC a 48 kHz y +faststart para que el video empiece antes de cargarse entero. Los subtítulos necesitan FFmpeg compilado con libass.

finish_ad.sh ajusta una toma al formato, deja el volumen en -14 LUFS en dos pasadas y añade faststart:

Terminal
curl -sLO https://staglight.ai/agent/staglight-ads/scripts/finish_ad.sh
bash finish_ad.sh take.mp4 final.mp4 9:16

Inspeccionar un archivo

Duración, tamaño, fotogramas por segundo y frecuencia de muestreo en JSON.

Terminal
ffprobe -v error -show_entries format=duration:stream=codec_type,width,height,r_frame_rate,sample_rate -of json in.mp4

Encajar en 9:16 con bandas

Mantiene el cuadro entero y rellena hasta 1080x1920.

Terminal
ffmpeg -i in.mp4 -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:color=black,setsar=1,fps=30,format=yuv420p" \
  -c:v libx264 -preset medium -crf 18 -c:a aac -b:a 192k -ar 48000 -ac 2 -movflags +faststart out_916.mp4

Llenar el 9:16 recortando al centro

Llena el cuadro y recorta los lados.

Terminal
ffmpeg -i in.mp4 -vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,setsar=1,fps=30,format=yuv420p" \
  -c:v libx264 -crf 18 -c:a aac -b:a 192k -ar 48000 -movflags +faststart out_916.mp4

9:16 con fondo desenfocado

Para tomas de producto hechas en 16:9 o 1:1. El mapa 0:a? omite el audio si no lo hay.

Terminal
ffmpeg -i in.mp4 -filter_complex "[0:v]split=2[bg][fg];[bg]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,gblur=sigma=40[bg];[fg]scale=1080:1920:force_original_aspect_ratio=decrease[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2,setsar=1,fps=30,format=yuv420p[v]" \
  -map "[v]" -map 0:a? -c:v libx264 -crf 18 -c:a aac -b:a 192k -movflags +faststart out_916.mp4

Unir clips de tamaños distintos

Una sola recodificación. El tercer clip no tiene sonido, así que recibe una pista en silencio igual de larga (5,04 s aquí, según ffprobe).

Terminal
ffmpeg -i a.mp4 -i b.mp4 -i c.mp4 -filter_complex "
[0:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v0];
[1:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v1];
[2:v]scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2,setsar=1,fps=30,format=yuv420p[v2];
[0:a]aresample=48000,aformat=channel_layouts=stereo[a0];
[1:a]aresample=48000,aformat=channel_layouts=stereo[a1];
anullsrc=r=48000:cl=stereo,atrim=0:5.04[a2];
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[v][a]" \
  -map "[v]" -map "[a]" -c:v libx264 -crf 18 -preset medium -c:a aac -b:a 192k -movflags +faststart joined.mp4

Incrustar subtítulos con estilo (ASS)

Pon PlayResX 1080 y PlayResY 1920 en el encabezado del .ass para que los márgenes cuadren en 9:16. Usa fuentes con ñ, á, ¿ y ¡.

Terminal
ffmpeg -i in.mp4 -vf "ass=captions.ass:fontsdir=./fonts" -c:v libx264 -crf 18 -c:a copy -movflags +faststart captioned.mp4

Incrustar subtítulos SRT con estilo

MarginV sube los subtítulos por encima de los botones de la plataforma.

Terminal
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:fontsdir=./fonts:force_style='FontName=Archivo,FontSize=14,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=3,Alignment=2,MarginV=160'" \
  -c:v libx264 -crf 18 -c:a copy -movflags +faststart captioned.mp4

Volumen a -14 LUFS (dos pasadas)

La primera pasada mide. Copia los valores medidos de loud.txt en la segunda.

Terminal
ffmpeg -hide_banner -i in.mp4 -af loudnorm=I=-14:TP=-1.0:LRA=11:print_format=json -f null - 2> loud.txt
ffmpeg -i in.mp4 -af "loudnorm=I=-14:TP=-1.0:LRA=11:measured_I=-20.3:measured_TP=-3.1:measured_LRA=6.2:measured_thresh=-30.6:offset=0.4:linear=true" \
  -ar 48000 -c:v copy -c:a aac -b:a 192k out_loud.mp4

Voz en off sobre música que baja

La música baja mientras habla la voz y después la mezcla queda en -14 LUFS.

Terminal
ffmpeg -i video.mp4 -i vo.wav -stream_loop -1 -i music.mp3 -filter_complex "
[1:a]aresample=48000,aformat=channel_layouts=stereo,asplit=2[vo][vokey];
[2:a]aresample=48000,aformat=channel_layouts=stereo,volume=0.35[mus];
[mus][vokey]sidechaincompress=threshold=0.03:ratio=8:attack=20:release=400[ducked];
[vo][ducked]amix=inputs=2:duration=longest:dropout_transition=0:normalize=0,loudnorm=I=-14:TP=-1.0:LRA=11[a]" \
  -map 0:v -map "[a]" -c:v copy -c:a aac -b:a 192k -ar 48000 -shortest -movflags +faststart final.mp4

Logo

Abajo a la derecha, por encima de la zona donde Reels y TikTok ponen sus botones. Ajusta el margen a tu ubicación.

Terminal
ffmpeg -i in.mp4 -i logo.png -filter_complex "[1:v]scale=220:-1,format=rgba,colorchannelmixer=aa=0.85[lg];[0:v][lg]overlay=W-w-40:H-h-260" \
  -c:v libx264 -crf 18 -c:a copy -movflags +faststart branded.mp4

Recortar

El primer comando es rápido y corta en fotogramas clave. El segundo es exacto al fotograma.

Terminal
ffmpeg -ss 2.0 -i in.mp4 -t 10 -c copy cut_fast.mp4
ffmpeg -ss 2.0 -i in.mp4 -t 10 -c:v libx264 -crf 18 -c:a aac cut_exact.mp4

Fotogramas

Primer fotograma, último fotograma (para continuar un clip desde ahí) y una hoja de contactos para revisar una toma.

Terminal
ffmpeg -i in.mp4 -frames:v 1 first.png
ffmpeg -sseof -1 -i in.mp4 -update 1 -q:v 1 last.jpg
ffmpeg -i in.mp4 -vf "fps=1/2,scale=270:-2,tile=4x3" -frames:v 1 contact.jpg

Congelar el último fotograma

Dos segundos más para una pantalla final o una llamada a la acción.

Terminal
ffmpeg -i in.mp4 -vf "tpad=stop_mode=clone:stop_duration=2" -af "apad=pad_dur=2" -c:v libx264 -crf 18 -c:a aac out.mp4

Otros formatos

4:5 para el feed, 1:1 y 16:9 a partir de la misma toma.

Terminal
ffmpeg -i in.mp4 -vf "scale=1080:1350:force_original_aspect_ratio=increase,crop=1080:1350,setsar=1" -c:v libx264 -crf 18 -c:a copy out_45.mp4
ffmpeg -i in.mp4 -vf "scale=1080:1080:force_original_aspect_ratio=increase,crop=1080:1080,setsar=1" -c:v libx264 -crf 18 -c:a copy out_11.mp4
ffmpeg -i in.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080,setsar=1" -c:v libx264 -crf 18 -c:a copy out_169.mp4

Quitar los metadatos técnicos

Solo quita las etiquetas de GPS, dispositivo y codificador. Mantén la etiqueta de contenido generado con IA en el anuncio.

Terminal
ffmpeg -i in.mp4 -map 0 -map_metadata -1 -map_chapters -1 -c copy -fflags +bitexact out_clean.mp4

Esta página en Markdown · llms.txt