PhotoGrok Changes 2.83 04/15/2024 * Removed the information dialog that appears when selecting the dynamic thumbnail checkbox in preferences. Instead, any displayed thumbnails will be refreshed when Preferences dialog is closed. * Fixed (harmless) "Context" exception in graal.js when applying script changes after a painter has been set. * "Image Not Found" message not displayed when buffering turned off in preferences (and image missing from storage). * BufferedPainter now wraps painter names with "BUFFERED" label. 2.82 04/04/2024 * Added "Fullscreen Settings" to the "Tools" menu. Choose which monitor and resolution to display fullscreen images and slideshows. Make sure your gfx drivers are up to date if using this feature. The main interface is disabled until slideshows are ended via key/mouse press. * Added option to present a warning if opening a tree node exceeding a user-defined number of thumbnails. Default is 10,000 thumbnails. This helps prevent performance degradation when loading a large number of thumbnails under a single folder. User is presented with an option to continue loading thumbnails or stopping at the defined limit. This only affects the presentation of thumbnails. All information is still present in the tree. A good value is dependent on available memory. See "Advanced" tab in preferences. * Added an option to dynamically load/unload thumbnail images while the thumbnail screen is actively being scrolled. This allows for a extremely large number of thumbnails to be loaded (many tens of thousands when PhotoGrok is running in 2gb of memory - the default on an 8gb machine). See "Advanced" tab in preferences. Off by default. * Fix for rare but annoying "stuck" scrollbar bug. * Fixed Filler filter to support zooming. Added a slider to control vertical line spacing in the Squint Ascii Art plugin. 2.81 03/28/2024 * Fixed regression where windows and linux users could use native file dialogs (directory selection not possible). Back to Mac only. * Added "Miscellaneous" and "Advanced" tabs to preferences. Some reorganization of existing preferences. * Added option to turn off image caching in "Advanced' tab. Replaces photogrok.nocache property and --nocache program argument. Slower performance but may help in low memory/high megapixel situations. * Renamed "ExifTool" pane to "Metadata" as it displays more than just ExifTool tags. * Added option to display catalog tags in the "Metadata" pane. This includes all tags saved in the catalog for a selected image (when viewing images from a catalog tree). * Shortcut keys can be defined for fullscreen/slideshows. See "anim.js" code for examples. * No longer show error dialogs when an image isn't found - for example, unattached storage. Displays message on image pane instead. * All setPainter() script calls are queued into event dispatch thread for more reliable scheduling. * Timer now returns a TimerTask object so specific tasks can be canceled (in addition to Timer.cancel). See Java's Timer/TimerTask APIs or "anim.js" for examples. * Rewrote "anim.js" plugin to display more advanced filter animations. Toggle via menu or shortcut keys. Some animations require a fast computer for good performance. * A setPainter() call in a top-level script would not fire an "onPainterChanged" event registered in the same script. * "Continuously Scan Folders" always searched subdirectories ignoring the current setting in Folder Manager. * Added "Stamp" and "Quantize/Dither" filters to "Filters" and "Thumbnail Fiters" User menus (via jhlabs.js plugin). 2.80 03/24/2024 * Interactive ascii art plugin "squint.js" and simple animation plugin "anim.js" added. See plugins. * Most plugins have been refactored to make use of new functionality and allow better interoperability. * Added "photogrok.nocache" property for low-memory environments. "-Dphotogrok.nocache=true" will turn off image caching. Can also be activated with "--nocache" program argument. * Added "photogrok.maximgsize=[width]x[height]" property for low-memory environments like 1gb Raspberry Pi. Can also be activated with "--maximgsize=[width]x[height]" program argument. Using this forces PhotoGrok to scale images as they're read in. For example, if "--maximgsize=1920x1080", then high megapixel images are read in at a maximum size of 1920x1080 pixels. There can be quality loss and exporting images will use this lower resolution. * Drop down session history for "Evaluate JS" dialog added. * Painters are now named and can be retrieved in scripts with getName(). Calling setPainter(painter, id) will assign id as name. Painters retrieved from JSI.getPainter() will always be named. To name a painter in your script before it is used, use the returned painter from JSI.namedPainter(painter, id). This feature is backwards compatible so if a painter isn't named, PhotoGrok will make one based on hashcode. * eval functions in "graaljs" are now cached for increased performance. * Added Timer to create thread safe timers for executing functions after a delay or repeatedly on a set interval. Timers are automatically cancelled when a script context is re-evaluated. See "anim.js" plugin. There are two functions on a Timer: schedule(function, long) to run a function once after waiting x milliseconds and schedule(function, long, long) to run a function repeatedly after waiting. * Removed "jdkrhino" engine. Anyone still using Java 6 or 7 should just use the included "rhino" instead. * onPainterChanged callback now returns the new painter as third argument so function onPainterChanged(name, isnull, painter). Redundant but backwards compatible. * Shortcut keys can now be assigned to functions using JSI.addShortcut(function, int, int). See "squint.js" or "tone.js" plugins. See Java doc for more details on KeyCode and Modifier ints. * About dialog now shows script engine and current painter. * When not explicitely configured, the default script engine is selected in the following order: graal.js, nashorn and rhino (depending on availability). 2.79 03/11/2024 - the javascript update * Updated Rhino js engine to latest version. * Scripts and plugins no longer need to wrap Graphics2D objects in Gfx(). Existing plugins adjusted. * Performance boost in Rhino by compiling user scripts. * 'graal.js' engine no longer needs to run in nashorn-compat mode. The reason for keeping both 'graal.js' and 'graaljs' scripting is that 'graaljs' offers more config options and 'graal.js' can be faster in certain scenarios. * 'graal.js' engine now accepts @graalopts. See scripts.txt. 2.78 03/08/2024 * New graal.js scripting now supported. See scripts.txt for details. Plugins have been updated. * Changed System.err output color in the console. * Keyboard shortcuts could stop working in some macOS setups. * Canceling a file system tree operation would cause an error in windows. * SwingRequest function now takes a function that returns a JComponent instead of a JComponent for proper thread control. See tone.js for an example. 2.77 03/04/2024 * Added showBrowser(url) javascript function. * Improved quality of GraphicsMagick conversions. * Removed outdated Jimi conversion library. Replaced with TwelveMonkeys imageIO for tiff, webp and psd. Install GraphicsMagick and add TIFF, WEBP, PSD, etc to GraphicsMagick in preferences for fastest display. * Path to GraphicsMagick not found in full installs. 2.76 02/27/2024 * Allow full installs to find plugins directory. * Workaround for slow tree performance on some platforms. * Changed labels to more clearly differentiate file system from catalog (database) operations. 2.75 10/31/2023 * Use default web browser to display maps if JavaFX browser not available. * Full screen fix for some non-oracle Mac JVMs. 2.74 10/30/2023 * Memory optimization to mitigate some graalvm issues. 2.73 10/27/2023 * Restore console menu item. * Fix problem that was breaking scripts. 2.72 08/15/2023 * Unlimited named user tabs. Existing settings with "User 1" and "User 2" tabs are preserved. Right-click on tags in the exif pane and select "Add To New Tab". * Plugins are automatically loaded with new installs. Edit or remove loading code with CTRL+SHIFT+J. * The thumbnail frame background can be set from a script using new "frameColor" property in PainterProps. See "framer.js" plugin for an example. * Change mouse wheel zoom scroll increment. * Support for webp images. Add "webp-imageio-0.1.6.jar" from internet to PhotoGrok's "lib" directory to enable. Default jar works with Windows, Linux and Mac amd64. There is a dynalib for Mac arm available if you dig. * Fixed some scrollbar oddities on Mac OS X. * Added checkbox to disable rollover images to preferences. * Added "framer.js" and "datefilter.js" to plugins. Added "setOverlayPainter" function to "filler.js" plugin. See Help->Plugins menu. * Added photogrok_version variable for scripts. 2.71 04/30/2023 * Fixed 'loadTree' (with non-null function argument) and 'background' functions when using graal.js. * Added sizer.js to calculate tree, node and file sizes. 2.70 04/11/2023 * Dialogs can be created from scripts. See tone.js. * Optimize multi-tab filters. * Compile js code for graal.js and nashorn - big performance boost in graal. * Sort custom tags displayed in Exif Pane. * getPainter() calls in example plugins no longer return buffered images. Use BufferedPainter in util.js. * New example plugins: tone.js and film.js. Algorithms created using chatGPT. 2.69 12/07/2022 * When in full screen view mode, ctrl+c will copy the current image to the clipboard including any crop, positioning and filters for apps and systems that support it. It's a simple way to make desktop backgrounds (for example). * Changed behavior for caching xz files. xz files are now decompressed to photogrok's tmp folder when opening in the tree. (Be sure you have the disk space). These tmp files are deleted when PhotoGrok exits. There may be file name collisions and unusual behavior if opening multiple xz files with the same name. The goal is to speed up operation. Comments on this change are welcome - assuming anyone uses it. * onLoadSettings scripting function is now executed when PhotoGrok starts. * Support for add-on nashorn for JVMs that no longer include Nashorn. The modules to include when launching PhotoGrok will be documented online. 2.68 05/19/2020 * Fixed issue validating custom tags which could prevent new tags from being saved. 2.67 04/10/2020 * Custom tags are now saved in a single json file instead of being included in each setting file. Tags defined in setting files are migrated when first loaded. Duplicate tag names with different contents are migrated with _1, _2, etc appended to the name. This change is to reduce confusion of having different tag sets in different setting files. Previously it was difficult to keep custom tags consistent across setttings. * Changes to js image caching. See ComboPainter and BufferedPainter functions in Util.js for simplified image caching in script. BufferedPainter allows Buffering any Painter without additional complex logic: setPainter(new BufferedPainter(myPainter)) 2.66 09/12/2019 * request() without callback broken since version 2.64. * Minor updates to plugins. 2.65 09/11/2019 * Added an "Evaluate JS" dialog to the Tools menu. Enter JS code that runs in the current context. Example: "showMessage('hello')". Useful for calling functions on plugins. * addMenuCommand did not work on graal.js. * Problem script evals now return "Script Error" instead of throwing exceptions. * Script initialization is now a part of the startup dialog sequence. * Updated documentation and new plugins. See scripts.txt for more information. * The newer version of rhino included is now the default script engine on older jvms. 2.64 09/06/2019 * Now runs in Java 11+. On Java 11+, JavaFX must be configured manually in order for maps and scripts using JavaFX to work. * PhotoGrok can use graal.js for JavaScript when available (specify "@scriptengine graal.js"). See scripts.txt for information on changes. * elapsedTime function added to jdk rhino for Java 6 and Java 7. 2.63 08/26/2019 * Write thumbnails as png files instead of jpg for better compatibility with some open jdk distributions. * Improve verbiage of ElapsedTime tag. * Added elapsedTime(date1, date2) script function. 2.62 05/18/2018 * Scripts are now initialized at startup instead of when building a tree. * readFromURL function didn't work on JDK 6. * Show error dialog and quit tree build if JS custom tag or filter fails with syntax error. * @rhinoopts directive was being ignored. * addTreeFilter, removeTreeFilter and registerCallback functions added for future plugin support. * Script context wasn't being reset when switching from a setting with a script to one without. * Fixed launch warning on OS X when using the platform neutral bash file. * addUserCommand menus with submenu param "Help" appear under the Help->Plugins menu. * Allow the same custom tag to be used multiple times in tree. 2.61 04/09/2018 * PhotoGrok sessions without a script were unable to build a tree. Bug introduced in 2.60 fixed. 2.60 04/05/2018 * Allow Java 6 and 7 to run in the java default script engine (pre 2.59 behavior). To use the more recent mozilla rhino on those jvms, use the '@scriptengine rhino' directive. See the included scripts.txt file. * Fixed performance issue when using javascript filters with mozilla rhino. 2.59 04/04/2018 * setScanDirs script function was broken in 2.58. * Updated mozilla rhino script engine for older Java installations. Users on Java 8 and higher can optionally run rhino or nashorn. * Added script preprocessing directives to select script engine and more. See scripts.txt. * Added the following callback methods: onImageChanged(), onImageResized(), onImageDragged() and onImageZoomed(). See scripting page. * Do not paint gray background rect if no viewer tags. * Fixed multiple console dialog display bug. * script_engine_name property returns engine name. * Added getPanelImageProps to retrieve position and view information for non-painter screen updates. See tesseract example. * Added updateStatus callback allowing non-painter webview scripts to send notification messages. See tesseract example. 2.58 03/26/2018 * Fixed issues with Java 10 version check in startup scripts and main program. * Fixed nashorn scope issue in Java 10. * Added NOTTHREADSAFE directive for scripts creating thumbnail painters that aren't thread safe. * Set Nashorn --scripting flag to allow Nashorn specific extensions like load() and readFully(). * Added scripting API to access embedded browser. This allows browser-based js libraries to manipulate and query images. See face detection example. * Introduced new painter classes for browser dom access and object caching. See examples. * Partially implemented HTML5 Canvas in Java 2D. * Reduced paint calls to main image panel. * Separated nashorn and rhino initialization for easier maintenance. * Added readFromURL function to load remote scripts from the web. 2.57 02/25/2018 * Implemented a proper JavaScript code editor! * Added script editor and console items to Tools menu. * Anti-alias text now rendered in preview painter. * Created default set of catalog tags when none has been defined. This will vastly improve performance when cataloging a large image set. * Added backwards compatible change to addMenuCommand and addUserCommand script functions. These can now accept two optional parameters, "menu" and "submenu" that represent the calling menu items respectively. * Create thumbnails and preview images with image type ARGB when a corresponding painter is set. This allows filters requiring an ARGB image to complete. * Fixed z-order of non-native file chooser on Custom Tag Manager dialog on Mac. * Console dialog is now non-modal. * Added additional doc and license files to distribution. 2.56 02/21/2018 * Allow optional native file chooser on all systems. * Added console to output text from scripts and java errors when they occur. Open with: CTRL+SHIFT+C * Added JHLabs image filters. Currently only accessible from scripts. See scripting examples. * JavaScript API additions and enhancements. Most notable is the ability to add a top-level "User" menu from scripts. See scripting documentation and new examples. * Changed version check for upcoming Java 10 and beyond. 2.55 01/14/2018 * Add a separate painter for rollover previews. Use setPreviewPainter (similar to setThumbnailPainter) to change the popup preview image from JavaScript. * Fixed issues with the max number of allowed settings. * Clear custom tags when loading a setting without any custom tags. * Fixed dialog z-order. In some circumstances a dialog would open behind an open dialog. * Fixed bug with when using native mac file chooser. 2.54 01/11/2018 * Workaround found for Mac OS X menu bar issues. Mac users on High Sierra should make sure they have the 10.13.1 update in order to see the application menu. * Restored original font for OS X users. 2.53 01/09/2018 * Mac OS X menu items fail on Java 9. As a workaround, menus on Mac Java 9 have been moved to traditional java window-based menus until this bug is fixed. Mac users should use Java 8 for native menus. * Changed Mac menu shortcut accelerator keys to use the Mac command key. Some keyboard shortcuts have changed. * Use different font for Apple Java to accomodate command key characters in menus. 2.52 01/08/2018 * PhotoGrok would not start on Mac Java 9.0.1. * copyTree JavaScript function prints in progress file names to status bar. 2.51 10/04/2017 * Fixed Mac specific menu behavior on Java 9. * Moved Settings to it's own menu for faster access. 2.50 10/03/2017 * Changes to work in Java 9. Currently, Mac users on Java 9 will experience some menu limitations. Notably preferences are located under 'Tools' and no fullscreen option is available. This is under development. 2.49 07/04/2017 * Sort bar chart in tree node order. 2.48 07/31/2016 * Show warning if Windows user selects exiftool(-k).exe. Must be renamed to exiftool.exe per ExifTool doc. * Improve caching when traversing tree to view images. * Scroll thumbnail screen to current image when parent node is selected in tree. * Updated ExifTool to version 10.20. It may be necessary to re-index catalog if tag indexes don't match. 2.47 03/22/2016 * Do not timeout "Catalog Modified" status message. * Extend timeout on "Low Memory" status message. * 'Copy Value' option on EXIF pane now only appears when one item selected. * Improve memory settings for Mac and Windows distributions (and Mac/Linux standalone launch script). PhotoGrok works best with a 64-bit JVM and at least 4GB of system memory. Windows users running a 32-bit JVM may want to use the platform agnostic version and tweak photogrok.bat for optimal memory allocation. 2.46 12/31/2015 * ctrl+m zoom to mouse pointer works in single image fullscreen mode. * Sort tags on custom tag manager. * Editable filter combo box shows all ExifTool tags. * Additional rollover help on preferences dialog. * Added option to continuosly scan folders for catalog changes. * Text fields now have cut/copy/paste popup menu. * Added set button to catalog importer. This allows the required tags to be set without importing. * Added "Copy Value" option to exif popup menu. * Fixed custom tag error related to invalid JavaScript. 2.45 11/22/2015 * ctrl+m zooms to mouse pointer location when viewing images (same as middle mouse button). * refreshFile script function now removes any cached thumbnail image. * Improved thumbnail scrolling speed on OS X and Linux. * Sorting non-catalog tree by DateTimeOriginal (see preferences) now works with multiple directories. * JavaScript execCommand now returns an object with 'returnCode' and 'response' string array. See scripting page for details. 2.44 11/09/2015 * Numeric tags like ISO are no longer sorted as strings. * Fixed issue with the refreshFile JavaScript function. * Removed Java 7 specific builds. PhotoGrok still works in Java 6 and 7 but Java 8 is required to show maps. 2.43 11/04/2015 * Option to sort tree by DateTimeOriginal in non-catalog (real time) mode. * Support for '*' extension wildcard in catalog mode. * Fixed shift arrow on advanced catalog import dialog to include ExifTool tags required by any custom tags. * Support for viewing files compressed in .xz format. * Many new scripting functions including support for running programs, executing ExifTool, adding custom popup menu options and xz compression (great for Sony uncompressed raws). See the scripting.html page for a complete a list of all changes. * Verbiage changes related to catalog import. 2.42 10/14/2015 * Added ability to set a painter function for thumbnails - setThumbnailPainter(painter). * Added "Apply Painter" checkbox to allow exporting images manipulated by a painter function. * Added getImageRect(BufferedImage) function to PainterProps to return a Rectangle containing only the visible bounds of an image. Useful optimization for magnified images. See 'psychedelic' script. * Renamed Catalog Manager to Catalog Importer. * Optimized catalog import process for small speedup. * Many miscellaneous bug fixes. 2.41 07/13/2015 * Enhancements to scripting API including ability to automate functions and draw on the display (see the histogram example on scripting page). * Changes to script execution to support new functions. Scripts are evaluated when loading settings, saving scripts and building trees/catalogs. Most scripts should be backward compatible but some may need to be modified by placing logic in onBuildTree function. See scripting page for details. * Changed link to point to new FAQ url. 2.40 06/05/2015 * Added a popup menu to delete files. Confirmation is required. If the tree was built from a catalog, the image is also removed from that catalog. * Recent settings menu now shows the last twenty entries. * If "Original Size" and "Include EXIF Data" is checked in export preferences, PhotoGrok will now do a straight file copy. This is also a workaround to exporting non- image files. * Updated ExifTool to version 9.90. As always, you can configure to use any version of ExifTool on your system. 2.39 02/03/2015 * Images with ascii tag values greater than 4k were not not recorded in a catalog. * Binary tags like ThumbnailImage can be exported to a file. Right-click tag in exif list and "Export Data". * Improved mouse wheel zoom speed. * Clicking the center mouse button will toggle max zoom to the current cursor location. 2.38 12/24/2014 * Previously, files of the same name and size were ignored in a copy operation. PhotoGrok now does a byte-level comparison if the sizes match. Files with the same name that are not identical are copied with an _1, _2, etc. appended to the base file name. As before, no files are overwritten in a copy operation. 2.37 11/23/2014 * Added a recent setting menu to the File menu. The last ten accessed settings are saved. * Ability to move tags from one user tab to the other. * Added Preferences backup mechanism. 2.36 09/24/2014 * Fullscreen shortcut for selected image now CTRL+f. This was necessary because the tree and exif list can be searched by selected an item and typing. The previous shortcut key conflicted with this mechanism. * Added a second user tab for tracking tags. * Fixed a rare busy cursor bug. 2.35 08/26/2014 * Pressing F will open a selected image in full screen mode. * Reverse slideshow (use left arrow) now loops correctly. * Zoom and scroll is now implemented in fullscreen image viewer. 2.34 08/15/2014 * Added ability to copy images into other applications via the clipboard. Copied images can also be pasted into the file system on Windows and Ubuntu. 2.33 07/16/2014 * Added a javascript accessible map for persisting script data between tree builds. The Ctrl+Shift+J JavaScript window now includes a button to clear the map. A scripting page will be added to the web site with useful examples for advanced users. * Attempt to fix a rare issue when running under Windows. The busy state is not correctly toggled. 2.32 04/24/2014 * Minor resizing fix. 2.31 04/23/2014 * Mouse wheel zoom now intelligently zooms to mouse location. * Additional Ctrl+Shift+J functions. For example, the following code entered in the Ctrl+Shift+J JavaScript dialog requests a value when a tree or catalog is built. After the operation completes, the entered message is displayed: var msg = request("Enter Something"); function done(){ showMessage(msg); } Elapsed Time Example: var start = new Date().getTime(); function done(){ var elapsed = new Date().getTime() - start; showMessage('Elapsed Time: ' + elapsed); } 2.30 04/17/2014 * Added scripting interface. Ctrl+Shift+J opens dialog for entering JavaScript. Any code is executed when a tree is created or a catalog is updated. Script can contain variables and functions accessible from JavaScript filters. A simple API allows some interaction with PhotoGrok. The web site will be updated with details. 2.29 04/03/2014 * Fix for js filters in Java 6 and 7. * JS optimization. 2.28 03/22/2014 * Use Java's default js interpreter for filters and custom tags. Big speedup on Java 8. 2.27 03/20/2014 * Accomodate change to Google Map api. * Fix for OS X launcher on Java 8. 2.26 03/11/2014 * If tree is loaded from a catalog, that catalog will now be automatically updated if keywords are changed. 2.25 03/04/2014 * Added "Create Playlist" to thumbnail multi-select. * Fixed problem adding keywords from thumbnail screen. 2.24 02/28/2014 * OS X users now have the option to use native file chooser. Java 7 update 12 or higher required. * Update ExifTool to version 9.53. 2.23 02/26/2014 * Fixed issues with spaces in directory names (windows). * Reset preferences if pref file can't be loaded. * Added ability to select multiple images on thumbnail screen via shift and control keys (command on Mac). * Under some circumstances a file chooser operation would not correctly cancel. 2.22 01/26/2014 * Alphabetize user exif tab. * Save "Apply Filter" setting. * Option to export images at original size. * Fixed inaccurate process count message. 2.21 12/08/2013 * Fixed file locking bug that prevented keyword updates under some circumstances. * Updated to ExifTool 9.43 to fix problem viewing some images with unusual file names. 2.20 10/27/2013 * Removed address bubble from map. * Fixed default directory behavior. * Minor UI fixes. 2.19 10/23/2013 * Maps for geotagged images. Right-click on an image or tree node and select "Map" from popup menu. Java 7 Update 6 or higher required. * Changed tree click behavior for switching out of maps and charts. 2.18 09/26/2013 * Verbiage changes including 'index' to 'catalog'. * Multiple catalogs can be created in Preferences. * Filters can now be applied to catalog creation. * Removed unnecessary ExifTool version check. * Pressing the shift key while moving tags on the Catalog Manager (advanced mode) will only move tags used by the current configuration. Good for creating a compact and high performance catalog. 2.17 09/19/2013 * Rollover preview of portrait RAW files not rotated. * Minor optimization to javascript filter compiler. 2.16 09/06/2013 * Rollover preview of small images could hang the application. 2.15 09/05/2013 * Substantial optimization when using custom tags. 2.14 09/05/2013 * Rollover image not rotating based on Orientation tag. 2.13 09/04/2013 * Multi-monitor slideshow fix. * Added rollover image preview. 2.12 08/31/2013 * Under certain circumstances tags could be ignored when importing settings. * Added default directories for custom tags and settings. * Cleaned up shortcut keys. * Fixed icon in the windows launcher zip. * Stop a background tree build when importing new settings. 2.11 08/19/2013 * Added ability to use a javascript expression to create a composite or calculated tree node label. FAQ help coming. 2.10 08/18/2013 * Key presses were being lost during slide show on Oracle's OS X JVM. * Added "View" option to image popup menu. 2.09 08/15/2013 * Switched to java-image-scaling library for improved quality. * Keywords (tags in Picasa) can be updated for a single image or all images/sub-images of a tree node. Since this functionality calls ExifTool's write operations, it must first be activated on the Preferences dialog. Please make sure your images are backed up. * Minor UI and verbiage updates. 2.08 08/12/2013 * Multiple tags can now be passed into a javascript filter via a comma delimited string. For example, to see all images taken in portrait mode, enter "ImageWidth,ImageHeight" in the first filter column, choose "Javascript Expression" for the operation and enter the following in the third column: "ImageHeight > ImageWidth". 2.07 08/11/2013 * Tags selected for display in the "User" tab were not restored with settings import. 2.06 08/10/2013 * Fullscreen slideshow for Mac OS X. * Slideshow now cycles. 2.05 08/08/2013 * Removed "num" javascript helper function (use "parseInt"). * Restored "dec" javascript function. * Added convertDate helper javascript function. * Added version check code for forthcoming stand-alone version. 2.04 08/07/2013 * Under certain conditions, filters weren't loading with with imported settings. 2.03 08/05/2013 * Removed native Macintosh menu bar when running under Oracle Mac JVM because of a Look and Feel bug in Java Web Start. Mac users are encouraged to use Apple's JVM for a better experience. 2.02 08/05/2013 * Added ability to import/export settings. This covers all preferences, filters, tags and image folders. 2.01 08/04/2013 * Added a "Reset" button to the filter dialog. * "Copy Tree" and tree "Export" no longer allowed during a tree build. A dialog will notify the user. * Prevent "locked" progress indicator when canceling a tree build on a large database. * Minor verbiage changes. * Save default export and copy tree directories. 2.00 08/02/2013 * Further javascript optimizations. 1.99 08/02/2013 * Compile javascript filters for substantial speed increase. 1.98 08/01/2013 * Added bar charting. 1.97 07/28/2013 * Fixed filter cancel applying changes (introduced in 1.96). 1.96 07/27/2013 * Added optional ability to save filters. * Changed preferences layout. 1.95 05/04/2013 * Zoom images with mouse wheel. * Scroll zoomed images by clicking and dragging. 1.94 04/10/2013 * New icons. * Added FAQ menu item to help menu. 1.93 04/06/2013 * Default image folder is now "Pictures" in the user's home folder (or the user's home dir if "Pictures" doesn't exist). * Added javascript helper functions "num" and "dec". See FAQ. 1.92 04/02/2013 * Simplified Index Manager dialog. * Minor ui fixes. 1.91 03/31/2013 * PhotoGrok is no longer blocked by a progress dialog when building a tree. This means images can be examined even as the tree is being constructed. Some functions will cancel a background tree build (with notification). * Added busy indicator to status bar for background processes. 1.90 03/29/2013 * Version 1.89 failed to launch on Windows. * Replaced progress bar with web 2.0-style busy indicator. * Progress verbiage changes. 1.89 03/29/2013 * Rounded windows for Linux users. 1.88 03/26/2013 * Reverted update mechanism to "timeout". * Stop loading thumbnail images if availble memory insufficient. * Minor asethetic changes. 1.87 03/23/2013 * ExifTool is now included for Linux and Mac users. As usual, a different version of ExifTool can be configured in Preferences. * Updated included ExifTool to Version 9.24. * NOTE: If you're running an older version and PhotoGrok isn't automatically updating, you may need to run "javaws -viewer" and right-click on the PhotoGrok application and choose "Run Online" to get the latest update. 1.86 03/21/2013 * Custom tags can now be used as viewer tags and are listed in the Exif pane for each image (see next). * The "All Exif" tab list now displays a "PhotoGrok" section containing all custom tags and the special tag "ElapsedTime". Like all tags, these can be displayed the "User Exif" tab. 1.85 03/21/2013 * Added "User Exif" and "All Exif" tabs to right Exif pane. Right-click on tags in the list(s) to add/remove entries on the user exif list. This makes frequently used tags easily visible at all times. 1.84 03/20/2013 * Optimization for improved responsiveness. * Run update check in background for faster startup. 1.83 03/08/2013 * No code update. Refactored to use versioned jars for faster startup. If PhotoGrok doesn't launch, remove all installed web start apps via the Java control panel or the "javaws -viewer" command and re-install. 1.83 03/07/2013 * Significant speed improvements when displaying thumbnails. 1.82 03/05/2013 * Optimized tree load. * Code cleanup. Removed Java 5 specific code. * Improved error messages. 1.81 03/01/2013 * Popup menu on EXIF pane added. Use to remove selected tags from future indexing operations (and optionally delete the tags from the current index). Removing unused tags can shrink the index and increase performance when building a tree. 1.80 02/26/2013 * Dropped support for Java 5. * Improved tab appearance and operation. * Fixed some layout and font issues. 1.79 02/21/2013 * Custom font for uniform appearance across platforms. 1.78 02/07/2013 * Users can optionally select which tags are indexed. Excluding tags that aren't needed improves indexing performance. 1.77 01/18/2013 * Added ability to cancel construction of indexed tree. 1.76 01/16/2013 * Custom tags can be used in filters for other custom tags. Recursive conditions are reported when tree is built. 1.75 01/16/2013 * Custom tags can be used in filters. 1.74 01/15/2013 * Added ability to import/export custom tags. 1.73 12/14/2012 * Fixed left arrow tree traversal on OS X. 1.72 10/12/2012 * Added a Window menu for OS X. 1.71 10/11/2012 * Create custom tree tags based on a filter. New tags can be created and existing tags can be modified. 1.70 10/08/2012 * Application size, position and tool bar orientation are saved. 1.69 10/06/2012 * "Copy Tree" and "Export" will now skip files if PhotoGrok detects a duplicate file (same name and size) in the destination directory. If two files have the same name but different sizes, the copy will append a _1, _2, etc. to the destination file name (extensions are preserved). This behavior is useful for incremental backups, etc. 1.68 10/01/2012 * OS X specific enhancements and fixes. 1.67 09/30/2012 * Allow PhotoGrok to "Export" and "Copy Tree" to a non-empty folder. This is more useful. If there are duplicate files in the destination folder, PhotoGrok will append an underscore 1, 2 etc to the file name. * Faster image copy for "Copy Tree". * Fixed problem with jpeg extension appended to file names when copying. 1.66 09/20/2012 * UI changes for OS X. Moved menu from application to desktop. * Fixed "Open" and "Open Folder" on OS X. 1.65 09/17/2012 * Under some circumstances PhotoGrok would not correctly detect a new version of ExifTool when building an index. 1.64 09/05/2012 * Added ability to export M3U playlist file from tree popup-menu. 1.63 08/14/2012 * Multi-threaded image loading for fast tree traversal using arrow keys. 1.62 08/02/2012 * Focus change for easier tree navigation (use arrow keys). * Changed "TimeSpan" tag to "ElapsedTime". 1.61 07/23/2012 * Entering "TimeSpan" as a viewer tag displays the length of time since the image was created (uses DateTimeOriginal for calculation). This tag is specific to PhotoGrok. 1.60 07/15/2012 * Added ability to use GraphicsMagick to decode image types with partial or no native support in PhotoGrok (TIFF, PICT etc). GraphicsMagick must be installed and in the path. FileTypes to be decoded by GraphicsMagick must be entered on the configuration screen. 1.59 07/14/2012 * New application icons. * Minor memory optimization. 1.58 06/25/2012 * Updated Substance look and feel. * Minor DB connection optimization. 1.57 06/24/2012 * Tree right-click behavior more consistent with OS behavior. 1.56 06/22/2012 * DB optimization substantially speeds up indexed searches. Either re-index your images or re-index a single folder to force the update. The first re-index could take longer than usual if you have a large image collection. 1.55 06/20/2012 * Filter optimizations. Searches with filters should run much faster. 1.54 06/19/2012 * Thumbnails intelligently render when scrolled into view. * Fixed minor layout bug. 1.53 06/17/2012 * Added ability to view tree information as a pie chart. Right-click on a node with child folders (for example, the root node) and select "Chart" from the popup-menu. 1.52 06/15/2012 * Changed preference mechanism for future enhancements. There are no longer limitations to the number of folders that can be scanned. * Switched to Rhino for Javascript filter operations. Faster. Javascript filters should now work fine on Java 5. * Add "Previous Filter Must Be True" checkbox to multiple filter tabs. This allows very complex AND/OR conditions when filtering data. 1.51 06/06/2012 * On windows it was possible to see "duplicate" thumbnails if an index was rebuilt after the filename's case had changed. For example, IMAGE.JPG was later re-saved as image.jpg. Simply re-index if this problem affected you. 1.50 05/25/2012 * Index searches for specific extensions are now much faster. Requires a re-index. IMPORTANT CHANGE: The configuration screen now requires actual file extensions. (The field can still be left blank for all supported extensions). Previously ExifTool FileTypes were required for index operations and actual extensions for non-index searches. This was a glaring inconsistency. 1.49 05/23/2012 * Fixed sql error when running an index search with FileType as the only tag. 1.48 04/19/2012 * Fixed index sync issue. 1.47 04/14/2012 * When previously indexed folders are re-indexed, deleted images are removed from the index and changed images are updated. This requires pre-1.47 indexes to be rebuilt. Thumbnail images are also updated or deleted as appropriate. To guarantee thumbnails are in sync with folder images, delete existing thumbnails and re-create. Changes on 02/04/2012 * No code changes. Updated H2 engine and ExifTool for Windows users. 1.46 08/31/2011 * Multi-monitor bug fixes for application and slideshow * Ability to export images with or without EXIF data. Set the exported image width and height on the configuration screen (downscale only). As always, the original image is not affected. 1.45 02/06/2011 * Added slideshow. Right-click on tree node and select "Slideshow". Set duration on configuration screen. 1.44 01/18/2011 * Some cameras have a PreviewImage embedded in JPEGs. PhotoGrok was incorrectly displaying this low-resolution image instead of the full JPEG. 1.43 01/02/2011 * Higher quality scaling algorithm. 1.42 10/18/2010 * Updated H2 database for faster queries. This will require the image index to be rebuilt. 1.41 09/19/2010 * Fixed to run in Java 5 again. Changes on 8/27/2010 * No PhotoGrok changes. Version 8.29 of ExifTool for Windows users. 1.40 08/22/2010 * Added ability to copy a tree structure with corresponding images/files to the filesystem. Useful for backing up images meeting specific EXIF criteria. See the FAQ for additional details. 1.39 08/15/2010 * Added Javascript expressions to Filters. Example: to see all images taken between F2.0 and F4.0, select (or type) 'Aperture' into the first filter field, select "Javascript Expression" as the filter operation and enter "Aperture >= 2.0 && Aperture <= 4.0" into the third field. The expression must return true of false. Other Javascript functions like string and regular expressions should also work. Java 6 required. 1.38 01/30/2010 * Added mnemonics and accelerator shortcuts * Updated ExifTool version for Windows users. 1.37 01/24/2010 * Added menus * Verbiage changes (search to build tree, etc) 1.36 01/10/2010 * Added date formatting to allow heirarchical ordering of images by date/time. See FAQ for details. 1.35 12/19/2009 * Use Substance renderers for tree and lists (Java 6 and up). * Fixed tree double-click behavior. * Updated ExifTool version for Windows users. 1.34 * Fix for Java 5 when no preview found. 1.33 * UI fixes for multi-monitor setups. Other small UI tweaks. 1.32 12/09/2009 * Double-click the preview image to open a file with the default OS action for that file type. 1.31 12/07/2009 * Removed duplicate tags in results * UI changes for Java 5 users. 1.30 12/06/2009 * Allow png and gif preview with Java 5 (time to update people). 1.29 12/04/2009 * Added embedded database for (optional) indexing and fast tag searches 1.28 11/30/2009 * Added option to not search subfolders. 1.27 11/29/2009 * Support for searching multiple folders 1.26 11/27/2009 * Do not scale up images for previewing. * Save memory by using embedded images for preview. * Do not cache images from the thumbnail cache folder. 1.25 11/26/2009 * Memory optimization. Release main image before loading new image. 1.24 11/25/2009 * Minor verbiage change 1.23 11/22/2009 * Increased mouse wheel scroll speed on thumbnail screen. * Added ability to select recognized ExifTool file extensions. 1.22 11/21/2009 * Validate tag from exif detail pane. * Code clean-up and minor UI changes. 1.21 11/19/2009 * Added ability to configure tags on the image viewer screen. * Made image viewer tags more readable. 1.20 11/18/2009 * Implemented optional disk-based thumbnail cache (off by default). This creates a .photogrok folder in the user's home directory. Thumbnail images are saved as they are previewed for faster performance later. 1.19 11/16/2009 * Memory-sensitive cache for thumbnail images. 1.18 11/14/2009 * Added license notice for Substance Look and Feel * Tree was sizing incorrectly on Linux. 1.17 11/14/2009 * Added tag selector screen * Limited tag search to ten tags 1.16 11/12/2009 * Image viewer wasn't working in Java 5. 1.15 11/10/2009 * Removed preview popup image for performance reasons. 1.14 11/10/2009 * Image scaling optimizations * Double-click root node to start search 1.13 11/10/2009 * Image rollover effect for preview images. 1.12 11/09/2009 * Ignore corrupted images when loading preview pane. 1.11 11/09/2009 * Viewer support for some TIF and PSD files. 1.10 11/08/2009 * Preview pane displays thumbnails of a tree node's children. Double-click thumbnail to open. 1.09 11/07/2009 * Converted to Java Web Start app and new domain * Bundled ExifTool.exe with the Windows version * Substance Look and Feel for Java 6 * UI and minor bug fixes 1.08 11/01/2009 * Show busy dialog when loading valid tags (at startup and exiftool.exe selection) * Added popup menu to images in tree and viewer 1.07 10/31/2009 * Only valid ExifTool tags can be entered * Filters can now search any tag (and not just tags used to build the tree) * Setting tree tags, image folder and filter no longer triggers refresh (use toolbar refresh button) 1.06 10/16/2009 * Added filters - search for specific tag values * A few UI tweaks. 1.05 10/14/2009 * Minor UI change 1.04 10/12/2009 * Optimization in loading images * UI changes 1.03 10/09/2009 * Support for image preview on all supported Java types (gif, bmp, etc). * Added configuration screen. 1.02 10/09/2009 * Memory enhancements. 1.01 10/08/2009 * Dynamic Tree - The tag tree can have as many levels as there are tags. Simply enter a comma-delimited tag list. If you want to see images grouped by lens and then ISO, enter LensType,ISO in the tag dialog.