Utilisez spicyapi/image-upscaler-v1/upscale pour agrandir une image terminée. Choisissez 2k, 4k ou 8k selon les pixels dont votre recadrage final a besoin : les paliers sont des budgets de pixels d'environ 4, 17 et 67 mégapixels, pas des tailles fixes de côté long. Les trois coûtent $0.012 par image de sortie (1000 images coûtent $12), en JPEG, PNG ou WebP. Essayez d'abord dans le Playground, puis lancez le court exemple Python ou confiez-le à un Agent.
Choisissez le palier selon le recadrage final
L'Image Upscaler conserve le rapport d'aspect de la source. Un portrait de 1024×1536 renvoie :
| Requête | Budget de pixels | Taille renvoyée | Prix |
|---|---|---|---|
2k | environ 4 MP | 1672×2508 | $0.012/image |
4k (par défaut) | environ 17 MP | 3344×5017 | $0.012/image |
8k | environ 67 MP | 6689×10033 | $0.012/image |
Un autre rapport d'aspect donne d'autres dimensions. Si vous raisonnez en « 2× » ou « 4× », l'agrandissement linéaire est la racine carrée du budget divisée par les mégapixels de la source :
| Source | 2k | 4k | 8k |
|---|---|---|---|
| 1024×1536 (1.6 MP) | 1.6× | 3.3× | 6.5× |
| 1920×1080 (2.1 MP) | 1.4× | 2.8× | 5.7× |
| 4000×3000 (12 MP photo de téléphone) | 0.6× (réduit) | 1.2× | 2.4× |
Un palier inférieur au nombre de pixels de la source réduit : une entrée de 3344×5017 envoyée en 2k renvoie 1672×2509. Si la source atteint déjà la destination, exportez-la normalement ; cet endpoint n'a pas de mode de netteté à la taille d'origine.
Pour une carte web affichée sur 600 pixels de large à densité 2×, il vous faut 1200 pixels sur le recadrage final. Si ce recadrage garde la moitié de la largeur source, le master en faut 2400 en largeur. Le portrait de 1672 pixels en 2k est trop court ; 4k le couvre.
Pour l'impression, multipliez les pouces par la densité demandée par votre imprimeur. Une image de 10×15 pouces à 300 pixels par pouce doit faire 3000×4500 pixels, ce que le portrait 4k couvre sans recadrage. Modifier les métadonnées de densité n'ajoute aucun pixel, et un recadrage plus serré demande un nouveau calcul.
Ne choisissez 8k que si le recadrage en a besoin. Le prix est identique, mais 67 mégapixels représentent environ 268 MB de données de pixels brutes sur quatre canaux, ce qui compte pour la mémoire d'édition, et le JPEG téléchargé atteint environ 8 MB à ce palier.
Préparez une source propre
Terminez d'abord la suppression d'objets, le recadrage et les autres retouches, et partez du meilleur original, pas d'une miniature de site web. L'entrée est un JPEG, PNG ou WebP de 10 Mo au maximum, donc un grand master d'impression peut devoir être exporté avant l'envoi. Pour un catalogue de papeterie fictif, utilisez une photo approuvée d'un stylo plume et de son étui, et gardez une référence séparée pour le nom gravé exact : l'agrandissement peut transformer des marques ambiguës en lettres assurées mais fausses.
Choisissez output_format selon ce qui vient ensuite. jpeg (par défaut) est le plus petit ; le PNG est sans perte mais plusieurs fois plus gros en 8k ; WebP se situe entre les deux. Le PNG ne rend pas un détail reconstruit plus vrai. Il n'y a ni prompt, ni largeur/hauteur exacte, ni force de restauration du visage, ni seed.

Illustration des zones d'inspection, pas un résultat de mise à l'échelle.
Essayez d'abord dans le Playground
- Ouvrez la page Image Upscaler et restez dans l'onglet Playground, en vue Form. Connectez-vous avec un compte provisionné pour lancer.
- Déposez votre image dans Input image (JPG, PNG ou WEBP, jusqu'à 10 Mo), ou collez un lien avec Asset URL.
- Réglez Resolution sur 2K, 4K ou 8K et Output format sur JPEG, PNG ou WebP.
- Lancez, puis vérifiez le résultat à sa taille finale de carte ou d'impression.
Essayez ici votre meilleure source avant d'écrire du code. Le corps de requête du Playground est le même JSON que celui que l'API accepte, donc une configuration qui fonctionne ici se copie telle quelle dans le code.
Appelez-la ensuite depuis le code
Installez le SDK Python (pip install spicyapi), définissez SPICY_API_KEY dans votre environnement et exécutez :
Installez Pillow (python -m pip install Pillow) pour la validation du téléchargement dans cet exemple. Le fichier de sortie d'origine n'est remplacé qu'après le décodage réussi du nouveau JPEG.
import os
from pathlib import Path
import tempfile
import urllib.request
import uuid
from PIL import Image
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
source = client.upload_file("./fountain-pen-master.png") # local file becomes a spicy:// URI
task = client.create_task(
model="spicyapi/image-upscaler-v1/upscale",
input_data={"image_url": source["uri"], "resolution": "4k", "output_format": "jpeg"},
idempotency_key=str(uuid.uuid4()), # new key per new request; reuse only to retry the same one
)
print(f"Task ID: {task['taskId']}", flush=True)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"Task {task['taskId']} ended as {final['state']}")
assets = [a for a in output_assets(final)
if a.get("url") and not a.get("pending") and not a.get("unavailable")]
if not assets:
raise RuntimeError(f"Task {task['taskId']} has no downloadable output yet")
request = urllib.request.Request(assets[0]["url"], headers={"User-Agent": "upscale-example/1.0"})
target = Path("upscaled.jpg")
temporary = None
try:
with tempfile.NamedTemporaryFile(dir=target.parent, suffix=".jpg", delete=False) as out:
temporary = Path(out.name)
with urllib.request.urlopen(request, timeout=60) as response:
out.write(response.read())
with Image.open(temporary) as image:
if image.format != "JPEG":
raise ValueError("Expected a JPEG output")
image.load() # reject unreadable or truncated data before replacing the keeper
os.replace(temporary, target)
finally:
if temporary is not None:
temporary.unlink(missing_ok=True)Une exécution prend environ 45 secondes. Changez de palier ou de format en modifiant resolution et output_format. Les envois, l'attente, les reprises et les erreurs sont couverts dans le guide des tâches et la référence du SDK Python. Les liens de résultat durent environ 20 minutes et les fichiers générés sont supprimés au plus tard après 14 jours, alors copiez le résultat dans votre propre stockage.
Ou laissez un Agent l'exécuter
Quand un assistant doit agrandir vos images, les trois outils officiels affichent le prix et vous demandent avant un appel payant.
- CLI.
spicyapiexécute une tâche depuis un terminal (npx @spicyapi/clifonctionne sans installation). Mettez{"image_url": "spicy://...", "resolution": "4k"}dansinput.json, en utilisant l'URI affichée par l'envoi :
``bash spicyapi files upload ./fountain-pen-master.png spicyapi tasks create --model spicyapi/image-upscaler-v1/upscale --input-file input.json --wait ``
- Serveur MCP. Ajoutez le serveur MCP à votre assistant, puis demandez : « Upscale ./fountain-pen-master.png to 4K with Image Upscaler. » Il appelle
spicyapi_upload_file, puisspicyapi_task_create, qui s'arrête pour votre confirmation de prix, puisspicyapi_task_wait. - Skill.
npx skills add spicyapi-ai/spicy-skillinstalle l'Agent Skill, qui fait lire le schéma du modèle en direct par un assistant de code au lieu de deviner les champs. Il ne peut pas lancer de tâches tout seul, utilisez-le donc avec la CLI ou MCP.
Décidez si les pixels supplémentaires sont utiles
Vérifiez le résultat dans sa mise en page finale de carte ou d'impression, puis en pleine taille sur la plume, la gravure et les bords de l'étui : les pixels supplémentaires servent-ils à cet usage tout en gardant le produit fidèle ?
| Symptôme | Étape suivante |
|---|---|
| La sortie est plus petite que la source | Comparez les pixels source au budget du palier ; ne montez d'un cran que si la destination exige un agrandissement. |
| Les lettres gravées paraissent nettes mais fausses | Remplacez la source par une photo plus nette ou un visuel approuvé ; un palier plus grand ne peut pas vérifier les lettres manquantes. |
| Des contours lumineux apparaissent autour des bords sombres | Comparez avec l'original soumis. Si sa propre netteté a créé le contour, exportez une source plus propre avant de réessayer. |
| Le visage paraît lissé mais différent | Comparez les yeux, l'expression et la ligne de cheveux avec l'original ; rejetez ce candidat plutôt que d'approuver la seule netteté. |
| La page web télécharge une image énorme | Gardez le master approuvé et exportez un dérivé ordinaire plus petit pour l'emplacement affiché. |
| L'API refuse un champ supplémentaire | Supprimez scale, face_restore, width et les réglages similaires ; cet endpoint n'en a aucun. |

Illustration de détails de portrait à comparer, pas un détail facial récupéré.
Pour les portraits fictifs d'adultes, SpicyAPI n'exécute aucun contrôle de sécurité sur cet outil ; le consentement et les obligations juridiques restent donc les vôtres. Les entrées NSFW modérées et avancées s'agrandissent normalement ; exécutez un échantillon de votre propre matériel avant un lot.
Si le master est bon mais qu'une petite carte perd la gravure, ajustez ce dérivé ou réduisez le zoom ; un autre passage IA n'est pas le premier remède. Si vous avez besoin d'un cadrage plus large plutôt que de plus de pixels, voyez l'extension vers un nouveau rapport d'aspect ; pour les clips, voyez la mise à l'échelle vidéo.






