{
  "slug": "proton-drive-photos-privacy",
  "method": "primary-docs",
  "secondaryMethod": "source code read",
  "checkedAt": "2026-10-26",
  "question": "Is Proton Drive good for storing private photos, and how does it compare?",
  "tools": {
    "curl": "8.7.1",
    "python": "3.9.6 (urllib, html.parser, gzip, tarfile, hashlib)",
    "git": "sparse checkout of ProtonMail/WebClients at df5c7ae76a454a68812ab1a9a6fe3e6450a96b72",
    "npm registry": "@protontech/drive-sdk 0.23.0 tarball"
  },
  "inputs": [
    "https://one.google.com/about/plans",
    "https://proton.me/blog/drive-sdk-january-2026",
    "https://proton.me/drive/pricing",
    "https://proton.me/l/private-cloud-storage",
    "https://proton.me/support/drive-album-share-manage",
    "https://proton.me/support/drive-photo-filters",
    "https://proton.me/support/drive-shareable-link",
    "https://proton.me/support/enable-photo-backup",
    "https://proton.me/support/photo-backup-encryption",
    "https://support.apple.com/en-us/108047",
    "https://support.apple.com/en-us/108306",
    "https://support.apple.com/en-us/108756",
    "https://support.apple.com/en-us/guide/icloud-iphone/mm93a9b98683/icloud",
    "https://support.apple.com/guide/iphone/browse-photos-and-videos-by-location-iph390138909/ios",
    "https://support.google.com/photos/answer/15344015?hl=en",
    "https://support.google.com/photos/answer/6131416?hl=en",
    "https://support.google.com/photos/answer/6153599?hl=en&co=GENIE.Platform%3DAndroid",
    "https://support.google.com/photos/answer/6220791",
    "https://viallo.app/",
    "https://viallo.app/pricing",
    "https://viallo.app/privacy",
    "https://www.apple.com/privacy/",
    "https://www.google.com/photos/about/",
    "https://github.com/ProtonMail/WebClients at commit df5c7ae76a454a68812ab1a9a6fe3e6450a96b72 (committed 2026-10-23)",
    "https://raw.githubusercontent.com/ProtonMail/WebClients/df5c7ae76a454a68812ab1a9a6fe3e6450a96b72/packages/drive/modules/extendedAttributes/metadataBuilder/metadataBuilder.ts",
    "https://raw.githubusercontent.com/ProtonMail/WebClients/df5c7ae76a454a68812ab1a9a6fe3e6450a96b72/packages/drive/modules/extendedAttributes/exifParser/exifParser.ts",
    "https://raw.githubusercontent.com/ProtonMail/WebClients/df5c7ae76a454a68812ab1a9a6fe3e6450a96b72/packages/drive/modules/upload/execution/PhotosUploadExecutor.ts",
    "https://raw.githubusercontent.com/ProtonMail/WebClients/df5c7ae76a454a68812ab1a9a6fe3e6450a96b72/packages/drive/modules/upload/utils/createFileStream.ts",
    "https://registry.npmjs.org/@protontech/drive-sdk/-/drive-sdk-0.23.0.tgz"
  ],
  "results": [
    {
      "option": "Proton Drive",
      "cells": {
        "free_storage": {
          "value": "5 GB",
          "quote": "5 GB of storage, photos and documents",
          "url": "https://proton.me/drive/pricing",
          "extra": []
        },
        "price_entry": {
          "value": "200 GB at $4.99/month; Proton Unlimited 500 GB + VPN at $12.99/month",
          "quote": "200 GB $4.99/month Get Drive Plus",
          "url": "https://proton.me/drive/pricing",
          "extra": [
            {
              "quote": "500 GB + VPN $12.99/month Get Proton Unlimited",
              "url": "https://proton.me/drive/pricing"
            }
          ]
        },
        "encryption": {
          "value": "End-to-end, on by default; photo creation date is not encrypted",
          "quote": "Thanks to our zero-access and end-to-end encryption, not even Proton can view or edit your files.",
          "url": "https://proton.me/drive/pricing",
          "extra": [
            {
              "quote": "Your photos, along with all important metadata, are encrypted to ensure that your data remains private and only accessible to you.",
              "url": "https://proton.me/support/photo-backup-encryption"
            },
            {
              "quote": "However, photo creation date metadata is not encrypted, to allow sorting of photos in a chronological order and provide a smooth navigation within the app.",
              "url": "https://proton.me/support/photo-backup-encryption"
            }
          ]
        },
        "ai_training": {
          "value": "Proton says it can't use your data to train AI",
          "quote": "Can't use your data to train AI",
          "url": "https://proton.me/l/private-cloud-storage",
          "extra": []
        },
        "compression": {
          "value": "None on mobile photo backup: original quality",
          "quote": "automatically back up the photos on your mobile device in their original quality and with end-to-end encryption using our photo backup feature",
          "url": "https://proton.me/support/enable-photo-backup",
          "extra": []
        },
        "share_without_account": {
          "value": "Files and folders by public link; albums only with other Proton users (up to 100)",
          "quote": "Recipients don't need a Proton Account to open a public link, view or download a file, edit a document or a spreadsheet, or upload items to a shared folder.",
          "url": "https://proton.me/support/drive-shareable-link",
          "extra": [
            {
              "quote": "At the moment, you can only share albums with other Proton users. Public link sharing is coming soon.",
              "url": "https://proton.me/support/drive-album-share-manage"
            },
            {
              "quote": "You can share an album with up to 100 Proton users.",
              "url": "https://proton.me/support/drive-album-share-manage"
            }
          ]
        },
        "location_grouping": {
          "value": "No place view: GPS is stored encrypted, but no web photos screen reads it and the filters have no place filter",
          "quote": "You can filter your photos by: All (default view) Favorites Video Raw Live (iOS only) Burst (iOS only)",
          "url": "https://proton.me/support/drive-photo-filters",
          "extra": [
            {
              "quote": "Location: gps?.Latitude && gps?.Longitude",
              "url": "https://raw.githubusercontent.com/ProtonMail/WebClients/df5c7ae76a454a68812ab1a9a6fe3e6450a96b72/packages/drive/modules/extendedAttributes/metadataBuilder/metadataBuilder.ts"
            }
          ]
        }
      }
    },
    {
      "option": "Google Photos",
      "cells": {
        "free_storage": {
          "value": "15 GB shared with Gmail and Drive",
          "quote": "Every Google Account comes with 15 GB of storage for Google Photos, Gmail, and Google Drive.",
          "url": "https://www.google.com/photos/about/",
          "extra": []
        },
        "price_entry": {
          "value": "100 GB at $1.99/month (Google One Basic, USD)",
          "quote": "\"price\": \"1.99\", \"priceCurrency\": \"USD\"",
          "url": "https://one.google.com/about/plans",
          "extra": [
            {
              "quote": "The Google One Basic plan offers 100 GB of cloud storage",
              "url": "https://one.google.com/about/plans"
            }
          ]
        },
        "encryption": {
          "value": "Encryption in transit and at rest; no end-to-end option stated",
          "quote": "protecting your photos and videos with secure infrastructure and data encryption both in transit and at rest",
          "url": "https://www.google.com/photos/about/",
          "extra": []
        },
        "ai_training": {
          "value": "No generative AI training outside Photos on Photos data; may train on summaries and inferences from the library",
          "quote": "We don't train any generative AI models outside of Google Photos with your personal data in Google Photos.",
          "url": "https://support.google.com/photos/answer/15344015?hl=en",
          "extra": [
            {
              "quote": "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?hl=en"
            }
          ]
        },
        "compression": {
          "value": "Your choice: Original quality keeps the file, Storage saver compresses to 16 MP",
          "quote": "Photos and videos are stored in the same resolution that you took them with no change to their quality.",
          "url": "https://support.google.com/photos/answer/6220791",
          "extra": [
            {
              "quote": "Photos are compressed to save space. If a photo is larger than 16 MP, it'll be resized to 16 MP.",
              "url": "https://support.google.com/photos/answer/6220791"
            }
          ]
        },
        "share_without_account": {
          "value": "Yes: anyone with the link can view",
          "quote": "When you share a link to your photos, anyone with the link can view them.",
          "url": "https://support.google.com/photos/answer/6131416?hl=en",
          "extra": []
        },
        "location_grouping": {
          "value": "Yes: Places collection and a map view",
          "quote": "To find your photos grouped by location: Tap Collections Places.",
          "url": "https://support.google.com/photos/answer/6153599?hl=en&co=GENIE.Platform%3DAndroid",
          "extra": []
        }
      }
    },
    {
      "option": "iCloud",
      "cells": {
        "free_storage": {
          "value": "5 GB",
          "quote": "iCloud keeps your information safe, automatically backed up, and available anywhere you go - with 5 GB of storage for free.",
          "url": "https://support.apple.com/en-us/108047",
          "extra": []
        },
        "price_entry": {
          "value": "50 GB at $0.99/month (United States)",
          "quote": "United States4 (USD) $0.99 $2.99 $9.99 $29.99 $59.99",
          "url": "https://support.apple.com/en-us/108047",
          "extra": [
            {
              "quote": "iCloud+ with 50 GB storage",
              "url": "https://support.apple.com/en-us/108047"
            }
          ]
        },
        "encryption": {
          "value": "End-to-end for Photos only with Advanced Data Protection, which is optional",
          "quote": "Advanced Data Protection for iCloud is an optional setting that offers Apple's highest level of cloud data security.",
          "url": "https://support.apple.com/en-us/108756",
          "extra": [
            {
              "quote": "the majority of your iCloud data - including iCloud Backup, Photos, Notes, and more - is protected using end-to-end encryption",
              "url": "https://support.apple.com/en-us/108756"
            }
          ]
        },
        "ai_training": {
          "value": "Face and scene detection run on device; the page does not address training",
          "quote": "Photos is also designed so that the face recognition and scene and object detection - which power features like For You, Memories, Sharing Suggestions, and the People album - happen on device instead of in the cloud.",
          "url": "https://www.apple.com/privacy/",
          "extra": []
        },
        "compression": {
          "value": "None: iCloud Photos uploads at full resolution",
          "quote": "If you use iCloud Photos, your photos and videos automatically upload to iCloud at full resolution.",
          "url": "https://support.apple.com/en-us/108306",
          "extra": []
        },
        "share_without_account": {
          "value": "Yes: an iCloud Link opens for anyone and expires after 30 days",
          "quote": "You can share photos and videos in Photos on iCloud.com with an iCloud Link. Anyone with the link can view them.",
          "url": "https://support.apple.com/en-us/guide/icloud-iphone/mm93a9b98683/icloud",
          "extra": [
            {
              "quote": "iCloud Links automatically expire after 30 days, but you can stop sharing them sooner.",
              "url": "https://support.apple.com/en-us/guide/icloud-iphone/mm93a9b98683/icloud"
            }
          ]
        },
        "location_grouping": {
          "value": "Yes: Photos on iPhone groups by place and has a map view",
          "quote": "The Photos app creates collections of your photos and videos based on where they were taken.",
          "url": "https://support.apple.com/guide/iphone/browse-photos-and-videos-by-location-iph390138909/ios",
          "extra": [
            {
              "quote": "Only pictures and videos that have embedded location information (GPS data) are included.",
              "url": "https://support.apple.com/guide/iphone/browse-photos-and-videos-by-location-iph390138909/ios"
            }
          ]
        }
      }
    },
    {
      "option": "Viallo",
      "cells": {
        "free_storage": {
          "value": "10 GB, 2 albums, 200 photos",
          "quote": "2 albums 200 photos 10 GB of storage",
          "url": "https://viallo.app/pricing",
          "extra": []
        },
        "price_entry": {
          "value": "Plus 200 GB at $5.83/month billed yearly ($69.99/year)",
          "quote": "annual: { usd: 69.99, eur: 69.99, gbp: 59.99, aud: 99.99 },",
          "url": "repo:packages/shared/src/subscription/currency.ts",
          "extra": [
            {
              "quote": "20 albums 5,000 photos 200 GB of storage",
              "url": "https://www.viallo.app/pricing"
            }
          ]
        },
        "encryption": {
          "value": "Encryption in transit (TLS); no end-to-end encryption",
          "quote": "Encryption of data in transit (HTTPS/TLS)",
          "url": "https://viallo.app/privacy",
          "extra": []
        },
        "ai_training": {
          "value": "None",
          "quote": "Viallo itself does not use AI to process, analyze, or organize your photos, and never uses your photos for AI training.",
          "url": "https://viallo.app/privacy",
          "extra": []
        },
        "compression": {
          "value": "None: originals kept at full resolution",
          "quote": "Originals kept at full resolution.",
          "url": "https://viallo.app/",
          "extra": []
        },
        "share_without_account": {
          "value": "Yes: anyone with the link views the gallery, no account",
          "quote": "Anyone with the link can view your photos immediately - no account needed.",
          "url": "https://viallo.app/",
          "extra": []
        },
        "location_grouping": {
          "value": "Yes: places, visits and a map view",
          "quote": "Viallo reads GPS data from your photos and groups them into places and visits automatically.",
          "url": "https://viallo.app/",
          "extra": [
            {
              "quote": "Map View",
              "url": "https://viallo.app/"
            }
          ]
        }
      }
    }
  ],
  "claims": [
    {
      "claim": "Proton's unified Drive SDK post is dated 29 January 2026",
      "quote": "Published on January 29, 2026",
      "url": "https://proton.me/blog/drive-sdk-january-2026"
    },
    {
      "claim": "The speed figures are up to 60% faster iOS uploads, 30% faster web uploads and 70% faster web downloads",
      "quote": "Proton Drive apps now feature up to 60% faster uploads on iOS and 30% faster uploads and 70% faster downloads on web.",
      "url": "https://proton.me/blog/drive-sdk-january-2026"
    },
    {
      "claim": "The move to the SDK runs through 2026",
      "quote": "Over the course of 2026, we'll migrate all existing Proton Drive features to the SDK, and build all new features on top of it.",
      "url": "https://proton.me/blog/drive-sdk-january-2026"
    },
    {
      "claim": "Album editors add photos, which count against the owner's storage",
      "quote": "Editor access lets others add photos to your album, and those photos will count against your storage space.",
      "url": "https://proton.me/support/drive-album-share-manage"
    },
    {
      "claim": "Photo filters cannot be set by hand",
      "quote": "You can't manually tag photos with filters or create custom ones.",
      "url": "https://proton.me/support/drive-photo-filters"
    },
    {
      "claim": "Filters are assigned on the device",
      "quote": "Filters are added automatically based on the photo type and processed on your device.",
      "url": "https://proton.me/support/drive-photo-filters"
    },
    {
      "claim": "Photo backup exists for Android and iOS",
      "quote": "This article explains how to enable photo backup for your Android and iOS device.",
      "url": "https://proton.me/support/enable-photo-backup"
    },
    {
      "claim": "Proton's address is in Geneva, Switzerland",
      "quote": "Route de la Galaise 32 1228 Plan-les-Ouates Geneva, Switzerland",
      "url": "https://proton.me/support/drive-shareable-link"
    },
    {
      "claim": "Proton Unlimited includes 500 GB",
      "quote": "500 GB of storage",
      "url": "https://proton.me/drive/pricing"
    }
  ],
  "code": {
    "repository": "https://github.com/ProtonMail/WebClients",
    "commit": "df5c7ae76a454a68812ab1a9a6fe3e6450a96b72",
    "files": [
      {
        "finding": "The web client reads EXIF on the device and puts GPS latitude and longitude into the file's extended attributes",
        "file": "packages/drive/modules/extendedAttributes/metadataBuilder/metadataBuilder.ts",
        "strings": [
          "Location:",
          "gps?.Latitude && gps?.Longitude",
          "Device: exif.Model.value[0]",
          "CaptureTime: getCaptureDateTimeString(exif)"
        ]
      },
      {
        "finding": "EXIF is parsed in the browser with the exifreader library",
        "file": "packages/drive/modules/extendedAttributes/exifParser/exifParser.ts",
        "strings": [
          "import ExifReader from 'exifreader';",
          "ExifReader.load("
        ]
      },
      {
        "finding": "The photo upload sends the extended attributes as metadata and streams the original file, not a re-encoded copy",
        "file": "packages/drive/modules/upload/execution/PhotosUploadExecutor.ts",
        "strings": [
          "additionalMetadata: metadata,",
          "const stream = createFileStream(task.file);",
          "uploader.uploadFromStream(stream, thumbnails"
        ]
      },
      {
        "finding": "The stream is the file's own bytes, sliced into 4 MB blocks",
        "file": "packages/drive/modules/upload/utils/createFileStream.ts",
        "strings": [
          "const blob = file.slice(offset, end);",
          "chunkSize: number = 4 * 1024 * 1024"
        ]
      }
    ],
    "absent": {
      "finding": "No file in the web client's photos section reads latitude, longitude or a location field",
      "dir": "applications/drive/src/app/photos",
      "pattern": "Latitude|Longitude|\\.location\\b|location\\?\\."
    },
    "sdk": {
      "url": "https://registry.npmjs.org/@protontech/drive-sdk/-/drive-sdk-0.23.0.tgz",
      "version": "0.23.0",
      "sha256": "9bf48afadd3d9c7cf03cf20ca39332fa539320fad33a1997fa8d569d1b7fbfd4",
      "why": "WebClients pins '@protontech/drive-sdk': ^0.23.0 in pnpm-workspace.yaml at the commit read; 0.23.0 is the newest published version (19 October 2026)",
      "findings": [
        {
          "finding": "The SDK encrypts the extended attributes (which carry the GPS and camera fields) with the file's key before upload",
          "file": "package/dist/internal/upload/cryptoService.js",
          "strings": [
            "const { armoredExtendedAttributes } = await this.driveCrypto.encryptExtendedAttributes(extendedAttributes, nodeRevisionDraftKeys.key"
          ]
        },
        {
          "finding": "OpenPGP encryption and signing of those attributes",
          "file": "package/dist/crypto/driveCrypto.js",
          "strings": [
            "async encryptExtendedAttributes(extendedAttributes, encryptionKey, signingKey)",
            "this.openPGPCrypto.encryptAndSignArmored("
          ]
        },
        {
          "finding": "The capture time goes to the server as a plain Unix timestamp beside the encrypted attributes, and the separate Exif field is sent empty",
          "file": "package/dist/internal/photos/upload.js",
          "strings": [
            "XAttr: options.armoredExtendedAttributes || null,",
            "CaptureTime: photo.captureTime ? Math.floor(photo.captureTime?.getTime() / 1000) : 0,",
            "Exif: null"
          ]
        },
        {
          "finding": "Each 4 MB block of the file is encrypted before it is sent",
          "file": "package/dist/internal/upload/streamUploader.js",
          "strings": [
            "encryptedBlock = await this.cryptoService.encryptBlock("
          ]
        }
      ]
    }
  },
  "notes": [
    "No Proton Drive account was used. On 25 October 2026 Proton refused the automated sign-up with \"We are detecting potentially abusive traffic coming from your network and have blocked any further signups\" (API code 2028), so nothing was uploaded, timed, downloaded or compared byte for byte, and no public link was opened.",
    "The code read covers the web client and the shared SDK only. Proton's iOS and Android apps were not read, so the location finding is about the web app.",
    "That the web client streams the original file bytes means the EXIF block, GPS included, stays inside the encrypted file; it was not confirmed by downloading a file back.",
    "Google One prices render in the visitor's local currency (THB from this machine). The USD figure is the page's own schema.org JSON-LD, checked against the raw HTML.",
    "iCloud's 200 GB tier ($2.99) is in the same table row on Apple's page; the table shows only the 50 GB entry tier.",
    "Viallo's pricing page shows the Plus plan as $5.83/month billed yearly. The monthly-billed price is not on that page and is not used here.",
    "2026-11-04: viallo.app/pricing shows prices in the visitor's currency, so from the EU runner it showed EUR and the three USD quotes failed the 2026-11-02 recheck. The Plus price is now read from REGIONAL_AMOUNTS in packages/shared/src/subscription/currency.ts (USD 69.99 a year, mirroring the Stripe price; $5.83/month is that figure divided by 12), and the pricing page is quoted for the plan limits only. No value in the post changed.",
    "Not checked: the strength of Swiss privacy law, Switzerland's position outside the EU and Five Eyes, Google's handling of government requests, any independent audit of Proton Drive's cryptography, whether Proton lets an owner edit a photo's date, location or description, and comments on photos. The post makes none of these claims.",
    "Google Photos location data was read from the Android version of the help page; Apple's from the iPhone User Guide for the current iOS."
  ]
}
