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.
If it says anything else, the plugin isn't seeing Timeline yet. Usually because you put it on the wrong atom, or the scene is still loading.
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.)
What does not get captured:
- 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.
This isn't a flaw in the plugin. It's a property of triggers themselves. State is reversible; firing actions usually isn't.
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.