Comment illustrer chaque article publié — avec de vraies photos, à grande échelle

Pourquoi les équipes éditoriales reviennent à la photographie réelle, et le pipeline exact — prompt inclus — qui transforme un brouillon terminé en image de couverture créditée en environ 150 millisecondes.

Partager
Une personne à un bureau lumineux travaillant sur un ordinateur portable affichant une grille de photos, un stylet à la main.
Photo via Pexels

Chaque article que vous publiez a besoin d'une image. Pas un simple plus — l'image principale est ce que l'aperçu social affiche, ce que le lecteur voit avant la première phrase, et ce qui lui indique en une demi-seconde si cette page a été réalisée par quelqu'un qui s'est appliqué. Multipliez cela par quatre images par article et quarante articles par trimestre, et « trouver une photo » cesse d'être une tâche pour devenir un problème de production.

Voici comment nous le résolvons : quoi utiliser à la place des images générées et pourquoi, et les trois façons de intégrer Pexafy au flux de travail — manuellement, par API, ou via un agent IA — y compris le prompt qui transforme un brouillon terminé en une phrase de recherche qui trouve réellement quelque chose.

Pourquoi les vraies photos surpassent toujours les images générées

Générer une illustration est facile, et c'est précisément le problème. Quatre choses ont changé entre « les images IA sont un raccourci » et aujourd'hui :

1 · À grande échelle, chercher est plus rapide que générer

Une génération, c'est un prompt, une attente, une inspection, et — soyons honnêtes — deux ou trois tentatives supplémentaires avant d'obtenir un résultat utilisable. Une recherche sémantique est une simple requête qui renvoie seize candidats en environ 150 millisecondes, chacun déjà sous licence, déjà crédité, déjà dimensionné, avec ses dimensions dans la réponse. Pour une image, la différence tient à une pause café. Pour quatre cents images par trimestre, c'est la différence entre un flux de travail et un travail à temps plein.

2 · Une photographie est exacte ; une génération est plausible

Dès que votre article porte sur quelque chose de réel — une profession, un équipement, une ville, un geste, un matériau — une image générée capture l'ambiance mais se trompe sur les détails. Les mains à six doigts sont la version comique ; la version coûteuse, c'est un instrument chirurgical qui n'existe pas, un cockpit avec des commandes inventées, ou une « rue de Lisbonne » que personne de Lisbonne ne reconnaît. Les lecteurs qui connaissent votre sujet le remarquent, et ils remarquent l'image en premier.

3 · Tout le monde a le même rendu visuel

Les modèles de diffusion convergent vers un style de maison, et un mur d'illustrations aux dégradés doux, sur-éclairées, suspicieusement symétriques se lit désormais comme du remplissage. Cette perception est le vrai coût : non pas une pénalité, un signal. Une vraie photographie — du grain, une chaise maladroite, quelqu'un au milieu d'une phrase — se lit comme un reportage.

4 · Et désormais elles arrivent avec une étiquette

Celui-ci est plutôt un contexte qu'un argument, mais c'est le sens de l'évolution. Depuis le 2 août 2026, l'article 50 du règlement européen sur l'IA (AI Act) exige des fournisseurs de systèmes génératifs qu'ils marquent les sorties synthétiques dans un format lisible par machine, et des déployeurs qu'ils divulguent les deepfakes.1 Côté détection, Google lit les Content Credentials C2PA et son propre filigrane SynthID pour répondre à la question « est-ce généré par l'IA ? » dans Search, Images et Lens.2 Rien de tout cela n'est une règle sur les images qu'un blog peut publier, et rien de tout cela ne vous coûte de positionnement. Ce qui a changé, c'est en aval : la provenance de l'image en tête de votre article est désormais quelque chose qu'un lecteur peut vérifier en deux clics, sans vous le demander. Une photographie sous licence n'a rien à déclarer.

Quand les images générées sont le bon choix. Les diagrammes conceptuels et les schémas. Une scène qui ne peut pas être photographiée (un produit qui n'existe pas encore, un mécanisme abstrait, une ville future). Un style d'illustration maison que vous possédez et souhaitez répéter sur chaque article. Et tout ce où l'image est délibérément comprise comme une illustration plutôt que comme une preuve. Utilisez les deux — cessez simplement d'utiliser la génération par défaut pour « j'ai besoin d'une photo de personnes en réunion ».

Trois façons d'illustrer, selon votre volume

Même moteur, même catalogue — 9M+ photos libres de droits provenant de 9 bibliothèques — et trois points d'entrée. Choisissez selon le nombre d'articles que vous publiez, pas selon votre niveau technique.

Point d'entrée Idéal pourqui, et combien Par article Ce dont vous avez besoin
Interface de recherche Éditeurs, un article à la fois — jusqu'à ~20/mois ~30 secondes Un navigateur. Aucun compte nécessaire pour chercher.
API REST Un CMS, une build de site statique, un lot de brouillons ~1 requête, ~150 ms Une clé API. 5 000 req/mois gratuites, 20/min.
Serveur MCP L'agent IA qui rédige ou modifie le brouillon Dans la même conversation Une URL de connecteur, OAuth ou une clé.

Les trois partagent un catalogue et un classement uniques, si bien qu'une photo trouvée par un éditeur dans l'interface est la même photo, avec le même identifiant, que celle renvoyée par l'API à votre script de build.

Un article, 30 secondes : l'interface de recherche

Décrivez la scène comme vous la décririez à un photographe, en phrase complète, dans votre propre langue. Pas team meeting — « une petite équipe debout en demi-cercle pour une courte réunion matinale de type stand-up dans un bureau lumineux en open space ». Chaque détail concret supplémentaire resserre l'ensemble de résultats au lieu de le vider, car le moteur classe par sens plutôt qu'en faisant correspondre vos mots aux étiquettes de quelqu'un d'autre.

pexafy.com — une phrase, des résultats provenant de plusieurs bibliothèques dans une seule grille
La page de résultats de recherche Pexafy affichant des photos d'une équipe debout lors d'une réunion matinale, trouvées à partir d'une requête en phrase complète.
Le petit point coloré sur chaque carte est le score de pertinence — vert signifie que le moteur est confiant. Les résultats sont fusionnés et reclassés à travers toutes les bibliothèques indexées, et non assemblés bibliothèque par bibliothèque. Lancer cette recherche exacte →

Puis affinez avec les filtres qui comptent pour la mise en page d'un article — et uniquement ceux-ci :

Filtres — couleur, orientation, source, licence
Le panneau de filtres Pexafy, affichant des nuanciers de couleurs, des options d'orientation et la sélection de la source.
Orientation → paysage pour une image principale (le format portrait s'affiche mal dans les aperçus sociaux). Couleur pour garder une série d'articles visuellement cohérente avec votre marque — choisissez la même nuance pour chaque article d'une campagne et l'index du blog paraît soudain conçu avec soin.
  1. Écrivez la phrase, pas le mot-clé. Sujet + action + lieu + lumière. Jusqu'à 500 caractères, dans plus de 100 langues.
  2. Filtrez sur paysage pour l'image principale, puis relancez sans le filtre pour les images à l'intérieur de l'article, où le portrait se lit souvent mieux.
  3. Ouvrez la photo pour obtenir la ligne d'attribution toute prête, la page source d'origine et le fichier en pleine résolution.
  4. Utilisez « photos similaires » sur celle que vous avez choisie pour illustrer la section suivante dans le même registre visuel — même lumière, même traitement, scène différente.

Le prompt : transformer un brouillon en phrase de recherche

C'est l'étape que tout le monde rate quand on automatise. On introduit le titre de l'article directement dans le champ de recherche, et le titre est précisément la mauvaise entrée : il est abstrait (« Le coût caché du changement de contexte ») et aucune photographie au monde ne le représente. Ce que vous voulez du modèle n'est pas un résumé — c'est un brief de prise de vue.

Le prompt de directeur photo — à copier tel quel
# system prompt
You are a photo editor. Read the article and write ONE search sentence
for a stock-photo engine that ranks by meaning, not by keywords.

Rules:
1. Describe a scene a camera could have taken: someone doing
   something, somewhere. Never name the topic itself ("fintech",
   "productivity", "SEO") — name what would be in the frame.
2. 12 to 25 words. Longer beats shorter: every concrete detail
   (light, place, gesture, time of day) sharpens the match.
3. No text, logos, brands, charts, screenshots or famous people.
   Free photo libraries have almost none of those.
4. No invisible metaphors ("growth", "synergy", "transformation").
5. Match the mood of the article: calm, tense, tired, celebratory.
6. Write the sentence in English even if the article is not.

Return JSON only:
{ "query": "…", "orientation": "landscape", "alt": "…" }

La règle 1 fait l'essentiel du travail. Voici cette même règle appliquée à trois brouillons réels — la colonne du milieu est ce qu'une personne tape quand elle est pressée, la colonne de droite est ce que le prompt renvoie :

L'article parle de… La requête faite à la hâte Le brief de prise de vue
Pourquoi votre stand-up quotidien ne fonctionne pas team meeting « a small team standing in a semi circle for a short morning stand-up meeting in a bright open plan office »
Réduire l'intégration de 6 semaines à 9 jours onboarding « a new employee on their first day at a desk, listening while a colleague leans in and points at their screen »
Le coût caché du changement de contexte productivity « a tired developer rubbing their eyes in front of two monitors late in the evening, the office empty behind them »

team meeting renvoie le stock générique de salle de conférence que tout le monde sur votre sujet utilise déjà. La phrase de la troisième colonne renvoie ceci, en 155 millisecondes :

GET /search/photos — « a small team standing in a semi circle for a short morning stand-up meeting… » · 16 résultats · 155 ms
Trois bibliothèques différentes dans les six premiers résultats, classées ensemble plutôt qu'une bibliothèque après l'autre. Chacune montre des personnes debout, en groupe, dans un vrai bureau — ce qui est ce que la phrase demandait et ce que team meeting ne garantit jamais.

Le pipeline : brouillon en entrée, image principale créditée en sortie

Quarante lignes, deux appels : un au modèle pour le brief, un à Pexafy pour la photo. Placez-le dans le hook de sauvegarde de votre CMS, votre build de site statique, ou un script qui parcourt un dossier de fichiers Markdown.

illustrate.py — article en entrée, image + alt + crédit en sortie
import json, os, requests
from anthropic import Anthropic

SEARCH = "https://api.pexafy.com/api/v1/search/photos"
llm = Anthropic()  # ANTHROPIC_API_KEY provenant de l'environnement

def camera_brief(article: str) -> dict:
    # PHOTO_EDITOR = le system prompt ci-dessus
    msg = llm.messages.create(
        model="claude-sonnet-5",
        max_tokens=300,
        system=PHOTO_EDITOR,
        messages=[{ "role": "user", "content": article[:12000] }],
    )
    return json.loads(msg.content[0].text)

def illustrate(article: str) -> dict | None:
    brief = camera_brief(article)
    r = requests.get(
        SEARCH,
        headers={"X-Api-Key": os.environ["PEXAFY_API_KEY"]},
        params={
            "q": brief["query"],           # la phrase complète
            "orientation": brief["orientation"],
            "per_page": 8,
            "score_threshold": 0.55,      # écarte les correspondances faibles
        },
        timeout=10,
    )
    hits = r.json()["data"]
    if not hits:                        # brief trop restreint → élargir, réessayer
        return None

    top = hits[0]
    return {
        "src":    top["urls"]["regular"],        # 1080px — taille image principale
        "alt":    brief["alt"] or top["alt_description"],
        "credit": top["attribution"]["html"],   # prêt à afficher
        "width":  top["width"],
        "height": top["height"],
        "id":     top["photo_id"],           # à stocker : évite les répétitions
    }

Trois détails qui transforment une démo en quelque chose que vous pouvez laisser tourner :

  • score_threshold — ne rien renvoyer vaut mieux que renvoyer une mauvaise photo. Si le brief était trop spécifique, élargissez-le (supprimez la dernière clause) et réessayez une fois.
  • Stockez le photo_id — une ligne dans votre base de données, et jamais deux articles de votre site ne partagent d'image principale. C'est l'échec que tout le monde rencontre au trentième article.
  • Une requête par emplacement d'image — une image principale plus trois images de section, c'est quatre requêtes par article, ou une seule si vous prenez quatre résultats différents de la même recherche.

Pas de Python ? Toute la partie recherche tient en une ligne, et chaque résultat porte les mêmes champs quelle que soit la bibliothèque d'origine :

Le même appel, en shell
curl -sG "https://api.pexafy.com/api/v1/search/photos" \
  -H "X-Api-Key: $PEXAFY_API_KEY" \
  --data-urlencode "q=a tired developer rubbing their eyes at two monitors" \
  --data-urlencode "orientation=landscape" \
  --data-urlencode "per_page=6"

# → { "success": true, "data": [ … ], "meta": { "took_ms": 147 } }

La forme de la réponse — urls, width, photographer_full_name, source, license_type, relevance_score, attribution — est identique pour une photo Pexels, une photo Pixabay et une photo Unsplash. Cette normalisation est la partie que vous devriez sinon écrire et maintenir vous-même ; nous l'avons démontée champ par champ dans le comparatif des API de photos libres de droits.

Deuxième section, deuxième brief, deuxième recherche — l'idée étant qu'un seul article produit plusieurs scènes distinctes au lieu d'une seule photo étirée quatre fois :

Section 2 — « a woman working alone on a laptop at her kitchen table early in the morning with a cup of coffee » · 129 ms
Même article, section différente, scène différente — et l'ambiance se prolonge parce que le brief l'a transmise. Lancez celle-ci aussi →

Laisser l'agent choisir l'image : MCP

Si un modèle rédige ou modifie déjà le brouillon, le pipeline le plus propre, c'est l'absence de pipeline : donnez à l'agent l'outil de recherche et laissez-le illustrer ce qu'il vient d'écrire, dans la même conversation, tant qu'il a encore le contexte en tête.

Pexafy exploite un serveur Model Context Protocol hébergé à l'adresse mcp.pexafy.com/mcp. Trois outils : search_photos (une phrase), search_photos_by_image (une image de référence, éventuellement accompagnée d'une phrase — « comme ceci, mais au coucher du soleil »), et get_similar_photos (davantage de photos comme celle déjà choisie, ce qui permet de garder une série cohérente).

Claude.ai & Claude Desktop — OAuth, aucune clé à gérer
Settings → Connectors → Add custom connector
Name: Pexafy
URL:  https://mcp.pexafy.com/mcp
# puis connectez-vous avec votre compte Pexafy quand la fenêtre s'ouvre
Claude Code — une commande
claude mcp add --transport http pexafy https://mcp.pexafy.com/mcp \
  --header "Authorization: Bearer $PEXAFY_API_KEY"

# ou versionnez-le dans le dépôt, pour que toute l'équipe en profite — .mcp.json
{
  "mcpServers": {
    "pexafy": {
      "type": "http",
      "url": "https://mcp.pexafy.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

À partir de là, illustrer un article se résume à une phrase, pas à une tâche. L'agent rédige son propre brief de prise de vue — il vient de lire le brouillon, il est donc mieux placé que quiconque pour décrire la scène :

À quoi cela ressemble en pratique
You  Here's the draft of this week's post. Find a landscape hero
     and one photo for section 2, and give me the credit lines.

Claude  → search_photos(
       q="a small team standing in a semi circle for a short morning
          stand-up meeting in a bright open plan office",
       orientation="landscape")
     ← 16 photos · 155 ms

     Hero    → Photo by Thirdman on Pexels · 6453×4302 · score 0.80
     Section → Photo by Marcus Aurelius on Pexels · 6000×4000
     Both licence-free, attribution lines below, ready to paste.

Unsplash, Pexels, Pixabay et Openverse n'ont pas de serveur MCP officiel — ce qui existe, ce sont des wrappers communautaires que vous hébergez et pour lesquels vous devez gérer vous-même les clés. Si votre flux de travail éditorial passe déjà par un agent, cette différence est l'intégration.

Texte alternatif, licence et vitesse de la page

L'image est choisie. Quatre choses décident si elle aide la page ou la pénalise discrètement :

  1. Rédigez le texte alternatif pour une personne, pas pour un robot d'indexation. Chaque résultat fournit un alt_description — utilisez-le comme brouillon, puis réécrivez-le dans le contexte de votre paragraphe. « Quatre collègues debout lors d'une réunion matinale » vaut mieux qu'une salade de mots-clés, et c'est le texte qu'un lecteur d'écran lira réellement. Restez sous ~125 caractères ; ne le laissez vide (alt="") que si l'image est purement décorative.
  2. Affichez le crédit même si rien ne vous y oblige. L'attribution n'est pas exigée par les conditions d'utilisation de l'API Pexafy, et chaque résultat fournit une chaîne attribution.html prête à l'emploi — mais la licence attachée par la bibliothèque d'origine régit toujours votre utilisation de cette photo, et une ligne de crédit visible indique au lecteur (et à un moteur de réponse) qu'il s'agit d'une véritable photographie avec un véritable auteur.
  3. Servez la bonne taille. urls.regular (1080 px) convient pour une image principale ; urls.full est un fichier de 2400 px dont aucun article n'a besoin. Renseignez toujours width/height à partir de la réponse pour que le navigateur réserve l'espace — cette simple paire d'attributs fait la différence entre un bon et un mauvais score de décalage de mise en page. Utilisez fetchpriority="high" sur l'image principale, loading="lazy" sur tout ce qui est sous la ligne de flottaison.
  4. Alimentez vos métadonnées avec l'image principale. La même URL devrait être votre og:image, votre twitter:image et la propriété image de vos données structurées Article. Une photo, trois emplacements, aucun travail supplémentaire — et un aperçu social qui ne retombe plus sur votre logo.

Ce que 100 articles par mois coûtent réellement

Prenons l'hypothèse d'une image principale plus trois images dans l'article, soit quatre requêtes de recherche par article — la version délibérément la plus coûteuse, où vous lancez une requête distincte par emplacement au lieu de réutiliser les résultats d'une seule :

Volume Requêtes de recherche / mois Forfait Coût de recherche
20 articles 80 Gratuit — 5 000 req/mois 0 $
100 articles 400 Gratuit — 5 000 req/mois 0 $
1 000 articlesune agence, ou tout un portefeuille de clients 4 000 Gratuit — encore sous la limite de 5 000 req/mois 0 $

Oui — le quota mensuel n'est pas un problème aux volumes du content marketing, et nous préférons le dire plutôt que d'inventer une raison de vous faire payer. La limite que vous rencontrerez réellement est celle par minute. Le forfait gratuit autorise 20 requêtes API par minute ; un script de build qui réillustre 100 articles en une seule passe déclenche 400 requêtes aussi vite que votre boucle le permet, donc il passe soit vingt minutes à être limité, soit commence à recevoir des 429. Deux solutions : espacer les appels (un sleep dans la boucle, et une tâche nocturne ne s'en rend jamais compte), ou passer à un forfait dont la limite de débit correspond à votre build — Starter est à 30 requêtes/minute, Pro à 60. Choisissez selon la rafale, pas selon le volume.

Le seul autre poste de coût est un court appel de modèle par article pour produire le brief — quelques centaines de jetons en entrée, trente en sortie, ce qui sera l'élément le moins cher de tout pipeline de contenu que vous possédez. Comparez cela avec la génération de quatre images par article, à quatre cents images par mois, plus les tentatives qui n'ont pas été retenues.

Et la partie qui n'apparaît dans aucun tableau de coûts : l'éditeur cesse d'ouvrir cinq onglets. C'est ça, la véritable économie.

Références et notes de bas de page

1 AI Act de l'UE, article 50 — obligations de transparence pour les fournisseurs et déployeurs de certains systèmes d'IA, applicables à partir du 2 août 2026. Les fournisseurs de systèmes générant de l'audio, des images, des vidéos ou du texte synthétiques doivent marquer les sorties dans un format lisible par machine et les rendre détectables comme générées artificiellement ; les déployeurs doivent divulguer les deepfakes et, dans des cas définis, les textes générés par IA publiés pour informer le public. L'Omnibus numérique (règlement (UE) 2026/1744, en vigueur depuis le 27 juillet 2026) laisse l'article 50 lui-même inchangé, mais accorde aux systèmes déjà présents sur le marché avant le 2 août 2026 jusqu'au 2 décembre 2026 pour se conformer à l'exigence de marquage lisible par machine de l'article 50(2). Tout ceci lie les fournisseurs et déployeurs d'IA — ce n'est pas une règle sur les images qu'un blog peut publier.

2 Google lit les Content Credentials C2PA et son propre filigrane SynthID pour afficher la provenance dans À propos de cette image sur Search, Images et Lens. Il s'agit de provenance des médias, pas d'une pénalité de classement sur le contenu généré par IA.

Foire aux questions

Faut-il utiliser des images générées par IA ou de vraies photos pour les articles de blog ?
Utilisez de vraies photos dès que l'article traite de quelque chose qui existe — un métier, un lieu, un objet, un geste — car une photographie restitue les détails avec exactitude et porte une source vérifiable, une date et un photographe. Depuis le 2 août 2026, l'article 50 de l'AI Act de l'UE impose aux systèmes génératifs de marquer leurs résultats dans un format lisible par machine, et des plateformes comme Google affichent désormais cette provenance aux lecteurs. Les images générées restent le bon choix pour les diagrammes, les scènes impossibles à photographier, et un style d'illustration maison dont vous détenez les droits.
Comment trouver automatiquement une image qui correspond à mon article ?
Deux appels suffisent. Demandez d'abord à un modèle de langage de transformer le brouillon en un brief caméra — une phrase de 12 à 25 mots décrivant une scène qu'un appareil photo aurait pu capturer, jamais le sujet lui-même. Envoyez ensuite cette phrase à une API de recherche d'images sémantique, qui classe les photos par sens plutôt que par correspondance de tags. Avec Pexafy, il s'agit de GET /api/v1/search/photos?q=…, environ 150 ms, et chaque résultat revient avec sa taille, sa licence et une chaîne d'attribution prête à l'emploi.
Quel est le meilleur prompt pour transformer un article en requête de recherche d'image ?
Demandez une scène photographiable, pas un résumé : « écris UNE phrase de 12 à 25 mots décrivant quelqu'un en train de faire quelque chose quelque part ; ne nomme jamais le sujet ; pas de texte, de logos, de graphiques ni de personnes célèbres ; pas de métaphores invisibles ; adapte l'ambiance à celle de l'article ; renvoie du JSON ». Le prompt complet figure dans cet article, prêt à copier-coller. La règle la plus importante est l'interdiction des abstractions : « productivité » ne trouve rien, « un développeur fatigué se frottant les yeux devant deux écrans en fin de soirée » trouve la photo.
Dois-je créditer les photos que j'utilise dans mes articles de blog ?
L'attribution n'est pas exigée par les conditions d'utilisation de l'API Pexafy, et chaque résultat est livré avec une ligne de crédit prête à l'emploi en HTML et en texte brut. La licence attachée à chaque photo par sa bibliothèque d'origine continue de régir votre utilisation de cette photo, et afficher le crédit indique aux lecteurs — et aux moteurs de réponse — qu'il s'agit d'une vraie photographie avec un véritable auteur.
Claude ou un autre agent IA peut-il trouver les photos de mon article ?
Oui, via le serveur MCP (Model Context Protocol) hébergé de Pexafy à l'adresse mcp.pexafy.com/mcp. Ajoutez-le comme connecteur personnalisé dans Claude.ai ou Claude Desktop et connectez-vous via OAuth, ou ajoutez-le à Claude Code avec une seule commande claude mcp add et une clé API. L'agent recherche alors par phrase, par image de référence ou pour des photos similaires, tout en gardant votre brouillon dans son contexte.
Comment éviter que tous les articles de mon blog utilisent la même photo ?
Stockez le photo_id de chaque image publiée et excluez-le lors de l'exécution suivante — une simple colonne dans votre CMS. C'est le mode de défaillance que rencontre tout pipeline automatisé aux alentours du trentième article, et il reste invisible jusqu'à ce que quelqu'un fasse défiler l'index de votre blog. Rédiger un nouveau brief caméra par section, plutôt que de réutiliser le titre de l'article, fait le reste.

Ne cherchez plus de mots-clés. Décrivez ce que vous avez en tête.

Recherchez parmi 9M+ images libres de droits par le sens — dans n'importe quelle langue, en moins de 100 ms.