Install
openclaw skills install @formula100k/capturas-tutorial-formula100kGenera CAPTURAS UI tipo tutorial (cards de paso numerado, code blocks tipo terminal macOS con botón Copiar, callouts info/warning/success, screenshot frames, atajos de teclado, links, comparison antes/después, listas) con la estética F100K (fondo crema, círculos coral, DM Serif Display, Inter, JetBrains Mono). Render HTML+CSS+Puppeteer → PNG transparente o crema, 1920×1080. NO usa Nanobanana ni Higgsfield (la IA rompe el texto; HTML es pixel-perfect). Activar cuando pidan "diséñame una captura tipo tutorial", "imagen del comando", "renderiza un terminal con este comando", "card de paso 1/2/3", "callout warning/info/success", "tarjeta de atajo Cmd+V", "comparison antes/después", "imagen UI para mi landing/artifact/carrusel", "overlays UI para mi video tutorial", "convierte este guion en capturas tutorial". 2 modos: STANDALONE (PNGs sueltos) y BATCH (MANIFEST_UI.yml). También la invoca recursos-de-video-formula100k. NO renderiza video (editor-video-formula100k). NO usa stock.
openclaw skills install @formula100k/capturas-tutorial-formula100kEsta versión corre en un agente OpenClaw (servidor + Telegram), no en Claude Code. Antes de seguir, lee la skill
f100k-puente: traduce herramientas y rutas. Lo específico de esta skill:
- Render con Puppeteer sobre el Chromium que ya trae OpenClaw: instala las dependencias con
PUPPETEER_SKIP_DOWNLOAD=1 npm installdentro de la carpeta de la skill (evita bajar otro Chrome de ~170 MB) y correrender.mjsconPUPPETEER_EXECUTABLE_PATH=<ruta de tu Chromium>. Primera instalación: dile qué se instala y espera ✅. Renderiza de a uno, no en paralelo.- Las fuentes (DM Serif Display, Inter, JetBrains Mono) se cargan de Google Fonts: el servidor necesita internet al renderizar. Si salen con la fuente genérica, vuelve a renderizar.
- Tipo
screenshot: la imagen llega por Telegram como archivo (guárdala enentregables/capturas/) o la tomas tú con tu navegador de una web sin iniciar sesión (landing, docs, app propia de la usuaria). Nunca capturas de Instagram/TikTok con sesión.- Mira cada PNG antes de entregarlo (texto cortado, comando incompleto). Entrega en
entregables/capturas/y por Telegram como documento, no como foto (Telegram comprime y se pierde la transparencia). Varios PNG → un.zip.- Los anchos y duraciones «sobre video» son la sugerencia para que la usuaria los monte en su editor; aquí no se compone ningún video.
Skill que genera capturas UI tipo tutorial con la estética F100K: terminales macOS, cards de paso, callouts, screenshot frames, keyboard shortcuts, comparisons. Output: PNG.
No usa IA generativa para estos assets. Render = HTML + CSS + Puppeteer → PNG. Razón: Nanobanana/Higgsfield rompen texto de terminal y comandos; HTML garantiza que el curl -fSL ... exacto aparezca legible.
recursos-de-video-formula100k detecta modo tutorial y delega aquírecursos-de-video-formula100k modo IArecursos-de-video-formula100k modo WEBcarrusel-render-formula100khistorias-a-imagenes-nanobananaeditor-video-formula100kguionizacion-formula100kCuando el usuario pide "capturas-tutorial" / "modo UI" / "solo estilo tutorial" para un video, asumir modo PURO: TODOS los overlays del reel son de los 8 tipos de esta skill (step, terminal, callout, screenshot, keys, link, comparison, list). NO mezclar con pixel-mascot IA, NO complementar con WEB, NO generar HOOK_*.png. Si un cue del transcript no es léxicamente "tutorial" (ej: una frase de storytelling, una declaración, un CTA), convertirlo al tipo más cercano — típicamente callout variant info para declaraciones/facts o callout variant success para CTAs/cierres. Razón: la consistencia visual completa del estilo capturas-tutorial es lo que el usuario valida; el cambio de capa entre captura UI y mascot pixel rompe el flow del viewer.
| Tipo | Cuándo usar | Template |
|---|---|---|
| step | Card de paso numerado (círculo coral + heading italic + bajada) | step.html |
| terminal | Code block con chrome macOS + prompt $ + comando + botón "Copiar" | terminal.html |
| callout | Caja con border-left coloreado + ícono. Variantes: info, warning, success, note, error | callout.html |
| claude-input | Simulación del input de Claude con popup de autocompletado de slash commands + caja de input con cursor parpadeante. OBLIGATORIO siempre que el video mencione invocar una skill, escribir un slash command, "decirle a Claude que…" o cualquier acción de typing/prompting a Claude. Reemplaza al callout cuando el cue es "skill X especializada / Claude la usa / invoca esta skill / dile a Claude". | claude-input.html |
| screenshot | Frame de ventana macOS / browser alrededor de una imagen del usuario, con caption italic opcional | screenshot.html |
| keys | Visual de atajo de teclado: cajas blancas estilo Mac con + coral entre teclas | keys.html |
| link | URL con icono mundo + botón "Abrir" coral | link.html |
| comparison | Dos cajas lado a lado: ❌ rojo + ✓ verde (antes/después, malo/bueno) | comparison.html |
| list | Lista vertical 3-6 items con check coral o numeración (opcional con título italic) | list.html |
claude-inputCuando el guion/transcript mencione UNA skill, slash command, prompt, o cualquier interacción de "escribirle/decirle a Claude algo", el visual SIEMPRE debe ser un claude-input — no un callout. Razón: la simulación de UI (popup + caja de input con cursor) comunica "skill" / "prompt" sin necesidad de un párrafo de texto, queda más vertical que un callout, y mantiene consistencia con el resto del flow Claude del video. Validado en producción: el callout horizontal pasó a claude-input vertical y el párrafo desapareció.
Defaults del template (si no se especifican en data):
popup_header: "Skills disponibles"icon_active + name_active + desc_active: la skill que está siendo invocada (en español, descripción corta de 1 línea)icon_2, name_2, icon_3, name_3: otras 2 skills del catálogo F100K para que el popup se vea poblado (sin descripción visible)typed: typically igual a name_active (lo que se está escribiendo en el input)Catálogo de iconos sugeridos para skills F100K (usar como icon_active/icon_2/icon_3):
Ver templates/_tokens.css. Resumen:
COLOR
crema base #F5EFE6
coral #E89B7F (círculos paso, botón Copiar, prompt $)
coral oscuro #D87A55 (hover/sombra)
ink #2B2B2B (texto principal)
terminal bg #1E1E1E (fondo terminal)
success / warning / error / info → border-left de callouts
FONTS
display: DM Serif Display italic → headings paso, comparison title
body: Inter 400/600/700 → bajadas, callouts, captions
mono: JetBrains Mono → terminal, code inline, URL del link card
RADIUS
card 20px · terminal 14px · callout 12px · key 8px
Para capturas sueltas pegables en landings, artifacts, carruseles, threads, etc.
Paso 1. Bootstrap (idempotente):
bash skills/capturas-tutorial-formula100k/scripts/install.sh
Instala puppeteer + js-yaml en node_modules/ local de la skill. Solo corre completo la primera vez.
Paso 2. Preguntar al usuario el contenido. Si no es obvio, usar AskUserQuestion para confirmar:
Paso 3. Renderizar:
node skills/capturas-tutorial-formula100k/scripts/render.mjs \
--type <tipo> \
--out <ruta_archivo.png> \
--data '<JSON>' \
[--bg cream|transparent] \
[--width 1920] [--height 1080]
Ejemplos:
# Terminal con comando
node render.mjs --type terminal --out terminal_claude.png \
--data '{"command":"curl -fsSL https://claude.ai/install.sh | bash"}'
# Paso numerado
node render.mjs --type step --out paso_2.png --bg cream \
--data '{"number":2,"title":"Pega el comando de instalación","body":"Copia el comando de abajo y pégalo en la Terminal con **Cmd+V** y presiona Enter."}'
# Callout info
node render.mjs --type callout --out callout_que_hace.png \
--data '{"variant":"info","body":"**¿Qué hace este comando?** Descarga el instalador oficial de Anthropic, lo ejecuta y coloca Claude Code en `~/.local/bin`."}'
# Keyboard shortcut
node render.mjs --type keys --out atajo_cmdv.png \
--data '{"keys":["Cmd ⌘","V"],"label":"Pegar en la Terminal"}'
# Screenshot enmarcado
node render.mjs --type screenshot --out captura_exito.png \
--data '{"frame":"mac","title":"Terminal","image":"entregables/capturas/captura.png","caption":"Cuando termina vas a ver Claude Code successfully installed"}'
# Comparison antes/después
node render.mjs --type comparison --out compare.png \
--data '{"no_title":"Sin Claude Code","no_body":"Editas archivos uno por uno.","yes_title":"Con Claude Code","yes_body":"Le dictas y él edita el repo completo."}'
# Lista
node render.mjs --type list --out checklist.png \
--data '{"title":"Vas a necesitar","items":["Una Mac con macOS 12+","Una cuenta en claude.ai","5 minutos"]}'
# Link card
node render.mjs --type link --out link_claude.png \
--data '{"label":"Sitio oficial","url":"claude.ai/install"}'
# Claude input simulando invocación de skill (popup + slash command + cursor)
node render.mjs --type claude-input --out skill_invoke.png \
--data '{"popup_header":"Skills · F100K","icon_active":"📝","name_active":"guionizacion-formula100k","desc_active":"Crea guiones virales con tu voz y estrategia.","icon_2":"🎬","name_2":"carrusel-viral-formula100k","icon_3":"🎯","name_3":"optimizador-cta-formula100k","typed":"guionizacion-formula100k"}'
Markdown ligero soportado en body/text: **negrita** y `código inline`. No se acepta HTML directo (se escapa por seguridad).
Paso 4. Validación visual: leer el PNG generado con la tool Read y confirmar contra el contenido pedido. Si el texto está clipeado / el comando se cortó / el ícono no se ve → ajustar data o width y regenerar.
Paso 5. Entregar al usuario: open <ruta> para abrirlo en macOS.
Para overlays de video tutorial. La skill recursos-de-video-formula100k genera el MANIFEST_UI.yml a partir del transcript Whisper aplicando los triggers léxicos (sección siguiente) y luego invoca este modo.
Estructura del manifest:
recursos:
- id: r01
tipo: step
bg: transparent
width: 1920
height: 1080
data:
number: 2
title: "Pega el comando de instalación"
body: "Copia el comando de abajo y pégalo en la Terminal con **Cmd+V** y presiona Enter."
slug: "pega-comando"
- id: r02
tipo: terminal
data:
command: "curl -fsSL https://claude.ai/install.sh | bash"
title: "Terminal — bash"
slug: "curl-claude-install"
- id: r03
tipo: callout
data:
variant: info
body: "**¿Qué hace este comando?** Descarga el instalador oficial de Anthropic, lo ejecuta y coloca Claude Code en `~/.local/bin`. No toca el resto del sistema."
slug: "que-hace-instalador"
Comando:
node skills/capturas-tutorial-formula100k/scripts/render.mjs \
--manifest entregables/recursos-video/2026-05-22_claude-install/MANIFEST_UI.yml \
--out entregables/recursos-video/2026-05-22_claude-install/USER/
IMPORTANTE — destino: los PNGs van a USER/, NO a una subcarpeta UI/. Razón: editor-video-formula100k solo lee tres carpetas (IA/, USER/, WEB/) y consolida todos los overlays en UNA sola tabla ## Overlays del MANIFEST.md principal. Las capturas tutorial conviven con los screenshots manuales del usuario en USER/ — el editor las distingue por el prefijo del filename (r<NN>_<tipo>_* viene de batch UI; T<N>_* viene de captura manual).
Si el modo de invocación es --out explícito a otra carpeta, el default del script ya cambió a USER/ (sibling al manifest), así que basta con omitir el flag y queda donde toca.
Naming auto de archivos: <id>_<tipo>_<slug>.png. Ej: r01_step_pega-comando.png.
Post-procesado automático del script (v1.1.0):
EncodingError).--scale 1 por default — el viewport y el output coinciden 1:1 en píxeles. NO subir a --scale 2 (Remotion no decodifica 3840×2160 en paralelo, OOM).--no-trim.Cuando la skill se invoca desde recursos-de-video-formula100k con transcript Whisper word-level, escanear cada segmento de 5-10s buscando estos patrones. Output: items para el MANIFEST_UI.yml.
step — Paso numerado"paso \d+" · "paso uno|dos|tres""^primero,?" · "^segundo,?" · "^tercero,?""después,?" · "luego,?" · "ahora vas a" · "lo siguiente es" · "a continuación"Extraer: número de orden (si no es explícito, contador incremental) + la frase que cierra el paso como title + el resto del segmento como body.
terminal — Code block"copia (este|el) comando" · "pega esto en (la|tu) terminal""ejecuta" · "corre esto" · "corre el comando""en la terminal,?" · "abre la terminal y""escribe (esto|este comando)"Extraer: command = el comando exacto. Si la URL/dominio aparece, conservar.
callout_info"¿qué hace (esto|este|esta)\\?" · "esto significa" · "para qué sirve" · "lo que pasa es que" · "piensa en esto como"Variant: info. Body: el segmento completo, con bold sobre la primera frase clave.
callout_warning"ojo (con|que)" · "cuidado" · "importante:?" · "atención" · "advertencia" · "no (te |)olvides" · "no hagas"Variant: warning.
callout_success"cuando termine,?" · "si todo (salió|sale) bien" · "deberías ver" · "te va a (aparecer|mostrar) un mensaje" · "verás (un|el) mensaje"Variant: success.
callout_note"tip,?" · "bonus,?" · "extra,?" · "un detalle,?" · "por cierto"Variant: note.
claude-input — Skill / slash command / prompt a Claude (OBLIGATORIO sobre callout)"skill (de|para|que)" · "la skill (X|de X)" · "esta skill" · "una skill especializada""slash command" · "comando /\w+" · "/\w+-formula100k" · "escribe /\w+""le (dices|pides|escribes|dictas) a claude" · "claude (la usa|usa esta|tiene)" · "invocas (la|esta) skill""pega esto en claude" · "escríbele a claude" · "prompt para claude"Cuando el cue matchea uno de estos patrones, generar claude-input (NO callout, aunque el contenido suene declarativo). Extraer:
name_active: el nombre de la skill o slash command mencionado (sin la / inicial). Si no se nombra explícita, inferir del contexto.desc_active: la frase que describe qué hace la skill (1 línea, ≤80 chars, en español).typed: typically igual a name_active.icon_active: del catálogo de íconos sugeridos según el dominio de la skill.icon_2/name_2/icon_3/name_3: otras 2 skills relacionadas para poblar el popup (sin descripción).screenshot"te va a aparecer" · "vas a ver (una pantalla|esto|así)" · "se ve (así|de esta forma)" · "como en la imagen" · "como esto"Flag: necesita asset del usuario (carpeta USER/ en la convención de recursos-de-video-formula100k). Si no hay screenshot disponible, omitir el cue o degradar a callout_success con la descripción textual.
keys — Keyboard shortcut"(cmd|⌘|control|ctrl) ?\+ ?\w+" · "presiona (cmd|ctrl|shift|enter|tab)""el atajo (es|de teclado es)" · "con (cmd|ctrl|shift)\+"Extraer: lista de teclas en orden de la frase.
link"ve a" · "entra a" · "abre (el navegador|chrome|safari) en"https?://\S+ mencionada en el audio.Extraer: URL completa. Si el usuario dice solo el dominio ("entra a formula100k.app"), reconstruir.
comparison"esto (NO|sí)" con contraste · "antes,? \w+ → ahora,?" · "no hagas X, haz Y" · "el error es,? .* lo correcto es"Estructura: extraer las dos mitades — ❌ y ✓.
list"vas a necesitar" · "los (tres|cuatro|cinco) pasos son" · "hay (3|4|5) cosas" · "requisitos:?"Extraer: items enumerados en el segmento.
Cada tipo tiene una posición y un tamaño sugeridos cuando se usa como overlay sobre talking-head 9:16 (canvas 1080w). Anchos calibrados para que el TEXTO sea legible una vez aplicado el trim del bbox + 40px de padding.
| Tipo | Posición default | Ancho px (sobre 1080w) | Duración mínima |
|---|---|---|---|
| step | overlay center | 940 | 3.0s |
| terminal | overlay center | 980 (1040 si el comando es largo) | 4.0s |
| callout (todos) | overlay bottom-third | 960 | 3.0s |
| claude-input | overlay center | 820 (ratio ~1.5:1, vertical) | 4.0s |
| screenshot | overlay center | 720 | 3.5s |
| keys | overlay center | 380 | 2.5s |
| link | overlay bottom-third | 560 | 2.5s |
| comparison | overlay center | 880 | 5.0s (necesita leer 2 cajas) |
| list | overlay center | 640 | 1.0s por item (min 3.0s) |
Estos defaults se incluyen en el MANIFEST.md como sugerencia. El editor-video los respeta salvo que el usuario los override.
Por qué estos anchos: sobre talking-head 9:16, los PNGs vienen ya recortados al bbox real del contenido (script aplica sharp.trim() + extend(40px)). Si el manifest pide 640, el overlay ocupa ~60% del canvas — texto se vuelve marginalmente legible en móvil. 940-980 es el sweet spot donde el contenido lee bien sin chocar con el header y sin tapar la cara del usuario.
**bold** y `code`. Cualquier otro HTML se escapa.--bg cream.| Error | Acción |
|---|---|
puppeteer falla al arrancar (sandbox) | Ya pasamos --no-sandbox. Si igual falla, brew install chromium y reintentar. |
| Fonts no cargan (sin internet) | El render espera document.fonts.ready — si timeout >10s, el PNG sale con fallback genérico. Sugerir reintentar con conexión. |
| Comando muy largo se sale del terminal | Aumentar width a 1280 o 1440. Si sigue sin caber, partirlo con \ y newlines en el JSON. |
| Screenshot inválido / no encontrado | Validar image exists antes de renderizar. Si no, omitir el cue. |
js-yaml no instalado para modo manifest | Correr install.sh. |
/capturas-tutorial <tipo> <contenido> → modo standalone, render directo/capturas-tutorial manifest <ruta-yml> → modo batch/captura-terminal <comando> → atajo para terminal/captura-paso <N> <título> | <bajada> → atajo para stepUSER/ (donde van tanto los screenshots manuales como las capturas UI tutorial generadas por esta skill en modo BATCH) y los compone sobre el video como overlays, igual que ya hace con los pixel-mascots de IA/.terminal.png sin que el usuario dicteprogress-bar, file-tree, diff-block