#image-viewer #desktop #grid #pannable #zoomable

app pix-image-viewer

Desktop image viewer. Arranges images in a zoomable, pannable grid.

9 releases

0.2.7 Nov 14, 2020
0.2.6 Nov 11, 2019
0.1.0 May 1, 2019

#301 in Graphics APIs

26 downloads per month

Apache-2.0

64KB
1.5K SLoC

Pix Image Viewer

Explore thousands of images in a zoomable and pannable grid.

Heavily inspired by Galapix but without the segfaults.

Screenshots: https://imgur.com/a/ENyh2NF

Disclaimer: This is not an official Google product.

Installing

You'll need the Rust package manager cargo which can be installed by https://rustup.rs/ or your distributions package management system.

The crate is published (occasionally) to https://crates.io/crates/pix-image-viewer and can be installed with:

cargo install pix-image-viewer

Or from github head:

cargo install --git=https://github.com/google/pix-image-viewer.git

Or from within the source directory:

cargo install --path=.

Controls

Mouse

Button Action
Left/Right Zoom in/out.
Middle Press and move to pan.

Keyboard

Key Action
Up/Down/Left/Right Move the viewport.
PageUp/PageDown Zoom in/out.
T Toggle panning mode (capture the mouse & cursor moves the viewport).
F Toggle fullscreen mode.
Shift Hold to zoom and pan in larger increments.

Limitations

  • SledDB only allows a single process to manage the database at a time. Due to this only a single instance can run at a time per database path. A simple workaround could be to use ephemeral --db_path=... locations.

Tech

  • Rust stable.
  • Sled for the image thumbnail cache.
  • Piston game framework + OpenGL.
  • Rust image decoding/resizing.

Future direction

  • Vulkan or gfx-rs? Allows more work off the render & event handling thread.
  • Efficient handling of large images? Tiling? [DONE]
  • Efficient handling of millions of small images?
  • Sort images by directory/size/time?
  • Cluster images by directory/size/time?
  • Image curation commands (delete, select, etc)?
  • Seamless image loading/fetching/thumbnailing. [DONE]
  • Command-line thumbnailing mode?
  • Push more magic numbers / consts into flags.
  • Selecting image(s).
  • Running commands on selected image(s).

And there are many TODOs in the code itself.

Developing

Please use the provided pre-commit hook to keep source code rustfmt clean and the tests passing on rust stable.

Naming conflict

I'm now aware of a naming conflict with https://github.com/linuxmint/pix so will likely be renaming the project soon. Ideas welcome!

Source Code Headers

Every file containing source code must include copyright and license information.

Apache header:

Copyright 2019 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Dependencies

~15–25MB
~336K SLoC