Sources d'images : URL et Base64
Fournir des images à l’endpoint d’édition
L’endpoint d’édition accepte les images sources dans deux formats : URL publique et Data URI Base64. Chaque format a ses avantages et ses cas d’usage spécifiques. Maîtriser les deux vous permet de construire des pipelines d’édition flexibles.
Format URL
Le format le plus simple consiste à fournir l’URL publiquement accessible d’une image :
payload = {
"model": "grok-imagine-image",
"prompt": "Ajoutez un cadre doré autour de cette image",
"image": {
"url": "https://exemple.com/ma-photo.jpg"
}
}
Contraintes des URL
- L’URL doit être publiquement accessible (pas de lien protégé par authentification)
- Les formats supportés sont JPEG, PNG et WebP
- L’image doit être accessible rapidement (évitez les serveurs lents)
Utiliser les URL de sortie de l’API
Les images générées ou éditées par l’API retournent des URL temporaires que vous pouvez réutiliser comme sources pour une nouvelle édition :
import requests
import os
headers = {
"Authorization": f"Bearer {os.getenv('XAI_API_KEY')}",
"Content-Type": "application/json"
}
# Générer une image
gen_response = requests.post(
"https://api.x.ai/v1/images/generations",
headers=headers,
json={
"model": "grok-imagine-image",
"prompt": "Un château médiéval sur une colline"
}
).json()
generated_url = gen_response["data"][0]["url"]
# Éditer l'image générée
edit_response = requests.post(
"https://api.x.ai/v1/images/edits",
headers=headers,
json={
"model": "grok-imagine-image",
"prompt": "Ajoutez un dragon survolant le château",
"image": {"url": generated_url}
}
).json()
Format Base64 Data URI
Pour les images stockées localement ou générées dynamiquement, utilisez le format Data URI Base64 :
import base64
# Lire une image locale
with open("photo_locale.jpg", "rb") as f:
image_bytes = f.read()
b64_string = base64.b64encode(image_bytes).decode("utf-8")
data_uri = f"data:image/jpeg;base64,{b64_string}"
payload = {
"model": "grok-imagine-image",
"prompt": "Transformez cette photo en illustration vectorielle",
"image": {
"url": data_uri
}
}
Quand utiliser Base64 ?
- Vous travaillez avec des images locales qui ne sont pas hébergées en ligne
- Vous traitez des images générées en mémoire par votre application
- Vous souhaitez éviter d’exposer vos images sur un serveur public
- Vous construisez un pipeline automatisé sans hébergement intermédiaire
Attention à la taille
Les images en Base64 augmentent la taille du payload de ~33%. Pour des images volumineuses, préférez les URL quand c’est possible.
Fonction utilitaire
Voici une fonction qui gère les deux formats automatiquement :
import base64
import os
def prepare_image_source(source):
"""Prépare une source d'image pour l'API (URL ou fichier local)."""
if source.startswith("http://") or source.startswith("https://"):
return {"url": source}
if os.path.isfile(source):
ext = source.rsplit(".", 1)[-1].lower()
mime_map = {"jpg": "jpeg", "jpeg": "jpeg", "png": "png", "webp": "webp"}
mime_type = mime_map.get(ext, "jpeg")
with open(source, "rb") as f:
b64 = base64.b64encode(f.read()).decode("utf-8")
return {"url": f"data:image/{mime_type};base64,{b64}"}
raise ValueError(f"Source invalide : {source}")
Cette fonction détecte automatiquement si la source est une URL ou un chemin de fichier local et formate l’objet en conséquence.
Mise en pratique
Testez les deux formats avec la même image et le même prompt pour vérifier que les résultats sont identiques :
# Via URL
payload_url = {
"model": "grok-imagine-image",
"prompt": "Ajoutez de la neige sur le paysage",
"image": {"url": "https://exemple.com/paysage.jpg"}
}
# Via Base64
payload_b64 = {
"model": "grok-imagine-image",
"prompt": "Ajoutez de la neige sur le paysage",
"image": prepare_image_source("paysage.jpg")
}
Points clés à retenir
- Deux formats d’entrée : URL publique et Data URI Base64
- Les URL temporaires retournées par l’API peuvent servir de sources d’édition
- Le Base64 augmente la taille du payload de ~33%
- Créez une fonction utilitaire pour gérer les deux formats automatiquement
- L’URL doit être publiquement accessible pour fonctionner