01 / IN SHORTFour facts cover most of it.
- It pairs with one media file and shares its name:
evening.mp4plays withevening.funscript. - Each point is a time and a position:
atin milliseconds from the start,posfrom 0 (bottom) to 100 (top). - The player draws a straight line between points and sends the device along it, on time.
- Extra files add extra axes for devices that have them:
evening.twist.funscriptadds rotation.
02 / INSIDE THE FILEPlain JSON, readable in any text editor.
Open a funscript in a text editor and you will see something like this. Only actions is essential; everything else is optional.
{
"version": "1.0",
"inverted": false,
"range": 100,
"metadata": {
"title": "Evening",
"creator": "Your name",
"license": "CC BY 4.0"
},
"actions": [
{ "at": 0, "pos": 10 },
{ "at": 400, "pos": 90 },
{ "at": 650, "pos": 30 },
{ "at": 1000, "pos": 85 },
{ "at": 1500, "pos": 10 }
]
}
| Field | What it holds | Good to know |
|---|---|---|
actions | The list of points, in time order. | The only field every player needs. |
at | Time in milliseconds from the start of the media. | Whole numbers. 90,000 is one and a half minutes in. |
pos | Position from 0 to 100. | 0 is the bottom of the stroke, 100 the top. |
inverted | true flips the scale, so 0 becomes the top. | Rarely set. A player that honours it flips every position. |
range | The stroke range, 0 to 100, the script was written for. | Players differ on whether they apply it. |
version | The format version. | Usually "1.0". |
metadata | Optional details: title, creator, description, license, tags, duration. | Editors such as OpenFunscripter write it for you. |
One early specification describes positions as 0 to 99. In practice, scripts and players use 0 to 100.
03 / HOW A PLAYER READS ITStraight lines between points.
Between two points the device travels in a straight line, so its speed is the distance divided by the time. From position 10 at 0 ms to position 90 at 400 ms is 80 units in 0.4 seconds: 200 units a second.
Real devices have limits
A device can only move so fast, and it needs a moment between commands. A good player keeps every move inside those limits instead of asking for the impossible. ANANGA never asks a device for more than 500 units a second, or for two moves less than 80 ms apart, and uses lower limits for slower devices.
Your range, not the script's
Positions are relative: 0 and 100 are the ends of whatever range the device is set to use. Many players let you narrow it. In ANANGA this is your fit: you choose once the part of the stroke that suits you, and every script is mapped onto it.
04 / MULTI-AXIS SCRIPTSOne file per axis, named after the main one.
Most devices move along one line, and one file is enough. Devices such as the OSR2 and SR6 can also rotate and tilt. Each extra axis gets its own file, named after the main script with the axis added before .funscript. The axis names come from the TCode protocol these devices use.
| Axis | TCode | Motion | File name |
|---|---|---|---|
| Stroke | L0 | Up and down, the main axis | evening.funscript |
| Surge | L1 | Forward and back | evening.surge.funscript |
| Sway | L2 | Left and right | evening.sway.funscript |
| Twist | R0 | Rotation | evening.twist.funscript |
| Roll | R1 | Tilt left and right | evening.roll.funscript |
| Pitch | R2 | Tilt forward and back | evening.pitch.funscript |
The OSR2 plays stroke, roll and pitch (twist too, on models that have it); the SR6 plays all six. TCode also has channels for vibration (V0), valve (A0) and suction (A1) on devices that have them. ANANGA pairs these files by name automatically, and also reads the channel codes as names, such as evening.R0.funscript.
05 / PLAYING A FUNSCRIPTFour steps, the first time.
- Keep the pair together.Put the script in the same folder as its video, with exactly the same name before the extension.
- Open both in a player.Desktop players such as ScriptPlayer and MultiFunPlayer run on Windows. Browser players need nothing installed. In the ANANGA player, you choose a folder and it pairs every video with its scripts.
- Connect the device.There are three common routes: the Handy by its connection key over Wi-Fi; Intiface Central, the free app that connects hundreds of Bluetooth devices; and TCode, by USB cable or Wi-Fi, for the OSR2, SR6 and similar devices.
- Play, then set the offset once.If the movement runs ahead of the picture or behind it, move the script a little earlier or later and keep that setting for the device.
06 / FIXING SYNCMost problems have one of five causes.
| What you notice | Likely cause | What to do |
|---|---|---|
| Always a little late | Wireless delay between the player and the device. | Move the script earlier with the offset; keep the setting for that device. |
| Always a little early | The script was timed slightly ahead, or the offset overcorrects. | Move the script later with the offset. |
| Fine at first, then drifting | The script was made for a different version of the video, with another length or frame rate. | Find the version of the video the script was written for; their lengths should match to the second. |
| Jerky, or strokes skipped | Points too close together or too fast for the device. | Run the check below. Smoothing, or a player that respects device limits, fixes most of it. |
| Nothing moves | The device is not connected, or the script is paired with another file. | Reconnect, then check that the two file names match exactly. |
07 / CHECK A SCRIPTFind problems before you press play.
Choose a .funscript file to see its length, its speeds and anything a device would struggle with. The check runs entirely in your browser: the file is never uploaded.
08 / QUESTIONSAsked often.
Is a funscript a video?
No. It is a text file of times and positions, small enough to send by email. It does nothing without the media it was made for and a player to read it.
Where do funscripts come from?
Most are written by hand by scripters, frame by frame, in editors such as OpenFunscripter. Others are generated by software that tracks motion in a video, or made from music or by drawing. Communities share many for free, and some scripters sell theirs.
Can I make my own?
Yes. An editor gives you full control. ANANGA's Create turns music, a video, a picture, text, subtitles, MIDI or a drawing into a script you can play at once or download as a .funscript.
Do I need a device to use one?
No. Many players can draw the motion on screen, which is also a good way to judge a script before using it with a device.
Will a stroke script work with a vibrator?
It can. A player turns the motion into intensity: faster or fuller movement becomes stronger vibration. How well this feels depends on the player. ANANGA does it for vibrators connected through Intiface.
What is the difference between range and inverted?
range says how much of the stroke the script was written to use; inverted says the scale is upside down, with 0 at the top. Both are optional, and most scripts leave them at their defaults.
Is a funscript private?
The file contains only numbers, but its name usually names the video, so treat it like the video. ANANGA keeps your videos and scripts on your own device.
09 / SOURCESWhere the facts come from.
- Funscript format, buttplug.io specification.
- Funscript, funscript.wiki.
- Multi-axis guide, FunscriptForge documentation.
- The full reference, with a JSON Schema: the funscript format, as a spec.
- Device limits and connection routes: as built into the ANANGA player.
Written and checked by ANANGA in Paris. Corrections are dated on this page.