Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
923171f
[feat] 57-chars M2: VRM 1.0 humanoid map (detected from names, hierar…
AlexZ005 Oct 23, 2026
7fbe22f
[feat] 57-chars M2 Apply clip + M4 VRM characters + M7 provenance core
AlexZ005 Oct 23, 2026
c43f0bc
[feat] 57 M1: .tpanim clip assets — reader/writer, Explorer kind, rep…
AlexZ005 Oct 23, 2026
923e3ad
[feat] 57-chars M9 Download... layouts (a)/(b)/(c) + clip files + BVH…
AlexZ005 Oct 23, 2026
378b92a
[feat] 57-chars M6 rig fix-ups (lazy) + the M2 humanoid map editor in…
AlexZ005 Oct 23, 2026
4381176
[fix] 57-chars M2: read Rigify / Quaternius UAL names (DEF-, three-sa…
AlexZ005 Oct 23, 2026
1d28062
[fix] 57 M1: format fixes — floor-rest rigs, raw node names, skeleton…
AlexZ005 Oct 23, 2026
53f8451
[feat] 57-chars M5: an Avatars tab in the Asset Browser (the Open Sou…
AlexZ005 Oct 23, 2026
20ece8b
[fix] 57-chars: the character config lives in userData.character (use…
AlexZ005 Oct 23, 2026
b68b67f
[fix] 57 M1: clip cards draw their skeleton, double-click plays, bind…
AlexZ005 Oct 23, 2026
0e61480
[fix] 57-chars: the Skeleton window no longer loops on its own scene …
AlexZ005 Oct 23, 2026
5e5e9d4
[feat] 57-chars: merge 57-clips M1 (.tpanim clip assets) and join the…
AlexZ005 Oct 23, 2026
35a581e
[fix] 57 M1: clip cards draw the body, not the rig's IK targets and c…
AlexZ005 Oct 23, 2026
f0099b0
[feat] 57 M3 + M8 + M11 + M12: game-ready clips, split/join, Animatio…
AlexZ005 Oct 23, 2026
27f20aa
[fix] 57-clips: review fixes + the small pieces the rows still owed
AlexZ005 Oct 23, 2026
0cce6be
[fix] 57 M12: a parts model whose object a sync REPLACED (same uuid, …
AlexZ005 Oct 23, 2026
c2beebc
57 clips: the clip tools scroll inside the Animation window's clip pane
AlexZ005 Oct 23, 2026
7f30e8e
[fix] 57 M12: clip messages that land before their object are applied…
AlexZ005 Oct 23, 2026
4cee70e
[perf] 57 M3: a blend weight under 1 % sits out of the pose driver; t…
AlexZ005 Oct 23, 2026
97c72e5
57 clips: the Animation window's clip pane scrolls as a whole; the st…
AlexZ005 Oct 23, 2026
89f0448
57 M12: parts models rebind when their parts land; a clip taken off b…
AlexZ005 Oct 23, 2026
3634495
57 M11 e2e: click only once B's runtime runs the graph (the node sync…
AlexZ005 Oct 23, 2026
ab7f572
Merge remote-tracking branch 'origin/feat/57-clips-m1' into feat/57-u…
AlexZ005 Oct 23, 2026
28a68d1
Merge remote-tracking branch 'origin/feat/57-chars' into feat/57-union
AlexZ005 Oct 23, 2026
c538264
Merge remote-tracking branch 'origin/feat/57-clips' into feat/57-union
AlexZ005 Oct 23, 2026
e8c2f7c
Merge remote-tracking branch 'origin/deps' into feat/57-union
AlexZ005 Oct 23, 2026
abc251e
[merge] v1.50.0 + main into feat/57 (keep both sides: wire params, Ex…
AlexZ005 Oct 30, 2026
0ee5f85
[feat] animate_parts in the agent catalog; the 57 suites in the batte…
AlexZ005 Oct 30, 2026
a91d1fc
[feat] the Motion pack in the app: Asset Browser tab, Apply clip sour…
AlexZ005 Oct 30, 2026
a2663a4
[docs] changelog 1.51.0, llms: animate_parts
AlexZ005 Oct 30, 2026
4366e90
[test] tpanim-motion/states: 60 s for a new object graph to reach a p…
AlexZ005 Oct 30, 2026
3353f40
[build] @theprototype/agent 1.51.0
AlexZ005 Oct 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,29 @@
per release, newest first. HTML comments like this one are stripped before
rendering, so maintainer notes stay out of the user-facing window. -->

## 1.51.0 — characters and motion 🕺

- **Clips are their own files.** A `.tpanim` is a small clip file in the Explorer (VRM Animation inside, so it opens in
VRM tools too). Import `.vrma`, `.bvh`, animation `.glb` or `.fbx`, then drop a clip on a character: it plays on every
peer, the bytes travel once and the model never changes.
- **Any clip on any humanoid.** VRM, Mixamo, Meshy, UniRig, KayKit and Quaternius rigs map onto the VRM 1.0 humanoid by
themselves (fix the map by hand if you like). *Apply clip…* fits a clip to each character's skeleton.
- **Free CC0 packs.** Characters (10 avatars) and Motion (87 clips: locomotion, jumps, sitting, swimming, combat…),
in the Asset Browser's new Motion tab, plus an Avatars tab reading the Open Source Avatars registry.
- **VRM characters** with spring bones, expressions (a Set Expression node too) and their licence in the Inspector.
- **Game-ready clips.** In place or moving, *Loop it*, trim, split, join with a crossfade, *Extract clips* from a model;
a Crossfade on Play Animation and a new **Blend by Speed** node, so characters stop snapping between poses.
- **Animation states.** A window per character with states and transitions. The one-click **Locomotion preset** makes
even a fresh VRM walk, run and jump under the Player controller, filling missing clips from the Motion pack. New
nodes: Set Animation Parameter, On Animation State.
- **Skeleton fix-ups.** Rename, move, add, delete and mirror bones; automatic weights, smoothing and a weight brush.
- **Download a character with its clips.** One GLB for Blender, Unity, Unreal and Godot (default), model + clip files,
or the model alone; one clip as `.tpanim`, `.glb`, `.vrma` or `.bvh`.
- **Animate a model's named parts** and attach things to its sockets (Attach to Socket node); agents get the
`animate_parts` tool.
- **Licence warnings.** Everything records where it came from. Licences that ask for credit or restrict sharing warn you
in Download, Export and Publish, and never block.

## 1.50.0 — talk to your agent 💬

- **Chat with the AI agents in your session.** The AI assistant window lists them next to your own assistant: pick
Expand Down
163 changes: 163 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"devDependencies": {
"@axe-core/playwright": "4.14.0",
"@iwer/devui": "2.7.0",
"@pixiv/three-vrm-animation": "^3.5.5",
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.70.3",
"@sveltejs/vite-plugin-svelte": "^7.3.1",
Expand Down Expand Up @@ -58,6 +59,7 @@
"@gltf-transform/functions": "^4.5.1",
"@jitl/quickjs-wasmfile-release-sync": "0.32.0",
"@lucide/svelte": "^1.61.0",
"@pixiv/three-vrm": "3.5.5",
"@shaderfrog/core": "^4.0.2",
"@shaderfrog/glsl-parser": "^7.0.1",
"@threlte/core": "^8.6.1",
Expand Down
10 changes: 9 additions & 1 deletion src/App.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
// panel, so it sits with ConfirmModal where every entry point can reach it.
import StorageModal from './components/menu/StorageModal.svelte'
import ReplaceModelModal from './components/menu/ReplaceModelModal.svelte'
// 57: Apply clip… / Download… / the Skeleton view — a tiny host, the dialogs load on open
import CharacterDialogs from './components/characters/CharacterDialogs.svelte'
import PlaceholderTooltip from './components/menu/PlaceholderTooltip.svelte'
import Flow from './components/Flow.svelte'
import FlowCode from './components/editors/FlowCode.svelte'
Expand Down Expand Up @@ -405,11 +407,15 @@ import { startMusicToolbox } from './lib/musicToolbox'
const files = [...(event.dataTransfer?.files ?? [])]
if (files.length === 0) return
const skipped = []
const modelExt = /\.(glb|gltf|obj|stl|fbx)$/
const modelExt = /\.(glb|gltf|obj|stl|fbx|vrm)$/
// 17-D2: a .mtl / texture dropped ALONGSIDE a model is its companion, not
// an unsupported file — importFile pairs them up.
const companionExt = /\.(mtl|png|jpe?g|webp|bmp|gif)$/i
const companions = files.filter((file) => companionExt.test(file.name))
// 57 M1: animation clip files go to the Explorer (converted to .tpanim) and onto the rig under the cursor
const clipExt = /\.(tpanim|vrma|bvh)$/i
const clipFiles = files.filter((file) => clipExt.test(file.name))
if (clipFiles.length) import('./lib/explorerDrop').then((m) => m.dropClipFiles(clipFiles, event.clientX, event.clientY))
// 60 Q5: a drop of nothing but images is not a model's companions — they used to be
// dropped silently. Ask what they are for: a reference image to build over, or the Explorer.
const imageExt = /\.(png|jpe?g|webp|bmp|gif)$/i
Expand All @@ -419,6 +425,7 @@ import { startMusicToolbox } from './lib/musicToolbox'
}
files.forEach((file) => {
const name = file.name.toLowerCase()
if (clipFiles.includes(file)) return
if (modelExt.test(name)) importFile(file, file.name.replace(modelExt, ''), undefined, undefined, companions)
else if (name.endsWith('.json')) load(file)
else if (!companions.includes(file)) skipped.push(file.name)
Expand Down Expand Up @@ -479,6 +486,7 @@ import { startMusicToolbox } from './lib/musicToolbox'
<!-- 36 U9: Replace model… for a loading/failed placeholder, and the hover tooltip over one -->
<ReplaceModelModal />
<PlaceholderTooltip />
<CharacterDialogs />
<DrawToolbar />
<SculptToolbar />
<SplineToolbar />
Expand Down
Loading
Loading