VisionSqueezer

Servidor MCP de optimización de imágenes nativo para LLM

Documentación

VisionSqueezer Logo

VisionSqueezer

Build crates.io npm License

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) o mcp-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 --setup para 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-squeezer recorta 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-squeezer simula 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-squeezer la 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 gpt4o ahorró 33% de los tokens de Claude, pero apuntar a claude solo ahorró 14%? Debido al equilibrio entre Calidad y Agresividad. OpenAI impone una resolución interna máxima estricta (2048px). Cuando apuntas a gpt4o, 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 a claude, 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 originalModeloTokens antesTokens despuésAhorro
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

ArgumentoTipoObligatorioPredeterminado
image_base64string
mode"auto" | "standard" | "ocr""auto"
output_format"jpeg" | "webp""jpeg"
qualityentero 1–10075
tile_sizeentero512
cropbooleanotrue
bg_toleranceentero 0–25515
max_tilesentero
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ámetroTipoPredeterminadoDescripción
qualityu8 1–10075Calidad de salida JPEG/WebP
tile_sizeu32512Tamaño de mosaico del modelo (512 = Claude/GPT, 256 = Gemini)
cropbooltrueEliminar bordes de relleno de color sólido
bg_toleranceu8 0–25515Delta de canal máximo para detección de fondo
output_formatjpeg/webpjpegCodificación de salida. WebP es ~30-50% más pequeño
max_tilesu32Límite máximo de mosaicos (reducción progresiva)
target_modelstringSegún el modelo: claude, gpt4o, gpt5, gemini

Modelos compatibles

ModeloTamaño de mosaicoPre-escaladoFórmula de tokens
Claude 3.5/4.5/4.7N/ANingunoTokens ≈ (W × H) / 750
GPT-4o / GPT-4.5512×512ajustar 2048px → escalar lado corto a 768px85 + mosaicos × 170
GPT-5/5.5512×512ajustar 6000px / 10.24M pxmin(85 + mosaicos × 170, 1536)
Gemini 2.0/3.0768×768> 384x384 → ajustar 4096px258 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

HabilidadActivadorQué hace
vision-stats/vision-statsMuestra el ahorro acumulado de tokens y bytes — lee stats.db local, sin sobrecarga de MCP
vision-doctor/vision-doctorComprueba la versión instalada vs la última versión npm, muestra el comando de actualización si está desactualizada
vision-upgrade/vision-upgradeDetecta 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:

ArgumentoTipoDescripción
image_base64stringImagen de entrada
operationsarrayLista 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.