An immersive, camera-based experience that recreates the woodsprites (atokirina') from James Cameron's Avatar, moving to the music.
I’ve been a huge fan of James Cameron’s work, especially Avatar. The way he came up with it always stuck with me. He saw the bioluminescent forest in a dream, started writing it in the early 90s, and then waited until 2009 for the technology to catch up to what he’d seen. That resonated with me, because I also get ideas in my dreams and then try to build them in the real world. A lot of my ideas come to me that way. And when I look at what he made, the craft and the effort behind it, it really is a masterpiece.
Step into the encounterBest on a laptop, camera on, sound up. It runs about two minutes.
In 2024 I built a very basic version of this for an interactive media course, in Java Processing. The woodsprites were just little glowing circles back then. They moved and glowed to the music: play any track, or honestly just scream at it, and the volume and the frequency drove both the glow and the movement. The louder and busier the sound got, the brighter they burned and the more they stirred. It was basic, and the scene itself stayed still, but the idea was already there.
Recently I started building on top of that, one idea after another. I could see the potential in it, so I kept going. What I really wanted was to stop watching it on a flat image and actually experience it, the way those immersive shows at Vivid Sydney feel. In the film, Jake Sully waits and the woodsprites drift over to him, settle on him, and lift off again once they’re done. When he waves them away, they scatter. I wanted to feel that for myself.
I started small, with the woodsprite itself. In the film they’re called the atokirina’. I honestly lost count of how many times I redesigned it. Here are the versions I went through, and how each one moved, along with some of the references I was working from.
53 versions
drag through the story
It took me almost 53 versions to get close to what you see in the movie Avatar. The movement, the physics, the glow. Let me walk you through them.
Then came the movement, making them feel alive. This is where it gets a bit technical. I also gave them a sense of spatial depth, so they feel like they’re actually in the room with you, closer to a VR or AR feeling than something on a screen.
There’s a moment in the film where Jake tries to shoo them away with his hand. I wanted people to get to do that too, as if these are living entities in your space and you can just wave them off. So when you wave at them they move away, and the way they react changes with speed. When they’re fleeing, the tentacles move fast. When they’re drifting toward you, slow. It’s that relationship between how fast they move and how the tentacles behave.
The next part was tracking, picking up the outline of a person in the camera so the woodsprites could come and land on them. A lot of the fixes I made around perching live here, getting them to actually sit on your body properly.
I also wanted to show what’s happening underneath. When the camera is reading you, there’s a skeleton and a set of markers, the blueprint of how your body is being recognized and how a woodsprite first finds its spot on you. I wanted people to actually see that, not just take my word for it.
This is nowhere near what the talented 3D artists out there have done, and I want to say that plainly. It’s a solo thing I designed and built in the browser with AI, as my own way of getting close to a scene I love.
The film and its Tree of Souls scene. James Horner’s score. MediaPipe for the pose and segmentation models. Processing, where the 2024 original was built. And the reference images I worked from.
I’ve loved the first Avatar for a long time, and not only the film. The story of how it got made stuck with me. Cameron says the glowing forest came to him in a dream. He wrote it down in the early 90s and then waited years, because the tools to put it on a screen didn’t exist yet. He sat on it until the world caught up to what was in his head.
That stayed with me, because my own ideas tend to arrive the same way. They come in dreams, or half formed in the back of my head, and most of what I do is try to pull them into something real. This project is one of those. It began with a question I couldn’t let go of. What makes a digital thing feel alive? My guess was that it has very little to do with detail or resolution. Something reads as alive when it responds to you. When it listens. That became the one rule I held everything to.
The first version came out of an interactive media course, built in Java Processing. The woodsprites were just little glowing circles then, standing in for the real thing. They moved and glowed to the music, so playing any track, or just screaming at it, changed both how brightly they burned and how much they moved. Volume and frequency drove all of it. It was basic and the scene stayed still, but it was enough to tell me the core feeling was worth chasing.
I wanted to stop watching it on a flat image and actually stand inside it, the way the immersive rooms at Vivid Sydney feel. The target was one scene: Jake waits, the woodsprites drift down and settle on him, and lift off again when they’re done.
The first thing I got wrong was the creature itself. In the 2024 version they were basically glowing dots, and glowing dots read as fireflies. The atokirina’ in the film are not that. They have a body. If you look at the frames, each one is a little seed with a bright core, a canopy of fine filaments spread above it, and thin tendrils trailing below. Closer to a jellyfish or a dandelion than a spark.
So I rebuilt the shape from the film frames, and then spent far longer on how it moves, because that is where the whole thing lives or dies. I made myself keep a few rules. The dome stays a fixed size and never scales in and out. Only the tentacles move. And the wave running through them has to be coherent, one clear pulse travelling from the crown down to the tips, anchored at the base, instead of a dozen loose threads wiggling on their own. Every time I broke those rules it looked like a screensaver. When I kept them, it started to look like it was actually swimming. I lost count of the redesigns.
Each creature is drawn procedurally on a 2D canvas, not a sprite sheet. The filaments are hashed per creature so lengths and spacing vary, the wave is one shared phase run down every tentacle so it stays coherent, and the glow is a cached stamp rather than a gradient rebuilt every frame, which is what kept the frame budget alive once there were forty of them.
Swimming got them moving, but they still felt mechanical. So I spent most of my time on the small things that have no real function and are the whole point.
The one that changed it most was working out what the music should do. My first instinct was to let the music move them, push them around on the beat, and it looked wrong straight away, like they were being puppeted. So I turned it around. Their bodies are their own. They wander and rest on their own timing, and the music plays their light instead of their movement. A drum hit sends a flash cascading through a few of them. The glow rises with the bass. They live their own lives and the song lights them up.
After that it was a pile of small details. Some are bolder and drift in sooner, some hang back. They pick a favorite spot on you and keep returning to it, so it feels like they remember. At rest they breathe, only just. If you hold your hand still for a couple of seconds, one will come and settle on your open palm. That is the moment from the film, and I never programmed it directly. It fell out of the other rules. You would not catch any of these on their own. You feel them together, and together is what reads as alive.
The beat detection is a bass onset compared against a rolling average, so it fires on real drum hits and not steady loudness. Favorite perches are remembered by a stable key on the body so a creature returns to the same place even as the tracking jitters. The palm landing is just the perch logic noticing a still wrist, so a discovered moment rather than a scripted one.
Getting them to move well was one thing. Getting them to feel like they were in the room with me was another. On a flat screen everything sits at the same distance, and that reads flat, like a picture on a wall. So I gave each one a depth. Some drift far back and small, some come in close and large, and the ones up front pass in front of the ones behind.
The part that sold it was what happens as one approaches. Instead of just sliding toward me, it grows as it comes, the way something actually getting closer does. That one change was the difference between a woodsprite crossing a screen and a woodsprite coming to me. After that the room stopped feeling like a window and started feeling like a space I was standing in.
There’s a moment in the film where Jake tries to shoo them away with his hand. I wanted people to get to do that too, as if these are living entities in your space and you can just wave them off. So when you wave at them they move away, and the way they react changes with speed. When they’re fleeing, the tentacles move fast. When they’re drifting toward you, slow.
It took multiple iterations to get that feel right. The hand is read from the camera, which updates in jittery fits, so the early versions fired in sudden jolts. The smoothness in what you see now comes from a few choices underneath.
The hand comes from the same pose model as the perches: wrist landmarks, every frame. Raw wrist speed is too jittery to use directly, so it gets low-passed, and anything under a deadzone counts as a still hand. Whatever is left sets the strength of a repel field around the hand. Each creature takes a push away from it that falls off with distance, added onto its velocity rather than replacing it, which is the difference between being pushed and being teleported. Perched creatures get a higher bar, so a hand passing near your shoulder doesn’t evict them, and a real wave does. The same smoothed speed drives the tentacle stroke rate, so a fleeing creature swims hard and a returning one slows down.
For them to land on you, the piece has to know where you are. I used body tracking through the camera to find your head, shoulders, arms, and torso, and those became the spots a woodsprite could sit on.
Getting them to actually sit well took more tries than anything else here. Early on, several would land in empty air beside me, because the code was placing perch points at fixed spots on the screen instead of on my real outline, so when I sat small or off to one side they had nowhere real to go. Others would stack on the exact same point and pile up instead of spreading out. I kept at it until each one claims its own spot, the nearest free one, and they only land where your silhouette actually is. When it works, they settle across your head and shoulders like they are reading the shape of you.
Pose landmarks place the joint perches; a segmentation mask gives the silhouette, and the outline perches are sampled only where the body actually is (the mid-air landings were perches placed on empty rows of the frame). Each landing claims a unique anchor, and the flock size is capped to the number of real perches so there is never a surplus with nowhere to go.
Somewhere in all of this it stopped feeling like a project I was debugging. There were evenings where I would look into the camera and forget I had written any of it. The woodsprites would come down and settle on my shoulders and I would just sit there. For a few seconds it was the scene, and I was in it. That is the whole reason I built it.
Underneath the magic there is a blueprint. When the camera reads you, it builds a skeleton and a set of markers across your body, and those markers are the spots the woodsprites choose from when they come to sit. I want you to see that layer for yourself, not just take my word for it.
Around fifty versions sit between the first dots and what you see now. Here is that history as one thing you can hold: drag through it, and the creatures morph back through their own versions, from the 2024 circles to the feathered thing that finds you today.
I want to be clear about what this is. It is nowhere near what the 3D and VFX artists who do this for a living can make. I built it on my own, in a web browser, running live off a webcam, doing both the design and the code. It is a study, my way of getting close to a scene that has stayed with me for years. Holding it next to my 2024 version, a hundred glowing dots reacting to volume, is the part I am most glad about. It shows how far one stubborn idea can travel once you keep pulling on it.
The film and its Tree of Souls scene, which this whole project is an homage to. James Horner’s score. MediaPipe, for the pose and segmentation models that let it find you. Processing, where the 2024 original was built. And the reference stills and concept frames I worked from while redesigning the creature.
These are all the experiments, trials, and explorations I made while building this project. They were never meant to be perfect. Just things I tried along the way, and I decided to keep them here in my archive.