- Update vision, architecture and technical documentation - Update module definitions (PMC-001 to PMC-008) - Update requirements documentation - Add CONTEXT-MAP.yml and ENVIRONMENT-INVENTORY.yml - Add orchestration guidelines and references 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
656 lines
14 KiB
Markdown
656 lines
14 KiB
Markdown
---
|
|
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
|