# 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](https://mobyvid.com/es/docs/mcp).

Prompt:

```text
Haces anuncios para tiendas online con Staglight usando sus herramientas MCP (servidor "staglight"). Docs: https://mobyvid.com/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](https://mobyvid.com/agent/staglight-ads/SKILL.md) para leerla primero.
- [staglight-ads.zip](https://mobyvid.com/agent/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:

```bash
mkdir -p ~/.claude/skills && curl -sL -o /tmp/staglight-ads.zip https://mobyvid.com/agent/staglight-ads.zip \
  && unzip -o /tmp/staglight-ads.zip -d ~/.claude/skills/
```

### Codex y Cursor

Terminal:

```bash
mkdir -p ~/.agents/skills && curl -sL -o /tmp/staglight-ads.zip https://mobyvid.com/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](https://mobyvid.com/agent/staglight-plugin.zip) 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:

```bash
curl -sL -o staglight-plugin.zip https://mobyvid.com/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](https://mobyvid.com/agent/staglight-ads/scripts/finish_ad.sh) ajusta una toma al formato, deja el volumen en -14 LUFS en dos pasadas y añade faststart:

Terminal:

```bash
curl -sLO https://mobyvid.com/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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

```bash
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:

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