SciFig

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.

Ver como Markdown

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.

operationFunciónCamposCréditos
instructEdita toda la imagen según las instrucciones; con máscara, redibuja solo la región enmascaradainstruction de 1–2000 caracteres, mask opcional, quality50 / 75 / 100 según la calidad; con máscara 100
white_backgroundSustituye el fondo por blanco sólido, sin transparenciaquality50 / 75 / 100
aspect_ratioAjusta la figura completa a una relación de aspecto nueva, extendiendo el fondoaspect_ratio (1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9), quality50 / 75 / 100
recolorAplica una paleta a la ilustración y conserva los colores de las etiquetaspalette opcional de 1–8 colores #RRGGBB; si se omite, se elige una paleta; quality50 / 75 / 100
replace_textModifica las etiquetas en su posición, conservando la fuente y la ubicacióntext_detection, replacements100

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-detections con la misma imagen. Es gratis y devuelve un id y los texts con su index.
  • Envía operation: "replace_text", text_detection: <id> y replacements: [{"index": 0, "text": "Figure 1"}]. Los textos que no enumeres permanecen iguales.
  • Un índice que no figura en la detección devuelve 400 INVALID_REQUEST con details.reason = TEXT_INDEX_OUT_OF_RANGE y 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())