Powerful image viewer with minimal UI
See the codepqiv is a powerful GTK 3 based command-line image viewer with a minimal UI. It is highly customizable, can be fully controlled from scripts, and has support for various file formats including PDF, Postscript, video files and archives. It is optimized to be quick and responsive.
It comes with support for animations, slideshows, transparency, VIM-like key bindings, automated loading of new images as they appear, external image filters, marks, image preloading, and much more.
pqiv started as a Python rewrite of qiv avoiding imlib, but evolved into a much more powerful tool. Today, pqiv stands for powerful quick image viewer.
Usual stuff. ./configure && make && make install. The configure script is
optional if you only want gdk-pixbuf support and will auto-determine which
backends to build if invoked without parameters.
You can also use precompiled and packaged versions of pqiv. Note that the distribution packages are usually somewhat out of date:
If you'd like to compile pqiv manually, you'll need
and optionally also
The backends are per default linked statically into the code, so all backend
related build-time dependencies are also run-time dependencies. If you need a
shared version of the backends, for example for separate packaging of the
binaries or to make the run-time dependencies optional, use the
--backends-build=shared configure option.
For macOS, have a look at the pqiv.app target of the Makefile, too.
pqiv can be linked statically, though GTK only supports static linking in GTK 2.x; in early versions of GTK 3.x it was fairly simple to still link statically.
Windows builds are supported and work in GTK 2.x, it is recommended to use MXE for cross-compiling.
This program uses Martin Pool's natsort algorithm https://www.github.com/sourcefrog/natsort/.
Contributors to pqiv 2.x are:
Contributors to pqiv ≤ 1.0 were:
The window is centered in between two monitors in old multi-head setups:
This happens if you have the RandR extension enabled, but configured
incorrectly. GTK is programmed to first try RandR and use Xinerama only as
a fallback if that fails. (See gdkscreen-x11.c.) So if your video drivers
for some reason detect your multiple monitors as one big screen you can not
simply use fakexinerama to fix things. This might also apply to nvidia drivers
older than version 304. I believe that I can not fix this without breaking
functionality for other users or maintaining a blacklist, so you should
deactivate RandR completely until your driver is able to provide correct
information, or use a fake xrand (like
mine, for example)
Loading postscript files failes with Error #12288; Unknown output format:
This issue happens if your poppler and spectre libraries are linked against
different versions of libcms. libcms and libcms2 will both be used, but
interfere with each other. Compile using --backends-build=shared to
circumvent this issue.
Basic usage of pqiv is very straightforward, call
pqiv <files or directories>
and then use space, backspace, f (for fullscreen), q (to quit), and m for
the montage overview to navigate through your images. To see all key bindings,
see the DEFAULT KEY BINDINGS section of the man-page, or run
pqiv --show-bindings.
For some advanced uses of pqiv, take a look at these resouces:
Store this in your .pqivrc:
# Bind c to act as if "#c1" was typed
c { send_keys(#c1); }
# If "#c1" is typed, shift the current image to it's north west corner, and
# rebind "c" to act as if "#c2" was typed
<numbersign>c1 { set_shift_align_corner(NW); bind_key(c { send_keys(#c2\); }); }
# ..etc..
<numbersign>c2 { set_shift_align_corner(NE); bind_key(c { send_keys(#c3\); }); }
<numbersign>c3 { set_shift_align_corner(SW); bind_key(c { send_keys(#c4\); }); }
# The last binding closes the cycle by rebinding "c" to act as if "#c1" was typed
<numbersign>c4 { set_shift_align_corner(SE); bind_key(c { send_keys(#c1\); }); }
pqiv (dev)
pqiv 2.13.3
pqiv 2.13.2
--browse to desktop files (fixes #232)pqiv 2.13
toggle_fullscreen(1/2) behavior when already fullscreen--font to adjust info box font, use Pango for rendering (See #221)pqiv 2.12
best interpolation quality (Fixes #139)--auto-montage-mode (Fixes #181)pqiv 2.11
n, --negate)a (hardlink image) to c-a by default (See #124)--actions-from-stdin and let it block until actions are completed
(See #118/#119)pqiv 2.10.4
montage_mode_shift_y_rows() in key bindingspqiv 2.10
toggle_background_pattern() (bound to b) and
--background-pattern.--low-memory mode (using native- instead of image-surfaces)sizeof(time_t) != sizeof(int)pqiv 2.9
m by default)ctrl+space and ctrl+backspace by default)Control+t to switch to "maintain scale level" by defaultAlt+t to switch to "maintain window size" by defaultmove_window() to explicitly move pqiv's main window aroundpqiv 2.8.5
pqiv 2.8
pqiv 2.7.4
goto_earlier_file() to Ctrl-P)pqiv 2.7
set_interpolation_quality to change interpolation/filter
modenearest interpolation for small imagesgoto_earlier_file() to return to the image that was
shown before the current oneset_cursor_auto_hide() to automatically hide the pointer
when it is not moved for some timeactions section in the configuration file for default actionspqiv 2.6
pqiv 2.5.1
pqiv 2.5
pqiv 2.4.1
pqiv 2.4
pqiv 2.3.5
pqiv 2.3
gdk_cursor_new, replaced by a different functionpqiv 2.2
pqiv 2.1
pqiv 2.0
pqiv ≤ 1.0
pqiv ≤ 0.3
C
91.7%
Roff
5.9%
Makefile
2.3%
Powerful image viewer with minimal UI
See the codepqiv is a powerful GTK 3 based command-line image viewer with a minimal UI. It is highly customizable, can be fully controlled from scripts, and has support for various file formats including PDF, Postscript, video files and archives. It is optimized to be quick and responsive.
It comes with support for animations, slideshows, transparency, VIM-like key bindings, automated loading of new images as they appear, external image filters, marks, image preloading, and much more.
pqiv started as a Python rewrite of qiv avoiding imlib, but evolved into a much more powerful tool. Today, pqiv stands for powerful quick image viewer.
Usual stuff. ./configure && make && make install. The configure script is
optional if you only want gdk-pixbuf support and will auto-determine which
backends to build if invoked without parameters.
You can also use precompiled and packaged versions of pqiv. Note that the distribution packages are usually somewhat out of date:
If you'd like to compile pqiv manually, you'll need
and optionally also
The backends are per default linked statically into the code, so all backend
related build-time dependencies are also run-time dependencies. If you need a
shared version of the backends, for example for separate packaging of the
binaries or to make the run-time dependencies optional, use the
--backends-build=shared configure option.
For macOS, have a look at the pqiv.app target of the Makefile, too.
pqiv can be linked statically, though GTK only supports static linking in GTK 2.x; in early versions of GTK 3.x it was fairly simple to still link statically.
Windows builds are supported and work in GTK 2.x, it is recommended to use MXE for cross-compiling.
This program uses Martin Pool's natsort algorithm https://www.github.com/sourcefrog/natsort/.
Contributors to pqiv 2.x are:
Contributors to pqiv ≤ 1.0 were:
The window is centered in between two monitors in old multi-head setups:
This happens if you have the RandR extension enabled, but configured
incorrectly. GTK is programmed to first try RandR and use Xinerama only as
a fallback if that fails. (See gdkscreen-x11.c.) So if your video drivers
for some reason detect your multiple monitors as one big screen you can not
simply use fakexinerama to fix things. This might also apply to nvidia drivers
older than version 304. I believe that I can not fix this without breaking
functionality for other users or maintaining a blacklist, so you should
deactivate RandR completely until your driver is able to provide correct
information, or use a fake xrand (like
mine, for example)
Loading postscript files failes with Error #12288; Unknown output format:
This issue happens if your poppler and spectre libraries are linked against
different versions of libcms. libcms and libcms2 will both be used, but
interfere with each other. Compile using --backends-build=shared to
circumvent this issue.
Basic usage of pqiv is very straightforward, call
pqiv <files or directories>
and then use space, backspace, f (for fullscreen), q (to quit), and m for
the montage overview to navigate through your images. To see all key bindings,
see the DEFAULT KEY BINDINGS section of the man-page, or run
pqiv --show-bindings.
For some advanced uses of pqiv, take a look at these resouces:
Store this in your .pqivrc:
# Bind c to act as if "#c1" was typed
c { send_keys(#c1); }
# If "#c1" is typed, shift the current image to it's north west corner, and
# rebind "c" to act as if "#c2" was typed
<numbersign>c1 { set_shift_align_corner(NW); bind_key(c { send_keys(#c2\); }); }
# ..etc..
<numbersign>c2 { set_shift_align_corner(NE); bind_key(c { send_keys(#c3\); }); }
<numbersign>c3 { set_shift_align_corner(SW); bind_key(c { send_keys(#c4\); }); }
# The last binding closes the cycle by rebinding "c" to act as if "#c1" was typed
<numbersign>c4 { set_shift_align_corner(SE); bind_key(c { send_keys(#c1\); }); }
pqiv (dev)
pqiv 2.13.3
pqiv 2.13.2
--browse to desktop files (fixes #232)pqiv 2.13
toggle_fullscreen(1/2) behavior when already fullscreen--font to adjust info box font, use Pango for rendering (See #221)pqiv 2.12
best interpolation quality (Fixes #139)--auto-montage-mode (Fixes #181)pqiv 2.11
n, --negate)a (hardlink image) to c-a by default (See #124)--actions-from-stdin and let it block until actions are completed
(See #118/#119)pqiv 2.10.4
montage_mode_shift_y_rows() in key bindingspqiv 2.10
toggle_background_pattern() (bound to b) and
--background-pattern.--low-memory mode (using native- instead of image-surfaces)sizeof(time_t) != sizeof(int)pqiv 2.9
m by default)ctrl+space and ctrl+backspace by default)Control+t to switch to "maintain scale level" by defaultAlt+t to switch to "maintain window size" by defaultmove_window() to explicitly move pqiv's main window aroundpqiv 2.8.5
pqiv 2.8
pqiv 2.7.4
goto_earlier_file() to Ctrl-P)pqiv 2.7
set_interpolation_quality to change interpolation/filter
modenearest interpolation for small imagesgoto_earlier_file() to return to the image that was
shown before the current oneset_cursor_auto_hide() to automatically hide the pointer
when it is not moved for some timeactions section in the configuration file for default actionspqiv 2.6
pqiv 2.5.1
pqiv 2.5
pqiv 2.4.1
pqiv 2.4
pqiv 2.3.5
pqiv 2.3
gdk_cursor_new, replaced by a different functionpqiv 2.2
pqiv 2.1
pqiv 2.0
pqiv ≤ 1.0
pqiv ≤ 0.3
C
91.7%
Roff
5.9%
Makefile
2.3%