Can someone explain to me, preferably visually, the axis of movement of a stroker with multiple axis?

Sure, I’ll start with the common devices and their functionality

OSR2 - 2 degrees of movement: Stroke and Roll

OSR2+ - 3 Degrees of movement: Stroke, Roll, Pitch

SR6 - 5 degrees of movement: Stroke, Roll, Pitch, Surge, Sway

Twist, T-Valve, Lube pump are also common add ons and can be added to any device

Here’s a reference picture to help visualize the 3D axes

Reference

Each axis has 2 forms of movement assigned and available to funscript. One rotation and One Translation. Translation is movement from point A to point B on the axis, Rotation is using the axis as an anchor and rotating the 3D object without letting the position on that axis change.

X Axis: Sway, Roll

Y Axis: Stroke, Pitch

Z Axis: Surge, Twist

There are also bolt on mods like T-Valve, pump, vibe, squeeze that operate on a sliding scale of fully active-inactive or fully open-closed.


Stroke

Translation on the Y Axis (Up/Down movement)

Reference

Stroke


Surge

Translation on the Z Axis (Toward/Away movement)

Reference

Surge


Sway

Translation on the X Axis (Left/Right movement)

Reference

Sway


Twist

Rotation on the Z Axis (Think screwing in a fastener)

Reference

Twist


Roll

Rotation on the X Axis (Left/Right Rotation)

Reference

Roll


Pitch

Rotation on the Y Axis (Toward/Away Rotation)

Reference

Pitch


Valve/SuckManual

Open / Close the T-Valve (There’s variation between devices but 0=Open 100=Closed is my go to)

.suck.funscript is a little different see This Post if you’re interested in valve

Reference

Valve


Funscript Files

script naming conventions are (for video.mp4):

video.{axis}.funscript

with the only exception being video.stroke.funscript, for which stroke can either be omitted or not.

video.stroke.funscript = video.funscript
video.surge.funscript
video.sway.funscript
video.roll.funscript
video.pitch.funscript
video.twist.funscript
video.valve.funscript = video.suckManual.funscript (XTP needs suckManual, MFP uses valve)
video.suck.funscript
video.pump.funscript or video.lube.funscript on some setups
video.vib.funscript

These are all considered 1.0 funscript files.

You can also use a merged funscript 1.1 or 2.0 to serve a single funscript that combines all the different axis funscript files into a json channels array. Currently these are usually named video.funscript so it might get confused with the stroke 1.0 file if you aren’t careful. This is why there’s a setting on eroscripts to add .max.funscript addition to merged 1.1/2.0 downloads.