roblox-animation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited roblox-animation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill provides comprehensive, current knowledge of Roblox's two primary motion systems and how they interact with UI, effects, and gameplay. Many models still recommend deprecated APIs or give shallow "use TweenService" advice without the nuances of priorities, caching, IK constraints, marker-driven gameplay, proper UI scale/AnchorPoint usage, or performance tradeoffs.
Key official sources:
Structure of this skill:
references/ files for deep dives.references/ contains granular, long-form technical references for each major sub-area.scripts/ can hold custom loaders, tween wrappers, or IK setup utilities you create for your project.Cross-skill usage:
3D rig/character motion that needs to look authored and blendable? → Animation system (Animator + AnimationTrack). Pre-authored in Editor or from catalog, played with priority/weight/fade/speed. Drive gameplay from markers.
Simple property changes, UI transitions, or one-off object motion? → TweenService. Cheaper, easier, perfect for GuiObjects (scale + AnchorPoint + UDim2), CFrame, Color3, Transparency, NumberSequence, etc.
Need procedural interaction with environment (hand reaching, head tracking, foot placement on uneven ground)? → IKControl (procedural) + optional AnimationTracks or constraints for limits. Often combined with animation events.
Both? Common and powerful: Play a locomotion track on low priority while using IKControl or tweens for upper-body or UI overlays. Use markers in the track to start/stop IK or fire tweens/effects.
See references/3d-animations.md and references/ui-tweens-and-sequences.md for details.
local ContentProvider = game:GetService("ContentProvider")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Player characters already have an Animator created by the engine on the server.
-- Custom rigs / NPCs may need fallback creation.
local animator = humanoid:FindFirstChildOfClass("Animator")
or humanoid:WaitForChild("Animator", 1)
if not animator then
animator = Instance.new("Animator")
animator.Parent = humanoid
end
-- Cache the Animation instance; Animator:LoadAnimation caches the returned track
-- when called with the same Animation object on the same Animator.
local anim = ReplicatedStorage:FindFirstChild("MyAnimation") or Instance.new("Animation")
if not anim.AnimationId then
anim.AnimationId = "rbxassetid://YOUR_ID"
anim.Name = "MyAnimation"
anim.Parent = ReplicatedStorage
end
-- Preload asset instances, not AnimationTracks.
ContentProvider:PreloadAsync({anim})
local track = animator:LoadAnimation(anim)
track.Priority = Enum.AnimationPriority.Action
track:Play(fadeTime, weight, speed)
-- Store and disconnect connections when the rig/GUI is destroyed.
local markerConn = track:GetMarkerReachedSignal("FootStep"):Connect(function(param)
-- spawn dust, play sound, etc. Param can be parsed.
task.defer(function() ... end) -- defer gameplay side-effects
end)
local stoppedConn = track.Stopped:Connect(function() end) -- cleanup / state tracking
local endedConn = track.Ended:Connect(function() end) -- animation has finished moving the rigWarning: KeyframeReached is the older event; prefer GetMarkerReachedSignal for all new work.
Animator:LoadAnimation returns the same track if called again with the same Animation instance on the same Animator. Stop tracks on Humanoid.Died / Player.CharacterRemoving and disconnect event connections.IK for procedural enhancement (covered in references/3d-animations.md):
Curve animations vs KeyframeSequence — Newer system supports per-channel curves for finer control (promote from keyframe animation in editor).
See references/3d-animations.md for full editor details, priorities, loading patterns, IK constraints, and event examples.
TweenService:Create(instance, TweenInfo, propertyTable) → Tween
TweenInfo.new(duration, easingStyle, easingDirection, repeatCount, reverses, delayTime)
EasingStyles: Linear, Sine, Quad (good default), Cubic, Quart, Quint, Exponential, Circular, Back (overshoot), Bounce, Elastic. Directions: In, Out (default for many), InOut.
Always design UI with scale + AnchorPoint:
object.AnchorPoint = Vector2.new(0.5, 0.5)Common tweenable UI properties (single or multi-property):
Sequences & chaining:
local t1 = TweenService:Create(obj, info, {Size = UDim2.fromScale(1.2, 1.2)})
local t2 = TweenService:Create(obj, info, {Size = UDim2.fromScale(1, 1)})
local conn
t1:Play()
conn = t1.Completed:Connect(function()
conn:Disconnect()
t2:Play()
end)
-- Cleanup tweens/connections when the GUI is destroyed:
obj.AncestryChanged:Connect(function(_, parent)
if not parent then
if conn then conn:Disconnect() end
t1:Destroy()
t2:Destroy()
end
end)Or use a small state machine / table of tweens.
Typewriter / animated text reveal (very common): See the full reusable module in the official ui/animation.md page. It uses utf8.codes/utf8.codepoint (or a grapheme-splitting library for user-perceived characters) + TextLabel.MaxVisibleGraphemes + optional LocalizationService translator. Extremely useful for dialogue, tutorials, lore.
Style transitions (beta): Via Style Editor + StyleRule definitions for more CSS-like declarative motion.
Performance notes:
tween:Cancel()).See references/ui-tweens-and-sequences.md for exhaustive single-property examples, multi-property, easing graphs guidance, typewriter implementation notes, and gotchas.
AnimationClipProvider for async animation loading when you need previews or streaming behavior.Humanoid:LoadAnimation(anim) (deprecated — use Animator).track.TimePosition every frame instead of markers.When implementing:
This skill + the roblox-user-interfaces and roblox-vfx skills will let you create motion that feels intentional, responsive, and polished rather than "it moves."
For the latest property or enum behavior, always verify in the Engine API reference: https://create.roblox.com/docs/reference/engine (Animator, AnimationTrack, TweenService, IKControl, etc.).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.