Analiza el estilo visual de PDFs y presentaciones PPTX página por página usando modelos de visión con IA. Extrae paleta de colores, tipografía, composición y tono visual, y opcionalmente genera nuevas imágenes coherentes con ese estilo.
index.html en el navegador| Campo | Descripción |
|---|---|
paleta_colores |
Array de códigos HEX dominantes |
tipografia.principal |
Descripción del estilo tipográfico principal |
tipografia.secundaria |
Tipografía secundaria si existe |
tipografia.estilo |
Descripción general del sistema tipográfico |
estilo_ilustracion |
Estilo gráfico/visual de la página |
estructura |
Composición y disposición de zonas visuales |
elementos_decorativos |
Lista de elementos decorativos identificados |
tono_visual |
Tono y sensación visual general |
Elige entre 7 modelos disponibles vía la API de Pollinations:
| Nombre visible | Identificador en API |
|---|---|
| GPT-5.4 Nano (por defecto) | openai |
| Llama 4 Scout | llama-scout |
| Qwen 3 | qwen-vision |
| GPT 5 Nao | openai-fast |
| Claude Haiku 4.5 | claude-fast |
| GPT-5.4 Mini | gpt-5.4-mini |
| Grok 4.3 | grok-4.3 |
flux, zimage, klein, grok-imagine, nanobanana, gptimage (defecto), gptimage-large, wan-image, qwen-image, gpt-image-2La app es un único archivo HTML sin proceso de build. Basta con servirlo:
# Con Node.js
npx serve .
# Con Python
python -m http.server 8080
# O simplemente abrir index.html directo en el navegador (file://)
.
├── index.html # App completa: HTML + CSS + JS en un solo archivo
└── README.md # Este archivo
Todas las dependencias se cargan desde CDN en tiempo de ejecución:
| Librería | Versión | Uso |
|---|---|---|
| PDF.js | 3.11.174 | Rasterizado de páginas PDF a canvas |
| JSZip | 3.10.1 | Descompresión de PPTX para extraer imágenes (carga dinámica) |
| Google Fonts | — | Tipografías Syne y Space Mono |
/v1/chat/completionsEndpoint compatible con OpenAI. Cada página se envía como image/jpeg base64 (normalizada desde el formato original) junto al prompt de extracción de estilo. La app siempre convierte la imagen a JPEG antes de enviarla para garantizar compatibilidad con todos los modelos.
POST https://gen.pollinations.ai/v1/chat/completions
Authorization: Bearer <api_key>
{
"model": "<modelo_seleccionado>",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "<prompt>" },
{ "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,..." } }
]
}]
}
/v1/images/generationsPOST https://gen.pollinations.ai/v1/images/generations
Authorization: Bearer <api_key>
{
"model": "<modelo_imagen>",
"prompt": "<prompt enriquecido con estilo>",
"n": 1,
"size": "1024x1024",
"quality": "medium",
"response_format": "b64_json"
}
Añadir modelos de análisis: edita el <select id="modelSelect"> y agrega <option value="id-del-modelo">Nombre visible</option>.
Añadir modelos de imagen: edita el <select id="img-model-sel"> en el modal de generación.
Cambiar el prompt de análisis: busca la constante userPrompt dentro de analyzePageWithClaude() y ajusta los campos JSON solicitados.
Escala de renderizado PDF: cambia scale: 1.5 en page.getViewport({ scale: 1.5 }) — mayor valor = más detalle, más memoria.
MIT