{
  "slug": "google-photos-ai-training",
  "publicDir": "ai-training",
  "question": "Does Google Photos train AI on my photos?",
  "method": "primary-docs + lab",
  "checkedAt": "2026-10-26",
  "tools": {
    "python": "3.9.6 (urllib, the fetcher in check.py)",
    "curl": "8.7.1",
    "sips": "sips-316 on macOS 27.0.1",
    "exiftool": "13.55",
    "node": "20.20.0",
    "sharp": "0.33.5 (libvips 8.15.3)",
    "blurhash": "2.0.5",
    "heic-convert": "2.1.0",
    "viallo_origin_main": "ed6a1ca1b83c8a71d77c4f175fd84c3526a155a8"
  },
  "properties": {
    "training": "What does the service's own page say about AI training on uploaded photos?",
    "can_read": "Can the provider read the uploaded files?"
  },
  "inputs": [
    "https://support.google.com/photos/answer/15344015",
    "https://support.google.com/photos/answer/6128838",
    "https://support.google.com/gemini/answer/15734842",
    "https://policies.google.com/privacy",
    "http://web.archive.org/web/20251206194957/https://support.google.com/photos/answer/15344015",
    "http://web.archive.org/web/20260222022953/https://support.google.com/photos/answer/15344015",
    "https://support.apple.com/en-gb/120320",
    "https://support.apple.com/en-us/102651",
    "https://ente.com/",
    "https://ente.com/privacy/",
    "https://proton.me/drive",
    "https://proton.me/drive/security",
    "https://proton.me/legal/privacy",
    "code:apps/api/src/photos/image-processing.service.ts",
    "code:apps/api/src/photos/photo-copies.ts",
    "code:apps/api/package.json",
    "code:apps/web/package.json",
    "https://images-assets.nasa.gov/image/KSC-20220119-PH-CSH01_0011/KSC-20220119-PH-CSH01_0011~orig.jpg",
    "https://images-assets.nasa.gov/image/S39-23-020/S39-23-020~orig.jpg"
  ],
  "results": [
    {
      "option": "Google Photos",
      "property": "training",
      "value": "No generative model trained outside Google Photos on Photos data; once Photos is connected to another Google service, Google may train on summaries, inferences and generated media based on the library",
      "quotes": [
        "We don't train any generative AI models outside of Google Photos with your personal data in Google Photos.",
        "In connecting to other Google services, Google may train on things like summaries, inferences, and generated media that are based on the contents of your Photos library."
      ],
      "url": "https://support.google.com/photos/answer/15344015"
    },
    {
      "option": "Google Photos",
      "property": "training_wording_2025_12_06",
      "value": "The archived copy from 6 December 2025 carries the older sentence and says nothing about summaries",
      "quotes": [
        "We don't train any generative AI models outside of Photos with your personal data, which includes other Gemini models and products."
      ],
      "absent": ["summaries, inferences"],
      "url": "http://web.archive.org/web/20251206194957/https://support.google.com/photos/answer/15344015"
    },
    {
      "option": "Google Photos",
      "property": "training_wording_2026_02_22",
      "value": "The archived copy from 22 February 2026 carries the current sentence and the summaries passage",
      "quotes": [
        "We don't train any generative AI models outside of Google Photos with your personal data in Google Photos.",
        "In connecting to other Google services, Google may train on things like summaries, inferences, and generated media that are based on the contents of your Photos library."
      ],
      "url": "http://web.archive.org/web/20260222022953/https://support.google.com/photos/answer/15344015"
    },
    {
      "option": "Google Photos",
      "property": "connect_availability",
      "value": "Google lists the countries and territories where Photos can be connected to the Gemini apps; no European Union member, Switzerland, the United Kingdom or Nigeria is on the list",
      "quotes": [
        "You can currently connect Google Photos to Gemini Apps in the following countries and territories only:"
      ],
      "segment": {
        "after": "in the following countries and territories only:",
        "before": "Zimbabwe",
        "absent": [
          "Austria", "Belgium", "Bulgaria", "Croatia", "Cyprus", "Czechia", "Denmark",
          "Estonia", "Finland", "France", "Germany", "Greece", "Hungary", "Ireland",
          "Italy", "Latvia", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Poland",
          "Portugal", "Romania", "Slovakia", "Slovenia", "Spain", "Sweden",
          "Switzerland", "United Kingdom", "Nigeria"
        ]
      },
      "url": "https://support.google.com/gemini/answer/15734842"
    },
    {
      "option": "Google Photos",
      "property": "can_read",
      "value": "Yes, automated analysis on Google's servers",
      "quotes": [
        "We use automated systems that analyze your content to provide you with things like customized search results, personalized ads, or other features tailored to how you use our services."
      ],
      "url": "https://policies.google.com/privacy"
    },
    {
      "option": "Apple (iCloud Photos)",
      "property": "training",
      "value": "Private personal data and interactions are never used to train Apple's foundation models unless the user explicitly opts in; the sentence is company-wide, not an iCloud Photos page",
      "quotes": [
        "Your private personal data and interactions are never used to train our foundation models unless you explicitly choose to help improve them."
      ],
      "url": "https://support.apple.com/en-gb/120320"
    },
    {
      "option": "Apple (iCloud Photos)",
      "property": "can_read",
      "value": "Yes by default; no with Advanced Data Protection on, except Shared Albums, which it does not cover",
      "quotes": [
        "The encryption keys from your trusted devices are secured in Apple data centers, so Apple can decrypt your data on your behalf whenever you need it",
        "the Shared Albums feature in Photos, and sharing content with \"anyone with the link,\" do not support Advanced Data Protection."
      ],
      "url": "https://support.apple.com/en-us/102651"
    },
    {
      "option": "Ente",
      "property": "training",
      "value": "No sentence about AI training on photos: the homepage shows the badge \"No Training\" beside \"No Ads\" and \"No Spying\"",
      "quotes": ["No Training"],
      "url": "https://ente.com/"
    },
    {
      "option": "Ente",
      "property": "can_read",
      "value": "No, by design: biometric data is derived and encrypted on the device",
      "quotes": [
        "The derivation of such Biometric Information happens only on your device, or on that of another user with whom you have shared your data with, and such Biometric Information is encrypted before such information leaves the device, so we do not have access to any Biometric Information."
      ],
      "url": "https://ente.com/privacy/"
    },
    {
      "option": "Proton Drive",
      "property": "training",
      "value": "No statement about training on uploaded files: the headline reads \"Keep your files safe and private\", with no training clause in it",
      "quotes": ["Keep your files safe and private"],
      "url": "https://proton.me/drive"
    },
    {
      "option": "Proton Drive",
      "property": "training_policy",
      "value": "The privacy policy's only sentence about training names Proton Scribe, a different product",
      "quotes": ["Proton Scribe does not use content data or any of your data to train its models."],
      "url": "https://proton.me/legal/privacy"
    },
    {
      "option": "Proton Drive",
      "property": "can_read",
      "value": "No, by design",
      "quotes": [
        "Our end-to-end encryption means no one, not even Proton, can access your files and folders or see their names without your permission."
      ],
      "url": "https://proton.me/drive/security"
    },
    {
      "option": "Viallo",
      "property": "training",
      "value": "No AI or machine-learning step on upload: the processing call returns the original's metadata, a thumbnail and a blurhash, and the display copy is a plain resize",
      "quotes": ["return { originalMetadata, thumbnail, blurhash };"],
      "url": "code:apps/api/src/photos/image-processing.service.ts"
    },
    {
      "option": "Viallo",
      "property": "can_read",
      "value": "Yes, server-side processing",
      "quotes": ["Display rendition: EXIF baked upright, long-edge-bounded, no enlargement, plain JPEG."],
      "url": "code:apps/api/src/photos/image-processing.service.ts"
    },
    {
      "option": "Viallo",
      "property": "ml_dependency",
      "value": "No machine-learning runtime in either app's dependency list",
      "quotes": ["\"sharp\""],
      "absent": [
        "tensorflow", "onnxruntime", "@xenova/transformers", "openai", "@anthropic-ai",
        "@google/generative-ai", "replicate", "cohere", "huggingface", "face-api",
        "rekognition", "moderation"
      ],
      "url": "code:apps/api/package.json"
    },
    {
      "option": "Viallo",
      "property": "ml_dependency_web",
      "value": "No machine-learning runtime in the web app's dependency list",
      "quotes": ["\"next\""],
      "absent": [
        "tensorflow", "onnxruntime", "@xenova/transformers", "openai", "@anthropic-ai",
        "@google/generative-ai", "replicate", "cohere", "huggingface", "face-api",
        "rekognition", "moderation"
      ],
      "url": "code:apps/web/package.json"
    }
  ],
  "lab": {
    "what": "The test photo put through Viallo's upload pipeline, and the perceptual hash compared across three pairs of files.",
    "input_recipe": [
      "curl https://images-assets.nasa.gov/image/KSC-20220119-PH-CSH01_0011/KSC-20220119-PH-CSH01_0011~orig.jpg",
      "sips -c 5120 3840 src.jpg --out crop.jpg",
      "sips -z 4032 3024 -s formatOptions 90 crop.jpg --out photo-12mp.jpg",
      "exiftool -all= photo-12mp.jpg, then Make=Apple, Model=iPhone 15 Pro, DateTimeOriginal=2026:10:25 09:30:00, GPS 28.586 N 80.651 W, Orientation=1",
      "sips -z 1512 2016 -s formatOptions 60 photo-12mp.jpg --out copy.jpg",
      "sips -z 1008 756 -s formatOptions 30 photo-12mp.jpg --out copy-hard.jpg",
      "sips -z 6048 8064 -s format heic crop.jpg --out photo-48mp.heic",
      "curl https://images-assets.nasa.gov/image/S39-23-020/S39-23-020~orig.jpg --out other.jpg (a different photograph, 4096 x 2688, used as it downloads)"
    ],
    "inputs": {
      "src.jpg": { "url": "https://images-assets.nasa.gov/image/KSC-20220119-PH-CSH01_0011/KSC-20220119-PH-CSH01_0011~orig.jpg", "bytes": 19910376, "sha256": "6350f1f9bca929dce6584857c4d5370152c9550321a75e68a57421dfe0bb6d22" },
      "photo-12mp.jpg": { "bytes": 4903332, "sha256": "f067462c22d00aaeed2e216ae80ec61d96d398ccf0a566e0ab659f6d3f6a1b91" },
      "copy.jpg": { "bytes": 392320, "sha256": "7841dfd5043c882f063e7f0f5202e99b044ed13d570dbda3810508e3b7ed5a51" },
      "copy-hard.jpg": { "bytes": 34653, "sha256": "64b70c1a49130cd1820b5cc6c2b5a80a99bc1942996d8e0b047ce52970eda163" },
      "photo-48mp.heic": { "bytes": 6922145, "sha256": "2d50b97f27b4a69bcc6823f64ee153d0057a6b4916c42bd1779169f0edecf1ca" },
      "other.jpg": { "url": "https://images-assets.nasa.gov/image/S39-23-020/S39-23-020~orig.jpg", "bytes": 3076161, "sha256": "e568f00a865bc75bdef14e05a5ef6de94cc01683e6569d03b752f9cd141d8923" }
    },
    "measured": {
      "original": { "width": 3024, "height": 4032, "format": "jpeg", "bytes": 4903332 },
      "thumbnail": { "width": 300, "height": 400, "format": "webp", "bytes": 10420 },
      "display": { "width": 1536, "height": 2048, "format": "jpeg", "bytes": 380536 },
      "blurhash": { "value": "L868Q]e8EmOa.AnNNeOG4otRw@WA", "length": 28 },
      "perceptual_hash": { "value": "868f6971b0be4e49", "bits": 64 },
      "distance_copy_half_size_q60": 0,
      "distance_copy_756x1008_q30": 2,
      "distance_other_photo": 34,
      "heic": {
        "heic_bytes": 6922145,
        "jpeg_bytes": 12220491,
        "jpeg_width": 8064,
        "jpeg_height": 6048,
        "display_bytes": 363766,
        "thumbnail_bytes": 11028
      }
    },
    "as_published": {
      "note": "The post's rendering of the values above, so every number in the evidence section is found here character for character.",
      "original": "Stored as uploaded: 3024 x 4032 JPEG, 4,903,332 bytes",
      "thumbnail": "300 x 400 WebP, 10,420 bytes",
      "display": "1536 x 2048 JPEG, 380,536 bytes",
      "blurhash": "28 characters",
      "perceptual_hash": "64 bits, 868f6971b0be4e49",
      "copy_2016x1512_q60": "A copy resized to 2016 x 1512 at JPEG quality 60 (392,320 bytes) produced the identical 64 bits",
      "copy_756x1008_q30": "A small, heavily recompressed copy (756 x 1008, 34,653 bytes) came out 2 bits away",
      "other_photo": "A different photograph, an aurora seen from orbit, came out 34 bits away",
      "heic": "The 48 MP HEIC in the same run (6,922,145 bytes) came out of that conversion step as a 12,220,491-byte JPEG, and its display copy was 2048 x 1536 at 363,766 bytes"
    }
  },
  "notes": [
    "Proton Drive's headline is served in more than one variant. Eight consecutive fetches on 26 October 2026 all returned \"Keep your files safe and private\" with no training clause, so the post's row records what the page said today and not a promise Proton may make elsewhere. check.py reads the same headline, which every variant begins with, and reads the privacy policy for the only sentence that mentions training.",
    "Ente publishes no sentence about AI training on photos. Its homepage shows a three-word badge, \"No Training\", in a row with \"No Ads\" and \"No Spying\", and https://ente.com/privacy/ places biometric derivation on the device. The post's Ente row says exactly that and no more.",
    "Apple's training sentence comes from a page about Applebot and Apple's foundation models (published 9 September 2026), not from an iCloud Photos storage policy. Apple publishes no sentence specific to iCloud Photos, so the post's cell says the statement is company-wide.",
    "Google's ad promise is unqualified at the top of the privacy hub and qualified further down: \"Your personal data in Photos is never used for ads, unless you choose to make data from Google Photos available to third party or other Google services that support ads.\" The post quotes the promise and treats connected services as its limit, which matches the page's own structure.",
    "Google publishes no page stating that Photos is not end-to-end encrypted. The can_read cell rests on the Google Privacy Policy sentence about automated analysis of content.",
    "The two archived copies of the Google page are the check of the dated claim. The copy from 6 December 2025 has the older sentence, \"We don't train any generative AI models outside of Photos with your personal data, which includes other Gemini models and products\", and the phrase \"summaries, inferences\" is absent from it; the copy from 22 February 2026 has the current sentence and the summaries passage. The Internet Archive holds no November 2025 or January 2026 snapshot of that URL, so the post dates the two copies it can show, not the change itself.",
    "The country list for connecting Photos to the Gemini apps is checked as a segment of the page, from the sentence that introduces it to the last name on it (Zimbabwe): every European Union member, Switzerland, the United Kingdom and Nigeria is absent from it. Names are matched on word boundaries, so Austria is not matched by Australia and Nigeria not by Niger. The page does list \"United States (except some regions)\".",
    "Viallo's ml_dependency rows check for the absence of a named list of ML runtimes and SDKs in each app's package.json. That is a dependency check, not proof that no model is called over the network.",
    "Not checked: whether Google Photos has a setting that stops object and scene analysis. The face-grouping page shows the switch for face grouping and no page states the absence of further switches, so the post says only what the face page documents.",
    "The lab runs the pipeline functions as they stand in apps/api/src/photos, copied into check.py's helper and called with the same parameters: sharp resize 400x400 fit-inside without enlargement, WebP quality 85, blurhash encode from a 32x32 thumbnail at 4x3 components, display long edge 2048 at JPEG quality 82, and photo-copies.ts's 32x32 greyscale DCT hash. It does not start the Nest application, so a step outside these functions is not covered. The inputs are rebuilt by check.py and hashed, which is how a change in the build is caught.",
    "The unrelated-photo distance uses a different NASA photograph, an aurora image (S39-23-020), not a photo of anyone's. No photo, album or share link belonging to another person was opened, and no service was signed in to.",
    "The HEIC figures are the conversion step only: heic-convert at quality 0.92, the call processAll makes before sharp sees the file. The API then re-encodes the result into sRGB when the HEIC carries an ICC profile (convertToSrgb in image-processing.service.ts) and stores that JPEG in place of the HEIC, so a production file can differ in size from the 12,220,491 bytes measured here. That step is not reproduced.",
    "Prices are not part of this check; the post states none."
  ]
}
