What is a funscript and how does it work

A funscript is a small file that tells your toy how to move with a video. Here is what they look like, where to find them, and how ToyControl uses one.

A funscript is a small file that tells your toy how to move along with a video. If you have ever watched a scene and wanted your toy to follow what is happening on screen, a funscript is the thing that does that.

It is not a video. It is not a clip. It is a tiny text file you load alongside a video, and a player like ToyControl reads it and drives your toy.

What a funscript actually is

A funscript is text. Specifically, it is a JSON file with a list of moments and positions. Each moment says "at this time, the toy should be at this position." That is the entire format.

A short example:

{
  "actions": [
    { "at": 0,    "pos": 0   },
    { "at": 500,  "pos": 80  },
    { "at": 1000, "pos": 20  },
    { "at": 1500, "pos": 90  }
  ]
}

Two fields per action:

Most funscripts have thousands of these entries packed into a single file. A 10-minute scene might have 1,500 actions. The file is usually under a megabyte. You can have a library of hundreds without thinking about disk space.

Funscript is an open community format. It is not a formal standard like HTML or JPEG, but every interactive toy player agrees on what the file looks like. ToyControl, OpenFunscripter, HereSphere, DeoVR, and many more all read the same .funscript files.

Funscript vs video file

A funscript and a video are two separate files. The funscript holds the motion. The video holds the picture and sound. You need both to get the full experience.

A funscript without a video is just a sequence of motions; you can play it, but it is timed to a video you do not have, so the timing will feel arbitrary.

A video without a funscript is a regular video. The toy can play a pattern alongside it, but it will not follow the on-screen action.

Funscript vs pattern

A funscript is timed to a specific video. A pattern is generated live and not tied to anything on screen.

FunscriptPattern
Timed to a videoYesNo
Tied to specific contentYes (one video per script)No
Customisable liveNoYes
Need a script fileYesNo
Good for VR scenesYesLess so
Good for ambient sessionsLess soYes

Most ToyControl users mix both. Funscript when watching content; patterns for everything else.

Do I need the exact same video?

Mostly yes. A funscript is timed to a specific cut of a video. If you have a different cut, you may need to nudge the timing.

In practice, popular scenes have several script versions for the most common cuts. Pick the one that matches your file.

See The script and video are not in sync for the full fix.

Can a funscript control a vibrator?

Yes. Funscripts were originally made for strokers (position-based motion), but ToyControl maps them to whatever toy you have paired.

You can play the same script on a Lush, a Tremblr, and a Hismith. They each feel different, but the timing matches the video on all of them.

Where funscripts come from

Most funscripts are made by hand. A scripter watches a scene, frame by frame, and marks where the action happens. Good scripts take hours to make.

Three main sources:

See Where to find scripts for your videos for the longer list.

What makes a good funscript

A good script breathes. It has fast sections and slow sections. It has zeros where the action pauses. It matches what you see on screen. A bad script is flat from beginning to end; the toy moves the whole time and nothing on screen explains why.

When you load a script in ToyControl, the heatmap at the top of the Script Player gives you a glance: tall bars are intense moments, gaps are calm moments. A good script looks varied. A bad one looks flat.

Loaded funscript with the heatmap highlighted

See What makes a good funscript for more.

How ToyControl uses a funscript

You load a script into ToyControl. The Script Player reads the actions list and starts a clock when you hit play.

As the clock ticks past each at time, ToyControl interpolates between the listed positions. If two actions are 100 milliseconds apart, the toy moves smoothly between them in those 100 milliseconds rather than jumping in a single step.

ToyControl applies your settings on top:

You do not have to think about any of this. You load, you play. ToyControl does the math.

What it does not do

A funscript is a movement file. It is not:

It is one of the smallest, simplest files in the whole adult-tech world. That is its power.

Try a funscript

If you have a toy paired with ToyControl:

  1. Download a free script from eroscripts.com.
  2. Open Script Player in ToyControl.
  3. Click Import files and pick the .funscript file.
  4. Hit play.

If you also have the matching video, drop it into the Video Player. ToyControl will play them together and the toy will move with the action.

For a longer walkthrough using SLR, read How to play scripts with an SLR video.

Frequently asked

Is .funscript the only format? It is the dominant format and the only one ToyControl plays directly. There are other formats (CSV-based, multi-axis), but they are niche.

Can I edit a script myself? Yes, with a tool called OpenFunscripter (OFS). It is free, open-source, and the standard editor.

Are funscripts legal? They are inert text files describing motion. There is nothing inherently restricted about the format.

Do funscripts contain my personal data? No. The file describes motion, nothing else. Loading one does not transmit anything anywhere.

Will the script work on my VR headset? If you use HereSphere with Connect to VR, yes.

Related