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.
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 unimage_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/tasksde HiAPI: envía la tarea y obtén untaskId, luego consulta el resultado y, cuando termine con éxito, descarga desdeoutput[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_urlrecibe 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].urles 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 →-
Tutorial
Cómo llamar a hailuo-2.3-fast/image-to-video a través de la API de HiAPI: práctica con curl y Python
La primera solicitud ejecutable del nivel rápido y de bajo coste de imagen a vídeo: del ID del modelo a la descarga del MP4
-
Tutorial
Cómo llamar a hailuo-2.3/text-to-video mediante la API de HiAPI: curl, Python y ejemplos de solicitud ejecutables
-
Tutorial
Uso de Kandinsky 6.0 Pro texto a video en HiAPI: tutorial con curl y Python
Demostración práctica centrada en la solicitud: construir la llamada de prompt a clip de video, enviar la solicitud, sondear el estado de finalización y descargar el resultado
