Jeffrey’s “Export to Expono” Lightroom Plugin

This Export-to-Expono plugin is for Lightroom 2 and later. The same download works for both Windows and Mac.

Note: The plugin works fine, but further development has been suspended.


The screenshot below, of the plugin's Export Dialog, gives some idea about its functionality, at least as of the initial public release version, 20090717.1.

After downloading, installing, and enabling the plugin (download link is in the orange box, in the upper-right of this page; install instructions are here), you can activate the Expono export by clicking on the Export Dialog's masthead, as illustrated here.

You can add additional functionality to the Expono export (and to all exports) with export-filter plugins. On my Lightroom Goodies page I have export-filter plugins related to Geoencoding support, metadata management, and running external apps on images as they export.

The plugin also adds a File > Plug-in Extras > Expono Extras menu-item dialog.


This plugin is distributed as “donationware”. I have chosen to make it available for free — everyone can use it forever, without cost of any kind — but unless registered, its functionality is somewhat reduced after six weeks.

Registration is done via PayPal, and if you choose to register, it costs the minimum 1-cent PayPal fee; any amount you'd like to add beyond PayPal's sliding fees as a gift to me is completely optional, and completely appreciated.

Note: a Lightroom major upgrade, such as from Lr4 to Lr5, de-registers the plugin in the upgraded version, so if you want to maintain registration, a new ($0.01 if you like) registration code is needed in the upgraded version. It makes for a hassle every couple of years, I know. Sorry. See this note for details.

For details on plugin registration and on how I came into this hobby of Lightroom plugin development, see my Plugin Registration page.

Version History
( Update Log via RSS )

20100629.26 Lots more changes, especially related to auto destinations and replacing images.
20100629.25 Various fixes, including better handling of virtual copies (created on images uploaded with this version or later).
20100628.24 Had broken auto destinations.
20100625.23 Yikes, shaking out some more build issues.
20100624.22 Discovered a nasty build bug; pushing a new version in case it affects this plugin.

This version can be registered in Lightroom 3. It can run in Lightroom 2 or Lightroom 3; it does not work in the Lr3 betas.

It uses my new registration system when run on Lightroom 3, which avoids some of the silly issues of the old one. Please take care to note the details on the registration page: use of this version (or later) of the plugin in Lightroom 3 requires a new registration code, even if you had registered some older version of the plugin.

Lots and lots of changes under the hood.

Added some options to the Twitter <dest options> special code: add simple as an option to have it become just the name without quotes or other adornment; add short to par down the gallery name to just the leaf name. They can be combined, e.g. <dest short simple>.

Added some stuff to the LUA template token: a version of the standard os table (with date, difftime, getenv, es and time), and the standard Lightroom STK tables LrDate, LrPathUtils, and LrStringUtils). Also added a new functions TBL() (returns an empty table), ne(item) (returns true if the item is not empty), and nb(item) (returns true if the item is not blank; " " is blank but not empty, while "" and nil are both blank and empty).


Removed some LR3-related debugging stuff that's showing up now that LR3b2 is out. All plugin-related things should work in LR3b2 except Publish, which will likely change drasticly between now and when LR3 is actually released.

New when running LR3b2 is a new "Snapshots on Export" section, which is basically a built-in version of this new plugin.

Added new tokens to the templates used in my plugins: IfKeyword and IfExportedKeyword are supported for LR2 and later. For LR3b1 and later the very powerful LUA token, and for LR3b2 and later, a bunch of new localized date/time tokens. See the templates page for details.


Title presets weren't getting saved across LR restarts in some cases (for definitions of "some" meaning "all", sorry).

Changed the semantics of the Places filter (in the tokens understood by the preset templates of my plugins) in two ways: if applied to a string value rather than a number, it works on the first number found in the string. Another is that you can now use something like Places=-1 to round to the 10s, Places=-2 to round to the 100s, etc.

Wholesale changes that attempt to honor the user's locale settings for numeric display (e.g. Europeans writing 3,14156 for pi). I've probably missed some spots, so let me know if you find some.

Added three new tokens to the templates that my plugins use, CameraName, IfGeoencoded, and Keywords. See the templates page for details.


Completely changed how the one-click upgrade applies the newly-downloaded zip file, in the hopes that it'll work for more people. Rather than unzipping over the old copy, it now unzips to a temporary folder, then moves the old folder out of the way and the new folder into place. Prior versions' folders are now maintained (with the version number in the folder) in case you want to revert a version; you may want to clear them out from time to time. Of course, it won't take affect until you try to upgrade after having upgraded to or beyond this version.

Lots of updates to the Twitter support:

  • Better tweet-size estimates in line with recent processing changes at Twitter.
  • Added <title> and <description> tags to the tweet-text template (they use the title/description from the first image exported).
  • Added the ability to geotag tweets with a static location, or with the geoencoded location of the first image. A static location can be specified with a latitude, longitude pair, a geohash, or a url from a mapping service like Google, Yahoo, or Bing. On the encoded side, geodata embedded in the image can be used, or the geodata maintained by my geoencoding-support plugin).
  • You can now configure the plugin to shorten URLs via your own bit.ly account, in case you want to track click-throughs yourself.
  • You can now specify that you want all URLs shortened. The default remains to shorten them only when required to get under the 140-character limit. You might, for example, want to forcefully shorten them all in conjunction with your own bit.ly account, for click-through tracking.
  • The plugin now goes to great lengths to report whether a tweet is accepted by Twitter. In their infinite wisdom, the folks at Twitter suddenly decided to start ignoring long tweets instead of truncating them, but (here's the brilliant part) they still report back to the plugin that the tweet was successful. Sigh.

    Furthermore, they might also ignore (yet report as successful) other kinds of tweets, such as those that are a repeat of a "too recent" tweet. Those crafty folks at Twitter implemented these changes more than three months ago, but in a truly cunning move, they still detail the old behavior in their API documentation, making no mention whatsoever about how their service now actually works.

    Only by doing a bunch of extra work can the plugin detect whether a tweet was accepted or ignored. If ignored, there's no way for the plugin to know why, so at this point it merely reports that the tweet didn't go through.

Caught a few more LR3b issues.

Fixed the {GPSAltitude} template token so that it should now actually work.

Oops, the upload date/time custom metadata items were swapped. Doh! With this new version, each catalog will auto-update to correct the issue the first time it's loaded. The format used for the date and time are restricted in LR2 to whatever I've chosen, but the first time you load the plugin in the real LR3 (whenever it comes out), the catalog will update itself again to write the dates/times in your user-customized, localized format.

20100118.17 Added two new template tokens, {DaysSince} and {PhotoDaysSince}. They're a bit tricky, but could be useful.
20091230.16 Added a "Repopulate URLs" button to the Plugin Extras dialog, to allow correcting for the bug fixed in the previous push, and to correct for photos uploaded with old versions of the plugin.
20091230.15 Sigh, it seems 30,000+ lines of code are getting to be hard to keep track of, and I unintentially removed the exported url from the custom metadata (from the 'At Expono' item) a few versions back. This should fix it, at least for images uploaded from now.
20091217.14 Properly display "unlimited storage" if there's no limit.
20091216.13 Figured out when the "AgExportSession.photoExportSequence is obsolete; use photoIdExportSequence instead" error was coming from. A bug in LR3 beta. I had to disable the export filter for the beta to avoid this.
20091215.12 Allow changing the font size of list of upload destinations. Those with long names might want to choose a smaller size to allow more text to fit on each row.
20091214.11 Added the special {NOJOINERS} token to the Template Language understood by my plugins.
20091209.10 A few small fixes for LR3b, and tweaks to the extra-keywords stuff do tidy up repeated keywords in the display.
20091205.9 Minor internal debugging tweaks.
20091118.8 Removed a debugging message that gets in the way while reporting a bad network connection.
20091118.7 Added an {Altitude} item to the templates understood by the plugin. It's the numeric altitude in meters, as opposed to the {GPSAltitude} item which is a description of the altitude along the lines of 32.7 m. Also updated the Places filter so that it can be used on fields that merely begin with a number.
20091118.6 Bug unfix for LR3 beta on Windows. LR2/Win had a bug that I needed to work around, but it's fixed in LR3, so I had to unworkaround the bug to get it working again. Or something like that.
20091022.5 Added a first draft of some rudimentary support for Lightroom 3 Beta. See this important note about plugin support in Lightroom 3 Beta and Lightroom 3, including future plans for features and my registration system.

Lots of tweaks and fixes.

(Sorry to everyone who couldn't contact my server for the last few days... it had "issues", that are now fixed.)

20090718.3 Oops, I realize now that a place-holder dialog I created while building the authentication sequence was still there, simply stating "done?". I've replaced it with something a bit more pretty.
20090717.2 First oopsie fixed.
20090717.1 Initial public release.

Comments so far....

Hi Jeffrey
Just want to let you know.
I get two error messages in the Expono plugin when loging on to the accout.
The first error occurres when the plugin is “Fetching album list from Expono…” and reads:
“Internal plugin error
attempting login aborted”
The second error commes when ckliking OK om\n the first. It reads:
“An internal error has occurred: Whitespace is not allowed at this location.”

I’m writing from Norway.


After updating to the latest version, please send the plugin log (via the “Send to Jeffrey” button int the plugin manager) if you get the error again. —Jeffrey

— comment by Åsmund on December 17th, 2009 at 1:56am JST (4 years, 4 months ago) comment permalink

Just wanted to update you on the error i got a while back:

I get two error messages in the Expono plugin when loging on to the accout.
The first error occurres when the plugin is “Fetching album list from Expono…” and reads:
“Internal plugin error
attempting login aborted”
The second error commes when clikking OK om\n the first. It reads:
“An internal error has occurred: Whitespace is not allowed at this location.”

It seems that your plugin does not support white spaces and “&” in the album names. Removing all spaces and a ampersand in the albumnames solved the problem

Turns out to be a bug on Expono’s side. I’ve reported it to them. —Jeffrey

— comment by Åsmund on June 9th, 2010 at 4:59am JST (3 years, 10 months ago) comment permalink

Hey. I would love to see the Expono plug-in work in LR 4. What would it take to make it work?

It’d take a 1000× increase in user base to make it worth the time. In all the years I had it, only a few folks used it, so I abandoned it. Sorry. —Jeffrey

— comment by Jakob Snilsberg on January 4th, 2013 at 5:15am JST (1 year, 4 months ago) comment permalink
Leave a comment...

All comments are invisible to others until Jeffrey approves them.

Please mention what part of the world you're writing from, if you don't mind. It's always interesting to see where people are visiting from.

More or less plain text — see below for allowed markup

You can use the following tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting