{"id":32135291,"url":"https://github.com/dnglab/dnglab","last_synced_at":"2025-10-21T03:57:51.221Z","repository":{"id":37248549,"uuid":"370087570","full_name":"dnglab/dnglab","owner":"dnglab","description":"Camera RAW to DNG file format converter","archived":false,"fork":false,"pushed_at":"2025-10-03T15:50:45.000Z","size":10496,"stargazers_count":501,"open_issues_count":60,"forks_count":62,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-10-21T03:57:37.691Z","etag":null,"topics":["converter","dng","dng-format","photography","raw","raw-image"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dnglab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"SUPPORTED_CAMERAS.md","governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-05-23T15:23:10.000Z","updated_at":"2025-10-19T11:33:11.000Z","dependencies_parsed_at":"2024-02-24T19:24:56.776Z","dependency_job_id":"106ee9e4-d00c-43be-9164-a06bbe1044fc","html_url":"https://github.com/dnglab/dnglab","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/dnglab/dnglab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnglab%2Fdnglab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnglab%2Fdnglab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnglab%2Fdnglab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnglab%2Fdnglab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dnglab","download_url":"https://codeload.github.com/dnglab/dnglab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dnglab%2Fdnglab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280200870,"owners_count":26289477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["converter","dng","dng-format","photography","raw","raw-image"],"created_at":"2025-10-21T03:57:48.157Z","updated_at":"2025-10-21T03:57:51.192Z","avatar_url":"https://github.com/dnglab.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DNGLab - A camera RAW to DNG file format converter\n\n[![CI](https://github.com/dnglab/dnglab/actions/workflows/ci.yaml/badge.svg)](https://github.com/dnglab/dnglab/actions/workflows/ci.yaml)\n[![Matrix](https://img.shields.io/matrix/dnglab:matrix.org?server_fqdn=matrix.org)](https://app.element.io/#/room/#dnglab:matrix.org)\n\nCommand line tool to convert camera RAW files to Digital Negative Format (DNG).\n\n\n It is currently in alpha state, so don't expect a polished and bugfree application.\n Please report bugs in our [issue tracker](https://github.com/dnglab/dnglab/issues).\n\n Rawler crate is now published to crates.io, but please notice that the API is not yet stable\n and thus rawler is not following SemVer.\n\n\n## Installation\n\nThere are pre-built binary packages for each release which can be downloaded from\nthe asset section under [latest release](https://github.com/dnglab/dnglab/releases/latest).\nThe **.deb** packages are for Debian based systems (amd64 and arm64), which can be installed\nwith `dpkg -i dnglab_x.x.x_amd64.deb`. For non-Debian systems, you can use the single-binary file,\nfor example `./dnglab_linux_x64 convert IMG_1234.CR2 IMG_1234.dng`.\n\nWindows is not officially supported, but the release assets contains a **dnglab-win-x64_vx.x.x.zip**\nfile with pre-built Windows binary. Please be aware that this build is untested.\n\n## Build from source\nDnglab is written in Rust, so you can compile it by your own on your target machine.\nYou need the Rust toolchain installed on your machine, see https://rustup.rs/ for that.\nOnce the toolchain is installed, you can simply compile Dnglab with:\n\n````\ngit clone https://github.com/dnglab/dnglab.git\ncd dnglab\ncargo build --release\n````\n\nThe dnglab binary is found at `./target/release/dnglab`.\n\n\n## Examples\n\n**Convert a single file:**\n\n    dnglab convert IMG_1234.CR3 IMG_1234.DNG\n\n**Convert whole directory:**\n\n    dnglab convert ~/DCIM/100EOS ~/filmrolls/photos-france\n\n\n## Supported cameras and file formats\n\nFor a list of supported cameras please see [SUPPORTED_CAMERAS.md](SUPPORTED_CAMERAS.md).\n\n### Supported raw file formats\n\n|Manufacturer | Format | Supported                         | Remarks                                |\n|-------------|--------|-----------------------------------|----------------------------------------|\n|ARRI         | ARI    | ✅ Yes                            |                                        |\n|Canon        | CR3    | ✅ Yes                            | [CR3_STATE.md](CR3_STATE.md)           |\n|Canon        | CR2    | ✅ Yes                            |                                        |\n|Canon        | CRW    | ✅ Yes                            |                                        |\n|Epson        | ERF    | ✅ Yes                            |                                        |\n|Fujifilm     | RAF    | ✅ Yes                            |                                        |\n|Hasselblad   | 3FR    | ✅ Yes                            |                                        |\n|Kodak        | KDC    | ✅ Yes                            |                                        |\n|Kodak        | DCS    | ✅ Yes                            |                                        |\n|Kodak        | DCR    | ✅ Yes                            |                                        |\n|Leaf         | IIQ    | ✅ Yes                            |                                        |\n|Leaf         | MOS    | ✅ Yes                            |                                        |\n|Mamiya       | MEF    | ✅ Yes                            |                                        |\n|Minolta      | MRW    | ✅ Yes                            |                                        |\n|Nikon        | NEF    | ✅ Yes                            |                                        |\n|Nikon        | NRW    | ✅ Yes                            |                                        |\n|Olympus      | ORF    | ✅ Yes                            |                                        |\n|Panasonic/Leica| RW2  | ✅ Yes                            |                                        |\n|Pentax/Ricoh | PEF    | ✅ Yes                            |                                        |\n|Phase One    | IIQ    | ✅ Yes                            |                                        |\n|Samsung      | SRW    | ✅ Yes                            |                                        |\n|Sony         | ARW    | ✅ Yes                            |                                        |\n|Sony         | SRF    | ✅ Yes                            |                                        |\n|Sony         | SR2    | ✅ Yes                            |                                        |\n\n### Supported DNG features\n\n * DNG lossless compression (LJPEG-92)\n\n## Command line help\n\n### convert subcommand\n\n````\ndnglab-convert\nConvert raw image(s) into dng format\n\nUSAGE:\n    dnglab convert [OPTIONS] \u003cINPUT\u003e \u003cOUTPUT\u003e\n\nARGS:\n    \u003cINPUT\u003e     Input file or directory\n    \u003cOUTPUT\u003e    Output file or existing directory\n\nOPTIONS:\n        --artist \u003cartist\u003e\n            Set the artist tag\n\n    -c, --compression \u003ccompression\u003e\n            Compression for raw image [default: lossless] [possible values: lossless, uncompressed]\n\n        --crop \u003ccrop\u003e\n            DNG default crop [default: best] [possible values: best, activearea, none]\n\n    -d\n            turns on debugging mode\n\n        --dng-preview \u003cpreview\u003e\n            DNG include preview image [default: true]\n\n        --dng-thumbnail \u003cthumbnail\u003e\n            DNG include thumbnail image [default: true]\n\n        --embed-raw \u003cembedded\u003e\n            Embed the raw file into DNG [default: true]\n\n    -f, --override\n            Override existing files\n\n    -h, --help\n            Print help information\n\n        --image-index \u003cindex\u003e\n            Select a specific image index (or 'all') if file is a image container [default: 0]\n\n        --ljpeg92-predictor \u003cpredictor\u003e\n            LJPEG-92 predictor [default: 1] [possible values: 1, 2, 3, 4, 5, 6, 7]\n\n    -r, --recursive\n            Process input directory recursive\n\n    -v\n            Print more messages\n````\n\n### analyze subcommand\n\n````\ndnglab-analyze\nAnalyze raw image\n\nUSAGE:\n    dnglab analyze [OPTIONS] \u003cFILE\u003e\n\nARGS:\n    \u003cFILE\u003e    Input file\n\nOPTIONS:\n    -d                          turns on debugging mode\n        --full-pixel            Write uncompressed full pixel data to STDOUT\n    -h, --help                  Print help information\n        --json                  Format metadata as JSON\n        --meta                  Write metadata to STDOUT\n        --preview-checksum      Write MD5 checksum of preview pixels to STDOUT\n        --preview-pixel         Write uncompressed preview pixel data to STDOUT\n        --raw-checksum          Write MD5 checksum of raw pixels to STDOUT\n        --raw-pixel\n        --srgb                  Write sRGB 16-bit TIFF to STDOUT\n        --structure             Write file structure to STDOUT\n        --summary               Write summary information for file to STDOUT\n        --thumbnail-checksum    Write MD5 checksum of thumbnail pixels to STDOUT\n        --thumbnail-pixel       Write uncompressed preview pixel data to STDOUT\n    -v                          Print more messages\n        --yaml                  Format metadata as YAML\n\n````\n\nWith **analyze**, you can get a full dump of the internal file structure\nas YAML or JSON. With JSON output, it's possible to filter and transform\nthe data with **jq**.\nFor example, to get the *cfa_layout* from the CMP1 box for CR3 files, you can\nwrite:\n\n````\nfind /cr3samples/ -type f -name \"*.CR3\" -exec dnglab analyze --structure '{}' --json \\; | \\\n  jq \". | { file: .file.fileName, cfa_layout: .data.fileStructure.cr3.filebox.moov.trak[2].mdia.minf.stbl.stsd.craw.cfa_layout}\"\n````\n\nThe output is:\n\n```json\n{\n  \"file\": \"Canon EOS 90D_CRAW_ISO_250_nocrop_nodual.CR3\",\n  \"cfa_layout\": 1\n}\n{\n  \"file\": \"Canon EOS 90D_CRAW_ISO_100_nocrop_nodual.CR3\",\n  \"cfa_layout\": 1\n}\n```\n\n### extract subcommand\n\n````\ndnglab-extract\nExtract embedded original Raw from DNG\n\nUSAGE:\n    dnglab extract [OPTIONS] \u003cFILE\u003e \u003cINPUT\u003e \u003cOUTPUT\u003e\n\nARGS:\n    \u003cFILE\u003e      Input file\n    \u003cINPUT\u003e     Input file or directory\n    \u003cOUTPUT\u003e    Output file or existing directory\n\nOPTIONS:\n    -d                  turns on debugging mode\n    -f, --override      Override existing files\n    -h, --help          Print help information\n    -r, --recursive     Process input directory recursive\n        --skipchecks    Skip integrity checks\n    -v                  Print more messages\n````\n\n### makedng subcommand\n````\nLowlevel command to make a DNG file\n\nUsage: dnglab makedng [OPTIONS] --input \u003cINPUT\u003e...\n\nOptions:\n  -d...\n          turns on debugging mode\n\n  -o, --output \u003cOUTPUT\u003e\n          Output DNG file path\n\n  -i, --input \u003cINPUT\u003e...\n          Input files to merge into a single DNG file. Usually only a single input file is used.\n          If multiple input files are given, --map should be used to specifiy how to interpret each intput file.\n\n  -v\n          Print more messages\n\n      --map \u003cmap\u003e...\n          When multiple input files given, each input file should be mapped to a specific type of data.\n          First input file starts with index 0. Possible types are 'raw', 'preview', 'thumbnail', 'exif', 'xmp'.\n          Input files which are not mapped are ignored.\n\n          [default: 0:raw 0:preview 0:thumbnail 0:exif 0:xmp]\n\n      --dng-backward-version \u003cversion\u003e\n          DNG specification version\n\n          [default: 1.4]\n          [possible values: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6]\n\n      --colorimetric-reference \u003creference\u003e\n          Reference for XYZ values\n\n          [default: scene]\n          [possible values: scene, output]\n\n      --unique-camera-model \u003cid\u003e\n          Unique camera model\n\n      --artist \u003cartist\u003e\n          Set the Artist tag\n\n      --make \u003cmake\u003e\n          Set the Make tag\n\n      --model \u003cmodel\u003e\n          Set the Model tag\n\n      --matrix1 \u003cMATRIX\u003e\n          Matrix 1\n\n          [possible values: XYZ_sRGB_D50, XYZ_sRGB_D65, XYZ_AdobeRGB_D50, XYZ_AdobeRGB_D65, \"custom 3x3 matrix (comma seperated)\"]\n\n      --matrix2 \u003cMATRIX\u003e\n          Matrix 2\n\n          [possible values: XYZ_sRGB_D50, XYZ_sRGB_D65, XYZ_AdobeRGB_D50, XYZ_AdobeRGB_D65, \"custom 3x3 matrix (comma seperated)\"]\n\n      --matrix3 \u003cMATRIX\u003e\n          Matrix 3\n\n          [possible values: XYZ_sRGB_D50, XYZ_sRGB_D65, XYZ_AdobeRGB_D50, XYZ_AdobeRGB_D65, \"custom 3x3 matrix (comma seperated)\"]\n\n      --illuminant1 \u003cILLUMINANT\u003e\n          Illuminant 1\n\n          [possible values: Unknown, A, B, C, D50, D55, D65, D75]\n\n      --illuminant2 \u003cILLUMINANT\u003e\n          Illuminant 2\n\n          [possible values: Unknown, A, B, C, D50, D55, D65, D75]\n\n      --illuminant3 \u003cILLUMINANT\u003e\n          Illuminant 3\n\n          [possible values: Unknown, A, B, C, D50, D55, D65, D75]\n\n      --linearization \u003cTABLE\u003e\n          Linearization table\n\n          [possible values: 8bit_sRGB, 8bit_sRGB_invert, 16bit_sRGB, 16bit_sRGB_invert, 8bit_gamma1.8, 8bit_gamma1.8_invert, 8bit_gamma2.0, 8bit_gamma2.0_invert, 8bit_gamma2.2, 8bit_gamma2.2_invert, 8bit_gamma2.4, 8bit_gamma2.4_invert, 16bit_gamma1.8, 16bit_gamma1.8_invert, 16bit_gamma2.0, 16bit_gamma2.0_invert, 16bit_gamma2.2, 16bit_gamma2.2_invert, 16bit_gamma2.4, 16bit_gamma2.4_invert, \"custom table (comma seperated)\"]\n\n      --wb \u003cR,G,B\u003e\n          Whitebalance as-shot\n\n      --white-xy \u003cx,y\u003e\n          Whitebalance as-shot encoded as xy chromaticity coordinates\n\n          [possible values: D50, D65, \"custom x,y value (comma seperated)\"]\n\n  -f, --override\n          Override existing files\n\n  -h, --help\n          Print help (see a summary with '-h')\n\n````\n\n## Contribute samples\nPlease see our guide: [CONTRIBUTE_SAMPLES.md](CONTRIBUTE_SAMPLES.md).\n\n## FAQ\n\n### Why a DNG tool if there is already something from Adobe?\nThe DNG converter from Adobe is free (at cost), but not free in terms of free software. Nobody can add or fix camera support except of Adobe. And it has no support for Linux. That's why I've started writing my own little DNG swiss army knife.\n\n### Why should I use DNG instead of RAW?\nNever ask. If you need DNG you will know.\n\n\n### Will camera/format (...) be added?\nWell, depends on developer resources.\n\n### Is a GUI in planning?\nYes, DNGLab should get a GUI in near future.\n\n### How can I donate to this project?\nI don't have any sponsoring or donation account like Patreon or Paypal.\nIf you want to surprise me, please have a look at my [Amazon wish list](https://www.amazon.de/hz/wishlist/ls/DJ87KTFQUK8D?ref_=wl_share).\n\n\n## Credits\n\nSpecial thanks goes to:\n\n * Darktable developer team [www.darktable.org](https://www.darktable.org)\n * Laurent Clévy [CR3 documentation](https://github.com/lclevy/canon_cr3)\n * Kostya Shishkov\n * Hubert Kowalski\n * Rawloader development team [rawloader](https://github.com/pedrocr/rawloader)\n * All volunteers who have contributed samples.\n\nWithout the support and engagement from these people the development of\ndnglab would not have been possible.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnglab%2Fdnglab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdnglab%2Fdnglab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnglab%2Fdnglab/lists"}