ButtEOS - Use buttplug.io to control sex toys from your tease

Webteases are great, but what if you're in the mood for a slightly more immersive experience? Chat about Tease AI and other offline tease software.

Moderator: 1885

Post Reply
cfs6t08p
Explorer
Explorer
Posts: 29
Joined: Thu Apr 19, 2018 6:57 pm

ButtEOS - Use buttplug.io to control sex toys from your tease

Post by cfs6t08p »

ButtEOS is a userscript which allows EOS teases to control a variety of sex toys through the buttplug.io library

Features:
  • Vibrator speed control
  • Stroker/penetration toy metronome (with visualisation)
  • Stroker/penetration toy funscript playback (with visualisation)
You will need:
  • A userscript manager such as Violentmonkey or Tampermonkey (newer versions of Greasemonkey will not work!)

To get started, play the demo tease: https://milovana.com/webteases/showteas ... 9d045089a9


EOS Users
The following configurations have been tested:
  • Firefox - Windows 10 - Violentmonkey
  • Google Chrome - Windows 10 - Violentmonkey
Please report any other configurations as working/not working

EOS Creators
ButtEOS does not require any modifications to the EOS editor, any tease can be made compatible by displaying the requisite notifications.

Vibrator module
Create a notification displaying "Vibrator: " followed by a number between 0 and 100, the vibrator will remain at that level as long as the notification is visible.

Metronome module
Create a notification displaying "BPM: " followed by a number indicating the desired BPM, a bar indicating the movement of the toy will be displayed on the left hand side.

Funscript module
Funscript must first be loaded using a "Say" command. The first line of the command must contain the text "Load pattern: " followed by the pattern name (used to play it back later). The second line is a description of the pattern which will appear below the visualisation bar when the pattern is active. The third and any subsequent lines should contain the raw JSON text of the funscript file. Patterns may be loaded at the start or at any time during the tease. Pattern names must be unique throughout the entire tease, it is not possible to redefine a pattern at a later time. The "Say" command can be instant but the text must be visible on screen or in the scrollback log for ButtEOS to load the pattern. Wait atleast 0.5 seconds before switching to a different page to ensure that the script has time to load your patterns.

To play a previously loaded pattern, create a notification displaying "Pattern: " followed by the pattern name, a bar indicating the movement of the toy will be displayed on the left hand side. Patterns will repeat for as long as the notification is visible.

Example tease JSON

Code: Select all

{
  "pages": {
    "start": [
      {
        "say": {
          "label": "<p>This is a demo tease for ButtEOS,</p><p>a userscript which allows you to integrate EOS teases</p><p>with the buttplug.io library for controlling sex toys</p>"
        }
      },
      {
        "say": {
          "label": "<p>You will need to have a userscript manager installed</p><p>such as Violentmonkey or Tampermonkey.</p><p>Newer versions of Greasemonkey will not work.</p>"
        }
      },
      {
        "say": {
          "label": "<p>In Violentmonkey, select &quot;Find scripts for this site&quot;</p><p>Or navigate to &quot;greasyfork.org/en/scripts/by-site/milovana.com&quot;</p><p>Select the ButtEOS script and press &quot;Install this script&quot;</p><p>Then reload the page</p>"
        }
      },
      {
        "say": {
          "label": "<p>The buttplug.io logo should appear in the lower</p><p>right corner, this indicates that the script is running.</p>"
        }
      },
      {
        "goto": {
          "target": "setup"
        }
      }
    ],
    "setup": [
      {
        "image": {
          "locator": "file:caught-in-the-moment-001.jpg"
        }
      },
      {
        "say": {
          "label": "<p>Let&#39;s get started, shall we</p>"
        }
      },
      {
        "say": {
          "label": "<p>You will need a toy which is supported by buttplug.io</p>"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-002.jpg"
        }
      },
      {
        "say": {
          "label": "<p>A vibrator, stroker or penetrating toy will work</p>"
        }
      },
      {
        "say": {
          "label": "<p>First, let&#39;s make sure your toy is connected</p>"
        }
      },
      {
        "say": {
          "label": "<p>Click on the buttplug.io icon in the lower right-hand corner,</p><p>you won&#39;t be able to interact with the tease while the buttplug.io window</p><p>is open, so go ahead and close it by pressing the &quot;V&quot; button or</p><p>clicking anywhere outside the buttplug.io window</p>",
          "mode": "pause"
        }
      },
      {
        "say": {
          "label": "<p>You can open and close this window at any time to </p><p>change or confirm your settings</p>"
        }
      },
      {
        "say": {
          "label": "<p>If you have Intiface running on your computer, select the</p><p>&quot;Connect to Intiface Desktop&quot; option,</p><p>otherwise pick the &quot;Connect in Browser&quot; option.</p><p>Connecting directly from the browser is only supported on Google Chrome</p>",
          "mode": "pause"
        }
      },
      {
        "say": {
          "label": "<p>Now that you are connected to buttplug.io, you will have the</p><p> option to start scanning for devices. Make sure your device</p><p>is turned on and discoverable, then press the &quot;Start Scanning&quot; button</p>",
          "mode": "pause"
        }
      },
      {
        "say": {
          "label": "<p>Your device should appear in the list of Devices,</p><p>click on the checkbox next to the name of your</p><p>device to connect it to ButtEOS</p>",
          "mode": "pause"
        }
      },
      {
        "goto": {
          "target": "select"
        }
      }
    ],
    "vibrator": [
      {
        "image": {
          "locator": "file:caught-in-the-moment-023.jpg"
        }
      },
      {
        "say": {
          "label": "<p>You have selected &quot;vibrator&quot;</p>"
        }
      },
      {
        "say": {
          "label": "<p>I&#39;ll get that set up for you straight away</p>"
        }
      },
      {
        "say": {
          "label": "<p>Whenever you&#39;re ready, click to begin the test</p>",
          "mode": "pause"
        }
      },
      {
        "notification.create": {
          "title": "Vibrator: 20%",
          "id": "vib20"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-027.jpg"
        }
      },
      {
        "say": {
          "label": "<p>Your device should now be on, we&#39;ll start at a low intensity</p><p>and work our way up</p>"
        }
      },
      {
        "notification.remove": {
          "id": "vib20"
        }
      },
      {
        "notification.create": {
          "title": "Vibrator: 50%",
          "id": "vib50"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-026.jpg"
        }
      },
      {
        "say": {
          "label": "<p>Your device is now at half intensity, let&#39;s turn it up some more!</p>"
        }
      },
      {
        "notification.remove": {
          "id": "vib50"
        }
      },
      {
        "notification.create": {
          "title": "Vibrator: 100%",
          "id": "vib100"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-029.jpg"
        }
      },
      {
        "say": {
          "label": "<p>It&#39;s really going now, huh</p>"
        }
      },
      {
        "notification.remove": {
          "id": "vib100"
        }
      },
      {
        "goto": {
          "target": "end"
        }
      }
    ],
    "select": [
      {
        "image": {
          "locator": "file:caught-in-the-moment-007.jpg"
        }
      },
      {
        "say": {
          "label": "<p>We are now ready to begin controlling your device.</p><p>Please select the option which most accurately describes your device:</p>"
        }
      },
      {
        "choice": {
          "options": [
            {
              "label": "Vibrator",
              "commands": [
                {
                  "goto": {
                    "target": "vibrator"
                  }
                }
              ]
            },
            {
              "label": "Stroker/Penetration",
              "commands": [
                {
                  "goto": {
                    "target": "pattern"
                  }
                }
              ]
            }
          ]
        }
      }
    ],
    "pattern": [
      {
        "image": {
          "locator": "file:caught-in-the-moment-058.jpg"
        }
      },
      {
        "say": {
          "label": "<p>This is the &quot;stroker/penetration&quot; module</p>"
        }
      },
      {
        "say": {
          "label": "<p>Any toy which supports linear motion in buttplug.io</p><p>can be used with this module</p>"
        }
      },
      {
        "say": {
          "label": "<p>We&#39;ll start with the metronome function</p>"
        }
      },
      {
        "say": {
          "label": "<p>Whenever you&#39;re ready, click to begin the test</p>"
        }
      },
      {
        "notification.create": {
          "title": "BPM: 30",
          "id": "bpm30"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-059.jpg"
        }
      },
      {
        "say": {
          "label": "<p>Your device should now be moving at a slow, comfortable pace</p>"
        }
      },
      {
        "notification.remove": {
          "id": "bpm30"
        }
      },
      {
        "notification.create": {
          "title": "BPM: 60",
          "id": "bpm60"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-062.jpg"
        }
      },
      {
        "say": {
          "label": "<p>Let&#39;s speed up a bit</p>"
        }
      },
      {
        "notification.remove": {
          "id": "bpm60"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-060.jpg"
        }
      },
      {
        "say": {
          "label": "<p>You get the idea, now let&#39;s try something a little more interesting</p>"
        }
      },
      {
        "say": {
          "label": "<p>We&#39;ll need to do some additional setup for this part</p>"
        }
      },
      {
        "say": {
          "label": "<p>Don&#39;t worry, I&#39;ll take care of it so just sit back and relax</p>"
        }
      },
      {
        "say": {
          "label": "<p>Load pattern: Simple</p><p>This is a simple pattern</p><p>{&quot;actions&quot;:[{&quot;at&quot;:2000,&quot;pos&quot;:100},{&quot;at&quot;:2500,&quot;pos&quot;:0}]}</p>",
          "mode": "instant"
        }
      },
      {
        "say": {
          "label": "<p>Load pattern: Complex</p><p>This is a complex pattern</p><p>{&quot;actions&quot;:[{&quot;at&quot;:310,&quot;pos&quot;:30},{&quot;at&quot;:543,&quot;pos&quot;:0},{&quot;at&quot;:777,&quot;pos&quot;:20},{&quot;at&quot;:977,&quot;pos&quot;:40},{&quot;at&quot;:1177,&quot;pos&quot;:10},{&quot;at&quot;:1410,&quot;pos&quot;:60},{&quot;at&quot;:1644,&quot;pos&quot;:0},{&quot;at&quot;:1858,&quot;pos&quot;:80},{&quot;at&quot;:2078,&quot;pos&quot;:0},{&quot;at&quot;:2302,&quot;pos&quot;:100},{&quot;at&quot;:2527,&quot;pos&quot;:0},{&quot;at&quot;:3145,&quot;pos&quot;:100},{&quot;at&quot;:3595,&quot;pos&quot;:0},{&quot;at&quot;:3823,&quot;pos&quot;:40},{&quot;at&quot;:4051,&quot;pos&quot;:0},{&quot;at&quot;:4308,&quot;pos&quot;:40},{&quot;at&quot;:4566,&quot;pos&quot;:0},{&quot;at&quot;:4807,&quot;pos&quot;:50},{&quot;at&quot;:5048,&quot;pos&quot;:10},{&quot;at&quot;:5281,&quot;pos&quot;:60},{&quot;at&quot;:5515,&quot;pos&quot;:20},{&quot;at&quot;:5749,&quot;pos&quot;:70},{&quot;at&quot;:5949,&quot;pos&quot;:30},{&quot;at&quot;:6182,&quot;pos&quot;:80},{&quot;at&quot;:6416,&quot;pos&quot;:40},{&quot;at&quot;:6633,&quot;pos&quot;:90},{&quot;at&quot;:6883,&quot;pos&quot;:50},{&quot;at&quot;:7100,&quot;pos&quot;:100},{&quot;at&quot;:7317,&quot;pos&quot;:40},{&quot;at&quot;:7550,&quot;pos&quot;:100},{&quot;at&quot;:7784,&quot;pos&quot;:50}]}</p>",
          "mode": "instant"
        }
      },
      {
        "say": {
          "label": "<p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>",
          "mode": "instant"
        }
      },
      {
        "say": {
          "label": "<p>The left hand side of your screen should show a message</p><p>indicating that we&#39;ve loaded 2 different patterns,</p><p>ready to play the first pattern?</p>"
        }
      },
      {
        "notification.create": {
          "title": "Pattern: Simple",
          "id": "simple"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-064.jpg"
        }
      },
      {
        "say": {
          "label": "<p>A simple pattern should be playing for you now</p>"
        }
      },
      {
        "notification.remove": {
          "id": "simple"
        }
      },
      {
        "notification.create": {
          "title": "Pattern: Complex",
          "id": "complex"
        }
      },
      {
        "image": {
          "locator": "file:caught-in-the-moment-069.jpg"
        }
      },
      {
        "say": {
          "label": "<p>Longer and more complex patterns are also possible, enjoy!</p>"
        }
      },
      {
        "notification.remove": {
          "id": "complex"
        }
      },
      {
        "goto": {
          "target": "end"
        }
      }
    ],
    "end": [
      {
        "image": {
          "locator": "file:caught-in-the-moment-003.jpg"
        }
      },
      {
        "say": {
          "label": "<p>That&#39;s the end of our test</p>"
        }
      },
      {
        "say": {
          "label": "<p>You may go back to the device selection screen if you&#39;d</p><p>like to try a different device</p>"
        }
      },
      {
        "choice": {
          "options": [
            {
              "label": "Test another device",
              "commands": [
                {
                  "goto": {
                    "target": "select"
                  }
                }
              ]
            },
            {
              "label": "End tease",
              "commands": [
                {
                  "end": {}
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "files": {
    "caught-in-the-moment-001.jpg": {
      "id": 1747919,
      "hash": "d3325997af2385384e46394892bcc8ee5fdc17b7",
      "size": 5198167,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-002.jpg": {
      "id": 1747920,
      "hash": "9a6bb5ed9d9c0f0464f8d7dc33900c95de20f305",
      "size": 5085468,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-007.jpg": {
      "id": 1747922,
      "hash": "2c53f605b9826c6c149e173875fe7d274aa277f0",
      "size": 5430332,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-023.jpg": {
      "id": 1747923,
      "hash": "0970a4d775816e6136652173b6d8ee15822b411a",
      "size": 6254226,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-026.jpg": {
      "id": 1747925,
      "hash": "16289df5212110bd2bcc4580526304e264847a7e",
      "size": 5879315,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-027.jpg": {
      "id": 1747926,
      "hash": "163639f667ec2e497cea0dec574edacf7eedd926",
      "size": 6399968,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-029.jpg": {
      "id": 1747928,
      "hash": "1303eecf1c07755bbe73e835c3e8b520fe2a8ead",
      "size": 6157250,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-058.jpg": {
      "id": 1747934,
      "hash": "f41b77561c035ac1dd67029866d70af3c47330ee",
      "size": 5908721,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-059.jpg": {
      "id": 1747935,
      "hash": "e0ce5dc422349d383949040ff81c045f2841d822",
      "size": 5703920,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-060.jpg": {
      "id": 1747936,
      "hash": "9764a4d354ca7adea7763ae2eb46ba3ab6766869",
      "size": 5597541,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-062.jpg": {
      "id": 1747938,
      "hash": "01e72a0d4b3fb1915eb576512743e1f2783a1972",
      "size": 5560613,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-064.jpg": {
      "id": 1747940,
      "hash": "5537b338d78b143849b94775185fed613d08a252",
      "size": 6012313,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-069.jpg": {
      "id": 1747946,
      "hash": "f3facaca72596bf6ff5bbe797a77d493a00ed59c",
      "size": 6153941,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    },
    "caught-in-the-moment-003.jpg": {
      "id": 1749866,
      "hash": "18f07f0fb0f1188cf10e7cfab638bbd3aa056104",
      "size": 5595723,
      "type": "image/jpeg",
      "width": 6720,
      "height": 4480
    }
  },
  "modules": {
    "notification": {}
  },
  "init": "",
  "galleries": {},
  "editor": {
    "recentImages": []
  }
}
Credits
The buttplug.io library makes all of this possible
UI elements shamelessly stolen from https://github.com/buttplugio/buttplug-tampermonkey
Inspired by EOS creators pushing the envelope to create ever more interactive webteases
qatguy
Explorer At Heart
Explorer At Heart
Posts: 164
Joined: Mon Dec 11, 2006 10:23 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Sub/Slave(s): I'm a switch

but mostly a sissy submissive
Contact:

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by qatguy »

we need teases, to use this software, and intregrate it!!!

i only have a android.

please help.
qatguy
Explorer At Heart
Explorer At Heart
Posts: 164
Joined: Mon Dec 11, 2006 10:23 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Sub/Slave(s): I'm a switch

but mostly a sissy submissive
Contact:

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by qatguy »

will anybody help me, with creating a tease?

i can pose for all or most pictures, dressed as a sissy.

kik me at: gwscion

or pm me on here.

please, i beg of your help.
qatguy
Explorer At Heart
Explorer At Heart
Posts: 164
Joined: Mon Dec 11, 2006 10:23 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Sub/Slave(s): I'm a switch

but mostly a sissy submissive
Contact:

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by qatguy »

i give up!!!

i am at the mercy of you creators, to make a butt.io interactive tease for me, to use with my Lovense vibrator toys.

but, since you dont care or too busy, fine.

you are really missing out!

qatguy
drcidr
Explorer
Explorer
Posts: 6
Joined: Wed Oct 17, 2012 3:26 am

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by drcidr »

Can confirm, it works!

Windows, Chrome, and a Lovense toy.

Thank you!
Jamatora
Explorer
Explorer
Posts: 27
Joined: Sat Oct 19, 2019 9:00 pm
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Location: Germany

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by Jamatora »

Hey i created a small tease which is compatible with a vibrator.
https://milovana.com/webteases/showtease.php?id=59283
Have fun
:yes: Let me know if there are bugs
Greetings Jamatora
qatguy
Explorer At Heart
Explorer At Heart
Posts: 164
Joined: Mon Dec 11, 2006 10:23 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch
Sub/Slave(s): I'm a switch

but mostly a sissy submissive
Contact:

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by qatguy »

your tease doesnt work properly anymore.

please fix it.
adcdgfgh
Curious Newbie
Curious Newbie
Posts: 1
Joined: Sun Aug 01, 2021 2:34 am

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by adcdgfgh »

Appreciate your work! However I am having some troubles using it.

I am using Microsoft Edge 110.0.1857.41, Tampermonkey 4.18.1, with ButtEOS 1.1. If I enable the plugin on any tease page, the browser would reject the whole page with the following error messages in console:

Code: Select all

Refused to display 'https://eosscript.com/' in a frame. The embedder requires it to enforce the following Content Security Policy: 'default-src 'none'; script-src https://eosscript.com; style-src https://eosscript.com; img-src https://eosscript.com https://media.milovana.com blob:; media-src https://eosscript.com https://media.milovana.com blob:; connect-src https://eosscript.com https://media.milovana.com blob:; font-src https://eosscript.com; worker-src https://eosscript.com blob:; block-all-mixed-content'. However, the frame neither accepts that policy using the Allow-CSP-From header nor delivers a Content Security Policy which is at least as strong as that one.
User avatar
wellrested
Explorer At Heart
Explorer At Heart
Posts: 113
Joined: Sat Jan 02, 2016 8:25 am
Gender: Male
Sexual Orientation: Straight
I am a: Switch

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by wellrested »

This is great, I finally was able to give it a go and get it working today.

I did have some trouble getting violetmonkey to work in chrome for a while, so I'll put the steps here in case it helps anyone else.

Issue:
  • followed instructions
    had the buttplug symbol
    connected to the toy via chrome
    had the tab in chrome showing bluetooth
    but no vibrations
Solution - give violetmonkey access to "all sites" rather than just milovana.com\*
Shufflehaze
Curious Newbie
Curious Newbie
Posts: 4
Joined: Sat Aug 07, 2021 1:08 pm
Gender: Male
Sexual Orientation: Open to new ideas!
I am a: Submissive

Re: ButtEOS - Use buttplug.io to control sex toys from your tease

Post by Shufflehaze »

it is wondeful! pls do more stuff like this
Post Reply

Who is online

Users browsing this forum: No registered users and 20 guests