Skip to content
Alexey Yudichev edited this page Mar 25, 2023 · 74 revisions
Jiotty Photos Uploader is a simple desktop application for Windows, macOS and Linux that scans a folder, including all subfolders, for photos and videos, and uploads them to your Google Photos gallery arranging into albums according to the folder structure.

Download

Download the latest version here.

How it works

When creating albums, each album name is composed of all the intermediate folders in the hierarchy, separated by colon (or anything else that you want). Each media item is uploaded to the album corresponding to its location in the folder hierarchy. For example, if you have the following structure on your disk, and you ask Jiotty to upload "Root Folder":

Root Folder
    Folder1
        photo1.jpg
        Folder2
           video1.mov    
    photo2.jpg

will result in this layout in your Google Photos gallery:

Media item Will be uploaded to album
photo1.jpg Folder1
photo2.jpg Will not be added to any album
video1.mov Folder1: Folder2

Configurable directory depth level

Since version 1.5.0, you can optionally configure the folder level to be used as albums in settings/preferences. It specifies how many levels of folder nesting will be used as albums. All files in all folders deeper than the specified level will be flattened. For example, the files organised as shown above will be added to the following albums if you set the threshold to 2:

Media item Will be uploaded to album
photo1.jpg Folder1
photo2.jpg Will not be added to any album
video1.mov Folder1

Note that Folder2 will still be processed, but not used as an album, because it's on level 3. Instead, files in Folder2 and all its sub-folders will be added to album "Folder1". Now let's see what happens when you set the threshold to 1:

Media item Will be uploaded to album
photo1.jpg Will not be added to any album
photo2.jpg Will not be added to any album
video1.mov Will not be added to any album

This time, because 1 is the level of the "Root Folder", none of the sub-folders of the "Root Folder" are used as albums, and so no albums are created at all.

Resuming uploads

The app is able to resume where it left off, so it will not attempt to re-upload all those photos and videos it already uploaded, unless you ask it to.

Command Line Interface

Since version 1.5.0 the app has a command line interface. It's simple and intuitive - just run the main binary with "-h" option to see the list of available options. Running the binary without any options will run the app as a GUI. The binaries are located here:

OS Path Comment
Linux /opt/jiotty-photos-uploader/bin/JiottyPhotosUploader
macOS /Applications/Jiotty\ Photos\ Uploader.app/Contents/MacOS/Jiotty\ Photos\ Uploader if dragged to standard Applications folder
Windows 7 %LOCALAPPDATA%\Jiotty Photos Uploader\Jiotty Photos Uploader.exe
Windows 10 varies I was unable to launch the binary manually if it was installed via .appx file. If you know how, let me know by raising an issue on GitHub. And in any case, who needs command line on Windows? You can install the Windows 7 version via .msi (it's the same app, but unsigned, so Windows will complain about that), then run it from the Windows 7 path above - this works.

Note that the app, when invoked via the command line, uses same settings/preferences as when started normally as a GUI. There is no way to change settings via CLI, To change settings, run the GUI.

Using your own Google API Client Secret

This is an advanced option that will allow you to have your own independent quota on number of uploaded files per day (see Limitations). The steps to set it up are slightly complex, but this is the best solution to the slow progress problem. This option is available from Jiotty version 1.8.0. To set it up perform the following steps.

IMPORTANT NOTICE 1. This is for advanced users who understand what they are doing. If at any point you become concerned about the safety or any other aspect, stop and switch back to Shared Secret in settings.

IMPORTANT NOTICE 2. If using a custom Google API Client Secret, try using the same one for the whole upload, and not mix and match shared and personal secrets, or different personal secrets. Switching to a different secret makes everything done by Jiotty before look like having been done by a 3rd party app, with all the limitations applied accordingly. See Limitations section.

  1. Go to https://console.cloud.google.com/. Ensure you're logged in with the same Google account that owns the Google Photos library you want to upload to. You can check the account by pointing at the icon on the top right.
  2. If you see a rich dashboard, it means you have already created at least one google project in Google Cloud. In this case, you are likely to know what to do anyway, so this guide is not for you. If you see an empty page with the "create project" button - click it!
  3. Enter "Jiotty" in the name field. Click Create.
  4. In the APIs panel, click on "Go to APIs Overview".
  5. Go back to APIs panel, click on "Go to APIs Overview".
  6. On the top, click "+ ENABLE APIS AND SERVICES"
  7. In the search box, type "drive".
  8. Click on "Google Drive API".
  9. Click the ENABLE button.
  10. Go back to "APIs & Services"
  11. On the top, click "+ ENABLE APIS AND SERVICES" again
  12. In the search box, type "photos library" - there should be one result.
  13. Click on "Photos Library API".
  14. Click the ENABLE button.
  15. In the top left bar, click Credentials
  16. Click "CONFIGURE CONSENT SCREEN" button
  17. Select User Type = EXTERNAL and click the CREATE button.
  18. Fill the form
    • App Name: Jiotty
    • User Support Email: choose your email, should be the only option
    • Developer Contact Information: enter same gmail e-mail
  19. Click SAVE AND CONTINUE - you should be moved to "Scopes" step.
  20. Click ADD OR REMOVE SCOPES
  21. In the text field under "Manually add scopes", enter https://www.googleapis.com/auth/photoslibrary and click ADD TO TABLE. You should now see this scope ticked above with the description "See, upload, and organize items in your Google Photos library".
  22. Click UPDATE button.
  23. Click SAVE AND CONTINUE - you should be moved to "Test Users" step.
  24. Click SAVE AND CONTINUE again, then click BACK TO DASHBOARD.
  25. You should now be on the "OAuth consent screen". Click PUBLISH APP, then click CONFIRM.
  26. In the left bar, click Credentials.
  27. On the top, click + CREATE CREDENTIALS, then Select OAuth Client ID
  28. Select
    • Application Type = Desktop app
    • Name: Jiotty Client
  29. Click CREATE
  30. Click OK to close the dialog
  31. In the "OAuth 2.0 Client IDs" table there should now be one entry - click the downwards pointing arrow icon to download the CLient Secret file to your computer.
  32. If using Google Workspace account, this may be needed, as suggested by a user: Go to Google Admin Console > Apps > Google Workspace > Settings for Drive and Docs > Features and Applications > Drive SDK > Click Allow.
  33. In Jiotty Settings/Preferences, in the "Own Google API Client Secret" section, select the option to use your own client secret, then in the dialog point to the file you've just downloaded.
  34. Click "Logout to apply changes"
  35. In the Jiotty login dialog, on the top it should now say that you're using your own Google API Secret. Login normally, but expect to see the unverified app warning from Google - this is because you've effectively just created your own Google app identity and it's obviously not verified by Google.
  36. On the unverified warning page, click Advanced, then Go to Jiotty (unsafe).
  37. Finish the login sequence and you're done

FAQ

Can I upload photos in "high resolution" instead of "original resolution"?

Not directly. Google Photos API does not support this (true as of May 2021). So all media uploaded will be in original resolution and so will take up space in your Google Account. However, user @grantpinkerton suggested the following workaround. User @martonthenagy warns that this option "will probably be removed or changed by Google on 2021.07.01".

I was uploading a lot of images so for me it was easier to buy 100gb of space for a month, upload everything i needed, compress the images every day and then cancel my 100gb subscription. Hope that helps.

  • Buy enough Google Storage for 1 month to hold all of your library.
  • Upload your library using Jiotty.
  • Go to photos.google.com, and click on the hamburger menu after signing in with the account.
  • Click on Settings, and switch to High Quality. As soon as you do that, you will see a prompt “Recover XYZ.abc GB of storage by also compressing existing items (this can’t be undone).”
  • Check the box and click on the Confirm button. Google Photos will start reducing the size of the photo of the uploaded images to match with High Quality. You should see a message, “Compressing photos & videos to high quality.”. Depending on the size of the images and videos uploaded in Original quality, it may take time. You can close the windows and come back later to check how much storage was recovered. You can note down the amount of storage space left, which is available with the Original radio button option.
  • Cancel the storage subscription.

Note: You can only restore storage once a day.

If a photo has already been uploaded, will duplicate be created?

No.

  1. If a photo or video has been uploaded by Jiotty (with the same Client Secret, if using own Google API secrets), and you selected to resume uploads, Jiotty will not even attempt to upload it again.
  2. If a photo or video has been uploaded by Jiotty (with the same Client Secret, if using own Google API secrets), and you selected not to resume uploads, Jiotty will upload it again, but Google Photos will match it to the previously uploaded photo, and no duplicate will be created.
  3. If a photo or video has been uploaded by yourself before via Google Photos web interface or a smartphone app, or any other 3rd party app, or by Jiotty using a different Google API Client Secret, and you asked Jiotty to upload the same photo or video, Jiotty will upload it again, but Google Photos will match it to the previously uploaded photo, and no duplicate will be created. Then:
    1. If you select the upload method titled "Some of the files I will upload are already uploaded..." in Settings (Preferences in macOS), then Jiotty will add this photo to the album that matches the folder.
    2. If you selected the other option, due to the Google Photos API limitation, Jiotty will not be able to add it to the corresponding album. See more on limitations below.

If an album existed, will a duplicate be created?

No.

  1. If the album was created by Jiotty before (with the same Client Secret, if using own Google API secrets), it will just be reused.
  2. If the album was created by yourself via Google Photos web interface or app, or by Jiotty using a different Google API Client Secret, it will not be reused - see Limitations. The upload of all items located in the corresponding folder will fail. Please rename or delete the existing album and try uploading again.

How do I ignore certain files or folders?

Open Settings (Preferences on macOS) via menu and add file or folder patterns as simple glob patterns or regular expressions. If you do not know what glob patterns or regular expressions are, go google it :-) or simply add file names you want to ignore, one per line, prefixed with glob:**, for example, glob:**/description.txt.

Sometimes the uploader seems to be stuck loading albums or uploading files

This is most likely due to the Google Photos API quota of 10,000 requests per day per application. This quota is, unfortunately, shared by all users of the application. Since version 1.0.3, the uploader shows a flashing warning sign explaining what is happening. I will have to pay Google to increase the quota, but in order to do that I'll have to start charging users for the usage, which is not what I want. Since version 1.8.0, there is a slightly geeky, but plausible solution, which is to switch to using your own Google API Client Secret - see a section about this above.

Limitations

Certain limitations exist because Google Photos API does not allow applications to do certain things that a user can do using Google Photos native apps or web interface.

  1. If an album was created by yourself in Google Photos, or by another 3rd party app, or by Jiotty using a different Google API Client Secret, and this album happens to have the same name as the folder that you asked Jiotty to upload, then Jiotty will not be able to add any items to it. The items will be uploaded, but not added to any album, and you’ll see failures in the app. Please rename or delete the existing album and try uploading again. If using our own Google API Client Secret, try using the same one for the whole upload, and not mix and match shared and personal secrets, or different personal secrets.
  2. If a photo or video has been uploaded by yourself before via Google Photos web interface or a smartphone app, or any other 3rd party app, or by Jiotty using a different Google API Client Secret, and you asked Jiotty to upload the same photo or video, Jiotty will upload it again, but Google Photos will match it to the previously uploaded photo, and no duplicate will be created. If you select the upload method titled "Some of the files I will upload are already uploaded..." in Settings/Preferences, then Jiotty will add this photo to the album that matches the folder, as expected. Otherwise, Jiotty will not be able to add this photo to the album that matches the folder, due to the Google Photos API limitation described here: https://developers.google.com/photos/library/guides/manage-albums#adding-items-to-album.
  3. Google Photos knows a lot of media formats. It is able to extract creation date and time from an image or video file's metadata, such as EXIF or similar, i.e. the date/time written by your camera into the file, and assign this date/time to the item in your library. This works with Jiotty uploads too. However, when you upload an item that does not have creation time in its metadata, Google Photos web interface uses the file's modification time. This is the time you last written to the file, not the time the photo/video was actually taken. This is less reliable than metadata, but in many cases it's better than nothing. Unfortunately, Google Photos API does not allow setting dates and times on uploaded media. Therefore, Jiotty is unable to emulate same behaviour. So if your file does not have creation date/time in its metadata, Google Photos will use the date/time the file was uploaded, not the time it was last modified on your disk. The only workaround you can apply here is use tools like https://exiftool.org or similar and some scripting skills to update metadata in your files to match the file's modification time and then upload this files using Jiotty.
  4. Google Photos API does not support uploading media in "high" resolution (true as of May 2021). So all uploaded media will be in "original" resolution and so will take up space in your Google Account. However, see this workaround.

Problems?

For suggestions and bug reports, feel free to browse for existing issues and create new ones here or post to Google Groups

Support the project

I am developing the application in my free time. If you find it useful, I would appreciate if you supported the project by donating here.

Privacy Policy