.funscript or .csv file, connect via Bluetooth, and enjoy automated motion control.
Requirements
- OSSM firmware: Version 3.0 or later (with BLE streaming support)
- Compatible browser: Chrome, Edge, or Opera on desktop/Android
- Bluetooth: Enabled on your device
- Funscript file: A
.funscriptor.csvfile matching your video
Web Bluetooth is not supported on iOS devices (iPhone/iPad) or in Safari/Firefox browsers. For these platforms, consider using third-party funscript players with Buttplug.io integration.
How to Use
Load your media files
Click the file pickers to select your video file and matching
.funscript or .csv file. The funscript filename should match the video filename (e.g., my-video.mp4 and my-video.funscript).Connect to your OSSM
Click Connect to OSSM and select your device from the Bluetooth list. The OSSM will automatically enter streaming mode.
What is Funscript?
Funscript is a JSON-based file format used to synchronize toy movements with video content. Each funscript contains a series of position/time pairs that define where the device should move at specific moments during playback.Example funscript structure
- pos: Position from 0 (fully extended) to 100 (fully retracted). Yes, this seems backwards, but it’s how funscripts are implemented.
- at: Timestamp in milliseconds
Funscripts can be created using tools like OpenFunscripter or purchased from marketplaces like RealSync.
Alternative CSV format?
A CSV file can be used in place of a funscript. The player expects a pair of values. The time value first and the position value second. Each new line of the file defines where the device should move at specific moments during playback.Example CSV structure
- Timestamp in milliseconds
- Position from 0 (fully extended) to 100 (fully retracted). Yes, this seems backwards, but it’s how funscripts are implemented.
Playback Settings
| Setting | Description |
|---|---|
| Max Speed | Set the max speed of your device. If a move is unable to be completed in the alotted time it will be shortened automatically at the expense of accuracy. |
| Max Stroke Length | Sets the length of the rail that will be used. If the depth is less then this value the entire depth will be used. |
| Max Depth | Sets the maximum depth to be used by the funscript. |
| Max Acceleration | Sets how quickly the OSSM is allowed to reach a particular speed. Reduce this value to limit jerkiness at the expense of accuracy on fast moves. |
| Device Buffer | Attempts to smooth out latency by adding a small amount of buffer to all commands. Automatically included in time offset to keep video in sync. |
| Time Offset | Adjust sync timing (-50ms to +50ms). Use positive values if the OSSM is behind the video, negative if ahead. |
Safety Features
- Auto-stop on disconnect: If Bluetooth connection is lost, the OSSM ramps down safely
- Return to menu on disconnect: When you disconnect, the OSSM returns to the main menu
- Manual control: You can pause the video at any time to stop motion
- Max Speed and Acceleration: These settings will slow down the motion to reduce intensity.
- Dynamic Stroke Length: OSSM will reduce stroke length as necessary if a move is beyond the capabilities of the machine or user limits, at the expense of positional accuracy.
Troubleshooting
OSSM not responding to commands
OSSM not responding to commands
- Ensure the OSSM shows “streaming” mode on its display after connecting
- Check the debug logs for any error messages
- Try disconnecting and reconnecting
- Verify your OSSM firmware supports streaming mode (v3.0+)
Motion is out of sync with video
Motion is out of sync with video
- Adjust the Time Offset slider to compensate for delays
- Ensure your device isn’t experiencing Bluetooth interference
Funscript file not loading
Funscript file not loading
- Verify the file has a
.funscriptor.jsonextension - Check that the file contains valid JSON with an
actionsarray - Look for parsing errors in the debug logs
Choppy or stuttering motion
Choppy or stuttering motion
- Increase buffer setting
- Close other Bluetooth-connected devices to reduce interference
- Stay within 10 meters of your OSSM
- Try reducing video quality if your device is struggling
- Use a funscript with fewer per stroke. Funscripts with commands only when the machine changes directions are smoothest.
Technical Details
The funscript player uses the OSSM’s native streaming protocol via BLE:- Command format:
stream:position:timewhere position is 0-100 and time is milliseconds to reach the target - Update rate: Commands are sent every 2ms when new actions are due
- BLE characteristic: Uses the primary OSSM command characteristic (
522b443a-4f53-534d-1000-420badbabe69)
Position streaming is experimental. The firmware calculates the required speed to reach each target position within the specified time, using maximum acceleration for responsive motion. If the BLE connection is lost, the OSSM automatically ramps down and stops over 2 seconds.
BLE Protocol Documentation
Full streaming command reference and protocol details.
Operating Modes
Learn about streaming mode and other operating modes.

