Skip to content

ephemera02/Palimpsest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Palimpsest

Palimpsest is a metadata forensics for photos and video. All you have to do is drop a file in and get it taken apart: when and where it was shot, what shot it, whether the metadata was stripped, and whether two files came off the same camera, the same room, or the same power grid. That's the whole thing.

Everything runs on your machine, and nothing leaves it unless you turn on AI Vision and hand it your own API key.

One developer, one cat. Open source.

Version 2.0, rereleased. Rebuilt and improved: every interface glyph is a real SVG now, there's a proper Settings page, and a stack of quiet fixes underneath.

What It Does

  • ENF analysis. Reads the power-grid frequency sitting in a recording (50 or 60 Hz) and narrows where it was filmed. Court-accepted, and it snitches on your power grid.
  • AI Vision. Sends frames to Claude, GPT, or Gemini to read outlets, signage, and room features. Narrows your country by outlet type. Opt-in, and it costs whatever your provider charges; there's a cost estimate before you commit to a run.
  • Perceptual hashing. Catches exact and near-duplicate files across the whole library, images and video both.
  • Metadata Groups. Buckets evidence by shared fields to map who recorded, who re-encoded, and who passed it on. Fingerprints distribution chains.
  • Forensic suite. Scene matching, audio fingerprinting, watermark detection, encoding-chain analysis, screen-recording detection, lighting analysis, error level analysis (ELA) with visual heatmaps, EXIF thumbnail mismatch detection, raw string extraction (URLs, emails, software traces), social media platform fingerprinting, and file structure validation (magic bytes, data after EOF, embedded files, entropy).
  • The rest of the desk. Suspect profiles, an evidence library, a capture timeline, a GPS map, side-by-side compare, hash lookup, batch processing, and JSON / PDF / CSV export.

Running It

From the release zip (no Python needed)

Download the latest release, unzip it anywhere, and run Palimpsest.exe. It starts a local server and opens Palimpsest in your browser at http://127.0.0.1:7700. Quit from the system tray icon, or the Quit button in the title bar.

From source

You need Python 3 (3.8 or newer) and Flask. Everything else is optional and just unlocks more.

pip install flask
python palimpsest.py

Keep palimpsest.py and palimpsest_ui.html in the same folder; the server serves the UI from right next to itself. It opens your browser the same way the packaged build does.

For the full feature set:

pip install flask pillow imagehash opencv-python numpy scipy reportlab hachoir pystray

ffmpeg is a separate install (it's a binary, not a pip package) and is what audio fingerprinting needs.

Building the Exe

The release build is made with PyInstaller. Make sure the optional libraries you want shipped are installed first, because PyInstaller bundles whatever it finds.

pip install pyinstaller
pyinstaller --onefile --windowed --name Palimpsest --icon palimpsest.ico --add-data "palimpsest_ui.html;." palimpsest.py

The result is dist/Palimpsest.exe. A few things worth knowing:

  • --add-data bundles the UI next to the code so the frozen app can find palimpsest_ui.html; at runtime it looks for it inside the PyInstaller bundle. On macOS or Linux the separator is a colon, not a semicolon: --add-data "palimpsest_ui.html:.".
  • --windowed drops the console window. Take it off if you want the startup log and the dependency report ([*] reportlab: OK, and so on) in a terminal.
  • OpenCV and SciPy sometimes need a nudge to come across whole. If a feature works from source but goes missing in the packaged build, add --collect-all cv2 or --collect-all scipy.
  • ffmpeg is a separate binary and is not bundled. Ship it next to the exe or note it as a dependency.
  • --icon palimpsest.ico if you have an icon.

Optional Libraries

  • Pillow. Image EXIF, thumbnails, image hashing.
  • imagehash. Perceptual hashing for the duplicate and near-duplicate finder.
  • OpenCV (opencv-python). Video frame extraction and the scene and forensic work.
  • NumPy and SciPy. The math behind ENF and the forensic modules.
  • reportlab. PDF report export.
  • hachoir. Deeper container metadata parsing.
  • pystray. The system tray icon. Without it you just get the browser, and you quit from the title bar.
  • ffmpeg. Audio extraction for audio fingerprinting.

Missing any of these is fine. Palimpsest checks at startup, prints what it couldn't find, and switches those features off instead of falling over.

Where Your Data Lives

Nothing is stored in the cloud. The SQLite database, your imported files, extracted frames, thumbnails, and exports all sit in a Palimpsest data folder:

  • Packaged build: %APPDATA%\Palimpsest on Windows, ~/Library/Application Support/Palimpsest on macOS, ~/.local/share/Palimpsest on Linux.
  • From source: right next to palimpsest.py.

The Interface

Glyph-free and square-cornered, in the CS5 spirit. Nothing Unicode is pretending to be an icon; every control is a real SVG. The Settings page holds the knobs: tooltips (optional, off by default), accessibility options (reduce motion, high contrast, larger UI, bigger click targets), your install and data paths, and a purge that securely overwrites and wipes everything when you need the machine clean.

Credits

Built by Eph. Claude helped with the 2.0 cleanup because the OG code was spaghetti (Shut up i was literally learning, and i still am ) The Cat supervised from a nearby surface.

ephemeradev.net | MIT License | tips welcome, never required.

Screenshot (41) Screenshot (42) Screenshot (43) Screenshot (44) Screenshot (47)

About

Video-first metadata forensics toolkit. Scene matching, audio fingerprinting, encoding chain analysis, suspect tracking. Built for investigators documenting abuse networks. Open source πŸ’œ

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors