funscript.wiki
Article Talk History

Funscript

Funscript
Extension.funscript
FormatJSON
Created~2015
StandardCommunity de facto
Used byOpenFunscripter, MultiFunPlayer, ScriptPlayer, The Handy

A funscript is a JSON-based file format that encodes time-synchronized haptic motion data for interactive sex toys, stroker devices, and other actuators. The format serves as the de facto interchange standard across the interactive media ecosystem, supported by every major scripting tool, player, and hardware manufacturer.

Overview ยง

The funscript format stores a sequence of actions: timestamped position values indicating where a device's actuator should be at a given moment in time. Values range from 0 (fully retracted / bottom position) to 100 (fully extended / top position). By interpolating between successive action points, compatible players drive device hardware in real-time synchronization with video playback.

A minimal funscript file looks like:

{
  "version": "1.0",
  "inverted": false,
  "range": 90,
  "actions": [
    { "at": 0,    "pos": 0   },
    { "at": 500,  "pos": 100 },
    { "at": 1000, "pos": 0   },
    { "at": 1500, "pos": 100 }
  ]
}

Where:

  • at โ€” timestamp in milliseconds from the start of the associated video
  • pos โ€” position integer from 0 to 100

Metadata Fields ยง

FieldTypeDescription
versionStringFormat version (typically "1.0")
invertedBooleanIf true, 0 = top and 100 = bottom
rangeIntegerMaximum stroke range (0โ€“100) used during playback
actionsArrayThe core data: list of {at, pos} objects
metadataObjectOptional: creator, description, license info
rawActionsArrayLegacy/deprecated; often stripped by tools

Multi-axis scripts ยง

A single .funscript file encodes one axis of motion. Multi-axis setups (e.g., OSR2, SR6) use multiple files simultaneously, each targeting a different axis:

  • L0 โ€“ Stroke (up/down) โ€” the primary/default axis
  • L1 โ€“ Surge (forward/back)
  • L2 โ€“ Sway (left/right)
  • R0 โ€“ Twist (rotation)
  • R1 โ€“ Roll
  • R2 โ€“ Pitch

These axis names are defined by the T-Code protocol specification and used by multi-axis players like MultiFunPlayer.

History ยง

The funscript format grew out of earlier interactive script communities. The RealTouchScripts community (which later became EroScripts) used proprietary formats tied to the RealTouch device. As the Fleshlight Launch and similar devices emerged, community developers created open JSON-based formats. The .funscript extension was standardized through community adoption and the ScriptPlayer software, and was subsequently documented in the buttplug.io specification.

File placement ยง

For automatic recognition by most players, a funscript file must:

  1. Be placed in the same directory as its matching video file
  2. Share the same base filename (e.g., scene.mp4 โ†’ scene.funscript)

Some players (like MultiFunPlayer) support script repositories โ€” configurable folders scanned for matching scripts.

See also ยง

File Formats

Categories: File Formats