Repository navigation
Home
Make new Ultima Online equipment that animates like the original: drop in a 3D model, fit it on the classic body, get client-ready sprites for all 35 actions and 8 directions.

▶ Watch the Fit Lab tour (MP4): the whole lab while the walk turns through all 8 facings.
SpriteMotion is a local, MIT-licensed content-authoring toolkit for the classic 2D Ultima Online client. You bring
a 3D item (or a mapped asset pack), place it on the animated UO body in a browser, and Blender renders transparent
equipment frames, a UOFiddler .vd file and client import packages. Your models, game data and generated content
stay on your machine.
Status: public development preview. The tools are available now, but fitting and rendering still need broader animation coverage and in-game validation. This is not a one-click installer, and there is no guarantee yet that every item fits every animation. See UO Parity Roadmap.
| Area | State |
|---|---|
| Content Studio | Import GLB/FBX/STL/BLEND items or pick a bundled CC0 starter, build a 5-action preview or a full 35-action build, review all 8 facings, download VD and import packages. |
| Fit Lab | Live 3D body through the UO camera, per-slot offset/rotation/scale/binding, scoped corrections per item, group, action and direction, body hiding under clothes, Blender render pane, undo/redo with 100-step history, autosave and 3 recoverable disk saves. |
| Blender Build Pipeline | 256x256 canvas with anchor (128,192), independent VD alpha/anchor validation, selective rebuilds that leave untouched blocks byte-identical. |
| Client staging | Patched copies of anim.mul/anim.idx, art.mul, tiledata and a cosmetic ModernUO/ServUO item class. Your source client is never modified. |
| CC0 starter equipment | Bundled, audited CC0 examples covering all 25 UO layer routes. |
| Sprite Pose Editor | The original reconstruction workflow: annotate sprites, fit a rig, render, compare. |
The goal is equipment indistinguishable in motion from original UO art. Still open: a full acceptance matrix (three items per slot across all 35 actions), a complete multi-layer outfit, mounted poses, cloaks and weapons on the new weapon bones, and an in-game test in a real client. Details and status per action group: UO Parity Roadmap.
You need your own, legally obtained Ultima Online client files. SpriteMotion ships no game data. Set
SPRITEMOTION_UO_SOURCEto your UO client folder (the one withanim.mul/anim.idx), either inlaunchers\_shared\config.bator as an environment variable. Without it, sprite extraction (original reference sprites), client staging and the outfit lab will not work.You also need the UO_Model3D source folder (v13, created by Levy), obtained separately, plus Blender 4.2+ (
SPRITEMOTION_BLENDERif not auto-detected) and Python 3.10+.
git clone https://github.com/DatMoshu/SpriteMotion.git
cd SpriteMotion
py -3 -m venv .venvs/spritemotion
.venvs/spritemotion/Scripts/python.exe -m pip install -e ".[test]"
.venvs/spritemotion/Scripts/python.exe tools/uo-content/pipeline.py setup --source "<extracted-UO_Model3D-folder>"
launchers/editor/workbench.bat cc0-starterContent Studio opens at http://127.0.0.1:8772 and Fit Lab at http://127.0.0.1:8774. Full walkthrough, Linux/macOS notes and every setting: Installation, then Quick Tour: Workbench.
Step-by-step, per task: goal, prerequisites, exact commands, expected output and common mistakes.
| Guide | Use it when |
|---|---|
| Fit a slot in Fit Lab | a part floats, pokes through or sits wrong in some animations or facings |
| Render an item end to end | you want finished frames, a .vd and an import package |
| Clean up with masking | the render has holes, or the body shows through the item |
| Troubleshoot a failing step | something fails and you don't know which part |
| Take content into GUO | you want SpriteMotion content staged for the GUO client and a private shard |
| Get started | Use the tools | Under the hood | Help out |
|---|---|---|---|
| Installation | Content Studio | Architecture | Contributing |
| Quick Tour: Workbench | Fit Lab | Data Contracts | UO Parity Roadmap |
| Gallery | Blender Build Pipeline | Asset Packs | FAQ |
| Glossary | Sprite Pose Editor |
SpriteMotion is a small project with a big target: every action, every facing, every slot, working in a real classic client. Useful help ranges from Blender/Python rigging work and web UI fixes to UO file-format knowledge, CC0 3D items, testing on Linux/macOS and equipping items on your own test shard.
Start with Contributing, pick an open item from the roadmap, and say hello in Discussions or the issue tracker.
SpriteMotion is MIT licensed · Repository · License · Third-party notices
Not affiliated with or endorsed by Electronic Arts or Broadsword. Ultima Online is a trademark of its owners. No game data is distributed with this project.
Start
Guides
- Fit a slot in Fit Lab
- Render an item end to end
- Clean up with masking
- Troubleshoot a failing step
- Take content into GUO
Tools
Reference
Project