What is a funscript?
A funscript is a small JSON text file containing timed movement positions. A compatible player reads it alongside a video and sends synchronized motion to a supported device. The file contains no video or audio.
Updated 11 September 2026 · Examples use FunGen 2.6.3
What is inside a .funscript file?
The main list is called actions. Each action has an at timestamp in milliseconds and a pos position from 0 to 100. For example, at: 1000 means one second into the video; pos: 80 asks for a position at 80% of the configured range.
These are normalized positions, not centimetres or a universal physical speed. Your player and device settings determine the movement range and how closely the hardware can follow it. A dense sequence of points is not automatically better: timing, range and achievable speed matter more.
A simple, readable example
{
"version": "1.0",
"inverted": false,
"range": 100,
"actions": [
{"at": 0, "pos": 20},
{"at": 1000, "pos": 80},
{"at": 2000, "pos": 20},
{"at": 3000, "pos": 80}
]
} Download this neutral example (.funscript) and inspect it in the editor. It contains motion data only.
Here, the move from 20 to 80 takes one second. Moving between those positions in half a second would double the requested average speed. The position is not an intensity score: two scripts with the same highest point can have very different timing.
How to play a funscript with a video
- Obtain the video and its matching script. Check that they use the same edit, introduction and duration.
- Keep them in the same folder with the same base name, such as
motion-demo.mp4andmotion-demo.funscript. - Open the video in a compatible player. FunGen automatically looks for a matching script beside a local video; you can also open a script explicitly.
- Check the timeline, connect your device, and start with a modest device range. Compare synchronization near the start and later in the video.
The playback guide covers the full journey. For setup details, use The Handy guide or OSR2 / SR6 guide. Different devices may interpret or limit the same motion differently.
Single-axis and multi-axis funscripts
A conventional script describes the main stroke axis. Multi-axis workflows add separate tracks for rotation or translation, such as roll, pitch, twist, surge and sway. Only devices with the corresponding motion channels can reproduce them.
Separate companion files are commonly used. FunGen can also export a combined multi-axis format through its Export settings; choose the format your target player supports. Keep companion files together and check channel mapping before playback.
How are funscripts made?
You can place and refine points by hand, or generate a starting stroke track with AI. FunGen processes supported 2D and VR video locally. Its optional Pro Extra axes feature synthesizes auxiliary motion for whole-video VR runs; those extra movements are not measured body pose from the footage.
Full-video Pro AI generation is paid; the editor and limited AI previews let you evaluate the workflow first. See the current free and Pro options before deciding.
Why is my script out of sync?
A constant delay often points to a playback offset. A delay that grows over time can indicate a different video edit or timing mismatch. If only one section is wrong, inspect that section on the timeline. Changing one global offset will not repair every kind of mismatch.
The next step depends on what you have: make a script, play an existing one, or download FunGen for your computer.
For a quick check, open the free browser Script Workshop: inspect a local timeline, review basic Doctor findings and preview edits before downloading a copy.