Referencia de la API
Edición de imágenes
Edita una imagen mediante instrucciones o una región, sustituye el fondo, cambia la relación de aspecto o los colores, o reemplaza su texto.
Operaciones#
POST /images/edits con un cuerpo JSON. Ámbito requerido: figures:generate. image es un file_id de una subida o resultado anterior; operation selecciona la edición y vale instruct por defecto. Las mismas herramientas están en la barra de resultados del sitio web.
| operation | Función | Campos | Créditos |
|---|---|---|---|
| instruct | Edita toda la imagen según las instrucciones; con máscara, redibuja solo la región enmascarada | instruction de 1–2000 caracteres, mask opcional, quality | 50 / 75 / 100 según la calidad; con máscara 100 |
| white_background | Sustituye el fondo por blanco sólido, sin transparencia | quality | 50 / 75 / 100 |
| aspect_ratio | Ajusta la figura completa a una relación de aspecto nueva, extendiendo el fondo | 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 | Aplica una paleta a la ilustración y conserva los colores de las etiquetas | palette opcional de 1–8 colores #RRGGBB; si se omite, se elige una paleta; quality | 50 / 75 / 100 |
| replace_text | Modifica las etiquetas en su posición, conservando la fuente y la ubicación | text_detection, replacements | 100 |
Una máscara es un PNG subido con finalidad mask, del mismo tamaño que la imagen, con blanco donde puede cambiar. La edición de región siempre usa el modelo premium, independientemente de quality. replace_text no acepta quality: siempre usa el modelo de edición de texto y el precio premium.
Sustituir texto#
- Llama a
POST /images/text-detectionscon la misma imagen. Es gratis y devuelve unidy lostextscon suindex. - Envía
operation: "replace_text",text_detection: <id>yreplacements: [{"index": 0, "text": "Figure 1"}]. Los textos que no enumeres permanecen iguales. - Un índice que no figura en la detección devuelve
400 INVALID_REQUESTcondetails.reason = TEXT_INDEX_OUT_OF_RANGEy no cobra nada.
Créditos#
Los créditos se reservan al crear la tarea, se cobran una sola vez si se completa y se devuelven íntegramente si falla. La respuesta es una tarea; consulta Tareas y espera limitada para ver sus campos y estados. Los errores se enumeran en Errores.
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())