← ClaudeAtlas

blender-animationlisted

Animate objects, cameras, lights, and properties in Blender — keyframes, F-curves, easing (Bezier, Linear, Sine, Bounce, Elastic), shape keys (morph targets / blendshapes / visemes), drivers (Python expressions on properties), NLA actions for reuse and layering. Use whenever the user asks to "animate this", "make it move / rotate / scale over time", "add keyframes", "loop / oscillate", "shape key / morph / blendshape", "visemes for lip sync", or any time-based property change. Make sure to use this skill even if the user does not say "animate" — also covers "spin it slowly", "make it wave", "fade in / out", "pulse", "facial expression".
MAX-786/claude-3d-harness · ★ 6 · AI & Automation · score 74
Install: claude install-skill MAX-786/claude-3d-harness
# Blender Animation Animate properties over time. Most animation is just keyframes — the trick is choosing the right interpolation and easing for the motion's character. ## Decision tree ``` What kind of motion? ├── Object movement (translate / rotate / scale) │ → Keyframe `location` / `rotation_euler` / `scale` │ → Recipe 1, 2 │ ├── Mechanical / constant speed (gears, conveyor belts, scrolling) │ → Linear interpolation │ → Recipe 3 │ ├── Natural / organic (most things) │ → Bezier interpolation with auto handles │ → Recipe 1 │ ├── Cartoon / stylized (overshoot, bounce, anticipation) │ → Bounce / Elastic / Back easing │ → Recipe 4 │ ├── Facial / morph / blendshape │ → Shape Keys, animate `value` property │ → Recipe 5 │ ├── Mechanical relations (one property = function of another) │ → Drivers (Python expression) │ → Recipe 6 │ └── Reusable / layered animations → NLA actions → Recipe 7 ``` ## Recipes ### Recipe 1 — Animate object position (Bezier, natural) ```python import bpy obj = bpy.data.objects['GEO-target'] scene = bpy.context.scene scene.frame_start = 1 scene.frame_end = 60 scene.render.fps = 24 # Keyframe 1: at frame 1, at origin scene.frame_set(1) obj.location = (0, 0, 0) obj.keyframe_insert('location', frame=1) # Keyframe 2: at frame 60, moved to (5, 0, 0) scene.frame_set(60) obj.location = (5, 0, 0) obj.keyframe_insert('location', frame=60) print(f"animated:{obj.name} 1->60") ``` Default interpolation = Bezier (smooth in/out