You are not logged in.
Hi folks, it's been a while
I've been hacking on a project to scratch an itch of mine: exploring thousands of dog photos. I fell in love with Galapix many months ago but found it almost unusable due to memory safety issues (segfaults and other crashes).
So I re-implemented it in Rust.
Contributions and feedback welcome!
https://github.com/google/pix-image-viewer
Screenshots: https://imgur.com/a/ENyh2NF
Last edited by mason.larobina (2019-11-09 11:11:01)
Offline
Stupid question... but what do I do with the "src" to make it useable?
Ryzen 9 5950X, X570S Aorus Pro AX, RX 6600, Arch x86_64
Offline
Not stupid at all. I've just updated the docs with install instructions that probably work (but I've only tested on my machine).
I've also pushed a new version to https://crates.io/crates/pix-image-viewer so if you have rust & cargo installed (see instructions or https://rustup.rs) you can run:
cargo install pix-image-viewer
Let me know if that doesn't work and I can fix the instructions.
Enjoy!
Offline
I had a failure due to not having clang installed. I now get this failure however...
Compiling pix-image-viewer v0.2.0
error[E0554]: `#![feature]` may not be used on the stable release channel
--> /home/paul/.cargo/registry/src/github.com-1ecc6299db9ec823/pix-image-viewer-0.2.0/src/main.rs:15:1
|
15 | #![feature(arbitrary_self_types)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0554]: `#![feature]` may not be used on the stable release channel
--> /home/paul/.cargo/registry/src/github.com-1ecc6299db9ec823/pix-image-viewer-0.2.0/src/main.rs:17:1
|
17 | #![feature(vec_remove_item)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0554]: `#![feature]` may not be used on the stable release channel
--> /home/paul/.cargo/registry/src/github.com-1ecc6299db9ec823/pix-image-viewer-0.2.0/src/main.rs:18:1
|
18 | #![feature(drain_filter)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0554]: `#![feature]` may not be used on the stable release channel
--> /home/paul/.cargo/registry/src/github.com-1ecc6299db9ec823/pix-image-viewer-0.2.0/src/main.rs:19:1
|
19 | #![feature(stmt_expr_attributes)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0554`.
error: failed to compile `pix-image-viewer v0.2.0`, intermediate artifacts can be found at `/tmp/cargo-installZUuwfU`
Caused by:
could not compile `pix-image-viewer`.
rustc --explain E0554
Feature attributes are only allowed on the nightly release channel. Stable or
beta compilers will not comply.
Example of erroneous code (on a stable compiler):
```
#![feature(non_ascii_idents)] // error: `#![feature]` may not be used on the
// stable release channel
```
If you need the feature, make sure to use a nightly release of the compiler
(but be warned that the feature may be removed or altered in the future).
Ryzen 9 5950X, X570S Aorus Pro AX, RX 6600, Arch x86_64
Offline
Thanks, I've added clang to the install instructions.
As it turns out, all of those nightly `#![feature...]` lines are no longer used and the async stuff is now stable in rust 1.39. It builds on stable
Last edited by mason.larobina (2019-11-09 23:30:42)
Offline
Still no go I'm afraid!
$ /home/paul/.cargo/bin/pix
thread 'main' panicked at 'canonicalize: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/libcore/result.rs:1165:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
$ RUST_BACKTRACE=full /home/paul/.cargo/bin/pix
thread 'main' panicked at 'canonicalize: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/libcore/result.rs:1165:5
stack backtrace:
0: 0x5625656af944 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h21699a12ad89cf9f
1: 0x5625656ce07c - core::fmt::write::he12294695f2778ef
2: 0x5625656ac8b7 - std::io::Write::write_fmt::h44777a27e04ddecd
3: 0x5625656b1e75 - std::panicking::default_hook::{{closure}}::h7e923e764d745d9a
4: 0x5625656b1b66 - std::panicking::default_hook::h6f2cc98a7e41cc12
5: 0x5625656b2575 - std::panicking::rust_panic_with_hook::h41fbff0b3efc0b6b
6: 0x5625656b2112 - std::panicking::continue_panic_fmt::h9842887ba8f35952
7: 0x5625656b2006 - rust_begin_unwind
8: 0x5625656ca2fa - core::panicking::panic_fmt::h60aba1c6af43ae95
9: 0x5625656ca3f7 - core::result::unwrap_failed::h9d752befc43f45ab
10: 0x562565105695 - pix::main::h308c33327ee9af07
11: 0x5625650e5e93 - std::rt::lang_start::{{closure}}::hec46c2eb6716e3e7
12: 0x5625656b1fa3 - std::panicking::try::do_call::h124c6ea999389772
13: 0x5625656b627a - __rust_maybe_catch_panic
14: 0x5625656b2b2d - std::rt::lang_start_internal::hb16191a81589c44a
15: 0x5625651064b2 - main
16: 0x7f529ca38153 - __libc_start_main
17: 0x5625650b975e - _start
18: 0x0 - <unknown>
Ryzen 9 5950X, X570S Aorus Pro AX, RX 6600, Arch x86_64
Offline
Offline
Edit: this was from running in a dir with no images! It worked when run in a dir with images
--- original post ---
Well it builds now, so that's good! However, on running, the application window appears and the console is spammed with this (excerpt, as I had to ctrl-c)
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/cc is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/h is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/h is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/html is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/cc is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/rs is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/markdown is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/java is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/py is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/c is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/vcxproj is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/rs is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/rs is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/cc is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format could not be recognized: no extension present")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/h is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format could not be recognized: no extension present")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/cc is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/sh is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/c is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/cc is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/c is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/java is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/h is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/def is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/rs is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/rs is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/cc is not recognized.")
[2019-11-10T15:43:39Z ERROR pix] make_thumb: image error: UnsupportedError("Image format image/java is not recognized.")
Attempting to run a second time fails...
$ RUST_BACKTRACE=full /home/paul/.cargo/bin/pix
thread 'main' panicked at 'assertion failed: !files.is_empty()', /home/paul/.cargo/registry/src/github.com-1ecc6299db9ec823/pix-image-viewer-0.2.5/src/main.rs:1057:5
stack backtrace:
0: 0x55a110105ab4 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h21699a12ad89cf9f
1: 0x55a1101241ec - core::fmt::write::he12294695f2778ef
2: 0x55a110102a27 - std::io::Write::write_fmt::h44777a27e04ddecd
3: 0x55a110107fe5 - std::panicking::default_hook::{{closure}}::h7e923e764d745d9a
4: 0x55a110107cd6 - std::panicking::default_hook::h6f2cc98a7e41cc12
5: 0x55a1101086e5 - std::panicking::rust_panic_with_hook::h41fbff0b3efc0b6b
6: 0x55a10fb3c1b5 - std::panicking::begin_panic::h22e0da755ff50819
7: 0x55a10fb5b8f1 - pix::main::h4748cf0c34a772eb
8: 0x55a10fb3be83 - std::rt::lang_start::{{closure}}::habd216bfbc4df514
9: 0x55a110108113 - std::panicking::try::do_call::h124c6ea999389772
10: 0x55a11010c3ea - __rust_maybe_catch_panic
11: 0x55a110108c9d - std::rt::lang_start_internal::hb16191a81589c44a
12: 0x55a10fb5c622 - main
13: 0x7fb94d882153 - __libc_start_main
14: 0x55a10fb0f75e - _start
15: 0x0 - <unknown>
Last edited by fabertawe (2019-11-10 17:14:03)
Ryzen 9 5950X, X570S Aorus Pro AX, RX 6600, Arch x86_64
Offline
Pix a great idea and I could find it very useful to use from my file manager (SpaceFM), possibly with some "enhancements" (from my perspective, obviously)...
Could some sort of "user commands" be implemented, to act on the pictures? For instance, Mirage (image viewer) has a "custom actions" menu. So I assign a custom action such as "Open in GIMP" -> "gimp %F". MIrage has a number of parameters, of which %F is "file path, name and extension". A key shortcut can be applied to each action also. With a key shortcut you wouldn't even need a right-click context menu, just apply to the image under the pointer (shift-click and ctrl-click could also be used for a selection). "Delete" would be handy too.
Apologies for rambling, this sort of thing may be far more than you ever intended to implement. Thanks anyway
Last edited by fabertawe (2019-11-10 17:12:50)
Ryzen 9 5950X, X570S Aorus Pro AX, RX 6600, Arch x86_64
Offline
`pix` (git version) -> crash with SIGILL
`gdb pix` ->
Program received signal SIGILL, Illegal instruction.
0x0000555555803e3c in void std::vector<unsigned long, std::allocator<unsigned long> >::_M_realloc_insert<unsigned long>(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long&&) ()
slightly more informative, but not really clear about what point in pix is causing this.
I've tried in directories which have images at the top level, directories whose subdirectories have images, and in directories which contain ONLY images at the top level (jpg,png)
I've also tried 'pix .' and 'pix --help'; they have the same SIGILL result.
Same results with non-git version.
Possibly related: 'rocksdb' accounts for 99% of the compilation time, which seems suspect to me.
Cpu info from 'lshw', since this is a illegal instruction crash:
*-cpu
product: Intel(R) Core(TM)2 Duo CPU E4500 @ 2.20GHz
vendor: Intel Corp.
physical id: 1
bus info: cpu@0
size: 2200MHz
width: 64 bits
capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic
sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe sy
scall nx x86-64 constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmper
f pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm pti dtherm cpuf
req
Just for the sake of completeness, the above `RUST_BACKTRACE=full pix` doesn't produce a backtrace either, just the same SIGILL crash
Last edited by likytau (2019-11-17 11:54:17)
Offline
Hi likytau,
I've recently committed a change which replaced rocksdb with sled (pure rust backend). If rocksdb was to blame (and that std::vector looks suspicious) then it might work now
Offline
I'll give it a go then.
Yes.. It looks like it works perfectly! Takes some getting used to the controls.. Currently LMB/RMB to zoom while having panning mode generally on, seems the most manageable. Operates pretty smoothly considering the age of the PC.
It's also nice to know my OpenGL isn't broken (Blender can't handle doing anything even with just a single cube without crashing, so I started to wonder...)
BTW, it seems that you implemented scroll wheel events, so that rolling the scroll wheel zooms in and out, but this isn't mentioned in the Readme.
Offline
Well, it's expected, given I haven't used any other program like this before. Doesn't necessarily reflect on pix.
The only thing I can put my finger on is it feels like the zoom should accelerate slightly more. I'm not sure whether it accelerates currently, but I think having zoom step size gradually increase as the button remains held down, would make it a little easier to quickly get to the desired zoom.
Last edited by likytau (2019-11-28 00:24:28)
Offline
As you seem to be open to suggestions on renaming, how about "fractage" as in 'fractal' + 'montage'.
The zoom feature evokes the 'fractal feel' and, well, the view is a montage after all.
Offline