The same application is also available under Python.
The Python version is very similar in layout and features to the C#/WPF version. Main differences and other notes at the bottom.
Available as python script (see below) and as a self-contained MacOS app (unzip it and move
LpvWx.App directory to your
For a quick overview, I have a short video (10 minutes) introducing the main features. Bad audio unfortunately.
Both versions are now essentially completed. Some functions may seem like unnecessary features, but were done to explore some area, such as the slide show to explore timers. Other areas might still not be quite optimal, such as GUI focus management.
It has features which may be useful to a photographer, such as viewing some or all images in B&W. Something I haven't seen in any other viewer (altho I'm sure there are some, no need to send me a list).
Some of the main characteristics compared to other viewers I've used:
.jpg) of image files can be associated with this viewer, and such images can then be opened on double-clicking.
The set of images is organized in a ring (circular buffer), with an blank "wrap point" (the "Home" button) between the last image and the first image. The initial order is that of the command line parameters. Thereafter, the set can be sorted by date, simple name, and a few more. Images added after initial load are added after the current image, or after the last one if no current image (ie. on the wrap point).
Lpv.NET understands usual image file types supported by WPF: JPEG, PNG, TIFF, &c, as well as shortcuts.
Lpv.NET also understands text files containing names of image files (and even HTTP URLs). For example, the following text file would open four images:
c:/users/pilewis/IMG_1946.jpg R:/Pierre/IMG_1956.jpg piano/IMG_1994.jpg (marked) http://leware.net/photo/IMG_5305-G.jpg Notes=Some text that describes imageLines that that don't start with a space or a # (comment) are paths to images. File names are either absolute (first two above) or relative (third); in latter case, the names are relative to the directory of the text file, not the directory in which the application is started. Supported extension for text file is
.txtno longer supported). Ideally, the
.lpvwould be associated with the application.
.lpv text file can also contain notes and/or markings, as shown above.
When walking a directory, only images are considered, no recursion deeper into sub-directories or text files. It would be possible, but there is the risk of opening (much) more than wanted. Recursion is done from text files (so a text file could contain names of directories or other text files) -- be careful (esp. of loops! no checking).
|File||Saving notes, loading new images, &tc|
|File -> Save Notes||Save list of images and associated notes|
|File -> Save Notes As...||Save list of images and associated notes|
|File -> Load...||Load new images (can select multiple files)|
|File -> Load URL...||Load image from URL|
|File -> Load Test Image||Load test image from http://www.photofriday.com/calibrate.php|
|File -> Clear Set||Clear image set|
|File -> Exit||Exit Lpv.NET|
|Set||Actions on image set|
|Set -> Sort Name||Sort image set based on image name|
|Set -> Sort Date||Sort image set based on file date (using EXIF date would be confusing, as not all images have that date)|
|Set -> Sort Flags||Sort image set based on the two marks: "marked" images come first, then unmarked images, then "deletable" images|
|Set -> Sort Notes||Sort image set based on notes|
|Set -> Sort Full Name||Sort image set based on full path name of image|
|Set -> Sort Size||Sort image set based on file size|
|Set -> Show All in Greyscale||Toggle view of all images as greyscale or color|
|Set -> Show All Upside Down||Toggle view of all images upside-down or normal|
|Set -> Show Over/underexposure||Show (or don't) areas of the image where we have clipped highlights / blocked shadows -- Tab key can also be used to toggle this|
|Set -> Show Deletable Images||Show (or don't) images marked for delete|
|Set -> Start Slide Show||Start or stop slide show (randomized)|
|Image||Actions on a single image|
|Image -> Copy Info||Copy some info (including full path) on current image to clipboard|
|Image -> Copy Bitmap||Copy original image bitmap to clipboard|
|Image -> View Metadata||View image metadata (if available)|
|Image -> Edit||Launch program to edit image (see below)|
|Help -> About||About information|
|Help -> Help||Show this page|
|Prev||Show previous image. With shift, show image from previous date (see details below).|
|Next||Show next image. With shift, show image from next date.|
|Home t||Position on "wrap point" on ring, after last image and before first.|
|Three rotate buttons||Three buttons to rotate image -- no change on disk of course. Lpv.NET will try to read the proper orientation when the image is loaded for the first time.|
|Grey/color||Toggle B&W and color for this image -- no change on disk.|
|(two sliders)||Two sliders to change curves -- no change on disk. The first is roughly brightness, the second, contrast. Work in progress.|
|Reset||Reset above two sliders to their center positions.|
|[Move] to end||Move current image to end of set, and show next image. Can be used as a crude manual sorting mechanism.|
To position on end/begin of image set, use "Home" button.
|Mark||Mark image (for whatever purpose). A green checkmark signals this. An image cannot be marked and deletable at the same time.|
|Deletable||Mark image to be deleted (deletable) -- no change on disk of course, but this flag will be in the output notes file (and the actual delete can be scripted from there). A red cross over the image signals this.|
|Left/right arrows||Outside "Notes" area, show previous/next image. With shift, show image from previous/next date (see notes below).
In "Notes" area, move within text. With shift, position on beginning/end of text.
|Page up/down||Show previous/next image. Works whether in or outside of "Notes" area, useful when adding comments to many images in succession.|
|Up/down arrows||Outside "Notes" area: nothing for now.
In "Notes" area, recall recent notes (useful when many images get same/similar notes).
|Enter||Switch focus to/from the "Notes" area. In some cases, you may need to use the mouse to switch focus to the "Notes" input area.|
|Backspace/del||Outside "Notes" area, toggle "mark for delete" of this image.|
|Tab||Outside "Notes" area, toggle "Show over/underexposure"|
IMAGE_EDITORmust be set to the path of an image editor for the "Image -> Edit" menu item to work. For example:
IMAGE_EDITOR = C:\Program Files\Paint.NET\PaintDotNet.exe
wx.Imageclass. I may revisit this later.
LPV_ENCODINGcan be set to the local encoding, for example:
~/Lpv/). It needs Python and wxPython installations. Useful things to know:
~/bin/lpv, to start the viewer (the example shows Adobe PSE, but I use Gimp!):
export IMAGE_EDITOR="open -a 'Adobe Photoshop Elements'"
python ~/Lpv/LpvWx.py $*
lpv imageDirectory someOtherImage.jpg
~/Applications/directory, or the system's
/Applicationsdirectory (latter might require
LpvWx.app) and then Open. Signing this application would require that I become a registered developer with Apple, the cost is over 100$, and I would never recover this investment :-).
.lpvfiles with this application, and maybe even some image file types.
IMAGE_EDITORsetting on MacOS might be "
open -a Gimp" or "
open -a 'Adobe Photoshop Elements'" (without the double-quotes); this can be set in file
.../LpvWx.app/Contents/Info.plist(just edit line 8 with any text editor to set the visual editor you prefer).
If you have suggestions, I'll listen. But basically, the tool is mostly as I want it... Still, I might try to add thumbnails, and have more control over zooming.
Email: (franšais, English, Deutsch).
If you wish to support this work, you can make donations via PayPal.