Hoe je elk artikel dat je publiceert illustreert — met echte foto's, op schaal

Waarom redactieteams teruggrijpen naar echte fotografie, en de exacte pipeline — inclusief prompt — die een afgeronde tekst in ongeveer 150 milliseconden omzet in een hero-afbeelding met bronvermelding.

Iemand aan een lichte bureau werkt op een laptop met daarop een raster van foto's, een stylus in de hand.
Foto via Pexels

Elk artikel dat u publiceert heeft een afbeelding nodig. Geen leuke bijkomstigheid — de hero-afbeelding is wat de social preview toont, wat de lezer ziet voordat hij de eerste zin leest, en wat hem in een halve seconde vertelt of deze pagina is gemaakt door iemand die er om gaf. Vermenigvuldig dat met vier afbeeldingen per bericht en veertig berichten per kwartaal, en “een foto zoeken” houdt op een taak te zijn en wordt een pijplijnprobleem.

Zo lossen wij dit op: wat te gebruiken in plaats van gegenereerde afbeeldingen en waarom, en de drie manieren om Pexafy in de workflow te integreren — handmatig, via API, of via een AI-agent — inclusief de prompt die een afgerond concept omzet in een zoekzin die daadwerkelijk iets vindt.

Waarom echte foto's nog altijd beter zijn dan gegenereerde

Een illustratie genereren is eenvoudig, en dat is precies het probleem. Vier dingen zijn veranderd tussen “AI-afbeeldingen zijn een cheatcode” en vandaag:

1 · Bij grote volumes is zoeken sneller dan genereren

Een generatie is één prompt, een wachttijd, een inspectie, en — eerlijk gezegd — nog twee of drie pogingen voordat er één bruikbaar is. Een semantische zoekopdracht is één enkel verzoek dat terugkomt met zestien kandidaten in ongeveer 150 milliseconden, elk al gelicentieerd, al gecrediteerd, al op maat, met de afmetingen in de respons. Voor één afbeelding is het verschil een kopje koffie. Voor vier honderd afbeeldingen per kwartaal is het het verschil tussen een workflow en een klus.

2 · Een foto is accuraat; een generatie is aannemelijk

Zodra uw artikel over iets echts gaat — een beroep, een stuk gereedschap, een stad, een gebaar, een materiaal — krijgt een gegenereerde afbeelding de sfeer goed en de details fout. Handen met zes vingers zijn de grap-versie; de dure versie is een chirurgisch instrument dat niet bestaat, een cockpit met verzonnen bedieningselementen, of een “straat in Lissabon” die niemand uit Lissabon herkent. Lezers die uw onderwerp kennen, merken het, en ze merken eerst de afbeelding op.

3 · Iedereen heeft dezelfde look

Diffusiemodellen convergeren naar één huisstijl, en een muur van illustraties met zachte verlopen, te veel licht en verdacht symmetrisch leest nu als opvulling. Die perceptie is de werkelijke kostprijs: geen straf, een signaal. Een echte foto — korrel, een ongemakkelijke stoel, iemand midden in een zin — leest als verslaggeving.

4 · En nu komen ze met een label eraan

Dit is eerder context dan een argument, maar het geeft de richting aan. Sinds 2 augustus 2026 vereist Artikel 50 van de EU AI Act dat aanbieders van generatieve systemen synthetische output markeren in een machineleesbaar formaat, en dat deployers deepfakes bekendmaken.1 Aan de detectiekant leest Google C2PA Content Credentials en zijn eigen SynthID-watermerk om te antwoorden op “is dit AI-gegenereerd?” binnen Search, Images en Lens.2 Niets daarvan is een regel over welke afbeeldingen een blog mag publiceren, en niets daarvan kost u ranglijstposities. Wat is veranderd, is stroomafwaarts: de herkomst van de afbeelding bovenaan uw artikel is nu iets wat een lezer in twee klikken kan controleren, zonder het u te vragen. Een gelicentieerde foto heeft niets te verklaren.

Wanneer gegenereerde afbeeldingen wél de juiste keuze zijn. Conceptdiagrammen en schema's. Een scène die niet gefotografeerd kan worden (een product dat nog niet bestaat, een abstract mechanisme, een toekomstige stad). Een eigen huisstijl-illustratie die u wilt herhalen op elk bericht. En alles waarbij de afbeelding bewust wordt begrepen als een illustratie in plaats van als bewijs. Gebruik beide — stop alleen met generatie als standaard te gebruiken voor “ik heb een foto nodig van mensen in een vergadering.”

Drie manieren om te illustreren, afhankelijk van uw volume

Dezelfde engine, dezelfde catalogus — 9M+ gratis te gebruiken foto's uit 9 bibliotheken — en drie toegangspunten. Kies op basis van hoeveel artikelen u publiceert, niet op basis van hoe technisch u bent.

Toegangspunt Beste voorwie en hoeveel Per artikel Wat u nodig hebt
Zoekinterface Redacteuren, één bericht tegelijk — tot ~20/maand ~30 seconden Een browser. Geen account nodig om te zoeken.
REST API Een CMS, een static-site build, een batch conceptartikelen ~1 aanvraag, ~150 ms Een API-sleutel. 5.000 aanvragen/maand gratis, 20/min.
MCP-server De AI-agent die het concept schrijft of bewerkt Binnen hetzelfde gesprek Eén connector-URL, OAuth of een sleutel.

De drie delen één catalogus en één rangschikking, dus een foto die een redacteur in de UI vindt, is dezelfde foto, met dezelfde identifier, die de API teruggeeft aan uw buildscript.

Eén artikel, 30 seconden: de zoekinterface

Beschrijf de scène zoals u die aan een fotograaf zou beschrijven, in een volledige zin, in uw eigen taal. Niet team meeting — “a small team standing in a semi circle for a short morning stand-up meeting in a bright open plan office”. Elk extra concreet detail vernauwt de resultatenset in plaats van hem leeg te maken, omdat de engine rangschikt op betekenis in plaats van uw woorden te matchen met iemands tags.

pexafy.com — één zin, resultaten uit meerdere bibliotheken in één raster
De zoekresultatenpagina van Pexafy met foto's van een team dat een ochtendvergadering houdt, gevonden op basis van een zoekopdracht in volledige zin.
De kleine gekleurde stip op elke kaart is de relevantiescore — groen betekent dat de engine zeker is van zijn zaak. Resultaten worden samengevoegd en opnieuw gerangschikt over elke geïndexeerde bibliotheek, niet achter elkaar geplakt, bibliotheek na bibliotheek. Voer deze exacte zoekopdracht uit →

Verfijn de resultaten vervolgens met de filters die van belang zijn voor een artikellay-out — en alleen die:

Filters — kleur, oriëntatie, bron, licentie
Het filterpaneel van Pexafy, met kleurstalen, oriëntatie-opties en bronselectie.
Oriëntatie → liggend voor een hero (staand snijdt slecht bij in social previews). Kleur om een reeks berichten visueel coherent te houden met uw merk — kies dezelfde kleurstaal voor elk artikel in een campagne en de blogindex oogt ineens ontworpen.
  1. Schrijf de zin, niet het zoekwoord. Onderwerp + actie + plaats + licht. Tot 500 tekens, in elk van de 100+ talen.
  2. Filter op liggend voor de hero, en voer de zoekopdracht dan opnieuw uit zonder filter voor afbeeldingen in het artikel, waar staand vaak beter oogt.
  3. Open de foto om de kant-en-klare attributieregel, de originele bronpagina en het bestand op volledige resolutie te krijgen.
  4. Gebruik “vergelijkbare foto's” op de gekozen foto om de volgende sectie te illustreren in hetzelfde visuele register — zelfde licht, zelfde behandeling, andere scène.

De prompt: een concept omzetten in een zoekzin

Dit is de stap die iedereen fout doet bij het automatiseren. Ze voeren de artikeltitel direct in het zoekvak in, en de titel is precies de verkeerde invoer: hij is abstract (“The hidden cost of context switching”) en geen enkele foto ter wereld beeldt dat af. Wat u van het model wilt, is geen samenvatting — het is een camerabriefing.

De photo-editor prompt — kopieer hem exact zo
# 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": "…" }

Regel 1 doet het meeste werk. Hier is diezelfde regel toegepast op drie echte conceptartikelen — de middelste kolom is wat een mens typt als hij haast heeft, de rechterkolom is wat de prompt teruggeeft:

Het artikel gaat over… De overhaaste zoekopdracht De camerabriefing
Waarom uw dagelijkse stand-up niet werkt team meeting “a small team standing in a semi circle for a short morning stand-up meeting in a bright open plan office”
Onboarding terugbrengen van 6 weken naar 9 dagen onboarding “a new employee on their first day at a desk, listening while a colleague leans in and points at their screen”
De verborgen kosten van context switching productivity “a tired developer rubbing their eyes in front of two monitors late in the evening, the office empty behind them”

team meeting levert de generieke vergaderzaal-stockfoto op die iedereen anders die over uw onderwerp schrijft al gebruikt. De zin in de derde kolom levert dit op, in 155 milliseconden:

GET /search/photos — “a small team standing in a semi circle for a short morning stand-up meeting…” · 16 resultaten · 155 ms
Drie verschillende bibliotheken in de top zes, samen gerangschikt in plaats van bibliotheek na bibliotheek. Elk van hen staat, in een groep, in een echt kantoor — precies wat de zin vroeg en wat team meeting nooit garandeert.

De pipeline: concept erin, gecrediteerde hero-afbeelding eruit

Veertig regels, twee aanroepen: één naar het model voor de briefing, één naar Pexafy voor de foto. Zet het in de save-hook van uw CMS, uw static-site build, of een script dat een map met Markdown-bestanden doorloopt.

illustrate.py — artikel erin, afbeelding + alt + credit eruit
import json, os, requests
from anthropic import Anthropic

SEARCH = "https://api.pexafy.com/api/v1/search/photos"
llm = Anthropic()  # ANTHROPIC_API_KEY uit de omgeving

def camera_brief(article: str) -> dict:
    # PHOTO_EDITOR = de systeemprompt hierboven
    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"],           # de volledige zin
            "orientation": brief["orientation"],
            "per_page": 8,
            "score_threshold": 0.55,      # zwakke matches negeren
        },
        timeout=10,
    )
    hits = r.json()["data"]
    if not hits:                        # briefing te specifiek → verruimen, opnieuw proberen
        return None

    top = hits[0]
    return {
        "src":    top["urls"]["regular"],        # 1080px — hero-formaat
        "alt":    brief["alt"] or top["alt_description"],
        "credit": top["attribution"]["html"],   # klaar om te tonen
        "width":  top["width"],
        "height": top["height"],
        "id":     top["photo_id"],           # bewaren: geen herhalingen
    }

Drie details die van een demo iets maken dat u kunt laten draaien:

  • score_threshold — niets teruggeven is beter dan een slechte foto teruggeven. Als de briefing te specifiek was, verruim hem (laat de laatste bijzin weg) en probeer het één keer opnieuw.
  • Bewaar de photo_id — één regel in uw database, en nooit delen twee artikelen op uw site dezelfde hero-afbeelding. Dit is de fout waar iedereen op stuit bij artikel nummer dertig.
  • Eén aanvraag per afbeeldingsslot — een hero plus drie sectie-afbeeldingen is vier aanvragen per artikel, of één als u vier verschillende resultaten uit dezelfde zoekopdracht gebruikt.

Geen Python? De hele zoekhelft is één regel, en elk resultaat draagt dezelfde velden, ongeacht uit welke bibliotheek het komt:

Dezelfde aanroep, in een 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 } }

De vorm van de respons — urls, width, photographer_full_name, source, license_type, relevance_score, attribution — is identiek voor een Pexels-foto, een Pixabay-foto en een Unsplash- foto. Die normalisatie is het deel dat u anders zelf zou moeten schrijven en onderhouden; we hebben het veld voor veld uit elkaar gehaald in de vergelijking van gratis stockfoto-API's.

Tweede sectie, tweede briefing, tweede zoekopdracht — het punt is dat één artikel meerdere verschillende scènes oplevert in plaats van één foto vier keer uitgerekt:

Sectie 2 — “a woman working alone on a laptop at her kitchen table early in the morning with a cup of coffee” · 129 ms
Zelfde artikel, andere sectie, andere scène — en de sfeer blijft behouden omdat de briefing hem doorgaf. Voer deze ook uit →

Laat de agent de foto kiezen: MCP

Als een model al bezig is met het schrijven of bewerken van het concept, is de schoonste pipeline geen pipeline: geef de agent de zoektool en laat hem illustreren wat hij zojuist heeft geschreven, in hetzelfde gesprek, terwijl hij de context nog heeft.

Pexafy draait een gehoste Model Context Protocol-server op mcp.pexafy.com/mcp. Drie tools: search_photos (een zin), search_photos_by_image (een referentieafbeelding, eventueel plus een zin — “zoals dit, maar bij zonsondergang”), en get_similar_photos (meer zoals de foto die u al koos, wat u helpt een reeks coherent te houden).

Claude.ai & Claude Desktop — OAuth, geen sleutel te beheren
Settings → Connectors → Add custom connector
Name: Pexafy
URL:  https://mcp.pexafy.com/mcp
# meld u vervolgens aan met uw Pexafy-account wanneer het venster opent
Claude Code — één commando
claude mcp add --transport http pexafy https://mcp.pexafy.com/mcp \
  --header "Authorization: Bearer $PEXAFY_API_KEY"

# of commit het naar de repo, zodat het hele team het krijgt — .mcp.json
{
  "mcpServers": {
    "pexafy": {
      "type": "http",
      "url": "https://mcp.pexafy.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Van daaruit is het illustreren van een artikel een zin, geen taak. De agent schrijft zijn eigen camerabriefing — hij heeft het concept net gelezen, dus hij is beter geplaatst dan wie dan ook om de scène te beschrijven:

Zo ziet het er in de praktijk uit
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 en Openverse hebben geen officiële MCP-server — wat er bestaat, zijn door de community gebouwde wrappers die u zelf host en van een sleutel voorziet. Als uw redactionele workflow al via een agent verloopt, is dat verschil de integratie.

Alt-tekst, licentie en paginasnelheid

De afbeelding is gekozen. Vier dingen bepalen of ze de pagina helpt of in stilte schaadt:

  1. Schrijf de alt-tekst voor een mens, niet voor een crawler. Elk resultaat wordt geleverd met een alt_description — gebruik die als concept en herschrijf ze vervolgens in de context van uw alinea. “Vier collega's staan in een ochtendvergadering” is beter dan een zoekwoordensalade, en het is de tekst die een screenreader daadwerkelijk zal voorlezen. Houd het onder ~125 tekens; laat het alleen leeg (alt="") als de afbeelding puur decoratief is.
  2. Vermeld de credit, zelfs als niets u daartoe verplicht. Attributie is niet vereist door de gebruiksvoorwaarden van de Pexafy API en elk resultaat draagt een kant-en-klare attribution.html- string — maar de licentie die door de oorspronkelijke bibliotheek is verbonden aan die foto, is nog altijd van toepassing op uw gebruik ervan, en een zichtbare creditregel vertelt een lezer (en een answer engine) dat dit een echte foto met een echte auteur is.
  3. Serveer het juiste formaat. urls.regular (1080 px) is een hero; urls.full is een bestand van 2400 px dat geen enkel artikel nodig heeft. Geef altijd width/height uit de respons mee zodat de browser de ruimte reserveert — dat ene attributenpaar is het verschil tussen een goede en een slechte layout-shift-score. Gebruik fetchpriority="high" op de hero, loading="lazy" op alles onder de vouw.
  4. Voed de hero aan uw metadata. Dezelfde URL moet uw og:image, uw twitter:image en de image-eigenschap van uw Article-structured data zijn. Eén foto, drie plekken, geen extra werk — en een social preview die niet langer terugvalt op uw logo.

Wat 100 artikelen per maand daadwerkelijk kosten

Ga uit van een hero plus drie afbeeldingen in het artikel, dus vier zoekaanvragen per bericht — de bewust inefficiënte versie, waarbij u per slot een aparte zoekopdracht uitvoert in plaats van resultaten uit één opdracht te hergebruiken:

Volume Zoekaanvragen / maand Plan Zoekkosten
20 artikelen 80 Gratis — 5.000 aanvr./maand $0
100 artikelen 400 Gratis — 5.000 aanvr./maand $0
1.000 artikeleneen bureau, of een hele klantportfolio 4.000 Gratis — nog altijd binnen 5.000 aanvr./maand $0

Ja — het maandelijkse quotum is geen probleem bij volumes zoals in contentmarketing, en wij zeggen dat liever dan een reden te verzinnen om te betalen. De limiet die u daadwerkelijk zult tegenkomen, is die per minuut. Het gratis plan staat 20 API-aanvragen per minuut toe; een buildscript dat 100 artikelen in één keer opnieuw illustreert, vuurt 400 aanvragen af zo snel als uw lus toestaat, dus het besteedt ofwel twintig minuten aan afremmen, of het begint 429's te verzamelen. Twee uitwegen: spreid de aanroepen (één sleep in de lus, en een nachtelijke taak merkt er niets van), of stap over naar een plan waarvan het snelheidslimiet overeenkomt met uw build — Starter is 30 aanvragen/minuut, Pro 60. Kies op basis van piekbelasting, niet op basis van volume.

De enige andere kostenpost is één korte modelaanroep per artikel om de briefing te produceren — een paar honderd tokens in, dertig uit, wat het goedkoopste onderdeel zal zijn van elke contentpijplijn die u bezit. Vergelijk dat met het genereren van vier afbeeldingen per bericht, bij vierhonderd afbeeldingen per maand, plus de pogingen die het niet haalden.

En het deel dat niet in een kostentabel verschijnt: de redacteur opent geen vijf tabbladen meer. Dat is de werkelijke besparing.

Bronnen & voetnoten

1 EU AI Act, Artikel 50 — transparantieverplichtingen voor aanbieders en deployers van bepaalde AI-systemen, van toepassing vanaf 2 augustus 2026. Aanbieders van systemen die synthetische audio, beeld, video of tekst genereren, moeten output markeren in een machineleesbaar formaat en detecteerbaar maken als kunstmatig gegenereerd; deployers moeten deepfakes bekendmaken en, in bepaalde gevallen, AI-gegenereerde tekst die wordt gepubliceerd om het publiek te informeren. De Digital Omnibus (Verordening (EU) 2026/1744, van kracht sinds 27 juli 2026) laat Artikel 50 zelf ongewijzigd, maar geeft systemen die al vóór 2 augustus 2026 op de markt waren tot 2 december 2026 de tijd om te voldoen aan de vereiste van machineleesbare markering van Artikel 50(2). Dit alles bindt AI-aanbieders en -deployers — het is geen regel over welke afbeeldingen een blog mag publiceren.

2 Google leest C2PA Content Credentials en zijn eigen SynthID- watermerk om herkomst zichtbaar te maken in About this image binnen Search, Images en Lens. Dit is media-herkomst, geen ranking-straf op AI-gegenereerde content.

Veelgestelde vragen

Moet ik AI-gegenereerde afbeeldingen of echte foto's gebruiken voor blogartikelen?
Gebruik echte foto's zodra het artikel gaat over iets dat bestaat — een beroep, een plek, een object, een gebaar — want een foto klopt in de details en heeft een verifieerbare bron, een datum en een fotograaf. Sinds 2 augustus 2026 verplicht Artikel 50 van de EU AI Act generatieve systemen om hun output te markeren in een machineleesbaar formaat, en platforms zoals Google tonen die herkomst nu aan lezers. Gegenereerde afbeeldingen blijven de juiste keuze voor diagrammen, voor scenes die niet gefotografeerd kunnen worden, en voor een eigen huisstijl-illustratie.
Hoe vind ik automatisch een afbeelding die bij mijn artikel past?
Twee aanroepen. Vraag eerst een taalmodel om het concept om te zetten in een camera brief — één zin van 12 tot 25 woorden die een scène beschrijft die een camera had kunnen vastleggen, nooit het onderwerp zelf. Stuur die zin vervolgens naar een semantische zoek-API voor afbeeldingen, die foto's rangschikt op betekenis in plaats van op tag-matching. Bij Pexafy is dat GET /api/v1/search/photos?q=…, ongeveer 150 ms, en elk resultaat komt terug met zijn afmetingen, licentie en een kant-en-klare attributietekst.
Wat is de beste prompt om een artikel om te zetten in een zoekopdracht voor afbeeldingen?
Vraag om een fotografeerbare scène, geen samenvatting: “schrijf ÉÉN zin van 12–25 woorden die beschrijft dat iemand ergens iets doet; noem nooit het onderwerp; geen tekst, logo's, grafieken of beroemdheden; geen onzichtbare metaforen; laat de zin de sfeer van het artikel matchen; geef JSON terug”. De volledige prompt staat in dit artikel, klaar om te kopiëren. De belangrijkste regel is het verbod op abstracties: “productiviteit” levert niets op, “een vermoeide developer die 's avonds laat over zijn ogen wrijft voor twee monitoren” vindt de foto.
Moet ik de foto's die ik in blogposts gebruik crediteren?
Attributie is niet verplicht volgens de gebruiksvoorwaarden van de Pexafy API, en elk resultaat wordt geleverd met een kant-en-klare credit-regel in HTML en platte tekst. De licentie die door de oorspronkelijke bibliotheek aan elke foto is verbonden, blijft bepalend voor het gebruik van die foto, en het tonen van de credit laat lezers — en answer engines — weten dat de afbeelding een echte foto is met een echte maker.
Kan Claude of een andere AI-agent de foto's voor mijn artikel vinden?
Ja, via de gehoste MCP-server (Model Context Protocol) van Pexafy op mcp.pexafy.com/mcp. Voeg deze toe als aangepaste connector in Claude.ai of Claude Desktop en log in met OAuth, of voeg hem toe aan Claude Code met één claude mcp add-commando en een API-sleutel. De agent zoekt vervolgens zelf op zin, op referentieafbeelding of naar vergelijkbare foto's, terwijl hij je concept nog in context heeft.
Hoe voorkom ik dat elk artikel op mijn blog dezelfde foto gebruikt?
Sla het photo_id op van elke afbeelding die je publiceert en sluit dat uit bij de volgende run — één kolom in je CMS. Het is het faalmoment waar elke geautomatiseerde pipeline rond artikel dertig tegenaan loopt, en het is onzichtbaar totdat iemand door je blogindex scrolt. Per sectie een nieuwe camera brief schrijven, in plaats van de artikeltitel te hergebruiken, doet de rest.

Stop met jagen op trefwoorden. Beschrijf wat je bedoelt.

Doorzoek 9M+ vrij te gebruiken afbeeldingen op betekenis — in elke taal, in minder dan 100 ms.