Activity › Forums › Adobe After Effects Expressions › Delay / Offset Posterize Time Effect
-
Delay / Offset Posterize Time Effect
Posted by Tom Slinger on December 7, 2020 at 12:57 pmI’m looking to delay / offset the start frame of the Posterize Time effect. (not expression)
5 fps Posterize Time effect. 25 fps comp.
The reason for this is I want the stop motion animation to have more of a flow instead of all layers changing frame on 0,5,10,15,20.25 etc…
It’d be great if:
Layer A changed frame on 0,5,10,15,20,25 etc…
Layer B changed frame on 2,7,12,17,22,27 etc…
Layer B changed frame on 4,9,14,19,24,29 etc…
Any help would be greatly appreciated!
Many thanks,
Tom
Ifeanyi anyi replied 2 months, 2 weeks ago 5 Members · 10 Replies -
10 Replies
-
Trent Armstrong
December 7, 2020 at 2:29 pmWell, I see that you indicate in your post that you’re not looking for an expression, but expressions would really help you here. Put those in and play around with the numbers in the parentheses. Using the posterizeTime() expression keeps you from having to use the Posterize Time effect which can mess with other effects.
Layer A timeremap could be
posterizeTime(6);
value
Layer B timeremap could be
posterizeTime(5);
value
Layer C timeremap could be
posterizeTime(4);
value
-
Tom Slinger
December 8, 2020 at 11:18 amThanks Trent!
Thats really helpful. I’ll use expressions instead, I didn’t know you could add posteriseTime to timeremap.
Ideally I’d want all layers to be 5 fps, is there a way of offsetting each layer by a different value so that the layers will be changing frame on different frames? I appreciate your suggest would do this but I’m wondering if it’s possible to maintain the 5 fps?
-
Trent Armstrong
December 11, 2020 at 1:17 amSo sorry. I haven’t had time to look at this again. I actually think you might need to precomp and offset the layers in time if you want to have the all at 5 fps but offset.
-
Tom Slinger
December 15, 2020 at 12:29 pmNo worries! Thanks for your help.
I’ve taken your advice on using different values and created this which works well:
seedRandom(index,true);
posterizeTime(Math.round(random(4,6)));
value
-
Jakob Werner
December 15, 2020 at 4:21 pmI encountered the same problem and managed to write a custom posterizeTime() expression.<div>
Just use .vaueAtTime(newT); on your desired property.
newFramerate = 5; and frameOffset = 2; will change the values on frame 2, 7, 12, 17, 22, …
I hope that works for you, too!
Jakob
// Custom posterizeTime()
//
// Use .valueAtTime(newT) on your desired property
// and set your new frame Rate and your Offset value
var newFramerate = 5; //set your new Framerate in frames per second here
var frameOffset = 2; //set your offset in frame herevar frameRate = 1/thisComp.frameDuration;
var t = (time*frameRate);
var newT = Math.floor((t-frameOffset)/(frameRate/newFramerate));
newT = newT*(frameRate/newFramerate) + frameOffset;
newT /= frameRate;transform.position.valueAtTime(newT);
</div> -
Tom Slinger
January 13, 2021 at 2:37 pmAh! AMAZING! Thanks Jacob, this is so helpful.
Exactly what I needed. 🙂
-
Chloé Richmond
January 27, 2026 at 9:45 pmI came up with this solution, which I found more useful:
let framerate = 1/thisComp.frameDuration; let targetFrameRate = 12; let frameOffset = 1; // (offset in frames); Math.floor(value*targetFrameRate)/targetFrameRate+frameOffset/framerate
There’s also the solution of precomping it and then adding an adjustment layer with posterize time that you can move around, but I found that a bit too cumbersome for my liking.
-
Ifeanyi anyi
February 15, 2026 at 12:02 amIf you want true 5 fps across all layers but staggered updates, expressions are really the cleanest route.
Use posterizeTime(5) on the property, then offset each layer’s sampling with valueAtTime(time – framesToTime(offset)). That keeps the same cadence but shifts when each layer updates.
Precomping and time shifting also works, but it gets messy fast once you have many layers.
Reply to this Discussion! Login or Sign Up