Need help with imv?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

623 Stars 52 Forks MIT License 722 Commits 66 Opened issues


Image viewer for X11/Wayland

Services available


Need anything else?

Contributors list status

imv - X11/Wayland Image Viewer

is a command line image viewer intended for use with tiling window managers.


  • Native Wayland and X11 support
  • Support for dozens of image formats including:
    • PNG
    • JPEG
    • Animated GIFs
    • SVG
    • TIFF
    • Various RAW formats
    • Photoshop PSD files
  • Configurable key bindings and behaviour
  • Highly scriptable with IPC via imv-msg


Packaging status

Example Usage

The following examples are a quick illustration of how you can use imv. For detailed documentation see the man page.

# Opening images
imv image1.png another_image.jpeg a_directory

Opening a directory recursively

imv -r Photos

Opening images via stdin

find . -type f -name "*.svg" | imv

Open an image fullscreen

imv -f image.jpeg

Viewing images in a random order

find . -type f -name "*.png" | shuf | imv

Viewing images from stdin

curl http://somesi.te/img.png | imv -

Viewing multiple images from the web

curl -Osw '%{filename_effective}\n' '[1-10].jpg' | imv


imv can be used to display slideshows. You can set the number of seconds to show each image for with the

option at start up, or you can configure it at runtime using the
hotkeys to increase and decrease the image display time, respectively.

To cycle through a folder of pictures, showing each one for 10 seconds:

imv -t 10 ~/Pictures/London

Custom configuration

imv's key bindings can be customised to trigger custom behaviour:


Delete and then close an open image by pressing 'X'

= exec rm "$imv_current_file"; close

Rotate the currently open image by 90 degrees by pressing 'R'

= exec mogrify -rotate 90 "$imv_current_file"

Use dmenu as a prompt for tagging the current image

u = exec echo "$imv_current_file" >> ~/tags/$(ls ~/tags | dmenu -p "tag")


With the default bindings, imv can be used to select images in a pipeline by using the

hotkey to print the current image's path to stdout. The
flag can also be used to tell imv to list the remaining paths on exit for a "open set of images, close unwanted ones with
, then quit imv to pass the remaining images through" workflow.

Key bindings can be customised to run arbitrary shell commands. Environment variables are exported to expose imv's state to scripts run by it. These scripts can in turn modify imv's behaviour by invoking


For example:

imv "[email protected]" &
imv_pid = $!

while true; do

Some custom logic


Close all open files

imv-msg $imv_pid close all

Open some new files

imv-msg $imv_pid open ~/new_path

Run another script against the currently open file

imv-msg $imv_pid exec '$imv_current_file' done



| Library | Version | Notes | |---------------:|:---------|------------------------------------------------| | pthreads | | Required. | | xkbcommon | | Required. | | pangocairo | | Required. | | icu | | Required. | | X11 | | Optional. Required for X11 support. | | GLU | | Optional. Required for X11 support. | | xcb | | Optional. Required for X11 support. | | xkbcommon-x11 | | Optional. Required for X11 support. | | wayland-client | | Optional. Required for Wayland support. | | wayland-egl | | Optional. Required for Wayland support. | | EGL | | Optional. Required for Wayland support. | | FreeImage | | Optional. Provides PNG, JPEG, TIFF, GIF, etc. | | libtiff | | Optional. Provides TIFF support. | | libpng | | Optional. Provides PNG support. | | libjpeg-turbo | | Optional. Provides JPEG support. | | librsvg | >=v2.44 | Optional. Provides SVG support. | | libnsgif | | Optional. Provides animated GIF support. | | libheif | | Optional. Provides HEIF support. |

Dependencies are determined by which backends and window systems are enabled when building

. You can find a summary of which backends are available in meson_options.txt
$ meson build/
$ ninja -C build/
# ninja -C build/ install

controls installation prefix. If more control over installation paths is required,
are available. Eg. to install
to home directory, run:
$ meson --bindir=~/bin --prefix=~/.local


's source is published under the terms of the MIT license.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.