Image viewer for X11/Wayland
imvis a command line image viewer intended for use with tiling window managers.
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_directoryOpening 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' 'http://www.example.com/[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
-toption at start up, or you can configure it at runtime using the
tand
Thotkeys 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
imv's key bindings can be customised to trigger custom behaviour:
[binds]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
photkey to print the current image's path to stdout. The
-lflag can also be used to tell imv to list the remaining paths on exit for a "open set of images, close unwanted ones with
x, 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
imv-msgwith
$imv_pid.
For example:
#!/usr/bin/bash 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 another-script.sh '$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
imv. You can find a summary of which backends are available in meson_options.txt
$ meson build/ $ ninja -C build/ # ninja -C build/ install
--prefixcontrols installation prefix. If more control over installation paths is required,
--bindir,
--mandirand
--datadirare available. Eg. to install
imvto home directory, run:
$ meson --bindir=~/bin --prefix=~/.local
imv's source is published under the terms of the MIT license.