Tuesday, May 11, 2021

#1 2019-11-01 06:48:05 am

Registered: 2019-10-31
Posts: 1

Applescript for Keynote - move shapes/images/text


Firstly, sorry if this is in the wrong section, I'm not sure I fully understand the distinction between the different types of applescript subforums here smile

I make educational videos on Keynote - often I like to use the 'move' animation to slide something onto the screen (that may be text/a shape/an image). I have to use the 'move' animation, and not 'build in' option to make it look the way I want.

Please could someone advise me on whether the following would be possible to script:
1. Duplicate the slide
2. Place all objects where they ended up, after being moved

This is because I want to start a new slide and see where everything would be after all the movement animations have happened, and I don't think theres a way to do that in Keynote as it currently stands.

What I currently do is duplicate the slide, and C+P the X/Y coordinates of every item's last 'build' position to those items - but manually doing this is a huuuuge pain when you've got a lot going on haha. So really I want to automate that copy and pasting procedure from the last build of every item to the items on a new slide.

If this is possible, is there anyone about who might produce this script for me (paid of course)?

Many thanks,


Last edited by Tomm408 (2019-11-01 06:50:35 am)



#2 2019-11-02 08:28:42 am

Nigel Garvey
From:: Warwickshire, England
Registered: 2002-11-20
Posts: 5381

Re: Applescript for Keynote - move shapes/images/text

Hi Tom. Welcome to MacScripter.

You're in the right section for help with writing your own AppleScripts. MacScripter isn't generally a place to come just to get a script written for you, even if you're willing to pay. But members may possibly choose to write one anyway if they find the topic interesting enough.

I don't use Keynote myself, but looking at it this morning, it seems that duplicating a slide to the same document is easy enough, as is changing the positions of the duplicate's contents. Getting the end-position set in a "Move" animation is slightly more complicated and requires GUI Scripting, which isn't guaranteed to work the same way on everyone's systems or on the same system forever. The following works for me with a test slide I set up in Keynote 9.2 in Mojave. My known assumptions are listed at the top:


(* This script uses GUI Scripting and has been tested with Keynote 9.2 in Mojave.

   The user's language is English.
   The order of iWork items in a duplicated slide is the same as in the original.
   The "Animate" inspector will open on the animation actually set for an animated item when the item's selected.

-- Identify the currently showing slide, count its contents, and duplicate it to the end of the slide list.
tell application "Keynote"
   tell front document
       set currentSlide to current slide
       set iWorkItemCount to (count iWork items of currentSlide)
       duplicate currentSlide to end of slides
   end tell
end tell

-- Show the "Animate" inspector if it's not already showing.
tell application "System Events"
   tell application process "Keynote"
       set frontmost to true
       tell radio button 2 of radio group 1 of toolbar 1 of front window
           if (its value is 0) then click
       end tell
   end tell
end tell

-- Working though the items in the original slide:
repeat with i from 1 to iWorkItemCount
   -- Select each one in turn.
   tell front document of application "Keynote" to set selection to iWork item i of currentSlide
   -- See if the "Move" "Action" appears in the "Animate" inspector. If it does, read off its "Position" values.
   tell application "System Events"
       tell front window of application process "Keynote"
           set hasMoveAction to ((value of radio button 2 of radio group 1 is 1) and (static text "Move" exists))
           if (hasMoveAction) then set {x, y} to {value of text field 3, value of text field 2} of scroll area 1
       end tell
   end tell
   -- If a Move Action is involved, set the position of the corresponding iWork item in the duplicate slide to the numbers from the position strings just obtained.
   if (hasMoveAction) then
       tell application "Keynote"
           set position of iWork item i of last slide of front document to {word 1 of x as number, word 1 of y as number}
       end tell
   end if
end repeat




#3 2021-04-18 11:04:19 am

Registered: 2020-12-29
Posts: 10

Re: Applescript for Keynote - move shapes/images/text

I use this for pasting images of playing cards into a presentation and then using Magic Move to animate them.  For this to work, the images you want to move must have a description, or you must know the Posix path to them.  I paste the images in, so I include a description with each one.  You'll need to change it to suit your needs.


activate application "Keynote"
tell application "Keynote" to tell the front document
   duplicate the last slide
   tell the current slide
       set transition properties to {transition effect:magic move}
-- finding the desired image
   set cards to description of its image
       tell cards
           set cardslength to its length
           -- set target to (the description of the image you want)
           repeat with i from 1 to cardslength
               if item i = target then exit repeat
           end repeat
       end tell
       set card to its image i
--/finding the desired image
       tell card
           -- you have to define X and Y in advance
           set its position to {X, Y}
       end tell
   end tell
end tell

I appropriated the find routine from another site.



Board footer

Powered by FluxBB

RSS (new topics) RSS (active topics)