Convert Red Dead Redemption 2 Photo Mode files (.prdr) to PNG images directly in your browser. All parsing and conversion happens client-side, so your files never leave your device.
Red Dead Redemption 2 stores photo mode pictures in a proprietary PRDR format that standard image viewers cannot open. This tool reverse-engineers the binary structure of these files, extracts the embedded JPEG stream and the capture timestamp, and renders the image in the browser where you can preview and download it as PNG.
- 100% client-side: Files are processed locally with JavaScript and never uploaded anywhere.
- Batch conversion: Convert multiple PRDR files at once with per-file progress reporting.
- High quality: Extracts the original embedded JPEG data and converts it to PNG without re-encoding loss.
- Metadata extraction: Reads the capture date/time from each file's header.
- Polished UI: Fluid animations and a responsive layout powered by GSAP, Three.js, and OGL.
- Node.js 20 or newer
- npm
git clone https://github.com/vishnuskandha/PRDR_Rdr2.git
cd PRDR_Rdr2
npm install| Script | Description |
|---|---|
npm run dev |
Start the Vite development server with HMR |
npm run build |
Build the production bundle into dist/ |
npm run lint |
Run ESLint over the codebase |
npm run preview |
Preview the production build locally |
- Open the app in your browser.
- Drag and drop PRDR files onto the upload area. Files are typically found at
Documents\Rockstar Games\Red Dead Redemption 2\Profiles\<ProfileID>. - Each file is parsed and converted automatically; progress is shown per file.
- Preview the converted images in the gallery and use "Download All" to save them.
.
├── public/ # Static assets
├── src/
│ ├── components/ # UI components (uploader, gallery, background)
│ ├── hooks/ # usePRDRConversion (conversion state machine)
│ ├── utils/ # PRDR parser and JPEG-to-PNG converter
│ ├── App.jsx # Root component
│ └── main.jsx # Entry point
├── .github/workflows/ # GitHub Pages deployment CI
├── index.html
└── vite.config.js
src/utils/prdrParser.js implements the reverse-engineered PRDR format:
- Metadata (capture timestamp) is read from bytes 20-54.
- The embedded JPEG stream is located by skipping the known 300-byte header or by searching for the JPEG magic bytes (
FF D8 FF E0 00 10), with a fallback to the basicFF D8 FFsignature. src/utils/imageConverter.jsre-encodes the JPEG data to PNG for download.
Please read CONTRIBUTING.md for the contribution workflow and SECURITY.md for security guidance.
Distributed under the MIT License.