0

The Goal: In macOS Photos App, highlight/select a bulk of photos, iterate each one. AppleScript will tell Photos to quickview the photo, ask what 'Album(s)' to add the photo to, then it will ask for a title and caption.

I'm doing this because the 'Info' panel that provides this function doesn't allow for rapid entry, and it's pretty small to work with.

Info Panel for Photos

So I suppose I need a couple things:

  1. Show the picture (tell Photos to quick look it)
  2. Identify the 'My Album' folders (eliminate the smart folders from the mix)
  3. Prompt and Update the Title and the Caption (called name and description in the def)
  4. Add the photo to the selected Albums.

I'm not sure if it's just me, but the AppleScript scripting on Photos is just not something I can wrap my head around very well.

Here's what I have so far, but I was hoping you can help.

tell application "Photos" --Find All Albums set thefullList to the name of every album of every folder -- Need:Figure out how to strip Smart Albums out of this query -- Set comma as the delim to separate the folders/albums set oldDelimiters to AppleScript's text item delimiters set AppleScript's text item delimiters to "," set thefullList to every item of thefullList set AppleScript's text item delimiters to oldDelimiters -- Test the output (fails to delim, and won't display the string) display dialog thefullList -- Clean list of Albums set albumNames to {thefullList} -- Get the selected photos from Photos set theSelection to (get selection) -- Iterate through each photo repeat with i in theSelection -- Tell Photos to 'quick look' -- Need:(no idea how to make that work yet) -- Ask the user to choose the Album(s) this photo should go into set theAlbumChoice to choose from list albumNames with prompt "Where should this photo go?" -- Tell the Album that this photo is now added set theAlbum to theAlbumChoice add i to theAlbum -- Ask for Title and Caption display dialog "What's the Title of this Photo?" set theTitle to text returned of result display dialog "What's the Caption of this Photo?" set theCaption to text returned of result -- Get the Photo ID for adding MetaData set selectionID to id of item i of theSelection -- Set the Title and caption set name of media item id selectionID to theTitle set description of media item id selectionID to theCaption end repeat end tell 
1
  • I do not know how to solve all your problems and I did not look at your code in depth enough to judge it, but a neat way to display almost anything in a dialog with applescript is Pashua by Carsten Blüm. The documentation is a bit rocky at first but you'll get in there pretty fast. An alternative would be quick look, but as it appears, neither I nor you seem to know how to launch it. Commented Oct 15, 2021 at 20:53

1 Answer 1

1
property albumNames : {} property albumIDs : {} tell application "Photos" activate my getAlbumNames(it) -- get all album names and IDs (recursively) repeat with aPhoto in (get selection) -- process each selected photo try -- Get the Photo ID set selectionID to id of aPhoto on error errorMessage set ATID to AppleScript's text item delimiters set AppleScript's text item delimiters to "\"" set selectionID to text item 2 of errorMessage set AppleScript's text item delimiters to ATID end try spotlight media item id selectionID -- Tell Photos to 'quick look' -- Ask the user to choose the Album(s) this photo should go into set theAlbumChoice to choose from list albumNames with prompt "Where should this photo go?" if theAlbumChoice is false then return -- Find destination folder's ID and add photo to it repeat with k from 1 to count albumNames if (item 1 of theAlbumChoice) is (item k of albumNames) then set theAlbumID to item k of albumIDs exit repeat end if end repeat add {media item id selectionID} to album id theAlbumID -- Ask for Title and Caption, and set them display dialog "What's the Title of this Photo?" default answer "" set theTitle to text returned of result display dialog "What's the Caption of this Photo?" default answer "" set theCaption to text returned of result set name of media item id selectionID to theTitle set description of media item id selectionID to theCaption end repeat end tell on getAlbumNames(aFolder) -- recursive handler tell application "Photos" set albumNames to albumNames & name of albums of aFolder set albumIDs to albumIDs & id of albums of aFolder repeat with subFolder in (get folders of aFolder) my getAlbumNames(subFolder) end repeat end tell end getAlbumNames 
Sign up to request clarification or add additional context in comments.

1 Comment

I have no idea how you know this app so well, but THANK You again - I has not ised that spotlight was the trick for viewing, and of course, iterating through the Photo App's method of assigning photos to albums is still quirky to me.. but this did it. Thank you!

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.