Scrub the timeline with Confidence! No more physics explosions...
Scrub Timeline animations without the rig exploding.
If you've ever tried to drag Timeline's scrubber to look at a specific moment in your animation, you know what this is for. The rig flails, controllers tangle, sometimes the body folds in half. The cause: scrubbing teleports the targets, but the physics still has to chase them from wherever it was — and "wherever it was" is usually nowhere good.
PrecisionScrubber records actual physics-settled poses while Timeline plays, then teleports the rig to one of those poses before setting Timeline's time. The animation lands at the right moment, but it lands clean. It also captures the state of any triggers Timeline fires (lights, weights, morphs, controller modes) so the scene looks the same at every scrubbed time as it would mid-playback.
One plugin on the Person atom that has Timeline. No companion plugins, no setup ritual.
That's it. Now drag Scrub Time in the plugin UI, or drag Timeline's own scrubber — both work, both stay clean. The data lives in the scene file, so anyone who loads your scene gets the same protection without having to bake anything themselves.
By default, bake plays at real-time speed. There's a Bake At Playback Speed toggle — turning it off uses a faster teleport-step bake that's roughly 3–5× quicker, but some animations (physics-driven, audio-synced, or with tight blending) come out misaligned at that speed. If a bake looks off, leave that toggle on and rebake.
Scrub Position % is what you wire to external UI. It's always 0–100 regardless of clip length, and gets translated internally per clip. If you're hooking up a UISlider atom or a VAMStory slider as a scrub control, set its trigger transition to target Scrub Position % with Start 0 and End 100. VAM initialises both to whatever the receiver's current value is — you have to type the 100 in explicitly or your slider will sit at the animation's start no matter where you drag it. (Yes I know. Wasted a few hours figuring this one out.)
There's a dropdown in the plugin's UI to bind an external slider directly — UISlider atoms and VAMStory action sliders are both supported. Picked sliders track playback automatically, then become authoritative when grabbed.
What gets captured:
Clip is (unknown) and stays that way. Timeline's "Sync with peers" option is off (it's under Timeline → More → Options). Pose protection still works via fallback, but clip identity gets stuck on length-matching, which is ambiguous if you have multiple clips of the same length. Turn the option on for full tracking.
A bake didn't capture triggers. Confirm Capture Trigger States is on and that the bake reached the end of the clip without being cancelled. Trigger params discovered are listed in the status panel.
One atom in a multi-atom scene scrubs weirdly while the others are fine. Try Bake At Playback Speed if you weren't already using it — the teleport bake doesn't always settle correctly for atoms with parented controllers or complex IK.
Plugin says Timeline NOT FOUND. You added it to an atom that doesn't have Timeline. Move it to the right one.
Built on the same pose-checkpoint approach as AcidBubbles' Timeline (CC BY-SA), which this plugin interoperates with through Timeline's public peer API and replicates the AtomPose capture and apply mechanism from. Credit and thanks to Acid Bubbles for Timeline itself — none of this exists without it.
Special thanks to @Mxx and @Ztulian for helping me test this.
IMPORTANT FOR CONTEXT:
THIS PLUGIN IS BEST AS A POLISH FOR YOUR FINISHED PRODUCT SO YOUR VIEWERS CAN SCRUB THE SCENE WITHOUT ISSUES.
IT IS NOT BEST FOR USE DURING EDITING A SCENE. The reason for this - the plugin forces the playback head onto only frames where a snapshot has been taken, so if you do a lot of edits in timeline - make sure you aren't using this plugin during the edit phase. Use Case for this plugin: bake the poses in before you release this scene to others, and then they can scrub without problems. So during edits, either disable or remove this plugin. Add it as the last step before publishing your scene.PrecisionScrubber
Scrub Timeline animations without the rig exploding.
If you've ever tried to drag Timeline's scrubber to look at a specific moment in your animation, you know what this is for. The rig flails, controllers tangle, sometimes the body folds in half. The cause: scrubbing teleports the targets, but the physics still has to chase them from wherever it was — and "wherever it was" is usually nowhere good.
PrecisionScrubber records actual physics-settled poses while Timeline plays, then teleports the rig to one of those poses before setting Timeline's time. The animation lands at the right moment, but it lands clean. It also captures the state of any triggers Timeline fires (lights, weights, morphs, controller modes) so the scene looks the same at every scrubbed time as it would mid-playback.
One plugin on the Person atom that has Timeline. No companion plugins, no setup ritual.
Setup
- Drop VamTimbo.PrecisionScrubber.1.var into AddonPackages.
- Add the plugin to the same Person atom that has Timeline.
- Open the plugin's UI. The status panel should say Timeline: connected.
The bake workflow
Open the plugin, hit Bake (or Bake All Animations if you have a bunch of clips). The clip will play through and the plugin captures everything in the background. When it's done, save your scene.That's it. Now drag Scrub Time in the plugin UI, or drag Timeline's own scrubber — both work, both stay clean. The data lives in the scene file, so anyone who loads your scene gets the same protection without having to bake anything themselves.
By default, bake plays at real-time speed. There's a Bake At Playback Speed toggle — turning it off uses a faster teleport-step bake that's roughly 3–5× quicker, but some animations (physics-driven, audio-synced, or with tight blending) come out misaligned at that speed. If a bake looks off, leave that toggle on and rebake.
The two sliders
Scrub Time is the obvious one. It mirrors Timeline's time during playback. Grabs are authoritative — while your finger or laser is on it, the plugin stops trying to update it, so nothing fights you mid-drag.Scrub Position % is what you wire to external UI. It's always 0–100 regardless of clip length, and gets translated internally per clip. If you're hooking up a UISlider atom or a VAMStory slider as a scrub control, set its trigger transition to target Scrub Position % with Start 0 and End 100. VAM initialises both to whatever the receiver's current value is — you have to type the 100 in explicitly or your slider will sit at the animation's start no matter where you drag it. (Yes I know. Wasted a few hours figuring this one out.)
There's a dropdown in the plugin's UI to bind an external slider directly — UISlider atoms and VAMStory action sliders are both supported. Picked sliders track playback automatically, then become authoritative when grabbed.
Multi-atom scenes
If your Timeline drives controllers on multiple Person atoms (one Timeline on Girl that also animates Boy, for example), the plugin handles all of them. Install it on the atom that has Timeline; the others get discovered automatically from Timeline's clip data. The status panel shows per-atom checkpoint counts when more than one rig is being protected.Trigger states
Timeline triggers only fire when playback actually crosses their trigger time. Scrubbing past one does nothing. The plugin captures the values triggers set at every checkpoint and restores them when you scrub.What gets captured:
- Bool values (lights on/off, plugin enable flags, controller positionState toggles)
- Float values (weights, FOV, morph values, opacity)
- Chooser state values (positionState On/Off/Comply, etc.)
- Audio triggers. PlayNow calls and similar. There's no value to read back, and re-firing them on scrub would re-play the sound. If your scene has slap sounds, music cues, or moan triggers tied to Timeline, scrubbing won't replay them at the right moments. Play normally for audio.
- Action invocations. Anything that calls a function rather than setting a value — Show UI, Stop And Reset, MacGruber Delays, VAMStory's Play Sound picker. Same reason: those are effects, not states.
Tips
- Bake before you release. Once the scene's saved with snapshots, viewers don't have to do anything. They just scrub.
- If you edit keyframes after baking, the plugin notices and drops snapshots within ±2 seconds of the edit. Play through that section again (with Capture During Playback on) and it'll fill back in. Or just re-bake.
- Checkpoint Interval trades scrub resolution against file size. Default 0.1 s is fine for most scenes. Crank it down for finer scrubbing or up for smaller saves.
- The snap toggles are on by default and they make scrubbing land exactly on captured times so pose and animation match. If you're authoring keyframes in Timeline and need the playhead to stay exactly where you drop it, turn off Snap Timeline Scrub To Checkpoints first.
- Status panel is your friend. It tells you what clip is current, how many checkpoints exist per atom, whether trigger params were discovered, and whether anything is broken.
Troubleshooting
Almost everything that goes wrong shows up in the status panel.Clip is (unknown) and stays that way. Timeline's "Sync with peers" option is off (it's under Timeline → More → Options). Pose protection still works via fallback, but clip identity gets stuck on length-matching, which is ambiguous if you have multiple clips of the same length. Turn the option on for full tracking.
A bake didn't capture triggers. Confirm Capture Trigger States is on and that the bake reached the end of the clip without being cancelled. Trigger params discovered are listed in the status panel.
One atom in a multi-atom scene scrubs weirdly while the others are fine. Try Bake At Playback Speed if you weren't already using it — the teleport bake doesn't always settle correctly for atoms with parented controllers or complex IK.
Plugin says Timeline NOT FOUND. You added it to an atom that doesn't have Timeline. Move it to the right one.
Credits and license
PrecisionScrubber by VamTimbo. Released under CC BY-ND.Built on the same pose-checkpoint approach as AcidBubbles' Timeline (CC BY-SA), which this plugin interoperates with through Timeline's public peer API and replicates the AtomPose capture and apply mechanism from. Credit and thanks to Acid Bubbles for Timeline itself — none of this exists without it.
Special thanks to @Mxx and @Ztulian for helping me test this.