Skip to main content Skip to footer

NEXMEDIA'S NEW WEB IMAGE OPTIMISER APP IS NOW AVAILABLE FOR WINDOWS

Overview

One of the more repetitive parts of building websites is preparing client-supplied imagery for the web. Clients will often provide large JPEG or PNG files straight from cameras, phones, or design software, sometimes several megabytes each and in batches of dozens or hundreds.

Before those images can be used efficiently on a website, they usually need to be resized, converted to a more suitable format, compressed, and checked to make sure the final file size is reasonable. Doing that manually across a large batch quickly becomes time-consuming. Therefore, I built NexMedia Web Image Optimiser to make that process faster and more consistent.

 

The Solution

NexMedia Web Image Optimiser is a Windows desktop application built around a batch-processing workflow. Images can be imported individually or as an entire folder, selected in groups, assigned output settings, optimised, reviewed, and exported without modifying the original files. The application currently supports JPEG, PNG, and WebP, with raster images capable of being converted and optimised for web use.

Users can configure:

  • output format
  • target dimensions
  • resizing behaviour
  • maximum file size
  • minimum WebP quality
  • whether images can be upscaled
  • whether dimensions can be reduced further if compression alone cannot reach the target

The aim was not simply to provide another image converter, but to automate the decisions that usually require repeated manual trial and error.

 

Automatic Quality Selection

One of the most important parts of the project is the automatic WebP quality selection.

Instead of applying the same compression quality to every image, the optimiser attempts to find the highest possible quality that still satisfies the requested file-size target. For example, two images resized to the same dimensions may behave very differently when compressed. A relatively simple image may fit comfortably below 200 KB at quality 95, while a highly detailed photograph may require significantly more compression. The optimiser therefore evaluates the encoded output and adjusts the quality accordingly.

Conceptually, this amounts to:

Maximise image quality

while:

output file size <= target file size
quality >= configured minimum quality

This allows each image to use an appropriate compression level instead of relying on a fixed value. If the target still cannot be achieved at the minimum permitted quality, the application can optionally reduce the image dimensions further and try again.

 

Building The Desktop App

The application is built using C# and WPF on .NET, split into separate Core, Desktop and Test projects. Keeping the optimisation logic outside the user-interface layer made it easier to test the underlying behaviour independently from WPF. I also created a larger manual test plan for areas that are difficult to meaningfully test through unit tests alone, such as installation, UI behaviour, exporting, update handling, large batches and compatibility across Windows environments.

I wanted the application to behave more like a normal desktop product rather than something that had to be manually rebuilt and copied each time it changed. I integrated VeloPack to handle application packaging, installation and updating. Releases are published through GitHub, and installed copies periodically check for new stable versions. When an update is available, it can be downloaded automatically and applied when the application is restarted.

The application also contains its own Release Notes page, which retrieves published release information from GitHub and displays the release history inside the application. It can identify both the latest available release and the version currently installed, as well as show an unread indicator when new release notes are available.

The interface went through several iterations during development. Early versions were much more table-oriented, but I eventually redesigned the main workspace around larger image cards and a persistent settings panel. The final interface uses a dark theme with NexMedia's orange accent colour and includes:

  • batch selection controls
  • image status pills
  • resize presets
  • configurable output settings
  • export controls
  • built-in Help
  • Settings
  • Release Notes
  • light and dark appearance options

 

What I Learned

This project started as a relatively simple internal productivity tool, but it gradually became a much broader software-engineering exercise. It gave me practical experience with:

  • structuring a multi-project .NET application
  • WPF interface development
  • asynchronous desktop workflows
  • image processing and encoding
  • optimisation algorithms
  • automated and manual testing
  • application packaging
  • semantic versioning
  • GitHub release workflows
  • automatic desktop updates
  • handling real application state and failure scenarios

It also reinforced the importance of designing around an actual workflow rather than just implementing individual features.

The most valuable part of the project was taking a repetitive task I regularly encountered during web development and turning it into a complete, distributable desktop application.

 

The Result

NexMedia Web Image Optimiser is now at its first public stable release. The application can take a batch of high-resolution images and turn them into appropriately resized and compressed web assets with considerably less manual intervention than the original workflow. What began as a way to save time on image preparation became an opportunity to build and release a complete Windows application from initial idea through to designing, developing, testing and distribution.

 

Nexmedia Web Image Optimiser is now available on Windows.