01 / IN SHORTFour things to know first.
- Three devices, three sets of axes. The OSR2 strokes and tilts two ways. The OSR2+ adds twist. The SR6 adds forward and back, and side to side, for six axes in all.
- They speak TCode. Plain-text commands such as
L050I500, which the specification allows over a serial cable, Bluetooth or Wi-Fi. - One file per axis. Each extra axis has its own funscript, named after the main one:
evening.twist.funscriptadds twist toevening.funscript. - Missing axes are fine. Devices ignore files for axes they do not have, and a stroke-only script plays on all of them.
02 / THE SIX AXESWhat moves, and which file moves it.
| Axis | Motion | File name | Devices |
|---|---|---|---|
| Stroke · L0 | Up and down | evening.funscript | All |
| Surge · L1 | Forward and back | evening.surge.funscript | SR6 |
| Sway · L2 | Left and right | evening.sway.funscript | SR6 |
| Twist · R0 | Rotation | evening.twist.funscript | OSR2+, SR6 |
| Roll · R1 | Tilt left and right | evening.roll.funscript | OSR2, OSR2+, SR6 |
| Pitch · R2 | Tilt forward and back | evening.pitch.funscript | OSR2, OSR2+, SR6 |
Directions and the centre
In TCode, L0 is positive upward, L1 positive away from you, and L2 positive to your left. R0, R1 and R2 turn around those three lines. On an axis that moves both ways, the middle of the range is the centre, or rest. So in a twist, roll or pitch script, 50 is straight and level, and the script swings either side of it.
Funscript positions run from 0 to 100. TCode values run from 0 to just under 1, and the player converts one to the other.
03 / WHAT TCODE LOOKS LIKEShort commands, one per axis.
A command is a letter for the kind of axis, a digit for the channel, then digits for the value as a fraction. An I suffix gives the time, in milliseconds, to get there; the specification recommends it for scripts. Commands on one line run together.
L050I500 R180I500 R250I500
This moves the stroke to the middle, rolls part-way to one side, and holds pitch at the centre, all over half a second. Your player writes these for you from the funscripts.
| Command | What it does |
|---|---|
D0 | Identifies the device and its firmware version. |
D1 | Reports the TCode version. |
D2 | Lists the axes and the range you prefer for each. |
DSTOP | Stops the device. |
Version 0.4 of the specification, dated October 2026, adds easing terms and a Bluetooth companion. Check that your firmware and player support a version before relying on its features.
04 / CONNECT AND PLAYFive steps, the first time.
- Put the files together.The video and every axis file in one folder, with the same base name. A player that finds the main script finds the rest.
- Choose a TCode player.MultiFunPlayer (Windows) supports TCode v0.2 and v0.3 over serial, UDP, TCP or websockets, with per-axis speed limits, smoothing and auto-home. XTPlayer (Windows, Linux, macOS) plays funscripts on TCode devices and follows DeoVR, HereSphere and Whirligig. Intiface Central can drive them too, with extra setup.
- Connect.By USB cable or over the network, as your player and firmware allow.
- Set each axis's range.Start narrow on twist, roll and pitch, and widen as you learn how a set feels. A full swing on every axis at once can be a lot.
- Find stop, then play.Know where your player's stop is before you start. If the motion runs early or late, see fixing sync.
ANANGA's player connects TCode devices by USB in Chrome or Edge, or over Wi-Fi, and plays L0, L1, L2, R0, R1 and R2 plus vibration. Because it is a secure web page, it reaches a Wi-Fi device only at a secure (wss://) address; otherwise use the cable. It opens to everyone this winter.
05 / ONLY A STROKE SCRIPT?Three options.
- Play the stroke alone. It works on every device; the extra axes simply have no script.
- Let the player add motion. XTPlayer can add pseudo-random motion to the other axes, based on the stroke's position.
- Write the axes yourself. Editors such as FunGen have a multi-axis timeline. See how to make a funscript.
Some newer editors keep several axes in one file, under an axes list. ANANGA's funscript spec says players may read it, but not all do, so one file per axis is still the safe way to share a set.
06 / QUESTIONSAsked often.
What is the difference between the OSR2 and the OSR2+?
Twist. The OSR2+ adds rotation (R0) to the OSR2's stroke, roll and pitch.
Will a multi-axis set play on the Handy or a Keon?
Only the main stroke file. The others are ignored, so the set still plays.
Which file names do players accept?
The names in the table above are the common convention. ANANGA's player also reads the channel code as the name, such as evening.R0.funscript.
What does 50 mean in a roll script?
Level. For axes that move both ways, the middle of the range is the centre, so the script tilts either side of 50.
Is a stroke script for the OSR different from one for the Handy?
No. The main file is an ordinary funscript and plays on any stroker. The format, explained.
Where do I find multi-axis scripts?
See where to find funscripts, and ANANGA's free, open catalogue at ananga.ai/scripts. Before you play one, check each file: the checker names the axis from the file name.
07 / SOURCESWhere the facts come from.
- TCode specification, Tempest Multiaxis.
- Multi-axis guide, FunscriptForge documentation.
- osr-emu, an OSR emulator, for the axes of each model.
- MultiFunPlayer and XTPlayer, project pages on GitHub.
- Quickstart, Intiface Central documentation.
- FunGen, project page on GitHub.
- The funscript format, as a spec, ANANGA docs. ANANGA's player: as built.
Written and checked by ANANGA in Paris against the pages above on 6 November 2026. Corrections are dated on this page.