Créer des images
POST/images/generations
Transforme un prompt en images avec FLUX.1 [schnell], au format d'OpenAI : les SDK officiels fonctionnent tels quels (client.images.generate). Les images reviennent en JPEG, encodées en base64 ; Evanesca n'en héberge ni n'en garde aucune.
BientôtOuverture prochaine : ce qui suit décrit le service tel qu'il fonctionnera.
https://evanesca.app/api/v1/images/generationsOuvre au lancementBearer $EVANESCA_API_KEYAuthorizationstringrequisBearer suivi de votre clé, qui commence par sk-eva-.
Content-Typestringrequisapplication/json : le corps est du JSON.
Corps de la requête
application/jsonmodelstringrequisFLUX.1 [schnell], de Black Forest Labs (Allemagne).
promptstringrequisLa description de l'image, 400 caractères au plus.
nintegerCombien d'images créer.
sizestringLa taille de chaque image, en pixels.
response_formatstringb64_json met chaque image dans data[].b64_json ; url renvoie une data URL plutôt qu'un lien, car Evanesca n'héberge aucune image.
Où l'appel tourne, ce qu'il coûte
Evanesca · au dossier
- Exécuté
- Infomaniak · Suisse
flux-schnell
- Infomaniak · Suisse
- L'opérateur garde
Infomaniak annonce que les requêtes ne sont ni enregistrées ni utilisées pour entraîner des modèles (Infomaniak AI Tools).
- Coût
- 0,0092 € la seconde de génération, TVA comprise, arrondie à la seconde supérieure, une seconde au moins ; usage.generation_seconds est ce qui est facturé. Environ 2 secondes, soit environ 0,02 €, pour une image FLUX.1 [schnell] typique. Une requête refusée ne coûte rien.
- En-têtes de réponse
x-evanesca-operator: infomaniakx-evanesca-location: switzerland
Ce qui sort d'Evanesca
Le prompt partent chez Infomaniak, en Suisse — hors de l'UE, sous décision d'adéquation de l'UE ; les images reviennent dans la réponse et Evanesca n'en conserve aucune. Les images portent des métadonnées IPTC qui les marquent comme générées par une IA (AI Act, art. 50(2)) — des métadonnées, pas un filigrane, qu'une capture d'écran ou un réencodage peut effacer (Images).
Erreurs
| Statut | type | Signification |
|---|---|---|
| 400 | invalid_ | Un prompt absent ou de plus de 400 caractères, n hors de 1 à 5, une taille hors liste, ou un corps multipart — le champ param dit lequel (limites). |
| 401 | invalid_ | Pas de clé, une clé malformée, ou une clé révoquée. |
| 402 | insufficient_ | Votre crédit est à zéro ou en dessous. Rechargez pour continuer. |
| 404 | model_ | Identifiant inconnu, modèle qu'Evanesca ne sert pas, ou photomaker-v2, servi par /images/edits. |
| 502 | upstream_ | L'opérateur est injoignable, a renvoyé une réponse illisible, ou a refusé le compte d'Evanesca elle-même. Votre clé n'est pas en cause : réessayez. |
Les autres erreurs d'opérateur vous parviennent avec son statut et son corps, et Retry-After quand il en envoie un (erreurs).
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 }
}{
"error": {
"message": "'size' must be one of: 1024x1024, 1792x1024, 1024x1792. Nothing was charged.",
"type": "invalid_request",
"param": "size"
}
}