9 releases
0.2.7 | Nov 14, 2020 |
---|---|
0.2.6 | Nov 11, 2019 |
0.1.0 | May 1, 2019 |
#272 in Graphics APIs
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
~334K SLoC