Lienzo Abierto: una galería de imágenes para aprender, adaptar y hacer tuya
Una galería de imágenes con búsqueda, favoritos e importación local. Código abierto, ilustraciones de ejemplo y un recorrido para adaptarla.
Tutorial práctico para integrar Novita AI en un backend .NET 8 usando txt2img e img2img con payload asíncrono y task_id.

Actualizado: 20 de febrero de 2026.
En este capítulo conectas el backend con Novita para dos flujos:
txt2img cuando no hay foto base.img2img cuando sí hay foto base.codigo/ de esta serie.INovitaService expone:
StartGenerationAsync(...)GetTaskAsync(taskId)GeneratePromptAsync(imageUrl)AdaptPromptAsync(prompt)Lógica aplicada:
photoUrl existe: POST /v3/async/img2imgphotoUrl: POST /v3/async/txt2imgLa request usa estructura:
extra:
response_image_typewebhook.urlwebhook.events = ["ASYNC_TASK_RESULT"]request:
model_namepromptwidth, heightnegative_promptloras (opcional)El backend no espera imagen final en el create; devuelve el task_id y guarda estado inicial en cola (TASK_STATUS_QUEUED).
cd codigo/backend
rg -n "txt2img|img2img|task_id|webhook" InvitaIA.Api/Services/NovitaService.cs -S
curl -X POST http://localhost:56449/api/invitations/create \
-H "Authorization: Bearer <firebase_id_token>" \
-H "Content-Type: application/json" \
-d '{
"style": "superhero",
"format": "image",
"orientation": "1:1",
"modelBaseId": "<model-id>",
"prompt": "niño con traje espacial, fondo galáctico"
}'
model_name y estructura request.task_id vacío: la respuesta de Novita no trae formato esperado.En NovitaService.StartGenerationAsync según exista photoUrl.
Sí, enviando loras con model_name y strength.
No. Solo se crea la tarea; la finalización ocurre en webhook/worker.
codigo/backend/InvitaIA.Api/Services/NovitaService.cscodigo/backend/InvitaIA.Api/Services/InvitationService.cs