XTPlayer - Cross platform TCode sync (OSR, SR6) Stream your local media and sync funscripts to almost any device with a browser

After looking through the interface of XTPlayer, specifically the gamepad/key map section, I assumed it was possible to keybind arbitrary tcode commands to the keyboard (sort of like with 3d printer software). Based on this assumption, I made some personal expansions of the tcode spec in my tcode device’s firmware to add new features linked my own custom tcode commands.

Now I am discovering that the gamepad/key map section in XTPlayer’s settings menu isn’t allowing me to enter any text in the ‘tcode’ column or add new row entries. I fear I may have misunderstood the purpose of the menu and/or I don’t know how to use it.

Was my assumption hasty or is there something I’m missing? Is it possible to keybind arbitrary tcode commands in XTPlayer? Anyone have any advice for my situation? I wish to be able to communicate with my tcode device directly during usage in order to trigger custom actions and adjust on-device settings.

You should be able to add custom commands on the motion tab.


After restarting XTP these should show up in the Gamepad/Key map

Be warned: This feature hasn’t had allot of testing but the few commands I tested worked when I added it. I dont personally use it my self.

In my firmware, to see a list of commands send:
# help (no space after #. Eroscripts did auto formatting) over TCode input like serial monitor.
#list-settings will show all the settings from the webUI you can modify over command.
Plain TCode commands should work like L01000I100 as well.

Quick note though, you can tie a button/key/analogstick axis to a device channel directly by default. I added the default setup I used at one point. I have not used my gamepad in a while though.

Hope all of this still works!

1 Like

There’s probably a pre-condition to the crash. Like I mentioned earlier, if you pop out the library window and try to go full screen you will crash for sure I know.

I have this fixed but I was trying to get a few more fixes/changes in before I release it. Taking longer than I expected due to how busy I’ve been with work.

well, and that crash also doesn’t happen if app started with debug)

I think your PC is possessed because that’s a guaranteed null reference error I overlooked in v0.5b build.

Unless your using another build version it was fixed here.

Thank you!! This worked perfectly and enabled me to finish my device customizations. It accepted my custom tcode first try and I had it all working within a few minutes after reading your post.

And thank you for XTPlayer as a whole! Best script player out there imo. It’s what inspired me to get into tcode devices.

1 Like

How do I hide the library? It reappears every time the mouse gets moved. and since my device is attached to my desk, it will move the mouse slightly.

Sometimes it just crashes as well.

Theres no way to stop that event from the users perspective atm.
How would you want it to behave?

Maybe I’m missing something but is there a way to enable some sort of motion smoothing or interpolation in XTPlayer? Even when I turn the motion range down to like 1% it doesn’t change how jerky some scripts are.

There is not, scripts are played as is.

Is there a a setting that allow to set default position of some axis like roll\pitch, for single-axis scripts? Just to have better angle.

I tried to set limits on that axis with middle position being what angle i like it to be - but looks like if it’s just single-axis scripts, it doesn’t take that middle position of pitch\roll as default

can’t find other solution is settings

Is there plans in the future for some form of motion smoothing, or even just a speed limit or other basic safety features? My current device does not have any form of motion smoothing built-in, making XTPlayer unusable with it. Almost every script is dangerously fast and jerky.

Are you limiting the axis ranges? This will modify the speed a bit and make things safer overall.
Something seems to be going on because I find 95% of scripts I download here to be perfectly find. Every once and a while I get a crazy script someone made but most are fine.
Note: there is an on the fly range modifier value but I think it may be broken in the current release. Ive since made it better but its still not perfect.

You’ve given me something to ponder. I would like the “home” position be 5000 fir calibration but that doesn’t work so well for use cases like this. I believe its using 5000 when being sent home now.
I may look into changing this to use the current user range mid/home instead and if one wants to calibrate they need a new profile or reset the ranges.
Maybe I can add a “Calibrate home” button and this is the only time it will send 5000.
Ill have to see.

Yes, will be great!
Cause current home position is really 5000, no matter what limits you set to axis
At least for axis that don’t used, when playing something single-axis

And really, being able to set pitch home position will make better angle in single-axis scenario

Well, table mount solution always make default home position being straight vertical, so 90 degree up\down motion.
And you sitting on chair in front of table, definitely don’t have your member being 90 degree vertical, it’s anatomically make some angle

It’s partially solved in multiaxis scripts by makers, and also by setting limits. But single-axis kinda work badly then(

I and I presume most, usually add random motion to single axis scripts so this is not a concern for that. I understand the want for this though. I believe Ive even tried it a few times.

I think the easiest way would be to disable the library in fullscreen.

harder way would be to make the library only appear if you mouse over the right 20% of your screen but idk if thats possible

So you would want the player controls to popup but not the library? Maybe a toggle for both? Maybe a key action that toggles showing/hiding the controls when mouse movement is turned off?

I believe I can make it only show up if the mouse is in that part of the screen. I have it set to NOT disappear if the mouse is hovering over the controls/library area right now.

In either case, its not working how I want it to exactly right now. Id rather it to overlay on the media and not resize the media like it used to pre ffmpeg but it just wasnt working with me for some reason. Id have to go at it from another angle.

Well, tried that, wasn’t happy about results

Looks like random motion, not reflecting action in the video ruins immersion for me more than just no motion on other axis

In theory, random motion can work if i set limits for pitch to almost no range, but in the position i want - it should do the trick for single-axis profile. Probably.

Seems like a really good player. Only big issue I have is that the program crashes on startup and/or when connecting to serial. If I reboot my computer I can use it again. If the program crashes or I quit out of it, it starts crashing again.

I get the following errors when this happens:

QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
qt.multimedia.ffmpeg: Using Qt multimedia with FFmpeg version 7.1.1 LGPL version 2.1 or later
QObject: Cannot create children for a parent that is in a different thread.
(Parent is XLibraryList(0x56112c08e180), parent's thread is QThread(0x56112b8b4f00), current thread is QThreadPoolThread(0x561130cf3ba0)
QBasicTimer::start: Timers cannot be started from another thread
[1]    331526 segmentation fault (core dumped)  ./XTPlayer-v0.5b-Linux-x86_64.appimage