Images
Comment envoyer des images à l’API ReWords.AI — URL, base64, data URL ou envoi multipart —, les limites de taille et de format, le traitement de l’EXIF et de la transparence, les fichiers de résultat et la conversion des boîtes en pixels.
Ce que vous pouvez envoyer
| Limite | |
|---|---|
| Formats | JPEG, PNG, WebP. Détecté à partir des octets du fichier, pas de son nom ni de son Content-Type. |
| Taille du fichier | Jusqu’à 20 Mo (20 × 1024 × 1024 octets ; la limite de 28 Mo du corps JSON se compte de la même façon). |
| Dimensions | Côté le plus long jusqu’à 8000 px ; côté le plus court d’au moins 32 px. |
| Couleur | RVB ou niveaux de gris. Les JPEG CMJN sont rejetés avec 400 invalid_image. |
| Animation | WebP animé : seule la première image est utilisée. |
Un fichier qui ne respecte pas ces règles est rejeté avec 400 invalid_image avant toute facturation.
Quatre façons d’envoyer une image
Utilisez-en exactement une par requête. N’en envoyer aucune, ou plus d’une, renvoie 400 invalid_request.
1. image_url
Un lien http(s) public. Nous le téléchargeons une fois, pendant le traitement de votre requête : un lien signé n’a donc besoin
de rester valide que jusqu’à notre réponse. Nous suivons jusqu’à 3 redirections et abandonnons après 15 secondes ; si le fichier
ne peut pas être téléchargé, la requête renvoie 400 invalid_image. Les liens qui demandent des cookies ou une connexion ne
fonctionnent pas, pas plus que les adresses d’un réseau privé comme localhost, 10.x.x.x ou 192.168.x.x.
{ "image_url": "https://example.com/banner.png" }2. image_base64
Les octets du fichier en base64 standard (A–Z a–z 0–9 + /, remplissage facultatif), ou la même chose sous forme de data URL
avec n’importe quel type de média, comme data:image/png;base64, ou le data:application/octet-stream;base64, que peut produire
le FileReader d’un navigateur — le format est détecté à partir des octets. Les espaces et sauts de ligne sont ignorés : les
lignes de 76 caractères de base64 sous Linux ou de base64.encodebytes en Python fonctionnent. Le base64 rend le fichier
environ un tiers plus gros, donc le corps JSON entier peut atteindre 28 Mo ; un corps plus gros renvoie 400 invalid_image.
Un texte qui n’est pas du base64 valide renvoie 400 invalid_request ; un base64 valide d’un fichier qui n’est pas une image
prise en charge renvoie 400 invalid_image.
{ "image_base64": "iVBORw0KGgoAAAANSUhEUgAA..." }
{ "image_base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }3. Envoi de fichier en multipart
Envoyez multipart/form-data avec le fichier dans le champ image. Pour POST /edits, mettez le tableau replacements dans un
champ de formulaire sous forme de chaîne JSON ; match, language et callback_url sont des champs de formulaire ordinaires.
curl https://api.rewords.ai/v1/edits \
-H "Authorization: Bearer $REWORDS_API_KEY" \
-F [email protected] \
-F 'replacements=[{"from":"SALE","to":"HOT DEAL"}]'import crypto from 'node:crypto';
import fs from 'node:fs';
const form = new FormData();
form.append('image', new Blob([await fs.promises.readFile('banner.png')]), 'banner.png');
form.append('replacements', JSON.stringify([{ from: 'SALE', to: 'HOT DEAL' }]));
const res = await fetch('https://api.rewords.ai/v1/edits', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.REWORDS_API_KEY}`, // let fetch set the multipart Content-Type
'Idempotency-Key': crypto.randomUUID(), // a new key per job; reuse it only to resend this same job
},
body: form,
});
const job = await res.json();
if (!res.ok) throw new Error(`${res.status} ${job.error.code}: ${job.error.message}`);
console.log(job.id, job.status);4. image_id
POST /ocr renvoie un image_id. Passez-le à POST /edits dans les 24 heures pour réutiliser l’image envoyée au lieu de la
renvoyer. Il ne fonctionne que pour le compte qui l’a créé ; un id inconnu, expiré ou d’un autre compte renvoie
400 invalid_request. Chaque appel OCR renvoie un nouvel image_id, même pour une image déjà envoyée — y compris quand vous
envoyez un image_id à POST /ocr, ce qui vous redonne 24 heures.
Comment nous lisons votre image
- L’orientation EXIF est appliquée d’abord. Une photo de téléphone enregistrée de côté est redressée, et chaque
width,heightet boîte se rapporte à l’image redressée — celle que vous voyez dans une visionneuse. - Les zones transparentes deviennent blanches. La transparence des PNG et WebP est aplatie sur un fond blanc, car les résultats sont en JPEG.
Résultats
results.A.url,results.B.urletresults.C.urlsont des fichiers JPEG à des liens publics : téléchargez-les avec un simpleGET, sans clé d’API. Traitez les liens comme privés — quiconque en a un peut l’ouvrir.- Envoyez un en-tête
User-Agentpour télécharger. Celui de Pythonurllibpar défaut est refusé avec403;requests,curl, les navigateurs etfetchde Node fonctionnent tels quels. - Les liens sont conservés au moins 7 jours. Téléchargez ce que vous voulez garder.
- Les fichiers de résultat sont enregistrés redressés, sans orientation EXIF : la taille dans le fichier est celle que vous voyez.
- B est votre image d’origine avec le nouveau texte intégré. A est le redessin de toute l’image par l’IA et garde les proportions de votre image. Lisez la taille en pixels dans le fichier plutôt que de supposer qu’elle correspond à votre envoi.
- C (4K) fait jusqu’à environ 8,3 mégapixels (l’équivalent de 3840 × 2160), côté le plus long d’au plus 3840 px, mêmes proportions. Il est omis pour les images plus larges ou plus hautes que 3:1.
Boîtes et pixels
Les boîtes sont [x, y, width, height], des nombres entiers sur une échelle de 0 à 1000 de l’image redressée, mesurés depuis le
coin supérieur gauche. width et height valent au moins 1 ; x + width et y + height ne dépassent jamais 1000.
pixel left = x / 1000 * imageWidth
pixel top = y / 1000 * imageHeight
pixel width = width / 1000 * imageWidth
pixel height = height / 1000 * imageHeightExemple : la boîte [120, 80, 300, 60] sur une image de 1080 × 1350 donne gauche 130, haut 108, 324 × 81 px (arrondi).
Pour envoyer votre propre boîte, convertissez dans l’autre sens et arrondissez à des nombres entiers.
File d’attente et limites
Concurrence de l’API ReWords.AI, la file de 30 tâches, limites de débit pour les envois et les lectures, interrogation, limites d’image, Retry-After et nouvelles tentatives idempotentes.
Webhooks
Recevez un webhook ReWords.AI signé quand une modification se termine, et vérifiez le HMAC de X-Rewords-Signature en Node.js ou en Python.