Help us improve
Share bugs, ideas, or general feedback.
From summer
Retargets animation clips from one rigged character to another, reusing the same animation library across multiple models without regenerating clips. Use when you have multiple rigged humanoids that should share animations.
npx claudepluginhub summerengine/summer-engine-agent --plugin summerHow this skill is triggered — by the user, by Claude, or both
Slash command
/summer:retarget**/*.tscn**/*.tresThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generating a "run" clip costs ~$0.10 and 30s. If you have ten enemies, regenerating ten runs is ten generations of wasted money and clock time when one Meshy retarget call would cost ~$0.05 and take ~10s. Retarget is the right answer the moment a project has more than one rigged humanoid character.
Generates animation clips (idle, walk, run, attack) from curated mocap library for Meshy-rigged humanoid characters. Wires clips to AnimationPlayer in Godot.
Provides GDScript and C# examples for Godot 4.3+ animations using AnimationPlayer for playback, AnimationTree for blending and state machines, sprite animation, and code-driven effects.
Generates custom 3D models from text or images using Meshy AI, auto-rigs and animates them for Three.js games. Use when needing custom GLB assets beyond free libraries.
Share bugs, ideas, or general feedback.
Generating a "run" clip costs ~$0.10 and 30s. If you have ten enemies, regenerating ten runs is ten generations of wasted money and clock time when one Meshy retarget call would cost ~$0.05 and take ~10s. Retarget is the right answer the moment a project has more than one rigged humanoid character.
The Meshy retarget pipeline takes a source animationAssetId and a target rigAssetId, both of which must be Meshy-rigged humanoids. It re-projects the animation onto the target's bone hierarchy, preserves timing and root motion, and emits a new animationAssetId against the target rig. The source clip is unchanged.
summer:animation/generate-motion to regenerate, or to summer:asset-pipeline/asset-strategy to re-rig.summer:animation/generate-motion. Retarget is for fan-out.summer:animation/animation-tree and the summer:animation/procedural-animation additive layers.The dominant failure mode is retargeting between rigs that look humanoid but have different bone counts, names, or hierarchies. Meshy auto-rigs use a fixed 52-bone humanoid skeleton — every Meshy rig is interchangeable. Mixamo / VRoid / hand-rigged FBX imports are NOT — even if they're "humanoid", the bone names differ and the retarget call rejects them.
Before calling summer_retarget_motion, verify:
summer_inspect_resource(<source_rigAssetId>)
summer_inspect_resource(<target_rigAssetId>)
Both responses should include rig_provider: "meshy" and bone_count: 52. If either is missing those fields or shows a different provider, stop. Tell the user: "Target rig isn't Meshy-rigged — retarget will fail. Either re-rig the target via summer_generate_3d({ kind: \"image-to-3d\", imageUrl: \"...\", options: { rig: true } }) or regenerate motion directly on it via summer:animation/generate-motion. Which?"
If both are Meshy-rigged but the target's mesh has wildly different proportions (e.g., source is a 1.8m human, target is a 2.5m ogre with arms-down-to-knees), retarget will succeed but the result will look wrong — clipping, foot-floating, or limb-twisting. Warn the user before spending: "Proportions differ a lot — retarget will run but you'll likely need procedural foot IK on the result. Continue?" Hand off to summer:animation/procedural-animation after.
summer_search_assets(query: "<source character>", kind: "animation")
Returns a list of { animationAssetId, name, durationSeconds }. Cache the IDs.
summer_search_assets(query: "<target character>", kind: "model")
Confirm rigAssetId is present and Meshy-provider.
Always batch-ask. Retargets are cheap individually but $0.05 × 30 clips × 5 enemies = $7.50, which deserves consent.
I'm about to retarget 12 clips (idle, walk, run, attack, ...) from
goblin_riggedontoorc_rigged— about 12 × $0.05 = $0.60, ~2 minutes total. OK?
for clip in source_clips:
summer_retarget_motion(
sourceAnimationAssetId: clip.animationAssetId,
targetRigAssetId: <target_rigAssetId>,
name: clip.name // preserve the slot name (idle, walk, run...)
)
// returns { animationAssetId, durationSeconds }
Save the returned IDs as a map { name: animationAssetId } for the target.
Same pattern as summer:animation/generate-motion: ensure an AnimationPlayer child exists, then write each clip into libraries/default.
summer_set_resource_property(
nodePath: "./World/Orc/AnimationPlayer",
resourceProperty: "libraries/default",
subProperty: "<clip_name>",
value: "<retargeted_animationAssetId>"
)
summer_save_scene once at the end, not per clip.
| Symptom | Cause | Fix |
|---|---|---|
API returns incompatible_rig | Target isn't Meshy-rigged | Re-rig target via summer_generate_3d({ kind: "image-to-3d", options: { rig: true } }) |
API returns bone_mismatch | Source rigged with custom bones (extra wings, etc.) | Strip extras or regenerate motion natively on target |
| Clip plays but limbs twist 180° | T-pose vs A-pose mismatch | Re-rig source from T-pose reference |
| Feet float / clip into ground | Target is much taller/shorter | Apply foot IK — see summer:animation/procedural-animation |
| Root motion drifts | Source had baked root translation, target scale differs | Strip root track in AnimationPlayer or scale playback_speed |
| Scenario | Generate fresh | Retarget |
|---|---|---|
| 1 character, 1 clip | $0.10 | n/a |
| 1 character, 12 clips | $1.20 | n/a |
| 5 characters, same 12 clips | $6.00 (5 × $1.20) | $1.80 ($1.20 + 4 × $0.60 retarget) |
| 30 NPCs, same 8-clip set | $24.00 | $6.40 ($0.80 + 29 × $0.40) |
The break-even is two characters. Past that, retarget is always cheaper.
name: to summer_retarget_motion, the target gets clips named retargeted_001, retargeted_002 and your AnimationTree state machine breaks. Always pass the source name.summer_batch is faster if the project supports it.summer_retarget_motion without first verifying both rigs are Meshy-provider..fbx, etc.). The MCP wraps Meshy's retarget, which only accepts Meshy-rig source clips. For external libraries, use Godot's built-in BoneMap retargeting in the editor — out of scope for this skill.animationAssetId, and reference from the scene file. The asset library survives session restarts.track_type survived: summer_inspect_resource(<retargeted_animationAssetId>).summer:animation/facial-and-lipsync to re-author per character.summer_generate_3d({ kind: "image-to-3d", options: { rig: true } }) call.Open the source .glb in Blender, export the animation, then in Godot 4.5 use the BoneMap-based humanoid retargeting workflow (Project → Tools → Bone Map). Set both source and target as humanoid profile, configure the bone mapping if names differ, save the retargeted clip into the target's AnimationLibrary. ~5 minutes per clip vs ~10 seconds via MCP. Documented in the Godot 4.5 character animation docs.
summer:animation/animation-tree for state-machine integration.summer:animation/procedural-animation for IK correction.summer:ai-and-npcs/design-npc.summer:animation/generate-motion — to create the source library.summer:asset-pipeline/asset-strategy — to ensure all characters are Meshy-rigged before retargeting.summer:animation/animation-tree — wire the retargeted clips into a state machine.summer:animation/procedural-animation — fix proportional mismatches with foot IK after retarget.