Jeffrey’s “Export to Google Photos” Lightroom Plugin

Warning: This plugin may cease to work after mid-April, 2024. Google is pushing new "app verification" processes that are fairly onerous for a simple one-man (mostly retired) shop like me. Their communication and their app-configuration sites, complex to understand and navigate during the best of times, seems particularly troublesome this time. I can't even tell exactly which apps might be affected. We'll see.

Note: this plugin's functionality is extremely limited, because Google's API is extremely limited.

This plugin for Adobe Lightroom Classic allows you to export images from Lightroom directly to Google Photos.

At this point, Google does allow the plugin to:

  1. create albums.
  2. upload photos and videos to those (and only those) albums.

In particular, Google does not allow this plugin to:

  • upload to any album not created by this plugin.
  • update any aspect of any photo or video at Google Photos.
  • delete or replace anything at Google Photos.

The inability to delete or replace precludes creating a Publish Service in Lightroom for Google Photos. As such, this plugin is currently an export-only plugin.

Logging In To Your Google Account

Giving the plugin permission to upload photos on your behalf to your own Google Photos account is currently a bit more complex than it needs to be, until Google verifies my app.

First, make sure you're logged into Google in your web browser, to the account you want the plugin to upload to.

Then, start the authentication process in the Export Dialog:

Clicking the Authenticate to Google Photos brings you to a scary-looking page at Google:

Clicking on Advanced opens up a bit more of the page:

And there you can see an oddly-worded Go to (unsafe) link. The is my blog website, but I don't know why they use it as the name here. It's where I host the privacy policy web page that Google requires (it's down below, on this very page). Weird.

In any case, clicking on that link finally brings the granting-of-permissions page:

Here, too, you see the odd use of my web site as the name of this app.

The list of permissions you see here seems to grant much more functionality than the plugin actually offers. The first one, View and manage your Google Photos library seems to be pretty much full access, you'd think.

The discrepancy between what we see here and what we actually get is mirrored in the API documentation (it's inconsistent and sometimes wrong). It also mirrors the communication I've seen from Google employees working on the project (it's inconsistent and sometimes wrong).

In any case, clicking Allow should send you back to Lightroom, and you'll be ready to create an album.

Selecting the Destination Album

As noted above, Google, for unknown reasons, allows the plugin to upload only to albums created by the plugin. However, Google doesn't let the plugin know which albums those are (and the plugin can't know because they could have been crated by you on a different machine, or with a different catalog), so the plugin must list all your albums.

If you try to upload to one not created by this plugin, Google will return an error only after the photo has been uploaded.

So, be sure to create an album with the plugin.

Here's what the Export dialog looks like:

I'm not privy to Google's plans for the API, but the takeaway from what I've learned so far is that Google has little interest in this API, so I don't expect it to expand in a meaningful way any time soon.

This plugin works in Adobe Lightroom Classic, and older versions as far back as Lightroom 6 (though some features depend on the version of Lightroom).

The same download works for both Windows and Mac. See the box to the upper right for the download link (in orange) and installation instructions.

Please see the FAQ and known issues before reporting bugs.


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 Lr10 to Lr11 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.

Privacy Policy

Google requires that I have a stated privacy policy, so here it is: I respect your privacy.

With one exception mentioned below, the plugin keeps all your Google data between you and Google, and it's never sent to me or anyone else unless you go out of your way to share it (e.g. by explicitly sending me plugin logs or an email). If you do choose to send me something, I respect your privacy.

The plugin stores your Google data mostly in the Lightroom catalog, and partially in Lightroom's preferences file. Data may appear in the plugin log file maintained by Lightroom on your system. The log file is cleared out each time Lightroom starts or the plugin is reloaded, and can be manually cleared via Lightroom's plugin manager.

The one exception mentioned above is that during the process of authenticating the plugin (giving it permission to upload photos on your behalf to your own Google account), technical limitations at Google require the process to momentarily pass through my web site's servers. The data in this step is used only in furthering Google's authentication process, and is neither logged on my server nor shared with anyone.

Unrelated to your photos or your personal data, the check for plugin updates process passes along anonymous system statistics: what version of the plugin is currently installed, what version of Lightroom is being used, and whether the plugin is being run on Windows or a Mac; no Google data is involved in this.

Version History
( Update Log via RSS )


Added support for AVIF uploads for Lr13+.

CachedImagePreviewsFile token.


Work around a bug in Lightroom 11.2 that causes publishing to get stuck. The workaround is to switch the view away from the collection being published. If the user does that switch manually, the bug goes away. This plugin update notices if the bug is being triggered, and if so, momentarily switches the view to the quick collection and back.

Removed a bunch of debug logging that was slowing down the LUA token.Newline


Work around a Lightroom "lua_gettop( L ) == 1" bug.


Added the WEEKNUM token, along with DAYNUM, weeknum, and daynum.

Whack-a-mole with PayPal's random changes.


Warn when PayPal seems to have given a bogus code in the web-confirmation page.

Fixed that the Province template token did not respect the plugin-specific geo-privacy settings.

Fixed an issue with the {Newline} token, and added {Comma}, {Hyphen}, and {Space} for good measure.

Fixed a problem with filters on the {Keyword} token.


Added 'separated by' to the People token.

Added the ImageViewDirection and ImageViewBearing tokens.

Reworked the Keywords token to better accept filters.

working around 'constant table overflow' error


Added the PF filter to turn typographic fractions into plain-ASCII fractions.


Updates for Lr10

Added the SpeedKnots token.

Worked around an "unknown key captureTime" error.

Added the {PlusCode} and {GeoHash} tokens.


Handle the "All Except Camera & Camera Raw Info" metadata option WRT geoprivacy.

Some of the filename-related tokens could be incorrect in rare situations.


Update to track Google's changes in the underlying APIs. No user-visible changes.

Work around a Windows bug related to canceling out of the registration dialog.

Added some extra debug logging to note whether the plugin is enabled.


Added the LensInfo template token.

Updated the Exposure token to allow customization.

More token work: added {Urls}, and updated {ISO} and {Copyright} to allow customization.

Added the {RelativeFolder} token.


Fixed the SST1 and SST2 tokens.


Updated the PublishCollectionName token (and CollectionNames and CollectionFullNames) to remove the MIRROR: prefix from the name that mirrored collections within my Collection Publisher plugin automatically get.


Fixed a problem with the SpeedKPH token.

Finally figured out the “Assertion failed: packed” error.

Added TempC and TempF to the template tokens that my plugins understand.

Added the TempC and TempF tokens.

Updated the keyword-related tokens to accept standard filters.

Work around a bug that sometimes causes plugins to be disabled when starting Lightroom via clicking on a catalog file.

Fix an "Unknown key: captureTime" crash.

Added the GPSCoords token.

Fixed a problem related to template tokens and photos without capture times.

Added functions uc(), ucFirst(), lc(), and lcFirst() to the LUA token.


I happened to notice that Google had sometime made a small (unannounced!) change to the API, and now suddenly videos that couldn't be uploaded before can be.

When not logged in, make it more clear what you're not logged into, and how to fix it.

Updated the alphabetical sort to be "sorta-smart alphabetical sort", whereby names that differ only by a number are sorted numerically. For example, "album2" properly falls between "album1" and "album3", but "album20" falls after. The former straight-up alphabetical sort put "album20" before "album3", which is ugly and unpractical.

Added the PEOPLE variable to the LUA token.


Make the template-editing window a big bigger in the caption editor.


Updates for Lr8 (Lightroom Classic CC Version 8).

Added the special PP() function to the {LUA} token.

Added hierarchical options to the Keywords token.

Try to work around a Lightroom bug related to photo timezones and how Lightroom handles accessing plugin data.


Added the 'nicknames' modifier to the {People} token.


Allow the plugin to run in Lightroom 4. I'm not sure whether it'll work, but worth a try if you're still on Lr4.


Now list only albums created by the plugin, as those are the only ones that Google allows the plugin to upload to.

Added the SST1, SST2, and SS3 tokens to the template tokens that the plugin understands.

Sometimes Lightroom loses the "Visit At... " link for a publish collection; dig harder to come up with it anyway.

Input fields that accept a location can now handle a What3Words code and a Plus Code.

Try to avoid having unexpectedly-long error messages create too-big a dialog.

20180607.1 Initial public release