SR6 Controller - 53 Built-in Action Loops + Funscript Player with Full 4-Axis Support (Stroke/Pitch/Roll/Twist)

HELLO EVERYONE

First-time poster here, so please be gentle :slight_smile:

I built this little tool purely for fun and figured the community
might enjoy it too, so I’m sharing it as-is - no commercial intent,
no Patreon, just a hobby project. I’ve been daily-driving it on my
own setup for a while and everything works on my end (SR6 over
serial + FunscriptSimulator3D for visual check), but every rig is
different, so feedback, bug reports and suggestions are very
welcome. If you find it useful, that already makes my day; if you
have ideas to make it better, even better.

WHAT IS IT

A tiny Windows tool (14 MB single-file exe, no install) that drives
SR6 / TCode hardware as if it were an OFS client: ships with 53
built-in action loops, and can also play any .funscript multi-axis
script file (stroke / pitch / roll / twist all supported).

WHY I MADE IT

OFS is slow to start and needs a video on the timeline. When you
just want the machine to “move on its own”, or quickly compare
different rhythms, that workflow is clunky. This tool bypasses OFS
entirely: it pretends to BE an OFS server, feeding action loops to
FunscriptSimulator3D / MultiFunPlayer, while simultaneously pushing
TCode commands over serial to SR6 hardware.

FEATURES

  • 53 built-in presets, covering:

    • Core rhythms: edging / tease / grind / pound / jackhammer /
      shallow_quick
    • Classic Ayva moves (down_forward / back_thrust / swirl family)
    • 5 highlights extracted from “Flim13 - My Friend’s Mom 3”:
      flim13_fast_full rapid full-amplitude strokes
      flim13_hard_pound hard pounding beat (amp ~ 170)
      flim13_groove_mid mid-tempo groove
      flim13_deep_slow slow deep grinding (period ~ 780 ms)
      flim13_shallow_quick shallow quick teasing
  • Drag-and-drop any .funscript onto the exe to play it. Companion
    files (.pitch / .roll / .twist) are auto-merged.

  • Dual output:

    • WebSocket (ws://127.0.0.1:8080/ofs) for FunscriptSimulator3D
      or MultiFunPlayer 3D visualisation
    • Serial TCode for the actual SR6 hardware
  • 100 Hz output, cosine-eased interpolation, low-pass speed
    smoothing, fade-in transition between presets - no jitter, no
    hard snaps when switching.

  • Per-axis inversion flags (pitch is inverted by default; flip in
    source if your sim shows the wrong direction).

HOTKEYS

Up / Down Speed control (0.1x - 5.0x)
Left / Right Switch to previous / next action group
Drag-drop Launch in script mode with the dropped funscript(s)

HOW TO USE

  1. Double-click sr6_controller.exe.
    It auto-detects the first serial port and starts the WebSocket
    server on port 8080.
  2. Open FunscriptSimulator3D or MultiFunPlayer and connect to
    ws://127.0.0.1:8080/ofs (subprotocol: ofs-api.json).
  3. Use the arrow keys to pick a rhythm and tune the speed.
  4. To play your own funscript, just drop the file(s) onto the exe.

HARDWARE

Any TCode-compatible device (SR6 / OSR2 / etc). Serial port is
auto-detected (first available); baud rate 115200.

NOTES

  • Global hotkeys rely on the keyboard library and may need admin
    rights on Windows.
  • The default axis_map routes pitch/roll to L1/L2 (matching the
    author’s existing wiring). If your firmware uses the standard
    R1/R2, edit axis_map in main.py.
3 Likes