Syncopathy - an offline bluetooth scriptplayer for the handy

Uhh hello.
I wanted to share something.

About OFS
Before that though I must clarify I’m not going to come back to OFS.
Sorry for going AWOL on that project. Long story short: I got really burned out on the project and needed a break (an indefinite break). So please respect that.
If I had the time and the motivation I would start from scratch on a new scripting tool but I don’t.

Story time
Anyway moving on to what this post is actually about.
Syncopathy. I’m adding another scriptplayer to the pile.
Basically I’ve recently gotten back into funscripts mainly because of the second coming “The Handy 2”.
None of the existing scriptplayers fit my use case, which is why I made this player.
I wanted to do an offline Bluetooth implementation which to my knowledge hasn’t been done yet apart from the old legacy Bluetooth stuff.
So naturally I ignored all the disclaimers on the docs BT FW4 / handy-public-rpc about Bluetooth not being ready and subject to change and started implementing.

Technicals
I made this application using Flutter, for video playback I use mpv as an external window.
Under the hood syncopathy uses the HSP (Handy Streaming Protocol) API via Bluetooth which was honestly a pain in my ass to implement but I got it to work eventually.
The device communication is all done by hand but for the GUI I made liberal use of Gemini which is very good at Flutter :robot:
Gemini is also very familiar with funscript :sob:

How to use
The project is available open source on github.

Just download the zip unpack and run the syncopathy.exe.
You should be greeted by two windows one for syncopathy and one for mpv.

  • First you should go to the settings and configure atleast one media path in the settings.

  • After that you can hit refresh in the media tab top right.

  • Syncopathy will recursively search the directory for funscripts with matching videos.

    • It will also generate thumbnails using ffmpeg all app data is stored in %appdata%\com.example\syncopathy
  • Next you can connect the handy

    • YOU NEED FIRMWARE 4 THIS WON’T WORK IN LEGACY BLUETOOTH MODE
    • I recommend putting the handy into the exclusive Bluetooth mode (blue light only) not the hybrid (wifi+bluetooth) mode as that way more resources are available for use
    • When the blue led is pulsing you can hit the Bluetooth “Disconnected” button in the top right of syncopathy.
    • If everything is alright it should connect in a few seconds the button will be green and say “Connected”
  • Now you can play videos. :partying_face:

  • While playing videos the visualizer tab is available

  • There’s a couple opinionated settings which you may want to tweak or turn off under settings mainly “Funscript Simplification” and “Slew Rate Limit” it’s some processing that’s applied to the scripts.

have fun

20 Likes

This is absolutely awesome, OP. I’ll definitely be taking a look.

If possible, could I please DM you regarding the Handy Streaming Protocol and Bluetooth?

Sure

This seems like a useful tool. I downloaded the zip file and tried to open the exe but got this error. Am I doing something wrong? Also, will this program allow for scripts to be randomly played from a library? Thanks in advance.

Well it’s a null pointer reference. Can’t really tell you why I need more info.
There is this surprise me button at the top of the library which picks a random video yes.

I’ve attached a SyncopathyV1_no-hwdec.zip to the github release which you can try.

1 Like

I attempted the new file you uploaded but still had the same problem. Not sure what is preventing it from running, but I am sure it is on my end. Thank you for trying though.

It’s kinda impossible to debug because it’s a native crash. I imagine it’s video player not properly initializing but it could be anything.
What I’d like to know if anybody else got this to run or if it only runs on my computer…

I don’t have the handy, but it runs on my windows 11 PC.

1 Like

Is it possible I need to download the video player this uses? What video player does this use btw?

No everything needed should be in that zip it’s the big libmpv-2.dll containing the video player https://mpv.io

If you are feeling adventurous you could try swapping the dll with the one in this Download mpv-dev-x86_64-20250713-git-bd21180.7z (mpv player (Windows)) It works on my end but I honestly don’t even know if there’s a difference :thinking:

1 Like

i also tried this and even tho i didnt get it to work, i see the potential! the connect button was visible first time i started for a little while, but “vanished”, now its locked on disconnect. where are the settings store, so i can delete and start fresh. Ps. i think i would prefer it not using Bluetooth but Wi-Fi instead :slight_smile:

Thank you!

oh nice a player that uses MPV and it’s uses the new BT mode, a double win

Upload the source code, please.

fine source code is now available. it is a vibe coded mess

1 Like

You’re a beast

I added a new build Release 20250727 · ofs69/syncopathy · GitHub

  • improved the handling of disconnects
  • added user defined categories.
  • added “skip to action” setting to the settings (skips to the first action in the funscript where there is movement)
  • added remap to full range setting which remaps scripts that do not use the full 0-100 range to use the full range
  • added a wheel of fortnune to the “surprise me button” (because why not)

In the future categories may act as playlists but for now they are just for categorization.
You create a category by clicking on category in the media library and adding it via the dialog that pops up. After which you can assign that category to a video by right clicking it.

Edit: I have also attached a linux and macos build. I have only tested the linux build on WSL you need to install “libmpv-dev”. I assume you have to do something similar on macos.


For some reason I keep getting this error when trying to connect my handy. Tried in wifi/bluetooth mode and got it to connect once..but the same error everytime after. Not sure could be causing it, rebooted the handy plenty of times, restarted the windows bluetooth service and re-installed the driver. My handy could just be borked, It’s survived 5 years now

No I get this too (maybe once every ten times) but usually it just works the second time. it could a bug in my code maybe a race condition of some sort

This is awesome! Thank you very much.
Are you planning on making this program able to play VR videos in the future?

I’d like to be able to playback vr video in mpv as 2d flat but actual vr is probably not something I will pursue.