- JavaScript 67.2%
- Python 31%
- Shell 1.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| docs | ||
| scripts | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Vili
Vili is the GameCult Persona animation daemon.
It owns the bridge from Persona performance intent to body-motion generation. Its
first backend is Kimodo on Raven, running through Docker Engine inside
Ubuntu-24.04 WSL with NVIDIA GPU passthrough.
Front Door
- Value: a warm, supervised path from a text prompt to generated body motion. Vili runs Kimodo as a resident GPU worker on Raven and returns motion artifacts (
motion.npz, optional BVH) for a job, with Idunn health and an Eve operator surface. - Problem: Personas and games need generated motion, but cold per-request container runs took about 195 seconds per 1 second clip, versus about 54 warm. One daemon owns job identity, worker lifecycle and artifact references so callers do not touch Docker, WSL or model state.
- Entry points:
scripts/vili-daemon.mjs(the daemon;npm start,npm run health,npm run smoke,npm run provider),scripts/kimodo-resident-worker.py(the resident worker),POST /motion/generate(see Motion Generation),docs/verse-service-contract.mdanddocs/motion-pipeline-target.md. - Live: the resident Kimodo worker on Raven,
POST /motion/generate,GET /smoke, the CultCache service store, and CultNet/RUDP health to Idunn. It hasmotion.npzand optional BVH output on the SOMA skeleton; there is no FBX export. - Planned (target, 2026-10-20): FBX animation export on the SOMA skeleton and a text-prompt-to-Unity-clip path with no hand steps, with each artifact recording prompt, constraints, seed and model. Retargeting stays with the consuming engine; see
docs/motion-pipeline-target.md.
Authority
- Vili owns animation job intake, Kimodo runtime checks, Kimodo resident worker lifecycle, generated motion artifact references, and its operator/provider surface.
- Personas and Weksa may propose performance intent, gesture prompts, and constraints.
- Kimodo owns motion synthesis.
- Future renderers own retargeting, playback, facial performance, camera, and lip sync.
- Odin discovers Vili; Odin does not own Vili's state.
- Vili is started at boot by its scheduled task on Raven today; nothing restarts it after a crash, and Idunn does not manage it until its admission is ruled (deferred until RPS has its clips). Idunn would not own animation decisions.
Local Runtime
On Raven:
scripts\restart-vili-daemon.cmd
Default compatibility endpoint:
http://10.77.0.4:8824
Vili is not an Idunn target today. Its lifecycle is the GameCult\Vili
scheduled task on Raven, and GET /health is an operator lowering. Admission
to Idunn is motion-pipeline❓vili-under-idunn.
Vili also writes daemon-owned service state to:
.vili\vili.service.cc
That CultCache store owns the provider advertisement, operator state, Eve
surface, command boundary, and transport profile. The adjacent JSON files are
compatibility exports for tools that have not learned the .cc store yet.
Important routes:
GET /healthGET /provider-advertisementGET /operator-stateGET /eve/operatorGET /eve/deck/providersWS /eve/deck/vili.animationGET /smokePOST /motion/generate
Motion Generation
POST /motion/generate exposes Kimodo's generation surface through the
resident worker. Vili owns job identity, persistence, timeout handling, worker
lifecycle, and the output stem; Kimodo owns synthesis and model-specific export
formats.
Minimal request:
{
"prompt": "a person gives a small friendly wave",
"duration": 1,
"diffusionSteps": 20,
"bvh": true
}
Batch requests can use Kimodo-style metadata:
{
"meta": {
"texts": [
"a person gives a small friendly wave",
"a person takes one careful step"
],
"durations": [0.5, 0.5],
"num_samples": 1,
"diffusion_steps": 20
},
"numTransitionFrames": 3,
"cfgType": "regular",
"cfgWeight": [1.5],
"seed": 6101,
"bvh": true,
"bvhStandardTpose": true,
"saveExampleDir": true
}
Supported request fields:
prompt/utteranceplusduration/durationSecondstextsplusdurations, or a fullmetaobjectinputFolder/input_folderfor a container-visible Kimodo input folder withmeta.jsonand optionalconstraints.jsonmodel; changing the requested model restarts the single resident workerdiffusionSteps/diffusion_stepsnumSamples/num_samplesnumTransitionFrames/num_transition_framesconstraintsas an object/list, orconstraints,constraintsPath, orconstraints_pathas a container-visible pathseedcfg,cfgType/cfg_type,cfgWeight/cfg_weightbvh,bvhStandardTpose/bvh_standard_tposenoPostprocess/no_postprocesssaveExampleDir/save_example_dirtimeoutMs,workerTimeoutMs
Vili intentionally does not accept an arbitrary Kimodo output path. Generated
artifacts are written under .vili/artifacts/{jobId}/ and referenced from the
job record. Kimodo-SOMA-RP-v1.1 produces NPZ and optional BVH output,
Kimodo-SMPLX-RP-v1.1 also exports AMASS NPZ, and Kimodo-G1-RP-v1.1 also
exports CSV when that model is resident.
Current Runtime State
Raven has a Hugging Face token installed at
/root/.cache/huggingface/token inside Ubuntu-24.04. Vili mounts that token
read-only into Kimodo containers and passes the standard Hugging Face token
environment variables.
Vili keeps Kimodo warm through a resident worker container named
vili-kimodo-worker. The worker loads the model once, exposes /health and
/generate inside WSL on 127.0.0.1:8825, and serializes generation through
the loaded model. Because Raven's Docker Engine runs inside WSL, Vili also
keeps a tiny WSL sleep-loop alive while the worker is resident so the Docker
substrate does not disappear underneath the model. GET /health observes
worker state without launching model load. GET /smoke verifies the backend
and starts the resident worker when it is absent.
Verified on 2026-06-12: the resident worker loaded
Kimodo-SOMA-RP-v1.1 on Raven's RTX 4060 Ti in about 100 seconds. Five warmed
service-path generations of a 1 second clip at 20 diffusion steps averaged
about 54.4 seconds each, roughly 0.0184x realtime. The old per-request
docker run --rm kimodo_gen path measured about 195 seconds per 1 second clip
and is no longer the generation authority.