Image Converter Windows App
A local-first Windows image converter built with Rust for private, offline batch conversion.
Repository Links
GitHub: https://github.com/walujanle/image-converter-windows-app
GitLab: https://gitlab.com/walujanle/image-converter-windows-app
Download Links
Latest Release: https://links.leonardwalujan.eu.org/lw/image-converter-windows-app-latest
Latest Release Checksum (SHA-256): https://links.leonardwalujan.eu.org/lw/image-converter-windows-app-latest-checksum
Source Code: https://links.leonardwalujan.eu.org/lw/image-converter-windows-app-latest-source-code
Screenshots
-
Image Converter Windows App Screenshot 1 -
Image Converter Windows App Screenshot 2 -
Image Converter Windows App Screenshot 3 -
Image Converter Windows App Screenshot 4
Short Explanation
Image Converter Windows App is a portable desktop application for converting image files directly on a Windows computer. It is designed for people who want to convert many images at once without uploading personal photos to an online service.
The app supports common image formats such as JPG, PNG, WebP, AVIF, HEIC/HEIF, and TIFF. It can also decode camera RAW files such as DNG, CR2, NEF, ARW, PEF, and SR2 through the bundled RAW decoder. The conversion flow includes format selection, quality control, resizing, cropping, filename customization, custom output folders, presets, progress tracking, and metadata preservation.
The important idea is simple: the photos stay on the user’s device. The app reads the local file, processes it locally, writes the converted result locally, and does not need a server for the conversion itself.
Project Goals
I built this application from curiosity about how image conversion actually works. I wanted to understand how different image formats store data, how metadata such as EXIF, XMP, IPTC, and ICC can be preserved across formats, and how far conversion performance can be pushed with Rust.
It also became a practical way for me to study real Rust code through a complete application, not only through small isolated examples. The project gave me room to learn how conversion logic, metadata handling, file validation, UI state, and release packaging can work together in one tool.
Beyond the learning side, this app solves a workflow problem I often see when working with many images. When images need to be converted, renamed, resized, or recompressed, doing everything manually can be slow and messy. This app brings those steps into one local tool, so files can be processed faster and organized with cleaner naming, predictable formats, and better file structure.
Tech Stack Used
- Rust for the application and conversion engine
- Native Windows desktop application model
- Windows 10/11 64-bit target
- SQLite for portable settings and preset storage
- Rust Windows/MSVC target for the main application binary
- MinGW/GCC for rebuilding the bundled
dcrawRAW decoder when needed - CMD and PowerShell for the automated Windows release workflow
- Portable ZIP distribution with app-local runtime files
The app uses external codecs and Rust crates internally, but the list above focuses on the main technology choices rather than library names.
Features
Batch image conversion
Located in the main Converter screen. Users can click + Select Files or drag images into the file list, choose an output format, and start conversion with Start Conversion. The file list shows progress and result status for each item.
Supported input and output formats
Located in the format selector in the options panel. The app can output JPG, PNG, WebP, AVIF, HEIC, and TIFF. It can read those common formats plus camera RAW formats such as DNG, CR2, NEF, ARW, PEF, and SR2.
Simple and Advanced modes
Located in the top header while the Converter tool is active. Simple mode keeps the interface focused on the most common options. Advanced mode reveals more controls for output location, resizing, cropping, filename rules, and batch size.
Quality and lossless controls
Located in the options panel. JPG, WebP, AVIF, and HEIC use quality controls. WebP and HEIC also provide a lossless option. PNG uses an optional Optimize PNG setting, which is disabled by default because it can be heavy on large batches.
Resize and crop
Located in Advanced mode. Resize lets users set width and height, with an option to preserve aspect ratio. Crop lets users remove percentages from the top, bottom, left, and right sides before resizing.
Filename and output organization
Located in Advanced mode. Users can set a custom output folder, add a filename prefix, find and replace parts of filenames, add automatic resolution suffixes, and generate numbered output names.
Metadata preservation
Available through the Keep Metadata option in the converter. When it is enabled, the app tries to preserve EXIF, XMP, IPTC, and ICC metadata when the output container supports it. For formats where Windows reads only part of the metadata, the app adds OS-readable projections so more camera, GPS, lens, and author fields remain visible in Windows file properties. ICC colour profiles can also be carried for supported outputs to keep colour appearance consistent.
RAW metadata handling
Handled inside the metadata pipeline. For TIFF-like RAW files, the app reads embedded metadata and also checks sidecar files when available. RAW to JPG, HEIC, WebP, PNG, AVIF, and TIFF routes are tracked carefully because different cameras and containers expose metadata differently.
Presets
Located in the preset panel and the Preset Manager. Users can save conversion settings, load recent or pinned presets, search presets, and organize them into folders.
Icon Generator
Located in the top tool switcher under Icon Generator. This separate tool can generate Windows ICO, web favicon, and Android icon output packages from a source image.
Portable settings
Stored in the data folder next to the executable. The app keeps settings and presets locally, so the folder can move together with the portable app.
How It Works
When a file is converted, the app validates the file type, reads the image, prepares metadata when Keep Metadata or colour-profile transfer applies, corrects orientation, applies optional crop, applies optional resize, and then encodes the target format. The result is first written to a temporary file. After the output and requested metadata are verified, the temporary file is published as the final file.
This approach protects the previous output from being deleted too early. If encoding or verification fails, the temporary file is removed and the existing file is left untouched.
Installation Guide
For normal users:
- Download the latest portable ZIP from the download link above.
- Optional: compare the SHA-256 checksum with the checksum link.
- Extract the ZIP into a folder you control, for example
Documents\Apps\Image Converter Windows App. - Run
image-converter-windows-app.exe. - Keep the
datafolder beside the executable if you want settings and presets to stay with the app.
If Windows SmartScreen appears, only continue when the file came from the official download source. The app is distributed as a portable Windows executable, so unsigned builds may show a warning on some systems.
For developers:
-
Use Windows 10/11 64-bit with the stable Rust toolchain.
-
Add the Windows MSVC Rust target for the main application build. The current release bundle uses the
x64-windowsvcpkg triplet and copies MSVC runtime DLLs. -
Install Visual Studio 2022 Build Tools with the C++ build tools and Windows SDK. These provide the MSVC linker/toolchain needed by the Rust MSVC target and by vcpkg ports that compile from source.
-
Install MinGW/GCC and make sure
gccis available inPATH. The release script usesgccto rebuilddcraw.exefromdcraw\dcraw.cwhen the existingdcraw.exeor hash file is missing or changed. -
Install Git and CMake, because the dependency setup uses the normal vcpkg workflow.
-
Install a standalone vcpkg folder and bootstrap it:
git clone https://github.com/microsoft/vcpkg.git C:\vcpkg C:\vcpkg\bootstrap-vcpkg.bat -
Install the required vcpkg ports using the same
x64-windowstriplet expected by the release script:vcpkg install libheif[hevc]:x64-windows vcpkg install dav1d:x64-windows vcpkg install pkgconf:x64-windows -
Set
VCPKG_ROOTto the vcpkg folder. For manual Cargo commands, also set:$env:PKG_CONFIG = "$env:VCPKG_ROOT\installed\x64-windows\tools\pkgconf\pkgconf.exe" $env:PKG_CONFIG_PATH = "$env:VCPKG_ROOT\installed\x64-windows\lib\pkgconfig" $env:PATH = "$env:VCPKG_ROOT\installed\x64-windows\bin;$env:PATH" -
Run the usual development checks:
cargo check cargo test --lib cargo clippy --all-targets -- -D warnings cargo run -
For a portable release bundle, run
build_release_windows.bat. The script runs formatting, tests, clippy,dcrawverification or rebuild, release build, DLL collection, ZIP creation, and SHA-256 checksum generation.
set PUBLISHER=Your Publisher Name
build_release_windows.bat
The project has two separate native toolchain needs on Windows: the main Rust application uses the MSVC target/toolchain and vcpkg x64-windows, while the optional dcraw rebuild path uses MinGW/GCC through the gcc command.
Manual cargo build --release only creates the executable in target\release. To run that bare EXE outside the release folder, the HEIC/AVIF DLLs and MSVC runtime DLLs must be copied beside it. RAW support also requires dcraw.exe and dcraw.exe.sha256 to be present in the repository root before compiling, because the current app embeds dcraw into the executable and extracts it at runtime instead of searching for a sidecar dcraw.exe. The release script is the recommended path because it packages the runtime files automatically.
Limit Problems
- The official build is focused on Windows 10/11 64-bit.
- Very large images can use a lot of memory because the current pipeline loads the source image into memory.
- PNG optimization is intentionally optional and disabled by default because it can be slow and CPU-heavy.
- RAW support depends on the bundled RAW decoder and camera-specific file behavior.
- Metadata visibility can vary between Windows Properties, professional metadata tools, and other operating systems.
- WebP, AVIF, and HEIC do not natively support IPTC metadata.
- AVIF ICC profile embedding is not supported because of encoder limitations.
- Unsigned portable builds may trigger Windows SmartScreen warnings.
License
Image Converter Windows App is released under the GNU General Public License v3.0 or later.
This means users can study, modify, and redistribute the project under the GPL terms. The release bundle also includes third-party codec/runtime components, so their own licenses still apply.
Latest Projects
Image Converter Web App
A browser-native local-first image converter built with React, TypeScript, Web Workers, and a Rust/WebAssembly npm engine.
Image Converter WASM
A Rust WebAssembly image conversion package for browser and Node.js runtimes, published as an npm package.
Test
Test