Home

Awesome

nomacs - Image Lounge 🍸

nomacs is a free, open source image viewer, which supports multiple platforms. You can use it for viewing all common image formats including RAW and psd images. nomacs is licensed under the GNU General Public License v3 and available for Windows, Linux, FreeBSD, Mac, Haiku, and OS/2.

Build status Downloads Crowdin

Get the Source

git clone https://github.com/nomacs/nomacs.git
cd nomacs

# nomacs uses submodules for third party libraries
git submodule init
git submodule update

Build nomacs (Windows)

We assume you have an IDE (i.e. Visual Studio), python, git, and Qt installed.

Get all dependencies:

git submodule init
git submodule update

Project folders in 3rd-party will not be empty anymore. Now call:

python scripts/make.py "qtpath/bin"

This will build nomacs into build/nomacs. If you are using Visual Studio, you can then double-click build/nomacs/nomacs.sln. Right-click the nomacs project and choose Set as StartUp Project.

Build individual projects using:

python scripts/make.py "qt/bin" --project quazip,libraw --force

Developer Build

I like having a separate developer build (without submodules) that uses 3rd party libs already compiled. To do so you need to:

git submodule update --init --remote scripts 

# python scripts/make.py "C:\Qt\Qt-5.14.1-installer\5.14.2\msvc2017_64\bin" --lib-path C:\coding\nomacs\nomacs\3rd-party\build
python scripts/make.py "qt/bin" --lib-path "nomacs/3rd-party/build"

If anything did not work

Build nomacs (Linux/Unix)

Before you build nomacs, please note the following:

Get the required packages

The package lists and cmake configuration listed below enable all features in nomacs, which we recommend. However, if you do not want a particular feature you can omit certain packages.

Build options and their dependencies

This is the list of configurable packages and what they provide in nomacs. To ensure a feature is included/excluded set the cmake option for that feature. By default, all features are enabled if the dependencies are found when running cmake**.

The following Qt components are necessary: Core, Concurrent, Network, PrintSupport, SVG, Widgets, Core5Compat.

There are other optional features that can be enabled during build:

OptionDepends onRequiresDescription
ENABLE_RAWLibRAWENABLE_OPENCVEnables reading RAW images
ENABLE_TIFFLibTiffENABLE_OPENCVEnable reading multi-page TIFF
ENABLE_QUAZIPQuazip**Enable reading from zip files
ENABLE_OPENCVOpenCVRAW, TIFF, Adjustments, High-quality thumbnails, DRIF files, histogram, mosaic
ENABLE_PLUGINSnomacs/pluginsENABLE_OPENCVPaint on image, Composite, Affine Transform, Fake Miniatures, Page Extraction
ENABLE_TESTINGGoogleTestEnables make check target for unit testing

(**) Quazip is not enabled by default as of nomacs 3.19.1

Runtime dependencies

Additional packages will be used by nomacs if they are available at runtime, and they use the same Qt version as nomacs (5 or 6).

Ubuntu 24.04

# qt6
sudo apt install qt6-base-dev qt6-tools-dev qt6-svg-dev qt6-image-formats-plugins libexiv2-dev libraw-dev libopencv-dev libtiff-dev libtiff-dev libquazip1-qt6-dev build-essential git cmake lcov libgtest-dev

# qt5
# note: cmake configuration will fail if libquazip1-qt6-dev is also installed; or you can use USE_SYSTEM_QUAZIP=OFF
sudo apt install qtbase5-dev qttools5-dev libqt5svg5-dev qt5-image-formats-plugins libexiv2-dev libraw-dev libopencv-dev libtiff-dev libtiff-dev libquazip1-qt5-dev build-essential git cmake lcov libgtest-dev kimageformat-plugins

Ubuntu 22.04

# qt6
sudo apt install qt6-base-dev qt6-tools-dev qt6-tools-dev-tools libqt6svg6-dev libqt6core5compat6-dev qt6-l10n-tools qt6-image-formats-plugins libexiv2-dev libraw-dev libopencv-dev libtiff-dev libtiff-dev build-essential git cmake lcov libgtest-dev libgl-dev

# qt5
sudo apt install qtbase5-dev qttools5-dev libqt5svg5-dev qt5-image-formats-plugins libexiv2-dev libraw-dev libopencv-dev libtiff-dev libtiff-dev libquazip5-dev build-essential git cmake lcov libgtest-dev kimageformat-plugins

Arch

# qt6
sudo pacman -S qt6-base qt6-imageformats qt6-svg qt6-tools quazip-qt6 exiv2 libraw libtiff opencv kimageformats git cmake gtest base-devel

Redhat/Fedora/CentOS (tested on Rocky 9.5)

# qt6
sudo dnf install qt6-qtbase-devel qt6-qtimageformats qt6-qtsvg-devel qt6-qttools-devel qt6-qt5compat-devel LibRaw-devel opencv-devel exiv2-devel libtiff-devel git cmake lcov gtest-devel gcc-c++

# qt5
sudo dnf install qt5-qtbase-devel qt5-qtimageformats qt5-qtsvg-devel qt5-qttools-devel LibRaw-devel opencv-devel exiv2-devel libtiff-devel git cmake lcov gtest-devel gcc-c++ quazip-qt5-devel

FreeBSD (14.2 release)

# qt6
sudo pkg install qt6-base qt6-imageformats qt6-svg qt6-5compat qt6-tools quazip-qt6 tiff exiv2 kf6-kimageformats libraw opencv git cmake googletest gcc

# qt5
sudo pkg install qt5-gui qt5-imageformats
qt5-svg qt5-linguisttools qt5-qmake qt5-buildtools qt5-uitools qt5-concurrent quazip-qt5 tiff exiv2 kf5-kimageformats libraw opencv git cmake googletest gcc

Haiku (r1 beta 5)

# qt6
pkgman install qt6_base_devel qt6_tools_devel qt6_svg_devel qt6_5compat_devel quazip1_qt6_devel tiff_devel libraw_devel opencv_devel gtest_devel exiv2_devel kimageformats6 qt6_imageformats cake git gcc make pkgconfig lcms_devel

Configure nomacs

Nomacs is configured with cmake. These cmake options are often needed:

cd nomacs
mkdir build
cd build
cmake ../ImageLounge

Compile nomacs

make [-j 8]

You will now have a binary (~/nomacs/build/nomacs), which you can use directly, however you may need to set LD_LIBRARY_PATH for this to work. You can check the log output to see that nomacs is loading configuration files from the expected locations.

# running nomacs from ~/nomacs/build/
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./nomacs

Build and run tests

Nomacs uses GoogleTest, which is included in the package lists above. A check target will be created if GoogleTest is present. To build and run tests:

make check

Install nomacs

By default nomacs is installed to /usr/local/ unless you set CMAKE_INSTALL_PREFIX

sudo make install
# ldconfig is required on most linux distros
# Some systems you also require changes to 
# `/etc/ld.so.conf` to add `/usr/local/lib` 
sudo ldconfig

For Package Maintainers

Build nomacs (MacOS)

Install Homebrew for easier installation of dependencies. Install required dependencies:

brew install qt5 exiv2 opencv libraw quazip cmake pkg-config

Go to the nomacs directory and run cmake to get the Makefiles:

cd nomacs
mkdir build
cd build

For Homebrew on Intel models:

# qt5
$ export CPLUS_INCLUDE_PATH=/usr/local/include
$ Qt5_DIR=/usr/local/opt/qt5/ cmake -D QT_VERSION_MAJOR=5 --install-prefix /Applications ../ImageLounge/.

# qt6
$ cmake -D QT_VERSION_MAJOR=6 -D ENABLE_QUAZIP=ON --install-prefix /Applications ../ImageLounge/.

For Homebrew on Apple Silicon models:

$ Qt5_DIR=/opt/homebrew/opt/qt5/ cmake -DQT_QMAKE_EXECUTABLE=/opt/homebrew/opt/qt5/bin/qmake --install-prefix /Applications ../ImageLounge/.

Run make:

$ make

You will now have a binary (nomacs.app), which you can test (or use directly). To install it to /Applications, use

sudo make install

If you want to have an independent bundle image (nomacs.dmg) you can create it by using

$ make bundle

If macdeployqt complains about ERROR: Cannot resolve rpath "@rpath/QtGui.framework/Versions/A/QtGui" here is the solution:

$ cd /usr/local/lib/QtGui.framework/Versions/A
$ install_name_tool -id '@rpath/QtGui.framework/Versions/A/QtGui' QtGui
% otool -L QtGui| head -2
QtGui:
        @rpath/QtGui.framework/Versions/A/QtGui (compatibility version 6.0.0, current version 6.7.0)

Build nomacs (Windows Cross-Compile)

Compiles nomacs for Windows using M Cross Environment (MXE) from a Linux/Unix host.

MXE environment is usually compiled from source, however you may be able to skip this if MXE has packages for your platform:

git clone <mxe url>
cd mxe

# qt5
make MXE_TARGETS='x86_64-w64-mingw32.shared' qtbase qtimageformats qtwinextras opencv quazip tiff exiv2 libraw

# qt6 (quazip-qt6 is unavailable)
make MXE_TARGETS='x86_64-w64-mingw32.shared' qt6-qtbase qt6-qtimageformats qt6-qttools qt6-qt5compat opencv tiff exiv2 libraw

Setup build environment:

export MXE_DIR=~/mxe
export MXE_TARGET=x86_64-w64-mingw32.shared
export PATH="${MXE_DIR}/usr/bin:$PATH"

alias pkg-config=${MXE_TARGET}-pkg-config
alias qmake=${MXE_TARGET}-qmake
alias cmake=${MXE_TARGET}-cmake

Run cmake out-of-tree:

mkdir build-nomacs
cd build-nomacs

cmake -D QT_VERSION_MAJOR=5 -D ENABLE_TRANSLATIONS=ON -D ENABLE_HEIF=ON -D ENABLE_AVIF=ON  \
-DENABLE_JXL=ON -D USE_SYSTEM_QUAZIP=OFF <nomacs-path>/ImageLounge

Compile nomacs:

make -j8
make collect

Run on WINE:

wine nomacs-mingw/nomacs.exe

Run on Windows:

cd C:\
xcopy /DEY <shared-folder>\build-nomacs\nomacs-mingw nomacs
cd nomacs
nomacs.exe

Build nomacs (Windows with MSYS2)

export target=mingw-w64-x86_64

pacman -S $target-qt5-base $target-qt5-svg $target-qt5-winextras $target-qt5-tools \
          $target-libraw $target-libtiff $target-exiv2 $target-opencv $target-cmake $target-gcc

export PATH=/ming64:$PATH

cd <build-dir>

cmake -D QT_MAJOR_VERSION=5 -D ENABLE_TRANSLATIONS=ON -D USE_SYSTEM_QUAZIP=ON <nomacs-dir>/ImageLounge

cmake --build . --parallel 8

Build in Docker

We have created a docker image that best simulates the old travis system (currently it's ubuntu xenial 16.04). To build nomacs in a docker, you have to create the image:

docker build --rm -f "Dockerfile" -t nomacs:latest empty-docker-dir

To deploy nomacs in a docker on your system, you can mount this directory using:

docker run --rm -it -v C:\\coding\\nomacs:/usr/nomacs nomacs:latest

If needed, you can upload the image:

docker login
docker tag nomacs diemmarkus/nomacs
docker push diemmarkus/nomacs:latest

Enable Debug output

To enable Qt debug messages set

cmake -D CMAKE_BUILD_TYPE=Debug ...

at the Makefiles generation phase.

Links

nomacs-icon