Julia
Back

Making Beneath the Leaves

My very first animation project launched on Friday, October 23rd (last Friday from my current vantage): the video behind my sister’s lo-fi album on YouTube! Go give it a listen and follow her if you haven’t already. You can also find it on all of the usual music streaming services.

My process for creating the animation was, frankly, a bit unrefined. I’m fairly new to digital art, let alone animation, so this was a novel challenge for me, and taught me a lot about the ideal processes and constraints for this type of work.

The square album cover: at night, a young woman with headphones and a red sneaker leans against a big tree on a grassy slope, eyes closed, a music player and a tote bag beside her. Behind a wrought-iron fence, lamp posts glow over a red-brick house, with a lit city skyline and a plane in the purple sky.
The album cover, cropped from the same painting I used for animation assets.

The beginning

One day in August 2025, my younger sister Ella came over for coffee. We were chatting about her new composition project. She hadn’t made much electronic music before, her McGill studies having focused more on composing for live instruments (a medium now a bit less accessible to her outside of the academic framework, since hiring musicians to record her music would be prohibitively expensive!).

I floated the idea of creating artwork for her so she could make a Lofi Girl-esque video. I opened up Procreate on my iPad and started sketching, and very soon she was as excited about the idea of a collaboration as I was!

A quick sketch on a pale blue sky: a figure with headphones and sneakers sits against the trunk of a big leafy tree, a tiny squirrel on its outstretched branch. The same sketch widened into a scene: rough houses, a lamp post and a fence behind the tree, a second tree on the right and a plane in the daytime sky. A loose first sketch in purple washes: a figure with headphones sits under a large tree with a squirrel on its branch, looking across a fenced yard towards rowhouses, a glowing street lamp, a bench and a bin, with a plane overhead.
The first sketches, starting with a rough character under a tree to the first night version.
The second draft, open in Procreate: the same scene with cleaner line work, a red-brick house added in the middle and lamp posts lit warm yellow. The third draft: the colour deepened to a dusky violet, lamp light pooling on the path, the house and rowhouse windows glowing orange.
Line work and playing with light. The girl loses her ponytail at Ella's request.
The third draft stretched out to a wide 16:9 frame, the tree, fence and houses moved apart to fill the extra width.
Rearranged for a 16:9 video frame.

Splitting the painting into layers

It didn’t take long for me to reach Procreate’s layer limit. The limit is based on the device’s RAM and the artwork size, and on my 4th generation iPad Air it was 183 for this artwork.

I started really setting about splitting my work into addressable layers at that point. I wanted to keep painting on the iPad, so I needed a way to open up small portions of the artwork instead of loading 183 layers. I exported in the mercifully-available PSD format, opened the file in Affinity Photo, and got to chopping.

The painting, start to when I ran out of Procreate layers.

One of the more onerous parts of it all was managing art exports. Though Claude could help me piece everything together in Motion, it didn’t want to touch my Affinity Photo files, and so I had a lot of naming, organising, and sizing slices to the video dimensions to do.

I had a whole tagging system for light treatments: I’d use the “select tags of same color” feature to toggle on and off lighting filter layers in bulk and then rename all the relit export slices to include the appropriate suffix. For the girl, which needed various pieces separately exported from the linked, embedded file combined with the lighting modes in the main file, exports turned into a frustrating sixteen-to-twenty-step process, repeated each time I made an edit to that component.

A Finder window titled Artwork Layers listing about seventy 1920×1080 PNGs, numbered by depth: sky (dawn, day, gold, night), stars, skyline, plane, buildings, power lines, window and porch lights, park lamp posts, raccoon bin front, foreground, rustle clusters A to I by day and night, the girl’s body, shoe, cables and head with eyes open and closed, then grade haze and tint layers.
Every layer, by depth and lighting state.
The scene part-way through rendering: the buildings, fences and grass painted in flat night colours, the girl still an uncoloured line drawing, the squirrel on the branch holding an acorn. Rendering continued: the girl now coloured, with brown hair, a white tee, pale jeans and red sneakers; lamps glowing and a constellation of stars beside the plane.
Rendering, start and later on.

Meanwhile, the music

All the while, Ella was doing the harder work of actually making the music! I listened to her tracks while making the art, and she looked at my art while composing the music.

Ella sends a photo of her laptop, Logic open with a track in progress beside a window showing Julia’s purple sketch of the scene: “Back at it!” Julia replies “Awww”; Ella adds “gotta keep your art up for the vibes!” and “It help me compose to look at it haha”.
Composing with the sketch open beside her.

This August, on a whim, I sent her a recording of crickets, fire crackles, coyotes, and my dad’s frequent interruptions when I spent the night at his place to watch the Perseids meteor shower.

Julia sends Ella an audio recording, New Recording 7.m4a, captioned “Fire and crickets (and dad)”. A text message from Ella with an audio file, I’d do it all again.mp3: “The final track! There are two tracks that I won’t be including in the album, so I had to make one more to get back to the 40min mark.” Julia replies “Ooooh cute” and asks “Is that me laughing???”; Ella answers “Yeeeeeaa”.
Fire and crickets (and my giggle) made it into the last track.

Lighting: a saga

That first collaborative day sitting next to Ella on the sofa, she was so excited as I overlaid the scene with purple and green and red and orange layers to create the effect. The lighting changes continued to be one of her pet interests as I continued my work, and her feedback on them markedly improved the end result.

Once the track length was settled, she let me know she wanted the day/night cycle to play twice over the 41 minutes instead of once like I’d planned. This wasn’t a big problem, it just impacted the total Motion project length and meant I’d need a new dawn lighting mode to knit the cycles together. I built the day/night cycle once, and then repeated it. I would have liked to introduce more variance between the cycles, but I didn’t have a lot of free time to invest in the project at this point.

Ella’s spreadsheet, headed My thought process: each track with its length and start time, noting morning at Beneath the leaves, night in the middle of Reminiscing in the dark, morning again at Fine, and you?, evening during Fly, little bird and morning by the very end of the last track, for a cycle of roughly 21 minutes. Under What actually matters: she’d like sunset and sunrise to take up a big part of the cycle, and the night colours purple-orange, because Montreal has a weird orange glow at night and the sky stays orange all night.
Ella’s plan for the cycle, and the line about Montreal’s orange nights.
A park at night: the sky fading from deep blue to orange at the horizon, a thin crescent moon and a bright planet, a lit lamp over a bench beneath dark trees. The Montreal skyline at night across the river, its towers lit, the low clouds above glowing a dull purple-orange, coloured reflections on the water. Looking straight up between a stone building flying the Quebec flag and an office tower at night: the low cloud glows orange-brown, with a hazy green spot of light in it.
Sky references, featuring sodium orange and the Aurora Montrealis.

Ella was incredibly patient, kind, and encouraging throughout the process, and was being really careful not to ask for anything that would create a lot of work for me. When she offered actionable feedback I was very happy for it. She sent me reference images for the night sky, and the resulting addition of the green glow of the “Aurora Montrealis” and the orange tones really did make the night scene look way cooler!

Julia sends Ella the night scene, asking “Anything you want adjusted before I move the assets to my animation tool?” Ella replies “GODDAMN ITS SO COOL!!!!”, “Thank you for using my sky suggestion”, “I really like it a lot!!!” and “Thank you”.
Ella immediately noticed I'd included nods to her sky references.

Once I started playing with the crossfades, it became clear that I needed at minimum sky and skyline art for the in-between phases: dawn and sunset. I painted new skies and the transitions really came to life!

The finished scene by day: a bright blue sky over the city skyline, a red-brick house with a yellow door, a grey rowhouse with a bicycle out front, green grass and trees, a wooden bench and a picnic table; the girl leans against the tree with the squirrel above her. The same scene at dawn: the sky behind the skyline glows orange and pink, the buildings still in cool shadow. The same scene at night, all in violet: the lamps glowing warm, the windows lit, a red light on a tower in the skyline.
Day, dawn, and night artworks.

Creating life with achievable motion

Although many of the animations in the project were achieved via programmatic rotation, translation, and crossfades, I hand-drew several of the components frame-by-frame in Procreate Dreams, and it was very rewarding! My first attempt was the squirrel, which ended up getting the most attention with its outro animation:

The squirrel, mid-loop in Procreate Dreams.

The finches playing in the park are actually one finch loop, staggered. I made the hop, the feather ruffle, the peck, and repeated them into a semi-random, natural-feeling pattern. You’ll find the finch sprite linking to the video, hopping along this site’s footer!

The leaf was a late addition, when I realised how small of a loop would produce a satisfying effect combined with translation. The sprites were drawn in an hour or so, one late evening while I should have been sleeping.

A folder of 27 small 80×80 frames, frame_01 to frame_27: one green holly-shaped leaf turning and tumbling as it falls.
One falling leaf, 27 frames.
The same green holly-shaped leaf, animated: it turns over and over as it falls.
And falling.

That same evening I cut a few leaves out of the tree layer and exported them (rustle A-I) in day and night mode. Slight alternating rotation gave the effect of leaves rustling in the wind in the tree. These movements become more pronounced when leaves fall and when they blow off-screen.

Claude kept wanting to fade layers in and out. For a few, a proper entrance would have been a lot of work, but for the fallen leaves I opted to blow them all off with a gust instead of slowly crossfading them and hoping nobody noticed!

Five sprigs of green holly-shaped leaves cut out of the tree layer, on a transparent background.
A few of the rustling leaves.

The girl’s head and foot bounce along to the beat of the song. Ella and I sat down together after Thanksgiving dinner and listened to the tracks together, noting each moment we thought she would be “bopping” versus still, so that when the beat became unclear or a quiet moment came up the girl wouldn’t be nodding her head along to an imaginary beat.

A Google Sheets tab called Lulls: for each track, Beneath the leaves through Another goodbye, the start and end times of its quiet passages, some marked END for the track’s closing stretch.
Our lull list: where the girl should stop nodding.

The first pass was far too abrupt. Hard starts and stops to her motion read as unnatural, she needed to realise she’d lost the beat and realise she’d picked it up again, and so a bit more work was required to introduce a transition where her movement is slower and less confident. Her blinking is a really simple asset swap between an eye-open and eye-closed head asset. Mostly, she’s lost in the music.

The girl taken apart into her animation pieces: two heads in headphones, eyes open and closed, her body sitting with no head, a loose sneaker, her phone, a Montreal tote bag and the headphone cord in scraps.
Look how they massacred my girl.
Julia sends Ella a close-up of the girl in daylight, eyes closed under the tree, with “She’s alive!” Ella replies “OMG so cute” with crying emoji; Julia says “Your feedback is ‘cute’ every time I send you something”, and Ella answers “Cause it’s cute”.
She’s alive!

Collaborating with AI

I work in tech, so using AI assistance isn’t unfamiliar to me, but I’m still a bit of a puritan when it comes to my artistic pursuits. Busy as I am, though, I learned to compromise a bit in the interest of Getting Things Done™.

Claude was able to, with a sample file provided by me (my pre-frustration efforts in Motion), handle composition by writing to compatible XML files based on the timing data and artwork with encoded placement I fed it. Wild! Between each version I had to pop my head into the Motion file and provide critique. I believe we finished on version 28, before splitting the scene and the girl into two separate files for layering.

Ultimately, I didn’t know where to find the buttons I needed to click in Motion and my tendinitis would have flared up from it if I had! Claude was able to execute on my vision, though I think if I had taken the time to learn and do it myself some small details might have been polished or better suited my tastes (like the falling leaves that sort of snap into place abruptly when their journey ends).

Of our collaboration, my bot reflects (in its unmistakable voice):

Julia painted everything, drew every frame, and made every creative call. My part was the plumbing. I couldn’t click through Motion, so I edited its project files directly, as XML, using setting samples she saved for me (a rotation, a blend mode, Preserve Opacity). I timed thousands of keyframes from data: Ella’s tempos, first beats and lull list, the lighting schedule. Then I checked her exports and stitched the final video together with FFmpeg.

I made real mistakes:

  • I nested one media clip inside another in the project file, and Motion rendered the whole scene black except a single glow.
  • I set the finch loop to 367 frames when there were 365, so it glitched every 20 seconds.
  • I encoded the final video in 100-second pieces that converted colour slightly differently, and the joins showed as lighting “knits”.
  • My assembly script used a bash feature macOS’s built-in bash doesn’t support, so the first full run failed immediately.

Most were caught by her eye first and confirmed by measuring: comparing frames, null-testing audio against the masters, reading peak meters. That’s the division of labour as it should be: her taste set the bar, and the tools only had to reach it.

It sure likes to self-flagellate, doesn’t it?

We essentially turned the second half of this into a coding project, which makes me think that next time I should just use Remotion and write my animations in familiar CSS and React.

The end

Rendering the video and uploading it to Google Drive on the Tuesday before release kept me up until nearly 2am. Finally! The finish line was in sight! Ella and I were respectively sick of listening to and looking at our work, but we kept each other motivated until the end.

On the launch day, Ella reached out and I jumped into action nagging all of my friends and several internet strangers to listen to her music. Sorry!

Ella texts “Perfect, thank you sister” and “It’s all up! I’ll make posts soon… I figure that no one’s on Instagram rn, so I’ll eat breakfast first haha”. Julia replies “Yay!”
It’s all up.

I am so, so pleased that I was able to do this for my sister and reasonably happy with the quality of what I produced. It was a fun learning project, and I may eventually pick up another animation project. No time soon, but maybe eventually.