here’s the final demo for anyone thats intersted,
it creates a spline from some x,y points and moves
the image along that path behind the mask
stimuli (bottle.png)

code.
from psychopy import core, visual, event
from psychopy.tools.arraytools import createXYs
import numpy as np
import scipy as sp
from scipy.interpolate import interp1d
win_width = 1050
win_height = 1000
path_length = win_width
myWin = visual.Window((win_width,win_height), color='white', monitor='testMonitor', units='pix')
# An image using ImageStim. and a mask
image = visual.ImageStim(myWin, mask=None,image='bottle.png')
myMask = np.array([[-1,1,-1,1,-1,1,-1],])
myStim = visual.GratingStim(myWin, tex=None, mask=myMask, color='black', size=win_width)
left_edge = (myWin.size[0] - image.size[0] ) / 2
# 0,0 is middle of left margin 1024,0 is middle right
x0 = [-50, 75, 225, 460, 470, 480, 490, 550, 650, 750, 850, 950, 1040]
y1 = [0, -10, 350, -100, -150, -190, -210, -200, -100, 0, 100, 150, 50]
x1 = [x-left_edge for x in x0]
new_x = np.linspace(min(x1), max(x1), path_length)
new_y = sp.interpolate.interp1d(x1, y1, kind='cubic')(new_x)
path_points = zip(new_x, new_y)
i=0
while True:
image.pos = path_points[i]
image.draw()
myStim.draw()
myWin.flip()
i = (i + 1) % path_length #; print i, path_points[i]
if event.getKeys(keyList=['escape','q']):
print 'fps:', myWin.fps()
myWin.close()
core.quit()
event.clearEvents('mouse')