HiAPI
Blog

Tutorial

¿Cómo usar la API de Recraft Crisp Upscale? Duplica el tamaño con un solo campo

Ampliación 2x fiel sin prompt, con un único campo image_url y a $0.004 por imagen: ejemplos en curl/Python y aclaraciones sobre sus límites.

Oct 22, 2026
¿Cómo usar la API de Recraft Crisp Upscale? Duplica el tamaño con un solo campo

TL;DR

  • Recraft Crisp Upscale (recraft/crisp-upscale) hace una sola cosa: duplicar el ancho y el alto de la imagen, con bordes y texturas más nítidos, manteniendo intactos el contenido y el texto. No hay prompt; el cuerpo de la petición solo tiene un image_url. Abre la página del modelo, sube una imagen y pruébalo; los usuarios nuevos reciben 200 créditos al registrarse.
  • $0.004 por imagen: 1,000 imágenes cuestan $4.00; con $10 salen unas 2,500. El tamaño de la imagen de entrada no afecta al precio (consulta la página de precios para ver la tarifa completa).
  • La llamada usa la interfaz /v1/tasks de HiAPI: envía la tarea y obtén un taskId, luego consulta el resultado y, cuando termine con éxito, descarga desde output[0].url (JPEG, sin canal alfa).

Qué puede hacer

  • Ampliación fiel, no un redibujado: texturas de esferas de reloj, arrugas de la piel o letras pequeñas de un póster se ven más nítidas, pero el contenido, la composición y el texto no cambian en absoluto; los materiales con texto no se «convierten en otra imagen» al ampliarlos.
  • Se controla con un solo campo: image_url recibe una dirección pública (JPEG / PNG / WebP, ≤10 MB); no hay prompt ni opción de factor de escala.
  • Ideal para imágenes de producto, pósters con texto y material de diseño: cualquier caso en el que «la imagen original ya es correcta, solo le falta resolución».
  • Los casos no adecuados también están claros: si quieres detalle redibujado a nivel 4K o cambiar el contenido de paso, usa el redibujado generativo (consulta también el tutorial en inglés sobre cómo aumentar la resolución con modelos de imagen a imagen); Crisp Upscale solo duplica el tamaño, no redibuja el contenido.
  • Genera 1 JPEG; si necesitas un resultado con transparencia, primero amplía y luego elimina el fondo (consulta el tutorial en inglés sobre eliminación de fondos).

Aquí tienes un par real de «original → 2x»:

Original 640×640 Resultado ampliado 1280×1280

recraft/crisp-upscale, 640×640 → 1280×1280, $0.004. El guilloché de la esfera, la caja de acero cepillado y las letras pequeñas de la esfera siguen nítidos al doble de tamaño.

Abre la página del modelo, sube una imagen y pruébalo →

Dos formas de empezar

3 pasos en el navegador: abre la página del modelo → sube la imagen → pulsa ampliar; $0.004 por imagen.

3 pasos con la API: POST /v1/tasks para enviar → obtén el taskId → con GET /v1/tasks/<taskId> consulta hasta ver success y descarga. Para lotes, repite estos tres pasos en bucle; una tarea por imagen.

curl: la primera imagen

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: your-unique-key-001" \
  -d '{
  "model": "recraft/crisp-upscale",
  "input": {
    "image_url": "https://static.hiapi.ai/gallery/2026/10/4fdfd6b43b638849.jpg"
  }
}'

Eso es todo el cuerpo de la petición: cualquier campo adicional (como prompt o scale) devuelve directamente un 400.

Python: enviar, consultar y descargar

import time, uuid, requests

BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
}

payload = {
    "model": "recraft/crisp-upscale",
    "input": {
        "image_url": "https://example.com/your-image.jpg",
    },
}

resp = requests.post(
    BASE,
    headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
    json=payload,
    timeout=30,
)
resp.raise_for_status()
task_id = resp.json()["taskId"]

while True:
    task = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30).json()
    print(task["status"])
    if task["status"] in ("success", "fail"):
        break
    time.sleep(5)

if task["status"] == "success":
    image_url = task["output"][0]["url"]   # dirección temporal, descárgala cuanto antes
    img = requests.get(image_url, timeout=60)
    with open("upscaled.jpg", "wb") as f:
        f.write(img.content)
    print("saved upscaled.jpg")

Tabla de parámetros

Campo Obligatorio Valor Descripción
image_url Sí Dirección pública http/https JPEG / PNG / WebP, ≤10 MB por imagen

Solo este campo. El factor de ampliación está fijado en 2x de ancho y alto, no se puede elegir; no hay prompt ni parámetros de formato de salida.

Errores que encontrarás

Código de estado Significado Cómo resolverlo
400 INVALID_REQUEST Falta image_url, no es una dirección http/https o se enviaron campos inexistentes como prompt / scale Deja solo image_url en el cuerpo de la petición
402 INSUFFICIENT_QUOTA Saldo insuficiente (no se cobra) Recarga y vuelve a intentarlo
429 RATE_LIMITED Se activó el límite de peticiones Reduce la frecuencia de envío
409 / 422 IDEMPOTENCY_KEY_* Envío repetido con la misma clave de idempotencia Usa un Idempotency-Key nuevo

Si la tarea termina en estado de fallo, también hay códigos como TASK_FAILED o TASK_TIMEOUT; los fallos no se cobran.

Antes de ponerlo en producción

  • Callback: envía en el nivel superior del cuerpo "callback": {"url": "https://..."} y se notificará automáticamente el estado final.
  • Guarda pronto: output[0].url es una dirección temporal; descárgala en cuanto la recibas.
  • Duración: normalmente entre 10 segundos y 1 minuto por imagen; no configures un intervalo de consulta demasiado corto.
  • Canal alfa: la salida es JPEG sin transparencia; si necesitas material con fondo transparente, amplía primero y elimina el fondo después (si inviertes el orden, los bordes del recorte quedarán borrosos).
  • Los lotes se calculan fácil: ampliar las cinco imágenes de un SKU cuesta $0.02; pasar las 1,000 imágenes de toda la tienda una vez cuesta $4.00; basta con enviarlas en lote y cada tarea se cronometra por separado.
  • La calidad del original marca el límite: la ampliación 2x hace los bordes más nítidos, pero las zonas del original que ya están borrosas no generan detalle de la nada; prueba con una imagen clave antes de ir en lote.

Preguntas frecuentes

¿De verdad es solo 2x?

Sí. Duplica el ancho y el alto (640×640 → 1280×1280, 480×640 → 960×1280); el factor es fijo y no hay opción de 4x; si necesitas más, amplía y vuelve a ejecutarlo.

¿Cambia el texto de la imagen?

No. En los pósters con texto, los glifos se mantienen tal cual: no se reescriben ni se añade texto.

¿Cuánto cuesta cada imagen?

$0.004 por imagen, 1,000 imágenes cuestan $4.00; el tamaño de la imagen de entrada no afecta al precio. Los fallos no se cobran y los errores de validación de parámetros no entran en el cobro.

¿Se puede enviar base64?

No. image_url debe ser una dirección pública http/https; sube primero el archivo local a tu almacenamiento y luego pasa la dirección.

¿Cuánto tarda una imagen?

Normalmente entre 10 segundos y 1 minuto; las tareas en lote se encolan según la cantidad, así que si tienes prisa, envíalas por tandas.

Siguiente paso: toma una imagen de tu producto y amplíala en la página del modelo para ver el resultado; consulta la página de casos para ver cinco comparativas reales de «original → 2x»; y la página de comparación para ver la misma imagen original frente al redibujado generativo.

Artículos relacionados

Ver todos los artículos →

Empieza a crear con artefactos de IA persistentes

Consigue tu API key y llama a modelos de imagen, vídeo y audio a través de una única API basada en tasks.

Leer la documentación de la API