SciFig

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.

Afficher en Markdown

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.

operationFonctionChampsCrédits
instructModifie toute l’image selon l’instruction ; avec un masque, redessine uniquement la zone masquéeinstruction de 1 à 2 000 caractères, mask facultatif, quality50 / 75 / 100 selon la qualité ; avec un masque 100
white_backgroundRemplace le fond par un blanc uni, sans transparencequality50 / 75 / 100
aspect_ratioRecadre l’ensemble de la figure à un nouveau rapport largeur/hauteur en étendant le fondaspect_ratio (1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9), quality50 / 75 / 100
recolorApplique une palette à l’illustration en conservant les couleurs des libelléspalette facultative de 1 à 8 couleurs #RRGGBB ; une palette est choisie si omise ; quality50 / 75 / 100
replace_textModifie les libellés sur place en conservant leur police et leur positiontext_detection, replacements100

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-detections sur la même image. Cet appel gratuit renvoie un id et les texts avec leur index.
  • Envoyez operation: "replace_text", text_detection: <id> et replacements: [{"index": 0, "text": "Figure 1"}]. Les textes non répertoriés restent inchangés.
  • Un index absent de la détection renvoie 400 INVALID_REQUEST avec details.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())