Référence API
Modification d’images
Modifiez une image par instruction ou par zone, remplacez son fond, changez son rapport largeur/hauteur ou ses couleurs, ou remplacez son texte.
Opérations#
POST /images/edits avec un corps JSON. Portée requise : figures:generate. image est un file_id issu d’une importation ou d’un résultat antérieur ; operation choisit la modification et vaut instruct par défaut. Les mêmes outils figurent dans la barre des résultats du site.
| operation | Fonction | Champs | Crédits |
|---|---|---|---|
| instruct | Modifie toute l’image selon l’instruction ; avec un masque, redessine uniquement la zone masquée | instruction de 1 à 2 000 caractères, mask facultatif, quality | 50 / 75 / 100 selon la qualité ; avec un masque 100 |
| white_background | Remplace le fond par un blanc uni, sans transparence | quality | 50 / 75 / 100 |
| aspect_ratio | Recadre l’ensemble de la figure à un nouveau rapport largeur/hauteur en étendant le fond | aspect_ratio (1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9), quality | 50 / 75 / 100 |
| recolor | Applique une palette à l’illustration en conservant les couleurs des libellés | palette facultative de 1 à 8 couleurs #RRGGBB ; une palette est choisie si omise ; quality | 50 / 75 / 100 |
| replace_text | Modifie les libellés sur place en conservant leur police et leur position | text_detection, replacements | 100 |
Un masque est un PNG importé avec l’usage mask, de la même taille que l’image, blanc aux endroits où l’image peut changer. Une modification de zone utilise toujours le modèle premium, quelle que soit la valeur de quality. replace_text n’accepte pas quality : il utilise toujours le modèle de modification de texte au tarif premium.
Remplacer du texte#
- Appelez
POST /images/text-detectionssur la même image. Cet appel gratuit renvoie unidet lestextsavec leurindex. - Envoyez
operation: "replace_text",text_detection: <id>etreplacements: [{"index": 0, "text": "Figure 1"}]. Les textes non répertoriés restent inchangés. - Un index absent de la détection renvoie
400 INVALID_REQUESTavecdetails.reason = TEXT_INDEX_OUT_OF_RANGE, sans facturation.
Crédits#
Les crédits sont réservés à la création de la tâche, facturés une seule fois en cas de réussite et intégralement rendus en cas d’échec. La réponse est une tâche ; consultez Tâches et attente limitée pour ses champs et ses statuts. Les erreurs sont répertoriées sous Erreurs.
cURL#
curl -X POST https://scifig.ai/api/v1/images/edits \
-H "Authorization: Bearer $SCIFIG_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Prefer: wait=25" \
-H "Content-Type: application/json" \
-d '{
"image": "<file_id>",
"operation": "aspect_ratio",
"aspect_ratio": "16:9"
}'JavaScript#
const response = await fetch('https://scifig.ai/api/v1/images/edits', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SCIFIG_API_KEY}`,
'Idempotency-Key': crypto.randomUUID(),
Prefer: 'wait=25',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"image": "<file_id>",
"operation": "aspect_ratio",
"aspect_ratio": "16:9"
}),
});
const result = await response.json();
console.log(response.status, result);Python#
import os
import uuid
import requests
headers = {
"Authorization": f"Bearer {os.environ['SCIFIG_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
"Prefer": "wait=25",
}
response = requests.post(
"https://scifig.ai/api/v1/images/edits",
headers=headers,
json={
"image": "<file_id>",
"operation": "aspect_ratio",
"aspect_ratio": "16:9"
},
timeout=60,
)
print(response.status_code, response.json())