Desktop Application

Image Converter Windows App

A local-first Windows image converter built with Rust for private, offline batch conversion.

Desktop Application Windows Rust

GitHub: https://github.com/walujanle/image-converter-windows-app

GitLab: https://gitlab.com/walujanle/image-converter-windows-app

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

  1. Image Converter Windows App Screenshot 1
    Image Converter Windows App Screenshot 1
  2. Image Converter Windows App Screenshot 2
    Image Converter Windows App Screenshot 2
  3. Image Converter Windows App Screenshot 3
    Image Converter Windows App Screenshot 3
  4. Image Converter Windows App Screenshot 4
    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 dcraw RAW 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:

  1. Download the latest portable ZIP from the download link above.
  2. Optional: compare the SHA-256 checksum with the checksum link.
  3. Extract the ZIP into a folder you control, for example Documents\Apps\Image Converter Windows App.
  4. Run image-converter-windows-app.exe.
  5. Keep the data folder 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:

  1. Use Windows 10/11 64-bit with the stable Rust toolchain.

  2. Add the Windows MSVC Rust target for the main application build. The current release bundle uses the x64-windows vcpkg triplet and copies MSVC runtime DLLs.

  3. 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.

  4. Install MinGW/GCC and make sure gcc is available in PATH. The release script uses gcc to rebuild dcraw.exe from dcraw\dcraw.c when the existing dcraw.exe or hash file is missing or changed.

  5. Install Git and CMake, because the dependency setup uses the normal vcpkg workflow.

  6. Install a standalone vcpkg folder and bootstrap it:

    git clone https://github.com/microsoft/vcpkg.git C:\vcpkg
    C:\vcpkg\bootstrap-vcpkg.bat
  7. Install the required vcpkg ports using the same x64-windows triplet expected by the release script:

    vcpkg install libheif[hevc]:x64-windows
    vcpkg install dav1d:x64-windows
    vcpkg install pkgconf:x64-windows
  8. Set VCPKG_ROOT to 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"
  9. Run the usual development checks:

    cargo check
    cargo test --lib
    cargo clippy --all-targets -- -D warnings
    cargo run
  10. For a portable release bundle, run build_release_windows.bat. The script runs formatting, tests, clippy, dcraw verification 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