¿Qué hace YouTube Thumbnail?
Miniaturas y portadas evaluadas al tamaño que la gente realmente las ve: unos 160 px de ancho en un feed. Un título de entrada, tres conceptos diferentes de salida, el usuario elige, un final, revisiones limitadas, archivos en el tamaño exacto de entrega. El oficio (marcos conceptuales, plantilla de prompt, reglas de texto, el filtro de tamaño pequeño) reside aquí; la mecánica en references/cli-contract.md y references/platform.md.
Paso 0 — Pre-vuelo
Una vez por sesión:
command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" tools
blockersno vacío, CLI faltante o más antiguo que 0.7.0 →/genmedia-skills:setup. Clave faltante → el usuario ejecutagenmedia setupo exportaFAL_KEYpor su cuenta; espera. Nunca leas, imprimas, solicites o escribas una clave.- Mantén
config.announce_above_usdyconfig.confirm_above_usd(valores predeterminados 0.50 y 2): son los umbrales de control de costos. thumbcheck.py toolsindica cuáles depreview,sheet,fit,framepueden ejecutarse aquí (necesita ffmpeg local o macOSsips), y silockuppuede (necesita un navegador de la familia Chromium). Si ninguno está presente → el modo degradado en el Paso 6 del flujo de trabajo. Nunca planifiques condrawtext, Pillow o ImageMagick: el texto lo renderiza el modelo.- Reanuda primero: un
.genmedia/projects/<slug>/thumbnail.mdque coincida con esta solicitud → léelo, continúa en su primer paso abierto. Nunca reinicies un proyecto que tenga entradas de ledger.
Reglas de UX
- Responde en el idioma del usuario (Turco de entrada → Turco de salida). Escribe los prompts del modelo en inglés; el texto en la imagen permanece en el idioma y ortografía exacta en que se publicará. Los IDs de endpoint, nombres de campo y rutas se mantienen como están.
- Sin JSON, IDs de solicitud, prompts ni narración de herramientas en el chat. Espera en silencio; como máximo una línea de estado por lote.
- Presupuesto de preguntas: 2, una a la vez, como opciones etiquetadas, solo cuando falte la respuesta:
- P1 las palabras gancho: sin título y sin tema → pregunta por el título. Título conocido → no preguntes; escribe tú mismo las 2 a 4 palabras gancho (tres diferentes entre los conceptos).
- P2 rostro o sin rostro: pregunta solo si nada lo decide. Una foto, un
@handleo "yo / mi cara / ben" → rostro. "Sin rostro", un producto, una grabación de pantalla, un paisaje → sin rostro. El usuario pide solo un thumbnail o nombra el concepto → un borrador en lugar de tres; la elección se convierte en un sí o no. Todo lo demás es un valor predeterminado que indicas en la línea de entrega: formato 16:9; idioma del texto = idioma del título; paleta = los colores de marca proporcionados, si no, elegidos por concepto; aspecto fotorrealista de póster; 3 conceptos; maestro final 2560x1440 entregado como 1920x1080 y 1280x720. No cuentan: la confirmación de consentimiento, la elección, una confirmación de costo.
- La elección es una parada forzosa. Muestra la hoja comparativa y espera. El silencio, un trabajo exitoso o tu propia preferencia nunca son una elección. Recomendar uno está permitido; elegir no.
- Veracidad. Un thumbnail puede dramatizar, nunca tergiversar. Todo lo mostrado o escrito debe estar en el video o seguir honestamente de él: sin números, resultados, reacciones, productos o invitados inventados; sin UI falsa de una plataforma real; sin logotipos o personajes que el usuario no posea. No puedes saber lo que entrega el video → pregunta antes de prometerlo (esto reemplaza a P1 o P2, no añade una pregunta).
- Rostros. Foto de una persona real (incluido el usuario) → una confirmación de que tiene el consentimiento de esa persona, y una línea que indica que las subidas están en URLs públicas. Nunca una celebridad o figura pública que el usuario no sea; "se parece a " es rechazado, ofrece un rostro inventado o un concepto sin rostro. Un rostro inventado es un sustituto: nunca lo presentes como una persona real nombrada, cliente, experto o invitado, y di en la entrega que el rostro es generado por IA.
- Costo: estima toda la solicitud antes de la primera llamada pagada (Paso 4 del flujo de trabajo) y aplica el control con los umbrales del pre-vuelo: por debajo de
announce_above_usd→ ejecuta; hastaconfirm_above_usd→ una línea con la estimación, luego ejecuta; en o por encima → muestra la estimación y espera un sí explícito (references/platform.mdsección 8). Una aprobación cubre el plan mostrado; un plan más grande necesita uno nuevo. Nunca cotices un precio de memoria; nunca cambies un modelo que el usuario nombró para ahorrar dinero. - Acotado: como máximo 3 rondas de borrador y 3 rondas de revisión; cada intento cambia algo; un rechazo por política de contenido nunca se reenvía sin cambios; un trabajo con un ID de solicitud se reanuda, nunca se reenvía.
Barrera de descubrimiento
El enrutamiento a continuación es una caché con fecha (references/routing-image.md, verificado 2026-09-19). Antes de la primera llamada pagada a un endpoint en una sesión:
genmedia models --endpoint_id <endpoint_id> --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <endpoint_id>
statusdebe seractive. No activo o 404 → siguiente nivel de la misma tarea enreferences/routing-image.md, si nogenmedia models "<nombre>" --no-classify --limit 10 --json, la coincidencia activa más reciente, y di qué modelo se ejecutó.- Los nombres de campo, enumeraciones y límites provienen del esquema, nunca de la memoria. El usuario nombra un modelo → busca antes de dudar; los nuevos lanzamientos están bajo espacios de nombres de proveedores (
openai/,bytedance/,google/,alibaba/), nofal-ai/. - Nunca
genmedia runsin un ID de endpoint (el enrutamiento inteligente resuelve valores predeterminados obsoletos).
Enrutamiento
| Paso | Endpoint | Por qué |
|---|---|---|
| Borradores, nada que referenciar | openai/gpt-image-2.5/flare/text-to-image, quality: "medium" | líder en tipografía; solo la familia objetivo puede previsualizar el texto, un modelo de borrador barato no puede |
Borradores con foto de rostro, referencias @handle, foto de producto o fotograma de video | openai/gpt-image-2.5/flare/edit, quality: "medium" | las referencias van en image_urls (máx. 16); misma familia que el final |
| Final | openai/gpt-image-2.5/sunburst/edit, quality: "high" | nivel de precisión; el borrador elegido es la imagen 1, así que el final es esa composición, no una nueva tirada |
| Revisión (texto, expresión, fondo, color) | openai/gpt-image-2.5/sunburst/edit, quality: "high" | el final actual es la imagen 1; un alcance por ronda |
| Lámina sin texto, fotorrealista (ruta alternativa) | bytedance/seedream/v5/pro/text-to-image | arena #1 fotorrealista; el texto se añade después con una edición de GPT Image 2.5 |
| Lámina de identidad cuando el rostro se desvía | fal-ai/nano-banana-2/edit | enrutamiento predeterminado para imágenes consistentes en identidad; texto añadido después |
| Ampliar un fotograma o foto real | fal-ai/seedvr/upscale/image; rostros o texto primero: topaz/upscale/image/precision | fiel; Topaz tiene modelos Faces y Text Refine |
| Fotograma del video del usuario | thumbcheck.py frame (ffmpeg local) | marca de tiempo exacta; sin ffmpeg → pide al usuario una captura de pantalla |
| Logotipo propio del usuario en una lámina sin texto | thumbcheck.py lockup (navegador local) | la marca se coloca desde el archivo del usuario; un modelo la redibujaría |
Desempates:
- Texto en la imagen → GPT Image 2.5, incluso para un concepto fotorrealista. Sin texto en absoluto (el usuario lo dijo) → los borradores pueden ejecutarse en
bytedance/seedream/v5/pro/text-to-imageo su/edit; el resto del flujo no cambia. Seedream rechaza 1280x720 (su área mínima es 1024x1024) y no tiene campoquality: envíaimage_size1920x1080 (9:16 → 1080x1920, 1:1 → 1536x1536) y cotízalo por imagen desde su fila de enrutamiento (aproximadamente USD 0.07 cada una al 2026-09-19: tres borradores son aproximadamente USD 0.20, recalcula el total). - La estrategia de texto predeterminada es horneado en un solo paso. Usa la ruta de lámina (lámina sin texto, luego una edición de "añadir solo este texto") cuando: la misma lámina necesita varios idiomas o redacciones A/B; un diacrítico falló dos veces; la lámina es un fotograma o foto real. Detalles:
references/text-and-readability.md. @handle→ lee.genmedia/characters/<handle>/character.json(ancladescription;refs[]conrole: "face"yactive: true), reutiliza lacdn_urlde una referencia cuando la tenga, si no sube su archivo; usa el ancla textualmente.real_person: true→ se aplica la regla 6 de UX; unconsent_confirmed_atregistrado es la confirmación. Handle desconocido → díselo, ofrece/genmedia-skills:character; nunca sustituyas.- El usuario nombró un modelo → úsalo después de la verificación en vivo; ofrece el predeterminado en una línea.
- El diseño es una lámina más el logotipo propio del usuario (un canal de marca, un video de vista previa de una aplicación) → ruta de lámina, luego
thumbcheck.py lockupcoloca el archivo del logotipo centrado a una proporción del ancho (references/text-and-readability.mdsección 2b). La lámina ya existe (una lámina delaunch-graphics, la foto del usuario) → sin llamada pagada: lockup, control, paso 10. Sin archivo de logotipo → pídelo; nunca dejes que el modelo dibuje la marca.
Trampas:
- Trampa de tamaño automático. Los endpoints de edición predeterminan
image_sizeaauto, que sigue la imagen de entrada: una foto de rostro en retrato produce un thumbnail en retrato. Siempre envía{width,height}. - Trampa de calidad predeterminada.
qualitypredetermina ahighy la familia factura por tokens. Establécelo en cada llamada:mediumen borradores,highen finales;xhighomaxsolo después de que el usuario haya aceptado el precio. - Trampa de múltiplos de 16. 1920x1080 no es un tamaño legal de GPT Image. Renderiza 1280x720, 2560x1440 o 3840x2160 y deja que
thumbcheck.py fitproduzca 1920x1080. - Trampa de imagen adjunta. Un endpoint de texto a imagen no tiene campo de imagen; ignora la foto y factura de todos modos. Cualquier referencia → el endpoint
/edit. - Trampa de nueva tirada. Volver a ejecutar el prompt en alta calidad da una imagen diferente (sin
seeden esta familia). El final es una edición de la selección. - Trampa de mayúsculas. Nunca dejes que el modelo ponga en mayúsculas el turco: escribe tú mismo la cadena final (
thumbcheck.py text), entre comillas, y revísala letra por letra.
Flujo de trabajo
- Recepción. Título o tema, formato (predeterminado 16:9), rostro o no, colores de marca, referencias. HEIC, AVIF, TIFF o fotos muy grandes primero:
thumbcheck.py fit <archivo> --max-side 2048 --out .genmedia/tmp/<nombre>.jpg; lee y sube esa copia. Abre cada imagen local con la herramienta Read antes de planificar (quién y qué hay realmente en ella decide los conceptos). Un fotograma del video del usuario:python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" frame <video> --at <segundos o m:ss>, luego léelo. Gasta el presupuesto de preguntas solo como permite la regla 3 de UX. - Tarjeta de estado. Elige un
<slug>ASCII corto (eksi-maya): es lalabeldel lote, el filtro del ledger, la carpeta de salida y la carpeta del proyecto. Una etiqueta en lenguaje natural también funciona; el ayudante convierte"Ekşi maya"aEksi-maya, y esa forma convertida es entonces el nombre de la carpeta. Escribe.genmedia/projects/<slug>/thumbnail.mdcon la herramienta Write y actualízalo después de cada paso:# <título> — thumbnail promesa: <una línea: lo que realmente entrega el video> formato: 16:9 | idioma del texto: <código> | rostro: <ninguno | ruta de foto | @handle> (consentimiento: <sí, fecha | n/a>) | paleta: <colores> [ ] conceptos [ ] borradores-1 [ ] control [ ] elección: - [ ] final [ ] revisiones 0/3 [ ] entregado registro: - <fecha> borradores-1: 1 <marco> "<TEXTO>", 2 <marco> "<TEXTO>", 3 <marco> "<TEXTO>" - Tres conceptos diferentes. Lee
references/frameworks.md. Haz una lluvia de ideas de al menos cinco en privado, conserva los tres más sólidos que usen marcos diferentes (no tres variaciones de color de una idea), cada uno con sus propias 2 a 4 palabras gancho. Ejecuta cada gancho a través de la verificación de texto y usa su cadenauppertextualmente:Las palabras gancho y las imágenes pueden usar solo números, resultados, citas, productos e invitados que el usuario haya indicado (título, resumen, sus archivos); el título solo no te da uno → usa una pregunta, un gancho sin restricciones o un concepto sin texto, o pregunta (regla 5 de UX). Rechaza cualquier concepto que falle la regla de veracidad. Rostro elegido → al menos dos de los tres conceptos lo muestran. El título ya lleva el gancho → un concepto puede ser sin texto.python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" text "şimdi izle" --lang tr - Verificar y cotizar. Barrera de descubrimiento para cada endpoint, luego:
GPT Image 2.5 respondepython3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" price openai/gpt-image-2.5/flare/edit,openai/gpt-image-2.5/sunburst/edit1 units, que no es un precio. Dólares para esta skill: trabajos x la fila por tamaño y calidad (un tamaño no listado → la siguiente fila más grande) de la tabla GPT Image 2.5 enreferences/routing-image.md(notas det2i-typography; las filas de edición ya incluyen una imagen de entrada) + la asignación de referencias enreferences/platform.md§7 por cada imagen de referencia adicional. Pistas con fecha (2026-09-19): borrador 1280x720mediumaproximadamente USD 0.01; final o revisión 2560x1440highaproximadamente USD 0.055; 3840x2160highaproximadamente USD 0.10. Trabajo típico completo (3 borradores + final + 3 revisiones): aproximadamente USD 0.25 sin referencias, aproximadamente USD 0.45 con una referencia de rostro → por debajo del umbral de anuncio predeterminado, ejecuta y declara la estimación en la línea de entrega. Una segunda ronda de borrador, más referencias,xhigh,max, 4K, o varios videos en una solicitud (un slug y tarjeta de estado por video; la estimación es la suma) → recalcula y aplica primero el control. - Borradores en un lote. Sube las referencias una vez y conserva las
urls(orden de argumentos); las subidas son URLs públicas, dilo una vez para material privado:Construye cada prompt desdepython3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" upload ./me.jpgreferences/prompt-blueprint.md. Escribe el plan con la herramienta Write en.genmedia/projects/<slug>/drafts-1.json:{"label": "<slug>", "max_parallel": 3, "jobs": [ {"id": "draft-a", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concepto A>", "image_urls": ["<url del rostro>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}, {"id": "draft-b", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concepto B>", "image_urls": ["<url del rostro>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}, {"id": "draft-c", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concepto C>", "image_urls": ["<url del rostro>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}} ]}