MultiFunPlayer

repository·master·Indexed 42 days ago

https://github.com/yoooi0/multifunplayer

A synchronization engine that links video playback with hardware device motion using scripts. It supports multiple concurrent outputs, a wide range of video players (including DeoVR, MPV, VLC, and Plex), and various output protocols such as buttplug.io, TCP, UDP, and websockets. The tool features automatic script loading via naming conventions for TCode v0.2 and v0.3, and is extendable via a C# plugin system.

Tokens
2.7K
Snippets
3
Records
13
Agent score
53%

What's inside MultiFunPlayer

  1. Overview of MultiFunPlayer

    master
    MultiFunPlayer is a synchronization tool that uses scripts to synchronize multiple devices with video files simultaneously. It allows for an enhanced experience by enabling multiple concurrent outputs and supporting a wide range of video players and device protocols.
  2. How to synchronize devices with videos

    master

    Follow these steps to set up synchronization:

    1. Add Video Player: Click the top-right "plus" button to add your desired video player.
    2. Configure Player: Expand settings using the "arrow" button on the right side of the player entry if needed.
    3. Connect Player: Click Connect.
      • Note: For DeoVR, Whirligig, and HereSphere, you must enable remote server/control support in their respective settings.
    4. Add Output: Click the bottom-right "plus" button to add your desired output device.
    5. Configure Output: Expand settings using the "arrow" button on the right side.
    6. Connect Output: Click Connect.

    Once connected, you can load scripts manually (drag and drop onto an axis File text box or use Script->Load) or automatically via naming conventions.

  3. Configure the Navbar and Footer in themeConfig

    master

    The themeConfig object controls the visual components of the site:

    Navbar Configuration:

    • title: The text displayed in the navbar.
    • logo: An object containing alt text and src path for the site logo.
    • items: An array of navigation items. Use type: 'doc' to link to specific documentation pages via docId.

    Footer Configuration:

    • style: The visual style (e.g., 'dark').
    • links: An array of link groups. Each group has a title and an array of items (each with label and href).
    • copyright: The copyright string displayed in the footer.
    themeConfig: ({
      navbar: {
        title: 'MultiFunPlayer',
        logo: {
          alt: 'Logo',
          src: 'img/logo.svg',
        },
        items: [
          {
            type: 'doc',
            docId: 'intro',
            position: 'left',
            label: 'Documentation',
          },
        ],
      },
      footer: {
        style: 'dark',
        links: [
          {
            title: 'Links',
            items: [
              {
                label: 'GitHub',
                href: 'https://github.com/Yoooi0/MultiFunPlayer',
              },
            ],
          },
        ],
        copyright: `Copyright © ${new Date().getFullYear()} Yoooi0.`,
      },
    });
  4. Configure Docusaurus for MultiFunPlayer documentation

    master

    The docusaurus.config.js file defines the site metadata, presets, and theme configuration for the MultiFunPlayer documentation site. Key configuration areas include:

    • Site Metadata: title, tagline, favicon, url, and baseUrl.
    • Organization Info: organizationName and projectName (used for GitHub Pages integration).
    • Link Handling: onBrokenLinks (set to 'throw') and onBrokenMarkdownLinks (set to 'warn').
    • Internationalization (i18n): Configures defaultLocale and available locales.
    • Presets: Uses the 'classic' preset with specific settings for docs (including sidebarPath and editUrl), blog (disabled), and theme (custom CSS path).
    • Theme Configuration: Defines the navbar (with logo and navigation items), footer (with links and copyright), and prism (syntax highlighting themes).
    import {themes as prismThemes} from 'prism-react-renderer';
    
    /** @type {import('@docusaurus/types').Config} */
    const config = {
      title: 'MultiFunPlayer',
      tagline: 'Flexible application to synchronize various devices with media playback',
      favicon: 'img/favicon.ico',
      url: 'https://yoooi0.github.io',
      baseUrl: '/MultiFunPlayer/',
      organizationName: 'Yoooi0',
      projectName: 'MultiFunPlayer',
      onBrokenLinks: 'throw',
      onBrokenMarkdownLinks: 'warn',
      trailingSlash: false,
      i18n: {
        defaultLocale: 'en',
        locales: ['en'],
      },
      presets: [
        [
          'classic',
          ({
            docs: {
              sidebarPath: './sidebars.js',
              editUrl: 'https://github.com/Yoooi0/MultiFunPlayer/tree/master/Docs/',
            },
            blog: false,
            theme: {
              customCss: './src/css/custom.css',
            },
          }),
        ],
      ],
      themeConfig: ({
        navbar: {
          title: 'MultiFunPlayer',
          logo: {
            alt: 'Logo',
            src: 'img/logo.svg',
          },
          items: [
            {
              type: 'doc',
              docId: 'intro',
              position: 'left',
              label: 'Documentation',
            },
          ],
        },
        footer: {
          style: 'dark',
          links: [
            {
              title: 'Links',
              items: [
                {
                  label: 'GitHub',
                  href: 'https://github.com/Yoooi0/MultiFunPlayer',
                },
                {
                  label: 'Patreon',
                  href: 'https://www.patreon.com/yoooi',
                },
              ],
            },
          ],
          copyright: `Copyright © ${new Date().getFullYear()} Yoooi0.`,
        },
        prism: {
          theme: prismThemes.github,
          darkTheme: prismThemes.dracula,
        },
      }),
    };
    
    export default config;
  5. Configure the Docusaurus Docs preset

    master

    Within the presets array, the docs object allows you to customize how documentation is handled.

    • sidebarPath: Path to the file defining the sidebar structure (e.g., ./sidebars.js).
    • editUrl: The URL where users can go to edit the documentation directly in the source repository (e.g., https://github.com/Yoooi0/MultiFunPlayer/tree/master/Docs/).
    // Inside presets -> classic -> docs
    docs: {
      sidebarPath: './sidebars.js',
      editUrl: 'https://github.com/Yoooi0/MultiFunPlayer/tree/master/Docs/',
    }
  6. Automatic script loading via file naming conventions

    master

    MultiFunPlayer can automatically load scripts based on the currently played video file name if they follow specific naming patterns. The scripts must be named <video name>.<suffix>.funscript.

    Standard Axis Naming

    AxisDescriptionValid file name suffix
    L0Up/Down.funscript
    L1Forward/Backward.surge.funscript
    L2Left/Right.sway.funscript
    R0Twist.twist.funscript
    R1Roll.roll.funscript
    R2Pitch.pitch.funscript

    TCode v0.2 Naming

    AxisDescriptionValid file name suffix
    V0Vibrate.vib.funscript
    V1Pump.lube.funscript
    L3Suction.suck.funscript

    TCode v0.3 Naming

    AxisDescriptionValid file name suffix
    V0Vibrate.vib.funscript
    A0Valve.valve.funscript
    A1Suction.suck.funscript
    A2Lube.lube.funscript

    These file names are matched in all script libraries and in the currently playing video directory.