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:
atis the time in milliseconds from the start of the video.1000means one second in.posis the position from 0 to 100. For a stroker, 0 and 100 are the two ends of the stroke. For a vibrator, low and high intensity.
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.
| Funscript | Pattern | |
|---|---|---|
| Timed to a video | Yes | No |
| Tied to specific content | Yes (one video per script) | No |
| Customisable live | No | Yes |
| Need a script file | Yes | No |
| Good for VR scenes | Yes | Less so |
| Good for ambient sessions | Less so | Yes |
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.
- Same video, same cut: Plug-and-play.
- Different intro length: Use Set First Cue. Press C when the first action happens; the script aligns.
- Different frame rate or re-encoded version: Set First Cue usually fixes it. If the script drifts over time, you have the wrong cut entirely; find a script for your video version.
- Different scene, same performers: Will not work. Find a script for the right scene.
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.
- Stroker: Reads
posas a literal position. The sleeve moves to that point. - Vibrator: Reads
posas vibration intensity. Position 100 becomes strong vibration; position 0 becomes off. - Machine (Hismith): Reads
posas speed. High positions become fast thrusts.
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:
- Community sites like eroscripts.com. Some scripts are free, some cost a few dollars. The community has been around long enough that most popular scenes already have a script.
- Official platforms. SLR (sexlikereal.com) ships scripts with their Interactive scenes. Pornhub has an Interactive section too.
- Independent creators on Patreon and similar sites. Scripters who release new work each month.
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.

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:
- Multiplier scales every position value (so 1.5x makes everything stronger).
- Speed range caps the floor and ceiling.
- Per-device intensity scales per toy if you have several paired.
- Stretch exaggerates intensity changes (helpful for soft scripts).
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:
- A recording of a session.
- An audio track. The motion is silent; the sound comes from your video.
- A video.
- Tied to a specific brand of toy.
- Encrypted or DRM-protected.
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:
- Download a free script from eroscripts.com.
- Open Script Player in ToyControl.
- Click Import files and pick the
.funscriptfile. - 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.