- 0. Curso Flutter + .NET 8 + Novita AI: índice completo
- 1. Arquitectura Flutter + backend .NET 8 con Novita AI
- 2. Configurar entorno .NET 8 + Flutter + Firebase + Novita AI
- 3. Backend .NET 8: Auth Firebase y esqueleto API
- 4. Integrar Novita AI: text-to-image e image-to-image en .NET 8
- 5. Webhook Novita y procesamiento asíncrono
- 6. Firestore, modelos y endpoints de dominio
- 7. Flutter: login Google y configuración API
- 8. Flutter: subida de imagen y creación de invitaciones
- 9. Listado, estado y detalle de invitaciones
- 10. ControlNet completo en backend y Flutter
- 11. LLM con Novita: img2prompt y adaptación de prompts
- 12. Despliegue, checklist final y publicación WordPress
- Bonus 01: vídeo con FFmpeg y flujo opcional
- Bonus 02: importador de modelos Novita a Firestore
- Bonus 03: Prompt Generator y administración básica
Actualizado: 20 de febrero de 2026.
Este capítulo añade control estructural real al resultado IA mediante ControlNet.
Prerrequisitos
- Tener clonado o disponible
codigo/de esta serie. - Contar con Firebase y Novita configurados para pruebas.
- Haber completado el capítulo anterior del curso.
Qué se implementó
- Nuevo campo en request backend:
controlPreprocessor. - Persistencia en
Invitation:controlPreprocessor. NovitaService.StartGenerationAsyncañaderequest.controlnet.unitscuando hay imagen guía.- UI Flutter con:
- switch activar ControlNet
- selector de imagen guía
controlModelIdcontrolStrengthcontrolPreprocessor
Payload de referencia
Cuando ControlNet está activo se añade a request:
controlnet.units[0].modelcontrolnet.units[0].weightcontrolnet.units[0].preprocessorcontrolnet.units[0].image(base64)
Flujo visual
flowchart LR
A[Flutter Create Screen] --> B[controlImage + model + strength + preprocessor]
B --> C[POST /api/invitations/create]
C --> D[NovitaService StartGenerationAsync]
D --> E[request.controlnet.units]
E --> F[Novita async task]
Verificación de código
cd codigo
rg -n "controlPreprocessor|controlnet|controlImageUrl|controlStrength" backend app -S
Prueba manual recomendada
- Crea una invitación sin ControlNet.
- Crea otra con ControlNet (misma prompt/foto).
- Compara composición/pose entre ambos resultados.
Troubleshooting
- Resultado igual al baseline:
controlStrengthdemasiado bajo. - Error API:
controlModelIdinválido. - Imagen guía no se aplica:
controlImageUrlno subió correctamente.
FAQ corta
¿ControlNet reemplaza el prompt?
No, lo condiciona; el prompt sigue siendo clave.
¿Qué valor usar para controlStrength?
Empieza en 0.8 y ajusta según rigidez deseada.
¿Es obligatorio controlPreprocessor?
No, backend inferirá uno por defecto si no se envía.
Fuente verificada
- Código del curso:
codigo/backend/InvitaIA.Api/Models/InvitationRequest.cscodigo/backend/InvitaIA.Api/Services/NovitaService.cscodigo/app/lib/screens/create_invitation_screen.dart
- Documentación oficial Novita:
Share this content: