The funscript format, field by field
The funscript format is a JSON object with one essential key, actions: a list of {"at", "pos"} pairs giving a position from 0 to 100 at a time in milliseconds. Around it sit version, inverted, range and metadata. This page defines each field, the conventions files follow, and exactly what AutoScript Sync does when it reads and writes one.
Checked against the app's code on 21 September 2026. Describes the common conventions, not a formal specification.
The structure
A funscript is one JSON object saved as UTF-8 text with the extension .funscript. A complete small file, in the shape AutoScript Sync saves:
{
"version": "1.0",
"inverted": false,
"range": 100,
"metadata": {
"creator": "AutoScript Sync",
"format": "funscript"
},
"actions": [
{"at": 0, "pos": 50},
{"at": 350, "pos": 95},
{"at": 720, "pos": 5},
{"at": 1080, "pos": 95},
{"at": 1500, "pos": 5},
{"at": 5500, "pos": 5}
]
}
The last two points hold the same position for four seconds: a rest is written as two points at the same pos, not as a gap. Key order does not matter in JSON, and whitespace is free.
The fields
actions- An array of points, each an object with
atandpos. This is the only field a player needs. A file without it is not a usable script. at- The point's time in milliseconds from the start of the video, as an integer.
1500is one and a half seconds in. pos- The position to be at, at that time, as an integer from 0 to 100. What 0 and 100 mean physically is up to the device and its settings; the file only says "this far along the range".
version- The format version as a string, usually
"1.0". invertedtrueorfalse. When true, positions are meant to be read upside down, as100 − pos.range- A number, usually
100, describing the span ofpos. Most files leave it at 100. metadata- An object for anything about the script: the program that made it, a title, notes, tags. Players do not need it to play the file.
Files from editors often carry extra top-level keys, such as chapters or bookmarks. They are allowed; a reader that does not understand them should ignore them and, ideally, keep them.
Conventions a well-formed file follows
atis a whole number of milliseconds, counted from the start of the video, never negative.posis a whole number from 0 to 100.- Actions are sorted by
at, earliest first. - No two actions share the same
at. - Numbers are JSON numbers, not strings:
"at": 400, not"at": "400".
Programs differ in how forgiving they are when a file breaks these rules. The desktop app repairs what it can, as described below. Our own browser tool, Report Studio, does not: it assumes the actions are already sorted, takes the duration from the last action, ignores inverted and range, and rejects a file whose at values are strings. A file that follows all five conventions avoids those differences.
How AutoScript Sync reads a file
When you open a script with Load Funscript…, drop it on the window, or open a video with a same-named script beside it, the app repairs the actions instead of refusing the file:
- sorts the actions by time;
- merges actions that share a time, keeping the last one;
- clamps
posto 0–100 and negative times to 0; - skips entries it cannot read, without saying how many;
- reads
rangebut never uses it to rescale, so a file with a range other than 100 is still treated as 0–100; - keeps
versionas found ("1.0"if missing).
The next update (2.121.2, built but not yet released) makes the reader accept more files and keep more of what is in them:
- files saved with a byte-order mark, or as UTF-16, load instead of being refused;
inverted: trueis applied once when loading (100 − pos), with a note to you, and the file is saved back withinverted: false, so every other player sees the same motion. The released app ignores the flag, so an inverted file plays upside down;- fractional
atandposvalues are rounded to the nearest whole number, and NaN or infinite values are skipped; - unknown top-level keys such as chapters or bookmarks are kept and written back when you save; the released app drops them on save;
- a file that is not text, not JSON, not an object or has no
actionslist gets a plain-language message, and a script with no usable actions is not attached to the video.
How AutoScript Sync writes a file
Every script the app saves, generated or edited, follows the conventions above whatever happened in the editor:
- Actions are written in ascending time order, with unique times,
atas a non-negative whole number of milliseconds andposas a whole number from 0 to 100. If two points round to the same millisecond, the later one wins. - Header:
version,invertedandrangeare written as held; a generated script gets"1.0",falseand100. - Metadata:
creatoris always set to"AutoScript Sync"andformatto"funscript". Saving over another tool's script replaces its creator. - Analysis details in generated scripts: generator, recognition summary, timing, tracking path and an
aiblock with each two-second window's scene-type label, the tracked region, how much was filled in rather than measured, and the anchor election scores. - Safe saving: the JSON is written, indented, to a temporary file and then swapped in, so a crash mid-save cannot corrupt the existing script.
- Backup: when Generate saves beside the video, any existing script is first copied to
<name>.funscript.bak. Only one backup is kept; the next Generate overwrites it.
The file on disk is never fitted to a device. When the app sends a script to the Autoblow AI Ultra it fits a copy to the device's limits and strips the analysis metadata, keeping only the motion and a few header fields (generator, creator, format, version, range, stroke_expansion and an id if present).
Common mistakes, and how to find them
The funscript validator checks for each of these in your browser, without uploading the file, and lists the problems it finds.
- Invalid JSON
- A missing comma or bracket, or a trailing comma after the last action. Nothing can read the file until it is fixed.
- Missing or malformed actions
- No
actionskey, or entries without a numericatandpos. - Times out of order
- Usually from joining two scripts or editing by hand. Programs that assume sorted actions show a wrong duration or play jumps.
- Repeated times
- Two points at the same
atwith different positions: a player cannot be in two places at once. - Positions outside 0–100
- A
posbelow 0 or above 100 points outside the range a player maps onto the device. - Moves too fast for the device
- Not a format error, but a large jump in a short time asks more than a device can do. The validator flags segments over a speed limit you set, 400 units per second by default.
When the file is valid JSON with an actions list, the validator offers a repaired copy: sorted by time, duplicate times merged, positions clamped to 0–100 and values rounded, with everything else in the file kept. It cannot repair broken JSON or a missing actions list, and it does not slow down moves that are too fast.
Questions
Is there an official funscript specification?
This page describes the conventions files in circulation follow and what AutoScript Sync reads and writes. It is not a formal standard, and we do not describe how other players handle edge cases.
How many points per second should a script have?
The format sets no rate. Points belong where the motion turns. AutoScript Sync's generated scripts put a point at each reversal of the measured motion, so a slow scene has few and a fast one many.
Why does my script say "creator": "AutoScript Sync" when someone else made it?
The app stamps its name as creator on every save, including a save over another tool's script. Put the original author's name back in the metadata, or in your post, when you share it.
Does AutoScript Sync keep chapters and other extra keys?
In the next update (2.121.2), yes: unknown top-level keys are kept and written back. The released 2.121.1 drops them when it saves, so keep a copy of the original.
Read next
- Check a file with the validatorFinds the mistakes on this page in your browser, and offers a repaired copy.
- A plain-language introductionWhat a funscript is and how a device uses it, without the field detail.
- Making a script, by hand or generatedThe workflow from video to a saved, checked file.
- The learn hubAll four reference pages.
Generate well-formed scripts from your videos
AutoScript Sync writes standard funscripts beside your videos; the trial is the full app for one day.