NEWVectors or files. Pick a path.Start →
    media

    How do I extract the metadata from an image?

    Read a photo's EXIF, IPTC and XMP metadata on this page: the date taken, GPS location, camera, lens and exposure. The file is read in your browser and never uploaded. The page also covers what no header holds, such as the objects and text in the picture, and how to pull both from a whole library through an API.

    The short answer

    A photo carries two kinds of metadata. The first is written by the camera or phone: EXIF fields such as the date taken, GPS coordinates, camera model, lens, exposure and orientation, plus IPTC and XMP fields that editing tools add. The reader on this page shows those fields for a JPEG, PNG or TIFF without uploading it, and so do the macOS Preview inspector, the Windows file Properties dialog and the exiftool command line. The second kind describes what the picture shows, such as the objects, scene, text and dominant colors, and no file header contains it; a vision model has to look at the pixels. This page covers both, for one photo or a library of millions.

    Max file size: No set limit; only the metadata is read
    Estimated: About a second, in your browser
    3 input formats

    Read a photo's metadata here

    Runs in your browser. The file stays on your device and nothing is uploaded.

    Drop a JPEG, PNG or TIFF here, or choose one from your device.

    Loading the reader.

    How It Works

    1

    Drop a JPEG, PNG or TIFF onto the reader at the top of this page, or choose one. The file stays on your device.

    2

    The open-source exifr library, running in your browser, parses the EXIF, GPS, IPTC and XMP blocks straight from the file's bytes.

    3

    The date taken, camera, lens, exposure and location show first. Every other field follows, grouped by the block it came from.

    4

    Download the full result as JSON.

    5

    For a whole library, the API code below runs an extractor over every image in a bucket and stores the output as documents you can search.

    Which image metadata approach should I use?

    ApproachBest forTradeoffUse when
    Embedded metadata parserCamera data, GPS, copyright fields, timestamps, and rights metadata that already live in the fileFast and deterministic, but it cannot describe visual content that was never taggedUse first on every ingest so EXIF, IPTC, and XMP are preserved before any AI enrichment.
    Vision API enrichmentObjects, labels, landmarks, OCR, dominant colors, and content-safety fieldsGenerates useful descriptive metadata, but each provider returns a different schemaUse when the library needs searchable visual attributes and you can normalize provider output.
    DAM auto-taggingCreative teams that need a review UI, permissions, portals, and approval workflowsOperationally easy for marketers, but weaker when developers need custom retrieval behaviorUse when the metadata pipeline is primarily a creative workflow rather than an API product.
    Mixpeek managed indexingObject-storage libraries that need technical metadata, semantic metadata, and retrieval in one indexRequires modeling the library as a namespace and collection instead of one-off file conversionUse when extracted metadata has to be searchable immediately across images, video, audio, and documents.

    Code Examples

    import os, requests
    
    API = "https://api.mixpeek.com"
    H = {"Authorization": f"Bearer {os.environ['MIXPEEK_API_KEY']}",
         "X-Namespace": os.environ["NAMESPACE_ID"]}
    
    # 1. a bucket, with a schema that declares the field you will send
    bucket = requests.post(f"{API}/v1/buckets", headers=H, json={
        "bucket_name": "image-inputs",
        "bucket_schema": {"properties": {"image": {"type": "image"}}},
    }).json()
    
    # 2. land the file as an object. the URL goes in data, on the blob
    requests.post(f"{API}/v1/buckets/{bucket['bucket_id']}/objects", headers=H, json={
        "key_prefix": "run-1",
        "blobs": [{"property": "image", "type": "image",
                   "data": "https://example.com/photo.jpg"}],
    })
    
    # 3. a collection over that bucket, running the extractor
    collection = requests.post(f"{API}/v1/collections", headers=H, json={
        "collection_name": "image-to-metadata",
        "source": {"type": "bucket", "bucket_ids": [bucket["bucket_id"]]},
        "feature_extractor": {"feature_extractor_name": "image_extractor", "version": "v1"},
    }).json()
    
    # 4. run extraction over the bucket
    requests.post(f"{API}/v1/buckets/{bucket['bucket_id']}/batches", headers=H, json={
        "collection_ids": [collection["collection_id"]],
        "auto_submit": True,
    })
    
    # 5. read the output
    docs = requests.get(
        f"{API}/v1/collections/{collection['collection_id']}/documents", headers=H
    ).json()
    print(docs)

    Use Cases

    Find out when and where a photo was taken from the EXIF date and GPS fields, and why many photos from social platforms have neither
    Sort a folder of thousands of photos by what is in them when the filenames say nothing
    Put a map under a photo collection by pulling GPS coordinates out of each file
    Check uploads for resolution, orientation and content before they reach a catalog or a model

    Supported Input Formats

    JPEG
    PNG
    TIFF

    Quick Info

    Categorymedia
    Max File SizeNo set limit; only the metadata is read
    Est. TimeAbout a second, in your browser

    Processing millions of files?

    Run this as a managed pipeline over your whole library, no infrastructure to build or maintain. Talk to us about processing at scale.

    Run it over a library

    Mixpeek runs this conversion as a pipeline over a whole library in your object storage, with the output landing as queryable documents. The reader on this page handles one file at a time.

    Frequently Asked Questions

    Ready to convert image to metadata?

    Start using the Mixpeek Image to Metadata in minutes. Sign up for a free API key and follow the documentation to get started.