Skip to content

Camera Raw Format Support

OxiDex provides comprehensive support for 40+ camera raw file formats from major manufacturers. Camera raw files contain unprocessed sensor data along with extensive metadata including camera settings, lens information, and manufacturer-specific MakerNotes.

Overview

Camera raw formats are predominantly TIFF-based containers that store:

  • Unprocessed sensor data (RAW pixel values)
  • Standard EXIF metadata (camera make, model, settings)
  • Manufacturer-specific MakerNotes (proprietary metadata)
  • Embedded preview/thumbnail images
  • Color calibration profiles
  • Lens correction data

Most raw formats leverage TIFF/EXIF structure, allowing OxiDex to use its existing TIFF parser infrastructure with manufacturer-specific extensions.

Supported Formats

Canon

FormatDescriptionContainer TypeNotes
CR2Canon Raw version 2TIFF-basedStandard format for EOS DSLRs
CR3Canon Raw version 3ISO Base Media FormatNew format for EOS R/RP mirrorless
CRWCanon Raw (legacy)ProprietaryOlder PowerShot and EOS models

Cameras: EOS 1D, 5D, 6D, 7D, 80D, R5, R6, M50, PowerShot G series

Nikon

FormatDescriptionContainer TypeNotes
NEFNikon Electronic FormatTIFF-basedStandard raw format for all Nikon DSLRs/mirrorless
NRWNikon Raw (compressed)TIFF-basedCompact cameras (Coolpix)

Cameras: D850, Z6, Z7, D780, D500, Z9, Coolpix series

Sony

FormatDescriptionContainer TypeNotes
ARWSony Alpha RawTIFF-basedStandard format for Alpha cameras
SR2Sony Raw version 2TIFF-basedOlder Alpha/Cyber-shot models
SRFSony Raw FormatTIFF-basedCyber-shot DSC series
SRWSamsung Raw (Sony-compatible)TIFF-basedSamsung NX series
ARQSony Alpha Raw QuadTIFF-basedHigh-resolution multi-shot
ARIARRI Raw ImageProprietaryARRI Alexa cinema cameras

Cameras: A7III, A7R IV, A9, A6400, RX100, ARRI Alexa

Fujifilm

FormatDescriptionContainer TypeNotes
RAFRaw Image FileProprietaryAll X-series and GFX cameras

Cameras: X-T4, X-Pro3, X100V, GFX 100, GFX 50S

Olympus

FormatDescriptionContainer TypeNotes
ORFOlympus Raw FormatTIFF-basedStandard format for all Olympus cameras
ORIOlympus Raw ImageTIFF-basedOlder E-series models

Cameras: OM-D E-M1, E-M5, PEN-F, E-series

Pentax

FormatDescriptionContainer TypeNotes
PEFPentax Electronic FormatTIFF-basedStandard format for all Pentax DSLRs

Cameras: K-1, K-3, K-70, 645Z

Panasonic

FormatDescriptionContainer TypeNotes
RW2Raw version 2TIFF-basedStandard format for Lumix cameras
RWLRaw LightTIFF-basedCompressed variant

Cameras: GH5, G9, S1, S5, LX100

Hasselblad

FormatDescriptionContainer TypeNotes
3FRHasselblad 3F RawTIFF-basedH-series medium format
FFFHasselblad Flexible File FormatTIFF-basedX1D, 907X

Cameras: H6D, X1D II, 907X, CFV II

Phase One

FormatDescriptionContainer TypeNotes
IIQIntelligent Image QualityTIFF-basedProfessional medium format

Cameras: IQ4, IQ3, XF camera system

Mamiya

FormatDescriptionContainer TypeNotes
MEFMamiya Electronic FormatTIFF-basedMamiya ZD digital backs

Cameras: ZD, DM series

Leaf

FormatDescriptionContainer TypeNotes
MOSLeaf Camera RawTIFF-basedLeaf Aptus digital backs

Cameras: Aptus series, Credo backs

Kodak

FormatDescriptionContainer TypeNotes
DCRKodak Digital Camera RawTIFF-basedProfessional DCS series
KDCKodak Digital CameraTIFF-basedConsumer models

Cameras: DCS Pro series, EasyShare cameras

Minolta

FormatDescriptionContainer TypeNotes
MDCMinolta DiMAGE CameraProprietaryDiMAGE 5/7 series
MRWMinolta RawProprietaryMaxxum/Dynax 5D/7D

Cameras: DiMAGE A1/A2, Maxxum 5D/7D

Epson

FormatDescriptionContainer TypeNotes
ERFEpson Raw FormatTIFF-basedR-D1 rangefinder

Cameras: R-D1, R-D1s

Sigma

FormatDescriptionContainer TypeNotes
X3FSigma X3 FoveonProprietaryAll Sigma cameras with Foveon sensor

Cameras: SD Quattro, fp, dp series

GoPro

FormatDescriptionContainer TypeNotes
GPRGoPro RawDNG-basedGoPro HERO cameras with raw support

Cameras: HERO5 Black and later (with raw update)

Adobe

FormatDescriptionContainer TypeNotes
DNGDigital NegativeTIFF-basedUniversal raw format, Adobe standard

Cameras: Used by many manufacturers as alternative format, required for some Android/mobile cameras

Other Formats

FormatDescriptionContainer TypeNotes
HIFHEIF Image FormatISO Base MediaHigh Efficiency Image Format
LRILight Raw ImageProprietaryLight L16 camera
STISinar RawTIFF-basedSinar eMotion digital backs
RAWGeneric RawVariousGeneric extension used by some cameras
CAMCasio RawVariousCasio QV series
REVGeneric RawVariousAlternative raw extension

Technical Details

TIFF-Based Raw Formats

Most camera raw formats (CR2, NEF, ARW, ORF, PEF, etc.) are based on the TIFF (Tagged Image File Format) specification with manufacturer-specific extensions:

Structure

  1. TIFF Header: Standard TIFF magic bytes (II for little-endian, MM for big-endian)
  2. IFD0: Primary image metadata (thumbnails, basic EXIF)
  3. ExifIFD: Extended EXIF data (camera settings, shooting parameters)
  4. MakerNote: Manufacturer-specific proprietary data
  5. Image Data: Compressed or uncompressed raw sensor data

Magic Bytes

  • Canon CR2: II*\0 + CR\2\0 at offset 8
  • Nikon NEF: MM\0* (big-endian TIFF)
  • Sony ARW: II*\0 (little-endian TIFF)
  • DNG: II*\0 with DNGVersion tag (0xC612)

Proprietary Raw Formats

Some manufacturers use proprietary container formats:

Canon CR3 (ISO Base Media Format)

  • Similar to MP4/QuickTime structure
  • Contains multiple tracks (metadata, preview, raw data)
  • Magic bytes: ftyp box with crx brand

Fujifilm RAF

  • Custom binary format with FUJIFILMCCD-RAW signature
  • Dedicated header structure
  • Embedded JPEG preview

Sigma X3F

  • Proprietary format for Foveon sensors
  • Magic bytes: FOVb
  • Three-layer sensor data (RGB in same pixel location)

Minolta MRW

  • Custom format with \0MRM signature
  • Proprietary metadata structure

Metadata Extraction

OxiDex extracts comprehensive metadata from raw files:

Standard EXIF Tags

All TIFF-based raw formats support standard EXIF tags:

EXIF:Make                 - Camera manufacturer
EXIF:Model                - Camera model
EXIF:DateTimeOriginal     - Capture timestamp
EXIF:ExposureTime         - Shutter speed
EXIF:FNumber              - Aperture
EXIF:ISO                  - ISO sensitivity
EXIF:FocalLength          - Lens focal length
EXIF:WhiteBalance         - White balance setting
EXIF:Flash                - Flash mode and status
EXIF:MeteringMode         - Metering mode
EXIF:ExposureProgram      - Shooting mode (A, S, M, P)
EXIF:LensModel            - Lens identification

GPS Tags

If geotagging is enabled (camera GPS or smartphone sync):

GPS:GPSLatitude           - Latitude coordinates
GPS:GPSLongitude          - Longitude coordinates
GPS:GPSAltitude           - Elevation
GPS:GPSTimeStamp          - GPS time
GPS:GPSDateStamp          - GPS date

Manufacturer MakerNotes

Manufacturer-specific metadata varies by brand:

Canon MakerNotes

Canon:FirmwareVersion     - Camera firmware version
Canon:SerialNumber        - Camera body serial number
Canon:OwnerName           - Registered owner name
Canon:InternalSerialNumber - Internal serial number
Canon:LensModel           - Attached lens model
Canon:MacroMode           - Macro mode status
Canon:Quality             - Image quality setting
Canon:FlashMode           - Flash mode setting
Canon:DriveMode           - Drive/shooting mode
Canon:FocusMode           - Autofocus mode

Nikon MakerNotes

Nikon:ShutterCount        - Shutter actuation count
Nikon:SerialNumber        - Camera serial number
Nikon:LensType            - Lens type code
Nikon:LensInfo            - Lens specifications
Nikon:AFAreaMode          - AF area mode
Nikon:ActiveDLighting     - Active D-Lighting setting

Sony MakerNotes

Sony:SonyModelID          - Sony model identifier
Sony:CreativeStyle        - Picture style/profile
Sony:Sharpness            - Sharpness setting
Sony:Contrast             - Contrast setting
Sony:Saturation           - Saturation setting
Sony:LensID               - Lens identification

DNG-Specific Tags

Adobe DNG format includes additional standardized tags:

DNG:DNGVersion            - DNG specification version (e.g., 1.4.0.0)
DNG:DNGBackwardVersion    - Oldest DNG version that can read this file
DNG:UniqueCameraModel     - Unique camera model identifier
DNG:ColorMatrix1          - Color calibration matrix (D65 illuminant)
DNG:ColorMatrix2          - Color calibration matrix (other illuminant)
DNG:CameraCalibration1    - Camera calibration matrix
DNG:BaselineExposure      - Baseline exposure compensation

Usage Examples

CLI Usage

Extract All Metadata

bash
# Read metadata from Canon CR2
oxidex photo.cr2

# Read metadata from Nikon NEF
oxidex image.nef

# Read metadata from Sony ARW
oxidex shot.arw

Extract Specific Tags

bash
# Camera information
oxidex -EXIF:Make -EXIF:Model -EXIF:SerialNumber photo.cr2

# Shooting parameters
oxidex -EXIF:ExposureTime -EXIF:FNumber -EXIF:ISO image.nef

# Canon-specific tags
oxidex -Canon:FirmwareVersion -Canon:OwnerName -Canon:LensModel photo.cr2

# GPS coordinates
oxidex -GPS:GPSLatitude -GPS:GPSLongitude -GPS:GPSAltitude photo.dng

Batch Processing

bash
# Process all raw files in directory
oxidex -r /path/to/raw/photos/

# Process specific raw format
oxidex *.nef

# Recursive processing with specific format
oxidex -r -ext cr2 /path/to/canon/photos/

Output Formats

bash
# JSON output
oxidex -json photo.cr2

# CSV output for batch analysis
oxidex -csv -r /path/to/raw/photos/ > metadata.csv

# Human-readable output (default)
oxidex photo.nef

Advanced Queries

bash
# Find all photos with specific lens
oxidex -if '$EXIF:LensModel =~ /24-70/' -r /photos/

# Extract photos by camera model
oxidex -if '$EXIF:Model eq "Canon EOS 5D Mark IV"' -r /photos/

# Find high ISO shots
oxidex -if '$EXIF:ISO > 3200' -r /photos/

Library API Usage

Basic Metadata Reading

rust
use oxidex::core::operations::read_metadata;
use std::path::Path;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Read metadata from raw file
    let path = Path::new("photo.cr2");
    let metadata = read_metadata(path)?;

    // Extract standard EXIF tags
    println!("Camera: {} {}",
        metadata.get("EXIF:Make")?,
        metadata.get("EXIF:Model")?
    );

    println!("Settings: ISO {}, f/{}, {}s",
        metadata.get("EXIF:ISO")?,
        metadata.get("EXIF:FNumber")?,
        metadata.get("EXIF:ExposureTime")?
    );

    // Extract manufacturer-specific data
    if let Ok(serial) = metadata.get("Canon:SerialNumber") {
        println!("Camera Serial: {}", serial);
    }

    if let Ok(firmware) = metadata.get("Canon:FirmwareVersion") {
        println!("Firmware: {}", firmware);
    }

    Ok(())
}

Format Detection

rust
use oxidex::parsers::raw::{detect_raw_format, RawFormat};
use std::fs;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Read first 16 bytes for magic byte detection
    let data = fs::read("photo.cr2")?;

    // Detect format
    let format = detect_raw_format(&data[..16], "photo.cr2");

    match format {
        Some(RawFormat::CanonCR2) => println!("Canon CR2 detected"),
        Some(RawFormat::NikonNEF) => println!("Nikon NEF detected"),
        Some(RawFormat::SonyARW) => println!("Sony ARW detected"),
        Some(RawFormat::AdobeDNG) => println!("Adobe DNG detected"),
        _ => println!("Unknown or unsupported format"),
    }

    Ok(())
}

Batch Processing Raw Files

rust
use oxidex::core::operations::read_metadata;
use std::fs;
use std::path::Path;

fn process_raw_directory(dir: &Path) -> Result<(), Box<dyn std::error::Error>> {
    let raw_extensions = vec!["cr2", "cr3", "nef", "arw", "dng", "raf", "orf"];

    for entry in fs::read_dir(dir)? {
        let entry = entry?;
        let path = entry.path();

        // Check if file has raw extension
        if let Some(ext) = path.extension() {
            let ext_str = ext.to_str().unwrap_or("").to_lowercase();

            if raw_extensions.contains(&ext_str.as_str()) {
                println!("Processing: {}", path.display());

                // Extract metadata
                match read_metadata(&path) {
                    Ok(metadata) => {
                        println!("  Camera: {} {}",
                            metadata.get("EXIF:Make").unwrap_or("Unknown".into()),
                            metadata.get("EXIF:Model").unwrap_or("Unknown".into())
                        );
                    }
                    Err(e) => eprintln!("  Error: {}", e),
                }
            }
        }
    }

    Ok(())
}

Format-Specific Notes

Canon CR3 Support

Canon CR3 files use a different container format (ISO Base Media Format, similar to MP4) compared to the TIFF-based CR2. Full CR3 support requires:

  • MP4/QuickTime atom parsing
  • Canon-specific track handling
  • CRAW codec metadata extraction

Current Status: Basic metadata extraction supported. Full implementation planned.

DNG (Digital Negative)

DNG is Adobe's open standard raw format, used by:

  • Adobe Lightroom (for raw conversion)
  • Mobile devices (smartphones, tablets)
  • Some camera manufacturers as primary or alternative format
  • Conversion tool output (DNG Converter)

DNG advantages:

  • Standardized format with public specification
  • Future-proof archival format
  • Embedded color profiles and calibration data
  • Widely supported by software

Embedded Previews

Most raw files contain embedded JPEG previews/thumbnails:

  • Full-size JPEG preview for quick viewing
  • Thumbnail (160x120 or similar) for file browsers
  • These can be extracted separately

Current Status: Metadata extraction from previews supported. Preview image extraction planned.

Performance Considerations

Format Detection

OxiDex uses efficient magic byte detection:

  1. Check first 16 bytes for format signatures
  2. Fall back to file extension if magic bytes are ambiguous
  3. Minimal file I/O (only header needed)

Average detection time: ~2 nanoseconds per operation

Metadata Parsing

TIFF-based formats leverage the existing TIFF parser:

  • Zero-copy parsing where possible
  • Lazy evaluation of IFD chains
  • Parallel processing for batch operations

Average parsing time: ~10 microseconds per file (DNG)

Memory Usage

Raw files are large (20-100MB), but metadata parsing is efficient:

  • Only header and IFD data is read (typically < 1MB)
  • Image data is not loaded unless explicitly requested
  • Memory-mapped I/O for large batch operations

Common Issues and Solutions

Issue: "Unsupported Format" Error

Cause: File may be corrupted or not a valid raw format.

Solution:

  1. Verify file integrity (check file size, magic bytes)
  2. Ensure file extension matches actual format
  3. Try opening in manufacturer software to confirm validity

Issue: Missing MakerNote Tags

Cause: Manufacturer-specific parsers may not be fully implemented for all camera models.

Solution:

  1. Standard EXIF tags are always available
  2. File a feature request for specific camera model support
  3. Use oxidex -a -G1 to see all available tag groups

Issue: Incorrect Date/Time

Cause: Camera clock not set correctly, or timezone issues.

Solution:

  1. Check EXIF:DateTimeOriginal vs EXIF:CreateDate
  2. Use EXIF:OffsetTime for timezone information
  3. GPS timestamp (GPS:GPSTimeStamp) is always UTC

Future Enhancements

Planned improvements for raw format support:

  1. Full CR3 Parser: Complete Canon CR3 implementation with CRAW codec support
  2. Embedded Preview Extraction: Extract JPEG previews from raw files
  3. Raw Image Data Access: Support for reading actual sensor data
  4. Extended MakerNotes: Additional manufacturer-specific tags for all brands
  5. Lens Databases: Comprehensive lens identification for all manufacturers
  6. Color Profile Extraction: Extract and parse embedded ICC profiles
  7. Batch Conversion: Raw to DNG conversion utilities
  8. Smart Preview Generation: Generate web-optimized previews from raw files

References

Tested Compatibility

ExifTool-RS has been comprehensively tested against real-world camera files to ensure production-ready reliability and compatibility.

Test Corpus

Comprehensive testing was performed on 4,026 real-world RAW files from the exiftool-rs data.lfs test corpus, including files from:

  • 15+ major camera manufacturers
  • 40+ distinct RAW file formats
  • Consumer cameras to professional cinema equipment
  • Current and legacy camera models dating back 20+ years

Test Results

Success Rate: 81.02% (3,262 of 4,026 files successfully parsed)

Successfully Tested Formats:

  • Canon: CR2, CR3 (basic), CRW (in progress)
  • Nikon: NEF, NRW
  • Sony: ARW, SR2, SRF, SRW
  • Fujifilm: RAF (comprehensively tested, 148 files)
  • Panasonic: RW2 (comprehensively tested, 396 files)
  • Olympus: ORF (comprehensively tested, 93 files)
  • Adobe: DNG
  • Pentax: PEF
  • Hasselblad: 3FR, FFF
  • Phase One: IIQ
  • Mamiya: MEF
  • Leaf: MOS
  • Kodak: DCR, KDC
  • Epson: ERF
  • GoPro: GPR

Recent Parser Additions

Three major parsers were added based on comprehensive testing results:

Panasonic RW2 Parser (November 2025)

  • 396 files tested and successfully parsed
  • Supports all Lumix camera models (GH5, G9, S1, S5, LX100, etc.)
  • TIFF-based format with Panasonic-specific IFD structure

Fujifilm RAF Parser (November 2025)

  • 148 files tested and successfully parsed
  • Supports X-series (X-T4, X-Pro3, X100V) and GFX medium format cameras
  • Proprietary format with FUJIFILMCCD-RAW signature
  • Embedded JPEG preview extraction

Olympus ORF Parser (November 2025)

  • 93 files tested and successfully parsed
  • Supports OM-D (E-M1, E-M5), PEN-F, and E-series cameras
  • TIFF-based format with Olympus-specific extensions

Performance Metrics

Performance testing on 1,999 mixed-format files:

ExifTool-RS:

  • Processing Time: 2.087 seconds
  • Throughput: 914 files/second
  • Files Successfully Processed: 1,907 files

Perl ExifTool (v13.36) Comparison:

  • Processing Time: 17.145 seconds
  • Throughput: 116 files/second
  • ExifTool-RS is 8.21x faster

Performance Characteristics:

  • Parallel I/O processing for batch operations
  • Efficient multi-threaded metadata extraction
  • Zero-copy parsing where possible
  • Memory-mapped I/O for large file sets
  • Production-ready for large-scale photo library processing

Known Limitations

Formats Not Yet Supported (remaining 18.98% of test corpus):

  • Canon CRW (older PowerShot/EOS models) - 50 files
  • Various action camera formats (SJCAM, GITUP, etc.) - 14 files
  • Some Kodak proprietary formats - 22 files
  • Minolta MRW/MDC formats - 2 files
  • Specialized formats (Light L16, ARRI Alexa) - 4 files
  • Git LFS object files (non-image files) - ~600 files

In Progress:

  • Canon CRW parser implementation (high priority)
  • Improved CR3 support (current: basic metadata only)
  • Extended MakerNotes coverage for additional camera models

Test Infrastructure

A comprehensive test infrastructure is maintained for ongoing validation:

  • Automated testing script (tests/data_lfs_testing.sh)
  • Error categorization and analysis
  • Performance benchmarking suite
  • Regression testing for all supported formats
  • Real-world file compatibility tracking

Quality Assurance

All parsers undergo rigorous testing:

  • Unit tests for parser components
  • Integration tests with real camera files
  • Edge case handling (corrupted files, malformed metadata)
  • Performance regression testing
  • Cross-platform validation (macOS, Linux, Windows)

Support

For issues, questions, or feature requests related to camera raw format support:


Last Updated: November 2025 Format Coverage: 40+ raw formats Supported Manufacturers: 20+ camera brands Tested Files: 4,026 real-world samples Success Rate: 81.02% Performance: 8.21x faster than Perl ExifTool

Released under the GPL-3.0 License.