Aller au contenu principal

Solution API d’édition

Modifiez l’image que vous avez, pas celle que le modèle invente.

Les points d’accès d’édition prennent au moins deux entrées : l’image et l’instruction. C’est sur l’image — URL publique, téléversement validé ou data URI intégrée — que la plupart des intégrations bloquent.

L’enjeu

Le plus dur, c’est de faire entrer la référence

L’invite est la moitié facile. L’autre est un fichier sur le téléphone de vos utilisateurs, qui doit atteindre le modèle sans exposer un bucket privé et respecter des limites vérifiées avant même l’existence de la tâche.

01

Trois chemins d’entrée, trois façons d’échouer

Un champ image déclaré accepte une URL HTTPS publique, une URI de fichier spicy:// validée, ou une data URI intégrée. En intégré : 1 Mio décodé et 8 388 608 pixels par image, dans un corps de 2 Mio. Au-delà, il faut un ticket de téléversement.

02

Les URL HTTPS signées fonctionnent si le fichier est accessible

Un lien signé peut pointer vers un bucket privé si nos serveurs téléchargent le fichier sans cookies ni connexion séparée. Gardez-le valide pendant le traitement. Les IP privées, le loopback et les identifiants user:password dans l’URL sont refusés.

03

Éditer n’est pas générer

Le nom d’appel public se termine par /edit, le schéma exige généralement image_url ou image_urls, et certains points d’accès ajoutent mask_url ou strength. Une valeur model de type text-to-image dans un flux d’édition échoue à la validation au lieu de se dégrader.

La méthode

Téléverser une fois, valider, puis référencer l’URI de fichier

Pour les fichiers utilisateurs, demandez un ticket, envoyez en PUT exactement le nombre d’octets déclaré avec tous les en-têtes renvoyés, validez, puis passez l’URI spicy:// dans le champ image du modèle. La référence appartient alors à votre compte, est vérifiée une fois et se réutilise sans nouveau téléversement.

Ticket, PUT, validation, création. Un média déjà public saute les trois premières étapes.

Ticket → PUT → commit → create

POST /api/v1/common/upload-url
{ "contentType": "image/png", "bytes": 482113 }
→ { "fileId": "fil_01k3…", "uploadUrl": "https://…", "method": "PUT", "headers": { … } }

PUT <uploadUrl>            # exactly 482113 bytes, every returned header replayed
POST /api/v1/files/fil_01k3…/commit
→ { "status": "ready", "uri": "spicy://f/fil_01k3…", "sha256": "…" }

POST /api/v1/jobs/createTask

{
  "model": "<publisher>/<model>/edit",
  "input": {
    "prompt": "Replace the background with an overcast beach at dusk",
    "image_urls": ["spicy://f/fil_01k3m8x9q2z4v7n5p6r8s0t1w3"]
  }
}

Contrat

Les points à figer d’emblée

API d’édition d’images : partir d’une référence — Les points à figer d’emblée
Champ ou en-têteValeur ou limite
POST /api/v1/common/upload-urlJPEG · PNG · WebP · GIF ≤ 10 MiB
POST /api/v1/files/{fileId}/commitreturns spicy://f/fil_…
inline data URI≤ 1 MiB decoded · ≤ 8192 px per side
request body≤ 2 MiB · ≤ 16 images

Balayez horizontalement pour voir toutes les colonnes.

Intégration

Du premier appel à la production

  1. 01POST /api/v1/common/upload-url avec contentType et le nombre exact d’octets ; images jusqu’à 10 Mio en JPEG, PNG, WebP ou GIF.
  2. 02Envoyez les octets en PUT sur l’URL signée en rejouant tous les en-têtes du ticket, puis POST /api/v1/files/{fileId}/commit.
  3. 03Appelez createTask avec la valeur model d’édition et l’URI spicy:// dans image_url ou image_urls.
  4. 04Lisez output.assets depuis le rappel ou recordInfo et stockez vous-même le fichier modifié.

Pertinence

Quand cette voie convient

À choisir si

  • Votre produit part des photos des utilisateurs : retouche, remplacement d’arrière-plan, changement de style, suppression d’objets.
  • La même référence sert à plusieurs tâches et ne doit pas être renvoyée à chaque fois.

À éviter si

  • Vous n’avez pas d’image source. Le text-to-image est moins cher et plus simple.
  • Vous avez besoin de montage vidéo image par image. Ces points d’accès renvoient des images fixes.

Vérifications

Ce que vous pouvez contrôler vous-même

Les téléversements sont liés au compte et vérifiés à la validation

La validation compare le nombre d’octets et le type de média au ticket, contrôle la signature de l’image et calcule un SHA-256. Ce n’est qu’ensuite que le fichier devient référençable.

Les images intégrées ne reviennent pas dans l’enregistrement

Les data URI sont stockées comme fichiers liés au compte. L’entrée normalisée renvoyée par recordInfo contient des URI de fichiers, jamais les octets Base64 d’origine.

Sources et résultats ont des horloges distinctes

Le matériel téléversé est conservé un jour, les résultats générés 14 jours. Les deux durées sont publiées, pas négociées par compte.

Avant la mise en production

Comportements de la plateforme à confirmer

  • Décidez qui confirme les droits sur l’image source ; la plateforme ne l’examine pas pour vous.
  • Validez type et taille côté client avant de demander un ticket : un 413 coûte moins cher évité que traité.
  • Conservez les URI spicy:// dans vos enregistrements si la même source sera rééditée.
  • Traitez invalid_asset comme une erreur adressée à l’utilisateur, pas comme une panne.

Questions fréquentes

Ce qu’on nous demande sur cette page

Les deux. Une URL HTTPS de média publiquement accessible entre directement dans le champ image. Les tickets servent aux fichiers non publics et à tout ce qui dépasse les limites intégrées.