Agrandir et améliorer des images basse résolution en une Assembly
Rendez vos petites photos délavées utilisables pour des annonces, des bannières et des impressions avant de les stocker. Nos Robots /image/enhance et /image/upscale améliorent les tons et ajoutent des pixels dans l’Assembly qui redimensionne et stocke déjà vos téléversements. Ci-dessous, nous transformons une photo de 480 pixels en un JPEG de 1 920 pixels, plus net et plus coloré.
Ce que font les deux Robots
Le Robot 🤖 /image/upscale (English)
agrandit une image à l’aide d’un modèle d’IA plutôt qu’en étirant ses pixels. Son modèle par défaut,
nightmareai/real-esrgan, prend en charge scale: 2 et
scale: 4, doublant ou quadruplant chaque dimension tout en reconstruisant
les contours et la texture. D’autres modèles pris en charge peuvent produire des dimensions
différentes pour le même scale ; ce guide utilise donc le modèle par
défaut. Ce Robot est en bêta.
Le Robot 🤖 /image/enhance (English)
applique des ajustements ImageMagick avec son engine: "classic" par défaut, que nous
utilisons ici. enhance règle l’intensité des ajustements
(auto, auto_gentle, auto_aggressive
ou none), sharpen et
denoise acceptent une valeur de 0 à 10, et
preset applique l’un des 13 étalonnages colorimétriques, comme
warm, vintage ou bw_classic.
L’amélioration classique conserve le format et les dimensions des images prises en charge ;
les types non pris en charge sont transmis sans modification.
Les deux sont des Steps ordinaires dans une Assembly, aux côtés de 🤖 /image/resize, 🤖 /image/optimize et de votre Robot de stockage. Vous n’avez pas besoin de vous inscrire auprès d’un autre fournisseur d’IA, de gérer une autre clé d’API, ni de télécharger puis de téléverser à nouveau les fichiers entre les services.
Avant et après
Pour montrer l’effet, nous avons pris notre photo de démonstration du caméléon et l’avons transformée en un fichier de mauvaise qualité à téléverser : 480 pixels de large, avec un contraste réduit. La même Assembly améliore ensuite cette copie, l’agrandit 4× et convertit le résultat en JPEG :
{
"steps": {
"imported": {
"robot": "/http/import",
"url": "https://demos.transloadit.com/inputs/chameleon.jpg"
},
"low_res": {
"use": "imported",
"robot": "/image/resize",
"width": 480,
"contrast": 0.6,
"result": true
},
"enhanced": { "use": "low_res", "robot": "/image/enhance", "enhance": "auto_aggressive" },
"upscaled": { "use": "enhanced", "robot": "/image/upscale", "scale": 4 },
"web": { "use": "upscaled", "robot": "/image/resize", "format": "jpg", "result": true }
}
}
Nous exécutons d’abord /image/enhance sur le petit fichier, afin que
l’agrandissement parte d’une image bien exposée et que l’amélioration ait moins de pixels à
traiter. Enregistrez le JSON sous le nom instructions.json à côté de ce script,
fix-upload.mjs, qui utilise notre SDK Node.js :
import { readFile } from 'node:fs/promises'
import { Transloadit } from '@transloadit/node'
const client = new Transloadit({
authKey: process.env.TRANSLOADIT_KEY,
authSecret: process.env.TRANSLOADIT_SECRET,
})
const assembly = await client.createAssembly({
params: JSON.parse(await readFile('instructions.json', 'utf8')),
waitForCompletion: true,
})
for (const [step, [file]] of Object.entries(assembly.results)) {
console.log(`${step}: ${file.meta.width}×${file.meta.height} ${file.ssl_url}`)
}
Avec Node.js 20.10.0 ou une version plus récente, installez le SDK, ajoutez vos informations d’authentification et exécutez le script :
npm install @transloadit/node
export TRANSLOADIT_KEY=MY_AUTH_KEY
export TRANSLOADIT_SECRET=MY_SECRET_KEY
node fix-upload.mjs
Notre test en production a pris environ neuf secondes de bout en bout et a affiché ceci, avec des URL raccourcies :
$ node fix-upload.mjs
low_res: 480×320 https://…/1e93be86….jpg
web: 1920×1280 https://…/791f086a….jpg
Ci-dessous, à gauche, le fichier low_res de 480 pixels a été étiré à
1920 pixels par un redimensionnement classique. À droite se trouve le résultat
web.

Un zoom sur la tête montre ce que l’agrandissement ajoute : des écailles nettes, un œil bien défini et des contours précis.

Le modèle invente des détails plausibles plutôt que de récupérer ceux que l’appareil photo n’a pas capturés. C’est un bon compromis pour une annonce, une bannière principale ou une impression, mais pas pour des photos qui doivent être fidèles à la réalité à des fins d’analyse forensique.
Utiliser ces Robots sur de vrais téléversements
En production, vous appliqueriez ce traitement aux fichiers téléversés par vos utilisateurs, et uniquement à ceux qui en ont besoin. Ici, 🤖 /file/filter laisse passer les images dont les deux dimensions sont inférieures à 1 200 pixels ; toutes les autres évitent ce traitement supplémentaire :
{
"steps": {
":original": { "robot": "/upload/handle" },
"small": {
"use": ":original",
"robot": "/file/filter",
"condition_type": "and",
"accepts": [["${file.meta.width}", "<", 1200], ["${file.meta.height}", "<", 1200]]
},
"enhanced": { "use": "small", "robot": "/image/enhance", "enhance": "auto", "sharpen": 3 },
"upscaled": { "use": "enhanced", "robot": "/image/upscale", "scale": 2 },
"optimized": { "use": "upscaled", "robot": "/image/optimize", "result": true }
}
}
Ajoutez un Robot de stockage, comme 🤖 /s3/store (English), après
optimized et enregistrez les Instructions dans un
Template, afin que votre formulaire de téléversement n’ait qu’à
y faire référence. Les originaux exclus par le filtre ne sont pas envoyés à
optimized ; stockez-les séparément si vous devez conserver chaque
fichier téléversé.
Limites et tarification
- /image/upscale est en bêta. Nous continuons à l’ajuster, alors dites-nous quels résultats il donne sur vos images.
- /image/upscale produit toujours du PNG. Si vous avez besoin d’un JPEG, terminez par un Step /image/resize, comme dans le premier exemple.
- /image/upscale est destiné aux petites images. Avec le modèle par défaut, les images d’entrée de plus de 2,1 mégapixels environ, après la réduction de taille effectuée par le Robot lui-même, dépassent la limite GPU du modèle. Redimensionnez ou filtrez d’abord les grandes photos, comme dans la recette ci-dessus.
- Le mode classique de /image/enhance est facturé comme nos autres Robots d’image. /image/upscale exécute un modèle sur GPU et consomme davantage de votre forfait par image qu’un redimensionnement. Consultez la page de tarification des Robots (English).
Lectures complémentaires
Si vous améliorez des photos de produits, associez ces Robots à la suppression de l’arrière-plan. Et si vous n’avez aucune photo de départ, la génération d’images par IA en crée une dans la même Assembly.
Prêt à essayer ? Inscrivez-vous gratuitement, consultez la documentation de 🤖 /image/upscale (English) et de 🤖 /image/enhance (English), et dites-nous ce que vous créez.
