Kovati Docs

Concepts

Characters, definitions, pipelines, takes and beats.

Documented in depthMotionForge0.4.0Open source

The two assets

MotionForge adds exactly two asset types, and both are made the same way: Content Browser ▸ right-click ▸ Automation Forge ▸ MotionForge.

The Content Browser's create menu, cascading three levels. Automation Forge is highlighted in the first column, among engine categories such as Animation, Blueprint, Cinematics and Material. The second column lists FaceForge, MeshForge, MontageForge, MotionForge, PerformanceForge, SpeechForge and SurfaceForge, with MotionForge highlighted. The third column is headed MOTIONFORGE and offers two entries: Motion Character and Motion Definition.
One branch per installed set, and MotionForge's holds exactly two things. A set that creates no assets of its own — MontageForge's recipes aside — simply has a shorter list; nothing here is a fixed menu the plugins are slotted into.

Every set has its own branch of that same menu, so the whole family's authoring surface is one place rather than seven.

The Colony project in the Unreal editor, with the Content Browser open on Content/_Generated/Motion/Characters. Three assets are shown — MC_NarrativeBiped, MC_Quinn_Direct and MC_Quinn_Kimodo — each labelled Motion Character beneath its tile. The folder tree on the left shows _Generated containing Face, Mesh, Motion, Performance, Pipelines and Speech, with Motion expanded into Characters, Definitions, Montages, Poses, Rigs, Sequences and Takes.
Three Motion Characters for one project, and the folder tree that holds everything MotionForge writes. Two of them point at the same skeleton and differ only in how clips reach it — which is the distinction the rest of this page is about.

They live under _Generated/Motion, subdivided by kind: Characters, Definitions, Takes, and the Rigs, Poses and Sequences a provider needs along the way. Nothing MotionForge writes lands outside that tree.

Motion Character

A Motion Character pairs a skeletal mesh with what each provider needs to reach it.

The MC_Quinn_Kimodo Motion Character window. A Pairing block summarises it in sentences: Provider Kimodo (local); Target skeleton SK_Mannequin_Narrative; Preview mesh SKM_Quinn; Pipeline 'retargeted — clips arrive on SK_KimodoSOMA'; Retargeter RTG_KimodoSOMA_To_SKM_Quinn_FK; and 'Ready to generate with Kimodo (local)'. A 'With Kimodo (local)' section offers Rebuild Kimodo rig and Import directly instead. Below, ordinary details categories: Character, Retargeting and Provenance.
The window leads with a plain-language summary — provider, skeleton, mesh, route, readiness — and puts the editable fields underneath. You read the Pairing block; you only scroll to the fields when you want to change one.
  • CreateCharacterFromMesh makes one from a mesh you already have.
  • Suitability is per provider. A character prepared for one provider never suits another, and the window says so rather than failing at generation time.
  • ProviderMesh decides the import route. Empty means direct; set means the clip arrives on a provider rig and needs a retargeter. See retargeting.

The character window shows the facts first, then — per provider — whether the character suits it, the route its clips take, and that provider's own actions. Including the case that matters most: when clips would stop on a provider rig for want of a retargeter.

Motion Definition

The recipe. A primary data asset holding the prompt, the character, the provider, and that provider's settings.

A definition is authored, committed and re-runnable. It is not a record of a run — the takes are.

Its window is two halves: the Takes stage on the left, where you watch results, and Generate on the right, where you set up the next one.

A Motion Definition window. The left half shows a Takes tab with a character playing on a preview stage, In place, Floor and Orbit checkboxes, playback scrubber, and a table of takes with When, Made by, Seed, Length, Cost and State columns. The right half shows a Generate tab with numbered sections: Prompt, headed '5 s, 1 beat'; Character, warning that this one has a provider rig but no Retargeter; and Generate, with a provider dropdown reading 'Uthana — pay as you go, $0.10 a generated second'. A toolbar above offers Show Animation, Prompt Timeline and Motion Library.
Watching and generating sit side by side on purpose: the take you are judging stays on screen while you adjust what the next one will be. The numbered sections on the right are the same three steps Get started walks you through, kept for every generation after the first.

Each provider brings its own settings

The settings for a generation do not live on the definition. They live on a per-provider pipeline object the definition holds one of, per provider it has used.

That means switching Kimodo → Uthana → Kimodo restores Kimodo's settings rather than resetting them. The model id and the sampler fields — seed, steps, guidance, post-processing, beat splitting — belong to the provider, under the provider's own names, as that vendor's documentation spells them.

This is don't abstract the vendor away made concrete. A neutral "quality" slider that meant something different per provider would be worse than either vendor's own control.

Switching a definition's provider keeps the old character. A definition that has been pointed at a new provider still carries the previous provider's character until you change it — and the generation will either refuse or produce something on the wrong rig. Check the character when you change the provider.

Older definitions migrate in memory on load; MigrateDefinitions resaves them so the migration is on disk rather than re-done every session.

Takes

A take is one generated result.

  • Numbered across generations, not within one — take 7 is always take 7.
  • Hidden, never deleted (HideTake).
  • Marked as an older recipe when the poses that produced them change, so a take generated before you edited the constraints is visibly not comparable.
  • ChooseAndImport picks one and imports it in a single step.
  • GetClipUsers names the montages and sequences using the current clip before it is replaced.
The walk-and-wave Motion Definition shows Astronaut walking on the preview stage, with In place, Floor and Orbit checked. The table lists Take 2 as ready on disk and Take 1 as in the game. Each row includes its time, Kimodo model, seed, eight-second length and free cost.
Take 1 is already in the game; Take 2 remains ready on disk. The numbered rows keep the model, seed, length and cost beside each result, while the stage lets you review the motion before choosing a replacement.

Preview before you choose

PreviewTake builds a take into a transient, never-saved clip — fetched only where fetching is free — by exactly the route its import would take: built on the provider rig and retargeted in memory when the character has a retargeter.

That last clause is the point. A preview that skipped the retarget would look fine and import wrong.

Previews are cached per take.

Beats

A prompt can describe more than one motion. A full stop divides a prompt into beats.

Each beat becomes its own segment of the generated clip. Providers declare their own limits — one local provider caps a beat at 10 seconds and a whole clip at 60.

A Motion Definition on Kimodo. The Prompt section is headed '12 s, 2 beats'. Below the length field, which notes 'Shared by the beats. Up to 10 s a beat, 60 s in all', two rows read Beat 1 at 6.0 s and Beat 2 at 6.0 s, each showing the start of its sentence. A note says the length is shared evenly and changing a beat's seconds gives it more or less time. The Generate section's provider dropdown reads 'Kimodo (local) — free, runs on this machine'. Five takes are listed, with Take 1 in the game.
Two full stops in the prompt became Beat 1 and Beat 2, each with its own seconds. The length is shared evenly until you change one — which is how you give an action the time it actually needs without rewriting the sentence.

Compare the same panel on Uthana: one beat, "4 s to 10 s", and a price per generated second, where this one reads "Up to 10 s a beat, 60 s in all" and "free, runs on this machine". The limits and the price are the provider's own, shown where the decision is made rather than in a table you have to go and find.

The full-stop rule has an obvious trap, and it is handled: a decimal point inside a number is detected before submission rather than silently splitting "1.5 metres" into two beats.

Jobs

Generation is asynchronous and nothing blocks.

  • Cancel leaves definitions in review if any take finished, or failed with the reason. It does not wedge them.
  • A job past its timeout is marked late and polled less often — not dropped. A slow provider is not a lost generation.
  • GetActivities is the job strip: what is running per definition, including a runner being started.
  • GetSetupSteps returns each provider's own measured setup rows — measured, not assumed. See providers.

Where things are

SurfaceWhere
The tabTools ▸ MotionForge, under the menu's Automation Forge heading
New assetsContent Browser ▸ right-click ▸ Automation Forge ▸ MotionForge
Project settingsProject Settings ▸ Automation Forge ▸ MotionForge — provider defaults, output, import, retargeting
KeysEditor Preferences ▸ Automation Forge ▸ MotionForge, or the family Keys page

Seven console commands: MotionForge.GetStarted, MotionForge.Library, MotionForge.TestConnection, MotionForge.CredentialStatus, MotionForge.ClearKey, MotionForge.UploadCharacter, MotionForge.ListCharacters.

The tab opens on Get started until the project has a motion to show. After that it opens on the library.

The MotionForge library listing 77 motion definitions. Filter tabs read All, Draft, Working, Review, Ready 77 and Failed, beside a search box. The table columns are Definition, Status, Provider, Takes, Animation and Prompt. Most rows show Kimodo (local); four MD_EP1 rows show Uthana. Take counts range from 1 to 14, each marked 'chosen'. Nothing is selected, so Open, Show Animations, Import Chosen Take and Generate are all disabled.
One row per definition, with the provider and the take count beside it — so 'which of these used the paid provider' is a glance rather than an audit. With nothing selected, every action is disabled: this panel cannot be made to generate by accident.

Worth noticing in that list: take counts of 11, 13 and 14 sit beside counts of 1. Nothing was tidied away — takes are hidden, never deleted, so a definition that was hard to get right still carries the evidence of it.

On this page