Sandbox web (/sandbox) servido por el worker, reusando los mismos servicios del pipeline, para iterar prompts/modelos con una imagen y ver variaciones+score, y guardar la config ganadora (aplica al worker al instante, persistida en volumen): - SettingsService: store de config (system prompts + modelos) con defaults de prompts/*.txt + env y override persistido en /app/data (sobrevive a redeploys). - /sandbox (HTML), GET /sandbox/config, POST /sandbox/render, POST /sandbox/save (auth Bearer FUNNEL_API_KEY). DOM seguro, sin innerHTML de contenido externo. - prompt-builder/supervisor/image-generator aceptan overrides y leen de Settings. Fixes del pipeline de generación: - image-generator: pide modalities ['image','text'] y extrae la imagen de message.images[] (forma real de OpenRouter), no solo de content. - main.ts: sube el límite de body a 30mb (las fotos en data URI rompían el 100kb). Deja de versionar artefactos de build (dist/ + *.tsbuildinfo); .gitignore en image-worker y Whatsapp-bot. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reformix Image Worker
Worker de generación de renders fotorrealistas "después" para Reformix. Recibe el perfil completo de un lead desde la app principal, genera imágenes del resultado de la reforma usando IA, las valida y las entrega de vuelta a la app.
Rol en el sistema
App Reformix
│ POST /perfil-completo (webhook)
▼
Render Worker ← este proyecto
│
├── Etapa 1: Claude Haiku 4.5 via OpenRouter genera prompt técnico en inglés
├── Etapa 2: Gemini 2.0 Flash via OpenRouter genera imagen
└── Etapa 3: Claude Haiku 4.5 Vision via OpenRouter valida coherencia
│
│ POST /api/leads/:id/ingesta (con finalizar:true)
▼
App Reformix → PDF → Email → WhatsApp → Cliente
Requisitos
- Node.js 18+
- API key de OpenRouter (unica clave para todos los modelos)
Instalación
cd mvp/image-worker
npm install
cp .env.example .env
# Editar .env con tu OPENROUTER_API_KEY
npm run start:dev
Variables de entorno
| Variable | Descripción | Default |
|---|---|---|
PORT |
Puerto del servidor HTTP | 3001 |
OPENROUTER_API_KEY |
API key de OpenRouter (unica para todos los modelos) | — |
OPENROUTER_MODEL_TEXTO |
Modelo para prompt-builder y supervisor | anthropic/claude-3.5-haiku-20241022 |
OPENROUTER_MODEL_IMAGEN |
Modelo para generación de imágenes | google/gemini-2.0-flash-exp-image-generation |
REFORMIX_API_URL |
URL base de la app Reformix | http://localhost:3000 |
FUNNEL_API_KEY |
API key compartida con la app Reformix | — |
MAX_RETRIES |
Reintentos por zona si el supervisor rechaza | 2 |
SUPERVISOR_MIN_SCORE |
Score mínimo para aprobar un render (0-100) | 70 |
Conexión con la app Reformix
En el .env de la app Reformix (mvp/b2c/), configurar:
PERFIL_WEBHOOK_URL=http://localhost:3001/perfil-completo
Pipeline de 3 etapas (todo via OpenRouter)
Etapa 1 — Prompt Builder (Claude Haiku 4.5 via OpenRouter)
Genera un prompt técnico detallado en inglés para el modelo de image-to-image. Incluye materiales, iluminación, paleta de colores, estilo y palabras clave de render arquitectónico.
Modelo: anthropic/claude-3.5-haiku-20241022
Prompt base: prompts/prompt-builder.txt
Etapa 2 — Image Generator (Gemini 2.0 Flash via OpenRouter)
Toma el prompt generado + la foto "antes" del cliente y produce el render "después". Maneja rate limiting (429) con reintento automático.
Modelo: google/gemini-2.0-flash-exp-image-generation
Etapa 3 — Supervisor (Claude Haiku 4.5 Vision via OpenRouter)
Compara la foto "antes" con el render "después" y evalúa coherencia: estilo, materiales, calidad, artefactos. Devuelve score 0-100. Si el score es menor a SUPERVISOR_MIN_SCORE, reintenta desde la Etapa 2 (máximo MAX_RETRIES veces).
Modelo: anthropic/claude-3.5-haiku-20241022
Skills
| Archivo | Descripción |
|---|---|
skills/pipeline.md |
Orquestación del pipeline de 3 etapas |
skills/webhook.md |
Contrato del webhook entrante /perfil-completo |
skills/prompt-builder.md |
Llamada a OpenRouter para generar prompts |
skills/image-generator.md |
Llamada a OpenRouter para generación de imágenes |
skills/supervisor.md |
Validación de calidad con Claude Haiku Vision via OpenRouter |
skills/reformix-api.md |
Entrega de renders al endpoint /ingesta de la app |