Replicate : appel API et récupération binaire WebP
Prépare la payload, exécute le modèle Flux 1.1 Pro et écris l’image WebP en Node. Maîtrise Replicate, buffer base64 et gestion de fichiers TypeScript.
Préparer la payload pour Replicate
On construit d’abord l’objet input.
Il contient tous les paramètres attendus par le modèle.
But : rester explicite pour éviter les erreurs côté Replicate.
1const input = {2prompt: prompt, // ^? Le texte descriptif fourni par l'utilisateur3aspect_ratio: "1:1", // Image carrée4output_format: "webp", // Format compressé, idéal pour le web5output_quality: 80, // Qualité visuelle vs poids du fichier6safety_tolerance: 2, // Filtre de contenu7prompt_upsampling: true, // Upscale léger automatique8}
Note
prompt vient du schéma Zod GenerateImageSchema. On est donc déjà type-safe.
Lancer le modèle Flux 1.1 Pro
On appelle ensuite replicate.run.
Le modèle black-forest-labs/flux-1.1-pro génère l’image à partir du prompt.
1const output = await replicate.run(2"black-forest-labs/flux-1.1-pro", // nom complet du modèle3{ input }, // payload définie plus haut4)
Tip
replicate.run renvoie ici un binaire encodé en base64.
Pour plus de détails sur replicate.run, voir la doc officielle :
Replicate API reference
Sauvegarder l’image sur disque
Dernière étape :
- Créer un nom de fichier unique.
- Convertir la sortie base64 en
Buffer. - Écrire le fichier dans le dossier
images.
1import { randomBytes } from "crypto"2import { join } from "path"3import { writeFile } from "fs/promises"45// 1. nom de fichier aléatoire6const filenameHash = randomBytes(8).toString("hex")78// 2. chemin complet vers /images/<hash>.jpg (resté .jpg pour compat.)9const filePath = join(process.cwd(), "images", `${filenameHash}.jpg`)1011// 3. conversion base64 -> Buffer puis écriture disque12const outputBuffer = Buffer.from(output.toString(), "base64")13await writeFile(filePath, outputBuffer)
Important
Pourquoi pas directement .webp ?
Le format final dépend du header output_format, mais l’extension peut rester .jpg.
Le serveur pourra préciser le Content-Type correct lors du download.
Récap rapide
- Crée l’objet
input→ paramètres clairs pour le modèle. - Appelle
replicate.run→ récupère un binaire base64. - Convertis, nomme et écris le fichier sur disque.
Cette fonction est prête à être branchée sur ta route Hono protégée par middleware auth :
génère, décompte un crédit, persiste l’image, c’est tout.
Quiz
Testez vos connaissances avec 4 questions
Quel est le rôle principal de l’objet "input" que l’on construit avant d’appeler replicate.run ?
Quelle est la nature exacte de la valeur renvoyée par la fonction replicate.run dans cet exemple ?
Pourquoi crée-t-on un nom de fichier aléatoire via randomBytes avant d’écrire l’image sur disque ?
L’extension du fichier enregistré est « .jpg » alors que le header output_format vaut « webp ». Quelle est la raison avancée ?