Drift correction and sync timing
How AutoScript Sync handles funscript sync drift depends on the device path. The Autoblow AI Ultra plays an uploaded script on its own clock, so the app checks it against the video every 1.5 to 5 seconds and trims or restarts it when it slips. Intiface devices are driven point by point from your PC's clock and get no drift loop. With DeoVR, the headset's clock leads. Everything below is the app's rules, taken from its code. It is not measured sync accuracy: no latency or drift measurement has been published.
Checked against the app's code on 21 September 2026.
The clock everything follows
On the desktop, the video plays in an embedded VLC player inside the app. About every 33 ms (roughly 30 times a second) the app passes VLC's playback time to its sync engine, and that time is the reference each device path works against. In a DeoVR session the headset's reported time is meant to take that role instead, as described below.
| Path | Who holds the script | Latency allowance | Drift correction |
|---|---|---|---|
| Autoblow AI Ultra (cloud) | The device, after one upload | Half the measured round trip on every start | Yes, every 1.5–5 s |
| Intiface / Buttplug, main device | The PC, sent point by point | None | None; re-anchored on play, seek or a settings change |
| DeoVR on a Meta Quest | Depends on the device path | As for that device | For the Autoblow, against the headset's clock, which arrives about once a second |
Only the Autoblow AI Ultra has been tested on real hardware. The Intiface devices and the DeoVR path were tested against mock servers or a fake device.
Autoblow AI Ultra: upload once, then correct
The Ultra is controlled only through Autoblow's cloud; the PC never connects to it directly, and both need internet access while playing. The app does not stream positions to it. Instead:
- After connecting, the app averages the round trip of four state requests and shows it as
API N ms. - Send Script to Device uploads the device-fitted script once. The Ultra then plays the whole script itself.
- On play, the app starts the device at the current video time plus half the measured round trip. On pause it stops the device.
- On a seek, it restarts the device at the new time, again plus half the round trip, and holds drift checks for 200 ms.
- During playback a drift loop compares the device's own script clock with the video, as below.
During playback the app keeps a smoothed average of the round trip, with a jitter estimate, and uses half of it for every start and restart.
The drift loop
Drift is the device's script time, read from Autoblow's state endpoint, minus the video time. The first check comes about 1 second after play or a seek. After that the loop starts at 3 seconds, drops to 1.5 seconds after any correction and widens by 0.5 seconds for each clean check, up to 5 seconds.
When the loop gives way
- Low API budget. Autoblow's responses carry rate-limit headers. When they show 5 or fewer calls left, drift checks are skipped. Autoblow documents no numeric limit.
- The device's own patterns. While the Ultra runs a built-in pattern, oscillate mode or a go-to move, drift checks stop. The app says why, and you re-send the script to return to sync.
- Lost connection. If a go-to move, a sync start or an oscillate setting fails, the connection goes into a reconnecting state and a background watcher retries every 5 seconds. When it recovers mid-playback, the app re-anchors the device to the video on its own.
- No script sent yet. If you play before using Send Script to Device, the app falls back to position commands at about 4 a second and shows
Streaming positions (fallback mode). That is coarse; smooth sync needs the upload.
One interaction is untested. The trim works through the same device offset as your Offset setting, and the drift reading does not allow for that offset. How the Ultra reports its script time once an offset is applied decides whether the trim shows up in the next reading, or whether an Offset larger than 350 ms could itself read as drift and trigger restarts. The test device ignores the offset, so neither case has been checked. See the Autoblow AI Ultra page for the device side.
Intiface devices: timed from the PC
Devices reached through Intiface and Buttplug are driven live from the PC over a local WebSocket. Nothing is uploaded. For a stroker, each script point becomes one LinearCmd whose duration is the time to the next point (at least 30 ms), so the device moves smoothly between points on its own. Devices with a position actuator get the position instead.
The timing runs on the PC's clock from the moment you press play or seek, shifted by your Offset. It is re-anchored to the video on play, seek or a settings change, and at no other time: the main Intiface device gets no latency measurement and no drift loop. The code treats drift over a local connection as negligible. A consequence is that if the video stalls or buffers mid-play, the main device is not pulled back until your next play, seek or settings change.
In the next update, a second device can follow the video beside the main one. It starts, stops and seeks with the video, is checked every 2 seconds, and is restarted at the playhead if it slips more than 400 ms. In the released app the second slot is driven by hand.
The Intiface path was tested against mock servers and a fake device on the real engine, not on real toys. The Handy, Kiiroo, Lovense and OSR2/SR6 devices have not been tested by us on real hardware.
VR with DeoVR: the headset's clock leads
For VR, the app works with DeoVR's Remote Control, written for a Meta Quest. It connects to DeoVR on TCP port 23554, serves the loaded video to the headset over your local network on port 8942, and drives the device from the playback time DeoVR reports. Play, pause and seeks in the headset carry over, and a jump of more than 900 ms in the reported time counts as a seek. A device must be connected first.
DeoVR reports its clock about once a second, and the app does not fill in between reports. When an Autoblow script is playing, drift checks run against that clock, so they can compare the device with a time up to about a second old, against a 350 ms restart threshold. The desktop player's timer also keeps passing VLC's time to the sync engine during a headset session; whether that can interfere with the headset's clock has not been checked. The headset path was tested only against a mock DeoVR, never a real headset.
The Offset setting
Offset is the one timing control you set by hand. Raise it if the device feels late.
- Range
- −5000 to +5000 ms, in 50 ms steps. 0 on a fresh install.
- Per video
- Stored for each video, up to 200 videos with the oldest dropped first, and restored when that video is opened. A video with no saved value keeps the last Offset used.
- Where it applies
- The Autoblow, Intiface and second-device paths alike. There is no separate offset per device.
- On the Autoblow
- Applied on the device through Autoblow's sync-script offset command, together with the drift trim. The app labels a positive value as making the device earlier.
What has not been measured
No measurement of achieved sync is recorded: no Autoblow round-trip latency, drift or start offset from real sessions, and nothing for Intiface or DeoVR. The thresholds on this page and on the Autoblow page describe what the app aims for, not what it achieves. Any latency or drift figure you may have seen in an AutoScript Sync screenshot was typed into the image, not read from a device. The benchmarks page sets out what has and has not been measured.
Questions
The device feels late. What do I change?
Raise Offset in 50 ms steps until it feels right. The value is saved for that video and restored next time you open it.
My Intiface device falls out of step during a long video. Why?
The main Intiface device runs on the PC's timer from the last play or seek and has no drift loop. Pausing and playing, or seeking, re-anchors it to the video.
Do I have to re-send the script to the Autoblow after changing Offset?
No. Offset is sent as a separate command during playback. Changing stroke settings does need a new upload, because they change the fitted script.
How accurate is the sync?
We do not know yet, and will not guess. The rules are on this page; no measurement of achieved latency or drift has been recorded on any device.
Read next
- Autoblow AI Ultra with AutoScript SyncConnecting, the device token, and what the Ultra supports.
- Intiface and Buttplug devicesWhich devices the bundled engine reaches, and what has been tested.
- The generation pipelineHow the script being synchronised is made, and how it is fitted to a device.
- Funscript troubleshootingWhen a script plays early, late or not at all.
Try it on your own videos
The trial lasts one day and runs on your own PC; your videos are analysed locally and never uploaded.