Skip to Content
📚 Bienvenido a la documentación técnica de Rial AI 👋
🔄 FlujosFlujo: Creación de Proyecto

Flujo: Creación de Proyecto

¿Quién lo usa?

RolPermiso requerido
BRAND_ADMINPROJECT_CREATOR
COMPANY_ADMINPROJECT_CREATOR

¿Por qué importa?

La creación de proyecto es el punto de entrada de todo el ciclo de vida de Rial. Aquí el cliente define qué imágenes necesita: tipo de servicio, prendas, SKUs y configuración. Un proyecto mal configurado genera retrabajo costoso en etapas posteriores.

Entrada en la plataforma

URL: /projects/create

El cliente navega a esta ruta desde el botón “Nuevo proyecto” en la barra lateral. La plataforma muestra tres tipos de proyecto disponibles:

Selector de tipo de proyecto: Faceswap, Generación masiva, Producto

Ruta del componente: app/(private)/projects/create/page.tsxProjectTypeSelector

Opción en UIProjectTypeComponentePasos
FaceswapFACESWAPExcelProjectFaceswapConfiguración → Excel → Fotos → Modelo → Resumen
Generación masivaBATCHExcelProjectBatchConfiguración → Excel → Fotos → Modelo → Resumen
ProductoPRODUCTExcelProjectProductConfiguración → Excel → Fotos → Resumen

Nota: El paso de selección de modelo no existe en proyectos de tipo PRODUCT.

Pasos del flujo

El flujo es manejado por ExcelProjectBase, un componente genérico que recibe la configuración específica de cada tipo de proyecto vía la prop config.

Paso 1 — Configuración (ExcelProjectStep.CONFIGURATION)

Componente: CreateExcelForm

El usuario completa los datos generales que se aplican a todos los proyectos creados desde este lote:

CampoRequeridoDescripción
Nombre baseSe usa como prefijo en cada ProjectFolder
TemporadaEj: Primavera, Verano, etc.
AñoEj: 2025
Formato de envíoImagen (default) o Video — afecta el mediaType
DescripciónCampo libre, opcional

Endpoints en este paso: ninguno — los datos se guardan en el estado del formulario.

Validación para continuar: name, season y year deben estar completos.

Paso 1 — Formulario de configuración: nombre base, temporada, año y formato de envío

Paso 2 — Subir Excel (ExcelProjectStep.EXCEL_UPLOAD)

Componente: UploadExcelForm

El usuario arrastra o selecciona un archivo .xlsx con la estructura de SKUs del proyecto. El archivo se valida automáticamente al cargarlo.

Columnas requeridas por tipo:

  • Marca — debe existir en la plataforma (obligatorio)
  • GeneroHombre, Mujer o Unisex (opcional)
  • Edad — en años (25) o meses ("6m") (opcional)
  • SKU — identificador único con formato XXX.ext (obligatorio)
  • Vista — solo Faceswap: formato XXX_YY.ext o XXX-YY.ext (obligatorio)

Endpoint utilizado:

POST /excel/projects/validate Body: FormData { file, projectType, projectName } Response: { isValid, error?, data: { excelData, duplicatedSkus } }

El backend procesa el Excel y retorna:

  • excelData — estructura con proyectos agrupados por marca, lista de SKUs, modelos sugeridos
  • duplicatedSkus — SKUs que ya existen en proyectos anteriores (se muestra una alerta de advertencia)

Validación para continuar: el Excel debe ser válido y contener al menos una fila por proyecto.

Paso 2 — Excel cargado exitosamente con las columnas de SKUs y marcas

Paso 3 — Subir fotos (ExcelProjectStep.UPLOAD_IMAGES)

Componente: UploadImagesForm

El usuario carga las imágenes de las prendas. Todos los archivos se mantienen en memoria del navegador (File[]) y no se suben al servidor en este paso.

La interfaz muestra las imágenes paginadas de 20 en 20 (ordenadas alfabéticamente por nombre) y permite previsualizarlas con hover. Si se detectan imágenes con el mismo nombre de archivo (SKU duplicado), se muestra una alerta de advertencia y las imágenes duplicadas son rechazadas.

Endpoints en este paso: ninguno.

Validación para continuar: debe haber al menos una imagen seleccionada.

Paso 3 — Imágenes de prendas cargadas, listas para el matching con los SKUs del Excel

Paso 4 — Modelo (ExcelProjectStep.MODEL)

Componente: SelectModelFormProjectModelSelectionModelSelectionGrid

Solo disponible para FACESWAP y BATCH. El tipo PRODUCT omite este paso.

El usuario selecciona el modelo (o modelos) de IA que reemplazará a los modelos de las fotografías originales. La selección se hace por marca y género:

  • Hombre → 1 slot de modelo
  • Mujer → 1 slot de modelo
  • Unisex → 1 slot femenino + 1 slot masculino

La validación comprueba que cada proyecto tenga al menos un modelo seleccionado acorde al género declarado en el Excel.

Endpoints en este paso: ninguno — la selección se guarda en el form state como modelIds[projectKey].

Paso 4 — Selección de modelos AI por marca y género

Paso 5 — Resumen (ExcelProjectStep.SUMMARY)

Componente: ProcessingResultsForm

Al avanzar al paso de Resumen, el sistema cruza automáticamente los nombres de las imágenes subidas con los SKUs del Excel. Este cruce determina qué imágenes corresponden a cada SKU y cuáles sobran o faltan.

Endpoint utilizado:

POST /excel/projects/match Body: { projects: SkusByProjectKey, fileNames: string[], projectType } Response: { result: { data: MatchedExcelResult, isValid, error? } }

Para lotes grandes de imágenes (> EXCEL_FILENAMES_CHUNK_SIZE), las llamadas se hacen en chunks y los resultados se combinan en el frontend con mergeMatchedExcelResults.

El resumen muestra:

MétricaDescripción
Marcas encontradasTotal de ProjectFolder que se crearán
SKUs totalesFilas únicas del Excel
Imágenes subidasTotal de archivos seleccionados
Matching exitoso% de imágenes que coincidieron con un SKU

Si hay imágenes con nombres que no corresponden a ningún SKU (extraImages) o SKUs sin imagen (unmatchedImages), el sistema bloquea la creación mostrando alertas de error.

El usuario puede descargar un reporte Excel del matching:

POST /excel/projects/report Body: { matchedImages, unmatchedImages, extraImages } Response: blob (.xlsx)

Validación para crear: no deben existir unmatchedImages ni extraImages.

Paso 5 — Resumen del procesamiento con métricas de matching y confirmación para crear los proyectos

Creación de proyectos (submit)

Al presionar “Crear proyectos”, el proceso corre en background (useBackgroundProcessing) y el usuario es redirigido a /projects?creating=true mientras se completa.

El flujo se ejecuta secuencialmente por cada marca encontrada en el Excel:

Para cada (projectKey, projectResult) en processingResult.projects: 1. POST /uploads/request-signed-urls Body: { fileNames, uploadType: CREATE_PROJECT, brandId, projectType, skus } Response: { signedUrls: { [fileName]: string } } 2. PUT [signed-url] ← directo a Google Cloud Storage (concurrente, máx. 10 en paralelo) Body: archivo de imagen Headers: Content-Type: image/... 3. POST /projects/faceswap ← o /batch o /product según el tipo Body: { name, brandId, season, description, fileNames, modelIds, skus, gender, age, mediaType, ... } Response: { project: Project, projectFolder: ProjectFolder }

Una vez que todos los proyectos se crean exitosamente:

4. PATCH /status/mark-as-in-progress/{projectFolderId} — Cambia el estado del ProjectFolder a IN_PROGRESS 5. PATCH /generated-images/tag-faceswap/{projectFolderId} ← solo FACESWAP — Etiqueta las imágenes de bypass (fotos originales que no se procesarán con AI) Response: { jobId: string }

Estado resultante

ProjectFolder.clientStatus = CREATING → IN_PROGRESS ProjectFolder.adminStatus = CREATING → IN_PROGRESS ProjectImage.adminStatus = IN_PROGRESS (listo para generar)

El admin recibe una notificación (ADMIN_PROJECT_CREATED) cuando el caso queda creado.

Secuencia técnica

Resumen de endpoints

PasoMétodoEndpointDescripción
2POST/excel/projects/validateValida el Excel subido y extrae SKUs
5POST/excel/projects/matchCruza imágenes con SKUs del Excel
5POST/excel/projects/reportDescarga reporte Excel del matching
SubmitPOST/uploads/request-signed-urlsObtiene URLs firmadas de GCS
SubmitPUT[signed-url]Sube imágenes directamente a GCS
SubmitPOST/projects/faceswapCrea proyecto Faceswap
SubmitPOST/projects/batchCrea proyecto Generación Masiva
SubmitPOST/projects/productCrea proyecto Producto
SubmitPATCH/status/mark-as-in-progress/{id}Marca el ProjectFolder como IN_PROGRESS
SubmitPATCH/generated-images/tag-faceswap/{id}Etiqueta imágenes bypass (solo FACESWAP)

Notas importantes

  • El Excel es procesado y validado en el backend (/excel/projects/validate) antes de avanzar al siguiente paso. Los errores de formato o columnas faltantes se detectan en este punto.
  • Si el cliente no tiene el permiso PROJECT_CREATOR, el botón “Nuevo proyecto” no aparece en la UI.
  • Un ProjectFolder contiene múltiples Project (uno por marca) si el Excel incluye varias marcas.
  • Las imágenes nunca pasan por el backend; se suben directamente a GCS usando signed URLs de corta duración.
  • El proceso de creación corre en background: el usuario puede navegar a otra sección mientras los proyectos se crean. Al completarse exitosamente, se redirige a /projects?created=true.
Last updated on