HiAPI
Blog

Tutoriel

Comment utiliser l'API Recraft Crisp Upscale ? Un seul champ pour un agrandissement ×2

Agrandissement ×2 fidèle sans prompt, un seul champ image_url, 0,004 $ par image : exemples curl/Python et limites.

Oct 22, 2026
Comment utiliser l'API Recraft Crisp Upscale ? Un seul champ pour un agrandissement ×2

TL;DR

  • Recraft Crisp Upscale (recraft/crisp-upscale) fait une seule chose : doubler la largeur et la hauteur d'une image, avec des bords et des textures plus nets, tandis que le contenu et le texte sont préservés à l'identique. Pas de prompt, le corps de la requête ne contient qu'un image_url. Ouvrez la page du modèle, téléversez une image et essayez : les nouveaux utilisateurs reçoivent 200 crédits à l'inscription.
  • 0,004 $ par image : 1 000 images pour 4,00 $, environ 2 500 images pour 10 $ ; la taille de l'image d'entrée n'influence pas le prix (tarifs complets sur la page des tarifs).
  • L'appel passe par l'API /v1/tasks de HiAPI : soumettez la tâche pour obtenir un taskId, puis interrogez le résultat et téléchargez depuis output[0].url une fois terminé (JPEG, sans canal alpha).

Ce qu'il sait faire

  • Agrandissement fidèle, pas de redessin : les textures de cadran, les rides de la peau ou les petits textes d'une affiche deviennent plus nets, mais le contenu, la composition et le texte ne changent pas d'un iota — un visuel avec du texte ne sera pas « agrandi en une autre image ».
  • Un seul champ pour l'appeler : image_url reçoit une adresse publique (JPEG / PNG / WebP, ≤10 Mo), sans prompt ni option de facteur d'agrandissement.
  • Idéal pour les photos produit, les affiches avec texte et les ressources de design : tout cas où « l'image d'origine est correcte, seule la résolution manque ».
  • Les cas inadaptés sont tout aussi clairs : si vous voulez des détails redessinés de niveau 4K ou modifier le contenu au passage, utilisez le redessin génératif (voir aussi le tutoriel en anglais sur l'augmentation de résolution avec un modèle image-à-image) ; Crisp Upscale ne fait que doubler les dimensions, sans redessiner le contenu.
  • Sortie : 1 JPEG ; pour un résultat transparent, agrandissez d'abord, puis supprimez le fond (voir le tutoriel en anglais sur la suppression de fond).

Voici une vraie paire « original → ×2 » :

Original 640×640 Résultat agrandi 1280×1280

recraft/crisp-upscale, 640×640 → 1280×1280, 0,004 $. Le guilloché du cadran, le boîtier en acier brossé et les petits textes du cadran restent nets à double taille.

Ouvrez la page du modèle et téléversez une image pour essayer →

Deux façons de démarrer

3 étapes dans le navigateur : ouvrez la page du modèle → téléversez une image → cliquez sur agrandir, 0,004 $ par image.

3 étapes en API : POST /v1/tasks pour soumettre → récupérez le taskId → GET /v1/tasks/<taskId> jusqu'au statut success, puis téléchargez. Pour du lot, bouclez sur ces trois étapes, une tâche par image.

curl : la première image

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"
  }
}'

C'est tout le corps de la requête — tout champ supplémentaire (comme prompt ou scale) renvoie directement une erreur 400.

Python : soumission, interrogation, téléchargement

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"]   # adresse temporaire, téléchargez-la au plus vite
    img = requests.get(image_url, timeout=60)
    with open("upscaled.jpg", "wb") as f:
        f.write(img.content)
    print("saved upscaled.jpg")

Tableau des paramètres

Champ Obligatoire Valeur Description
image_url Oui Adresse http/https publique JPEG / PNG / WebP, ≤10 Mo par image

Un seul champ. Le facteur d'agrandissement est fixé à ×2 en largeur et en hauteur, non modifiable ; pas de prompt ni de paramètre de format de sortie.

Les erreurs que vous rencontrerez

Code de statut Signification Que faire
400 INVALID_REQUEST image_url manquant, pas une adresse http/https, ou champ inexistant en trop comme prompt / scale Ne gardez que image_url dans le corps de la requête
402 INSUFFICIENT_QUOTA Solde insuffisant (aucun débit) Rechargez puis réessayez
429 RATE_LIMITED Limite de débit atteinte Réduisez la fréquence de soumission
409 / 422 IDEMPOTENCY_KEY_* Soumission en double avec la même clé d'idempotence Utilisez un nouveau Idempotency-Key

Un échec en état terminal peut aussi renvoyer des codes comme TASK_FAILED ou TASK_TIMEOUT ; un échec n'est pas facturé.

À vérifier avant la mise en production

  • Callback : passez "callback": {"url": "https://..."} au niveau supérieur du corps de la requête pour être notifié automatiquement à l'état terminal.
  • Transférez rapidement : output[0].url est une adresse temporaire, téléchargez dès que vous l'avez.
  • Durée : une image prend généralement de 10 secondes à environ 1 minute, ne réglez pas un intervalle d'interrogation trop court.
  • Canal alpha : la sortie est un JPEG sans transparence ; pour un visuel à fond transparent, agrandissez d'abord puis supprimez le fond (dans l'ordre inverse, les contours du détourage seront flous).
  • Le calcul pour le lot est simple : agrandir les cinq images d'un SKU coûte 0,02 $ ; faire passer 1 000 ressources de toute la boutique coûte 4,00 $, il suffit de soumettre en lot, chaque tâche étant chronométrée séparément.
  • La qualité de l'original fixe la limite : l'agrandissement ×2 rend les bords plus nets, mais les zones floues de l'original ne feront pas apparaître de détails par magie ; testez une image clé avant de lancer le lot.

Questions fréquentes

C'est vraiment ×2 ?

Oui. La largeur et la hauteur sont chacune doublées (640×640 → 1280×1280, 480×640 → 960×1280), le facteur est fixe, sans option ×4 ; pour plus grand, relancez un agrandissement sur le résultat.

Le texte dans l'image change-t-il ?

Non. Une affiche avec du texte conserve ses glyphes à l'identique après agrandissement, sans réécriture ni ajout de texte.

Combien coûte une image ?

0,004 $ par image, 4,00 $ pour 1 000 images ; la taille de l'image d'entrée n'influence pas le prix. Un échec n'est pas facturé, et une requête qui échoue à la validation des paramètres n'entre pas en facturation.

Peut-on envoyer du base64 ?

Non. image_url doit être une adresse http/https publique ; téléversez d'abord un fichier local sur votre stockage puis fournissez l'adresse.

Combien de temps par image ?

Généralement de 10 secondes à environ 1 minute ; les tâches en lot sont mises en file selon leur nombre, soumettez par lots si vous êtes pressé.

Étape suivante : prenez une de vos photos produit et agrandissez-la sur la page du modèle pour voir le résultat ; cinq vraies comparaisons « original → ×2 » sont sur la page de cas ; une comparaison avec le redessin génératif sur la même image d'origine est sur la page de comparaison.

Articles similaires

Voir tous les articles →

Commencez avec des artefacts IA persistants

Obtenez votre clé API et appelez des modèles d'image, de vidéo et d'audio via une API unique basée sur les tasks.

Lire la documentation de l'API