4. Integrar Novita AI: text-to-image e image-to-image en .NET 8

4. Integrar Novita AI: text-to-image e image-to-image en .NET 8

Actualizado: 20 de febrero de 2026.

En este capítulo conectas el backend con Novita para dos flujos:

  1. txt2img cuando no hay foto base.
  2. img2img cuando sí hay foto base.

Prerrequisitos

  1. Tener clonado o disponible codigo/ de esta serie.
  2. Contar con Firebase y Novita configurados para pruebas.
  3. Haber completado el capítulo anterior del curso.

Paso 1: Contrato de servicio

INovitaService expone:

  1. StartGenerationAsync(...)
  2. GetTaskAsync(taskId)
  3. GeneratePromptAsync(imageUrl)
  4. AdaptPromptAsync(prompt)

Paso 2: Endpoint correcto según input

Lógica aplicada:

  1. Si photoUrl existe: POST /v3/async/img2img
  2. Si no existe photoUrl: POST /v3/async/txt2img

Paso 3: Payload asíncrono

La request usa estructura:

  1. extra:
    • response_image_type
    • webhook.url
    • webhook.events = ["ASYNC_TASK_RESULT"]
  2. request:
    • model_name
    • prompt
    • width, height
    • negative_prompt
    • loras (opcional)

Paso 4: Respuesta y task_id

El backend no espera imagen final en el create; devuelve el task_id y guarda estado inicial en cola (TASK_STATUS_QUEUED).

Paso 5: Verificación local

cd codigo/backend
rg -n "txt2img|img2img|task_id|webhook" InvitaIA.Api/Services/NovitaService.cs -S

Comando de prueba (ejemplo)

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"
  }'

Troubleshooting

  1. Error 400 de Novita: revisa model_name y estructura request.
  2. task_id vacío: la respuesta de Novita no trae formato esperado.
  3. Timeout HTTP: usa endpoint async y procesa por webhook.

FAQ corta

¿Dónde se decide txt2img vs img2img?

En NovitaService.StartGenerationAsync según exista photoUrl.

¿Se puede usar LoRA?

Sí, enviando loras con model_name y strength.

¿Se guarda imagen final aquí?

No. Solo se crea la tarea; la finalización ocurre en webhook/worker.

Fuente verificada

  • Código del curso:
    • codigo/backend/InvitaIA.Api/Services/NovitaService.cs
    • codigo/backend/InvitaIA.Api/Services/InvitationService.cs
  • Documentación oficial Novita:

Share this content:

Curso Flutter y .NET 8 con Novita AI: índice completo paso a paso

. Backend .NET 8: Auth Firebase y esqueleto API . Webhook Novita y procesamiento asíncrono

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.