[{"data":1,"prerenderedAt":2910},["ShallowReactive",2],{"animation":3,"article":1034,"software":2880},[4,78,117,163,205,228,251,302,345,369,390,416,437,485,517,563,604,621,678,718,742,770,787,811,843,864,888,909,950,977,999],{"id":5,"title":6,"body":7,"client":52,"date":53,"description":54,"extension":55,"externalLinks":53,"images":56,"meta":64,"navigation":65,"path":66,"seo":67,"stem":68,"subtitle":69,"tags":70,"thumbnail":36,"tools":73,"__hash__":77},"animation\u002Fanimation\u002F1010.logitech-zone-learn.md","Logitech Zone Learn",{"type":8,"value":9,"toc":47},"minimark",[10,17,22,26,30,38,41],[11,12],"image1up",{"src":13,":height":14,":width":15,"alt":16},"\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002F01.png","1","2","Logitech Zone Learn Styleframe",[18,19,21],"h2",{"id":20},"one-lovely-summer-day-the-fine-folks-at-logitech-reached-out-to-us-with-an-idea-for-a-video-they-wanted-to-make-about-headsets-made-specially-for-kids-in-schools","One lovely Summer day, the fine folks at Logitech reached out to us with an idea for a video they wanted to make about headsets made specially for kids in schools.",[23,24,25],"p",{},"Of course we jumped at the opportunity. I took the helm as the WTBR Creative Director and guided this ship to harbor. I took on all sorts of production roles as well, including doing lots of lighting, rendering, and compositing. This was a fun one, and we were pretty happy with the results!",[27,28],"vimeo",{"id":29},"1169807854",[31,32],"image3up",{":height":33,":width":34,"image-source1":13,"image-source2":13,"imageSource1":35,"imageSource2":36,"imageSource3":37},"9","16","\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002F05.png","\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002Fthumb.png","\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002F06.png",[11,39],{"src":40},"\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002F04.png",[42,43],"image2up",{":height":14,":width":44,"imageSource1":45,"imageSource2":46},"2.5","\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002F03.png","\u002Fimages\u002Fanimation\u002Flogitech-zone-learn\u002F02.png",{"title":48,"searchDepth":49,"depth":49,"links":50},"",2,[51],{"id":20,"depth":49,"text":21},"Logitech",null,"Learning in the zone.","md",[57,59,60,61,62,63],{"src":13,"alt":58},"Logitech Zone Learn animation frame",{"src":46,"alt":58},{"src":45,"alt":58},{"src":40,"alt":58},{"src":35,"alt":58},{"src":37,"alt":58},{},true,"\u002Fanimation\u002Flogitech-zone-learn",{"title":6,"description":54},"animation\u002F1010.logitech-zone-learn","Our contribution for Zone Learn: Affordable, durable, and adjustable headsets for growing minds and bodies.",[71,72],"Graphic Design","Animation",[74,75,76],"Houdini","Cinema 4D","Redshift","r99JpMcG5o6N68slPJnDUXgUergH8OQzWCbv23yeqZ8",{"id":79,"title":80,"body":81,"client":99,"date":53,"description":100,"extension":55,"externalLinks":53,"images":53,"meta":101,"navigation":102,"path":104,"seo":105,"stem":107,"subtitle":108,"tags":109,"thumbnail":112,"tools":113,"__hash__":116},"animation\u002Fanimation\u002F1015.downtime-explorations.md","Downtime Explorations",{"type":8,"value":82,"toc":97},[83,87,92],[84,85],"local-video",{"src":86},"\u002Fvideos\u002Fdowntime-explorations-1.mp4",[88,89],"local-video2up",{"src1":90,"src2":91},"\u002Fvideos\u002Fdowntime-explorations-8.mp4","\u002Fvideos\u002Fdowntime-explorations-7.mp4",[88,93],{"src1":94,"src2":95,":margin-bottom":96},"\u002Fvideos\u002Fdowntime-explorations-3.mp4","\u002Fvideos\u002Fdowntime-explorations-4.mp4","15",{"title":48,"searchDepth":49,"depth":49,"links":98},[],"Self Directed","A fresh take on Lemons",{},{"title":80,"icon":103},"i-ph-orange","\u002Fanimation\u002Fdowntime-explorations",{"title":80,"description":106},"A fresh take on Oranges","animation\u002F1015.downtime-explorations","One lovely winter, I decided to spend every moment of my working down time building out fun little dynamic animations in Houdini -- all with a nice print design aesthetic to them.",[110,72,111],"Design","Creative Dev","\u002Fimages\u002Fanimation\u002Fdowntime-explorations\u002Fthumb.png",[74,76,114,115],"Dynamics","Pyro","x6bWT_SI5d1cwXInM13veDXyemHaNQIvMnHzvJy_Rls",{"id":118,"title":119,"body":120,"client":142,"date":53,"description":143,"extension":55,"externalLinks":53,"images":144,"meta":148,"navigation":149,"path":151,"seo":152,"stem":155,"subtitle":156,"tags":157,"thumbnail":125,"tools":159,"__hash__":162},"animation\u002Fanimation\u002F1030.bowling.md","Bowling a Spare & Strike!",{"type":8,"value":121,"toc":140},[122,127,130,137],[11,123],{"height":124,"src":125,"width":126},1,"\u002Fimages\u002Fanimation\u002Fbowling\u002Fthumb.webp",2.2,[23,128,129],{},"One of my favorite sandboxes to play in are little handmade words. Something about the aesthetic of cloth and stitching, almost like a set I could build myself on my desk, i find those things very fun and enjoyable to work on. ",[23,131,132,133],{},"So one world is underwater, and the other is in a zombie apocalpyse. ",[134,135,136],"em",{},"Fun!",[84,138],{"src":139},"\u002Fvideos\u002Fbowling.mp4",{"title":48,"searchDepth":49,"depth":49,"links":141},[],"Where the Buffalo Roam","Two lovely worlds made of cloth",[145],{"src":146,"alt":147},"\u002Fimages\u002Fanimation\u002Fbowling\u002F01.png","Bowling animation still",{},{"title":150},"Bowling Animations","\u002Fanimation\u002Fbowling",{"title":153,"description":154},"Bowling","A fun zombie animation made solo over 2 weeks","animation\u002F1030.bowling","One fine summer, as a studio at WTBR, we decided to do some fun explorations on what sort of animations we would make if we owned a bowling alley. Here are my 2 contributions.",[72,158],"Character Animation",[74,160,161],"Octane","Substance Painter","y9P0YPMu-n-E7NKnTEqiy_vT7EixRpEG75eaFTQAKXQ",{"id":164,"title":165,"body":166,"client":142,"date":53,"description":191,"extension":55,"externalLinks":53,"images":53,"meta":192,"navigation":193,"path":195,"seo":196,"stem":197,"subtitle":198,"tags":199,"thumbnail":186,"tools":202,"__hash__":204},"animation\u002Fanimation\u002F1035.spooky-season.md","Spooky Season",{"type":8,"value":167,"toc":187},[168,171,176,179,182],[84,169],{"src":170},"\u002Fimages\u002Fanimation\u002Fspooky-season\u002Fvideo.mp4",[172,173,175],"h3",{"id":174},"as-i-scribbled-down-my-ideas-for-a-fun-halloween-animation-what-stuck-to-me-was-the-idea-of-a-witch-going-to-battle-against-evil-spirits","As I scribbled down my ideas for a fun halloween animation, what stuck to me was the idea of a witch going to battle against evil spirits. ",[23,177,178],{},"So I put on my trucker cap, and got to work building this sucker from scratch. I made the character in Character Creator, brought that over to Maya where I animated it, then did all the rest of the environment, FX, lighting and rendering in Houdini's Solaris environment.",[23,180,181],{},"This was an awesome and fun challenge. I'm looking forward to next year!",[183,184],"image-3up",{":height":33,":splitRight":185,":width":34,"imageSource1":186,"imageSource2":186,"imageSource3":186},"true","\u002Fimages\u002Fanimation\u002Fspooky-season\u002Fthumb.png",{"title":48,"searchDepth":49,"depth":49,"links":188},[189],{"id":174,"depth":190,"text":175},3,"Spooky season arrives at last.",{},{"title":194},"Spooky Season Arrives","\u002Fanimation\u002Fspooky-season",{"title":165,"description":191},"animation\u002F1035.spooky-season","Making a short, fun, animated video for Halloween has become a beloved yearly studio tradition that I look forward to every year. Now I can't wait for NEXT halloween!",[200,201,114],"Character","Rigging",[203,74,76],"Maya","xV_vqMxeja0Lis8n4quf1Kl1awEvS2yS6zxKTo1iCJI",{"id":206,"title":207,"body":208,"client":215,"date":53,"description":216,"extension":55,"externalLinks":53,"images":53,"meta":217,"navigation":65,"path":218,"seo":219,"stem":222,"subtitle":223,"tags":224,"thumbnail":225,"tools":226,"__hash__":227},"animation\u002Fanimation\u002F1037.time.md","It's About Time",{"type":8,"value":209,"toc":213},[210],[84,211],{"src":212},"\u002Fvideos\u002Fspec.mp4",{"title":48,"searchDepth":49,"depth":49,"links":214},[],"Where the buffalo roam","A reflection on time",{},"\u002Fanimation\u002Ftime",{"title":220,"description":221},"Time","A vellum grain test created between employment positions","animation\u002F1037.time","Made from styleframes from a pitch we unfortunately lost, I resurrected that beast, and turned into into a fun dynamic animation that went into the WTBR showreel. Houdini, grains, dynamics, oh my!",[110,72],"\u002Fimages\u002Fanimation\u002Fspec\u002Fthumb.png",[74,160],"ht8fYVmmbN7oqo_QoW4diATzwVgwMou4fHFCr6dDD-Y",{"id":229,"title":230,"body":231,"client":238,"date":53,"description":239,"extension":55,"externalLinks":53,"images":53,"meta":240,"navigation":65,"path":241,"seo":242,"stem":245,"subtitle":246,"tags":247,"thumbnail":248,"tools":249,"__hash__":250},"animation\u002Fanimation\u002F1040.vespa-2-wheeled-fashion.md","Two Wheel Fashion",{"type":8,"value":232,"toc":236},[233],[84,234],{"src":235},"\u002Fvideos\u002Fvespa-2-wheeled-fashion.mp4",{"title":48,"searchDepth":49,"depth":49,"links":237},[],"Vespa","A celebration of the classic Vespa form",{},"\u002Fanimation\u002Fvespa-2-wheeled-fashion",{"title":243,"description":244},"2 Wheeled Fashion","Graphic explorations of Vespa","animation\u002F1040.vespa-2-wheeled-fashion","A classic Italian brand, with a wide open pitch? Hell yes. Let's go!",[110,72],"\u002Fimages\u002Fanimation\u002Fvespa-2-wheeled-fashion\u002Fthumb.jpeg",[160,74,75],"iDSqo-G1SOZCkTpEi2Jdg9EU24LrJ_KZQKEjFxDOmqw",{"id":252,"title":253,"body":254,"client":281,"date":282,"description":283,"extension":55,"externalLinks":53,"images":284,"meta":291,"navigation":65,"path":292,"seo":293,"stem":296,"subtitle":297,"tags":298,"thumbnail":300,"tools":53,"__hash__":301},"animation\u002Fanimation\u002F1065.paystubs.md","Gettin' Paid!",{"type":8,"value":255,"toc":278},[256,259,263,266,269,272,275],[27,257],{"id":258},"516441582",[172,260,262],{"id":261},"creative-development-concept-art-animation-and-execution-of-animated-gifs-for-digital-paystubs-all-done-in-house-at-giant-void-the-company-i-used-to-run","Creative development, concept art, animation and execution of animated GIFs for digital paystubs all done in-house at Giant Void - the company I used to run.",[23,264,265],{},"Featured series include Zoom Party Edition, Holiday Season (Bill Watterson-inspired), May Birthdays, and Ella Fitzgerald's Birthday tribute.",[84,267],{"src":268},"\u002Fvideos\u002Fpaystubs-1.mp4",[84,270],{"src":271},"\u002Fvideos\u002Fpaystubs-2.mp4",[84,273],{"src":274},"\u002Fvideos\u002Fpaystubs-3.mp4",[84,276],{"src":277},"\u002Fvideos\u002Fpaystubs-4.mp4",{"title":48,"searchDepth":49,"depth":49,"links":279},[280],{"id":261,"depth":190,"text":262},"Rippling","2021-01-01","Something lovely for your inbox – Money!",[285,288],{"src":286,"alt":287},"\u002Fimages\u002Fanimation\u002Fpaystubs\u002Fufo.png","Paystub character illustration",{"src":289,"alt":290},"\u002Fimages\u002Fanimation\u002Fpaystubs\u002FRippling_Paystubs_Instagram_Post_1 (00049).png","Rippling paystub animation frame",{},"\u002Fanimation\u002Fpaystubs",{"title":294,"description":295},"Rippling Paystub Animations","Animated GIFs for digital paystubs","animation\u002F1065.paystubs","This was a fantastic long-term project. Working hand-in-hand with Ripping and their design team, we got to collaborate and pitch all sorts of fun ideas for how to surprise and delight their customers.",[72,299],"Motion Graphics","\u002Fimages\u002Fanimation\u002Fpaystubs\u002Fthumb.png","eT1tFEa0o-iwf0p3cZPqqRFxj38oMLGvMNKSDRp7g9A",{"id":303,"title":304,"body":305,"client":323,"date":53,"description":324,"extension":55,"externalLinks":53,"images":325,"meta":332,"navigation":65,"path":333,"seo":334,"stem":336,"subtitle":337,"tags":338,"thumbnail":341,"tools":342,"__hash__":344},"animation\u002Fanimation\u002F1100.be-good.md","Be Good",{"type":8,"value":306,"toc":320},[307,310,314,317],[11,308],{"src":309},"\u002Fimages\u002Fanimation\u002Fbe-good\u002F01.png",[172,311,313],{"id":312},"collaborative-project-featuring-illustrated-characters-created-in-houdini-with-solaris-usd-technology","Collaborative project featuring illustrated characters created in Houdini with Solaris USD technology.",[23,315,316],{},"Jacob Pryor is the genius behind this concept, as well as the illustrator of these lovely characters.",[11,318],{"src":319},"\u002Fimages\u002Fanimation\u002Fbe-good\u002F03.jpeg",{"title":48,"searchDepth":49,"depth":49,"links":321},[322],{"id":312,"depth":190,"text":313},"Self-directed","Three Little Piggies made in 3D",[326,328,331],{"src":309,"alt":327},"Be Good CG set design",{"src":329,"alt":330},"\u002Fimages\u002Fanimation\u002Fbe-good\u002F02.jpeg","Be Good before\u002Fafter comparison",{"src":319,"alt":330},{},"\u002Fanimation\u002Fbe-good",{"title":304,"description":335},"CG Set Design","animation\u002F1100.be-good","This was such a lovely project to collaborate on. Jake Pryor wrote such a sweet script for a short story, re-imagining the three little pigs in a new fresh way. 2D Characters with 3d sets is what we built here!",[72,339,340],"Lighting","3D Modeling","\u002Fimages\u002Fanimation\u002Fbe-good\u002Fthumb.webp",[74,343],"Solaris USD","7rBEYODoNdHit1LBfQWMU3rAa29bJ7PvvfdJfrnO1bc",{"id":346,"title":347,"body":348,"client":142,"date":53,"description":355,"extension":55,"externalLinks":53,"images":53,"meta":356,"navigation":65,"path":357,"seo":358,"stem":360,"subtitle":361,"tags":362,"thumbnail":365,"tools":366,"__hash__":368},"animation\u002Fanimation\u002F1120.tag-heuer-f1.md","Tag Heuer F1",{"type":8,"value":349,"toc":353},[350],[84,351],{"src":352},"\u002Fvideos\u002Ftag-heuer-f1.mp4",{"title":48,"searchDepth":49,"depth":49,"links":354},[],"Moving at the speed of fashion",{},"\u002Fanimation\u002Ftag-heuer-f1",{"title":347,"description":359},"R","animation\u002F1120.tag-heuer-f1","Most of the WTBR post team had about 3 weeks off to jam on a fun little side project. It was in the middle of F1 season, so we decided to do a mashup with Tag Heuer and F1. This was the fun little result.",[363,364],"Cel Anim","CG","\u002Fimages\u002Fanimation\u002Ftag-heuer-f1\u002Fthumb.png",[74,367],"Karma Render","ixvhw15NFZfYpzERwmGBG9GrUln-tRSXTgJGPyjm0SI",{"id":370,"title":371,"body":372,"client":379,"date":53,"description":380,"extension":55,"externalLinks":53,"images":53,"meta":381,"navigation":65,"path":382,"seo":383,"stem":384,"subtitle":53,"tags":385,"thumbnail":386,"tools":387,"__hash__":389},"animation\u002Fanimation\u002F1125.apdrkt.md","APDRKT",{"type":8,"value":373,"toc":377},[374],[27,375],{"id":376},"69567941",{"title":48,"searchDepth":49,"depth":49,"links":378},[],"Tolleson","Our explorations on the letter A",{},"\u002Fanimation\u002Fapdrkt",{"title":371,"description":380},"animation\u002F1125.apdrkt",[71,72],"\u002Fimages\u002Fanimation\u002Fapdrkt\u002Fthumb.png",[75,388],"Vray","5DWlDzfrZ1mm2REyz5QimdlKnSaefbXmTadNe2vGFis",{"id":391,"title":392,"body":393,"client":215,"date":53,"description":403,"extension":55,"externalLinks":53,"images":53,"meta":404,"navigation":65,"path":405,"seo":406,"stem":408,"subtitle":409,"tags":410,"thumbnail":412,"tools":413,"__hash__":415},"animation\u002Fanimation\u002F1127.halloween.md","Halloween",{"type":8,"value":394,"toc":401},[395,398],[84,396],{"src":397},"\u002Fvideos\u002Fhalloween.mp4",[23,399,400],{},"Short animation created in collaboration with a cel animator colleague. Produced using Houdini and Solaris over approximately 8 days.",{"title":48,"searchDepth":49,"depth":49,"links":402},[],"Something goofy for our favorite holiday",{},"\u002Fanimation\u002Fhalloween",{"title":392,"description":407},"Short animation created in collaboration with a cel animator colleague","animation\u002F1127.halloween","Halloween comes in hot and fast.",[72,411],"Cel Animation","\u002Fimages\u002Fanimation\u002Fhalloween\u002Fthumb.png",[74,414],"Solaris","QOrzE46CcAAL_ilZ-cDnTw3VTOdWlPGrFO9RqD5Xh04",{"id":417,"title":418,"body":419,"client":53,"date":53,"description":429,"extension":55,"externalLinks":53,"images":53,"meta":430,"navigation":65,"path":431,"seo":432,"stem":433,"subtitle":53,"tags":434,"thumbnail":435,"tools":53,"__hash__":436},"animation\u002Fanimation\u002F1130.daiquiri.md","National Daiquiri Day",{"type":8,"value":420,"toc":427},[421,424],[84,422],{"src":423},"\u002Fvideos\u002Fdaiquiri.mp4",[23,425,426],{},"Some artwork for National Daiquiri Day.",{"title":48,"searchDepth":49,"depth":49,"links":428},[],"Artwork for National Daiquiri Day",{},"\u002Fanimation\u002Fdaiquiri",{"title":418,"description":429},"animation\u002F1130.daiquiri",[72],"\u002Fimages\u002Fanimation\u002Fdaiquiri\u002Fthumb.png","h5VzkoCv0zEnS0_GfPuXnteTsSjj_cEfjkvQBlPy1t8",{"id":438,"title":439,"body":440,"client":456,"date":457,"description":458,"extension":55,"externalLinks":459,"images":463,"meta":473,"navigation":65,"path":474,"seo":475,"stem":476,"subtitle":53,"tags":477,"thumbnail":481,"tools":482,"__hash__":484},"animation\u002Fanimation\u002F1140.worldcoin.md","Worldcoin",{"type":8,"value":441,"toc":454},[442,445,448,451],[84,443],{"src":444},"\u002Fvideos\u002Fworldcoin-1.mp4",[84,446],{"src":447},"\u002Fvideos\u002Fworldcoin-2.mp4",[84,449],{"src":450},"\u002Fvideos\u002Fworldcoin-3.mp4",[23,452,453],{},"Photoreal CG visualizations created with Play studio (ECD: Casey Martin). Imagery produced using Houdini, C4D, Redshift and Cinema's toon renderer.",{"title":48,"searchDepth":49,"depth":49,"links":455},[],"Play","2022-01-01","Photoreal CG visualizations created with Play studio",[460],{"label":461,"url":462},"Play Studio","http:\u002F\u002Fplay.studio",[464,467,469,471],{"src":465,"alt":466},"\u002Fimages\u002Fanimation\u002Fworldcoin\u002F01.png","Worldcoin CG visualization",{"src":468,"alt":466},"\u002Fimages\u002Fanimation\u002Fworldcoin\u002F02.png",{"src":470,"alt":466},"\u002Fimages\u002Fanimation\u002Fworldcoin\u002F03.png",{"src":472,"alt":466},"\u002Fimages\u002Fanimation\u002Fworldcoin\u002F04.png",{},"\u002Fanimation\u002Fworldcoin",{"title":439,"description":458},"animation\u002F1140.worldcoin",[478,479,480],"3D Animation","Computer Graphics","Visual Effects","\u002Fimages\u002Fanimation\u002Fworldcoin\u002Fthumb.png",[74,483,76],"C4D","t-Ep6-8PSSyDfODPAvoCeLIPmCJUoHB9HDLrvxw_97I",{"id":486,"title":487,"body":488,"client":53,"date":53,"description":495,"extension":55,"externalLinks":496,"images":502,"meta":509,"navigation":65,"path":510,"seo":511,"stem":512,"subtitle":53,"tags":513,"thumbnail":504,"tools":53,"__hash__":516},"animation\u002Fanimation\u002F1150.thao-and-the-get-down-stay-down.md","Thao & The Get Down Stay Down",{"type":8,"value":489,"toc":493},[490],[23,491,492],{},"Record artwork (front and back cover) designed for the rock band Thao & the Get Down Stay Down. Photography by Eric Haines.",{"title":48,"searchDepth":49,"depth":49,"links":494},[],"Record artwork designed for the rock band Thao & the Get Down Stay Down",[497,499],{"label":487,"url":498},"https:\u002F\u002Fwww.thaoandthegetdownstaydown.com\u002F",{"label":500,"url":501},"Eric Haines Photography","http:\u002F\u002Fericlouishaines.com\u002F",[503,506],{"src":504,"alt":505},"\u002Fimages\u002Fanimation\u002Fthao-and-the-get-down-stay-down\u002Ffront-cover.png","Front cover artwork",{"src":507,"alt":508},"\u002Fimages\u002Fanimation\u002Fthao-and-the-get-down-stay-down\u002Fback-cover.png","Back cover artwork",{},"\u002Fanimation\u002Fthao-and-the-get-down-stay-down",{"title":487,"description":495},"animation\u002F1150.thao-and-the-get-down-stay-down",[514,515],"Music Artwork","Record Design","3eG9WlWbO_c5sSa_4MyWXCa2eFsbPuUtS2obEFY7qic",{"id":518,"title":519,"body":520,"client":461,"date":546,"description":547,"extension":55,"externalLinks":548,"images":53,"meta":554,"navigation":65,"path":555,"seo":556,"stem":557,"subtitle":53,"tags":558,"thumbnail":560,"tools":561,"__hash__":562},"animation\u002Fanimation\u002F1155.original-pattern-brewing-company.md","Fresh renders for the freshest beer in the bay",{"type":8,"value":521,"toc":544},[522,526,529,532,535,538,541],[27,523],{"aspect-ratio":524,"id":525},"1 \u002F 1","295478664",[27,527],{"aspect-ratio":524,"id":528},"295478592",[27,530],{"aspect-ratio":524,"id":531},"289593561",[27,533],{"aspect-ratio":524,"id":534},"289595560",[27,536],{"aspect-ratio":524,"id":537},"289596305",[27,539],{"aspect-ratio":524,"id":540},"289593574",[23,542,543],{},"OPBC Can Visualizations — beer can label visualizations. The team aimed to celebrate the delicious canned concoctions and execute newly brewed flavors as fast as you can chug a pint, with turnaround times of one day per label. Utilized Houdini to develop a custom droplet solver that loops seamlessly, rendered using Redshift.",{"title":48,"searchDepth":49,"depth":49,"links":545},[],"2018-10-01","Beer can label visualizations with custom droplet solver",[549,551],{"label":461,"url":550},"http:\u002F\u002Fplay.studio\u002F",{"label":552,"url":553},"Original Pattern Beer","https:\u002F\u002Fwww.originalpatternbeer.com\u002F",{},"\u002Fanimation\u002Foriginal-pattern-brewing-company",{"title":519,"description":547},"animation\u002F1155.original-pattern-brewing-company",[478,559],"Product Visualization","\u002Fimages\u002Fanimation\u002Foriginal-pattern-brewing-company\u002Fthumb.jpeg",[74,76],"6vF7Fvp9Uug2yHCOcv8tBK8zGQ9YpGrrMhooseYP21U",{"id":564,"title":565,"body":566,"client":579,"date":580,"description":581,"extension":55,"externalLinks":582,"images":585,"meta":595,"navigation":65,"path":596,"seo":597,"stem":598,"subtitle":53,"tags":599,"thumbnail":587,"tools":602,"__hash__":603},"animation\u002Fanimation\u002F1160.cheesecake-factory.md","Cheesecake Factory",{"type":8,"value":567,"toc":577},[568,571,574],[27,569],{"id":570},"352600755",[27,572],{"id":573},"352632959",[23,575,576],{},"National Cheesecake Day campaign — a fully computer-generated commercial. Rather than shoot in-camera, the team chose to create a fully CG commercial, citing the complexity of capturing spinning food plates. The Houdini-based 3D pipeline proved essential for creating photorealistic food rendering, including a custom volume modelling toolset for cake geometry.",{"title":48,"searchDepth":49,"depth":49,"links":578},[],"Pereira O'Dell","2020-03-01","National Cheesecake Day campaign featuring a fully computer-generated commercial",[583],{"label":579,"url":584},"https:\u002F\u002Fpereiraodell.com\u002F",[586,589,592],{"src":587,"alt":588},"\u002Fimages\u002Fanimation\u002Fcheesecake-factory\u002Fhoudini-master-scene.png","Houdini Master Scene",{"src":590,"alt":591},"\u002Fimages\u002Fanimation\u002Fcheesecake-factory\u002Fgeometry-creation.png","Geometry Creation",{"src":593,"alt":594},"\u002Fimages\u002Fanimation\u002Fcheesecake-factory\u002Fvolume-modelling-toolset.png","Volume Modelling Toolset",{},"\u002Fanimation\u002Fcheesecake-factory",{"title":565,"description":581},"animation\u002F1160.cheesecake-factory",[72,478,600,601],"Food Visualization","Commercial",[74],"8QaeKzzAEs-lF4MTEecHwvuMfrRX0OyJI_s2-kiyE-Y",{"id":605,"title":606,"body":607,"client":53,"date":53,"description":48,"extension":55,"externalLinks":53,"images":53,"meta":614,"navigation":65,"path":615,"seo":616,"stem":617,"subtitle":53,"tags":618,"thumbnail":619,"tools":53,"__hash__":620},"animation\u002Fanimation\u002F1170.shaper-origins.md","Shaper Origins",{"type":8,"value":608,"toc":612},[609],[27,610],{"id":611},"180212993",{"title":48,"searchDepth":49,"depth":49,"links":613},[],{},"\u002Fanimation\u002Fshaper-origins",{"title":606,"description":48},"animation\u002F1170.shaper-origins",[72],"\u002Fimages\u002Fanimation\u002Fshaper-origins\u002Fthumb.png","dDH_Q0pmQhn82sELJN-v5SDgEG4DWXYI06w5ziZn8Ag",{"id":622,"title":623,"body":624,"client":53,"date":53,"description":631,"extension":55,"externalLinks":53,"images":632,"meta":670,"navigation":65,"path":671,"seo":672,"stem":673,"subtitle":53,"tags":674,"thumbnail":676,"tools":53,"__hash__":677},"animation\u002Fanimation\u002F1180.pablo-packaging-visualization.md","Pablo Packaging Visualization",{"type":8,"value":625,"toc":629},[626],[23,627,628],{},"Various packaging renders created for Pablo while staff at Tolleson Design.",{"title":48,"searchDepth":49,"depth":49,"links":630},[],"Various packaging renders created for Pablo while staff at Tolleson Design",[633,636,638,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668],{"src":634,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F01.jpeg","Pablo packaging render",{"src":637,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F02.jpeg",{"src":639,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F03.jpeg",{"src":641,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F04.jpeg",{"src":643,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F05.jpeg",{"src":645,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F06.jpeg",{"src":647,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F07.jpeg",{"src":649,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F08.jpeg",{"src":651,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F09.jpeg",{"src":653,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F10.jpeg",{"src":655,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F11.jpeg",{"src":657,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F12.jpeg",{"src":659,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F13.jpeg",{"src":661,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F14.jpeg",{"src":663,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F15.jpeg",{"src":665,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F16.jpeg",{"src":667,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F17.jpeg",{"src":669,"alt":635},"\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002F18.jpeg",{},"\u002Fanimation\u002Fpablo-packaging-visualization",{"title":623,"description":631},"animation\u002F1180.pablo-packaging-visualization",[675,559],"Packaging Design","\u002Fimages\u002Fanimation\u002Fpablo-packaging-visualization\u002Fthumb.jpg","bWRzZRHQP60JBnLTp7IhYdTdE6FLc6SKmbKvQKdf680",{"id":679,"title":680,"body":681,"client":53,"date":53,"description":691,"extension":55,"externalLinks":53,"images":692,"meta":710,"navigation":65,"path":711,"seo":712,"stem":713,"subtitle":53,"tags":714,"thumbnail":716,"tools":53,"__hash__":717},"animation\u002Fanimation\u002F1190.adobe-lightroom.md","Adobe Lightroom",{"type":8,"value":682,"toc":689},[683,686],[84,684],{"src":685},"\u002Fvideos\u002Fadobe-lightroom.mp4",[23,687,688],{},"Tolleson Case Study Video for Adobe Lightroom.",{"title":48,"searchDepth":49,"depth":49,"links":690},[],"Tolleson Case Study Video",[693,696,698,700,702,704,706,708],{"src":694,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F01.jpeg","Adobe Lightroom campaign image",{"src":697,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F02.jpeg",{"src":699,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F03.jpeg",{"src":701,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F04.jpeg",{"src":703,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F05.jpeg",{"src":705,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F06.jpeg",{"src":707,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F07.jpeg",{"src":709,"alt":695},"\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002F08.jpeg",{},"\u002Fanimation\u002Fadobe-lightroom",{"title":680,"description":691},"animation\u002F1190.adobe-lightroom",[72,715],"Software","\u002Fimages\u002Fanimation\u002Fadobe-lightroom\u002Fthumb.jpeg","uLV9OuVPdRp5uVGz6tYIdw4a5kN-o0RRgdP0pQ6Wrvw",{"id":719,"title":720,"body":721,"client":731,"date":732,"description":733,"extension":55,"externalLinks":53,"images":53,"meta":734,"navigation":65,"path":735,"seo":736,"stem":737,"subtitle":53,"tags":738,"thumbnail":740,"tools":53,"__hash__":741},"animation\u002Fanimation\u002F1200.uber-driver-video.md","Uber Driver Video",{"type":8,"value":722,"toc":729},[723,726],[27,724],{"id":725},"518839245",[23,727,728],{},"Uber CPUC Video — Educational content for hundreds of thousands of Uber drivers about regulatory compliance. Some of the technical aspects are complicated, and the job was to provide that information in a clear and entertaining way. Managed the complete production pipeline including script development, concept art creation, editorial work, and animation.",{"title":48,"searchDepth":49,"depth":49,"links":730},[],"Uber","2018-06-01","Uber CPUC educational video for regulatory compliance",{},"\u002Fanimation\u002Fuber-driver-video",{"title":720,"description":733},"animation\u002F1200.uber-driver-video",[72,739,299],"Educational Video","\u002Fimages\u002Fanimation\u002Fuber-driver-video\u002Fthumb.jpeg","62DHULvqOva4N0jXRWoLc9htxsu-wgO_7MSL3OXrio4",{"id":743,"title":744,"body":745,"client":755,"date":756,"description":757,"extension":55,"externalLinks":758,"images":53,"meta":761,"navigation":65,"path":762,"seo":763,"stem":764,"subtitle":53,"tags":765,"thumbnail":768,"tools":53,"__hash__":769},"animation\u002Fanimation\u002F1210.nebula-genomics-tvc.md","Nebula Genomics TVC",{"type":8,"value":746,"toc":753},[747,750],[27,748],{"id":749},"301333161",[23,751,752],{},"\"Spit For A Cure\" — Campaign for Nebula Genomics product launch. The agency leaned heavily on extensive animation and ideation experience to make spitting something more cute than eeek. Giant Void managed the entire production process. Campaign included humorous Instagram content.",{"title":48,"searchDepth":49,"depth":49,"links":754},[],"Nebula Genomics","2018-12-01","Spit For A Cure campaign for Nebula Genomics product launch",[759],{"label":755,"url":760},"https:\u002F\u002Fwww.nebula.org\u002F",{},"\u002Fanimation\u002Fnebula-genomics-tvc",{"title":744,"description":757},"animation\u002F1210.nebula-genomics-tvc",[72,766,767],"Product Launch","Social Media","\u002Fimages\u002Fanimation\u002Fnebula-genomics-tvc\u002Fthumb.jpeg","g30UX3bpyGJQsLOfCL0gDsuvMs3x1tOSza6fxt7ygms",{"id":771,"title":772,"body":773,"client":53,"date":53,"description":48,"extension":55,"externalLinks":53,"images":53,"meta":780,"navigation":65,"path":781,"seo":782,"stem":783,"subtitle":53,"tags":784,"thumbnail":785,"tools":53,"__hash__":786},"animation\u002Fanimation\u002F1250.vespa-v-portal.md","Vespa Portal",{"type":8,"value":774,"toc":778},[775],[84,776],{"src":777},"\u002Fvideos\u002Fvespa-v-portal.mp4",{"title":48,"searchDepth":49,"depth":49,"links":779},[],{},"\u002Fanimation\u002Fvespa-v-portal",{"title":772,"description":48},"animation\u002F1250.vespa-v-portal",[72],"\u002Fimages\u002Fanimation\u002Fvespa-v-portal\u002Fthumb.jpeg","4USj773Hs_AqzkmuHNsKTJ-5qovW8Gk-JYYFx16UyLY",{"id":788,"title":789,"body":790,"client":800,"date":801,"description":802,"extension":55,"externalLinks":53,"images":53,"meta":803,"navigation":65,"path":804,"seo":805,"stem":806,"subtitle":53,"tags":807,"thumbnail":809,"tools":53,"__hash__":810},"animation\u002Fanimation\u002F1260.amp-awards-opener.md","AMP Awards Opener",{"type":8,"value":791,"toc":798},[792,795],[27,793],{"id":794},"337211568",[23,796,797],{},"Opening sequence for the AMP Awards show in New York City. Collaborated with Swell Music + Sound (led by Elad Marish) to combine animation expertise with audio engineering. Features 3D animated goodness.",{"title":48,"searchDepth":49,"depth":49,"links":799},[],"The Association of Music Producers","2019-09-01","Opening sequence for show in NYC",{},"\u002Fanimation\u002Famp-awards-opener",{"title":789,"description":802},"animation\u002F1260.amp-awards-opener",[72,478,808],"Event Opening","\u002Fimages\u002Fanimation\u002Famp-awards-opener\u002Fthumb.png","hRLjGHPS-c3BAvoogAAbJx3tnnI3MphyvM8bAfPtRO4",{"id":812,"title":813,"body":814,"client":579,"date":282,"description":833,"extension":55,"externalLinks":53,"images":53,"meta":834,"navigation":65,"path":835,"seo":836,"stem":837,"subtitle":53,"tags":838,"thumbnail":841,"tools":53,"__hash__":842},"animation\u002Fanimation\u002F1270.yellowtail-summer-social.md","Yellowtail Summer Social",{"type":8,"value":815,"toc":831},[816,819,822,825,828],[84,817],{"src":818},"\u002Fvideos\u002Fyellowtail-summer-social-1.mp4",[84,820],{"src":821},"\u002Fvideos\u002Fyellowtail-summer-social-2.mp4",[84,823],{"src":824},"\u002Fvideos\u002Fyellowtail-summer-social-3.mp4",[84,826],{"src":827},"\u002Fvideos\u002Fyellowtail-summer-social-4.mp4",[23,829,830],{},"Campaign for Yellowtail Wines. Everybody is looking forward to enjoying the summer as Covid begins to wind down, and returning to social gatherings with loved ones and wine.",{"title":48,"searchDepth":49,"depth":49,"links":832},[],"Campaign for Yellowtail Wines celebrating the return of summer socializing",{},"\u002Fanimation\u002Fyellowtail-summer-social",{"title":813,"description":833},"animation\u002F1270.yellowtail-summer-social",[72,839,840],"Motion Design","Advertising","\u002Fimages\u002Fanimation\u002Fyellowtail-summer-social\u002Fthumb.png","W2iGil6duPSs4ye7bzWA3Xxpu7Hl8DrYVFovbzgtCUo",{"id":844,"title":845,"body":846,"client":53,"date":53,"description":856,"extension":55,"externalLinks":53,"images":53,"meta":857,"navigation":65,"path":858,"seo":859,"stem":860,"subtitle":53,"tags":861,"thumbnail":862,"tools":53,"__hash__":863},"animation\u002Fanimation\u002F1280.25-years-of-photoshop.md","25 Years of Photoshop",{"type":8,"value":847,"toc":854},[848,851],[84,849],{"src":850},"\u002Fvideos\u002F25-years-of-photoshop.mp4",[23,852,853],{},"Commercial work created at GS&P.",{"title":48,"searchDepth":49,"depth":49,"links":855},[],"Commercial work created at GS&P",{},"\u002Fanimation\u002F25-years-of-photoshop",{"title":845,"description":856},"animation\u002F1280.25-years-of-photoshop",[72,601],"\u002Fimages\u002Fanimation\u002F25-years-of-photoshop\u002Fthumb.png","qRgJuIaugGXVfXuWoloxekTyMPBtW3hjDtgLFpYyQZs",{"id":865,"title":866,"body":867,"client":53,"date":877,"description":878,"extension":55,"externalLinks":53,"images":53,"meta":879,"navigation":65,"path":880,"seo":881,"stem":882,"subtitle":53,"tags":883,"thumbnail":886,"tools":53,"__hash__":887},"animation\u002Fanimation\u002F1280.humanity.md","Humanity",{"type":8,"value":868,"toc":875},[869,872],[27,870],{"id":871},"338177387",[23,873,874],{},"Self-initiated experimental film. Collaborated with one of the most talented ballerinas in the world to produce experimental filmmaking combining artistic direction with dance performance. Conceived in fall 2018 and produced at Giant Void.",{"title":48,"searchDepth":49,"depth":49,"links":876},[],"2019-02-01","Self-initiated experimental film combining artistic direction with dance performance",{},"\u002Fanimation\u002Fhumanity",{"title":866,"description":878},"animation\u002F1280.humanity",[72,884,885],"Film","Experimental","\u002Fimages\u002Fanimation\u002Fhumanity\u002Fthumb.png","rgt4guzxvXXn7x0GIe8FCLDYO3dFOP8zqk0abjWS_p0",{"id":889,"title":890,"body":891,"client":53,"date":53,"description":901,"extension":55,"externalLinks":53,"images":53,"meta":902,"navigation":65,"path":903,"seo":904,"stem":905,"subtitle":53,"tags":906,"thumbnail":907,"tools":53,"__hash__":908},"animation\u002Fanimation\u002F1290.adobe-eternal-return.md","Adobe Eternal Return",{"type":8,"value":892,"toc":899},[893,896],[84,894],{"src":895},"\u002Fvideos\u002Fadobe-eternal-return.mp4",[23,897,898],{},"A project animated while staff at Autofuss.",{"title":48,"searchDepth":49,"depth":49,"links":900},[],"A project animated while staff at Autofuss",{},"\u002Fanimation\u002Fadobe-eternal-return",{"title":890,"description":901},"animation\u002F1290.adobe-eternal-return",[72],"\u002Fimages\u002Fanimation\u002Fadobe-eternal-return\u002Fthumb.png","d3UYGXmKvZNXPs-6DC5JUUKzELpeBdMduu87cMAZF2c",{"id":910,"title":911,"body":912,"client":922,"date":923,"description":924,"extension":55,"externalLinks":925,"images":931,"meta":941,"navigation":65,"path":942,"seo":943,"stem":944,"subtitle":53,"tags":945,"thumbnail":933,"tools":948,"__hash__":949},"animation\u002Fanimation\u002F1300.sfmoma-modern-ball.md","SFMoMa Modern Ball",{"type":8,"value":913,"toc":920},[914,917],[27,915],{"id":916},"265074077",[23,918,919],{},"Flip-book invitations for distinguished guests of the San Francisco Museum of Modern Art. Created custom Eventbrite headers for three ticketing tiers. A collaboration with Hybrid Design resulting in super fun deliverables.",{"title":48,"searchDepth":49,"depth":49,"links":921},[],"SFMoMa","2017-11-01","Flip-book invitations for distinguished guests of the San Francisco Museum of Modern Art",[926,929],{"label":927,"url":928},"Hybrid Design","http:\u002F\u002Fhybrid-design.com\u002F",{"label":922,"url":930},"https:\u002F\u002Fwww.sfmoma.org\u002F",[932,935,938],{"src":933,"alt":934},"\u002Fimages\u002Fanimation\u002Fsfmoma-modern-ball\u002Feventbrite-tier-1.png","Eventbrite Header - Tier 1",{"src":936,"alt":937},"\u002Fimages\u002Fanimation\u002Fsfmoma-modern-ball\u002Feventbrite-tier-2.png","Eventbrite Header - Tier 2",{"src":939,"alt":940},"\u002Fimages\u002Fanimation\u002Fsfmoma-modern-ball\u002Feventbrite-tier-3.png","Eventbrite Header - Tier 3",{},"\u002Fanimation\u002Fsfmoma-modern-ball",{"title":911,"description":924},"animation\u002F1300.sfmoma-modern-ball",[946,947,478],"Invitation Design","Event Marketing",[74,76],"VwOcl-NiG-1Xk8Nr7wOEoyCNAlEr6RWHqJTcppgoM1U",{"id":951,"title":952,"body":953,"client":53,"date":53,"description":966,"extension":55,"externalLinks":53,"images":53,"meta":967,"navigation":65,"path":968,"seo":969,"stem":970,"subtitle":53,"tags":971,"thumbnail":973,"tools":974,"__hash__":976},"animation\u002Fanimation\u002F1310.character-sketch.md","Guts Character Sketch",{"type":8,"value":954,"toc":964},[955,958,961],[84,956],{"src":957},"\u002Fvideos\u002Fcharacter-sketch.mp4",[84,959],{"src":960},"\u002Fvideos\u002Fcharacter-sketch-2.mp4",[23,962,963],{},"Character design project created while practicing ZBrush. Interest in developing this character further into a more ambitious work.",{"title":48,"searchDepth":49,"depth":49,"links":965},[],"Character design project created while practicing ZBrush",{},"\u002Fanimation\u002Fcharacter-sketch",{"title":952,"description":966},"animation\u002F1310.character-sketch",[972,72],"3D Character Design","\u002Fimages\u002Fanimation\u002Fcharacter-sketch\u002Fthumb.png",[975],"ZBrush","h2bunvWnml-5Kz0b4wiY1zyQyh2IdXsTA2hITBhNpXY",{"id":978,"title":979,"body":980,"client":53,"date":53,"description":990,"extension":55,"externalLinks":53,"images":53,"meta":991,"navigation":65,"path":992,"seo":993,"stem":994,"subtitle":53,"tags":995,"thumbnail":997,"tools":53,"__hash__":998},"animation\u002Fanimation\u002F1310.ebay.md","eBay",{"type":8,"value":981,"toc":988},[982,985],[84,983],{"src":984},"\u002Fvideos\u002Febay.mp4",[23,986,987],{},"A video animated while staff at Autofuss.",{"title":48,"searchDepth":49,"depth":49,"links":989},[],"A video animated while staff at Autofuss",{},"\u002Fanimation\u002Febay",{"title":979,"description":990},"animation\u002F1310.ebay",[72,996],"Video","\u002Fimages\u002Fanimation\u002Febay\u002Fthumb.png","mWDCm1xUldbI6qBnQqQQt8ZZgWWnRZ63PDT4vS0cKzw",{"id":1000,"title":1001,"body":1002,"client":731,"date":1009,"description":1010,"extension":55,"externalLinks":53,"images":1011,"meta":1023,"navigation":65,"path":1024,"seo":1025,"stem":1026,"subtitle":53,"tags":1027,"thumbnail":1032,"tools":53,"__hash__":1033},"animation\u002Fanimation\u002F1310.uber-visualizations.md","Uber Visualizations",{"type":8,"value":1003,"toc":1007},[1004],[23,1005,1006],{},"Commissioned by the brand team at Uber to bring their business system to life in 3D. Custom 3D pipeline and proprietary templates for shading and rendering.",{"title":48,"searchDepth":49,"depth":49,"links":1008},[],"2017-04-01","3D visualizations of Uber's business system through physical cards",[1012,1015,1017,1019,1021],{"src":1013,"alt":1014},"\u002Fimages\u002Fanimation\u002Fuber-visualizations\u002F01.png","Uber visualization render",{"src":1016,"alt":1014},"\u002Fimages\u002Fanimation\u002Fuber-visualizations\u002F02.png",{"src":1018,"alt":1014},"\u002Fimages\u002Fanimation\u002Fuber-visualizations\u002F03.png",{"src":1020,"alt":1014},"\u002Fimages\u002Fanimation\u002Fuber-visualizations\u002F04.png",{"src":1022,"alt":1014},"\u002Fimages\u002Fanimation\u002Fuber-visualizations\u002F05.png",{},"\u002Fanimation\u002Fuber-visualizations",{"title":1001,"description":1010},"animation\u002F1310.uber-visualizations",[1028,1029,1030,1031],"3D Visualization","Brand System","Product Design","Rendering","\u002Fimages\u002Fanimation\u002Fuber-visualizations\u002Fthumb.png","Tc4M3kJfVD7TYeip0NNUMQnmDvOBLw8vOixaMFm-r5A",[1035,1157,1411,1615,2339],{"id":1036,"title":1037,"body":1038,"date":1136,"description":1137,"extension":55,"images":1138,"meta":1143,"navigation":65,"path":1144,"seo":1145,"stem":1146,"tags":1147,"thumbnail":48,"tools":1152,"__hash__":1156},"articles\u002Farticle\u002F0010_dummy_article.md","Why Every Animator Should Learn to Code",{"type":8,"value":1039,"toc":1132},[1040,1043,1078,1081,1085,1088,1115,1118,1122,1125,1128],[23,1041,1042],{},"The entry point is After Effects expressions. You alt-click a stopwatch and type a little JavaScript directly in the timeline. Most animators have already done this without thinking of it as coding.",[1044,1045,1049],"pre",{"className":1046,"code":1047,"language":1048,"meta":48,"style":48},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","wiggle(3, 20)\n","js",[1050,1051,1052],"code",{"__ignoreMap":48},[1053,1054,1056,1060,1064,1068,1072,1075],"span",{"class":1055,"line":124},"line",[1053,1057,1059],{"class":1058},"s2Zo4","wiggle",[1053,1061,1063],{"class":1062},"sTEyZ","(",[1053,1065,1067],{"class":1066},"sbssI","3",[1053,1069,1071],{"class":1070},"sMK4o",",",[1053,1073,1074],{"class":1066}," 20",[1053,1076,1077],{"class":1062},")\n",[23,1079,1080],{},"That's it. That's code. And you already understand what it does.",[18,1082,1084],{"id":1083},"you-dont-need-to-go-deep","You don't need to go deep",[23,1086,1087],{},"Knowing a handful of things gets you 80% of the value:",[1089,1090,1091,1099,1109],"ul",{},[1092,1093,1094,1098],"li",{},[1095,1096,1097],"strong",{},"Variables"," — a value has a name and a type",[1092,1100,1101,1104,1105,1108],{},[1095,1102,1103],{},"Conditionals"," — ",[1050,1106,1107],{},"if\u002Felse"," to make things respond to other things",[1092,1110,1111,1114],{},[1095,1112,1113],{},"Loops"," — do this thing N times, or for every file in a folder",[23,1116,1117],{},"The rest you look up when you need it.",[18,1119,1121],{"id":1120},"the-practical-stuff","The practical stuff",[23,1123,1124],{},"Once I learned basic Python, the first thing I wrote set up my whole project folder in one command. Then batch renaming frames. Then a script that reads a CSV and spits out title cards in After Effects. None of it was clever — just enough to stop doing the boring parts by hand.",[23,1126,1127],{},"The mental shift matters too. You start seeing animation as systems rather than one-off solutions. That makes you better at both.",[1129,1130,1131],"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 .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);}",{"title":48,"searchDepth":49,"depth":49,"links":1133},[1134,1135],{"id":1083,"depth":49,"text":1084},{"id":1120,"depth":49,"text":1121},"12 September, 2025","A look at how picking up even basic programming skills can make you a more versatile artist.",[1139,1141],{"src":48,"alt":1140},"A cluttered desk with a monitor showing After Effects alongside a code editor",{"src":48,"alt":1142},"A terminal window with a Python script automating file renaming",{},"\u002Farticle\u002F0010_dummy_article",{"title":1037,"description":1137},"article\u002F0010_dummy_article",[1148,1149,1150,1151],"animation","coding","workflow","career",[1153,1154,1155],"After Effects","Python","JavaScript","0vWaRTzMEbFq7vOqri_a7PBfGj-c_erzUq5w_GXme7Y",{"id":1158,"title":1159,"body":1160,"date":1394,"description":1395,"extension":55,"images":1396,"meta":1401,"navigation":65,"path":1402,"seo":1403,"stem":1404,"tags":1405,"thumbnail":48,"tools":1409,"__hash__":1410},"articles\u002Farticle\u002F0020_dummy_article.md","After Effects Expressions for Noobs",{"type":8,"value":1161,"toc":1389},[1162,1165,1168,1172,1177,1201,1207,1251,1257,1276,1282,1315,1319,1322,1376,1379,1383,1386],[23,1163,1164],{},"Alt-click a stopwatch. Type some code. Done — you're writing expressions.",[23,1166,1167],{},"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.",[18,1169,1171],{"id":1170},"the-four-youll-use-everywhere","The four you'll use everywhere",[23,1173,1174,1176],{},[1095,1175,1059],{}," — shake a layer organically",[1044,1178,1180],{"className":1046,"code":1179,"language":1048,"meta":48,"style":48},"wiggle(3, 20) \u002F\u002F 3x per second, 20px max offset\n",[1050,1181,1182],{"__ignoreMap":48},[1053,1183,1184,1186,1188,1190,1192,1194,1197],{"class":1055,"line":124},[1053,1185,1059],{"class":1058},[1053,1187,1063],{"class":1062},[1053,1189,1067],{"class":1066},[1053,1191,1071],{"class":1070},[1053,1193,1074],{"class":1066},[1053,1195,1196],{"class":1062},") ",[1053,1198,1200],{"class":1199},"sHwdD","\u002F\u002F 3x per second, 20px max offset\n",[23,1202,1203,1206],{},[1095,1204,1205],{},"loopOut"," — loop your keyframes forever",[1044,1208,1210],{"className":1046,"code":1209,"language":1048,"meta":48,"style":48},"loopOut(\"cycle\")    \u002F\u002F repeats forward\nloopOut(\"pingpong\") \u002F\u002F reverses each loop\n",[1050,1211,1212,1233],{"__ignoreMap":48},[1053,1213,1214,1216,1218,1221,1225,1227,1230],{"class":1055,"line":124},[1053,1215,1205],{"class":1058},[1053,1217,1063],{"class":1062},[1053,1219,1220],{"class":1070},"\"",[1053,1222,1224],{"class":1223},"sfazB","cycle",[1053,1226,1220],{"class":1070},[1053,1228,1229],{"class":1062},")    ",[1053,1231,1232],{"class":1199},"\u002F\u002F repeats forward\n",[1053,1234,1235,1237,1239,1241,1244,1246,1248],{"class":1055,"line":49},[1053,1236,1205],{"class":1058},[1053,1238,1063],{"class":1062},[1053,1240,1220],{"class":1070},[1053,1242,1243],{"class":1223},"pingpong",[1053,1245,1220],{"class":1070},[1053,1247,1196],{"class":1062},[1053,1249,1250],{"class":1199},"\u002F\u002F reverses each loop\n",[23,1252,1253,1256],{},[1095,1254,1255],{},"time"," — drive anything with the clock",[1044,1258,1260],{"className":1046,"code":1259,"language":1048,"meta":48,"style":48},"time * 90 \u002F\u002F slow spin. crank it up for faster\n",[1050,1261,1262],{"__ignoreMap":48},[1053,1263,1264,1267,1270,1273],{"class":1055,"line":124},[1053,1265,1266],{"class":1062},"time ",[1053,1268,1269],{"class":1070},"*",[1053,1271,1272],{"class":1066}," 90",[1053,1274,1275],{"class":1199}," \u002F\u002F slow spin. crank it up for faster\n",[23,1277,1278,1281],{},[1095,1279,1280],{},"value"," — offset whatever's already keyframed",[1044,1283,1285],{"className":1046,"code":1284,"language":1048,"meta":48,"style":48},"value + [0, -50] \u002F\u002F push the existing position up by 50px\n",[1050,1286,1287],{"__ignoreMap":48},[1053,1288,1289,1292,1295,1298,1301,1303,1306,1309,1312],{"class":1055,"line":124},[1053,1290,1291],{"class":1062},"value ",[1053,1293,1294],{"class":1070},"+",[1053,1296,1297],{"class":1062}," [",[1053,1299,1300],{"class":1066},"0",[1053,1302,1071],{"class":1070},[1053,1304,1305],{"class":1070}," -",[1053,1307,1308],{"class":1066},"50",[1053,1310,1311],{"class":1062},"] ",[1053,1313,1314],{"class":1199},"\u002F\u002F push the existing position up by 50px\n",[18,1316,1318],{"id":1317},"linking-properties","Linking properties",[23,1320,1321],{},"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.",[1044,1323,1325],{"className":1046,"code":1324,"language":1048,"meta":48,"style":48},"thisComp.layer(\"Control\").effect(\"Opacity\")(\"Slider\")\n",[1050,1326,1327],{"__ignoreMap":48},[1053,1328,1329,1332,1335,1338,1340,1342,1345,1347,1350,1352,1355,1357,1359,1362,1364,1367,1369,1372,1374],{"class":1055,"line":124},[1053,1330,1331],{"class":1062},"thisComp",[1053,1333,1334],{"class":1070},".",[1053,1336,1337],{"class":1058},"layer",[1053,1339,1063],{"class":1062},[1053,1341,1220],{"class":1070},[1053,1343,1344],{"class":1223},"Control",[1053,1346,1220],{"class":1070},[1053,1348,1349],{"class":1062},")",[1053,1351,1334],{"class":1070},[1053,1353,1354],{"class":1058},"effect",[1053,1356,1063],{"class":1062},[1053,1358,1220],{"class":1070},[1053,1360,1361],{"class":1223},"Opacity",[1053,1363,1220],{"class":1070},[1053,1365,1366],{"class":1062},")(",[1053,1368,1220],{"class":1070},[1053,1370,1371],{"class":1223},"Slider",[1053,1373,1220],{"class":1070},[1053,1375,1077],{"class":1062},[23,1377,1378],{},"You don't need to write that by hand — just read it after the pickWhip generates it, and it'll start making sense.",[18,1380,1382],{"id":1381},"just-start","Just start",[23,1384,1385],{},"Take any animation you've already built. Add one expression. Break it. Fix it. That's the whole method.",[1129,1387,1388],{},"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":48,"searchDepth":49,"depth":49,"links":1390},[1391,1392,1393],{"id":1170,"depth":49,"text":1171},{"id":1317,"depth":49,"text":1318},{"id":1381,"depth":49,"text":1382},"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.",[1397,1399],{"src":48,"alt":1398},"After Effects timeline with an expression applied to a position property",{"src":48,"alt":1400},"The expression editor open in After Effects showing a wiggle expression",{},"\u002Farticle\u002F0020_dummy_article",{"title":1159,"description":1395},"article\u002F0020_dummy_article",[1406,1407,1149,1408],"after effects","expressions","tutorial",[1153,1155],"3WTWxPPjS7H1RFxkS9C9hCmREQvN5Q8nw184RUZnjnw",{"id":1412,"title":1413,"body":1414,"date":1598,"description":1599,"extension":55,"images":1600,"meta":1605,"navigation":65,"path":1606,"seo":1607,"stem":1608,"tags":1609,"thumbnail":48,"tools":1612,"__hash__":1614},"articles\u002Farticle\u002F0030_dummy_article.md","Automating Your Pipeline with Python",{"type":8,"value":1415,"toc":1593},[1416,1419,1423,1426,1512,1530,1533,1537,1544,1573,1577,1584,1587,1590],[23,1417,1418],{},"The work that isn't animation — renaming frames, building folder trees, converting formats — quietly eats hours. Python makes it disappear.",[18,1420,1422],{"id":1421},"project-setup","Project setup",[23,1424,1425],{},"Write this once, run it at the start of every job:",[1044,1427,1431],{"className":1428,"code":1429,"language":1430,"meta":48,"style":48},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import os, sys\n\nname = sys.argv[1]\nbase = f\"\u002FUsers\u002Fyou\u002FProjects\u002F{name}\"\n\nfor folder in [\n    \"01_assets\u002Ffootage\", \"01_assets\u002Faudio\",\n    \"02_project_files\",\n    \"03_renders\u002Fwip\", \"03_renders\u002Ffinal\",\n    \"04_delivery\"\n]:\n    os.makedirs(f\"{base}\u002F{folder}\", exist_ok=True)\n\nprint(f\"Created: {name}\")\n","python",[1050,1432,1433,1438,1443,1448,1454,1459,1465,1471,1477,1483,1489,1495,1501,1506],{"__ignoreMap":48},[1053,1434,1435],{"class":1055,"line":124},[1053,1436,1437],{},"import os, sys\n",[1053,1439,1440],{"class":1055,"line":49},[1053,1441,1442],{"emptyLinePlaceholder":65},"\n",[1053,1444,1445],{"class":1055,"line":190},[1053,1446,1447],{},"name = sys.argv[1]\n",[1053,1449,1451],{"class":1055,"line":1450},4,[1053,1452,1453],{},"base = f\"\u002FUsers\u002Fyou\u002FProjects\u002F{name}\"\n",[1053,1455,1457],{"class":1055,"line":1456},5,[1053,1458,1442],{"emptyLinePlaceholder":65},[1053,1460,1462],{"class":1055,"line":1461},6,[1053,1463,1464],{},"for folder in [\n",[1053,1466,1468],{"class":1055,"line":1467},7,[1053,1469,1470],{},"    \"01_assets\u002Ffootage\", \"01_assets\u002Faudio\",\n",[1053,1472,1474],{"class":1055,"line":1473},8,[1053,1475,1476],{},"    \"02_project_files\",\n",[1053,1478,1480],{"class":1055,"line":1479},9,[1053,1481,1482],{},"    \"03_renders\u002Fwip\", \"03_renders\u002Ffinal\",\n",[1053,1484,1486],{"class":1055,"line":1485},10,[1053,1487,1488],{},"    \"04_delivery\"\n",[1053,1490,1492],{"class":1055,"line":1491},11,[1053,1493,1494],{},"]:\n",[1053,1496,1498],{"class":1055,"line":1497},12,[1053,1499,1500],{},"    os.makedirs(f\"{base}\u002F{folder}\", exist_ok=True)\n",[1053,1502,1504],{"class":1055,"line":1503},13,[1053,1505,1442],{"emptyLinePlaceholder":65},[1053,1507,1509],{"class":1055,"line":1508},14,[1053,1510,1511],{},"print(f\"Created: {name}\")\n",[1044,1513,1517],{"className":1514,"code":1515,"language":1516,"meta":48,"style":48},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python setup.py client-name\n","bash",[1050,1518,1519],{"__ignoreMap":48},[1053,1520,1521,1524,1527],{"class":1055,"line":124},[1053,1522,1430],{"class":1523},"sBMFI",[1053,1525,1526],{"class":1223}," setup.py",[1053,1528,1529],{"class":1223}," client-name\n",[23,1531,1532],{},"Whole folder tree, named consistently, in under a second.",[18,1534,1536],{"id":1535},"batch-rename-frames","Batch rename frames",[23,1538,1539,1540,1543],{},"AE renders frames like ",[1050,1541,1542],{},"comp_[0000].png",". This cleans them up:",[1044,1545,1547],{"className":1428,"code":1546,"language":1430,"meta":48,"style":48},"from pathlib import Path\n\nrender_dir = Path(\"\u002Fpath\u002Fto\u002Frenders\")\nfor i, f in enumerate(sorted(render_dir.glob(\"*.png\"))):\n    f.rename(render_dir \u002F f\"output_{i:04d}.png\")\n",[1050,1548,1549,1554,1558,1563,1568],{"__ignoreMap":48},[1053,1550,1551],{"class":1055,"line":124},[1053,1552,1553],{},"from pathlib import Path\n",[1053,1555,1556],{"class":1055,"line":49},[1053,1557,1442],{"emptyLinePlaceholder":65},[1053,1559,1560],{"class":1055,"line":190},[1053,1561,1562],{},"render_dir = Path(\"\u002Fpath\u002Fto\u002Frenders\")\n",[1053,1564,1565],{"class":1055,"line":1450},[1053,1566,1567],{},"for i, f in enumerate(sorted(render_dir.glob(\"*.png\"))):\n",[1053,1569,1570],{"class":1055,"line":1456},[1053,1571,1572],{},"    f.rename(render_dir \u002F f\"output_{i:04d}.png\")\n",[18,1574,1576],{"id":1575},"notify-on-render-complete","Notify on render complete",[23,1578,1579,1580,1583],{},"Install ",[1050,1581,1582],{},"watchdog"," and point it at your renders folder. It fires a desktop notification (or a Slack message) the moment new files appear. No more tabbing back to check.",[1585,1586],"hr",{},[23,1588,1589],{},"Start with the folder script. Customize it to your actual workflow. Then find the next annoying repetitive thing and automate that. That's it.",[1129,1591,1592],{},"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":48,"searchDepth":49,"depth":49,"links":1594},[1595,1596,1597],{"id":1421,"depth":49,"text":1422},{"id":1535,"depth":49,"text":1536},{"id":1575,"depth":49,"text":1576},"14 November, 2025","The repetitive parts of production work — file management, render tracking, asset organization — are exactly what Python is built to eliminate. Here's where to start.",[1601,1603],{"src":48,"alt":1602},"A terminal showing a Python script output listing renamed render files",{"src":48,"alt":1604},"A folder structure generated automatically by a project setup script",{},"\u002Farticle\u002F0030_dummy_article",{"title":1413,"description":1599},"article\u002F0030_dummy_article",[1610,1430,1611,1150],"automation","pipeline",[1154,1153,1613],"Terminal","Dx23q0uvfYWR0uPPRHIDBU1RjA4HkKgCDrVwnzmwrHA",{"id":1616,"title":1617,"body":1618,"date":2322,"description":2323,"extension":55,"images":2324,"meta":2329,"navigation":65,"path":2330,"seo":2331,"stem":2332,"tags":2333,"thumbnail":48,"tools":2337,"__hash__":2338},"articles\u002Farticle\u002F0040_dummy_article.md","Generative Art and Animation",{"type":8,"value":1619,"toc":2316},[1620,1631,1635,1806,1809,1813,1823,1955,1958,1962,1965,2306,2310,2313],[23,1621,1622,1623,1626,1627,1630],{},"Generative art is what happens when you write rules and let the output surprise you. For animators it clicks fast — ",[1050,1624,1625],{},"setup()"," runs once, ",[1050,1628,1629],{},"draw()"," runs every frame. You've thought in frames your whole career.",[18,1632,1634],{"id":1633},"start-here","Start here",[1044,1636,1638],{"className":1046,"code":1637,"language":1048,"meta":48,"style":48},"function setup() {\n  createCanvas(800, 800);\n  background(10);\n}\n\nfunction draw() {\n  fill(random(255), 150, 200, 80);\n  noStroke();\n  ellipse(random(width), random(height), random(5, 30));\n}\n",[1050,1639,1640,1655,1676,1690,1695,1699,1710,1746,1755,1802],{"__ignoreMap":48},[1053,1641,1642,1646,1649,1652],{"class":1055,"line":124},[1053,1643,1645],{"class":1644},"spNyl","function",[1053,1647,1648],{"class":1058}," setup",[1053,1650,1651],{"class":1070},"()",[1053,1653,1654],{"class":1070}," {\n",[1053,1656,1657,1660,1663,1666,1668,1671,1673],{"class":1055,"line":49},[1053,1658,1659],{"class":1058},"  createCanvas",[1053,1661,1063],{"class":1662},"swJcz",[1053,1664,1665],{"class":1066},"800",[1053,1667,1071],{"class":1070},[1053,1669,1670],{"class":1066}," 800",[1053,1672,1349],{"class":1662},[1053,1674,1675],{"class":1070},";\n",[1053,1677,1678,1681,1683,1686,1688],{"class":1055,"line":190},[1053,1679,1680],{"class":1058},"  background",[1053,1682,1063],{"class":1662},[1053,1684,1685],{"class":1066},"10",[1053,1687,1349],{"class":1662},[1053,1689,1675],{"class":1070},[1053,1691,1692],{"class":1055,"line":1450},[1053,1693,1694],{"class":1070},"}\n",[1053,1696,1697],{"class":1055,"line":1456},[1053,1698,1442],{"emptyLinePlaceholder":65},[1053,1700,1701,1703,1706,1708],{"class":1055,"line":1461},[1053,1702,1645],{"class":1644},[1053,1704,1705],{"class":1058}," draw",[1053,1707,1651],{"class":1070},[1053,1709,1654],{"class":1070},[1053,1711,1712,1715,1717,1720,1722,1725,1727,1729,1732,1734,1737,1739,1742,1744],{"class":1055,"line":1467},[1053,1713,1714],{"class":1058},"  fill",[1053,1716,1063],{"class":1662},[1053,1718,1719],{"class":1058},"random",[1053,1721,1063],{"class":1662},[1053,1723,1724],{"class":1066},"255",[1053,1726,1349],{"class":1662},[1053,1728,1071],{"class":1070},[1053,1730,1731],{"class":1066}," 150",[1053,1733,1071],{"class":1070},[1053,1735,1736],{"class":1066}," 200",[1053,1738,1071],{"class":1070},[1053,1740,1741],{"class":1066}," 80",[1053,1743,1349],{"class":1662},[1053,1745,1675],{"class":1070},[1053,1747,1748,1751,1753],{"class":1055,"line":1473},[1053,1749,1750],{"class":1058},"  noStroke",[1053,1752,1651],{"class":1662},[1053,1754,1675],{"class":1070},[1053,1756,1757,1760,1762,1764,1766,1769,1771,1773,1776,1778,1781,1783,1785,1787,1789,1792,1794,1797,1800],{"class":1055,"line":1479},[1053,1758,1759],{"class":1058},"  ellipse",[1053,1761,1063],{"class":1662},[1053,1763,1719],{"class":1058},[1053,1765,1063],{"class":1662},[1053,1767,1768],{"class":1062},"width",[1053,1770,1349],{"class":1662},[1053,1772,1071],{"class":1070},[1053,1774,1775],{"class":1058}," random",[1053,1777,1063],{"class":1662},[1053,1779,1780],{"class":1062},"height",[1053,1782,1349],{"class":1662},[1053,1784,1071],{"class":1070},[1053,1786,1775],{"class":1058},[1053,1788,1063],{"class":1662},[1053,1790,1791],{"class":1066},"5",[1053,1793,1071],{"class":1070},[1053,1795,1796],{"class":1066}," 30",[1053,1798,1799],{"class":1662},"))",[1053,1801,1675],{"class":1070},[1053,1803,1804],{"class":1055,"line":1485},[1053,1805,1694],{"class":1070},[23,1807,1808],{},"Random semi-transparent circles, every frame. Not much — but it's a live, running visual system in ten lines.",[18,1810,1812],{"id":1811},"random-vs-noise","random() vs noise()",[23,1814,1815,1818,1819,1822],{},[1050,1816,1817],{},"random()"," jumps around chaotically. ",[1050,1820,1821],{},"noise()"," flows smoothly — more organic, more interesting:",[1044,1824,1826],{"className":1046,"code":1825,"language":1048,"meta":48,"style":48},"let t = 0;\n\nfunction draw() {\n  let x = noise(t) * width;\n  let y = noise(t + 100) * height;\n  ellipse(x, y, 8);\n  t += 0.005;\n}\n",[1050,1827,1828,1844,1848,1858,1886,1916,1938,1951],{"__ignoreMap":48},[1053,1829,1830,1833,1836,1839,1842],{"class":1055,"line":124},[1053,1831,1832],{"class":1644},"let",[1053,1834,1835],{"class":1062}," t ",[1053,1837,1838],{"class":1070},"=",[1053,1840,1841],{"class":1066}," 0",[1053,1843,1675],{"class":1070},[1053,1845,1846],{"class":1055,"line":49},[1053,1847,1442],{"emptyLinePlaceholder":65},[1053,1849,1850,1852,1854,1856],{"class":1055,"line":190},[1053,1851,1645],{"class":1644},[1053,1853,1705],{"class":1058},[1053,1855,1651],{"class":1070},[1053,1857,1654],{"class":1070},[1053,1859,1860,1863,1866,1869,1872,1874,1877,1879,1881,1884],{"class":1055,"line":1450},[1053,1861,1862],{"class":1644},"  let",[1053,1864,1865],{"class":1062}," x",[1053,1867,1868],{"class":1070}," =",[1053,1870,1871],{"class":1058}," noise",[1053,1873,1063],{"class":1662},[1053,1875,1876],{"class":1062},"t",[1053,1878,1196],{"class":1662},[1053,1880,1269],{"class":1070},[1053,1882,1883],{"class":1062}," width",[1053,1885,1675],{"class":1070},[1053,1887,1888,1890,1893,1895,1897,1899,1901,1904,1907,1909,1911,1914],{"class":1055,"line":1456},[1053,1889,1862],{"class":1644},[1053,1891,1892],{"class":1062}," y",[1053,1894,1868],{"class":1070},[1053,1896,1871],{"class":1058},[1053,1898,1063],{"class":1662},[1053,1900,1876],{"class":1062},[1053,1902,1903],{"class":1070}," +",[1053,1905,1906],{"class":1066}," 100",[1053,1908,1196],{"class":1662},[1053,1910,1269],{"class":1070},[1053,1912,1913],{"class":1062}," height",[1053,1915,1675],{"class":1070},[1053,1917,1918,1920,1922,1925,1927,1929,1931,1934,1936],{"class":1055,"line":1461},[1053,1919,1759],{"class":1058},[1053,1921,1063],{"class":1662},[1053,1923,1924],{"class":1062},"x",[1053,1926,1071],{"class":1070},[1053,1928,1892],{"class":1062},[1053,1930,1071],{"class":1070},[1053,1932,1933],{"class":1066}," 8",[1053,1935,1349],{"class":1662},[1053,1937,1675],{"class":1070},[1053,1939,1940,1943,1946,1949],{"class":1055,"line":1467},[1053,1941,1942],{"class":1062},"  t",[1053,1944,1945],{"class":1070}," +=",[1053,1947,1948],{"class":1066}," 0.005",[1053,1950,1675],{"class":1070},[1053,1952,1953],{"class":1055,"line":1473},[1053,1954,1694],{"class":1070},[23,1956,1957],{},"Pass different offsets for X and Y and you get wandering motion with no keyframes. This is Perlin noise — the function behind most natural-looking generative movement.",[18,1959,1961],{"id":1960},"particle-systems","Particle systems",[23,1963,1964],{},"A classic: a bunch of points that each move independently.",[1044,1966,1968],{"className":1046,"code":1967,"language":1048,"meta":48,"style":48},"let particles = [];\n\nfunction setup() {\n  createCanvas(800, 800);\n  for (let i = 0; i \u003C 200; i++) {\n    particles.push({ x: random(width), y: random(height), t: random(1000) });\n  }\n}\n\nfunction draw() {\n  background(10, 20); \u002F\u002F low alpha = trails\n  for (let p of particles) {\n    p.x += noise(p.t) * 4 - 2;\n    p.y += noise(p.t + 500) * 4 - 2;\n    point(p.x, p.y);\n    p.t += 0.005;\n  }\n}\n",[1050,1969,1970,1984,1988,1998,2014,2054,2119,2124,2128,2132,2142,2161,2182,2217,2255,2281,2296,2301],{"__ignoreMap":48},[1053,1971,1972,1974,1977,1979,1982],{"class":1055,"line":124},[1053,1973,1832],{"class":1644},[1053,1975,1976],{"class":1062}," particles ",[1053,1978,1838],{"class":1070},[1053,1980,1981],{"class":1062}," []",[1053,1983,1675],{"class":1070},[1053,1985,1986],{"class":1055,"line":49},[1053,1987,1442],{"emptyLinePlaceholder":65},[1053,1989,1990,1992,1994,1996],{"class":1055,"line":190},[1053,1991,1645],{"class":1644},[1053,1993,1648],{"class":1058},[1053,1995,1651],{"class":1070},[1053,1997,1654],{"class":1070},[1053,1999,2000,2002,2004,2006,2008,2010,2012],{"class":1055,"line":1450},[1053,2001,1659],{"class":1058},[1053,2003,1063],{"class":1662},[1053,2005,1665],{"class":1066},[1053,2007,1071],{"class":1070},[1053,2009,1670],{"class":1066},[1053,2011,1349],{"class":1662},[1053,2013,1675],{"class":1070},[1053,2015,2016,2020,2023,2025,2028,2030,2032,2035,2037,2040,2042,2044,2046,2049,2051],{"class":1055,"line":1456},[1053,2017,2019],{"class":2018},"s7zQu","  for",[1053,2021,2022],{"class":1662}," (",[1053,2024,1832],{"class":1644},[1053,2026,2027],{"class":1062}," i",[1053,2029,1868],{"class":1070},[1053,2031,1841],{"class":1066},[1053,2033,2034],{"class":1070},";",[1053,2036,2027],{"class":1062},[1053,2038,2039],{"class":1070}," \u003C",[1053,2041,1736],{"class":1066},[1053,2043,2034],{"class":1070},[1053,2045,2027],{"class":1062},[1053,2047,2048],{"class":1070},"++",[1053,2050,1196],{"class":1662},[1053,2052,2053],{"class":1070},"{\n",[1053,2055,2056,2059,2061,2064,2066,2069,2071,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2101,2103,2105,2107,2110,2112,2115,2117],{"class":1055,"line":1461},[1053,2057,2058],{"class":1062},"    particles",[1053,2060,1334],{"class":1070},[1053,2062,2063],{"class":1058},"push",[1053,2065,1063],{"class":1662},[1053,2067,2068],{"class":1070},"{",[1053,2070,1865],{"class":1662},[1053,2072,2073],{"class":1070},":",[1053,2075,1775],{"class":1058},[1053,2077,1063],{"class":1662},[1053,2079,1768],{"class":1062},[1053,2081,1349],{"class":1662},[1053,2083,1071],{"class":1070},[1053,2085,1892],{"class":1662},[1053,2087,2073],{"class":1070},[1053,2089,1775],{"class":1058},[1053,2091,1063],{"class":1662},[1053,2093,1780],{"class":1062},[1053,2095,1349],{"class":1662},[1053,2097,1071],{"class":1070},[1053,2099,2100],{"class":1662}," t",[1053,2102,2073],{"class":1070},[1053,2104,1775],{"class":1058},[1053,2106,1063],{"class":1662},[1053,2108,2109],{"class":1066},"1000",[1053,2111,1196],{"class":1662},[1053,2113,2114],{"class":1070},"}",[1053,2116,1349],{"class":1662},[1053,2118,1675],{"class":1070},[1053,2120,2121],{"class":1055,"line":1467},[1053,2122,2123],{"class":1070},"  }\n",[1053,2125,2126],{"class":1055,"line":1473},[1053,2127,1694],{"class":1070},[1053,2129,2130],{"class":1055,"line":1479},[1053,2131,1442],{"emptyLinePlaceholder":65},[1053,2133,2134,2136,2138,2140],{"class":1055,"line":1485},[1053,2135,1645],{"class":1644},[1053,2137,1705],{"class":1058},[1053,2139,1651],{"class":1070},[1053,2141,1654],{"class":1070},[1053,2143,2144,2146,2148,2150,2152,2154,2156,2158],{"class":1055,"line":1491},[1053,2145,1680],{"class":1058},[1053,2147,1063],{"class":1662},[1053,2149,1685],{"class":1066},[1053,2151,1071],{"class":1070},[1053,2153,1074],{"class":1066},[1053,2155,1349],{"class":1662},[1053,2157,2034],{"class":1070},[1053,2159,2160],{"class":1199}," \u002F\u002F low alpha = trails\n",[1053,2162,2163,2165,2167,2169,2172,2175,2178,2180],{"class":1055,"line":1497},[1053,2164,2019],{"class":2018},[1053,2166,2022],{"class":1662},[1053,2168,1832],{"class":1644},[1053,2170,2171],{"class":1062}," p",[1053,2173,2174],{"class":1070}," of",[1053,2176,2177],{"class":1062}," particles",[1053,2179,1196],{"class":1662},[1053,2181,2053],{"class":1070},[1053,2183,2184,2187,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2210,2212,2215],{"class":1055,"line":1503},[1053,2185,2186],{"class":1062},"    p",[1053,2188,1334],{"class":1070},[1053,2190,1924],{"class":1062},[1053,2192,1945],{"class":1070},[1053,2194,1871],{"class":1058},[1053,2196,1063],{"class":1662},[1053,2198,23],{"class":1062},[1053,2200,1334],{"class":1070},[1053,2202,1876],{"class":1062},[1053,2204,1196],{"class":1662},[1053,2206,1269],{"class":1070},[1053,2208,2209],{"class":1066}," 4",[1053,2211,1305],{"class":1070},[1053,2213,2214],{"class":1066}," 2",[1053,2216,1675],{"class":1070},[1053,2218,2219,2221,2223,2226,2228,2230,2232,2234,2236,2238,2240,2243,2245,2247,2249,2251,2253],{"class":1055,"line":1508},[1053,2220,2186],{"class":1062},[1053,2222,1334],{"class":1070},[1053,2224,2225],{"class":1062},"y",[1053,2227,1945],{"class":1070},[1053,2229,1871],{"class":1058},[1053,2231,1063],{"class":1662},[1053,2233,23],{"class":1062},[1053,2235,1334],{"class":1070},[1053,2237,1876],{"class":1062},[1053,2239,1903],{"class":1070},[1053,2241,2242],{"class":1066}," 500",[1053,2244,1196],{"class":1662},[1053,2246,1269],{"class":1070},[1053,2248,2209],{"class":1066},[1053,2250,1305],{"class":1070},[1053,2252,2214],{"class":1066},[1053,2254,1675],{"class":1070},[1053,2256,2258,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279],{"class":1055,"line":2257},15,[1053,2259,2260],{"class":1058},"    point",[1053,2262,1063],{"class":1662},[1053,2264,23],{"class":1062},[1053,2266,1334],{"class":1070},[1053,2268,1924],{"class":1062},[1053,2270,1071],{"class":1070},[1053,2272,2171],{"class":1062},[1053,2274,1334],{"class":1070},[1053,2276,2225],{"class":1062},[1053,2278,1349],{"class":1662},[1053,2280,1675],{"class":1070},[1053,2282,2284,2286,2288,2290,2292,2294],{"class":1055,"line":2283},16,[1053,2285,2186],{"class":1062},[1053,2287,1334],{"class":1070},[1053,2289,1876],{"class":1062},[1053,2291,1945],{"class":1070},[1053,2293,1948],{"class":1066},[1053,2295,1675],{"class":1070},[1053,2297,2299],{"class":1055,"line":2298},17,[1053,2300,2123],{"class":1070},[1053,2302,2304],{"class":1055,"line":2303},18,[1053,2305,1694],{"class":1070},[18,2307,2309],{"id":2308},"bringing-it-back-to-video","Bringing it back to video",[23,2311,2312],{},"p5.js sketches can be recorded frame-by-frame and imported into After Effects as image sequences. Complex organic backgrounds, particle passes, texture layers — all faster to generate in code than to animate by hand.",[1129,2314,2315],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}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}",{"title":48,"searchDepth":49,"depth":49,"links":2317},[2318,2319,2320,2321],{"id":1633,"depth":49,"text":1634},{"id":1811,"depth":49,"text":1812},{"id":1960,"depth":49,"text":1961},{"id":2308,"depth":49,"text":2309},"3 December, 2025","What happens when you apply an animator's instincts — timing, rhythm, visual weight — to systems built from code? A look at creative coding through the lens of motion work.",[2325,2327],{"src":48,"alt":2326},"A generative sketch showing flowing particle trails built in p5.js",{"src":48,"alt":2328},"A grid of color-shifting rectangles animated with noise functions",{},"\u002Farticle\u002F0040_dummy_article",{"title":1617,"description":2323},"article\u002F0040_dummy_article",[2334,2335,2336,1148],"generative art","creative coding","p5.js",[2336,1155,1153],"RKmBbN3dF1C5dHmVYBY47LCiDnX54JqHY9wjzsWVmG4",{"id":2340,"title":2341,"body":2342,"date":2861,"description":2862,"extension":55,"images":2863,"meta":2868,"navigation":65,"path":2869,"seo":2870,"stem":2871,"tags":2872,"thumbnail":48,"tools":2876,"__hash__":2879},"articles\u002Farticle\u002F0050_dummy_article.md","From Motion Graphics to JavaScript",{"type":8,"value":2343,"toc":2856},[2344,2347,2351,2358,2418,2421,2623,2626,2630,2636,2739,2745,2843,2846,2850,2853],[23,2345,2346],{},"A lot of the most interesting animation happening right now isn't in video — it's in browsers. Scroll-triggered reveals, type that follows the cursor, interactive data viz. Same goal as motion work, totally different pipeline.",[18,2348,2350],{"id":2349},"what-carries-over","What carries over",[23,2352,2353,2354,2357],{},"Easing vocabulary is identical. ",[1050,2355,2356],{},"ease-in-out",", bezier curves — same model as After Effects, different syntax:",[1044,2359,2363],{"className":2360,"code":2361,"language":2362,"meta":48,"style":48},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",".box {\n  transition: transform 0.4s cubic-bezier(0.25, 0.1, 0.25, 1);\n}\n","css",[1050,2364,2365,2374,2414],{"__ignoreMap":48},[1053,2366,2367,2369,2372],{"class":1055,"line":124},[1053,2368,1334],{"class":1070},[1053,2370,2371],{"class":1523},"box",[1053,2373,1654],{"class":1070},[1053,2375,2376,2380,2382,2385,2388,2391,2393,2396,2398,2401,2403,2406,2408,2411],{"class":1055,"line":49},[1053,2377,2379],{"class":2378},"sqsOY","  transition",[1053,2381,2073],{"class":1070},[1053,2383,2384],{"class":1062}," transform ",[1053,2386,2387],{"class":1066},"0.4s",[1053,2389,2390],{"class":1058}," cubic-bezier",[1053,2392,1063],{"class":1070},[1053,2394,2395],{"class":1066},"0.25",[1053,2397,1071],{"class":1070},[1053,2399,2400],{"class":1066}," 0.1",[1053,2402,1071],{"class":1070},[1053,2404,2405],{"class":1066}," 0.25",[1053,2407,1071],{"class":1070},[1053,2409,2410],{"class":1066}," 1",[1053,2412,2413],{"class":1070},");\n",[1053,2415,2416],{"class":1055,"line":190},[1053,2417,1694],{"class":1070},[23,2419,2420],{},"And GSAP's timeline API maps almost directly to how you already think:",[1044,2422,2424],{"className":1046,"code":2423,"language":1048,"meta":48,"style":48},"gsap.timeline()\n  .from(\".headline\", { opacity: 0, y: 40, duration: 0.6, ease: \"power2.out\" })\n  .from(\".subhead\",  { opacity: 0, y: 20, duration: 0.4, ease: \"power2.out\" }, \"-=0.2\")\n  .from(\".body\",     { opacity: 0,         duration: 0.3 }, \"-=0.1\");\n",[1050,2425,2426,2439,2507,2574],{"__ignoreMap":48},[1053,2427,2428,2431,2433,2436],{"class":1055,"line":124},[1053,2429,2430],{"class":1062},"gsap",[1053,2432,1334],{"class":1070},[1053,2434,2435],{"class":1058},"timeline",[1053,2437,2438],{"class":1062},"()\n",[1053,2440,2441,2444,2447,2449,2451,2454,2456,2458,2461,2464,2466,2468,2470,2472,2474,2477,2479,2482,2484,2487,2489,2492,2494,2497,2500,2502,2505],{"class":1055,"line":49},[1053,2442,2443],{"class":1070},"  .",[1053,2445,2446],{"class":1058},"from",[1053,2448,1063],{"class":1062},[1053,2450,1220],{"class":1070},[1053,2452,2453],{"class":1223},".headline",[1053,2455,1220],{"class":1070},[1053,2457,1071],{"class":1070},[1053,2459,2460],{"class":1070}," {",[1053,2462,2463],{"class":1662}," opacity",[1053,2465,2073],{"class":1070},[1053,2467,1841],{"class":1066},[1053,2469,1071],{"class":1070},[1053,2471,1892],{"class":1662},[1053,2473,2073],{"class":1070},[1053,2475,2476],{"class":1066}," 40",[1053,2478,1071],{"class":1070},[1053,2480,2481],{"class":1662}," duration",[1053,2483,2073],{"class":1070},[1053,2485,2486],{"class":1066}," 0.6",[1053,2488,1071],{"class":1070},[1053,2490,2491],{"class":1662}," ease",[1053,2493,2073],{"class":1070},[1053,2495,2496],{"class":1070}," \"",[1053,2498,2499],{"class":1223},"power2.out",[1053,2501,1220],{"class":1070},[1053,2503,2504],{"class":1070}," }",[1053,2506,1077],{"class":1062},[1053,2508,2509,2511,2513,2515,2517,2520,2522,2524,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2550,2552,2554,2556,2558,2560,2562,2565,2567,2570,2572],{"class":1055,"line":190},[1053,2510,2443],{"class":1070},[1053,2512,2446],{"class":1058},[1053,2514,1063],{"class":1062},[1053,2516,1220],{"class":1070},[1053,2518,2519],{"class":1223},".subhead",[1053,2521,1220],{"class":1070},[1053,2523,1071],{"class":1070},[1053,2525,2526],{"class":1070},"  {",[1053,2528,2463],{"class":1662},[1053,2530,2073],{"class":1070},[1053,2532,1841],{"class":1066},[1053,2534,1071],{"class":1070},[1053,2536,1892],{"class":1662},[1053,2538,2073],{"class":1070},[1053,2540,1074],{"class":1066},[1053,2542,1071],{"class":1070},[1053,2544,2481],{"class":1662},[1053,2546,2073],{"class":1070},[1053,2548,2549],{"class":1066}," 0.4",[1053,2551,1071],{"class":1070},[1053,2553,2491],{"class":1662},[1053,2555,2073],{"class":1070},[1053,2557,2496],{"class":1070},[1053,2559,2499],{"class":1223},[1053,2561,1220],{"class":1070},[1053,2563,2564],{"class":1070}," },",[1053,2566,2496],{"class":1070},[1053,2568,2569],{"class":1223},"-=0.2",[1053,2571,1220],{"class":1070},[1053,2573,1077],{"class":1062},[1053,2575,2576,2578,2580,2582,2584,2587,2589,2591,2594,2596,2598,2600,2602,2605,2607,2610,2612,2614,2617,2619,2621],{"class":1055,"line":1450},[1053,2577,2443],{"class":1070},[1053,2579,2446],{"class":1058},[1053,2581,1063],{"class":1062},[1053,2583,1220],{"class":1070},[1053,2585,2586],{"class":1223},".body",[1053,2588,1220],{"class":1070},[1053,2590,1071],{"class":1070},[1053,2592,2593],{"class":1070},"     {",[1053,2595,2463],{"class":1662},[1053,2597,2073],{"class":1070},[1053,2599,1841],{"class":1066},[1053,2601,1071],{"class":1070},[1053,2603,2604],{"class":1662},"         duration",[1053,2606,2073],{"class":1070},[1053,2608,2609],{"class":1066}," 0.3",[1053,2611,2564],{"class":1070},[1053,2613,2496],{"class":1070},[1053,2615,2616],{"class":1223},"-=0.1",[1053,2618,1220],{"class":1070},[1053,2620,1349],{"class":1062},[1053,2622,1675],{"class":1070},[23,2624,2625],{},"Tweens, sequencing, overlap offsets — same mental model.",[18,2627,2629],{"id":2628},"whats-new","What's new",[23,2631,2632,2635],{},[1095,2633,2634],{},"Events"," replace the render button. Animation responds to what the user does:",[1044,2637,2639],{"className":1046,"code":2638,"language":1048,"meta":48,"style":48},"document.querySelector(\".btn\").addEventListener(\"mouseenter\", () => {\n  gsap.to(\".btn\", { scale: 1.05, duration: 0.2 });\n});\n",[1050,2640,2641,2686,2731],{"__ignoreMap":48},[1053,2642,2643,2646,2648,2651,2653,2655,2658,2660,2662,2664,2667,2669,2671,2674,2676,2678,2681,2684],{"class":1055,"line":124},[1053,2644,2645],{"class":1062},"document",[1053,2647,1334],{"class":1070},[1053,2649,2650],{"class":1058},"querySelector",[1053,2652,1063],{"class":1062},[1053,2654,1220],{"class":1070},[1053,2656,2657],{"class":1223},".btn",[1053,2659,1220],{"class":1070},[1053,2661,1349],{"class":1062},[1053,2663,1334],{"class":1070},[1053,2665,2666],{"class":1058},"addEventListener",[1053,2668,1063],{"class":1062},[1053,2670,1220],{"class":1070},[1053,2672,2673],{"class":1223},"mouseenter",[1053,2675,1220],{"class":1070},[1053,2677,1071],{"class":1070},[1053,2679,2680],{"class":1070}," ()",[1053,2682,2683],{"class":1644}," =>",[1053,2685,1654],{"class":1070},[1053,2687,2688,2691,2693,2696,2698,2700,2702,2704,2706,2708,2711,2713,2716,2718,2720,2722,2725,2727,2729],{"class":1055,"line":49},[1053,2689,2690],{"class":1062},"  gsap",[1053,2692,1334],{"class":1070},[1053,2694,2695],{"class":1058},"to",[1053,2697,1063],{"class":1662},[1053,2699,1220],{"class":1070},[1053,2701,2657],{"class":1223},[1053,2703,1220],{"class":1070},[1053,2705,1071],{"class":1070},[1053,2707,2460],{"class":1070},[1053,2709,2710],{"class":1662}," scale",[1053,2712,2073],{"class":1070},[1053,2714,2715],{"class":1066}," 1.05",[1053,2717,1071],{"class":1070},[1053,2719,2481],{"class":1662},[1053,2721,2073],{"class":1070},[1053,2723,2724],{"class":1066}," 0.2",[1053,2726,2504],{"class":1070},[1053,2728,1349],{"class":1662},[1053,2730,1675],{"class":1070},[1053,2732,2733,2735,2737],{"class":1055,"line":190},[1053,2734,2114],{"class":1070},[1053,2736,1349],{"class":1062},[1053,2738,1675],{"class":1070},[23,2740,2741,2744],{},[1095,2742,2743],{},"ScrollTrigger"," is where things get fun:",[1044,2746,2748],{"className":1046,"code":2747,"language":1048,"meta":48,"style":48},"gsap.from(\".panel\", {\n  scrollTrigger: { trigger: \".panel\", start: \"top 80%\" },\n  opacity: 0, y: 60, duration: 0.8\n});\n",[1050,2749,2750,2771,2808,2835],{"__ignoreMap":48},[1053,2751,2752,2754,2756,2758,2760,2762,2765,2767,2769],{"class":1055,"line":124},[1053,2753,2430],{"class":1062},[1053,2755,1334],{"class":1070},[1053,2757,2446],{"class":1058},[1053,2759,1063],{"class":1062},[1053,2761,1220],{"class":1070},[1053,2763,2764],{"class":1223},".panel",[1053,2766,1220],{"class":1070},[1053,2768,1071],{"class":1070},[1053,2770,1654],{"class":1070},[1053,2772,2773,2776,2778,2780,2783,2785,2787,2789,2791,2793,2796,2798,2800,2803,2805],{"class":1055,"line":49},[1053,2774,2775],{"class":1662},"  scrollTrigger",[1053,2777,2073],{"class":1070},[1053,2779,2460],{"class":1070},[1053,2781,2782],{"class":1662}," trigger",[1053,2784,2073],{"class":1070},[1053,2786,2496],{"class":1070},[1053,2788,2764],{"class":1223},[1053,2790,1220],{"class":1070},[1053,2792,1071],{"class":1070},[1053,2794,2795],{"class":1662}," start",[1053,2797,2073],{"class":1070},[1053,2799,2496],{"class":1070},[1053,2801,2802],{"class":1223},"top 80%",[1053,2804,1220],{"class":1070},[1053,2806,2807],{"class":1070}," },\n",[1053,2809,2810,2813,2815,2817,2819,2821,2823,2826,2828,2830,2832],{"class":1055,"line":190},[1053,2811,2812],{"class":1662},"  opacity",[1053,2814,2073],{"class":1070},[1053,2816,1841],{"class":1066},[1053,2818,1071],{"class":1070},[1053,2820,1892],{"class":1662},[1053,2822,2073],{"class":1070},[1053,2824,2825],{"class":1066}," 60",[1053,2827,1071],{"class":1070},[1053,2829,2481],{"class":1662},[1053,2831,2073],{"class":1070},[1053,2833,2834],{"class":1066}," 0.8\n",[1053,2836,2837,2839,2841],{"class":1055,"line":1450},[1053,2838,2114],{"class":1070},[1053,2840,1349],{"class":1062},[1053,2842,1675],{"class":1070},[23,2844,2845],{},"No render button. Save, switch to browser, refresh. The feedback loop is tight.",[18,2847,2849],{"id":2848},"where-to-start","Where to start",[23,2851,2852],{},"Install GSAP, open a blank HTML file, and try to recreate something you've already built in After Effects. The translation work teaches you more than any tutorial.",[1129,2854,2855],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":48,"searchDepth":49,"depth":49,"links":2857},[2858,2859,2860],{"id":2349,"depth":49,"text":2350},{"id":2628,"depth":49,"text":2629},{"id":2848,"depth":49,"text":2849},"22 January,2026","CSS animations and JavaScript give motion designers a new canvas. Here's what the transition actually looks like, and why your existing skills matter more than you'd think.",[2864,2866],{"src":48,"alt":2865},"A VS Code editor showing a GSAP timeline animation script",{"src":48,"alt":2867},"A browser preview of a smooth text reveal animation built with CSS",{},"\u002Farticle\u002F0050_dummy_article",{"title":2341,"description":2862},"article\u002F0050_dummy_article",[2873,2874,2875,2362,1151],"javascript","web animation","GSAP",[1155,2877,2875,2878],"CSS","VS Code","lsoXFcI0ptA7ssvcDxiaGQ3jZvAT8V4nK46u5qz208g",[2881],{"id":2882,"title":2883,"body":2884,"client":53,"date":53,"description":2891,"extension":55,"externalLinks":2892,"images":53,"meta":2896,"navigation":65,"path":2897,"seo":2898,"stem":2899,"subtitle":53,"tags":2900,"thumbnail":53,"tools":2905,"__hash__":2909},"software\u002Fsoftware\u002Ffilera.md","Filera",{"type":8,"value":2885,"toc":2889},[2886],[23,2887,2888],{},"Batch file renaming utility designed to process thousands of files simultaneously with powerful renaming patterns and rules. Built with a Rust backend and Vue 3\u002FTypeScript frontend. Features include batch renaming thousands of files at once and preview functionality before applying changes. Available for Windows, macOS (Apple Silicon and Intel), Debian Linux, RedHat Linux, and Linux AppImage.",{"title":48,"searchDepth":49,"depth":49,"links":2890},[],"Batch file renaming utility designed to process thousands of files simultaneously",[2893],{"label":2894,"url":2895},"GitHub","https:\u002F\u002Fgithub.com\u002Fjoncorv\u002Ffilera",{},"\u002Fsoftware\u002Ffilera",{"title":2883,"description":2891},"software\u002Ffilera",[2901,2902,2903,2904],"Batch Processing","File Management","Desktop Application","Open Source",[2906,2907,2908],"Rust","Vue 3","TypeScript","p3ZtPC8vdfL0izIKaJMLuelBLz9MbbdoPhljJVGV8kw",1776374631969]