Convert a video to a funscript

To go from video to funscript with AutoScript Sync, open the video and press Generate. The app samples frames on your own PC, measures the motion in the moving part of the picture, turns it into positions from 0 to 100 at each change of direction, and saves <video name>.funscript in the same folder. The video is never uploaded.

Checked against the app's code on 21 September 2026. Describes version 2.121.1, the current release.

Which video files it opens

The Open Video dialog lists MP4, MKV, AVI, MOV and WMV, and has an All Files option. Drag-and-drop, Batch Generate Folder and Play Folder as Playlist also accept WebM and M4V.

There is no fixed codec list. For analysis the app decodes through the FFmpeg that is built into OpenCV, asking first for hardware decoding (whatever accelerator your graphics driver offers) and falling back to software decoding if the codec, driver or first frame will not cooperate. For playback it uses VLC, embedded in its own window. So a file plays and converts if that FFmpeg and your installed VLC can read it; we have not tested or published a list of codecs.

VR footage works too. Before analysis the app detects side-by-side or top-bottom layouts and fisheye or equirectangular projection, and unwarps the central view of one eye into a normal flat picture. That detection is a heuristic based on a few sampled frames.

What happens to the video, step by step

Everything below runs on your PC. The analysis code contains no network calls, and no video, frame or thumbnail is sent over the internet.

Conversion stages: decode and sample, find the moving region, measure motion, build the position trace, place points at reversals, save the .funscript Decode, sampleevery Nth frame, 320 px Find moving regionor use yours Measure motionflow, pose, depth Build position tracefuse, fill gaps Place pointsat each reversal Save .funscriptbeside the video
The six stages of a Generate run. Nothing in them uses the internet.
  1. Decode and sample. Accuracy sets which frames are analysed: every 4th on Fast, every 3rd on Balanced (the default), every 2nd on High. Each sampled frame is shrunk to 320 px wide, whatever the source resolution. A worker thread decodes ahead so decoding and analysis overlap.
  2. Find the moving region. Unless you have drawn one, the engine builds a heatmap of where motion keeps happening, takes the hottest area and pads it by 15%. Scene cuts are found from sudden changes between frames.
  3. Measure the motion. DIS optical flow measures movement inside the region. If pose and depth models are installed, body keypoints and a toward-or-away-from-camera reading add more candidate position signals. In the background, the video's own motion vectors and a loudness envelope of the soundtrack are read too, each within a time limit, so on a long film they may cover only part of it.
  4. Build the position trace. The measured movement is integrated into a position over time and fused with an anchor built from the position signals that scored best for that video. Where tracking drops out, the gap is filled with motion continued in the rhythm of the surrounding strokes, in step with the audio beat where there is one. A second pass can re-read a few flagged spans (at most four) at full frame rate.
  5. Place the points. Each 2-second window is labelled by motion type, and stroke size follows how fast the picture moves, through the intensity curve you choose (Smoothed by default). A point is placed at each change of direction, so there is no fixed point rate.
  6. Save. The script is written beside the video (next section).

The AI models behind each stage explains the flow, pose and depth parts in more depth.

Footage that converts well, and footage that does not

Because the engine works from measured motion, it does best when the motion you want scripted is the main thing moving in the picture and stays visible.

Converts well

  • One clear, repeating movement in one area of the picture. That is what the motion heatmap picks out.
  • Steady rhythm. Gap filling and rhythm clean-up lean on the surrounding strokes, so regular motion survives short dropouts.
  • Slower to moderate pace. Stroke size comes out close to hand-made scripts on slower scenes.

Converts badly, and what to do

  • Something else moves more. The region finder follows the strongest motion, which may not be the part you care about. Draw the region yourself with Set Motion Region…, or use Live Track to move a box as the video plays; the track is saved beside the video as a .roitrack.json file.
  • The action is hidden. When tracking drops out, the gap is filled with rhythm rather than measured. The share that was filled is recorded, and the quality report warns when it gets high.
  • Very fast motion. Strokes come out too small on fast scenes, more so at lower sampling rates. Try High, or Amplify the span on the timeline.
  • Long stretches with no action. Intros and credits outside the action are held at rest, but inside the action the engine often keeps producing strokes where a person would leave the script still. Delete those points on the timeline.
  • Almost static video. If fewer than 5% of samples show real motion, the app refuses to make a script and tells you the video looks static.

Where the .funscript is written

<video name>.funscript
Saved automatically in the video's folder after Generate, and after each file in Batch Generate Folder. Next time you open the video, the app loads it automatically.
<video name>.funscript.bak
On Generate, any script already at that name is copied here first. Only one backup is kept; the next Generate replaces it.
<video name>_as_played.funscript
Only if you choose File → Export Script (as played): your stroke settings baked in, for other players.
%USERPROFILE%\.autoscript_sync\logs\gen_*.json
A diagnostics report per Generate or Batch file, keeping the latest 40. It records the video's file name, never its folder or any content.

Generate + Play (instant) does not save a script; use File → Save Funscript As… if you want to keep what it made. The funscript generator overview covers the three ways to run a conversion.

How to check the result

  • Play it. Watch the video with the script in the app's player, with or without a device connected.
  • Read the timeline. Look for flat stretches where there should be motion, strokes during idle spans, and spans where strokes look too shallow. Select a doubtful span and Re-analyze it at full frame rate.
  • Open the quality report. Help → Last Generation Quality… shows how much was measured versus filled in, tracking drift and recoveries, each with something to do. It opens by itself only when there is a warning.
  • Check the file. The funscript validator checks the JSON, timestamps, positions and speed in your browser.
  • Chart the run. Report Studio opens the script with its gen_*.json report and plots stroke rate, speed and what the AI recognised. It cannot open the .zip from Export Diagnostics; unzip it first.

If the conversion goes wrong

  • The script follows the wrong motion: set the region by hand with Set Motion Region… or Live Track, then Generate again. A new region means the video is analysed again in full, so expect it to take about as long as the first run.
  • Generation is very slow: the AI may be running on the CPU. Press Check GPU to see whether analysis really runs on your graphics card.
  • The file will not open or play: try another container or re-encode; decoding depends on OpenCV's FFmpeg and playback on VLC.
  • The device feels late: raise Offset (−5000 to +5000 ms, in 50 ms steps, remembered per video). Funscript troubleshooting covers other playback problems.

Questions

Does a 4K video take longer than a 1080p one?

The analysis itself runs on a 320 px wide copy of each sampled frame whatever the source resolution (High adds one 640 px motion pass on the tracked region), so the AI work per frame barely changes. Decoding a larger file still takes longer, and we have not published timings by resolution.

Does the conversion need an internet connection?

No. The analysis runs offline. The internet is used for things around it: activating the licence, the update check, model downloads, and the Autoblow AI Ultra's cloud.

Can I convert a whole folder?

Yes, with File → Batch Generate Folder. It skips videos that already have a script and does not look in subfolders.

Is every frame analysed?

No. Even High analyses every 2nd frame. You can Re-analyze a selected span on the timeline at full frame rate.

Read next

Convert one of your own videos

The free trial runs the full app for one day on your PC; a licence is £14.99 once.