{
  "name": "CreatorPrivacyKit synthetic metadata fixtures",
  "version": "2026-09-24",
  "license": "CC0-1.0",
  "source": "CreatorPrivacyKit synthetic fixture",
  "personalData": false,
  "note": "Generated locally. Expected values are the fields the current inspectors returned after ground-truth checks against values written into each file.",
  "fixtures": [
    {
      "file": "image-exif-basic.jpg",
      "format": "image",
      "sha256": "aeefe834404a1162711271a288e77bd88f2f902d93fa9159ee37527f084f7f65",
      "bytes": 522,
      "purpose": "JPEG EXIF camera, date, software, and serial parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "make": "CPK Camera",
          "model": "Synthetic Body",
          "software": "CreatorPrivacyKit Fixture",
          "dateTime": "2026:01:15 12:00:00",
          "lensModel": "Synthetic 35mm",
          "dateTimeOriginal": "2026:01:15 12:00:00",
          "bodySerial": "SN-FIXTURE-001"
        }
      }
    },
    {
      "file": "image-gps.jpg",
      "format": "image",
      "sha256": "b4d4098b7162babaad038fc4f13ca0e3aa7f1fcc345e52236f02f6ac5bfbd8a1",
      "bytes": 435,
      "purpose": "JPEG GPS latitude and longitude parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": true,
        "fields": {
          "make": "CPK Camera",
          "gpsLatitude": "37.774900",
          "gpsLongitude": "-122.419400"
        }
      }
    },
    {
      "file": "image-camera.jpg",
      "format": "image",
      "sha256": "aeefe834404a1162711271a288e77bd88f2f902d93fa9159ee37527f084f7f65",
      "bytes": 522,
      "purpose": "JPEG camera maker, model, and lens parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "make": "CPK Camera",
          "model": "Synthetic Body",
          "software": "CreatorPrivacyKit Fixture",
          "dateTime": "2026:01:15 12:00:00",
          "lensModel": "Synthetic 35mm",
          "dateTimeOriginal": "2026:01:15 12:00:00",
          "bodySerial": "SN-FIXTURE-001"
        }
      }
    },
    {
      "file": "image-xmp.jpg",
      "format": "image",
      "sha256": "aeec7fdf1e77f9cfea29f542e5a9654c5dc1ba49bf027e464bd3dfc05a772f5a",
      "bytes": 854,
      "purpose": "JPEG XMP creator and tool parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "author": "CPK XMP Author",
          "creatorTool": "CreatorPrivacyKit XMP Fixture",
          "xmpModel": "XMP Synthetic"
        }
      }
    },
    {
      "file": "image-iptc.jpg",
      "format": "image",
      "sha256": "18b3d8ddb05a06c07c0edbfffce7fb898b76da84feb1e297c878fc1584919ca7",
      "bytes": 358,
      "purpose": "JPEG IPTC byline, city, and copyright parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "iptcByline": "CPK IPTC Author",
          "iptcCity": "Fixture City",
          "iptcCopyright": "CPK Fixture"
        }
      }
    },
    {
      "file": "image-no-metadata.jpg",
      "format": "image",
      "sha256": "57b06e278719cde09d761d63f62c6d5f5b005db34347661b3750d90046c2841b",
      "bytes": 274,
      "purpose": "JPEG with no EXIF, XMP, or IPTC",
      "viewer": {
        "status": "no_metadata",
        "detects": false,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "no_metadata",
        "gps_present": false,
        "fields": {}
      }
    },
    {
      "file": "image-png-exif.png",
      "format": "image",
      "sha256": "2dc3bca1d53f94edb588c756bd097fd74d4b9afdd500d4ef79838231026da8b9",
      "bytes": 375,
      "purpose": "PNG eXIf chunk parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "make": "CPK Camera",
          "model": "Synthetic Body",
          "software": "CreatorPrivacyKit Fixture",
          "dateTime": "2026:01:15 12:00:00",
          "lensModel": "Synthetic 35mm",
          "dateTimeOriginal": "2026:01:15 12:00:00",
          "bodySerial": "SN-FIXTURE-001"
        }
      }
    },
    {
      "file": "image-gps.webp",
      "format": "image",
      "sha256": "6231b887bbafe0aba2facfc14fce0d140e5608b858d29a50f80a8e56cf3139bb",
      "bytes": 236,
      "purpose": "WebP EXIF GPS chunk parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "image-inspector"
      },
      "remover": {
        "status": "cleared",
        "method": "pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run."
      },
      "expected": {
        "status": "ok",
        "gps_present": true,
        "fields": {
          "make": "CPK Camera",
          "gpsLatitude": "37.774900",
          "gpsLongitude": "-122.419400"
        }
      }
    },
    {
      "file": "video-basic.mp4",
      "format": "video",
      "sha256": "588553126cfb8121e831d681f33622fa1086d722b19282f8a83d4a4b1cdb9fd0",
      "bytes": 2340,
      "purpose": "MP4 container, track size, and codec parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "iso-bmff+mediabunny"
      },
      "remover": {
        "status": "cleared",
        "method": "Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "majorBrand": "isom",
          "compatibleBrands": "isom, iso2, avc1, mp41",
          "duration": "0.400 s",
          "resolution": "64×48",
          "codec:avc1": "avc1",
          "codec:mp4a": "mp4a",
          "encoder": "Lavf61.1.100",
          "containerName": "MP4",
          "mediaDuration": "0.400 s",
          "displaySize": "64×48",
          "videoCodecName": "avc",
          "frameRate": "10.000 fps",
          "audioCodecName": "aac"
        }
      }
    },
    {
      "file": "video-creation-time.mp4",
      "format": "video",
      "sha256": "983197851bb65ed3cfd31dea1f6d2713f4e07fd7fdb47fa399df9e696b09f86d",
      "bytes": 1680,
      "purpose": "MP4 creation time parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "iso-bmff+mediabunny"
      },
      "remover": {
        "status": "cleared",
        "method": "Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "majorBrand": "isom",
          "compatibleBrands": "isom, iso2, avc1, mp41",
          "creationTime": "2026-01-15T12:00:00Z",
          "modificationTime": "2026-01-15T12:00:00Z",
          "duration": "0.400 s",
          "resolution": "64×48",
          "codec:avc1": "avc1",
          "encoder": "Lavf61.1.100",
          "containerName": "MP4",
          "mediaDuration": "0.400 s",
          "displaySize": "64×48",
          "videoCodecName": "avc",
          "frameRate": "10.000 fps"
        }
      }
    },
    {
      "file": "video-encoder-tags.mp4",
      "format": "video",
      "sha256": "c4b68fbc4fb0b1625115afe1a7fea1b61c04fbe88598d696226da845da670a57",
      "bytes": 1740,
      "purpose": "MP4 encoder, title, and location tag parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "iso-bmff+mediabunny"
      },
      "remover": {
        "status": "cleared",
        "method": "Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe."
      },
      "expected": {
        "status": "ok",
        "gps_present": true,
        "fields": {
          "majorBrand": "isom",
          "compatibleBrands": "isom, iso2, avc1, mp41",
          "duration": "0.300 s",
          "resolution": "80×48",
          "codec:avc1": "avc1",
          "title": "CPK Fixture Clip",
          "encoder": "Lavf61.1.100",
          "gpsLatitude": "37.774887",
          "gpsLongitude": "-122.419388",
          "containerName": "MP4",
          "mediaDuration": "0.300 s",
          "displaySize": "80×48",
          "videoCodecName": "avc",
          "frameRate": "10.000 fps"
        }
      }
    },
    {
      "file": "video-basic.mov",
      "format": "video",
      "sha256": "e15f4d012f940498e3ad9f08d02d8d5ae24a1aced5a42ae87d00a37d3baa56e0",
      "bytes": 1610,
      "purpose": "MOV container parsing",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "iso-bmff+mediabunny"
      },
      "remover": {
        "status": "cleared",
        "method": "Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "majorBrand": "qt",
          "compatibleBrands": "qt",
          "duration": "0.300 s",
          "resolution": "64×48",
          "codec:avc1": "avc1",
          "software": "Lavf61.1.100",
          "containerName": "QuickTime File Format",
          "mediaDuration": "0.300 s",
          "displaySize": "64×48",
          "videoCodecName": "avc",
          "frameRate": "10.000 fps"
        }
      }
    },
    {
      "file": "pdf-basic.pdf",
      "format": "pdf",
      "sha256": "acde8a206066bef09a1bfbd4809987bf14485a66686a3a1ba921c4024999af91",
      "bytes": 916,
      "purpose": "PDF Info dictionary title, author, and creator",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "pdf-lib"
      },
      "remover": {
        "status": "cleared",
        "method": "PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "pdfVersion": "1.7",
          "pageCount": "1",
          "title": "CPK Basic Fixture",
          "author": "CPK Basic Author",
          "creator": "CreatorPrivacyKit Fixture",
          "producer": "pdf-lib",
          "creationDate": "2026-01-15T12:00:00Z",
          "modificationDate": "2026-09-24T07:18:26Z",
          "encrypted": "no"
        }
      }
    },
    {
      "file": "pdf-author.pdf",
      "format": "pdf",
      "sha256": "4e82022f8e18a0157e30c5e650350d1a51a9fe182c3ffa22f221419b30443eba",
      "bytes": 958,
      "purpose": "PDF author, subject, keywords, and dates",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "pdf-lib"
      },
      "remover": {
        "status": "cleared",
        "method": "PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "pdfVersion": "1.7",
          "pageCount": "1",
          "title": "Author Fixture",
          "author": "Ada Fixture",
          "subject": "Synthetic subject",
          "keywords": "synthetic metadata",
          "creator": "CreatorPrivacyKit Fixture",
          "producer": "pdf-lib",
          "creationDate": "2026-02-02T08:30:00Z",
          "modificationDate": "2026-02-03T09:45:00Z",
          "encrypted": "no"
        }
      }
    },
    {
      "file": "pdf-xmp.pdf",
      "format": "pdf",
      "sha256": "daee642ba00aea3a1a7d9446d1c5ba0841f55bbcfdbdaec46f108d4a1f38b2f1",
      "bytes": 1377,
      "purpose": "PDF XMP packet presence and dc:creator",
      "viewer": {
        "status": "ok",
        "detects": true,
        "parser": "pdf-lib"
      },
      "remover": {
        "status": "cleared",
        "method": "PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner."
      },
      "expected": {
        "status": "ok",
        "gps_present": false,
        "fields": {
          "pdfVersion": "1.7",
          "pageCount": "1",
          "title": "XMP Fixture",
          "author": "Info Author",
          "creator": "pdf-lib (https://github.com/Hopding/pdf-lib)",
          "producer": "pdf-lib (https://github.com/Hopding/pdf-lib)",
          "creationDate": "2026-09-24T07:18:26Z",
          "modificationDate": "2026-09-24T07:18:26Z",
          "xmpAuthor": "CPK XMP Author",
          "xmpPresent": "present",
          "encrypted": "no"
        }
      }
    },
    {
      "file": "pdf-clean.pdf",
      "format": "pdf",
      "sha256": "8027561d8991ccb107dc71266856f9d42d5bfcbfc57f7bebcfca9c30f6b1d3e2",
      "bytes": 447,
      "purpose": "PDF with no Info metadata",
      "viewer": {
        "status": "no_metadata",
        "detects": false,
        "parser": "pdf-lib"
      },
      "remover": {
        "status": "cleared",
        "method": "PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner."
      },
      "expected": {
        "status": "no_metadata",
        "gps_present": false,
        "fields": {
          "pdfVersion": "1.7",
          "pageCount": "1",
          "encrypted": "no"
        }
      }
    },
    {
      "file": "pdf-encrypted.pdf",
      "format": "pdf",
      "sha256": "132f8bd12ec04b65979aaaefc0dbb062cb4e02c6535469f3a6415baf65145715",
      "bytes": 506,
      "purpose": "Encrypted PDF is reported as encrypted, not as empty metadata",
      "viewer": {
        "status": "encrypted",
        "detects": false,
        "parser": "pdf-lib"
      },
      "remover": {
        "status": "not_tested",
        "method": "Encrypted PDFs are rejected by the local PDF editor."
      },
      "expected": {
        "status": "encrypted",
        "gps_present": false,
        "fields": {
          "pdfVersion": "1.4"
        }
      }
    }
  ]
}
