--- id: "RF-PMC-004" title: "Generation Module" type: "Requirement" status: "Done" priority: "Alta" module: "generation" project: "platform_marketing_content" version: "1.0" rf_count: 18 created_date: "2025-12-08" updated_date: "2026-01-04" --- # Requerimientos Funcionales - PMC-004 Generation **Módulo:** Generation (Motor IA) **Versión:** 1.0.0 **Fecha:** 2025-12-08 --- ## Generación de Imágenes ### RF-PMC-004-001: Generar Imagen Text-to-Image | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-001 | | **Nombre** | Generar Imagen Text-to-Image | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de entrada:** - prompt: string (requerido) - negative_prompt: string (opcional) - width: number (default: 1024) - height: number (default: 1024) - seed: number (opcional, aleatorio si no se especifica) - steps: number (default: 30) - cfg_scale: number (default: 7.5) - lora_id: UUID (opcional) - brand_id: UUID (opcional, para cargar LoRA automáticamente) **Criterios de aceptación:** - [ ] Imagen se genera correctamente - [ ] Parámetros se aplican - [ ] LoRA se carga si especificado - [ ] Asset se crea automáticamente --- ### RF-PMC-004-002: Generar Imagen Image-to-Image | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-002 | | **Nombre** | Generar Imagen Image-to-Image | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de entrada:** - input_image: file/URL (requerido) - prompt: string (requerido) - strength: number (0.0-1.0, default: 0.75) - Otros parámetros de T2I **Criterios de aceptación:** - [ ] Imagen input se procesa correctamente - [ ] Strength afecta resultado - [ ] Formatos soportados: PNG, JPG, WebP --- ### RF-PMC-004-003: Aplicar Inpainting | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-003 | | **Nombre** | Aplicar Inpainting | | **Prioridad** | P2 | | **Actor** | Creative | **Datos de entrada:** - input_image: file/URL (requerido) - mask_image: file (requerido) - prompt: string (requerido) - Otros parámetros de generación **Descripción:** Regenerar solo la parte enmascarada de una imagen. **Criterios de aceptación:** - [ ] Máscara define área a regenerar - [ ] Resto de imagen preservado - [ ] Editor de máscara en UI --- ### RF-PMC-004-004: Aplicar Upscaling | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-004 | | **Nombre** | Aplicar Upscaling | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de entrada:** - input_image: file/URL (requerido) - scale: number (2 o 4) - model: string (default: "RealESRGAN") **Criterios de aceptación:** - [ ] Imagen se escala correctamente - [ ] Calidad mejorada, no solo interpolación - [ ] Formatos de salida preservados --- ### RF-PMC-004-005: Generar Batch de Imágenes | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-005 | | **Nombre** | Generar Batch de Imágenes | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de entrada:** - base_params: object (parámetros comunes) - count: number (cantidad a generar) - variation_type: string (seed, prompt_variation) **Criterios de aceptación:** - [ ] N imágenes generadas - [ ] Seeds diferentes por imagen - [ ] Todas vinculadas al mismo job --- ### RF-PMC-004-006: Remover Fondo | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-006 | | **Nombre** | Remover Fondo | | **Prioridad** | P2 | | **Actor** | Creative | **Datos de entrada:** - input_image: file/URL (requerido) **Criterios de aceptación:** - [ ] Fondo removido correctamente - [ ] Salida PNG con transparencia - [ ] Bordes suaves en objetos --- ## Generación de Texto ### RF-PMC-004-007: Generar Copy Publicitario | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-007 | | **Nombre** | Generar Copy Publicitario | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de entrada:** - context: object - product_name: string - product_description: string - brand_tone: string - target_audience: string - objective: string - type: enum (title, description, cta, full_post) - max_length: number (opcional) - variations: number (default: 3) **Criterios de aceptación:** - [ ] Texto generado coherente - [ ] Tono respeta brand guidelines - [ ] Múltiples variaciones disponibles --- ### RF-PMC-004-008: Generar Hashtags | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-008 | | **Nombre** | Generar Hashtags | | **Prioridad** | P2 | | **Actor** | Creative | **Datos de entrada:** - context: string (descripción del contenido) - count: number (default: 10) - platform: string (instagram, twitter, linkedin) **Criterios de aceptación:** - [ ] Hashtags relevantes generados - [ ] Formato correcto (#hashtag) - [ ] Sin espacios ni caracteres inválidos --- ### RF-PMC-004-009: Adaptar Tono de Texto | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-009 | | **Nombre** | Adaptar Tono de Texto | | **Prioridad** | P2 | | **Actor** | Creative | **Datos de entrada:** - input_text: string (requerido) - target_tone: string (formal, casual, playful, professional) **Criterios de aceptación:** - [ ] Mensaje preservado, tono cambiado - [ ] Opciones de tono claras --- ## Workflows ### RF-PMC-004-010: Listar Workflow Templates | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-010 | | **Nombre** | Listar Workflow Templates | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de salida:** - Lista de workflows disponibles - Por cada uno: nombre, descripción, tipo, inputs requeridos **Criterios de aceptación:** - [ ] Workflows de sistema incluidos - [ ] Workflows custom del tenant incluidos - [ ] Filtro por tipo/categoría --- ### RF-PMC-004-011: Ver Detalle de Workflow | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-011 | | **Nombre** | Ver Detalle de Workflow | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de salida:** - Descripción completa - Inputs requeridos y opcionales - Outputs esperados - Ejemplos de resultado - Tiempo estimado **Criterios de aceptación:** - [ ] Schema de inputs documentado - [ ] Ejemplos visuales disponibles --- ### RF-PMC-004-012: Ejecutar Workflow | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-012 | | **Nombre** | Ejecutar Workflow | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de entrada:** - workflow_id: UUID (requerido) - inputs: object (según schema del workflow) - campaign_id: UUID (opcional) - brand_id: UUID (opcional) **Flujo:** 1. Sistema valida inputs contra schema 2. Sistema verifica cuotas del tenant 3. Sistema crea GenerationJob 4. Sistema encola job 5. Sistema retorna job_id **Criterios de aceptación:** - [ ] Validación de inputs funciona - [ ] Job se crea correctamente - [ ] ID retornado para tracking --- ### RF-PMC-004-013: Crear Workflow Template (Admin) | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-013 | | **Nombre** | Crear Workflow Template | | **Prioridad** | P3 | | **Actor** | Tenant Admin | **Datos de entrada:** - name: string - description: text - type: enum - comfyui_workflow: JSON - input_schema: JSON - output_config: object **Criterios de aceptación:** - [ ] Workflow se almacena correctamente - [ ] Schema de inputs validado - [ ] Disponible para usuarios del tenant --- ## Modelos Personalizados ### RF-PMC-004-014: Listar Modelos Custom | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-014 | | **Nombre** | Listar Modelos Custom | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de salida:** - Lista de LoRAs, checkpoints disponibles - Status de cada uno - Brand asociada (si aplica) **Criterios de aceptación:** - [ ] Solo modelos del tenant - [ ] Filtro por tipo y brand - [ ] Preview images mostradas --- ### RF-PMC-004-015: Registrar Modelo Custom | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-015 | | **Nombre** | Registrar Modelo Custom | | **Prioridad** | P1 | | **Actor** | Tenant Admin | **Datos de entrada:** - name: string (requerido) - type: enum (lora, checkpoint, embedding) - file: upload (requerido) - purpose: string - trigger_word: string (para LoRAs) - brand_id: UUID (opcional) - preview_images: array[file] **Criterios de aceptación:** - [ ] Archivo subido a storage - [ ] Registro en BD - [ ] Disponible para generación --- ### RF-PMC-004-016: Eliminar Modelo Custom | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-016 | | **Nombre** | Eliminar Modelo Custom | | **Prioridad** | P2 | | **Actor** | Tenant Admin | **Criterios de aceptación:** - [ ] Confirmación requerida - [ ] Archivo eliminado de storage - [ ] Registro eliminado de BD --- ### RF-PMC-004-017: Iniciar Entrenamiento de LoRA | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-017 | | **Nombre** | Iniciar Entrenamiento de LoRA | | **Prioridad** | P2 | | **Actor** | Tenant Admin | **Datos de entrada:** - name: string - training_images: array[file] (mínimo 10) - base_model: string - steps: number (default: 1000) - learning_rate: number (default: 0.0001) - trigger_word: string (requerido) **Criterios de aceptación:** - [ ] Mínimo 10 imágenes validado - [ ] Job de entrenamiento creado - [ ] Status actualizado durante entrenamiento - [ ] Modelo disponible al completar --- ## Cola de Tareas ### RF-PMC-004-018: Ver Estado de Cola | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-018 | | **Nombre** | Ver Estado de Cola | | **Prioridad** | P1 | | **Actor** | Creative, Tenant Admin | **Datos de salida:** - Jobs en cola (pending) - Jobs procesando - Jobs completados (recientes) - Jobs fallidos (recientes) **Criterios de aceptación:** - [ ] Actualización en tiempo real - [ ] Filtro por usuario/campaña - [ ] Progreso visible para jobs activos --- ### RF-PMC-004-019: Ver Detalle de Job | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-019 | | **Nombre** | Ver Detalle de Job | | **Prioridad** | P1 | | **Actor** | Creative | **Datos de salida:** - Parámetros de entrada - Status y progreso - Timestamps - Outputs generados - Error (si falló) **Criterios de aceptación:** - [ ] Toda la información visible - [ ] Links a assets generados --- ### RF-PMC-004-020: Cancelar Job | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-020 | | **Nombre** | Cancelar Job | | **Prioridad** | P2 | | **Actor** | Creative | **Precondiciones:** - Job en status "queued" **Criterios de aceptación:** - [ ] Job cambia a "cancelled" - [ ] No se ejecuta - [ ] Cuota no consumida --- ### RF-PMC-004-021: Reintentar Job Fallido | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-021 | | **Nombre** | Reintentar Job Fallido | | **Prioridad** | P2 | | **Actor** | Creative | **Precondiciones:** - Job en status "failed" **Criterios de aceptación:** - [ ] Nuevo job creado con mismos parámetros - [ ] Original marcado como "retried" - [ ] Hasta 3 reintentos permitidos --- ### RF-PMC-004-022: Cambiar Prioridad de Job (Admin) | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-022 | | **Nombre** | Cambiar Prioridad de Job | | **Prioridad** | P3 | | **Actor** | Tenant Admin | **Precondiciones:** - Job en status "queued" **Criterios de aceptación:** - [ ] Prioridad actualizada - [ ] Posición en cola recalculada --- ## Integración ComfyUI ### RF-PMC-004-023: Enviar Workflow a ComfyUI | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-023 | | **Nombre** | Enviar Workflow a ComfyUI | | **Prioridad** | P1 | | **Actor** | Sistema | **Descripción:** El sistema debe enviar workflows a ComfyUI para ejecución. **Criterios de aceptación:** - [ ] Payload correcto enviado - [ ] Respuesta de ComfyUI procesada - [ ] Errores manejados correctamente --- ### RF-PMC-004-024: Recibir Resultados de ComfyUI | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-024 | | **Nombre** | Recibir Resultados de ComfyUI | | **Prioridad** | P1 | | **Actor** | Sistema | **Descripción:** El sistema debe procesar callbacks/webhooks de ComfyUI con resultados. **Criterios de aceptación:** - [ ] Imágenes descargadas y almacenadas - [ ] Assets creados automáticamente - [ ] Job actualizado a "completed" --- ### RF-PMC-004-025: Monitorear Progreso en ComfyUI | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-025 | | **Nombre** | Monitorear Progreso en ComfyUI | | **Prioridad** | P2 | | **Actor** | Sistema | **Descripción:** Tracking de progreso durante ejecución del workflow. **Criterios de aceptación:** - [ ] Websocket conectado a ComfyUI - [ ] Progreso actualizado en tiempo real - [ ] Propagado a frontend --- ## Validaciones ### RF-PMC-004-026: Validar Cuota Antes de Generación | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-026 | | **Nombre** | Validar Cuota Antes de Generación | | **Prioridad** | P1 | | **Actor** | Sistema | **Descripción:** Verificar límites del tenant antes de aceptar job. **Criterios de aceptación:** - [ ] Generaciones mensuales verificadas - [ ] Storage verificado para outputs - [ ] Error claro si excede límite --- ### RF-PMC-004-027: Agregar Negative Prompts Automáticos | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-027 | | **Nombre** | Agregar Negative Prompts Automáticos | | **Prioridad** | P2 | | **Actor** | Sistema | **Descripción:** Añadir negative prompts de calidad estándar. **Negative prompts por defecto:** - "blurry, low quality, watermark, signature, bad anatomy, deformed..." **Criterios de aceptación:** - [ ] Negativos agregados automáticamente - [ ] Usuario puede sobreescribir - [ ] Configurables por tenant --- ### RF-PMC-004-028: Cargar Identidad de Marca Automáticamente | Campo | Valor | |-------|-------| | **ID** | RF-PMC-004-028 | | **Nombre** | Cargar Identidad de Marca Automáticamente | | **Prioridad** | P1 | | **Actor** | Sistema | **Descripción:** Al generar para una campaña/marca, cargar automáticamente: - LoRAs asociados - Colores de marca (para prompts) - Forbidden words (para negative prompts) - Tono de voz (para texto) **Criterios de aceptación:** - [ ] LoRA se inyecta en workflow - [ ] Colores incluidos en prompt si aplica - [ ] Forbidden words en negative prompt --- ## Resumen | Prioridad | Cantidad | |-----------|----------| | P1 | 17 | | P2 | 9 | | P3 | 2 | | **Total** | **28** | --- **Documento generado por:** Requirements-Analyst **Fecha:** 2025-12-08