This project extracts camera, EXIF, and GPS metadata from image files using a custom parser stack. It runs entirely on your machine: images are uploaded only to the local backend, parsed, and then returned to the browser.
Supported image formats:
- JPEG
- PNG
- TIFF
- WEBP
- The frontend uploads a local image to the backend
POST /extractendpoint. - The backend validates file size, filename, and magic bytes to enforce local-only parsing.
- The extractor detects the image container format and parses binary metadata directly from the image bytes.
- JPEG metadata is found inside the APP1 EXIF segment, TIFF metadata is parsed from the TIFF header and IFD chains, PNG metadata comes from chunks such as
gAMA,tEXt, andeXIf, and WEBP metadata is extracted from the EXIF chunk when present. - Parsed fields are serialized as JSON and returned to the browser for display.
| Format | Extracts |
|---|---|
| JPEG | IFD0, EXIF, GPS |
| PNG | Chunk metadata (gAMA, tEXt, eXIf) |
| TIFF | Full IFD0 + EXIF |
| WEBP | EXIF chunk if present |
- Local-only metadata extraction
- FastAPI backend with file upload endpoint
- React/Vite frontend with drag-and-drop and file picker support
- Safe upload validation and temporary file cleanup
- JSON metadata display with EXIF, GPS, and TIFF fields
- Python 3.11+ (or compatible)
- Node.js 18+ / npm
gitto clone and publish the repository
From the project root:
python -m pip install -r backend/requirements.txt
uvicorn backend.app:app --reloadThe backend will be available at http://localhost:8000.
From the project root:
cd frontend
npm install
npm run devOpen http://localhost:5173 in your browser.
- Start the backend and frontend.
- Open the frontend in the browser.
- Upload or drag an image into the interface.
- View parsed metadata in the browser.
Run the Python unit test suite from the project root:
python -m unittest discover -s testsbackend/— FastAPI application and backend logicfrontend/— React/Vite user interfacesrc/— core metadata extraction and parser modulestests/— unit tests for sanitizer, parser, and extractor behaviorcli/— optional command-line extractor entry point
- No external upload or telemetry code is included in the repository.
- Uploaded files are validated by magic bytes and file size.
- Temporary upload files are cleaned up after extraction.
- Browser requests are proxied to the local backend for development.