Formats d'images : URL et Base64
Envoyer des images à Grok
Les modèles Grok à partir de grok-4 intègrent des capacités de vision. Vous pouvez envoyer une ou plusieurs images dans vos requêtes API et le modèle les analysera pour répondre à vos questions. C’est ce qu’on appelle la compréhension d’images, ou vision multimodale.
Avant de plonger dans les cas d’usage, il est essentiel de maîtriser les deux formats d’envoi d’images supportés par l’API xAI.
URL directe
La méthode la plus simple consiste à fournir l’URL publique d’une image. Le modèle la téléchargera et l’analysera automatiquement.
Avec l’API Responses (endpoint principal) :
{
"model": "grok-4",
"input": [
{
"type": "input_image",
"image_url": "https://exemple.com/photo-produit.jpg"
},
{
"type": "input_text",
"text": "Décris cette image en détail."
}
]
}
Avec l’API Chat Completions (legacy, compatible OpenAI) :
{
"model": "grok-4",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://exemple.com/photo-produit.jpg"
}
},
{
"type": "text",
"text": "Décris cette image en détail."
}
]
}
]
}
L’URL doit pointer vers un fichier image accessible publiquement. Si l’image est derrière une authentification ou un CDN protégé, utilisez plutôt le format Base64.
Base64 encodé (Data URI)
Le second format consiste à encoder l’image directement dans la requête sous forme de chaîne Base64 précédée d’un préfixe MIME. C’est la méthode idéale quand vous travaillez avec des images locales, des captures d’écran ou des fichiers générés dynamiquement.
{
"type": "input_image",
"image_url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."
}
Le préfixe data:image/jpeg;base64, indique au modèle le type MIME de l’image. Adaptez-le selon le format :
data:image/jpeg;base64,pour les fichiers JPG/JPEGdata:image/png;base64,pour les fichiers PNG
Encoder une image en Python
import base64
with open("photo.jpg", "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
image_url = f"data:image/jpeg;base64,{image_data}"
Encoder en JavaScript/Node.js
import { readFileSync } from 'fs';
const imageData = readFileSync('photo.jpg').toString('base64');
const imageUrl = `data:image/jpeg;base64,${imageData}`;
Différences clés entre URL et Base64
| Critère | URL | Base64 |
|---|---|---|
| Taille de la requête | Légère (juste l'URL) | Lourde (+33% vs fichier original) |
| Accessibilité | Image publique requise | Fonctionne avec tout fichier local |
| Latence | Téléchargement par le serveur | Données directement dans la requête |
| Cas d'usage typique | Images web, CDN, stockage cloud | Fichiers locaux, captures, uploads |
Mixer texte et images
Le format d’entrée de l’API Responses accepte un tableau mixte d’objets input_image et input_text dans n’importe quel ordre. Vous pouvez alterner librement entre texte et images pour construire des requêtes complexes.
from xai_sdk import Client
client = Client(api_key="votre-clé")
response = client.responses.create(
model="grok-4",
input=[
{"type": "input_text", "text": "Compare ces deux photos :"},
{"type": "input_image", "image_url": "https://exemple.com/photo1.jpg"},
{"type": "input_image", "image_url": "https://exemple.com/photo2.jpg"},
{"type": "input_text", "text": "Quelles sont les différences principales ?"}
]
)
Points clés à retenir
- Deux formats d’images sont supportés : URL directe et Base64 (Data URI)
- Les formats acceptés sont JPG, JPEG et PNG uniquement
- Chaque image ne doit pas dépasser 20 MiB
- Le nombre d’images par requête est illimité
- L’API Responses utilise
input_imagetandis que Chat Completions utiliseimage_url - Privilégiez l’URL pour les images publiques et le Base64 pour les fichiers locaux