Skip to content

Funscript

Funscripts are time-stamped position files stored as JSON. They describe how a device should move over time.

  • The term funscript originated from a user named FunJack, one of the first code publications of this file format is this Go module.
  • The funscript format has, over the years, become the defacto standard that many users are familiar with, with good adoption by the scripting communities (EroScripts) and commercial distributors (RealSync, SexLikeReal, CzechVR).

A minimal funscript contains:

{
"version": "1.0",
"inverted": false,
"range": 90,
"actions": [
{ "at": 1000, "pos": 0 },
{ "at": 2000, "pos": 99 },
{ "at": 3000, "pos": 0 }
]
}
  • at – Milliseconds from script start.
  • pos – Device position 0–99.
  • Optional metadata may include other details such as scene performers and production company.

It’s good practice to keep scripts beside their matching video and share the same base name:

MyMovie.mp4
MyMovie.funscript

Multi-axis naming conventions (e.g. .surge.funscript, .vib.funscript) have become the norm in script player applications. At the time of writing this, FunPlayer only focuses on the linear axis, for now.

A funscript file is a file format that is JSON-compliant, it’s just denoted with .funscript as the file format but is a fully compliant .json file. It is human readable, open a file in any text editing application and take a look.

  • Generally speaking, position values should be between 0–100.