[{"data":1,"prerenderedAt":295},["ShallowReactive",2],{"article-0020_dummy_article":3,"surround-\u002Farticle\u002F0020_dummy_article":286},{"id":4,"title":5,"body":6,"date":264,"description":265,"extension":266,"images":267,"meta":272,"navigation":273,"path":274,"seo":275,"stem":276,"tags":277,"thumbnail":34,"tools":282,"__hash__":285},"articles\u002Farticle\u002F0020_dummy_article.md","After Effects Expressions for Noobs",{"type":7,"value":8,"toc":259},"minimark",[9,13,16,21,28,68,74,119,125,144,150,183,187,190,245,248,252,255],[10,11,12],"p",{},"Alt-click a stopwatch. Type some code. Done — you're writing expressions.",[10,14,15],{},"No setup, no IDE, no terminal. The feedback is instant and visual, which makes this the best possible way to start learning code as an animator.",[17,18,20],"h2",{"id":19},"the-four-youll-use-everywhere","The four you'll use everywhere",[10,22,23,27],{},[24,25,26],"strong",{},"wiggle"," — shake a layer organically",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","wiggle(3, 20) \u002F\u002F 3x per second, 20px max offset\n","js","",[36,37,38],"code",{"__ignoreMap":34},[39,40,43,46,50,54,58,61,64],"span",{"class":41,"line":42},"line",1,[39,44,26],{"class":45},"s2Zo4",[39,47,49],{"class":48},"sTEyZ","(",[39,51,53],{"class":52},"sbssI","3",[39,55,57],{"class":56},"sMK4o",",",[39,59,60],{"class":52}," 20",[39,62,63],{"class":48},") ",[39,65,67],{"class":66},"sHwdD","\u002F\u002F 3x per second, 20px max offset\n",[10,69,70,73],{},[24,71,72],{},"loopOut"," — loop your keyframes forever",[29,75,77],{"className":31,"code":76,"language":33,"meta":34,"style":34},"loopOut(\"cycle\")    \u002F\u002F repeats forward\nloopOut(\"pingpong\") \u002F\u002F reverses each loop\n",[36,78,79,100],{"__ignoreMap":34},[39,80,81,83,85,88,92,94,97],{"class":41,"line":42},[39,82,72],{"class":45},[39,84,49],{"class":48},[39,86,87],{"class":56},"\"",[39,89,91],{"class":90},"sfazB","cycle",[39,93,87],{"class":56},[39,95,96],{"class":48},")    ",[39,98,99],{"class":66},"\u002F\u002F repeats forward\n",[39,101,103,105,107,109,112,114,116],{"class":41,"line":102},2,[39,104,72],{"class":45},[39,106,49],{"class":48},[39,108,87],{"class":56},[39,110,111],{"class":90},"pingpong",[39,113,87],{"class":56},[39,115,63],{"class":48},[39,117,118],{"class":66},"\u002F\u002F reverses each loop\n",[10,120,121,124],{},[24,122,123],{},"time"," — drive anything with the clock",[29,126,128],{"className":31,"code":127,"language":33,"meta":34,"style":34},"time * 90 \u002F\u002F slow spin. crank it up for faster\n",[36,129,130],{"__ignoreMap":34},[39,131,132,135,138,141],{"class":41,"line":42},[39,133,134],{"class":48},"time ",[39,136,137],{"class":56},"*",[39,139,140],{"class":52}," 90",[39,142,143],{"class":66}," \u002F\u002F slow spin. crank it up for faster\n",[10,145,146,149],{},[24,147,148],{},"value"," — offset whatever's already keyframed",[29,151,153],{"className":31,"code":152,"language":33,"meta":34,"style":34},"value + [0, -50] \u002F\u002F push the existing position up by 50px\n",[36,154,155],{"__ignoreMap":34},[39,156,157,160,163,166,169,171,174,177,180],{"class":41,"line":42},[39,158,159],{"class":48},"value ",[39,161,162],{"class":56},"+",[39,164,165],{"class":48}," [",[39,167,168],{"class":52},"0",[39,170,57],{"class":56},[39,172,173],{"class":56}," -",[39,175,176],{"class":52},"50",[39,178,179],{"class":48},"] ",[39,181,182],{"class":66},"\u002F\u002F push the existing position up by 50px\n",[17,184,186],{"id":185},"linking-properties","Linking properties",[10,188,189],{},"Drag the pickWhip from one property to another and AE writes the expression for you. Useful for tying a layer's opacity to a slider, or locking scale to a null.",[29,191,193],{"className":31,"code":192,"language":33,"meta":34,"style":34},"thisComp.layer(\"Control\").effect(\"Opacity\")(\"Slider\")\n",[36,194,195],{"__ignoreMap":34},[39,196,197,200,203,206,208,210,213,215,218,220,223,225,227,230,232,235,237,240,242],{"class":41,"line":42},[39,198,199],{"class":48},"thisComp",[39,201,202],{"class":56},".",[39,204,205],{"class":45},"layer",[39,207,49],{"class":48},[39,209,87],{"class":56},[39,211,212],{"class":90},"Control",[39,214,87],{"class":56},[39,216,217],{"class":48},")",[39,219,202],{"class":56},[39,221,222],{"class":45},"effect",[39,224,49],{"class":48},[39,226,87],{"class":56},[39,228,229],{"class":90},"Opacity",[39,231,87],{"class":56},[39,233,234],{"class":48},")(",[39,236,87],{"class":56},[39,238,239],{"class":90},"Slider",[39,241,87],{"class":56},[39,243,244],{"class":48},")\n",[10,246,247],{},"You don't need to write that by hand — just read it after the pickWhip generates it, and it'll start making sense.",[17,249,251],{"id":250},"just-start","Just start",[10,253,254],{},"Take any animation you've already built. Add one expression. Break it. Fix it. That's the whole method.",[256,257,258],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":34,"searchDepth":102,"depth":102,"links":260},[261,262,263],{"id":19,"depth":102,"text":20},{"id":185,"depth":102,"text":186},{"id":250,"depth":102,"text":251},"28 October, 2025","Expressions are the gateway drug for animators learning to code. Here's how to approach them without feeling lost, and the handful you'll use constantly.","md",[268,270],{"src":34,"alt":269},"After Effects timeline with an expression applied to a position property",{"src":34,"alt":271},"The expression editor open in After Effects showing a wiggle expression",{},true,"\u002Farticle\u002F0020_dummy_article",{"title":5,"description":265},"article\u002F0020_dummy_article",[278,279,280,281],"after effects","expressions","coding","tutorial",[283,284],"After Effects","JavaScript","3WTWxPPjS7H1RFxkS9C9hCmREQvN5Q8nw184RUZnjnw",[287,291],{"title":288,"path":289,"stem":290,"children":-1},"Why Every Animator Should Learn to Code","\u002Farticle\u002F0010_dummy_article","article\u002F0010_dummy_article",{"title":292,"path":293,"stem":294,"children":-1},"Automating Your Pipeline with Python","\u002Farticle\u002F0030_dummy_article","article\u002F0030_dummy_article",1776374632749]