A fast, cross-platform image viewer specifically built for RAW photography files, developed with Flutter and powered by LibRaw via Dart FFI.
Raw Viewer allows photographers and enthusiasts to seamlessly view, browse, and organize their camera RAW files alongside standard image formats without relying on heavy photo editing software.
- Extensive Format Support:
- RAW formats:
.arw,.cr2,.cr3,.dng,.nef,.orf,.raf,.rw2,.srw - Standard formats:
.jpg,.jpeg,.png,.webp
- RAW formats:
- Blazing Fast Decoding: Uses native C++
LibRawwith Dart isolates to decode images off the main UI thread. - Embedded Previews: Extracts embedded thumbnails and previews for lightning-fast browsing before falling back to full RAW decoding.
- Smart Caching: Built-in LRU cache to manage memory efficiency while keeping viewed images ready.
- EXIF Metadata: Reads and displays true image capture timestamps directly from EXIF data.
- Smooth Interaction: Fast page scroll, smooth pinch-to-zoom (touch), and scroll-to-zoom (mouse) functionality.
- Windows Context Menu: Lets you install an “Open in RawView” Explorer entry for the current user, supporting files, multi-file selection, folders, and folder background opening.
- Cross-Platform: Built for desktop (Windows, macOS) and mobile (Android) natively.
(Add screenshots here)
- Flutter SDK (>= 3.2.3)
- Appropriate native build tools for your target platform:
- Windows: Visual Studio with C++ workload
- macOS/iOS: Xcode
- Android: Android Studio & NDK
-
Clone the repository:
git clone https://github.com/stmtc233/rawviewer.git cd rawviewer -
Fetch Flutter dependencies:
flutter pub get
-
Run the application:
flutter run
- Frontend: Flutter framework with a grid-based gallery and swipeable full-screen viewer.
- Backend Decoder:
- Uses
ffito connect Dart with native C/C++ wrappers around LibRaw. - Native wrappers extract thumbnails and half-size previews efficiently.
- Generates standard BMP bytes in memory for instant rendering via
Image.memory.
- Uses
- Isolate Workers: All intensive C++ FFI calls are offloaded using Dart compute/worker services to prevent UI jank.
- file_picker - For opening files and folders natively.
- exif - To parse image metadata timestamps.
- permission_handler - Handling Android storage permissions.
- ffi - For LibRaw C++ bindings.
This project is licensed under the MIT License.
Third-Party Licenses:
- This software uses the LibRaw library, which is distributed under the GNU LESSER GENERAL PUBLIC LICENSE version 2.1 (LGPL-2.1) and the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0.
- LibRaw is dynamically linked and used via Dart FFI. The original LibRaw source code is included in this repository unmodified. You can choose either LGPL-2.1 or CDDL-1.0 to comply with LibRaw's usage requirements.