I wanted to make a game. Getting a character to walk became a whole side quest. Training Grounds lets you preview 3D motion, export eight-frame sprite guides, and copy a prompt for your image generator. Walking, breathing, four directions, and local animated GLB import. Free and open source.
I wanted to build a small tactical RPG. I thought getting a pixel character to walk would be the easy part.
Well…
We tried different prompts, frame counts, and sprite-sheet layouts. Pretty frames didn't always make a good walk. Feet slid. Poses repeated.
Working with Astra in Codex, I could keep testing another approach: build the motion in Three.js, export the poses, then ask ImageGen to turn each pose into the character from a still image. I reviewed the results; we kept revising until the walk felt right.
That changed what I wanted to share. A workflow for one character became Training Grounds: a free, open-source browser tool where other makers can adjust the view, export motion guides and prompts, or try their own animated GLB.
It doesn't make AI animation perfect. It gives the image generator something concrete to follow.
I came here to make a game. Somehow, I also made a small tool for people trying to make theirs.
Hi everyone, Andy here.
I wanted to build a game. I thought getting a little character to walk would be the easy part.
Well…
After trying different prompts and sprite-sheet layouts, a 3D motion guide finally gave us something we liked. So I made that part into a small tool.
Training Grounds lets you choose a motion, adjust the camera, and export eight poses with a prompt. Bring your original character still to your own image generator. You can also open an animated GLB locally.
I built this with Codex during the Astra challenge. Three.js handles the guide, Quaternius provides the source walking motion, and ImageGen made the Hua example. Image generation is a separate step; there is no generation API hiding behind the download button.
It helped my character finally walk. I hope it helps yours too.
What movement would you want to try next?
miniDot
miniDot