{
  "id": 4981657,
  "title": "How On-Device Sensitive Photo Scanning Works",
  "url": "https://urgent.news/2026/09/02/how-on-device-sensitive-photo-scanning-works",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-02T00:59:33.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/dmytropolianskyi/how-on-device-sensitive-photo-scanning-works-5e3c"
  },
  "original_language": "en",
  "account": "When a photo scanner app seeks permission to examine a user's library of images and videos, it must first obtain the necessary authorization. On both iPhone and iPad devices, the app requires Photos permission to access the items it is tasked with classifying. On Mac systems, the process may utilize the Photos library or folders explicitly chosen by the user. Granting permission is essential, but it doesn't clarify where the media ultimately goes after the app requests access.\n\nThe key aspect of an on-device workflow is that it keeps everything within the device itself. Instead of uploading photos or videos to remote servers for classification, the app provides local image or video data to a model running on the iPhone, iPad, or Mac. The model generates a score or assigns a category, which is then used to create a review queue for the user to inspect. Sensitivity, a specific app mentioned in the source, does not transfer the media to its servers for classification, even if iCloud is involved. Apple Photos may keep a local copy of the item while retaining the original in iCloud storage.\n\nIf a scan requests an item that resides solely in iCloud, Photos may download it to the device as part of the iCloud transfer, but this is not an upload from the scanner to its developer. The results of the classification process should also be securely protected. Although local classification can potentially expose private information if the result list is compromised, Sensitivity addresses this concern by placing the review behind device authentication and storing scan state locally. The analytics features of Sensitivity do not include media contents, thumbnails, filenames, album names, media identifiers, or detection results.\n\nTo ensure privacy, several questions should be addressed in any app's privacy policy related to on-device photo scanning. These include whether photos or videos are uploaded for classification, whether an account is required, whether analytics events contain media identifiers or classifications, where result lists and scan progress are stored, and if the app can automatically hide, move, or delete media. Moreover, it's important to consider what happens when an item exists only in iCloud and the limitations of local detection models. While local processing provides benefits such as reduced manual review sets and keeping all decisions with the user, it is crucial to remember that processing location and model accuracy are distinct. A local detector might still flag ordinary media and overlook private content, and video sampling can miss critical moments between frames.\n\nIn conclusion, local classification without media uploads, protected results, and an explicit human-review requirement serve as useful boundaries for any app claiming to classify private media on device. By understanding and adhering to these principles, developers can build privacy-preserving photo scanning applications that respect user privacy and minimize potential risks.",
  "summary": "“Local” should describe a data path, not a marketing mood. Here is what to verify before allowing a scanner to inspect a photo library. Permission opens the library to the app On iPhone and iPad, a scanner needs Photos permission to read the items it is asked to classify. On Mac, a workflow may use the Photos library or folders a person explicitly selects. Permission is necessary for the job, but…",
  "key_points": [
    "App requires Photos permission for image/video scanning",
    "On-device workflow keeps data within device",
    "Sensitivity doesn't upload media to servers"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}