You can make a difference in the Apple Support Community!

When you sign up with your Apple Account, you can provide valuable feedback to other community members by upvoting helpful replies and User Tips.

Looks like no one’s replied in a while. To start the conversation again, simply ask a new question.

Where are photo file names?

I've "titled" many, many photos in iPhoto by changing the filename (e.g. "DSC_2254" --> "On vacation in Hawaii"), but there appears to be no option in Photos to show the filename. So none of my "titles" appear. Am I missing something?

iMac (Retina 5K, 27-inch, Late 2014), OS X Yosemite (10.10.3)

Posted on Apr 9, 2015 7:56 AM

Reply
Question marked as Top-ranking reply

Posted on Apr 11, 2015 5:41 PM

That is an idea.


I experimented a bit, and with Apple Script we could make it a bit simpler, directly in Photos: This will save the installation of exiftool and the necessity to export the files. This way the lossless workflow will be preserved.


Create an Automator action, that executes an Apple Script to change the titles to the filename, if the title is empty:


The Apple Script:


on run {input, parameters}

tell application "Photos"

activate

set imageSel to (get selection)

if imageSel is {} then

error "Please select an image."

else

repeat with im in imageSel

set title to the name of im

if not (exists (title)) then

set the name of im to the filename of im

end if

end repeat

end if

end tell

return input

end run

Launch Automator, create a new service, and drag a "Run Apple Script" action into the workflow.

Copy and paste the text above into the "Run Apple Script" action to replace the default text in the action.

User uploaded file

Save this workflow with a suitable name. It will be installed in the services.


  • Now launch Photos and select a few test images.
  • Open the "Photos Menu > Services".
  • The service should be shown in the menu - I saved my version as "filename2title".
  • Select the service to let it run. When you click the selected photos again, the titles should change.


User uploaded file

After the Automator action completed:

User uploaded file



282 replies

May 3, 2015 7:51 AM in response to turingtest2

turingtest2 wrote:

I haven't caught up with all of the discussions but it seems that Photos can sometimes bomb out when running the script on large numbers of items, and it may be more reliable when running the script with the contents of an Album rather than the global photos collection.

That looks like a very useful, well thought out script!


I haven't tried it yet but as I noted somewhere in one of these discussions (& of course can't find now because the ASC search engine seems to be close to useless) it seems like sometimes Photos can't make changes in response to Apple Events very quickly & this causes random errors in Applescripts with repeat loops. A workaround for this that sometimes (but not always) works is to insert a brief delay in the repeat loop, like "delay 0.1" for a tenth of a second pause before beginning the next loop.


The downside is obvious: applying this to a large number of items can greatly extend the execution time but it still beats having to do everything manually or in small batches ... when it works.

May 3, 2015 8:01 AM in response to turingtest2

I'd started with a script that included the extensions but then realised that I'd rather remove them. Possibly a little late in the day for you but this is my variation on the theme:

How about including a parameter? Sometimes the filename extensions are useful, so we can see at a glance if we are about to trash the high resolution raw or a jpeg thumbnail.

May 3, 2015 1:26 PM in response to léonie

Is there a definitive list of the file types/extensions that Photos imports? As written the script will only remove the extensions .jpg, .mov, and .png from a title that has already been set, and it won't add any extensions to new titles it creates. It ought to be fairly easy to tweak things so that certain extensions are always added and others always removed, whether a title has already been set, or is being set for the first time from the filename, but I might as well make sure I know all of the correct extensions before I start. The user could edit the two parameters for included and excluded extensions.


tt2

May 3, 2015 4:24 PM in response to Old Toad

It would be easy enough to snip off the last four characters, but I want to make sure they are only removed if they match a known extension, so running the script repeatedly on the same selection won't have adverse effects.


The script I've posted will strip off .jpg, .mov, or .png already. For anything else expand the string of known file extensions as required, e.g. "jpg|mov|png" could become "jpeg|jpg|mov|png|tif|tiff" and any other extensions that you might want to remove. What extensions exist in your Photos library?


tt2

May 3, 2015 7:15 PM in response to léonie

Here is an improved version that allows specific extensions to be excluded or included in the titles.



-- Photos | Filename to Title | V1.2


-- Images with no title will have the filename used as the title

-- Use values below to exclide or include specfic file extensions from the generated title

-- Existing titles will be modified to add or remove any extension from the title as required


set exclude to ".jpeg.jpg.mov.png.tif.tiff" -- Extensions to exclude from the image titles

set include to ".cr2" -- Extensions to include in the image titles


tell application "Photos"

activate

set updated to 0

set info to "Photos | Filename to Title"

set images to (get selection)

if images is {} then

display dialog "Please select items in Photos before calling this script." with title info buttons {"OK"} giving up after 5

else

repeat with image in images

set fullName to filename of image

set title to the name of image

if not (exists (title)) or title = "" then

set title to fullName

set current to ""

else

set current to title

end if

set pos to offset of "." in ((reverse of characters of title) as string)

set prefix to characters 1 thru (-1 - pos) of title as string

if pos > 0 then

set postfix to characters -pos thru -1 of title as string

else

set postfix to ""

end if

set pos to offset of "." in ((reverse of characters of fullName) as string)

set ext to characters -pos thru -1 of fullName as string

if (offset of postfix in exclude) > 0 then

set newTitle to prefix

else

set newTitle to prefix & postfix

end if

if (offset of ext in include) > 0 and not ext = postfix then

set newTitle to newTitle & ext-- Or could test here and add something like " | RAW" for raw formats

end if

if not current = newTitle then

set the name of image to newTitle

set updated to updated + 1

end if

end repeat

if updated = 1 then

set message to " item was updated."

else

set message to " items were updated."

end if

if updated = 0 then

set message to "No" & message

else

set message to (updated as string) & message

end if

display dialogmessagewith titleinfobuttons {"OK"}

end if

end tell


It could be further enhanced by adding specific text to the title instead of the extension, e,g, add say " | RAW" instead of ".cr2", or various other automatic substitutions could be made.


tt2

May 3, 2015 9:05 PM in response to turingtest2

I noticed something I don't understand occurring in both the original & improved version of your script:


When I run it in Script Editor with the log window set to show replies, every time the script calls 'offsetof' inside the tell application "Photos" block, the log shows that statement returns error number -10004. That is immediately followed by an end tell, a tell current application block with a duplicate of the 'offsetof' statement that returns the correct offset value, & then another tell application "Photos" statement to resume the tell Photos block. For example:


tell application "Photos"


offset of ".jpg" in ".cr2"


--> error number -10004

end tell

tell current application


offset of ".JPG" in ".cr2"


--> 0

end tell

tell application "Photos"


This doesn't prevent the script from running -- it is like Photos can't hand off the offset string command to StandardAdditions but Script Editor (or something) is smart enough to handle the error & do that internally. FWIW, the error is eliminated by enclosing each of the 'offsetof' commands inside the tell application "Photos" block in a tell me to statement to make that explicit.


Anybody else seeing this?

May 4, 2015 2:53 AM in response to R C-R

OK. That is somewhat unintuitive. The offset clauses are all grouped together in an area which doesn't need to communicate with Photos so a single tell me ... end tell construct is enough to avoid all of those errors. Better yet a use scripting additions inserted near the top of the script does the same thing, so now we have:




-- Photos | Filename to Title | V1.3


-- Images with no title will have the filename used as the title

-- Use values below to exclude or include specfic file extensions from the generated title

-- Existing titles will be modified to add or remove any extension from the title as required


set exclude to ".jpeg.jpg.mov.png.tif.tiff" -- Extensions to exclude from the image titles

set include to ".cr2" -- Extensions to include in the image titles

use scripting additions-- Prevents errors triggered by offset clause

tell application "Photos"

activate

set updated to 0

set info to "Photos | Filename to Title"

set images to (get selection)

if images is {} then

display dialog "Please select items in Photos before calling this script." with title info buttons {"OK"} giving up after 5

else

repeat with image in images

set fullName to filename of image

set title to the name of image

if not (exists (title)) or title = "" then

set title to fullName

set current to ""

else

set current to title

end if

set pos to offset of "." in ((reverse of characters of title) as string)

set prefix to characters 1 thru (-1 - pos) of title as string

if pos > 0 then

set postfix to characters -pos thru -1 of title as string

else

set postfix to ""

end if

set pos to offset of "." in ((reverse of characters of fullName) as string)

set ext to characters -pos thru -1 of fullName as string

if (offset of postfix in exclude) > 0 then

set newTitle to prefix

else

set newTitle to prefix & postfix

end if

if (offset of ext in include) > 0 and not ext = postfix then

set newTitle to newTitle & ext-- Or could test here and add something like " | RAW" for raw formats

end if

if not current = newTitle then

set the name of image to newTitle

set updated to updated + 1

end if

end repeat

if updated = 1 then

set message to " item was updated."

else

set message to " items were updated."

end if

if updated = 0 then

set message to "No" & message

else

set message to (updated as string) & message

end if

display dialogmessagewith titleinfobuttons {"OK"}

end if

end tell




And what is interesting is that the log looks the same whichever way you do it.




tell application "Photos"

activate

get selection

--> {media item id "aXv5SiYeRyyCI%azWIuDnA"}

get filename of media item id "aXv5SiYeRyyCI%azWIuDnA"

--> "IMG_0735.png"

get name of media item id "aXv5SiYeRyyCI%azWIuDnA"

--> "IMG_0735.cr2"

exists "IMG_0735.cr2"

--> true

end tell

tell current application

offset of "." in "2rc.5370_GMI"

--> 4

offset of "." in "gnp.5370_GMI"

--> 4

offset of ".cr2" in ".jpeg.jpg.mov.png.tif.tiff"

--> 0

offset of ".png" in ".cr2"

--> 0

end tell

tell application "Photos"

display dialog "No items were updated." with title "Photos | Filename to Title" buttons {"OK"}

--> {button returned:"OK"}

end tell

Result:

{button returned:"OK"}



I can see use scripting additions becoming a standard declaration in my future scripts. 😉


Thanks for introducing me to the delights of the replies log.


tt2

May 4, 2015 5:22 AM in response to léonie

léonie wrote:

Do you have custom scripting additions installed?

I havenever tried to use them in an Automator workflow, only in standalone scripts.

Quite possibly, I'm completely wrong about this, but it seems like the weird "silent" tell current application block insertions shown in the Replies log are relying on the StandardAdditions.osax scripting addition to evaluate the offset command, which (I assume) is still part of everyone's OS X installation (in /System/Library/ScriptingAdditions), like it is in mine.


However, I just noticed that even Finder generates the same errors & current application behavior, so this isn't just something related to Photos. For example, this script:

tell application "Finder"

offset of "this text" in "some string of text including this text."

endtell

generates this in the Replies log:

tell application "Finder"

offset of "this text" in "some string of text including this text."

--> error number -10004

end tell

tell current application

offset of "this text" in "some string of text including this text."

--> 31

end tell

Result:

31

May 4, 2015 6:15 AM in response to R C-R

A little experimentation shows that the use scripting additions clause causes a problem if it is inside the on run {input, parameters} ... end run construct that was in léonie's automator example. If I put it outside, or simply dispense with that block altogether, then it seems to be OK. So what do I lose by leaving that out, or perhaps a better question is in what circumstances would it be useful?


tt2

May 4, 2015 6:33 AM in response to turingtest2

turingtest2 wrote:

So what do I lose by leaving that out, or perhaps a better question is in what circumstances would it be useful?

Good questions that I have no answers for, other than that possibly the "AppleScript must use a less efficient dispatching scheme, so explicitly declaring them is recommended" verbiage in Apple's reference might mean scripts that include use statements run faster or use less resources or something.

May 4, 2015 6:46 AM in response to turingtest2

The "use scripting additions" clause is only necessary, if you are using more than one "Use" clause for scripting additions.

But since you are only using the "StandardAdditions.sdef" for the dialogs, it should not be necessary.


See these Help pages:

http://macosxautomation.com/mavericks/usestatement/01.html

http://www.mactech.com/articles/mactech/Vol.10/10.01/ExtendApplescript/index.htm l

May 4, 2015 9:23 AM in response to turingtest2

turingtest2:


I modified the script from your last post (which doesn't show up for me here - was it pulled for some reason?) to add several other extensions:

set

set exclude to ".jpeg.jpg.mov.png.tif.tiff.psd.nef.dng.cr2" -- Extensions to exclude from the image titles

set include to ".cr2" -- Extensions to include in the image titles

I've tested it with psd, nef, dng and cr2 files successfully. It didn't work with the .cr2 files unless I added it to the first line.

May 4, 2015 11:13 AM in response to turingtest2

Do you mean you needed to add .cr2 into the exclusion list before it would be force added by the inclusion list? That shouldn't be necessary

I closed Photos, edited the script to remove .cr2 from the full list, opened Photos and tried again. All files were renamed except the .cr2 file. I checked the original file and it's extension was .CR2, in caps. That must be why.


Added another line to the script

set include to ".CR2" -- Extensions to include in the image titles

and that didn't work.


So I changed the two lines to:

set exclude to ".jpeg.jpg.mov.png.tif.tiff.psd.nef.dng.CR2" -- Extensions to exclude from the image titles

set include to ".cr2" -- Extensions to include in the image titles

I had added a lower case .cr2 file to the batch and all were correctly renamed with the script change above.


I'm not a scriptor so this was just by trial and error.


By the way I still can't see the post with V1.3. For some reason it remains invisible to me.


NOTE: you should add your script to the others in the Photos User Tips section.

Where are photo file names?

Welcome to Apple Support Community
A forum where Apple customers help each other with their products. Get started with your Apple Account.