Open App

Multi-Axis Scripts (Beta)

Edit, save, and preview multi-axis funscripts with companion files for stroke, surge, sway, twist, roll, pitch, and vibrate.

Overview

Most funscripts control a single up-and-down stroke motion. Multi-axis scripts add extra channels of movement, such as twist and roll, that multi-axis devices like the OSR2 and SR6 can play together. ScriptCompiler lets you open, edit, save, and preview these scripts as a single set.

Each axis is its own funscript with its own points. ScriptCompiler keeps the axes grouped together so they share one timeline, one playback cursor, and one save action, while every axis is still a standalone file you can hand to any compatible player.

Beta feature
Multi-axis support is rolling out in stages. Opening, saving, backups, and device-emulator preview are stable. The timeline editing surface for working on several axes at once is still in beta and may change.

The Axes

ScriptCompiler supports seven axes. The stroke axis is the familiar up-and-down motion every script has; the other six are optional companions. The channel codes follow the standard TCode convention used by multi-axis players.

Axis Channel Motion
StrokeL0Up and down (the main axis)
SurgeL1Forward and back
SwayL2Left and right
TwistR0Rotation
RollR1Tilt side to side
PitchR2Tilt forward and back
VibrateV0Vibration intensity

Every script always has a stroke axis. The other six are added only when a script actually uses them.

Companion Files

On disk, each axis is a separate .funscript file. They share a common base name and are distinguished by an axis suffix, matching the naming convention multi-axis players use to discover them automatically:

  • Stroke - myscript.funscript (no suffix)
  • Surge - myscript.surge.funscript
  • Sway - myscript.sway.funscript
  • Twist - myscript.twist.funscript
  • Roll - myscript.roll.funscript
  • Pitch - myscript.pitch.funscript
  • Vibrate - myscript.vib.funscript
Vibrate uses .vib
The vibrate companion is named .vib.funscript, not .vibrate.funscript, to match the convention other players expect.

Files that share a base name are treated as one script. Files in different folders are never merged, even if they share a name, and a file whose name has no recognized suffix is treated as a plain stroke script.

Opening a Multi-Axis Script

There are two ways the companion axes come in together:

Selecting multiple files

When you open more than one .funscript file at once, ScriptCompiler groups them by base name and loads the matching set as a single multi-axis script. The stroke file anchors the group; its companions are attached automatically.

Automatic companion detection

When you open a single stroke file and the ScriptCompiler Bridge is connected, ScriptCompiler looks next to that file for companion axes with matching names and loads any it finds. When companions are attached this way, a short notice lists the detected axes so you can remove any you did not intend.

Companion detection needs the Bridge
Automatic on-disk detection of sibling files relies on the ScriptCompiler Bridge. Without the Bridge, open the axes together with a multi-file selection instead.

Editing Axes

Beta
The multi-axis editing surface is in beta. The behavior described here may change as the feature is finished.

When a script has more than one axis, the timeline shows an Axes panel on the left edge. It lists every axis present in the script and lets you choose which one you are editing. The panel can be collapsed to a thin rail and expanded again when you need it.

The axes are drawn as stacked lanes on the timeline. The axis you are editing is the active lane; the others appear as dimmed reference lanes so you can line up motion across axes. Editing always applies to the active axis only.

From the Axes panel you can:

  • Switch the active axis - click an axis row to edit it
  • Show or hide a lane - toggle the eye icon on a row to hide a reference lane out of view (the active axis is always shown). A hidden lane is also muted on the Device Emulator, so it will not move while you preview
  • Add an axis - pick one from the Add axis list to start scripting it. A newly added axis becomes the active axis automatically, so you can start editing it right away
  • Remove an axis - use the remove control on a row (the stroke axis cannot be removed)

You can also cycle the active axis from the keyboard with Ctrl + Up and Ctrl + Down , which move up and down the stacked-lane order. All other timeline editing, tools, and shortcuts work on the active axis exactly as they do for a single-axis script.

Saving

Saving a multi-axis script writes every axis at once. Each axis is saved to its own companion file using the suffix naming convention, so the set stays discoverable by other players.

  • With the Bridge - each axis is written next to the others using its companion name, in the same folder as the stroke file.
  • In the browser - the axes are bundled into a single .zip download named after the script, so one save action delivers the whole set. A single-axis (stroke-only) script still saves as one plain .funscript file.

Backups

Automatic backups cover every axis. If your work is interrupted, ScriptCompiler can restore the entire multi-axis set, not just the stroke axis. When a backup is found, you are offered the chance to restore it the next time you open the editor. Backups of older single-axis scripts continue to restore as a plain stroke script.

Previewing on the Device Emulator

To preview all axes moving together, switch the Device Emulator to the OSR / SR6 profile. It plays the positional axes (stroke, surge, sway, twist, roll, and pitch) at once in a 3D view.

The Handy and Kiiroo KEON profiles preview the stroke axis only, so switch to OSR / SR6 when you want to see every axis move together.

To preview a single axis on its own, make it the active axis and hide the others with the eye icon in the Axes panel. Hidden axes are muted on the emulator, so only the axes you are showing will move. This lets you test one axis on a device without removing the rest from the script.

Vibrate is not previewed
The OSR / SR6 preview shows the six positional axes. The vibrate axis is not part of the 3D motion preview.