Thanks so much for your response! I can’t just animate the property and use loopOut() as this is basically a test for a piece I’m doing where I need to be able to control the speed of the movement as the piece runs through and I need to be able to do this in time with some music (hopefully!)
Anyway, back to the expression… I’ve added in ‘velo’ as my expression name now so hopefully that will make things more stable!
I under stand what you mean when you say:
“2) It says at the bottom, because (time – inPoint) keeps growing, so it’s always (y<60) and thus y being set to 900;”
But I don’t know how to solve that. The only scripts I could find for motion seem to use that “y = position[1]+ (time – inPoint) *VARIABLE;” to achieve a constant movement. Can you think of another way to get the clip to keep moving once it has ‘reset’ itself?
My current code is included below:

velo = -300
x = position[0];
y = position[1]+ (time - inPoint) *velo;
reset = 900
if (y<60){
y=reset;
[x,y]
}else{
[x,y]
}