Media Rescue Lab

CardRecovery

Carves photos out of a card image whose filesystem is already gone.

Free right now — no account, no card

Get CardRecovery free Windows & Mac · one file, nothing to install

Preview

1 interface design, then a screenshot of it running. Drag, scroll or use the arrows.

Interface design CardRecovery, 1 of 1
Screenshot CardRecovery running on Windows today

Free while we’re in preview

Get CardRecovery

Carves photos out of a card image whose filesystem is already gone.

The Mac button is for Apple Silicon. On an older Intel Mac, get this one instead.

One file, both ways. Double-click it for the window. Run the same file from a command prompt with arguments and it behaves as the command-line tool, because the engine is inside it. Nothing else to download and nothing to keep beside it.

Early preview. The window has been built and run, but not yet on a real Windows PC or Mac, so expect rough edges. The engine underneath it is fully tested.

  • One file — no installer
  • Runs on your machine, offline
  • Source code published below

Free while in preview. It isn’t signed yet, so Windows or macOS will ask you to confirm the first time you open it. At launch, CardRecovery is included in every plan along with the rest of the range.

When there’s no directory left to read

This isn’t an undelete tool. It never reads a FAT, an inode or a directory entry, because on a card that’s been reformatted or corrupted there may not be any left to read. It scans raw bytes for file signatures and then walks each format’s internal structure to find where the file genuinely ends.

For JPEG that means walking marker segments from SOI, handling 0xFF00 byte stuffing and restart markers through the entropy-coded data, to the EOI. For PNG it walks the chunk chain to IEND and recomputes every CRC32. ZIP, GIF and PDF each get their own walk.

A JPEG normally contains a second complete JPEG in its EXIF thumbnail. Any signature landing inside an already-carved extent is reported as nested and not carved separately, so you get the photo, not 400 thumbnails.

Then check whether it worked

cardrecovery verify ./rescued fully decodes every recovered JPEG, PNG and GIF and tells you which ones actually survived, at what dimensions. That’s how you find out a file was fragmented.

What you don’t get back

Filenames and timestamps. They lived in the directory structure. Carved files come out as 000001.jpg. Fragmented files come out wrong.

Reading on the job itself

Advanced & technical details Command-line builds, source code, checksums and a recorded session — for developers and IT teams

A working command-line build of the carving engine: signature-based recovery for JPEG, PNG, GIF, ZIP and PDF, with chunk-boundary-safe scanning, nested-signature suppression and post-carve validation of what it recovered. The card image is opened read-only and nothing is written without --apply. Reading a physical card directly and rebuilding a damaged filesystem are on the roadmap.

Recorded session

Recorded terminal session showing CardRecovery running
A real recorded session — CardRecovery’s actual output, captured by running the shipped binary.

Naming status

Working name only — brand verdict **AVOID** (Very High). Collision: CardRecovery. Rename completely.

What it draws on

Existing paid software whose best ideas shaped this program: Wondershare Recoverit, Wondershare Repairit, Stellar Repair for Video, Stellar Photo Recovery.

Command line

There is nothing extra to install. The program you download is the command-line tool as well: give it arguments instead of double-clicking it and it runs as one, with its output on your terminal. The standalone builds below are the same engine on its own, for machines where you would rather not ship a window at all.

cardrecovery - read-only file carver for memory card images

Recovers files from a raw card image whose filesystem is gone by scanning the
raw bytes for file signatures. It never reads a directory structure and never
writes to the image it scans.

USAGE
  cardrecovery scan     <image> [--json] [--max-carve <size>]
  cardrecovery recover  <image> --out <dir> [--types <list>] [--min-size <size>]
                                [--max-carve <size>] [--apply] [--json]
  cardrecovery verify   <dir> [--json]

COMMANDS
  scan      Scan the raw image for known signatures and report every file that
            could be recovered: type, byte offset, length and confidence.
  recover   Carve the found files out into --out with sequential names.
            Dry run by default; pass --apply to actually write.
  verify    Fully decode each recovered JPEG/PNG/GIF in a directory and report
            which ones genuinely survived.
  help      Show this message.

OPTIONS
  --json               Emit machine-readable JSON instead of text.
  --out <dir>          Destination directory for recover (required).
  --types <list>       Comma-separated types to carve: jpeg,png,gif,pdf,zip.
  --min-size <size>    Skip carves smaller than this (e.g. 4096, 8K, 1M).
  --max-carve <size>   Cap for a header with no reachable footer (default 16M).
  --apply              Actually write the carved files (recover only).
  -h, --help           Show this message.

FORMATS
  jpeg  FFD8FF .. FFD9   walked marker by marker, so an embedded EXIF thumbnail
                         does not end the outer file early
  png   89504E47.. IEND  every chunk CRC32 is verified
  gif   GIF87a/89a .. 3B walked block by block to the trailer
  pdf   %PDF- .. %%EOF   last %%EOF before the next %PDF- header
  zip   PK\x03\x04 ..    end-of-central-directory, validated against the
                         central directory offset it declares

EXIT STATUS
...

Recorded from the shipped binary, not written by hand.

Source

Every file the program is built from:

console.go · console_test.go · guided.go · main.go

SHA-256 checksums · build instructions & scope notes · full build plan