← Volver al catálogo

🖼️ Merchant Upscale Images (subir resolución)

Archivo: agentes/marketing/merchant-upscale-images.ts · Plist: _(ninguno)_ · Horario: Manual (flag LIMIT)

Qué hace

Resuelve el issue de Merchant image_too_small_for_high_resolution: detecta imágenes de productos con menos de 500px y las sube a ≥1024px. Para imágenes que ya tienen ≥300px usa un resize local con sharp (kernel lanczos3, rápido y gratis); para las muy pequeñas (<300px) usa el upscaler de IA fal-ai/aura-sr. Luego sustituye la imagen vieja por la nueva en Shopify (sube la mejorada y borra la original), conservando el ALT con el título del producto.

Cómo funciona

1. Carga .env; lee LIMIT (default 50) y MIN_PX=500.

2. Pagina productos activos (campos id/title/images) y junta todas las imágenes con width/height < 500px.

3. Por imagen (hasta LIMIT): descarga el original; si min(w,h)≥300 → resize local con sharp a ≥1024px; si no → encola fal-ai/aura-sr (factor 4), hace polling y descarga el resultado.

4. POST /products/{id}/images con la imagen nueva en base64 (attachment) y DELETE de la imagen vieja. Throttle 500ms.

5. Resumen procesadas/ok/errores.

Datos/APIs

  • Shopify Admin API (2024-10): products read, images POST/DELETE.
  • fal.ai (fal-ai/aura-sr) solo para imágenes <300px.
  • sharp (resize local lanczos3).
  • Vars .env: SHOPIFY_STORE, SHOPIFY_ACCESS_TOKEN, FAL_API_KEY.

Cómo probarlo

cd /Users/user/rifai-agents && LIMIT=3 npx tsx agentes/marketing/merchant-upscale-images.ts

Espera: nº de imágenes <500px detectadas, muestra de las más pequeñas, y por cada una [sharp] o [fal-aura] upscaled. Reemplaza imágenes reales (sube nueva + borra vieja). Si no hay imágenes pequeñas, sale con "Nada que upscalar".

Si se rompe / recuperar

  • Sin plist. Usar LIMIT bajo en pruebas; cada fallo cuenta error y sigue.
  • El borrado de la imagen original es irreversible: probar con LIMIT pequeño primero.
  • Logs: stdout (redirigir a /Users/user/rifai-agents/logs/merchant-upscale-images.log).

Cómo replicarlo

  • Detección de imágenes <500px por width/height del producto.
  • Estrategia híbrida: sharp local (≥300px) vs fal aura-sr (<300px).
  • Sustitución en Shopify (POST attachment base64 + DELETE vieja) con ALT = título.