Naar inhoud
lightbulb Welkom op de nieuwe kennisbank | We hebben de docs volledig vernieuwd met meer dan 160 features. Bekijk wat nieuw isarrow_forward

Multimodale invoer met de Gemini API

Stuur tekst, afbeeldingen, audio, video en PDF tegelijk naar de Gemini API en verwerk gecombineerde multimodale prompts in je Python-applicatie.

Wat is multimodale AI

Multimodale AI verwerkt meerdere soorten invoer tegelijk: tekst, afbeeldingen, audio, video en documenten. Gemini is van de grond af aan ontworpen als multimodaal model, wat betekent dat het verbanden kan leggen tussen visuele, auditieve en tekstuele informatie binnen dezelfde redenering.

Typische toepassingen zijn: afbeeldingen beschrijven, grafieken analyseren, audio transcriberen, video samenvatten, PDF-documenten doorzoeken en vragen beantwoorden die meerdere media combineren.

info

Nieuwe SDK sinds eind 2025

De voorbeelden gebruiken het pakket google-genai (from google import genai). De oude google.generativeai-bibliotheek is sinds 30 november 2025 uitgefaseerd en krijgt geen ondersteuning meer. Gebruik voor nieuwe projecten altijd de unified Google GenAI SDK. Installeer met pip install google-genai.

De client opzetten

Bij de nieuwe SDK maak je eerst een client-object aan. Dat leest standaard de omgevingsvariabele GEMINI_API_KEY.

from google import genai
from google.genai import types

client = genai.Client()

Als modelnaam gebruik je in dit artikel gemini-2.5-flash (snel en goedkoop, stabiel). Voor zwaardere multimodale redenering kun je een Pro- of Gemini 3-model kiezen, bijvoorbeeld gemini-2.5-pro of gemini-3.5-flash. Controleer de actuele lijst in de officiele modeldocumentatie, want modelnamen wijzigen regelmatig.

Afbeeldingen meesturen als inline data

Voor kleine bestanden stuur je de bytes rechtstreeks mee met types.Part.from_bytes. Gebruik dit zolang je totale request onder ongeveer 20 MB blijft.

from google import genai
from google.genai import types

client = genai.Client()

with open("diagram.png", "rb") as f:
    image_bytes = f.read()

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        types.Part.from_bytes(data=image_bytes, mime_type="image/png"),
        "Beschrijf wat er op dit diagram staat en leg de relaties uit.",
    ],
)

print(response.text)

Je hoeft de bytes niet zelf naar base64 om te zetten: from_bytes doet de codering intern. Je kunt ook een PIL-Image-object direct in de contents-lijst zetten, dat zet de SDK automatisch om.

import PIL.Image

image = PIL.Image.open("diagram.png")
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=["Beschrijf dit diagram:", image],
)
print(response.text)

Bestanden uploaden via de Files API

Voor grote bestanden of hergebruik upload je eerst via de Files API. Dat scheelt bandbreedte en kosten als je hetzelfde bestand in meerdere requests gebruikt.

from google import genai

client = genai.Client()

uploaded_file = client.files.upload(file="presentatie.pdf")

print(f"Bestand URI: {uploaded_file.uri}")
print(f"Status: {uploaded_file.state}")

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        uploaded_file,
        "Geef een samenvatting van de belangrijkste punten uit dit rapport.",
    ],
)
print(response.text)
lightbulb

Wanneer kies je de Files API

Gebruik de Files API als je totale request boven de 20 MB komt, als je een bestand in meerdere requests wilt hergebruiken, of voor video en audio die langer duren dan een paar seconden. Voor PDF stapt Google al vanaf 50 MB over op verplicht gebruik van de Files API.

Limieten van de Files API

Houd rekening met deze grenzen wanneer je veel of grote bestanden uploadt:

  • Geüploade bestanden blijven 48 uur beschikbaar en worden daarna automatisch verwijderd. Voor langer gebruik upload je opnieuw.
  • Maximale bestandsgrootte is 2 GB per bestand.
  • Per project mag je in totaal 20 GB opgeslagen hebben.
  • Opslag via de Files API is gratis in alle regio's waar de Gemini API beschikbaar is.

Ondersteunde bestandstypen

Categorie Ondersteunde formaten
Afbeeldingen JPEG, PNG, GIF, WebP, HEIC, HEIF
Video MP4, MPEG, MOV, AVI, FLV, WMV, MKV, WebM
Audio MP3, WAV, FLAC, AAC, OGG, OPUS
Documenten PDF, TXT, HTML, CSS, JS, Markdown, CSV, XML, RTF
Code Python, Java, C++, Go, TypeScript en meer

Meerdere modaliteiten combineren

Je kunt tekst, afbeeldingen en andere media in één prompt combineren. Het model verwerkt alle parts als één geïntegreerde context.

import PIL.Image

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        "Vergelijk de twee grafieken en leg het verschil in de trend uit:",
        PIL.Image.open("grafiek_2024.png"),
        PIL.Image.open("grafiek_2025.png"),
        "Gebruik concrete getallen waar die zichtbaar zijn.",
    ],
)
print(response.text)

Het antwoord verwijst naar beide afbeeldingen, omdat het model de volgorde en samenhang van de parts meeneemt.

Media via een URI meesturen

Voor bestanden die al in Google Cloud Storage staan of die je via de Files API hebt geüpload, gebruik je types.Part.from_uri.

from google.genai import types

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        types.Part.from_uri(
            file_uri="gs://generativeai-downloads/images/scones.jpg",
            mime_type="image/jpeg",
        ),
        "Wat staat er op deze foto?",
    ],
)
print(response.text)
warning

Geen willekeurige publieke HTTP-URLs

from_uri werkt met een gs://-pad of een URI uit de Gemini Files API, niet met een willekeurige publieke https://-URL van een externe site. Wil je een afbeelding van het web gebruiken, download die dan eerst en stuur de bytes via inline data of upload het bestand via de Files API.

Batchverwerking van meerdere afbeeldingen

Voor het verwerken van veel afbeeldingen in één sessie bouw je de contents-lijst op in een lus.

from pathlib import Path
import PIL.Image

image_folder = Path("./producten")
images = sorted(image_folder.glob("*.jpg"))

prompt_parts = ["Geef voor elke afbeelding een productnaam en een geschatte prijs:"]
for img_path in images:
    prompt_parts.append(PIL.Image.open(img_path))
    prompt_parts.append(f"Afbeelding: {img_path.name}")

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=prompt_parts,
)
print(response.text)
lightbulb

Tel je tokens vooraf

Elke afbeelding kost ruwweg 258 tokens bij standaardresolutie en meer bij hoge resolutie. Bij een batch van honderden afbeeldingen loop je dus snel tegen het tokenbudget aan. Gebruik client.models.count_tokens(model=..., contents=...) om vooraf te schatten of je request binnen de contextlimiet past.

Welke modelnaam moet ik gebruiken voor multimodale invoer?

Begin met gemini-2.5-flash voor de meeste taken: snel, goedkoop en multimodaal. Voor complexere redenering over beeld, audio of video kies je een Pro-model of een Gemini 3-model. Modelnamen wijzigen geregeld, dus controleer de actuele lijst in de officiele modeldocumentatie voordat je een naam vastzet in productie.

Hoeveel afbeeldingen kan ik per request meesturen?

De contextlimiet bepaalt het maximum, niet een vast aantal. Bij een contextvenster van 1 miljoen tokens en ongeveer 258 tokens per afbeelding op standaardresolutie kun je in theorie duizenden afbeeldingen meesturen, mits je tekst en andere parts er ook in passen.

Ondersteunt de gratis tier ook multimodale invoer?

Ja. De gratis tier ondersteunt volledige multimodale invoer, inclusief afbeeldingen, audio, video en documenten. De ratelimieten zijn wel lager dan op betaalde tiers en verschillen per model, dus controleer de actuele waarden in Google AI Studio of de pagina met ratelimieten.

Hoe lang blijven geüploade bestanden beschikbaar?

48 uur na upload, daarna verwijdert Google ze automatisch. Voor hergebruik daarna upload je het bestand opnieuw of bewaar je het zelf en stuur je het opnieuw mee.

Kan ik tekst extraheren uit een gescande PDF?

Ja, Gemini kan OCR uitvoeren op ingescande PDF-paginas. Upload de PDF via de Files API en vraag expliciet om tekstextractie. Bij slechte scankwaliteit levert een Pro-model doorgaans nauwkeuriger resultaat dan een Flash-model.

Moet ik afbeeldingen zelf naar base64 coderen?

Nee. Met types.Part.from_bytes geef je de rauwe bytes mee en codeert de SDK ze intern. Handmatig base64 coderen is bij de nieuwe google-genai SDK niet meer nodig.