🖼️ 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
LIMITbajo en pruebas; cada fallo cuenta error y sigue. - El borrado de la imagen original es irreversible: probar con
LIMITpequeñ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.