ESPACIO PUBLICITARIO DISPONIBLE · HABLEMOS

Cómo integrar la API Text-to-Image de DeepAI en aplicaciones web: autenticación con API Key, peticiones HTTP y arquitectura de producción

365Finds Editorial
11.430 artículos Wiki recopilados

Usa 365 Wiki con tu IA

Copia el prompt de abajo, pégalo en la IA que ya usas y haz tu pregunta.

Descargar el Skill completo

Pruébalo primero con el prompt. Si usas 365 Wiki a menudo, instala el Skill completo de 365Wiki y no tendrás que volver a pegarlo. Si no tienes una IA habitual, también sirven las versiones web de Gemini o Microsoft Copilot.

Integrar capacidades de generación de imágenes mediante inteligencia artificial en aplicaciones web permite ofrecer avatares personalizados, creación automatizada de banners, maquetas creativas y herramientas de diseño interactivo. Sin embargo, para desarrolladores independientes y equipos en etapas iniciales, gestionar y escalar servidores dedicados con GPUs (como desplegar instancias de Stable Diffusion, gestionar controladores CUDA y lidiar con arranques en frío) supone una carga operativa y de costes inasumible.

DeepAI ofrece una solución eficiente: una API REST de generación de texto a imagen (Text-to-Image) lista para producción. Permite convertir descripciones de texto en imágenes alojadas mediante peticiones estándar HTTP POST, eliminando por completo la necesidad de administrar hardware especializado. En esta guía se detalla cómo configurar la autenticación, los parámetros de solicitud, la arquitectura recomendada y las estrategias para el manejo de errores y persistencia en producción.


Arquitectura: ¿Por qué utilizar el patrón de proxy backend?

Un error habitual en el desarrollo frontend consiste en invocar APIs de IA directamente desde el código del cliente en el navegador (utilizando React, Vue o el fetch nativo). DeepAI autentica cada petición mediante una clave estática (API Key). Si dicha clave se incluye en llamadas directas desde el navegador, queda expuesta de inmediato en las herramientas de desarrollo y en el código empaquetado, lo que permite que terceros consuman tus créditos y cuotas.

La arquitectura estándar en entornos profesionales es el patrón de proxy backend (Backend Proxy Pattern):

[Cliente Navegador]
       │
       ▼  (1) POST /api/generate-image { prompt, style, width, height }
[Servidor Backend (Node.js / Next.js / Python)]
       │  - Valida la sesión, parámetros y límites de tasa (rate limiting)
       │  - Inyecta la variable process.env.DEEPAI_API_KEY
       ▼  (2) POST https://api.deepai.org/api/text2img (Header: api-key)
[Clúster de Inferencia de DeepAI]
       │
       ▼  (3) Respuesta JSON { id, output_url }
[Servidor Backend]
       │  - Opcional: Descarga y guarda la imagen en AWS S3 o Cloudflare R2
       ▼  (4) Retorna { imageUrl, id } al navegador
[Cliente Navegador]

Este enfoque protege las credenciales, permite controlar los costes del servicio y facilita el almacenamiento permanente de las imágenes generadas.


Especificaciones de la API Text-to-Image de DeepAI

El servicio Text-to-Image de DeepAI consta de un único punto de enlace (endpoint) que acepta peticiones HTTP POST, admitiendo tanto cargas application/json como multipart/form-data.

Punto de enlace y autenticación

Parámetros de la solicitud

ParámetroTipoObligatorioValor por defectoDescripción y restricciones
textstringSí—Descripción en texto (prompt en inglés) de la imagen a generar.
image_generator_versionstringNostandardNivel del modelo: standard, hd, genius, o super_genius.
widthstring / intNo512Anchura en píxeles; múltiplo de 32 entre 128 y 1536 (ej. 512, 768, 1024).
heightstring / intNo512Altura en píxeles; múltiplo de 32 entre 128 y 1536 (ej. 512, 768, 1024).
negative_promptstringNo—Elementos a excluir (ej. borroso, deforme, baja calidad, marcas de agua).
genius_preferencestringNo—Preferencia estética para genius: anime, photography, graphic, cinematic.
resolutionstringNo2kResolución para super_genius: 2k o 4k.

Recomendaciones de dimensiones:

Estructura de la respuesta

Cuando la imagen se genera con éxito, DeepAI responde con código HTTP 200 OK y un cuerpo JSON:

{
  "id": "59a0e8a9-1123-44b2-9a8c-7981b2345678",
  "output_url": "https://api.deepai.org/job-view-file/59a0e8a9-1123-44b2-9a8c-7981b2345678/output.jpg"
}

Implementación paso a paso

A continuación se muestra un ejemplo listo para producción con un backend en Node.js (Express) y un cliente en JavaScript nativo.

1. Integración en el servidor (Node.js / Express)

Configura la variable de entorno DEEPAI_API_KEY en tu entorno de despliegue:

// server/routes/imageGen.js
import express from 'express';

const router = express.Router();

router.post('/generate-image', async (req, res) => {
  try {
    const { prompt, style = 'standard', width = '512', height = '512', negativePrompt } = req.body;

    if (!prompt || typeof prompt !== 'string' || prompt.trim().length === 0) {
      return res.status(400).json({ error: 'Se requiere un prompt de texto válido.' });
    }

    const apiKey = process.env.DEEPAI_API_KEY;
    if (!apiKey) {
      return res.status(500).json({ error: 'Configuración incompleta: falta la clave API de DeepAI.' });
    }

    const payload = {
      text: prompt.trim(),
      image_generator_version: style,
      width: String(width),
      height: String(height)
    };

    if (negativePrompt) {
      payload.negative_prompt = negativePrompt.trim();
    }

    // Petición a la API REST de DeepAI con límite de tiempo de 30 segundos
    const response = await fetch('https://api.deepai.org/api/text2img', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'api-key': apiKey
      },
      body: JSON.stringify(payload),
      signal: AbortSignal.timeout(30000)
    });

    const data = await response.json();

    if (!response.ok) {
      const errorMessage = data.err || data.status || 'Error en el servicio de DeepAI';
      return res.status(response.status).json({ error: errorMessage });
    }

    return res.status(200).json({
      success: true,
      id: data.id,
      imageUrl: data.output_url
    });
  } catch (error) {
    if (error.name === 'TimeoutError') {
      return res.status(504).json({ error: 'La generación de imagen superó el tiempo límite. Inténtalo de nuevo.' });
    }
    return res.status(500).json({ error: 'Error interno del servidor al procesar la imagen.' });
  }
});

export default router;

2. Consumo en el cliente y gestión de estados de interfaz

La inferencia de IA suele tardar entre 2 y 8 segundos. La interfaz debe reflejar el estado de carga y prevenir múltiples clics accidentales:

// client/app.js
async function solicitarImagen(textoPrompt) {
  const botonGenerar = document.getElementById('btn-generar');
  const contenedorVista = document.getElementById('vista-previa');
  const mensajeEstado = document.getElementById('mensaje-estado');

  try {
    // Activar estado de carga
    botonGenerar.disabled = true;
    mensajeEstado.textContent = 'Generando imagen, por favor espera...';
    contenedorVista.classList.add('loading-skeleton');

    const res = await fetch('/api/generate-image', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        prompt: textoPrompt,
        style: 'standard',
        width: '512',
        height: '512',
        negativePrompt: 'blurry, deformed, low quality, watermark'
      })
    });

    const data = await res.json();

    if (!res.ok) {
      throw new Error(data.error || `Error HTTP ${res.status}`);
    }

    // Mostrar imagen generada
    contenedorVista.innerHTML = `<img src="${data.imageUrl}" alt="${textoPrompt}" class="img-resultado" />`;
    mensajeEstado.textContent = '¡Imagen generada con éxito!';
  } catch (err) {
    mensajeEstado.textContent = `Error: ${err.message}`;
  } finally {
    botonGenerar.disabled = false;
    contenedorVista.classList.remove('loading-skeleton');
  }
}

Gestión de errores y situaciones límite

Para garantizar la estabilidad en entornos de producción, considera los siguientes códigos de estado:


Persistencia de imágenes en almacenamiento propio

El enlace output_url devuelto por DeepAI está alojado en sus propios servidores. Depender indefinidamente de URLs externas en una aplicación web conlleva riesgos de enlaces rotos, políticas de expiración y falta de control sobre encabezados de caché o CORS.

En producción, la mejor práctica consiste en que el backend descargue el archivo de output_url inmediatamente tras la llamada y lo transfiera a un almacenamiento en la nube propio (como AWS S3, Cloudflare R2 o Google Cloud Storage), devolviendo al cliente una URL permanente servida a través de tu propia CDN.


Precios y criterios de elección técnica

El acceso a la API requiere una suscripción a DeepAI Pro ($9.99/mes o $89.99/año). Dicho plan incluye cuotas mensuales, y el consumo adicional se deduce del monedero prepago:

Cuándo elegir DeepAI

DeepAI resulta idóneo para desarrolladores individuales, prototipos MVP y productos web en crecimiento que buscan integrar funcionalidades de IA sin asumir la complejidad de orquestar clústeres de GPUs o mantener pipelines de Stable Diffusion.

Cuándo considerar modelos autohospedados

Si tu proyecto requiere modelos LoRA personalizados, control estricto de semillas deterministas o si el volumen mensual supera las 100.000 imágenes (donde los costes de hardware dedicado por unidad resultan más económicos), es recomendable evaluar soluciones autohospedadas con ComfyUI o plataformas serverless especializadas en GPUs.

Para la mayoría de casos de uso web estándar, la API REST de DeepAI ofrece un equilibrio óptimo entre rapidez de desarrollo, fiabilidad y contención de costes.


Referencias