Animatis Update 1.5 : Segment Speed & Keyframe Workflow Improvements (thnx Moleculo for the feedbacks
)
This update focuses on improving timing control, stability, and usability, especially when working with segment-based animation speed.
Two Speed Modes (Now Fully Separated)
Animatis now uses two clearly defined speed modes:
- Global Speed – one speed value for the entire animation
- Segment Speed – individual speed control between keyframes
Only one mode is active at a time, ensuring predictable playback and removing timing conflicts.
Reliable Segment Speed System
Segment speed has been reworked internally to be time-based and stable:
- Segment boundaries are derived from a unified set of keyframe times
- Speed is applied consistently regardless of controller or morph order
- Editing, adding, or removing keyframes no longer breaks segment timing
- Save/Load preserves segment speeds correctly
This makes segment speed reliable and suitable for real animation work, not just experimentation.
🗂 New Keyframes Tab (Cleaner & Easier to Use)
Keyframe editing now has its own dedicated UI tab, designed for clarity:
- Clear Global / Segment speed mode selection
- Scrollable list of animation segments
- Edit one segment at a time (no UI clutter)
- Simple controls to reset or copy speed values
The goal is to make timing edits fast, readable, and intuitive.
Design Philosophy
Animatis is not trying to replace Timeline.
Timeline excels at precision key editing.
Animatis focuses on motion flow, rhythm, and experimentation , with segment-level timing control.
Result
- More predictable playback
- Better timing control than before
- Cleaner UI
- Segment speed now feels intentional, not experimental
As always, thanks for the feedback, it directly helps shape Animatis.
Animatis 1.4.9 Update Summary
This update focuses on stability, cleanup, and correctness.
No new features were added.
Bug Fixes
1. Fixed critical compilation error (CS1061)
- Issue: ControllerAnimation.keyframeSpeeds and MorphAnimation.keyframeSpeeds did not exist
- Fix: Updated references to use SimpleAnimation.segmentSpeeds
- Files: TimelineUI.cs (lines 364, 376, 729)
2. Fixed tab index bugs – Targets tab
- Issue: “Open Target Manager” and “Back” buttons jumped to the wrong tab
- Fix: SelectTab(1) → SelectTab(2)
- Files: SimpleTimeline.cs (lines 680, 777)
3. Fixed tab index bug – Visual tab
- Issue: “Refresh Timeline View” button switched to Targets tab
- Fix: SelectTab(2) → SelectTab(3)
- Files: SimpleTimeline.cs (line 867)
4. Fixed storable cleanup leak
- Issue: segmentSpeedStorable was not deregistered during cleanup
- Fix: Proper deregistration added alongside timeStorable
- Files: TimelineUI.cs (line 600)
Feature Removal – Segment Speed System
The segment speed system has been fully removed due to instability and incorrect behavior.
Removed components:
KeyframeSpeed class (step-based lookup, not curve-based)
segmentSpeeds list and segmentSpeedCurve from SimpleAnimation
All segment speed UI (sliders, labels, callbacks)
All segment speed–related methods in TimelineUI (6 methods)
Segment speed save/load logic
Segment speed playback logic in SimpleTimeline
Result:
Animation playback now relies solely on the simple and reliable global speed slider.
Architecture Notes
- Segment speeds were briefly refactored to use Unity’s AnimationCurve
- Linear tangents and proper interpolation were implemented
- Behavior was changed from multiplying global speed to overriding it
- Despite improvements, the system remained unreliable and was fully removed
Code Quality & Cleanup
- ~400+ lines of problematic code removed
- Cleaned files:
- SimpleAnimation.cs
- SimpleTimeline.cs
- TimelineUI.cs
- Fixed 1 critical compile-blocking error
- Fixed 3 tab navigation issues
- Removed unused validation logic
Current State
Compiles successfully
All tabs navigate correctly
No storable leaks
Clean, maintainable codebase
Uses standard VaM patterns
Animation playback uses global speed only
Animatis Update 1.4.8 - MULTI-PLAY Tab + Controller Exclusions (Layered Playback)
This update introduces multi-animation playback clean, predictable, and easy to manage.
What’s new
- Added a dedicated “MULTI-PLAY” tab
- New CreateMultiPlayTab() UI:
- Clear header + master/slave explanation
- Per-animation controls (Play / Stop / Follow Master Time / Exclusions)
- Removed the old multi-play section from the Animation tab
- Updated all currentTab == checks across the UI code
- RefreshMultiAnimationControls() now correctly runs on currentTab == 1
MULTI-PLAY rule (important)
MULTI-PLAY works by layering animations — but:
A controller (or morph) can only be driven by ONE animation at a time.
If two animations both have the same controller enabled, they will conflict (fight each other / jitter / overwrite).
Solution: Exclusions
Each animation now has Exclusions, so you can decide exactly what it controls.
Example workflow:
- Animation A: Body + Legs
- Animation B: Arms + Head
- Disable overlapping controllers in one of them, and the two animations can play together cleanly.
![]()
![]()
Animatis Update — Per-Segment Speed + UI Polish
This update adds a feature that was requested: variable playback speed between keyframes, so you can control pacing realistically without adding a ton of extra keys.
Big thank you to Moleculo for the suggestion!
New: Per-Segment Speed (between keyframes)
You can now set a speed multiplier per keyframe segment (the segment after a keyframe).
Example:
- Key @ 0.0s → 0.5x (slow)
- Key @ 2.0s → 2.0x (fast)
- Key @ 4.0s → 1.0x (normal)
Result:
- 0→2 seconds plays slower (more natural easing/weight)
- 2→4 seconds plays faster (snappier motion)
- No need to “spam” extra keyframes just to shape timing
UI: Segment Speed Slider
In the Animation tab you’ll find:
- Segment Speed (after keyframe) slider (0.1x → 3.0x)
- Scrub to a keyframe and adjust speed
- Speed is applied to the segment after that keyframe
Subtle Visual Indicators (no clutter)
If you’ve modified any segment speeds, the keyframe info panel will show a SEGMENT SPEEDS section listing only the non-default segments, sorted by time.
Icons:
- «« very slow
- « slow
- » fast
- »» very fast
This stays hidden when everything is 1.0x, so the UI remains clean.
Saved with your animation
Segment speeds are saved/loaded with animation data. Older animations remain compatible (defaults to 1.0x everywhere).
UI Layout Cleanup
A bunch of small polish fixes to make the Animation tab flow better:
- Controls are now grouped tightly under the timeline scrubber
- Removed unnecessary spacing gaps
- Play / Stop moved up where you expect them (no longer buried under the info field)
- Sequencing section moved to sit directly under the Speed controls on the left side
Animatis 1.4.6 — New Features, Improvements & Bug Fixes
This update introduces several powerful new features that expand how Animatis can be used inside scenes — including full external trigger control, selective keyframe copying, per-animation target settings, and improved stability across the system.
1. JSONStorable Actions for External Control
Animatis can now be controlled directly from other plugins or scene systems such as:
- LogicBricks
- Timeline
- Story/Dialogue plugins
- VaM triggers
New actions added:
- PlayTargetAnimation — Plays an animation by name (set TargetAnimationName first)
- PlayNextAnimation — Moves to the next animation
- PlayPreviousAnimation — Moves to the previous animation
Existing actions:
- PlayAnimation
- StopAnimation
- ResetAnimation
This makes Animatis fully trigger-friendly and ideal for complex, automated scenes.
2. Selective Keyframe Copying (New Copy/Paste System)
You now have precise control over what data is copied:
- Copy All Keyframes (original behavior)
- Copy Controllers Only
- Copy Morphs Only
Ideal for:
- Copying hand poses without affecting body position
- Copying facial expressions without modifying controllers
- Repeating timing events in multiple animations
This greatly improves workflow accuracy.
3. Per-Animation Target Control
Each animation can now override which targets it affects.
New functionality:
- Global target list still exists
- But animations can enable/disable individual controllers or morphs
- Disabled items are visually marked with [DISABLED]
- Color-coded buttons (green = active, orange = disabled)
- Saved and loaded per animation
Example use cases:
- Idle animation without hand movement
- Gesture animation with active hand controllers
- Static morphs while animating facial expressions
- Mixing animated and non-animated targets in one clip
This brings Animatis closer to a full animation editor.
4. Visual Tab (Coming Soon)
A new visual editing mode is planned and appears in the UI as “Coming soon” — more features will arrive in future versions.
5. Bug Fixes
- Fixed the loop-trigger boundary bug (triggers now fire correctly when looping end → start)
- Improved morph blending stability to reduce overshoot and jitter in rapid transitions
License Update
Animatis is now released under CC BY-SA, ensuring compatibility with VaM Hub license rules and allowing community-friendly sharing while preserving attribution.
Credits
Special thanks to MacGruber, whose utilities and best practices continue to inspire safer and more efficient trigger handling across the VaM community.
Conclusion
Animatis 1.4.6 focuses on precision, control, and external interoperability — making it one of the most flexible animation tools available for VaM.
Thank you to everyone who provided feedback and feature ideas!
Animatis Update – New Features & Improvements
✔ Feature 1: JSONStorable Actions for External Control
Animatis can now be controlled directly from other plugins (LogicBricks, Timeline, scene triggers, etc.) through new JSONStorable Action endpoints.
New actions added:
- PlayTargetAnimation – Play an animation by name
(Set the TargetAnimationName string parameter first)- PlayNextAnimation – Jump to the next animation
- PlayPreviousAnimation – Jump to the previous animation
Existing actions:
- PlayAnimation
- StopAnimation
- ResetAnimation
These actions make Animatis fully trigger-friendly and ideal for building complex scene sequences controlled externally.
✔ Feature 2: Enhanced Copy/Paste System (Selective Keyframe Copying)
You now have full control over what type of keyframes are copied:
- Copy All Keyframes
Copies everything at the current time (original behavior)- Copy Controllers Only
Copies only controller position/rotation keyframes- Copy Morphs Only
Copies only morph keyframes
Use cases include:
- Copy a hand pose without affecting body position
- Copy a facial expression without touching controllers
- Duplicate complex timing moments across the animation
This massively improves precision and reduces accidental overwriting.
✔ Feature 3: Per-Animation Target Control (Enable/Disable per animation)
Animatis now supports animation-specific target toggling, giving you granular control over what each animation affects.
New behavior:
- Global targets are still shared across all animations (as before)
- But now you can enable or disable individual controllers and morphs per animation
- UI clearly marks disabled targets with [DISABLED]
- Color-coded toggle buttons (green = active, orange = disabled)
- Fully saved/loaded with the animation data
Examples:
- Disable hand controllers in an “idle” animation, enable them in a “wave” animation
- Keep some morphs static while animating others
- Mix keyframed and non-keyframed targets inside the same animation clip
This gives Animatis a level of flexibility similar to advanced animation editors.
The Visual-Tab is a possible future im thinking implementing but as of now its marked as "(Coming soon)"
Bug Fixes
- Fixed the loop trigger boundary bug — triggers now fire correctly when wrapping from end → start
- Improved morph blending to prevent overshoot and instability in rapid transitions
![]()
Animatis Update - Animation Transition Fix
Fixed Issues:
1.Animation transitions now work correctly - Animation 2 (and subsequent animations) now play properly when
using the "Next Animation" feature
2.Added "Add Default Controllers" button - Quickly adds all 7 main controllers (head, chest, hip, left/right hands, left/right feet)
to all animations with one click
3.Fixed animation dropdown sync - The animation dropdown now correctly updates when animations transition
automatically
Technical Fixes:
- Fixed infinite loop where transitions were being called every frame, causing the destination animation to get
stuck at ~0.04 seconds
- Added check to prevent Animation 1 from continuously advancing past its end and re-triggering transitions
- Fixed currentAnimation not updating correctly when user had manually switched animations in the dropdown
- Clamped animation time to duration to prevent overshooting during transitions
How to Use:
1. Set Loop OFF on Animation 1 if you want it to transition to another animation
2. Set "Next Animation" to the animation you want to play next
3. Animation 1 will smoothly crossfade to the next animation when it finishes
4. Use the new "Add Default Controllers" button to quickly add common controllers to all animations
Here is a small but crucial fix that was overlooked.
Big "thank you" too oppai500 for pointing out the save issue![]()
So what was fixed? :
1.Save dialog - Now shows text field and save button properly
2.Removed broken defaultVal API call - Morphs now reset to 0 safely
3.Fixed dictionary crash risk - Now checks if key exists before accessing
4.Added error handling - Trigger restoration won't crash on bad data
Animatis - Update Log 1.4.5
Recent Improvements
Smooth Animation Crossfading
- Animations now blend smoothly between each other instead of snapping instantly
- Set "Transition Time" (0.5-2 seconds recommended) for silky-smooth transitions
- Controllers and morphs fade seamlessly from one animation to the next
- Set to 0 seconds for instant transitions (old behavior)
Hold Final Pose
- Non-looping animations now stop at their final keyframe instead of resetting
- Characters hold the end pose naturally (perfect for gestures, dance moves, etc.)
- No more jarring snap back to the start position
- Manual "Stop" button still resets controllers if needed
Why This Matters:
- Professional feel - Transitions look polished and natural
- Better UX - See exactly where animations end
- Creative freedom - Chain animations together smoothly with crossfading
How to use crossfading:
1. Create two animations with keyframes
2. Set Animation 1's "Next Animation" to Animation 2
3. Adjust "Transition Time" slider (1 second = smooth blend)
4. Play Animation 1 - watch it smoothly crossfade into Animation 2!