carrusel-gnb — Slides visuales con marca GNB
Genera slides para redes con la voz e identidad de Gabriel Neuman / GNB Labs. Dos modos: un prompt → PNGs listos (default) o HTML interactivo (para iterar antes de exportar).
Cuándo activar
- Usuario pide "slide", "carrusel", "tweet pic", "quote", "post visual" o equivalentes.
- Adaptar una frase, cita o pieza de podcast a formato visual.
- Convertir un texto largo en 4-7 slides estructurados.
No-negociables
- Voz pasada por
voz-gnbantes de entrar al render. El texto en slide es copy, aplica MX y ban list. - Watermark
gnb.mxsiempre presente. Color#b86f4a, peso 600. - Sin emojis en los slides (override sobre default global, aquí es estricto por estética).
- Foto circular siempre con tamaño fijo en píxeles. Nunca
clamp()ni%. - Sin sliders, sin flechas de navegación (solo dots), sin @handle.
- Tipografía: Georgia / DejaVu Serif. Paleta fija (ver abajo).
Inputs requeridos
- Tipo de slide:
tweet-pic|quote|podcast|carousel. Si el usuario no dice, preguntar. - Texto principal. Si es
carousel, pedir hook (≤12 palabras) + 3-6 slides + CTA final. - Para
quote: autor. - Para
podcast: nombre del podcast. - CTA + link si es
carousel(siempre preguntar, default vacío no aplica).
Proceso
1. Setup
- Cargar VOICE GATE de
voz-gnb. - Identificar tipo. Preguntar si falta.
- Para
carousel: generar JSON de slides (hook + body + CTA).
2. Aplicar voz
- Pasar todo el texto por VOICE GATE de
voz-gnb. Argentinismos = bloqueo. - Hook ≤12 palabras. Body cada uno: 1-3 oraciones máx.
3. Render
Ejecutar generate_slides.py desde la carpeta del skill:
python3 skills/carrusel-gnb/generate_slides.py \
--type {tweet-pic|quote|podcast|carousel} \
--text "..." \
--author "..." # solo quote
--podcast-name "..." # solo podcast
--slides '[{...},...]' # solo carousel
--photo public/gabriel.jpg \
--name "Gabriel Neuman" \
--slug mi-post \
--out content/social/[carruseles/]
Salida: <slug>_1080x1080.png, <slug>_1920x1080.png, <slug>_1080x1920.png (3 por slide).
4. Guardar en destino correcto
tweet-pic,quote,podcast→content/social/carousel→content/social/carruseles/
(Tabla canónica de destinos en CLAUDE.md.)
Esquema --slides para carousel
[
{"hook": "3 errores al lanzar tu producto",
"body": "Lecciones tras 5 años construyendo."},
{"title": "1. No validar antes",
"body": "Construir sin hablar con usuarios no es opción."},
{"title": "2. Pricing al final",
"body": "El precio es parte del producto. Defínelo el día 1."},
{"title": "3. Esperar el momento",
"body": "El mejor momento fue ayer.",
"cta": "Agenda una llamada",
"cta_link": "https://gnb.mx/cowork"}
]
Reglas:
- Slide 1:
hook≤12 palabras. - Último slide:
cta+cta_link(preguntar al usuario). - Fondo: impares claro, pares oscuro (automático).
Modo HTML (alternativo)
Solo si el usuario quiere iterar visualmente antes de exportar. Genera HTML con selector de formato + html2canvas (PNG) + jsPDF (PDF).
Detalles técnicos largos (CSS clamp, aspect-ratio, descargas, ffmpeg para audiogramas) en references/html-mode.md.
Banned patterns
Heredados de voz-gnb + específicos del skill:
- Emojis en slides (override estricto).
- Hooks con preguntas-cebo ("¿te ha pasado?", "¿sabías que…?").
- Más de 7 slides en un carousel.
- Body de más de 3 oraciones por slide.
- @handle, hashtags, frameworks CSS externos.
Output contract
3 PNGs por slide en content/social/[carruseles/]:
<slug>_1080x1080.png (square)
<slug>_1920x1080.png (landscape)
<slug>_1080x1920.png (vertical)
Para carousel: <slug>_sNN_<tamaño>.png por cada slide.
Quality gate
- VOICE GATE de
voz-gnbcorrido y pasado sobre todos los textos del slide. - Watermark
gnb.mxvisible en cada slide. - Foto circular sin deformación (verificar en formato landscape).
- Hook ≤12 palabras.
- CTA con link real (no placeholder) si es carousel.
- Los 3 formatos generados sin truncamiento de texto.
Paleta y tipografía
Georgia / DejaVu Serif
--beige: #f5f3f0
--dark: #2a2a2a
--accent:#b86f4a
Atajos
| Frase | Comando |
|---|---|
| "tweet pic con X" | --type tweet-pic --text "X" |
| "cita de Y" | --type quote --text "..." --author "Y" |
| "slide del podcast" | --type podcast --text "..." --podcast-name "..." |
| "carrusel sobre X" | generar JSON 4-7 slides + --type carousel |
Errores conocidos
- Texto se trunca en landscape: reducir hook a ≤8 palabras o partir en 2 slides.
- Foto se deforma: verificar que
circle_avatar()está activo en el script. - PNG sale sin watermark: verificar
--namey que el script no esté en modo debug.
Related skills
voz-gnb— pasa por aquí ANTES de renderizar.observatorio-creadores— fuente común de hooks virales para inspirar carousels.newsletter-gnb— los carousels suelen reutilizar piezas del newsletter.