Meet EXIF Reader: The ExifTool-Grade Android App That Unmasks AI Workflows and Protects Your Privacy

Every picture tells a story—but behind the pixels lies another story altogether.

Whenever you snap a photo with your smartphone or digital camera, your device silently stamps dozens of hidden data fields into the file: your exact GPS coordinates (pinpointing your home or workplace), camera model, lens serial number, exposure parameters, software versions, and timestamps.

And in today’s generative AI era, digital art created with ComfyUI, Stable Diffusion (Automatic1111 / Forge), Fooocus, or NovelAI embeds complete recipes directly into the image: prompts, negative prompts, checkpoint model names, samplers, seeds, and even sprawling node-graph JSON workflows.

For years, inspecting or stripping this metadata on a desktop computer was straightforward with legendary utilities like Phil Harvey’s ExifTool. But on mobile? Most Android EXIF viewers were ad-riddled, clunky, demanded intrusive storage permissions, failed to decompress custom PNG chunks (zTXt, iTXt), and had zero understanding of AI generation workflows. Even worse, many generic “EXIF remover” apps suffer from a notorious bug: when stripping EXIF headers, they erase orientation flags without correcting the pixel matrix, turning your portrait photos sideways or upside down!

To solve this, we engineered EXIF Reader & Privacy Sanitizer for Android—a native, modern application built from scratch with Kotlin 2.0 and Jetpack Compose (Material 3).

In this post, we’ll dive into how EXIF Reader works, the technical innovations under the hood, and how it empowers both digital creators and privacy-conscious users.


🌟 What Makes EXIF Reader Different?

EXIF Reader was designed with three core philosophies:

  1. ExifTool-Grade Depth: If the metadata is in the byte stream, we find it and decode it—even compressed or vendor-specific chunks.
  2. First-Class AI Art Support: Native reverse-engineering of modern AI workflows (ComfyUI node graphs, A1111 prompts, Fooocus/NovelAI JSON).
  3. Flawless Privacy Sanitization: Stripping 100% of metadata while preserving correct orientation and avoiding filename leaks.

Here is a quick snapshot of how it stacks up against standard mobile viewers:

CapabilityStandard Android ViewersEXIF Reader & Sanitizer
EXIF & Camera Hardware TagsBasic (ISO, Shutter, Aperture)Full SubIFD, MakerNotes, Serial Numbers
GPS & GeolocationLat/Long display onlyFull Coordinates, Altitude, Timestamp
PNG Compressed Chunks (zTXt, iTXt)❌ Ignored or Unsupported✅ Built-in Zlib Stream Decompression
ComfyUI Node Graph Parser❌ None✅ Graph traversal (KSampler, Model, Prompt, Seed)
Stable Diffusion / A1111 Strings❌ Raw Dump or Not Shown✅ Clean structured key-value parsing
Orientation Correction on Strip❌ Often rotates sideways✅ Matrix transformed before strip
Anonymity Filename Generator❌ Preserves original name✅ Randomized hex filename (clean_*.jpg)
Android Permissions RequiredInvasive (Storage / Media files)Zero permissions on Android 10+ (Photo Picker)

🔍 Deep-Dive: Core Features

1. 🔬 ExifTool-Grade Metadata Inspection

Whether you are a professional photographer auditing lens calibrations or an investigator analyzing an image’s origin, EXIF Reader categorizes metadata across dozens of clear directories:

  • 📍 GPS & Geolocation: Exact Latitude, Longitude, Altitude, GPS time stamp, and satellites.
  • 📷 Camera Hardware & Lens Profiles: Manufacturer, camera body model, lens model, firmware version, and camera serial numbers.
  • ⚙️ Exposure & Capture Settings: ISO, shutter speed, f-number (aperture), focal length, 35mm equivalent focal length, exposure compensation bias, metering modes, flash status, and white balance.
  • 🖼️ Image & Print Properties: Pixel dimensions, bit depth, color space, color type, embedded ICC color profiles, and physical resolution (DPI derived directly from PNG pHYs chunks).
  • 🌐 Industry Standards: IPTC, XMP metadata blocks, Photoshop IRB markers, and Exif Interoperability tags.

Everything is searchable in real-time. Simply tap the search icon and type iso, prompt, gps, or lens to instantly filter tags.


2. 🎨 Native AI Art & Generation Workflow Parser

One of EXIF Reader’s standout features is its dedicated engine for generative AI imagery.

If you create or collect AI art generated via ComfyUI, Automatic1111, SD WebUI Forge, Fooocus, or NovelAI, EXIF Reader automatically recognizes and parses the generation recipe:

  • ComfyUI Node Graph Traversal:
    ComfyUI embeds its workflow as a complex JSON dictionary of interconnected nodes. EXIF Reader crawls the node tree starting from KSampler or KSamplerAdvanced nodes, follows link IDs to CLIPTextEncode nodes, identifies checkpoint loader weights, and extracts:
    • Positive Prompt
    • Negative Prompt
    • Checkpoint Model / UNet
    • Sampler & Scheduler
    • Steps, CFG Scale, Seed, and Denoise Strength
    • Native Generation Dimensions
  • One-Tap Prompt & Workflow JSON Viewer:
    Want to view the raw node graph or copy the prompt into your clipboard? Tap Prompt JSON or Workflow JSON to view the payload formatted in an edge-to-edge monospace viewer with custom scrolling.
  • Automatic1111 / WebUI / Forge:
    Parses formatted parameter blocks (Steps: 25, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: ...) into clean, easily readable UI cards.
  • Fooocus & NovelAI:
    Decodes embedded JSON comment structures, pulling base models and user prompts automatically.

3. 🧩 Low-Level Binary PNG & WebP Chunk Engines

Standard Android platform APIs often skip custom or ancillary image chunks. To overcome this limitation, EXIF Reader implements standalone, zero-overhead binary stream readers:

⚡ PNG Chunk Parser (PngChunkParser)

  • IHDR: Decodes canvas width, height, bit depth, and color type.
  • tEXt: Reads uncompressed key-value pairs (ISO-8859-1).
  • zTXt: Identifies zlib-compressed text chunks and decompresses them in real time using java.util.zip.InflaterInputStream.
  • iTXt: Parses internationalized UTF-8 chunks, handling compression flags and language tags.
  • eXIf: Extracts raw embedded EXIF blocks inside PNG containers.
  • pHYs: Converts physical pixel dimensions per meter into standard DPI (Dots Per Inch) values.

🌐 WebP RIFF Parser (WebpChunkParser)

  • Traverses the RIFF/WEBP container format chunk-by-chunk.
  • Decodes VP8X extended canvas dimensions and alpha channel indicators.
  • Extracts embedded EXIF and XMP chunks directly from WebP payloads.

4. 🛡️ Complete Metadata Stripper & Privacy Sanitizer

Sharing photos online without stripping metadata can unintentionally compromise your privacy. Posting a photo taken at home can reveal your exact residence via GPS, or disclose personal details through device serial numbers and editing history.

EXIF Reader’s Sanitizer Engine cleans images completely, but does so with critical engineering enhancements:

🔄 The Orientation Matrix Fix

Why do other metadata removers turn your photos sideways?
Smartphone camera sensors capture raw pixels in a fixed physical orientation (often landscape) and write an EXIF tag (e.g. Orientation: Rotate 90 CW) instructing the gallery to display it vertically. If a basic metadata remover simply wipes the EXIF header, the viewer no longer knows the photo was rotated—resulting in an image displayed sideways or upside down!

EXIF Reader solves this:

  1. It inspects the original orientation flag (ROTATE_90, ROTATE_180, ROTATE_270, FLIP_HORIZONTAL, TRANSPOSE, etc.) using Android’s ExifInterface.
  2. It constructs an affine transformation android.graphics.Matrix.
  3. It bakes the rotation directly into the raw bitmap pixels.
  4. It re-encodes the newly oriented bitmap as a clean file with zero metadata tags. Your photo stays right-side up, exactly as you shot it.

🎲 Randomized Anonymity Filenames

Original camera filenames like PXL_20261026_140523123.jpg or IMG_0942.HEIC leak capture timestamps and phone brand patterns. EXIF Reader automatically generates a randomized anonymity filename (e.g., clean_4a8f2b1c.jpg) with a one-tap refresh button to guarantee zero filename footprint.

💾 MediaStore & Direct Secure Sharing

  • Save to Gallery: Saves directly to Pictures/EXIF_Reader via modern Android MediaStore scoped storage.
  • Direct Clean Share: Generate temporary clean files using FileProvider (cache/clean_images/) to share directly to Signal, WhatsApp, Reddit, or Discord without saving duplicate files to your device.
  • Instant Verification: A snackbar with an “Inspect” action appears immediately after saving, allowing you to re-open the sanitized file with one tap and verify that 0 tags remain.

5. ⚡ Modern Jetpack Compose UI & Scoped Permissions

EXIF Reader is built with the latest Android development standards:

  • Zero Broad Storage Permissions: Built for Android 10 through Android 14+ utilizing the native Android Photo Picker (ActivityResultContracts.PickMultipleVisualMedia). The app never asks for READ_EXTERNAL_STORAGE or MANAGE_EXTERNAL_STORAGE.
  • Dynamic Filter Chips & Counts: Browse categories (🎨 AI Generation, 📍 GPS & Location, 📷 Camera & Hardware, ⚙️ Capture Settings) with real-time tag count badges.
  • Collapsible Cards & High-Density Typography: Easily expand or collapse cards for clean, uncluttered browsing.
  • Edge-to-Edge & Dynamic Theme: Fully integrated with Material 3 styling, supporting system dark and light themes smoothly.

🏗️ Architecture & Tech Stack

For the developers and tech enthusiasts curious about what’s under the hood:

app/src/main/java/com/example/exifreader/
├── MainActivity.kt          # Compose UI layer, State management, Dialogs, Photo Picker
├── MetadataModels.kt        # Immutables: ExifEntry, AiGenerationMetadata, ImageExifItem
├── MetadataReaderEngine.kt  # Engine: ContentResolver, Drew Noakes, PNG/WebP orchestrator
├── ComfyUiParser.kt         # Graph traversal & parameter parser (Comfy, A1111, Fooocus)
├── PngChunkParser.kt        # Binary chunk stream parser (IHDR, tEXt, zTXt, iTXt, eXIf, pHYs)
├── WebpChunkParser.kt       # Binary RIFF parser for WebP containers
└── ExifRemoverEngine.kt     # Orientation-matrix baking, MediaStore writer, FileProvider share

Key Libraries & Components:

  • Language: Kotlin 2.0.0 (JVM target 17)
  • UI Toolkit: Jetpack Compose with Material 3 (2024.06.00 BOM)
  • Image Pipeline: Coil Compose 2.6.0 (Coroutine-based asynchronous image rendering)
  • Metadata Libraries: Drew Noakes metadata-extractor:2.19.0 & AndroidX exifinterface:1.3.7
  • Concurrency: KotlinX Coroutines (Dispatchers.IO for file streams and bitmap processing)
  • Compatibility: Android Min SDK 24 (Android 7.0 Nougat) to Target SDK 34 (Android 14)

🎯 Who Is EXIF Reader For?

  1. AI Digital Artists & Creators:
    Quickly check prompts, checkpoints, seeds, and ComfyUI node graphs on your mobile device without booting up a desktop workstation.
  2. Photographers & Visual Artists:
    Inspect exact camera settings, ISO, focal lengths, lens profiles, and ICC color spaces on location.
  3. Privacy Advocates:
    Sanitize your images before uploading them to social media, messaging platforms, or public forums. Remove GPS coordinates and hardware serials while ensuring photos never flip sideways.
  4. Journalists & OSINT Researchers:
    Verify photo origins, timestamps, camera signatures, and physical print parameters on the go.

🚀 Get the App

EXIF Reader is created by SepedaTua and published at:

☕ Support the Project

EXIF Reader is completely free, open-source, and has zero ads or trackers. If you find this app helpful, consider supporting ongoing development on Ko-fi: ko-fi.com/crushedge!


💬 What’s Next?

We are actively working on expanding EXIF Reader with exciting planned features:

  • Interactive map view for GPS tagged photos
  • Selective tag stripping (e.g., remove GPS while keeping camera settings)
  • Batch metadata stripping across multiple selected images simultaneously
  • Video container metadata inspection (MP4, MKV, QuickTime MOV)

Have thoughts, feedback, or a specific workflow format you’d like us to support? Join the discussion on crushedge.com or open an issue on the GitHub repository!

No Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.