Créer des images
FLUX.1 [schnell] transforme un prompt en images, PhotoMaker V2 crée des portraits à partir de photos de visage : les deux sont exécutés par Infomaniak en Suisse, avec la même clé et le même crédit prépayé que le chat, et facturés à la seconde de génération.
BientôtOuverture prochaine : ce qui suit décrit le service tel qu'il fonctionnera.
À partir d'un prompt
POST /images/generations transforme un prompt en images, avec la même clé et le même crédit prépayé que le chat. Le corps suit celui d'OpenAI : model, prompt, n (de 1 à 5) et size. Les images reviennent en JPEG, encodées en base64 dans data[].b64_json ; Evanesca n'en héberge ni n'en garde aucune, donc response_format: "url" renvoie une data URL plutôt qu'un lien. Les SDK officiels d'OpenAI fonctionnent tels quels (client.images.generate) — tous les paramètres.
curl https://evanesca.app/api/v1/images/generations \
-H "Authorization: Bearer $EVANESCA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-schnell",
"prompt": "Un phare au crépuscule, aquarelle",
"size": "1024x1024"
}'import base64, os
from openai import OpenAI
client = OpenAI(base_url="https://evanesca.app/api/v1", api_key=os.environ["EVANESCA_API_KEY"])
result = client.images.generate(
model="flux-schnell",
prompt="Un phare au crépuscule, aquarelle",
size="1792x1024",
)
with open("image.jpg", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))import { writeFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://evanesca.app/api/v1", apiKey: process.env.EVANESCA_API_KEY });
const result = await client.images.generate({
model: "flux-schnell",
prompt: "Un phare au crépuscule, aquarelle",
size: "1792x1024",
});
await writeFile("image.jpg", Buffer.from(result.data[0].b64_json, "base64"));package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader(`{"model": "flux-schnell", "prompt": "Un phare au crépuscule, aquarelle", "size": "1024x1024"}`)
req, err := http.NewRequest("POST", "https://evanesca.app/api/v1/images/generations", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("EVANESCA_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status, string(out))
}{
"created": 1791763200,
"model": "flux-schnell",
"data": [{ "b64_json": "/9j/4AAQSkZJRgABAQ…" }],
"usage": { "generation_seconds": 2, "images": 1 }
}Portraits à partir de photos
POST /images/edits sert PhotoMaker V2 : envoyez de 1 à 4 photos de visage (JPEG ou PNG) dans image[] en multipart — ou en data URLs base64 dans un tableau images en JSON — avec un prompt qui contient le mot déclencheur img juste après le sujet : « a woman img as an astronaut ». Une photo de visage est une donnée personnelle : n'envoyez que des photos que vous avez le droit d'utiliser.
curl https://evanesca.app/api/v1/images/edits \
-H "Authorization: Bearer $EVANESCA_API_KEY" \
-F model=photomaker-v2 \
-F "prompt=a woman img as an astronaut" \
-F "image[]=@face-1.jpg" \
-F "image[]=@face-2.jpg"import os
import requests
res = requests.post(
"https://evanesca.app/api/v1/images/edits",
headers={"Authorization": f"Bearer {os.environ['EVANESCA_API_KEY']}"},
data={"model": "photomaker-v2", "prompt": "a woman img as an astronaut"},
files=[
("image[]", open("face-1.jpg", "rb")),
("image[]", open("face-2.jpg", "rb")),
],
)
print(res.status_code, res.json()["usage"])import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("model", "photomaker-v2");
form.append("prompt", "a woman img as an astronaut");
for (const name of ["face-1.jpg", "face-2.jpg"]) {
form.append("image[]", new Blob([await readFile(name)], { type: "image/jpeg" }), name);
}
const res = await fetch("https://evanesca.app/api/v1/images/edits", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.EVANESCA_API_KEY}` },
body: form,
});
console.log(res.status, (await res.json()).usage);Les conditions interdisent l'image d'une personne réelle sans son consentement, et toute image sexuelle ou intime d'une personne réelle, même avec son consentement (tous les paramètres).
Les modèles
| Identifiant | Endpoint | Entrée | Tailles | Images par appel | Prix par seconde |
|---|---|---|---|---|---|
flux-schnell | POST/images/generations | Un prompt, 400 caractères au plus | 1024x1024, 1792x1024, 1024x1792 | 1 à 5 | 0,0092 € |
photomaker-v2 | POST/images/edits | 1 à 4 photos de visage (JPEG ou PNG) et un prompt contenant img, 350 caractères au plus | 1024x1024, 1792x1024, 1024x1792 | 1 à 5 | 0,0092 € |
FLUX.1 [schnell], par Black Forest Labs (Allemagne), sous licence Apache-2.0 ; PhotoMaker V2, par TencentARC, sous licence Apache-2.0 (base SDXL : CreativeML OpenRAIL++-M). Les deux sont exécutés par Infomaniak en Suisse — hors de l'UE, sous décision d'adéquation de l'UE. Prix TVA comprise.
Ce que ça coûte
Une image se paie à la seconde de génération, pas à l'image : Infomaniak facture le temps de génération, donc Evanesca mesure l'appel à Infomaniak et l'arrondit à la seconde supérieure, une seconde au moins. Le champ usage.generation_seconds de la réponse est exactement ce qui est facturé, à 0,0092 € la seconde. À titre indicatif : environ 2 secondes pour une image FLUX.1 [schnell] en 1024x1024, soit environ 0,02 € ; environ 5 secondes pour un portrait PhotoMaker V2, soit environ 0,05 €. Seule une génération réussie est facturée : une requête refusée avant l'appel — taille hors liste, mot déclencheur absent — ne coûte rien, pas plus qu'un refus d'Infomaniak.
C'est le même crédit prépayé que le chat et les embeddings (facturation).
Limites et refus
Une requête d'image hors limites est refusée en 400 invalid_request avant tout appel, et son champ param dit lequel : un prompt plus long que le modèle ne l'accepte, n hors de 1 à 5, une taille hors liste, un prompt sans img pour PhotoMaker V2, aucune photo ou plus de 4, un fichier ni JPEG ni PNG, ou un corps multipart envoyé à /images/generations. Un modèle envoyé au mauvais endpoint d'image reçoit un 404 model_not_found.
Ce qui sort d'Evanesca
Le prompt — et, pour PhotoMaker V2, les photos de visage — part chez Infomaniak, en Suisse ; les images reviennent dans la réponse et Evanesca n'en conserve aucune. Infomaniak annonce que les requêtes ne sont ni enregistrées ni utilisées pour entraîner des modèles (Infomaniak AI Tools, lu le 13 oct. 2026) : c'est son engagement, pas celui d'Evanesca. Les images renvoyées portent des métadonnées IPTC qui les marquent comme générées par une IA (AI Act, art. 50(2)) : ce sont des métadonnées, pas un filigrane, qu'une capture d'écran ou un réencodage peut effacer. Dans le chat, ces modèles assurent la génération d'images.