flashraw
Fast, safe camera RAW decoding for Python, with zero-copy NumPy output.
flashraw reads RAW files from most cameras (1,980 of the 2,016 files of the raw.pixls.us corpus; the rest are formats not supported yet, see docs/formats.md) — DNG, CR2, CR3, CRW, NEF/NRW,
ARW/SR2/SRF, RAF, RW2, ORF, PEF, SRW, IIQ, 3FR/FFF, X3F, MRW, KDC/DCR, ERF, MEF and more —
and returns sensor-domain data (or display-ready RGB) as NumPy arrays, together with everything
needed to interpret them: CFA layout, black/white levels, white balance, colour matrices,
crops, orientation, lens and exposure metadata, and embedded previews.
- Fast: the decoder is written in Rust with SIMD kernels and multithreaded decoding (including single-stream formats such as CR2, lossless DNG and NEF).
- Zero-copy: decoded pixels become the NumPy array's memory;
bytesinputs and paths (memory-mapped) are not copied either. - Parallel: decoding releases the GIL — decode many files from Python threads.
- Safe: bounds-checked parsing, safety limits for untrusted input, fuzzed; malformed input
raises a
FlashRawError, never crashes the interpreter. Truncated files are recovered with structured warnings (or rejected withcorruption_policy="strict"). - Typed: frozen dataclasses for metadata,
py.typed,mypy --strictclean.
One abi3 wheel per platform supports CPython 3.9 and later (Linux x86-64/ARM64, macOS x86-64/ARM64, Windows x64; tested by the maintainers on Linux x86-64 and macOS arm64). The only dependency is NumPy.
Install
pip install flashraw
pip install "flashraw[pil]" # optional: Frame.to_pil()
Usage
import flashraw
with flashraw.open("photo.NEF") as raw: # path, bytes, bytearray, memoryview or file object
m = raw.metadata
print(m.camera.name, m.lens.model, m.exposure.iso, m.exposure.exposure_time)
print(m.cfa.pattern, m.black_level.mean, m.white_level, m.white_balance)
frame = raw.decode() # sensor data
frame.array # numpy uint16, shape (height, width)
frame.active_view() # view of the active area
rgba = raw.decode("rgba8").array # display-ready sRGB, uint8 (h, w, 4)
raw.decode("rgba8").to_pil().save("photo.png")
jpeg = raw.preview_bytes() # embedded JPEG preview, no decoding
# One-liner:
image = flashraw.imread("photo.CR3") # RGBA8 array
Outputs (output=, the first argument of decode / imread):
output |
dtype, shape | content |
|---|---|---|
raw-u16 |
uint16 (h, w) or (h, w, c) |
sensor samples as stored (default) |
raw-f32 |
float32 (h, w) or (h, w, c) |
the same as floats (floating-point DNGs unscaled) |
normalized |
float32 (h, w) or (h, w, c) |
black-subtracted, white-normalised to [0, 1], CFA layout kept |
linear-rgb |
float32 (h, w, 3) |
demosaiced, white-balanced, linear sRGB primaries (or color_space) |
linear-rgb-f16 |
float16 (h, w, 3) |
the same as half floats |
linear-rgb16 |
uint16 (h, w, 3) |
the same, clipped to [0, 1] and scaled to [0, 65535] |
rgba8 |
uint8 (h, w, 4) |
display-ready sRGB, orientation applied |
rgb16 |
uint16 (h, w, 3) |
display-ready sRGB at 16 bits, orientation applied |
Options of decode: backend ("auto", "cpu", "simd", "gpu"), threads, region, crop
(True, or "active" for raw outputs), demosaic ("bilinear", "half-size"), apply_opcodes,
corruption_policy ("recover", "strict"), exposure, black_point, white_point,
preview_fallback (RGB outputs of undecodable sensor data return the embedded full-size
preview, frame.source == "preview"), color_space ("srgb", "display-p3", "adobe-rgb",
"prophoto", "rec2020"; frame.icc_profile is the matching ICC profile), output_profile (convert
to any RGB ICC profile; with intent and black_point_compensation). flashraw.open takes
max_samples and max_dimension to tighten the limits for untrusted files. Names that differ from
the other bindings: docs/api-names.md.
from concurrent.futures import ThreadPoolExecutor
def decode(path):
return flashraw.imread(path, "raw-u16", threads=1)
with ThreadPoolExecutor(8) as pool: # runs in parallel: the GIL is released
arrays = list(pool.map(decode, paths))
Errors derive from flashraw.FlashRawError (UnsupportedFormatError, CorruptFileError with
structured truncation details, InvalidArgumentError, ...).
Documentation: docs/python.md. FlashRaw is also available as a Rust crate, a command-line tool and an npm package (repository).
License
MIT OR Apache-2.0.
Metadata
Release files for flashraw 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| flashraw-0.1.0.tar.gz | 822.7 kB | Without provenance | Details for flashraw-0.1.0.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| flashraw-0.1.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details for flashraw-0.1.0-cp39-abi3-win_amd64.whl |
| flashraw-0.1.0-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details for flashraw-0.1.0-cp39-abi3-manylinux_2_28_x86_64.whl |
| flashraw-0.1.0-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details for flashraw-0.1.0-cp39-abi3-manylinux_2_28_aarch64.whl |
| flashraw-0.1.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details for flashraw-0.1.0-cp39-abi3-macosx_11_0_arm64.whl |
| flashraw-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details for flashraw-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl |
Total release size: 31.4 MB
Release files / flashraw-0.1.0.tar.gz
| Download URL | flashraw-0.1.0.tar.gz |
|---|---|
| Size | 822.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c654feb1bf9fed55df29b7d21a8ce213e89b35a3cb1f7d89c0b1dce111907d2
|
|
BLAKE2b-256 checksum How to use checksums |
612c3afa7788c87ccb6dfa1959eb3ed266f259b5a5b5f047d7cac2f0d9b9a005
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / flashraw-0.1.0-cp39-abi3-win_amd64.whl
| Download URL | flashraw-0.1.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b5b96e78cb5c6d42e7d0d13e6225070ee293662af06671de930d5134b3a5cb87
|
|
BLAKE2b-256 checksum How to use checksums |
d551b13d5c374b3f651ec4e26defeb04d4c12bb58816bed02f4f1e51a60f9e5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / flashraw-0.1.0-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | flashraw-0.1.0-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 10.6 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
aa41e37bbf1135f6fdf232b33de26cdbd9415a9e1efd099fd77a18ef393c63d0
|
|
BLAKE2b-256 checksum How to use checksums |
c6d1ae0392ca40f99ee5a6360c9c0c67c45d630262a2993791de38610a9d2655
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / flashraw-0.1.0-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | flashraw-0.1.0-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
9e465d3c4389f3554b2df29a019de4fed673d7b1206fb8a33866d7d760ca87e2
|
|
BLAKE2b-256 checksum How to use checksums |
66fef3163198647b7e18a56636632f8e88cd3b1a167068a350fc9a49d118ab8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / flashraw-0.1.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | flashraw-0.1.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d48fc1199542ebe804298b366dda4952761d0fef965395046fd784df9355fa7
|
|
BLAKE2b-256 checksum How to use checksums |
9f4630f65524187c7e6b578182e810446677a5d495ce40b12f7b98e1f7d72ab3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Release files / flashraw-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | flashraw-0.1.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
4520412e51f1617b9d6b762d02251d670d3de7c5952e205e9bc4e27a7a5272e1
|
|
BLAKE2b-256 checksum How to use checksums |
f77bc28a0ad18c0a34752f8d961b25eefa351485eabe4edc871be95ba5806fe7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.5
|
Security for flashraw 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.