← Work / 001
In development

NPCMotion

AI motion generation for Roblox

Text and video in, rig-ready animation out — with the GPU tier scaling independently of the web app.

Type ML Infrastructure
Context Salinash Studio
Date 2025 — Present
Role Architecture, ML Infra, Full-Stack
/ Outcomes
2 Motion models in production
3 OAuth providers integrated
R15 Roblox rig supported end to end

NPCMotion turns a text prompt or a reference video into an animation that drops straight onto Roblox’s R15 character rig. The whole path is owned in-house: request intake, model inference, retargeting, and rig-ready output.

The hard constraint is economics. Motion-generation models need GPUs; a web app does not. Putting both on the same machine means paying for idle accelerators, so the architecture splits them from the start.

/ Deliverables
  • ML inference architecture
  • Phoenix/Elixir orchestration API
  • Next.js application
  • Multi-provider OAuth
  • Hetzner deployment
/ Role
  • Architecture, ML Infra, Full-Stack
  • Salinash Studio
  • In development

What made this hard

Motion models are expensive to keep warm and bursty in demand. A naive deployment either burns money on idle GPU time or leaves users queueing behind a single worker.

Generated motion also has to land on a specific target — Roblox’s R15 skeleton — which means raw model output is only ever the middle of the pipeline, not the end of it.

How it was built

/ 01

Serverless GPU inference

The HY-Motion and Kimodo motion-generation models are deployed as serverless GPU inference on Modal. ML compute is separated from the web tier entirely, so GPU capacity scales with demand rather than with traffic to the marketing site.

/ 02

Elixir orchestration layer

A Phoenix/Elixir backend brokers generation requests between the web app and the GPU workers — the BEAM’s concurrency model fits a workload that is mostly waiting on long-running jobs.

/ 03

Rig-aware output pipeline

Model output is processed into animation that targets Roblox’s R15 rig, so what users download is usable in-engine instead of a generic motion file they have to retarget themselves.

/ 04

Frontend and identity

A Next.js front end built with shadcn/ui and Tailwind, deployed on Hetzner, with multi-provider OAuth across Discord, Google and Roblox — the three accounts this audience already has.

What it runs on

Next.jsElixirPhoenixPythonModalshadcn/uiTailwindHetznerOAuth2
/ Next Project DICOM Viewer Pro →

Got something to build?
Let's scope it properly.

Reach the studio at [email protected]

London, UK Est. 2023 +44 7479 865538