Funscripted

Making scripts

The Funscript File Format Explained

A funscript is a JSON file. Its main part is actions, a list of points that each give a time in milliseconds (at) and a position from 0 to 100 (pos). Every other field is optional.

By the Funscripted team. Updated .

A complete example

{
  "version": "1.0",
  "inverted": false,
  "range": 100,
  "metadata": {
    "title": "Example scene",
    "creator": "your-name",
    "duration": 125,
    "tags": ["pov"],
    "performers": [],
    "license": "",
    "notes": ""
  },
  "actions": [
    { "at": 0, "pos": 10 },
    { "at": 480, "pos": 90 },
    { "at": 960, "pos": 10 }
  ]
}

This is the shape OpenFunscripter writes. The script starts near the bottom, reaches the top after 480 ms, and is back near the bottom at 960 ms.

The top-level fields

FieldNeeded?What it does
actionsYesThe list of points. This is the only part every player reads.
versionNoThe format version. It defaults to "1.0".
invertedNoWhen true, 0 and 100 swap places. It defaults to false.
rangeNoThe percent of a full stroke to use. Launchcontrol defaults to 90. OpenFunscripter writes 100.
metadataNoDetails about the script, such as the title, creator and tags.

In practice only actions is required. OpenFunscripter rejects a file only when it has no actions list. MultiFunPlayer reads actions, metadata and axes, and ignores version, inverted and range.

Actions: at and pos

  • at is the time the point fires, in milliseconds from the start of the video.
  • pos is the position to move to, from 0 to 100. On a stroker, 0 is the bottom of the sleeve and 100 is the top.
  • Two points in a row with the same pos mean hold still.
  • OpenFunscripter rounds at to whole milliseconds and drops a second point on the same millisecond. It keeps pos within 0 to 100.

Most tools use 0 to 100 for pos. Older Buttplug docs say 0 to 99, which is the range the Fleshlight Launch itself accepted.

What happens between two points

A player moves the device from one point to the next so it arrives on time. Launchcontrol sends one move per point and picks a speed from the distance and the time.

MultiFunPlayer can draw the path between points in four ways: Linear, Pchip, Makima and Step. Its default is Pchip, a smooth curve.

Metadata fields

FieldMeaning
titleThe script title
creatorWho made the script
descriptionA short description
durationThe video length, in whole seconds
tagsA list of tags
performersA list of performers
script_urlWhere the script comes from
video_urlWhere the video comes from
licenseThe license the script is shared under
notesFree text notes
typeThe script type. OpenFunscripter defaults to "basic".

OpenFunscripter also saves bookmarks and chapters inside metadata.

How to name the file

Give the script the same base name as the video and put it in the same folder: my-video.mp4 and my-video.funscript. Players then find it on their own. HereSphere also checks a fallback folder, which is C:/Interactive by default.

Scripts for extra axes add the axis name before .funscript, such as my-video.roll.funscript or my-video.twist.funscript. See the multi-axis guide for every name. MultiFunPlayer can also read one file that holds several axes in an axes list, each with an id such as R0 and its own actions.

Find your next script

Every script on Funscripted is a standard .funscript file that works with the players and devices in our guides.

Frequently asked questions

Is a funscript a JSON file?

Yes. A .funscript file is plain JSON text, so any text editor can open it.

What does pos 0 mean in a funscript?

On a stroker, 0 is the bottom of the sleeve and 100 is the top. If inverted is true, the two swap places.

What unit is the at value in?

Milliseconds, counted from the start of the video. 1500 means one and a half seconds in.

Which funscript fields are required?

Only actions. Players and editors fill in defaults for the rest, and many of them ignore version, inverted and range.

What is the range field?

It is the percent of a full stroke to use. Launchcontrol defaults it to 90, OpenFunscripter writes 100, and MultiFunPlayer ignores it.

Can I edit a funscript by hand?

Yes, it is plain text. For real work, use an editor such as ScriptCompiler or OpenFunscripter. See how to make a funscript.

Related guides

Sources