PromptMotion
Two animation tools, one Unity asset. Generate humanoid clips from text prompts with the online Generator, or drop pre-baked clips from the offline Library. Same Avatar, same workflow, one purchase.
⚡ Generator
Online AI text-to-animation. Type a prompt, get a humanoid FBX in ~38–83 s.
☷ Library
Five bundled clips. Drag, drop, animate. No backend, no waiting, no quota.
🔒 Invoice Activation
Paste your Unity Asset Store invoice, click Verify. No accounts, no API keys.
⏲ Monthly Allowance
50 generations per month included. Cached prompts are free.
✏ Plain English Prompts
"walking forward confidently", "waving hello with the right hand". Describe motion, not character.
🧍 Any Humanoid Rig
Mixamo, Synty, Quaternius, custom — if Unity calls it Humanoid, we can drive it.
This document covers both tools. Generator-specific topics are grouped under Generator; Library-specific topics under Library. Sections that apply to both live under Concepts and Reference.
Installation
Import once. Both tools light up immediately.
From the Unity Asset Store
In Unity 6000.0 or later, open
Window → Package Manager and switch the dropdown to My Assets.Accept the import dialog with everything checked. The package lands at
Assets/PromptMotion/.Unity recompiles editor scripts. The first time takes ~30 s; subsequent imports are faster.
Window → PromptMotion → Generator for the AI tool, or Window → PromptMotion → Animation Library for the bundled clip browser.Prerequisites
PromptMotion uses two Unity packages that ship with a default Unity 6 install:
com.unity.editorcoroutines≥ 1.0.0com.unity.nuget.newtonsoft-json≥ 3.2.1
If your project doesn't already have Newtonsoft.Json, Unity prompts to add it on first import. Click Yes.
What gets installed
Assets/PromptMotion/
Generator/ // AI generator window + auth + HTTP
Editor/
Library/ // Bundled clip browser + 5 starter clips
Editor/
StarterClips/ // .anim files retargetable to any Humanoid
Shared/ // ClipApplier, Avatar validators, Preview viewport
Generated/ // Output folder created on first generation
Controllers/ // Per-character AnimatorControllers
Documentation/ // You are hereProject
Quick Start: Generator
Zero to your first generated clip in about a minute (plus generation time).
Menu:
Window → PromptMotion → Generator.It looks like
IN_xxxxxxxxxxxxxxx and was emailed to you when you purchased the asset (also visible at assetstore.unity.com → My Account → My Orders). Click Verify. Activation takes a few seconds.Select a Humanoid character in your scene Hierarchy, or drag a prefab into the character slot. The window validates the rig and shows a green checkmark when ready.
Describe the motion: "walking forward confidently", "sitting down on a chair, then standing back up", "waving hello with the right hand". Set duration (1–10 s; default 4 s).
Wait ~38 s (warm) or ~83 s (cold start). The button counts elapsed seconds. When done, the FBX is saved under
Assets/PromptMotion/Generated/ and the clip is auto-applied to your character.Press Play in the Unity editor to see the clip on your character. See How It Works for what happens behind the scenes.
(prompt, duration, seed) returns the previously-generated FBX in milliseconds and uses none of your monthly allowance. The status banner reads ✓ Cached result — no allowance used.Quick Start: Library
No invoice. No internet. No waiting.
The drag-and-drop path
In the Project window, browse to
Assets/PromptMotion/Library/StarterClips/. Or open Window → PromptMotion → Animation Library for the visual browser.Drag any
.anim from the Library directly onto a Humanoid GameObject in the scene that has an Animator component. Unity creates an Animator Controller if needed and adds the clip as the default state.The character animates immediately. No backend, no waiting, no quota.
The Animation Library window
For browsing more than a handful of clips, the dedicated window provides a Mixamo-style three-pane layout:
Drop your character into the slot once; click any clip card to preview it on your rig; click Apply to wire it into the controller.
How It Works
A single round-trip from the Editor to the PromptMotion backend.
- You type a prompt and click ⚡ Generate.
- The window posts
{ prompt, duration_seconds, seed }tohttps://api.promptmotion.dev/prod/generatewith your invoice as authentication. - The backend runs the prompt through NVIDIA's Kimodo (SOMA-RP) text-to-motion model.
- The raw motion is retargeted to a standard Humanoid skeleton on the server.
- The server returns a Mecanim-ready
.fbxfile. - The client saves the FBX under
Assets/PromptMotion/Generated/. AnAssetPostprocessorauto-configures it as Animation Type: Humanoid. - The window applies the resulting
AnimationClipto your selected character viaClipApplier.
You don't need to know anything about Kimodo, retargeting, or import settings — the pipeline is fully automated. The output is a standard Unity AnimationClip; you can edit, blend, retarget, mask, or layer it like any other clip.
AnimationClip and works in any build target Unity supports (standalone, mobile, console, WebGL). You can't generate new animations from a runtime build.Activation
Your Unity Asset Store invoice number activates the asset. No signup, no API key.
How activation works
Click Verify in the Generator window after pasting your invoice. The window confirms with the server that the invoice is valid. The whole process takes a few seconds.
Working across multiple installations
Your invoice activates the asset across all your installations. Paste your invoice number anywhere you've installed PromptMotion and it will work — quota is shared across installations.
Forgetting an invoice
Open Window → PromptMotion → Settings and click Forget invoice to clear your locally stored invoice. You can paste it again any time.
What gets sent to the server
Only this:
- Your invoice number (HTTPS, in the JSON body).
- The prompt text you typed.
- Duration and optional seed.
- A client version string.
Not sent: real name, email, IP (other than what's inherent to HTTPS), Unity Editor analytics, scene contents, or any telemetry beyond the above.
Monthly Allowance
50 generations per month included. Cached prompts use none of your allowance.
How the allowance works
Every successful generation uses one of your 50 monthly generations. Cached results — identical (prompt, duration, seed) — do not count against your allowance. Your next allowance is issued automatically each month.
The Ready banner shows your remaining count, for example: 47 of 50 generations remaining this month. Next allowance arrives in 12 days.
What happens when the monthly limit is reached
- The status banner indicates the monthly limit is reached.
- The window shows when your next allowance arrives.
- Existing generations and cached prompts continue to work — only new generations are paused until the next allowance.
- You can keep working with the bundled Library clips, which use none of your allowance.
Writing Prompts
Describe the motion. The model never sees your character.
Prompts that work well
- "walking forward confidently"
- "running and jumping over a low obstacle"
- "sitting down on a chair, then standing back up"
- "waving hello with the right hand"
- "stumbling backwards as if pushed"
- "crouching slowly, then aiming a bow"
Prompts that work less well
- Character descriptions — "a tall warrior": ignored. The model sees motion verbs only.
- Camera or shot direction — "close-up of feet": output is a clip, not a render.
- Multi-character interactions — "two people fighting": output is one humanoid.
- Specific timing — "walk for 1.7 s, then turn": duration is set by the slider; phasing is approximate.
Current model limitations
Hand pose is a fixed default. The model doesn't pose individual fingers.
Output is body skeleton only. Faces stay neutral.
No interactions with other rigs, props, or scene geometry.
If your prompt's natural length is shorter than the duration, the model may pad with idling. Pick a duration that matches.
Duration & seed
Duration: integer between 1 and 10 seconds. Longer clips take slightly longer to generate but use the same single generation from your allowance.
Seed: leave blank to let the server randomize. Set a specific integer to make the output reproducible — same prompt + same duration + same seed = same FBX (and a cache hit).
(prompt, duration, seed). Whitespace and capitalisation differences produce distinct cache entries. Typo'ing the same phrase twice uses two of your monthly generations.Character Requirements
Both tools require a Humanoid rig. Generic skeletons aren't supported in v1.0.
What "Humanoid" means here
- The character has an
Animatorcomponent. - Its Avatar is configured with Animation Type = Humanoid (Import Settings → Rig tab).
- Unity reports the Avatar as valid (no broken bone mappings).
Validator badges
Drop a character into the slot and the window checks:
| Badge | State | What to do |
|---|---|---|
| ✓ Valid | Animator + valid Humanoid Avatar present. | Ready to generate / apply. |
| ⚠ No Avatar | Rig has bones but the Avatar slot is empty. | Click Auto-Configure to build one from bone names. |
| ✗ No Animator | The GameObject has no Animator. | Add an Animator component, assign a Humanoid Avatar. |
| ✗ Generic | Avatar is configured but as Generic, not Humanoid. | Re-import the model with Animation Type = Humanoid. |
| ✗ Invalid bone mapping | Avatar exists but Unity considers it broken. | Re-import the model. |
T-pose preferred
Characters configured from a clean T-pose retarget cleanest. A-pose works but may produce slight shoulder offset on extreme clips. Bind-pose-flopped rigs (one arm forward) often produce wrong shoulder rotation — re-import in T-pose if you see shoulders pop.
Generated Files
Where things land, how they're named, what else gets created.
Output location
Every generated FBX lands in:
Assets/PromptMotion/Generated/Path
Naming convention
Each filename embeds the backend's job id, e.g. job_a8f3c1e9.fbx. The job id is unique per generation; cache hits return the same file rather than producing a duplicate.
What gets created besides the FBX
- The FBX at
Assets/PromptMotion/Generated/{job_id}.fbx, auto-imported as Humanoid. - An Animator Controller at
Assets/PromptMotion/Generated/Controllers/{character}_Controller.controller, one per character. Re-applying clips to the same character updates this same file.
Regenerating with the same prompt
If the cache key matches, no new file is created — the existing FBX is returned. If the seed changes (or you click Random), a fresh FBX is written under a new job id; both files coexist.
.gitignored by default to keep churn out of repos used by teams.Settings
A single ScriptableObject configures the Generator. No secrets, safe to commit.
Settings live as a ScriptableObject at Assets/PromptMotion/Generator/Editor/Settings/Settings.asset. Select it in the Project window to edit in the Inspector.
| Field | Default | Description |
|---|---|---|
Base Url | https://api.promptmotion.dev | The backend endpoint. Override only if you're running a self-hosted backend. |
Output Folder | Assets/PromptMotion/Generated | Where downloaded FBXes land. Must be inside Assets/. |
Default Duration Seconds | 4 | Pre-fill for the duration slider on a fresh prompt. |
Verify Timeout Seconds | 10 | How long to wait for invoice probe / bind responses. |
Status Timeout Seconds | 10 | How long to wait for status / refresh calls. |
Generate Timeout Seconds | 180 | Cap for the generation request. Cold starts can hit ~83 s; 180 s leaves headroom. |
Verbose Logging | false | Logs every step (window open, generation start/complete, account refresh, import config) to the Console with [PromptMotion] prefix. Warnings and errors always log regardless. |
Your invoice number is stored separately in EditorPrefs (base64'd, XOR-obfuscated) and is never written to an asset.
Library: Overview
Pre-baked humanoid clips, bundled. Offline, instant, free.
The Library is a small set of pre-generated humanoid clips bundled directly inside the asset. They ship as standard Unity AnimationClip assets that retarget to any Humanoid character — no backend, no internet, no quota.
Why a Library at all, when the Generator exists?
Asset Store reviewers and customers behind corporate firewalls can use the asset without internet.
See output quality before using your monthly allowance.
Common motions covered out of the box.
Your prototype keeps moving even when you can't reach the backend.
The Library and the Generator share the same Humanoid Avatar foundation, the same ClipApplier, and the same auto-import behaviour. A clip from the Library and a clip from the Generator are interchangeable in your AnimatorController.
Library: Clips Included
Five hand-picked starter clips covering common motions.
Each clip was generated by the Generator, manually reviewed, and curated to demonstrate the kinds of output you can expect. All five are configured for Humanoid retargeting and ship as standalone .anim files at Assets/PromptMotion/Library/StarterClips/.
♬ [clip_name_1]
[~Xs] [Locomotion] — [Description, e.g. "Confident forward walk, idle-to-walk-to-idle, loops cleanly."]
♬ [clip_name_2]
[~Xs] [Category] — [Short description.]
♬ [clip_name_3]
[~Xs] [Category] — [Short description.]
♬ [clip_name_4]
[~Xs] [Category] — [Short description.]
♬ [clip_name_5]
[~Xs] [Category] — [Short description.]
Library: How to Use
Three equivalent ways to get a Library clip onto a character.
Option 1 — Drag onto an Animator
In the Project window, drag any .anim from Assets/PromptMotion/Library/StarterClips/ onto a Humanoid GameObject in the Hierarchy. Unity auto-creates an Animator Controller (if absent) and adds the clip as the default state.
Option 2 — Drop into an existing AnimatorController
Open an AnimatorController, drag the clip onto the graph to create a new state, then wire transitions as usual. Useful when integrating into an existing state machine.
Option 3 — Use the Animation Library window
Window → PromptMotion → Animation Library. Drop your character into the slot, click any clip card to preview it on your rig, then click Apply to wire it into the controller. The window handles prefab vs scene-instance distinctions, controller lookup, and idempotent state updates for you.
Option 4 — Animation window
Select the character, open Window → Animation → Animation, and drag the clip into its track list. Useful when you're authoring a Timeline.
Library: Customizing Clips
Library clips are standard Unity AnimationClips. Anything goes.
Anything you can do to a hand-authored clip, you can do to a Library clip:
- Edit curves in
Window → Animation → Animation. - Change loop behaviour, root motion, cycle offset in the clip's Inspector.
- Apply Avatar Masks for layered animation (e.g. upper-body sword swing while lower body keeps walking).
- Blend between clips in a
BlendTree. - Mix into a Timeline.
- Retarget by virtue of Humanoid — the same clip works on Mixamo X Bot, a Synty character, your own rig.
Library: Why Bundle Both
Generator and Library cover different needs.
| Generator | Library | |
|---|---|---|
| Internet required | Yes | No |
| Active invoice required | Yes | No |
| Wait time | ~38–83 s | Instant |
| Allowance cost | 1 of your monthly generations | Free |
| Specificity | Anything you can describe | Five curated motions |
| Works offline | No | Yes |
The Library is the safety net. The Generator is the workhorse. You'll mostly reach for the Generator once you're set up — the Library is what makes the asset functional in evaluation mode, in offline scenarios, and as a quality preview before purchase.
Humanoid Avatar System
Why the asset is Humanoid-only, and how to fix Generic-rig issues.
Both tools rely on Unity's Humanoid Avatar system to retarget a generic skeleton onto whatever character you provide. A few things worth knowing:
Why Humanoid and not Generic
Humanoid is a normalized rig: Unity maps any compatible skeleton to its standard 15 bones (hips, spine, chest, neck, head, shoulders, upper/lower arms, hands, upper/lower legs, feet). A clip authored on a normalized rig retargets to any Humanoid character without manual bone mapping. Generic clips are tied to the source skeleton and don't transfer cleanly.
What Unity needs from your rig
- A skeleton with bones named in any pattern Unity recognises (most do, including Mixamo, Synty, Quaternius, and most CC-licensed rigs).
- Animation Type set to Humanoid in the model's Import Settings — Rig tab.
- An Avatar sub-asset embedded in the FBX (Unity creates this when you switch to Humanoid).
- An
Animatorcomponent on the character GameObject with the Avatar slot filled.
Generic-rig fix
If your character imports as Generic by default and PromptMotion rejects it, re-import:
Auto-Import Pipeline
An AssetPostprocessor configures every Generated FBX so you don't have to.
What MotionFbxPostprocessor does
For every FBX under Assets/PromptMotion/Generated/:
- Sets Animation Type = Humanoid.
- Sets Avatar Definition = Create From This Model.
- Disables mesh, material, camera, and light import (the file is animation-only).
- Preserves the bone hierarchy as-is.
- Logs the configuration to the Console when Verbose Logging is on.
Files outside Generated/ are not touched — your own model imports are left alone.
Opting out
If you want a Generated FBX to use different import settings, move it out of the Generated folder. The postprocessor only fires on first import and on re-import — once a file is moved elsewhere, the standard Unity Import Settings panel takes over.
Apply to Character
From "I have an AnimationClip" to "the clip is wired into a controller."
ClipApplier handles everything from clip-in-hand to clip-on-character. It's used by both the Generator (after generation) and the Library (when you click Apply).
Three cases handled identically
- Prefab asset — the prefab in the Project window is opened with
PrefabUtility.LoadPrefabContents, edited, then saved withSaveAsPrefabAsset. - Prefab instance in a scene — modifications are recorded with
Undo.RecordObjectso they're persisted on the instance. - Plain scene GameObject — the scene object is edited directly.
What gets created
Animator component is added to the character if one isn't present.SkinnedMeshRenderer descendant.Assets/PromptMotion/Generated/Controllers/{character}_Controller.controller.Idempotent
Re-applying the same clip updates the existing state rather than duplicating it. Apply a different clip and a new state is added without disturbing the others.
When auto-apply fails
If the selection isn't a Humanoid character or doesn't have a SkinnedMeshRenderer the validator can find an Avatar from, the window shows a HelpBox with the saved FBX path and instructions to drag the clip in manually. The FBX is on disk either way — auto-apply is just a convenience.
Troubleshooting
Every error code, what it means, and how to recover.
The Generator window shows a status banner with a code-mapped message and a recovery button whenever something goes wrong. Twelve codes total — ten reported by the server, two emitted client-side.
Server-reported codes
INVALID_INVOICEAction requiredThe server doesn't recognize this invoice number.
What to do: Double-check the value at assetstore.unity.com → My Account → My Orders. Watch for trailing whitespace.
REFUNDED_INVOICEAction requiredThis invoice was refunded by Unity, so generation is permanently blocked on it.
What to do: Email ragendom@gmail.com if this is unexpected.
QUOTA_EXHAUSTEDAction requiredYou've used all 50 of your monthly generations.
What to do: Your next allowance is issued automatically (the message tells you when). Until then, the bundled Library clips remain available offline.
RATE_LIMITEDAuto-retryToo many requests in a short window.
What to do: The window auto-retries once after the cooldown shown in the status. If the second attempt also fails, wait a minute and click Try again.
UPSTREAM_ERRORRecoverableThe generation model failed.
What to do: No quota was used. Click Try again. If it persists, vary the prompt slightly — some inputs reproducibly upset the model.
SERVICE_UNAVAILABLEAuto-retryThe backend is busy or warming up.
What to do: The window auto-retries after the cooldown. If the second attempt also fails, try again in a few minutes.
SERVER_ERRORAction requiredAn unexpected backend error.
What to do: Try again in a few minutes. If it persists, email ragendom@gmail.com with the timestamp from the Console.
BAD_REQUESTRecoverableSomething is malformed in the request.
What to do: Most often an empty prompt — type something descriptive and try again.
Client-side codes
NetworkErrorRecoverableThe client couldn't reach the server.
What to do: Check your internet connection, firewall, or VPN. See the network checklist below if you're behind a corporate firewall.
TimeoutRecoverableThe request took longer than GenerateTimeoutSeconds (default 180 s).
What to do: The server may be overloaded. Try again, or increase the timeout in Settings.asset.
Common issues
Character validation fails
The character isn't a valid Humanoid. See Character Requirements. Most often: Animation Type is set to Generic instead of Humanoid in the model's Rig tab. Re-import as Humanoid.
Preview is black
Almost always a render-pipeline interaction with the preview viewport. Enable Verbose Logging in Settings.asset to see what's happening. The clip generated correctly — only the in-editor preview is affected. Drag the FBX onto your character in the scene Hierarchy to see it animate normally.
Generation hangs
Click Cancel in the window and try again. If the second attempt also hangs, persistent failure usually means the BaseUrl in Settings is misconfigured — check it points to https://api.promptmotion.dev.
Network checklist
If you're behind a corporate firewall, whitelist:
https://api.promptmotion.dev(HTTPS, port 443) — the production backend.- Any CDN your firewall flags during the FBX download response — the file is served by the same domain.
The asset uses Unity's standard UnityWebRequest, which respects your system proxy. No custom protocols, no WebSocket, no peer-to-peer.
FAQ
Quick answers to the questions that come up most.
Can I use PromptMotion without internet?
Library: yes. The five bundled clips work entirely offline.
Generator: no. Generation is a server round-trip and requires HTTPS access to the backend.
Are generated animations royalty-free for commercial use?
Yes. You own the generated outputs and can ship them in commercial projects without attribution. The underlying generation model disclaims ownership of generated content; commercial use is permitted.
What happens if I reach my monthly limit?
New generations pause until your next monthly allowance is issued (the window tells you when). Existing FBXes and cached prompts continue to work, and the bundled Library clips remain available.
What if the service is down?
Use the Library. The five bundled clips work offline and don't depend on the backend.
How do I cancel a generation in progress?
Click the Cancel button that appears in the window during generation. The request is aborted client-side; no quota is consumed for cancelled requests.
Can I use a different character?
Yes — any Humanoid character works. Mixamo, Synty, Quaternius, custom rigs — if Unity recognises it as Humanoid, PromptMotion can target it.
Does this work in builds / at runtime?
Generation is editor-only. Once an FBX is generated (or you're using a Library clip), the asset is just an AnimationClip and works in any build target Unity supports — standalone, mobile, console, WebGL.
Can I use this with HDRP?
Yes. The package is render-pipeline-agnostic. It produces standard Mecanim clips that work with URP, HDRP, and Built-in.
My team has multiple developers. Do we each need a license?
Yes. Per Unity Asset Store policy, each seat that uses the asset needs its own license.
Why does the same prompt return "Cached"?
Identical (prompt, duration, seed) produces a cache hit. Cache hits are free and use none of your monthly allowance. If you want a fresh result, change the seed (or click Random).
Support
Need help? We're here for you.
Get in Touch
Bug reports, feature requests, licensing questions — reach out and we'll get back to you.
✉ ragendom@gmail.comWe typically respond within 24–48 hours.
- Check the Troubleshooting section
- Verify your invoice via Refresh status
- Try the request twice — auto-retry resolves most transient errors
- Enable Verbose Logging in Settings to capture context
- Unity version (e.g.
6000.0.30f1) - PromptMotion version (v1.0.1)
- Render pipeline (Built-in / URP / HDRP)
- Steps to reproduce + Console output
REFUNDED_INVOICE message.PromptMotion v1.0.1 · Built for Unity 6000.0+
Powered by NVIDIA Kimodo (SOMA-RP-v1) · Support: ragendom@gmail.com