ANANGA

Guide · The format

The funscript, explained.

A funscript is a small text file, ending in .funscript, that lists times and positions so a connected device can move in time with a video or audio file. It holds no pictures and no sound: only numbers.

01 / IN SHORTFour facts cover most of it.

  • It pairs with one media file and shares its name: evening.mp4 plays with evening.funscript.
  • Each point is a time and a position: at in milliseconds from the start, pos from 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.funscript adds 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 }
  ]
}
FieldWhat it holdsGood to know
actionsThe list of points, in time order.The only field every player needs.
atTime in milliseconds from the start of the media.Whole numbers. 90,000 is one and a half minutes in.
posPosition from 0 to 100.0 is the bottom of the stroke, 100 the top.
invertedtrue flips the scale, so 0 becomes the top.Rarely set. A player that honours it flips every position.
rangeThe stroke range, 0 to 100, the script was written for.Players differ on whether they apply it.
versionThe format version.Usually "1.0".
metadataOptional 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.

The example script drawn as position over time Five points joined by straight lines: 10 at 0 ms, 90 at 400 ms, 30 at 650 ms, 85 at 1,000 ms and 10 at 1,500 ms. The first line covers 80 units in 400 ms, which is 200 units a second. 100500 0 ms5001,0001,500 ms pos 400, 90650, 301000, 85 80 units in 400 ms→ 200 units/s
The example above, drawn. Each dot is one action; the line is the path the device follows.

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.

AxisTCodeMotionFile name
StrokeL0Up and down, the main axisevening.funscript
SurgeL1Forward and backevening.surge.funscript
SwayL2Left and rightevening.sway.funscript
TwistR0Rotationevening.twist.funscript
RollR1Tilt left and rightevening.roll.funscript
PitchR2Tilt forward and backevening.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.

  1. Keep the pair together.Put the script in the same folder as its video, with exactly the same name before the extension.
  2. 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.
  3. 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.
  4. 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 noticeLikely causeWhat to do
Always a little lateWireless delay between the player and the device.Move the script earlier with the offset; keep the setting for that device.
Always a little earlyThe script was timed slightly ahead, or the offset overcorrects.Move the script later with the offset.
Fine at first, then driftingThe 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 skippedPoints 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 movesThe 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.

Written and checked by ANANGA in Paris. Corrections are dated on this page.

Play one · By invitation

Play it in your browser.

The ANANGA player opens your videos and their funscripts together, with the Handy, Intiface devices and the OSR2 or SR6, and keeps every file on your device. It opens to a few people at a time while it is being made.

Adults only. We keep your email only to invite you. Privacy