Génération d’images IA avec Replicate

Donne vie à tes prompts en WebP.

3 min read

Générer des images IA côté backend : l’API Replicate

Ce module va te montrer comment générer des images IA custom avec l’API Replicate, puis les servir facilement via ton backend en TypeScript. L’objectif : partir d’un prompt texte, produire une image hébergée, et la rendre disponible à tes applis clientes (site web, mobile…).

Pourquoi générer des images côté backend ?

Appeler un modèle d’IA comme Stable Diffusion ou SDXL directement depuis le frontend, c’est risqué : tu exposes ta clé API, ton secret, et tu n’as aucun contrôle sur les utilisateurs ou le nombre d’images générées.
Avec une API backend, tu centralises l’accès, tu ajoutes une couche de règles métier (auth, quotas, logs), et tu contrôles tout ce qui sort.

Ici, tu vas apprendre à écrire ce genre de route :

src/routes/images.ts
1
app.post("/generate", zValidator("json", generateSchema), authenticateUser, async (c) => {
2
const { prompt } = c.req.valid("json")
3
// ... appel Replicate, écriture image, envoi de la réponse
4
})

Cette route :

  • vérifie le prompt reçu (merci Zod pour la validation de schéma) ;
  • sécurise l’accès (middleware d’auth) ;
  • envoie le prompt à Replicate ;
  • récupère l’URL de l’image générée ;
  • sauvegarde l’image sur disque en WebP ;
  • renvoie au client le chemin ou l’URL de l’image.

Replicate : la plateforme d’IA pensée pour les devs

Replicate te donne accès à tout un catalogue de modèles de génération (images, audio, vidéo, etc.) via une API simple. Il te suffit de rattacher ta clé API à ton appli, puis d’appeler un modèle au choix avec les bons paramètres.
Exemple d’appel pour générer une image à partir d’un prompt :

src/replicate.ts
1
import Replicate from "replicate"
2
3
export const replicate = new Replicate({ auth: process.env.REPLICATE_API_TOKEN })
4
5
await replicate.run(
6
"stability-ai/sdxl:0e5b...", // ID du modèle
7
{ input: { prompt: "Un backend TypeScript dans l’espace, style Pixar" } }
8
)

Voir la doc Replicate

Sauvegarde et diffusion d’image : format WebP

Pour stocker les images générées, tu vas :

  • Récupérer la sortie du modèle (souvent un buffer ou une URL distante)
  • La convertir ou l’enregistrer en WebP sur ton disque serveur (pour l’optimisation/performance)
  • Renvoyer au client soit le chemin local soit une URL de téléchargement

Pour enregistrer un buffer côté Node :

src/utils/saveImage.ts
1
import { writeFile } from "fs/promises"
2
await writeFile("images/myimage.webp", imageBuffer)

À quoi t’attendre dans ce module ?

Tu vas :

  • Configurer Replicate et sécuriser ta clé d’API dans .env
  • Créer la route POST /generate qui valide, contrôle et gère la génération d’image IA
  • Sauvegarder l’image sur disque ou storage, et renvoyer correctement le chemin au client
  • Lier chaque image à un utilisateur (et à son crédit de générations)
  • Servir facilement l’image générée depuis ton API

Tout cela, en TypeScript, avec Hono pour le routing, Prisma pour la base, et tous les bons patterns 2025.