Kovati Docs

MotionForge

Describe a motion, generate it, review the takes, and import a game-ready clip onto your skeleton.

Documented in depthMotionForge0.4.0Open sourceMotionForgeKimodo0.5.0Free, closed sourceMotionForgeUthana0.2.0Open sourceMotionForgeQuality0.1.2Free, closed source

Describe a motion in a prompt, generate it through a pluggable provider, and get a game-ready UAnimSequence on the skeleton you chose. One pipeline end to end: pair a character, submit, poll, review, download, import.

PluginRoleLicenceVersion
MotionForge sourcecoreThe subsystem. Install this one.Open0.4.0
MotionForgeKimodoproviderA route to a generator — a vendor API, or a container on your own GPU.Free0.5.0
MotionForgeKimodoToolset sourcetoolsetThe same subsystem as typed MCP tools, for an agent. Adds nothing of its own.Open0.3.2
MotionForgeQualityaddonOptional capability on top of the core.Free0.1.2
MotionForgeQualityToolset sourcetoolsetThe same subsystem as typed MCP tools, for an agent. Adds nothing of its own.Open0.1.2
MotionForgeToolset sourcetoolsetThe same subsystem as typed MCP tools, for an agent. Adds nothing of its own.Open0.3.0
MotionForgeUthana sourceproviderA route to a generator — a vendor API, or a container on your own GPU.Open0.2.0

What it deliberately is not

MotionForge is standalone on purpose. No gameplay framework dependency, no montages, no animation curves, no notifies, and no knowledge of which provider produced a clip.

Those concerns belong to plugins built on top:

  • MontageForge makes a clip playable — slots, notifies, blends.
  • MotionForgeQuality measures defects in a clip, whatever made it.
  • The provider add-ons do the generating.

Removing any add-on changes nothing about the core.

The loop

It starts on Get started — three steps, and "nothing is generated or spent on this page":

Step 1 of MotionForge's Get started, 'Where motion is made', expanded to show two provider cards side by side. Kimodo (local) is headed 'Starts when you generate' and costs 'free, runs on this machine', listing measured rows for where it runs, Docker Desktop, a stored Hugging Face token, Llama 3 access not checked yet, the runner image, the runner not running with a Start runner button, and renting a GPU instead. Uthana is selected and marked Ready, costing 'pay as you go, $0.10 a generated second, Uthana's published price', listing its API key, the plan, one uploaded character in this project, and a connection not yet tested. Each card carries its own buttons: Change, Replace, Check access, Start runner, Change plan, Test connection.
The first step is choosing where motion is made, and both routes are laid out with the same measured rows so the choice is made on evidence. The cost line sits above the setup on each card, before you have invested anything in either.
Step 3 of Get started, 'What happens'. A prompt box shows placeholder text. Three example prompts are offered as links. A Length field reads 4 seconds, annotated '4 to 10 s on this provider'. A Name field reads MD_FirstMotion, with the folder it will be created in shown beside it. In amber at the bottom: 'Choose or make a character that suits the provider, in step 2.' The 'Create and open' button is disabled.
The last step, refusing. The length annotation is the selected provider's range, the folder is shown before anything is written, and the button stays disabled with the reason naming the step that fixes it — not a generic 'invalid input'.

Pair a character

A Motion Character points at a skeletal mesh and records how each provider should reach it — whether it needs a provider rig, and whether a retargeter exists. See retargeting.

Write a definition

A Motion Definition is the recipe: the prompt, the character, the provider, and that provider's own settings. It is a data asset, committed, re-runnable.

Generate, and stop for review

Every Generate a person presses stops for review. Unattended generation exists, but only for pipelines and agents that asked for it explicitly.

Watch the takes

Takes are numbered across generations. Play any take on its own character before choosing it — on a stage with floor / in place / orbit, and Show as B to run a second take on the same clock.

Choose and import

One step. It names the montages and sequences that already use the clip before replacing it.

What the price means

One resolver sits behind every price, readiness check, "what will be sent" block, confirmation and submission — so the price shown is the price of the request that gets sent.

  • Anything that bills asks first, with the price. Generate, the library's Generate and Import, the timeline's Generate.
  • Billing belongs to each provider: free, per generated second, per downloaded second, or per hour.
  • The download estimate prices fetching only — which is free on pay-as-you-go and on a local runner.
  • A price nobody entered says so. A provider's published list price is labelled as such until you set your own rate.

One gap, honestly: the library's selection price and the definition window's button label do not yet carry that "published price" note, though the cost line, the confirmations, the timeline and Get started all do. Fixed on the development branch; it ships with the next release.

A Motion Definition shows Astronaut on the Takes stage and the expanded Generate section. Kimodo's model, seed, diffusion steps, post-processing and beat-splitting controls are visible. Two takes are requested. The cost line says free, runs on this machine, beside the unpressed Start the Kimodo runner, then generate 2 button.
Read the cost beside the action: these two takes would run free on this machine. The stopped runner changes the button to 'Start the Kimodo runner, then generate 2'; this capture leaves it unpressed.

Takes are not deleted

Takes are hidden rather than deleted, and marked as an older recipe when the poses change. Generating new takes does not take the clip already in the game out of the record.

That is keeping options applied to one concrete thing: the take you rejected in August is still there in October when it turns out to have been right.

Provenance is written onto the clip

Every imported clip carries a Motion Take Provenance record as UAssetUserData — provider, model, runner, prompt and beats, seed, retarget and normalisation flags, motion id, take label, and the exact provider settings that were sent.

It also carries bLooksMisRated, a self-check comparing frames ÷ duration against the provider's native rate, because a clip imported at the wrong frame rate looks almost right and costs a day to diagnose.

ReportProvenance sweeps the whole library.

Where to go next

Release notes

Every version of every plugin in this set.

On this page