VisionSqueezer
Servidor MCP de optimización de imágenes nativo para LLM
Documentación
VisionSqueezer
Middleware de optimización de imágenes nativo para LLM y servidor MCP. Reduce el consumo de tokens de los modelos de visión al preprocesar imágenes en formatos alineados a los límites de teselas, sin relleno.
Funciona con cualquier agente o editor que hable MCP: Claude, GPT, Gemini, Codex, o el tuyo propio.
Instalación
Interactiva (recomendada)
Elige por ti el cliente, el método y el ámbito:
npx vision-squeezer install
Pregunta por:
- CLI objetivo: Claude Code / Codex CLI / Qwen Code / OpenCode / Gemini CLI / Kimi CLI
- Método de instalación (solo Claude Code):
plugin(incluye MCP + habilidades de stats/doctor/upgrade) omcp-add(solo servidor) - Ámbito de instalación (solo
mcp-add):user(todos los proyectos, recomendado),local(solo este proyecto),project(compartir vía.mcp.json)
Los scripts de instalación pasan las opciones directamente:
npx vision-squeezer install --client claude --method plugin --yes
npx vision-squeezer install --client claude --method mcp-add --scope user --yes
Claude Code — marketplace de plugins (una línea, incluye habilidades)
/plugin marketplace add eralpozcan/vision-squeezer
/plugin install vision-squeezer-mcp@vision-squeezer
Instala el servidor MCP y las habilidades /vision-stats, /vision-doctor, /vision-upgrade como un único plugin de Claude Code. Reinicia las sesiones abiertas de Claude Code para que el servidor MCP se conecte.
Claude Code — mcp add (solo servidor)
# All projects on this machine (recommended)
claude mcp add --scope user vision-squeezer -- npx -y vision-squeezer
# This project only (Claude Code's default)
claude mcp add vision-squeezer -- npx -y vision-squeezer
# Share with the team via .mcp.json in the repo
claude mcp add --scope project vision-squeezer -- npx -y vision-squeezer
Claude Desktop
Añade a ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Cursor
cursor --add-mcp '{"name":"vision-squeezer","type":"stdio","command":"npx","args":["-y","vision-squeezer"]}'
O añade a .cursor/mcp.json:
{
"servers": {
"vision-squeezer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Haz clic aquí para ver las instrucciones de instalación para más de 10 IDE y agentes (VS Code, JetBrains, Windsurf, Zed, etc.)
VS Code Copilot
Añade a .vscode/mcp.json:
{
"servers": {
"vision-squeezer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
JetBrains (IntelliJ, WebStorm, PyCharm)
Abre Tools → GitHub Copilot → Model Context Protocol (MCP) → Configure, y luego añade:
{
"servers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Windsurf
Añade a ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Gemini CLI
gemini mcp add --scope user vision-squeezer -- npx -y vision-squeezer
O añade a ~/.gemini/settings.json (usuario) / .gemini/settings.json (proyecto):
{
"mcpServers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Codex CLI
codex mcp add vision-squeezer -- npx -y vision-squeezer
O añade a ~/.codex/config.toml:
[mcp_servers.vision-squeezer]
command = "npx"
args = ["-y", "vision-squeezer"]
Qwen Code
qwen mcp add vision-squeezer -- npx -y vision-squeezer
OpenCode
opencode mcp add es solo interactivo, así que añádelo directamente a ~/.config/opencode/opencode.json (global) o opencode.json en la raíz del repositorio (proyecto):
{
"mcp": {
"vision-squeezer": {
"type": "local",
"command": ["npx", "-y", "vision-squeezer"],
"enabled": true
}
}
}
Kimi CLI
kimi mcp add vision-squeezer -- npx -y vision-squeezer
Zed
Añade a ~/.config/zed/settings.json:
{
"context_servers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Kiro
Añade a .kiro/settings/mcp.json (espacio de trabajo) o ~/.kiro/settings/mcp.json (global):
{
"mcpServers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Antigravity
Solo MCP, no se necesitan hooks. Configúralo a través de los ajustes MCP de Antigravity:
{
"mcpServers": {
"vision-squeezer": {
"command": "npx",
"args": ["-y", "vision-squeezer"]
}
}
}
Instalación manual (binario Rust)
# From crates.io
cargo install vision-squeezer
# Or from source
git clone https://github.com/eralpozcan/vision-squeezer && cd vision-squeezer
make install # builds → ~/.local/bin/
Luego usa la ruta del binario directamente en cualquier configuración anterior en lugar de npx:
{ "command": "vision-squeezer-mcp" }
Consejo: Ejecuta
npx -y vision-squeezer --setuppara imprimir configuraciones listas con rutas auto-detectadas.
Uso desde CLI
vision-squeezer path/to/image.jpg \
--mode auto|ocr|standard \ # default: auto (detects text/grayscale)
--format jpeg|webp|avif \ # default: jpeg
--quality 85 \ # output quality 1-100 (default: 75)
--tile-size 256 \ # patch size in px (default: 512)
--no-crop \ # disable padding removal
--smart-crop \ # edge-energy crop (vs corner-tolerance)
--auto-quality 0.95 \ # binary-search quality to hit SSIM target
--bg-tolerance 25 \ # background detection 0-255 (default: 15)
--model claude|gpt4o|gpt5|gemini|llama|qwen|deepseek \ # model-aware resizing
--max-tiles 20 \ # hard cap on tile count
--json \ # machine-readable JSON output
--dry-run # run pipeline, skip disk write
Modo por lotes
Pasa un directorio en lugar de un archivo:
vision-squeezer ./screenshots --recursive --output-dir ./optimized
vision-squeezer ./screenshots --recursive --json > report.json
Las Matemáticas: Cómo te Facturan los Modelos de Visión en 2026
Si envías imágenes sin procesar a un LLM, estás perdiendo tokens. Los modelos de visión modernos no se preocupan por el tamaño de tu archivo (MB/KB); solo les importan las dimensiones en píxeles, pero cada proveedor calcula los costos de forma completamente diferente. vision-squeezer simula estos algoritmos para encontrar el tamaño mínimo matemático que reduce tu consumo de tokens sin perder contexto visual.
1. Claude (Basado en Área)
A partir de 2026 (Claude 3.5 / 4.5+), Anthropic usa una fórmula basada en área: Tokens ≈ (Width × Height) / 750.
Cada píxel de fondo sólido o relleno te cuesta tokens.
- La solución:
vision-squeezerrecorta el relleno de forma agresiva (eliminando bordes de color sólido). Una captura de pantalla de 1025×1025 se reduce lo suficiente como para pasar de 1.400 tokens a 1.024 tokens (%26 de ahorro).
2. GPT-4.5 / GPT-4o (Teselado y Escalado por Lado Corto)
OpenAI escala tu imagen para que quepa en una caja de 2048px, y luego la vuelve a escalar para que el lado más corto sea exactamente 768px. Finalmente, divide la imagen en una cuadrícula de teselas de 512×512. Cada tesela cuesta 170 tokens.
- La solución: Si el lado más corto de tu imagen termina en 769px, OpenAI pasará a una fila completamente nueva de teselas de 512×512, duplicando tu costo.
vision-squeezersimula este cálculo exacto y reduce la imagen unos pocos píxeles para que quepa perfectamente en el número mínimo de teselas.
3. Gemini 2.0 / 3.0 (Teselas Masivas)
Gemini usa un sistema de teselas masivas de 768×768 (si la imagen es > 384px). Cada tesela cuesta 258 tokens planos.
- La solución: Una imagen de 800×600 activará una cuadrícula de teselas 2×1 (1.032 tokens).
vision-squeezerla reduce ligeramente para que quepa exactamente dentro de una caja de 768×768, bajando el costo a 258 tokens (%75 de ahorro).
4. Llama 3.2 / 3.3 Vision (Teselas de 560px)
Meta tesela las imágenes de Mllama en una cuadrícula de 560×560, con un máximo de 4 teselas (~1.601 tokens cada una).
- La solución: Una captura de 2400×1670 recortada a 2400×1200 baja de un lienzo 2×2 a uno 2×1: 6.404 → 3.202 tokens (−50%). (Llama 4 usa un codificador de visión diferente y no está modelado.)
5. Qwen2-VL / 2.5-VL / 3-VL (Cuadrícula de Parches de 28px)
El Qwen-VL de Alibaba usa una cuadrícula efectiva de 28px (parche de 14px × fusión 2×2); tokens = (W/28)·(H/28) limitado a [4, 16384].
- La solución: El parche es pequeño, así que el área es la palanca: una imagen de 1024×1024 con su borde recortado a 896×896 baja de 1.369 → 1.024 tokens (−25%).
6. DeepSeek-VL2 (Teselas Anyres de 384px)
SigLIP-384 + 2× pixel-shuffle da 196 tokens/tesela en un lienzo de (m·384, n·384) (m·n ≤ 9).
- La solución: Una imagen de 800×768 reducida a 768×768 baja de teselas 3×2 a 2×2: 1.415 → 1.023 tokens (−28%). (Pesos abiertos: la ventaja es la inferencia local en contexto, no la facturación de API).
Matemáticas completas de proveedores, fórmulas exactas y fuentes citadas: visionsqueezer.com/providers
Pipeline
Input image
→ crop_padding remove solid-color borders
→ calculate_optimal_dims snap to tile boundary (always down)
→ [enforce_max_tiles] optional tile budget cap
→ resize_exact Lanczos3
→ [binarize] OCR mode only: Otsu threshold
→ JPEG/WebP encode configurable quality & format
🦀 ¿Por qué Rust?
VisionSqueezer es un middleware crítico en rendimiento. Elegimos Rust por tres razones innegociables:
- Latencia invisible: El procesamiento de imágenes nunca debería ser el cuello de botella. Rust garantiza que el ajuste, el recorte y la codificación ocurran en milisegundos, haciendo que la capa de optimización sea realmente invisible para el flujo de trabajo del desarrollador.
- Huella mínima: Como servidor MCP que se ejecuta en segundo plano en tu IDE, VisionSqueezer está diseñado para ser ultraligero, consumiendo casi cero CPU y RAM cuando está inactivo.
- Listo para Wasm: El soporte de primera clase de Rust para WebAssembly nos permite llevar la misma optimización de alto rendimiento al navegador y al Edge (Cloudflare Workers), permitiendo el exprimido del lado del cliente antes de que la imagen siquiera llegue a la red.
Caso de Estudio 1: Imagen Estándar (istanbul.jpg)
Para demostrar el impacto en imágenes estándar, aquí está la ejecución sobre una imagen de 2400×1670 (4 MP, 0.5 MB) en los tres escenarios:
Ejemplo 1: Optimización Agnóstica (Predeterminada)
Cuando no se especifica un modelo objetivo, Squeezer reduce el tamaño del archivo y optimiza matemáticamente los límites para que sean generalmente eficientes en todos los modelos.
vision-squeezer data/istanbul.jpg
Input: 2400×1670 (0.5 MB)
Output: 2048×1536 (0.3 MB, JPG q75)
File: 28.6% smaller
── Token Estimates ─────────────────────────────────────────
Model Before After Saved
------------------------------------------
Claude 5344 4194 1150 (21.5%)
GPT-4o 1105 765 340 (30.8%)
GPT-5 1536 1536 0 (0.0%)
Gemini 3096 1548 1548 (50.0%)
────────────────────────────────────────────────────────────
Ver Optimizaciones Avanzadas Dirigidas por Modelo (GPT-4o y Claude)
Ejemplo 2: Optimización Dirigida por Modelo (GPT-4o)
Si le dices a Squeezer el modelo objetivo, invierte el cálculo interno exacto del modelo (p. ej., el algoritmo de escalado por lado corto de 768px de GPT-4.5) y reduce matemáticamente la imagen lo justo para que quepa en la cuadrícula mínima absoluta de teselas.
vision-squeezer data/istanbul.jpg --model gpt4o
Input: 2400×1670 (0.5 MB)
Output: 2399×1200 (0.3 MB, JPG q75)
File: 33.6% smaller
── Token Estimates ─────────────────────────────────────────
Model Before After Saved
------------------------------------------
Claude 5344 3838 1506 (28.2%)
GPT-4o 1105 1105 0 (0.0%)
GPT-5 1536 1536 0 (0.0%)
Gemini 3096 2064 1032 (33.3%)
────────────────────────────────────────────────────────────
Observa cómo apuntar a gpt4o encaja perfectamente la imagen en un límite sólido de 6 teselas (2399x1200) calculado matemáticamente hacia atrás desde el algoritmo de escalado por lado corto de OpenAI. Maximiza la resolución exactamente hasta el punto donde se facturaría una tesela extra.
Ejemplo 3: Optimización Dirigida por Modelo (Claude)
Dado que Claude usa un cálculo basado en área (W × H / 750), Squeezer se centra principalmente en recortar agresivamente los bordes de color sólido y el relleno para reducir el área de píxeles sin reducir drásticamente el detalle visual central.
vision-squeezer data/istanbul.jpg --model claude
Input: 2400×1670 (0.5 MB)
Output: 2304×1536 (0.4 MB, JPG q75)
File: 21.3% smaller
── Token Estimates ─────────────────────────────────────────
Model Before After Saved
------------------------------------------
Claude 5344 4718 626 (11.7%)
GPT-4o 1105 1105 0 (0.0%)
GPT-5 1536 1536 0 (0.0%)
Gemini 3096 1548 1548 (50.0%)
────────────────────────────────────────────────────────────
Claude se beneficia enormemente incluso de reducciones menores en las dimensiones. Al ajustar ligeramente el ancho y el alto hacia abajo, eliminamos de inmediato más de 600 tokens mientras preservamos la gran resolución de 2304×1536.
Caso de Estudio 2: Imagen de Alta Resolución de 12 Megapíxeles (istanbul2.jpg)
Para demostrar el impacto en imágenes masivas, aquí está la ejecución sobre una imagen de 4096×3072 (12 MP, 2.2 MB) en los tres escenarios:
Ejemplo 1: Optimización Agnóstica
vision-squeezer data/istanbul2.jpg
Input: 4096×3072 (2.2 MB)
Output: 3584×2560 (1.3 MB, JPG q75)
File: 39.6% smaller
── Token Estimates ─────────────────────────────────────────
Model Before After Saved
------------------------------------------
Claude 16777 12233 4544 (27.1%)
GPT-4o 765 1105 0 (0.0%)
GPT-5 1536 1536 0 (0.0%)
Gemini 6192 5160 1032 (16.7%)
────────────────────────────────────────────────────────────
(Observa la Anomalía de Relación de Aspecto de OpenAI: Squeezer eliminó el letterboxing pesado (relleno) de esta imagen. Al eliminar el relleno, la imagen se volvió "más ancha". Como la API de OpenAI fuerza el nuevo lado corto a 768px, la relación de aspecto ancha empujó el lado largo a una tercera columna de la cuadrícula de teselas. Este es un caso límite fascinante donde recortar relleno matemáticamente AUMENTA tu costo de tokens en GPT-4o. Si usas específicamente --model gpt4o en esta imagen, Squeezer detectará esta paradoja y usará una restricción de cuadrícula diferente).
Ver Optimizaciones Avanzadas Dirigidas por Modelo (GPT-4o y Claude)
Ejemplo 2: Optimización Dirigida por Modelo (GPT-4o)
vision-squeezer data/istanbul2.jpg --model gpt4o
Input: 4096×3072 (2.2 MB)
Output: 4095×2048 (1.2 MB, JPG q75)
File: 43.2% smaller
── Token Estimates ─────────────────────────────────────────
Model Before After Saved
------------------------------------------
Claude 16777 11182 5595 (33.3%)
GPT-4o 765 1105 0 (0.0%)
GPT-5 1536 1536 0 (0.0%)
Gemini 6192 4644 1548 (25.0%)
────────────────────────────────────────────────────────────
(Al apuntar explícitamente a gpt4o, Squeezer optimiza los límites para que la nueva relación de aspecto quede contenida de forma segura. Si bien GPT-4o aún factura el diseño de 6 teselas debido al ancho inherente de la imagen, Squeezer reduce la huella del archivo en un 43% sin sacrificar los detalles de alta resolución).
Ejemplo 3: Optimización Dirigida por Modelo (Claude)
vision-squeezer data/istanbul2.jpg --model claude
Input: 4096×3072 (2.2 MB)
Output: 3840×2816 (1.5 MB, JPG q75)
File: 31.5% smaller
── Token Estimates ─────────────────────────────────────────
Model Before After Saved
------------------------------------------
Claude 16777 14417 2360 (14.1%)
GPT-4o 765 1105 0 (0.0%)
GPT-5 1536 1536 0 (0.0%)
Gemini 6192 5160 1032 (16.7%)
────────────────────────────────────────────────────────────
(La fórmula basada en área de Claude nuevamente permite ahorros masivos de tokens simplemente recortando al límite de 3840×2816, evitando que pagues por más de 2.300 tokens de relleno puro mientras conservas más de 10 megapíxeles de fidelidad).
💡 Pregunta frecuente: Espera, ¿por qué apuntar a
gpt4oahorró 33% de los tokens de Claude, pero apuntar aclaudesolo ahorró 14%? Debido al equilibrio entre Calidad y Agresividad. OpenAI impone una resolución interna máxima estricta (2048px). Cuando apuntas agpt4o, Squeezer debe comprimir agresivamente la imagen masiva de 4096px para que quepa en las restricciones de OpenAI (4095x2048). Esta pérdida masiva en el área total de píxeles se traduce matemáticamente en una enorme reducción de tokens para Claude. Sin embargo, Claude no tiene esos límites máximos. Cuando apuntas explícitamente aclaude, Squeezer sabe que no necesita destruir la resolución de tu imagen. Conserva cuidadosamente el gran tamaño de 3840x2816 para preservar el detalle ultrafino, recortando solo el relleno mínimo absoluto para darte la versión sin pérdida más rentable posible.
Benchmark / Ahorros
Consumo real de tokens antes y después de vision-squeezer (usando fotos y capturas de pantalla estándar sin --max-tiles). Los cálculos usan las fórmulas de facturación actualizadas de 2026.
| Tamaño original | Modelo | Tokens antes | Tokens después | Ahorro |
|---|---|---|---|---|
| 1025 × 1025 (Captura de pantalla) | Claude 4.5+ GPT-4.5 Gemini 2.0+ | 1,400 425 1,032 | 1,024 255 258 | 26.8% 40.0% 75.0% |
| 4032 × 3024 (Cámara del teléfono) | Claude 4.5+ GPT-4.5 Gemini 2.0+ | 16,257 2,125 6,192 | 12,232 1,745 4,128 | 24.8% 17.9% 33.3% |
| 800 × 600 (Imagen web) | Claude 4.5+ GPT-4.5 Gemini 2.0+ | 640 255 1,032 | 341 255 258 | 46.7% 0.0% 75.0% |
(Nota: Los límites altos de GPT-5 hacen que rara vez requiera optimización por mosaicos a menos que la imagen supere los 6000px, pero vision-squeezer igualmente recortará el relleno y comprimirá drásticamente el tamaño del archivo).
Herramienta MCP: optimize_image
| Argumento | Tipo | Obligatorio | Predeterminado |
|---|---|---|---|
image_base64 | string | ✓ | — |
mode | "auto" | "standard" | "ocr" | — | "auto" |
output_format | "jpeg" | "webp" | — | "jpeg" |
quality | entero 1–100 | — | 75 |
tile_size | entero | — | 512 |
crop | booleano | — | true |
bg_tolerance | entero 0–255 | — | 15 |
max_tiles | entero | — | — |
target_model | "claude" | "gpt4o" | "gpt5" | "gemini" | — | — |
Respuesta:
{
"optimized_base64": "...",
"savings_report": {
"tiles_before": 48,
"tiles_after": 35,
"tiles_saved": 13,
"token_reduction_pct": "27.1",
"size_reduction_pct": "58.9"
}
}
Referencia de configuración
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
quality | u8 1–100 | 75 | Calidad de salida JPEG/WebP |
tile_size | u32 | 512 | Tamaño de mosaico del modelo (512 = Claude/GPT, 256 = Gemini) |
crop | bool | true | Eliminar bordes de relleno de color sólido |
bg_tolerance | u8 0–255 | 15 | Delta de canal máximo para detección de fondo |
output_format | jpeg/webp | jpeg | Codificación de salida. WebP es ~30-50% más pequeño |
max_tiles | u32 | — | Límite máximo de mosaicos (reducción progresiva) |
target_model | string | — | Según el modelo: claude, gpt4o, gpt5, gemini |
Modelos compatibles
| Modelo | Tamaño de mosaico | Pre-escalado | Fórmula de tokens |
|---|---|---|---|
| Claude 3.5/4.5/4.7 | N/A | Ninguno | Tokens ≈ (W × H) / 750 |
| GPT-4o / GPT-4.5 | 512×512 | ajustar 2048px → escalar lado corto a 768px | 85 + mosaicos × 170 |
| GPT-5/5.5 | 512×512 | ajustar 6000px / 10.24M px | min(85 + mosaicos × 170, 1536) |
| Gemini 2.0/3.0 | 768×768 | > 384x384 → ajustar 4096px | 258 por mosaico (flat 258 si es pequeño) |
Funciones avanzadas
Persistencia y analítica
VisionSqueezer registra cada optimización localmente en ~/.vision-squeezer/stats.db.
vision-squeezer stats
── VisionSqueezer Analytics ────────────────────────────────
Total Optimizations: 42
Total Tokens Saved: 842,500
Total Bytes Saved: 156.40 MB
Estimated USD Saved: $2.11
────────────────────────────────────────────────────────────
Hook de shell y habilidades de Claude Code
Añade a .zshrc / .bashrc:
eval "$(vision-squeezer setup-hook)"
Esto instala dos cosas a la vez:
- Alias
squeeze— optimiza y captura la ruta de salida en un solo paso:img_path=$(squeeze data/logo.png --model gemini) - Habilidades de Claude Code — escritas en
~/.claude/skills/automáticamente en la primera ejecución
Habilidades disponibles
| Habilidad | Activador | Qué hace |
|---|---|---|
vision-stats | /vision-stats | Muestra el ahorro acumulado de tokens y bytes — lee stats.db local, sin sobrecarga de MCP |
vision-doctor | /vision-doctor | Comprueba la versión instalada vs la última versión npm, muestra el comando de actualización si está desactualizada |
vision-upgrade | /vision-upgrade | Detecta el método de instalación (cargo/npm/npx) y ejecuta el comando de actualización correcto |
Ejemplo de salida:
/vision-stats
── VisionSqueezer Analytics ────────────────────────────────
Total Optimizations: 42
Total Tokens Saved: 842,500
Total Bytes Saved: 156.40 MB
Estimated USD Saved: $2.11
────────────────────────────────────────────────────────────
/vision-doctor
## VisionSqueezer Doctor
- [x] Binary found: /usr/local/bin/vision-squeezer
- [x] Installed version: 0.1.8
- [x] Latest version (npm): 0.1.8
- [x] Status: Up to date
Instalación desde el marketplace (alternativa a setup-hook):
Añade a ~/.claude/settings.json:
{
"extraKnownMarketplaces": {
"vision-squeezer": {
"source": { "source": "github", "repo": "eralpozcan/vision-squeezer" }
}
}
}
Luego ejecuta /plugins add vision-stats@vision-squeezer, /plugins add vision-doctor@vision-squeezer, o /plugins add vision-upgrade@vision-squeezer en Claude Code.
Modo sandbox: «Pensar en código»
Ejecuta operaciones atómicas localmente antes de que la imagen llegue a un LLM. El agente decide cómo procesar la imagen; tú pagas cero tokens por los pasos intermedios.
CLI:
vision-squeezer screenshot.png --ops '[{"op":"crop","x":10,"y":20,"width":500,"height":500},{"op":"binarize"}]'
Herramienta MCP — sandbox_execute:
| Argumento | Tipo | Descripción |
|---|---|---|
image_base64 | string | Imagen de entrada |
operations | array | Lista ordenada de operaciones a aplicar |
Operaciones soportadas: crop, grayscale, binarize, resize, contrast, brightness.
Integración con crawler
Optimiza imágenes sobre la marcha en cualquier pipeline de scraping con Playwright/Puppeteer — cero desperdicio de tokens de API en capturas de pantalla sin procesar.
await page.route('**/*.{png,jpg}', async (route) => {
const response = await route.fetch();
const body = await response.body();
const optimized = await squeeze(body); // pipe through vision-squeezer
route.fulfill({ body: optimized });
});
Contribuciones
Se aceptan PRs. Consulta CONTRIBUTING.md para la configuración y las pautas. Por favor sigue nuestro Código de conducta.
Licencia
Elastic License 2.0 (ELv2) — Consulta LICENSE para más detalles.