Blog Arquitectura Neges

IA en Asset Manager: imágenes y metadata

Qué valida la POC de IA en Asset Manager: mejora de imágenes, sugerencias de metadata, proveedores OpenAI/Gemini, permisos por tenant y criterios para pasar a producción.

16 min de lectura

La POC dejó de ser sólo un botón para mejorar imágenes. Ahora prueba dos capacidades de IA dentro de Asset Manager: reemplazar una imagen con una versión generada y sugerir metadata editable para alt text y caption. Ambas viven detrás del módulo `asset-ai`, se activan por tenant y se ejecutan desde Strapi, sin exponer API keys en Angular.

Resumen ejecutivo

El backend ahora resuelve el proveedor de IA por configuración. Puede ejecutar mejora de imagen y sugerencia de metadata con OpenAI o Gemini sin cambiar el frontend. Angular sólo llama endpoints propios de Strapi; los secretos quedan en backend.

El módulo `asset-ai` sigue apagado por defecto. Al habilitarlo desde `/admin/tenants/:tenantDocumentId/modules`, expone dos permisos: `assets.aiEnhance` para mejorar o reemplazar imágenes y `assets.aiMetadata` para sugerir alt text y caption.

La mejora de imagen sigue siendo la acción más sensible porque reemplaza el media actual. Para POC puede probarse en un tenant interno con imágenes no críticas. Para producción necesita preview, aprobación explícita, historial y rollback antes de tocar el archivo original.

La sugerencia de metadata es el mejor primer experimento de valor: no reemplaza la imagen, devuelve una propuesta editable y permite probar Gemini con menor riesgo operativo. Hoy se guardan `altText` y `caption`; `keywords` se muestran como apoyo, pero no se persisten porque el schema actual no tiene ese campo.

Qué quedó implementado

La experiencia mantiene una regla simple: las acciones de IA sólo aparecen cuando el tenant, el rol, el módulo y el asset cumplen todas las condiciones. La decisión de proveedor queda fuera de Angular.

  • `Mejorar` aparece con tenant activo, módulo `asset-ai`, asset activo, media disponible y permiso `assets.aiEnhance`.
  • `Sugerir metadata` aparece con las mismas condiciones base y permiso `assets.aiMetadata`.
  • `POST /api/image-assets/:documentId/ai-enhance` reemplaza el media actual con la imagen generada por el proveedor configurado.
  • `POST /api/image-assets/:documentId/ai-metadata-suggestions` devuelve JSON normalizado con `altText`, `caption`, `keywords`, `confidence` y `notes`.
  • `IMAGE_ENHANCEMENT_PROVIDER` selecciona OpenAI o Gemini para mejora de imagen.
  • `ASSET_METADATA_PROVIDER` selecciona OpenAI o Gemini para metadata; si no existe, reutiliza `IMAGE_ENHANCEMENT_PROVIDER`.
  • Strapi valida auth, tenant, membership, permisos y búsqueda del asset dentro del tenant antes de llamar a IA.

Flujo de mejora de imagen

  1. El usuario abre el detalle de un asset

    Angular revisa tenant activo, permisos `assets.read` y `assets.update`, permiso `assets.aiEnhance`, estado del asset y existencia de media.

  2. La acción aparece sólo cuando corresponde

    Si falta una condición, el botón `Mejorar` no se muestra. La UI no intenta resolver permisos por texto ni por decisiones aisladas del componente.

  3. El usuario confirma el reemplazo

    Antes de llamar al backend, la UI avisa que la imagen será procesada por IA y reemplazará el archivo actual.

  4. Strapi valida el contexto

    El endpoint aplica policies de autenticación, tenant, membresía, `assets.update` y `assets.aiEnhance`.

  5. El backend elige proveedor

    El service lee los bytes del media y usa `IMAGE_ENHANCEMENT_PROVIDER` para llamar a OpenAI o Gemini con un prompt conservador.

  6. Strapi reemplaza el archivo

    La imagen generada se escribe en un archivo temporal y Strapi Upload reemplaza el media actual. Después el backend elimina el temporal y devuelve el asset actualizado.

Flujo de sugerencia de metadata

  1. El usuario pide metadata sugerida

    Angular valida tenant, permisos `assets.read`, `assets.update`, `assets.aiMetadata`, asset activo y media disponible.

  2. Strapi pide una respuesta estructurada

    El endpoint `ai-metadata-suggestions` envía la imagen y contexto del asset: nombre, categoría, alt text actual y caption actual.

  3. El proveedor devuelve JSON normalizado

    La respuesta incluye `altText`, `caption`, `keywords`, `confidence` y `notes`, usando OpenAI o Gemini según `ASSET_METADATA_PROVIDER`.

  4. La UI muestra una propuesta editable

    El usuario revisa la sugerencia en un modal y puede ajustar `altText` y `caption` antes de aplicar.

  5. Sólo se guarda metadata aprobada

    Al aplicar, Angular usa el update existente de assets. No se reemplaza la imagen y no se persisten keywords todavía.

Feature flag y permisos

asset-ai-permissions.mmdmermaid
El diagrama se renderiza al cargar la pagina.

Selección de proveedor

asset-ai-provider-selection.mmdmermaid
El diagrama se renderiza al cargar la pagina.

Flujo de mejora de imagen

asset-ai-flow.mmdmermaid
El diagrama se renderiza al cargar la pagina.

Flujo de sugerencia de metadata

asset-ai-metadata-flow.mmdmermaid
El diagrama se renderiza al cargar la pagina.

Arquitectura actual

asset-ai-architecture.mmdmermaid
El diagrama se renderiza al cargar la pagina.

Hallazgos que definen el rollout

  • P1: la mejora de imagen usa `uploadService.replace` sobre el media actual.
  • P2: Gemini no debe asumirse gratis para generación de imágenes; `gemini-2.5-flash-image` aparece sin free tier en Standard.
  • P2: el free tier de Gemini puede usar datos para mejorar productos; para datos reales conviene revisar términos y paid tier.
  • P2: falta persistir auditoría y costos por tenant, usuario, asset, proveedor, modelo, requestId, status y error.
  • P2: conviene validar formato real, tamaño y compatibilidad antes de llamar al proveedor.
  • P3: `keywords` se muestran en la sugerencia, pero no se guardan porque el schema de `image-asset` no tiene ese campo.
  • P3: faltan tests de ruta con Strapi completo, provider mockeado y upload mockeado.

Cómo leer los errores de prueba

Hay dos familias de error que conviene separar en la UI y en los logs. Mezclarlas hace que una prueba local parezca un problema de IA cuando, en realidad, puede ser un backend apagado.

  1. “No fue posible conectar con el servicio”

    Angular no pudo contactar Strapi. Revisa que el backend esté levantado, que `localhost:1337` responda, que `apiBaseUrl` apunte al host correcto y que CORS/proxy no bloquee la llamada.

  2. Error 400 del proveedor de imagen

    Strapi respondió, pero el proveedor rechazó la operación. Las causas probables son formato no compatible, imagen demasiado grande, modelo sin acceso, facturación pendiente, parámetros no soportados, cuota agotada o API key sin permisos suficientes.

  3. Metadata con JSON inválido

    El proveedor respondió texto que no cumple el schema esperado. La mitigación actual normaliza y falla como error de provider; el siguiente paso es registrar `requestId` y una muestra redactada del error para diagnóstico.

Configuración por proveedor

La API key debe vivir sólo en backend. Angular no necesita saber si la POC corre con OpenAI, Gemini o una combinación de ambos.

.env - Gemini para ambas capacidadesbash
SERVER_URL=http://localhost:1337
IMAGE_ENHANCEMENT_PROVIDER=gemini
GEMINI_API_KEY=AIza...
GEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta
GEMINI_IMAGE_ENHANCEMENT_MODEL=gemini-2.5-flash-image
GEMINI_ASSET_METADATA_MODEL=gemini-2.5-flash-lite
.env - OpenAI para ambas capacidadesbash
SERVER_URL=http://localhost:1337
IMAGE_ENHANCEMENT_PROVIDER=openai
OPENAI_API_KEY=sk-proj-...
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_IMAGE_ENHANCEMENT_MODEL=gpt-image-1.5
OPENAI_IMAGE_ENHANCEMENT_QUALITY=medium
OPENAI_IMAGE_ENHANCEMENT_OUTPUT_FORMAT=jpeg
OPENAI_ASSET_METADATA_MODEL=gpt-4.1-mini
.env - Metadata con Gemini y mejora con OpenAIbash
IMAGE_ENHANCEMENT_PROVIDER=openai
ASSET_METADATA_PROVIDER=gemini
OPENAI_API_KEY=sk-proj-...
GEMINI_API_KEY=AIza...

Costo y datos para probar

Según la documentación pública consultada el 3 de mayo de 2026, GPT Image 1.5 muestra precios de referencia para salida 1024x1024: cerca de USD 0.009 en low, USD 0.034 en medium y USD 0.133 en high. También hay que considerar tokens de entrada y reintentos.

  • OpenAI con `quality=medium`: 50 pruebas de salida 1024x1024 cuestan cerca de USD 1.70, más input y variaciones por reintento.
  • Gemini 2.5 Flash Image: la tabla de precios lo muestra sin free tier en Standard y con salida cercana a USD 0.039 por imagen de hasta 1024x1024.
  • Gemini 2.5 Flash-Lite para metadata: aparece con input/output sin cargo en Standard free tier; en paid tier, la tabla muestra USD 0.10 por 1M tokens de input y USD 0.40 por 1M tokens de output.
  • Para contenido real de clientes, revisa política de uso de datos: el free tier de Gemini aparece como usado para mejorar productos; paid tier aparece como no usado para ese fin.

Plan antes de producción

  1. Estabilizar la POC

    Probar metadata con Gemini Flash-Lite, probar mejora con OpenAI y Gemini usando imágenes no críticas, validar errores de config/cuota/formato y agregar tests backend de rutas IA.

  2. Proteger el producto

    Cambiar la mejora de imagen a preview/aprobación, guardar original y generado, agregar rollback visible y persistir historial de ejecuciones IA.

  3. Agregar control operativo

    Persistir usage y costo estimado por tenant/usuario/asset, agregar límites por tenant, dashboard simple de uso IA y alertas por errores 400/429/500.

  4. Preparar múltiples proveedores

    Mantener providers detrás de interfaces estables y evitar que Angular conozca OpenAI o Gemini. Evaluar modelos locales sólo si existe infraestructura y un caso de negocio claro.

Decisión de rollout sugerida

Para POC, mantén `asset-ai` apagado por defecto, habilítalo sólo en un tenant interno o de prueba, parte por `Sugerir metadata` con Gemini Flash-Lite y usa `Mejorar` sólo con imágenes no críticas.

Para beta cerrada, habilita por tenant seleccionado, agrega aviso claro antes de reemplazar imagen, persiste un evento mínimo de auditoría y monitorea costo y errores por proveedor.

Para producción, exige preview/aprobación, historial, rollback, límites de uso, tests backend y al menos una prueba end-to-end del flujo completo.

Recursos relacionados

¿Te fue útil este contenido?

Tu feedback nos ayuda a mejorar la documentación de Neges.

Soporte humano

¿No encuentras lo que buscas?

Conversa con nuestro equipo de soporte en español. Respondemos por WhatsApp, correo o ticket en menos de 24 horas hábiles.

soporte@neges.clLun a Vie · 9 a 18 hrs
+56 9 0000 0000WhatsApp Business