Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Launchcontrol

GoDocGo Report CardBuild Statuscodecov.io

Launchcontrol logo

Launchcontrol is a server that can control/playback scripts on a Launch. This project contains plugins for both Kodi and VLC to communicate with the Launchcontrol server (loading scripts, pausing playback, etc.)

The main platform for Launchcontrol is Linux, but it has been successfully tested on Mac OS X. Works great on a Raspberry Pi with LibreELEC using the Kodi addon.

Windows versions requireButtplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

The Kodi and VLC addons work on all platforms (Linux, Mac and Windows.) Kodi's addon also works with their Android versions.

The Launch's firmware needs to be 1.2 (or higher.)

Script formats

Supported haptic script formats:

FormatContent TypeFile extensions
Funscriptapplication/prs.funscript+json.funscript.json
Rawapplication/prs.launchraw+json.launch.json
Kiirootext/prs.kiiroo.kiiroo
Kiiroo (Feel-Me/VR)application/prs.kiiroo+json.meta

Create your own Funscripts using the Funscripting Blender addon.

Downloads

Check the releases page for the latest binary downloads.

FilenameDescription
launchcontrol_linux_amd64Linux (64-bit)
launchcontrol_linux_386Linux (32-bit)
launchcontrol_darwin_amd64Mac OS X
launchcontrol_linux_armLinux ARM (Raspberry Pi)
launchcontrol_windows_amd64Windows (64-bit) (see note)
launchcontrol_windows_386Windows (32-bit) (see note)
script.service.launchcontrol.zipKodi Addon
launchcontrol.luaVLC Extension

NOTE: Windows versions of Launchcontrol do not have native Bluetooth support and require Buttplug.io Websocket server. Information on how to install and run Buttplug.io Websocket server can be found here. Check out the Metafetish blog and forums for the latest status.

Usage

Usage of launchcontrol:
-buttplug string
buttplug server websocket address
-ca string
certificate authority in PEM format
-insecure
skip certificate verification
-licenses
show licenses
-listen string
listen address (default "127.0.0.1:6969")
-noact
simulate launch on console
-version
show version

Start using native Bluetooth (BLE)

# Start server (listening on localhost:6969 by default)
./launchcontrol

Start using Buttplug.io Websocket Server

Buttplug.io can take care of communicating with BLE toys. This is the only way for Launchcontrol to communicate with a Launch on Windows.

With TLS

By default Buttplug is running with TLS enabled using a self-signed certificate. (Note that the certificate is stored in PFX format and needs to be converted to PEM before Launchcontrol can use it.)

./launchcontrol -ca certificate.pem -buttplug wss://localhost:12345/buttplug

Alternatively the certificate validation can be skipped:

./launchcontrol -insecure -buttplug wss://localhost:12345/buttplug

Without TLS

./launchcontrol -buttplug ws://localhost:12345/buttplug

Execute commands on HTTP endpoint using cURL

# Load and play script
curl -XPOST -H "Content-Type: text/prs.kiiroo" --data-ascii \
"{0.50:1,1.00:4,1.15:0,2.00:2}" http://localhost:6969/v1/play
# Pause a playing script
curl http://localhost:6969/v1/pause
# Resume paused script
curl http://localhost:6969/v1/resume
# Jump to a position in the script
curl http://localhost:6969/v1/skip\?p=1m3s
# Stop and reset script
curl http://localhost:6969/v1/stop
# Start playing last loaded script
curl http://localhost:6969/v1/play
# Dump loaded script raw data:
curl http://localhost:6969/v1/dump

Kodi Integration

The Launchcontrol Kodi service addon connects to a local Launchcontrol server and auto loads scripts and synchronizes playback, taking into account actions like pausing and seeking.

Kodi screenshot

Scripts that are paired with the movie file will be loaded. Pairing is done by placing a script file next a movie using the same base filename (this mirrors the same convention as for nfo or artwork). The addon uses Kodi's VFS while searching and loading scripts, so even movies on remote sources like SMB or HTTP servers will work.

Movie/script pairing example:

  • /my movies/title.mp4
  • /my movies/title.funscript

Install

Download script.service.launchcontrol.zip from the releases page. Or package the plugin yourself from contrib/kodi/script.service.launchcontrol. Just zip up the directory (or use the Makefile.)

This guide shows how to install the zip file in Kodi. After installation the plugin will automatically start.

NOTE: If you are running Launchcontrol on another machine then Kodi or are not using the default port, the address can be changed in the add-ons configure menu.

VLC Integration

VLC extension for Launchcontrol loads script from the local machine into a Launchcontrol server to play them in sync with a video. Pairing works the same as for the Kodi addon, just place the script file next to the video using the same base filename.

VLC Screenshot

Note: The VLC extension has less features then the Kodi addon, see VLC Extension README for details on what's included.

Install

Place the launchcontrol.lua in VLC's lua/extensions/ directory and reload extensions or restart VLC. The extension must be enabled every time VLC is restarted by clicking view->Launchcontrol. See VLC Extension README for more details on the extension.

Build

go get ./...
go build
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./launchcontrol

Raspberry Pi v2/v3 with LibreELEC

Make sure Bluetooth is disabled in the LibreELEC Services tab.

Build Launchcontrol server for arm:

go get ./...
GOARCH=arm GOARM=7 go build

Build the script addon:

make -C contrib/kodi/

Note: Pre-build binaries are also available on the releases page.

Copy the build results and an autostart.sh to the Raspberry Pi:

ssh root@libreelec 'mkdir /storage/launchcontrol'
scp launchcontrol root@libreelec:/storage/launchcontrol/
scp contrib/kodi/autostart.sh root@libreelec:/storage/.config/
scp contrib/kodi/script.service.launchcontrol.zip root@libreelec:/storage/

Reboot LibreELEC and install the script.service.launchcontrol.zip addon.

Thats it!

Personalize screenshot

Bluetooth requirements

See the gatt docs for the Bluetooth requirements/setup.

Other examples

Build and run example (Linux)

go build contrib/examples/playkiiroo.go
sudo setcap 'cap_net_raw,cap_net_admin=eip' ./playkiiroo
./playkiiroo -file input.txt

Launchcontrol is released under a BSD-style license.

About

Launchcontrol is a server that can control/playback scripts on a Launch

Topics

Resources

Stars

26 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages