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.
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'unimage_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/tasksde HiAPI : soumettez la tâche pour obtenir untaskId, puis interrogez le résultat et téléchargez depuisoutput[0].urlune 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_urlreç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].urlest 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 →-
Tutoriel
Comment appeler hailuo-2.3-fast/image-to-video via l'API HiAPI : curl et Python en pratique
La première requête exploitable du palier image-vers-vidéo rapide et économique — de l'ID du modèle au téléchargement du MP4
-
Tutoriel
Comment appeler hailuo-2.3/text-to-video via l'API HiAPI : curl, Python et exemples de requêtes exécutables
-
Tutoriel
Utiliser Kandinsky 6.0 Pro texte-vers-vidéo sur HiAPI : tutoriel curl et Python
Démonstration pratique axée sur la requête : construire l'appel du prompt au clip vidéo, soumettre la requête, interroger l'état d'achèvement et télécharger le résultat
