/simple-deflicker

A lightweight and easy to use tool for deflickering image sequences.

Primary LanguageGo

Simple Deflicker

A minimalist, lightning-fast and easy to use tool for deflickering image sequences such as timelapses. It's still in its early stages of development.

Short Demo

What is timelapse flickering?

Timelapse flickering can occur if one or more settings of the camera have been left on "auto" which causes it to randomly switch between two settings (for example shutter speeds). Here is an example on YouTube (not made by me): Timelapse flickering demonstration

How to use this software

  • Download the latest version from the releases page. The compiled binary is only available for windows at this point
  • Execute simple-deflicker.exe either by double-clicking it or by launching it from the console. If launched without any arguments Simple Deflicker will ask you to specify a source and destination folder. Read the wiki for more details.
  • The software will then start deflickering the images.

Current limitations of the tool

  • Only JPG and PNG (8bit) are supported
  • JPGs will always be saved with a compression setting of 95
  • All metadata present in the source files will not be copied over.
  • The software can only fix global flicker. It can not deal with rolling flicker (caused by certain indoor lighting conditions).

How does the deflickering work?

The current implementation uses a technique called histogram matching. It basically creates a list of how often a certain brighness (or rather every individual brightness level) appears, creates a rolling average to allow for gradual brightness changes (for example in a day to night transition) and finally shifts the brightness to match the "smoothed out" brightness levels.

What's planned for the future

  • Compiled binaries for more operating systems (linux and macOS)
  • Maybe a proper GUI (though CLI will remain possible)
  • 16bit image support

How is the software structured? (only important for developers, not for users)

The software uses several other packages:

  • Imaging for loading, saving and manipulating image files.
  • dialog for creating the dialog boxes and file selection windows.
  • uiprogress for creating the progress bars in the console. Let's take a quick tour through all the files:
  • main.go contains the main() function as well as the runDeflickering() function which orchestrate the entire process.
  • histogram.go contains the mathematical operations for handeling histograms and luts (Look up tables) used for deflickering
  • files.go deals with the filesystem. It parses the source directory for images and creates the destination directory if it does not exist.
  • config.go deals with the configuration, either via args or (if the args parameters are missing) by creating a pop-up to let users make a selection.
  • progress.go is responsible for managing the progress bars in the console window.
  • util.go contains various helper functions.