CubiLink - Unity Animation to Multi-Axis (v3.3.2 - AIO Edition)

CubiLink is a BepInEx plugin that tracks animations in Unity games and turns their movement into T-Code/SR6 device output. It’s based on Gohyrt’s Live2D-to-SR6-Motion plugin.

It can detect animation values from Live2D, Spine, and regular Unity Transform animations, then lets you bind those values to motion axes like stroke, roll, pitch, twist, etc.

The basic idea is:

  1. Pick an animation parameter that moves with the scene.
  2. Bind it to an axis.
  3. Adjust the range until the device movement matches the animation.
  4. Save the setup as a template and connect your device.

Main Features

  • Supports multiple animation types
    • Live2D / Cubism
    • Spine
    • Unity Transform animations

  • In-game parameter picker
    • Search animation parameters
    • See live values and movements
    • Filter for moving or newly appearing parameters
    • Use the live graph/trace window to inspect parameter movement over time

  • Parameter highlighter
    • Hover a parameter to see which character part it likely affects
    • Helps identify useful animation values faster

  • Axis mapping
    • Bind animation parameters to SR6/T-Code axes
    • Adjust Min / Max, Invert, Multiplier, Offset, and Smoothing
    • Lock ranges or let CubiLink auto-detect the range while the animation plays
    • Limit the final output range per axis

  • Multi-Bind
    • Lets one axis use multiple animation parameters
    • Useful when different poses/scenes need different parameters for the same axis
    • Each rule can have its own priority and optional activity condition
    • The highest-priority active rule drives the axis
    • Rules can override Min / Max, Invert, Multiplier, and Offset

  • Built-in expression system
    • Use formulas instead of fixed numbers for Min / Max / Multiplier / Offset
    • Can also be used inside Multi-Bind, Auto-Load and Script-Override rules
    • Useful for conditions/detections, offsets, scaling, range conversion, and combining parameters

  • Auto-Load
    • Switch templates by scene, object, animation, expression, or log message
    • Shows currently detected scene/object/animation values in the UI
    • Expression rules can switch templates based on parameter state or movement

  • Script Overrides
    • Play custom .funscript files from BepInEx\config\CubiLink\Scripts based on set conditions
    • Useful for scripted moments where visual animation slows down, or more unique scripts are preferred
    • Can target all axes or specific ones
    • Supports Once/Loop playback and rule priority

  • Templates
    • Save mappings per game, character, or scene
    • Import/export templates and template packs
    • Makes it easy to share ready-to-use layouts with other users
    • Default location: BepInEx\config\CubiLink

  • Output modes
    • Serial T-Code
    • UDP T-Code
    • Intiface websocket (Buttplug)

  • Optional recording
    • Record enabled axis movement and export as multi-axis funscripts
    • Default folder: BepInEx\config\CubiLink\Recordings

  • Improved UI
    • Scalable and transparent UI
    • Collapsible sections
    • Different Layout modes
    • Resizable picker / graph / expression windows
    • Unsaved changes indicator
    • Mouse UI mode to unlock the cursor and block game mouse input while using the plugin

Example: Griffith’s Paizuri Simulator - Full Template


Notes

  • CubiLink is for Mono Unity games using BepInEx (currently does not support IL2CPP games).
  • Spine and Unity Transform support are new and may need more testing.
  • Older Mono Unity games (Unity 2017 / .NET 3.5-era) may require the separate Legacy Build.

How To Use

  1. Install BepInEx for the game you want to use it with.
    Usually this means extracting BepInEx into the game folder where the .exe is located.

  2. Start the game once after installing BepInEx.
    This should create the required BepInEx\.. directories and config structure if everything works.

  3. Copy the plugin CubiLink.dll into: BepInEx\plugins (use the legacy version for older games, if the main one doesn’t work)

  4. The plugin UI should now show up on game start.

  5. In Options, choose an output mode:
    • Serial: COM port, for example COM4
    • UDP: host and port, for example 127.0.0.1:7777
    • Intiface: websocket address, for example ws://127.0.0.1:12345


  6. Create a new template or use the default one.
    Templates let you save different mappings for games, characters, or scenes.
    You can also import/export templates shared by other user.
    Default location \BepInEx\config\CubiLink


  7. In the Axis Mapping section, click the parameter button for an axis you want to bind:
    • search for parameters by name
    • freeze sorting if the list changes too fast
    • hover over parameters to highlight likely matching model parts
    • use the live values / graph to see how a parameter behaves
    • right click a parameter to open its trace graph
    • left click a parameter to bind it

  8. After binding a parameter, adjust:
    • Min / Max
    • Multiplier
    • Offset
    • Invert if needed
    • You can temporarily disable individual axes (On/Off button), which will also exclude them from funscript recording.
    • Set Global Smoothing and Target Hz based on your device/preference.

  9. Use Range Lock depending on what you want:
    • Range Locked = keeps your range settings fixed
    • Range Learning = automatically records motion range while the model is moving


  10. Save Current Configuration when you are happy with the setup.

Expression System

CubiLink includes a small formula system for advanced setups.

Instead of only entering fixed numbers, you can use the game parameters and formulas in fields like Min, Max, Multiplier, Offset, and Multi-Bind rule settings. This can help when a game needs extra logic, scene-state checks, parameter mixing, or dynamic offsets.

Most users do not need expressions at first, but they can be very useful for more complex templates.

More Info

Expressions become useful when you want to:

  • only move during a specific animation state
  • combine multiple animation parameters
  • change offset or multiplier depending on the pose
  • make Multi-Bind rules more selective
  • trigger Script Overrides
  • switch templates with Auto-Load expression rules
  • convert one parameter range into another
  • check if a parameter exists or moved recently
  • check detected scene/object/animation names
  • react to recent Unity/BepInEx log messages

Simple examples:

Use half of a parameter value:
p_ParamPiston / 2

Only move when another parameter is active [condition, valueIfTrue, valueIfFalse]:
if(p_ParamBodyForward == 0, p_ParamPiston / 2, 0)
This uses ParamPiston / 2 only while ParamBodyForward is 0. Otherwise it returns 0.

Check if a parameter moved recently [parameter, moveDistance, timeMs]:
movingMs(p_ParamPiston, 0.5, 500)
Returns 1 if ParamPiston moved by at least 0.5 within the last 500 ms.

Check the current motion amount [parameter, frames]:
motion(p_ParamPiston, 10)
Returns the recent movement amount of ParamPiston over the last 10 frames.

Check if a parameter currently exists [parameter]:
exists(Spine:Character/Index_L_03 Rotation)
Returns 1 if that parameter is currently available, otherwise 0.

Check detected scene/object/animation names [pattern, optionalPrefix]:
scene(Cowgirl) && animation(Loop)
Returns 1 when the detected scene contains Cowgirl and the detected animation contains Loop.

Prefix matching example:
scene(HScene_, 1)
Returns 1 only when the scene name starts with HScene_.

Check a recent log message [pattern, optionalTimeMs, optionalPrefix]:
log(Finish開始)
Works like a one-time trigger when that exact log message is received.

Keep a log condition active for a short time:
log("eventCG2_natsu_event_03 eventObject", 5000, 0)
Returns 1 for 5000 ms after a matching log line appeared.

Prefix log matching:
log("changeMotion:", 1000, 1)
Returns 1 for 1000 ms when a recent log line starts with changeMotion:.

Convert one range into another [value, oldMin, oldMax, newMin, newMax]:
map(p_ParamPiston, 0, 2, 0.3, 0.8)
Turns ParamPiston from the range 0..2 into 0.3..0.8.

Clamp a value into a range [value, min, max]:
clamp(p_ParamPiston, 0, 1)
Keeps ParamPiston between 0 and 1.

Check if a value is inside a range [value, min, max]:
between(p_ParamPiston, 0.2, 0.8)
Returns 1 if ParamPiston is between 0.2 and 0.8.

Conditional value [condition, valueIfTrue, valueIfFalse]:
if(p_ParamState > 0, 0.8, 0.5)
Returns 0.8 when ParamState > 0, otherwise 0.5.

Useful operators:
+ - * /, > < >= <=, == !=, and/&&, or/||, not/!

Useful helpers:
exists, value, scene, object, animation, anim, log, moving, movingMs, motion, motionMs, between, map, clamp, min, max, abs, if

A full expression guide can be found here.


If you like this tool, consider supporting me on Patreon

PatreonCubiVar


Game Templates Collection

Community-shared templates from this thread.
Game Status Plugin Creator Template Reply
Griffith’s Paizuri Simulator :white_check_mark:Working v2.3 @ZeroScripts Download Post
HOUSHOU PLAYER :white_check_mark:Working v2.3 @ZeroScripts Download Post
Oral Sex Shop 2 :white_check_mark:Working v2.5 @ZeroScripts Download Post
無音-Muon- :white_check_mark:Working v2.5.3 @akiyama Download Post
おねショタ村の淫習 :white_check_mark:Working v2.5.3 @akiyama Download Post
Succubus Chase :white_check_mark:Working v2.5.3 @akiyama Download Post
Succubus Casino :white_check_mark:Working v2.5.4 @akiyama Download Post
Four Nights at
the Burger Shop
:white_check_mark:Working v2.5.5 @Falafel Download Post
ソムニア掌編 :white_check_mark:Working v2.5.5 @Falafel Download Post
サカって!メスネコちゃん :white_check_mark:Working v2.5.5 @Falafel Download Post
サカって!メスネコちゃん :white_check_mark:Working v2.5.5 @akiyama Download Post
幻想郷ふたなりバトルファック :white_check_mark:Working v2.6 @akiyama Download Post
Drugged Sex with a JIRAI
style Sugar Babe!
:white_check_mark:Working v2.6.1 @akiyama Download Post
俺は義妹の部屋に忍び込む :white_check_mark:Working v2.6.1 @akiyama Download Post
Sister ~The Time of Harmony~ :white_check_mark:Working v2.6.1 @akiyama Download Post
Watch Out Ecchi Oneesan Tachi :white_check_mark:Working v2.6.1 @akiyama Download Post
双子メ○ガキは射精させたい! :white_check_mark:Working v2.6 @akiyama Download Post
Succubus Battle :white_check_mark:Working v2.6 @akiyama Download Post
The Busty Witch Onee-san
Whose Boobs I Lost To!
:white_check_mark:Working v2.6 @akiyama Download Post
JUST DO IT! Gyaru-chan 2 :white_check_mark:Working v2.6 @akiyama Download Post
Natsuiro Lesson:
The Last Summer Time
:white_check_mark:Working v2.6 @akiyama Download Post
Busty Elven Babe
Traps You in Her Tits!
:white_check_mark:Working v2.6 @akiyama Download Post
CyberBondage ~Caged Bird~ :white_check_mark:Working v2.6 @akiyama Download Post
PISTON :white_check_mark:Working v2.6 @akiyama Download Post
お姉ちゃんは弟くんに襲われたい! :white_check_mark:Working v2.6 @akiyama Download Post
おっぱい癒しパイズリ :white_check_mark:Working v2.6.1 @akiyama Download Post
Come on in! Succubus-san :white_check_mark:Working v2.6.2 @akiyama Download Post
Natsu’s Milk Time :white_check_mark:Working v3.3.2 @ZeroScripts Download Post

Changelog

  • 16.05.2026 - v3.3.2 Workflow Update
    • Improved template workflow
      • Added adjustable template list height
      • Template changes are now tracked more globally instead of only per-axis template edits
      • Switching templates now keeps unsaved local edits staged in memory
      • Renaming templates updates linked Auto-Load rule targets where applicable
    • Implemented drag / ordering controls
      • Added drag handles for reordering templates
      • Added drag handles for Auto-Load rules
      • Added drag handles for Script Override rules
      • Hovering drag handles now highlights the affected row more clearly
    • Added axis range learning lock
      • Each axis can now be locked/unlocked individually
      • Locked axes are ignored by Range Learning
      • Useful when you only want to learn the range for specific axes without changing already-tuned ones
    • Improved Script Overrides
      • Once rules now play the full selected funscript after triggering by default
      • Added Cut option for rules to stop playback when the condition becomes false
      • Loop rules continue to repeat only while the condition stays true
    • Expanded expression support
      • Added log(pattern, ms, prefix) helper for checking recent Unity/BepInEx log messages
      • log(...) can be used in Script Overrides, Auto-Load expression rules, Multi-Bind conditions, and normal formula fields
      • Quoted log patterns can now contain commas, for example log("changeMotion: 0, 0", 5000)
    • Improved Auto-Load
      • Auto-Load rules are included in template exports for sharing
      • Auto-Load rule template selection works better with larger template lists
      • Improved rule editing and layout behavior when many rules are present
    • Improved axis behavior
      • Disabled-axis Preview no longer changes the axis Offset value
      • Turning an axis back on keeps the original Offset intact
      • Improved visual indication when an axis is script-overridden
      • Multi-Bind will now show if option is turned off
    • Improved Global Axis Output Range
      • Added Tools option to override final output range for all axes/templates
      • Per-axis Out values are preserved, but grayed out while the global override is active
    • Improved Auto-Load rule creation
      • New Auto-Load rules now automatically select the next template in list, making sequential template setup faster
    • Fixed Script Override dirty-state behavior
      • Opening the Script Overrides section no longer changes rule state by itself.
      • Saving from the Script Overrides/Automation area should now clear unsaved changes correctly.
    • Other UI and performance improvements

  • 14.05.2026 - v3.3.0 Switch
    • Added selectable UI layout modes
      • New Tabbed layout separates Setup, Mapping, Automation, and Tools
      • Added Classic layout for users who prefer the older single-page view
      • Layout preference is saved automatically
    • Improved header/status area
      • Header now shows the CubiLink name/version directly
      • Current selected template is always visible
      • Unsaved template changes are shown next to the template name
      • Runtime bridge details moved into the Runtime tooltip
    • Improved template sharing
      • Exported templates now include automation/playback behavior
      • Multi-Bind settings, Auto-Load rules, Script Override rules, formulas, and related settings are included
      • Script-Override .funscripts are embedded into exported templates when available
    • UI polish
      • Updated layout toggle styling
      • Improved save/layout controls
      • Cleaned up status/header spacing

  • 13.05.2026 - v3.2.0 Keeping Tabs
    • Main UI Overhaul
      • Added main tabs for Setup, Mapping, Automation, and Tools
      • Moved Save into the tab bar so it stays accessible from every page
      • Improved section spacing and visual hierarchy
      • Improved button hover/readability styling
      • Gave picker toggles clearer active-state feedback
      • Other minor improvements
    • Added Tools / Utility page
      • Added quick buttons for config, recordings, and script folders
      • Added Reset UI action
    • Performance improvements
      • Cached picker row display/detail strings until the parameter list changes
      • Reduced repeated text/detail rebuilding while scrolling or updating the picker
      • Avoided rendering the embedded parameter list while its pop-out picker is open
      • Kept picker refresh append-based so new parameters can appear without full list rebuilds

  • 11.05.2026 - v3.1.3 Bug fixes
    • Fixed parameter picker GUI errors caused by mismatched IMGUI layout/repaint rows.
    • Improved picker performance with large parameter lists by only drawing visible rows.
    • Fixed Auto-Load rule list usability with many rules.
      • Auto-Load rules now use their own scroll area.
      • Long rule lists no longer push the rest of the plugin UI out of reach.

  • 10.05.2026 - v3.1.2 Improvements
    • Improved range learning
      • Fixed cases where Range Learning could visually remain enabled but behave like Range Locked after switching parameters
      • Range Learning now starts from the current raw value and expands to the detected min/max movement peaks
      • Better handling for fully negative parameter ranges, such as -20 to -10
    • Added extra Live2D visual parameters
      • Added optional Cubism Part/Drawable based values for games where normal Cubism parameters are not useful enough
      • Added Bounds / position / opacity style visual values where available
      • The Simple toggle can hide these extra Live2D visual entries when they clutter the picker
    • Improved Live2D highlighter
      • Better scoring for common parameter names
      • Reduced incorrect fallback highlights
    • Improved Spine parameter detection in games with many active/static Spine objects
      • CubiLink now prioritizes visible/animated Spine skeletons instead of relying on Unity’s object order
      • Fixes cases where only static parameters appeared and animation-loop parameters were missing
      • Slightly increased the Spine skeleton scan cap from 4 to 6
      • Added a small diagnostic log showing which Spine skeletons were selected during scan

  • 09.05.2026 - v3.1.0 Automation & Script Overrides
    • Added Script Overrides
      • Play selected .funscript files from BepInEx\config\CubiLink\Scripts
      • Rules can target all axes or a specific axis
      • When expression decides when a script starts/stops
      • Once plays once when the condition becomes true
      • Loop repeats while the condition stays true
      • Script output overrides normal parameter / Multi-Bind output for the selected axis
      • Highest priority active script rule wins per axis
      • Recording/export captures active script override output
    • Expanded Auto-Load
      • Added rule types for Scene, Object, Animation, Expression, and Log
      • Added current detection readout for scene/object/animation
      • Added rule type and template dropdowns
      • Added expression-based template switching for games where scene/object/animation names are unreliable
    • Record / Export Info
      • Added clearer tooltips for recording and cleanup settings
    • Bug fixes / polish
      • Fixed mode selection dropdown overlap/input issues
      • Improved range learning for negative-only parameter ranges
      • Improved output preview behavior for negative Live2D ranges
      • Fixed expression editor parameter selection offset

  • 07.05.2026 - v3.0.0 Expand
    Thanks @akiyama for suggesting many of these features and testing them!
    • Added Spine animation support
      • Detects Spine skeletons in supported Unity games
      • Creates usable virtual parameters from bones and animation movement
      • Includes rotation, world movement, distance, and delta movement style values
      • Added Spine-focused parameter highlighting / slot isolation where possible
      • Added a simpler Spine parameter list option for easier browsing
    • Added Unity Transform animation support
      • Detects animated Transform hierarchies in non-Live2D games
      • Creates virtual parameters from position and rotation movement
      • Improved delayed scene scanning so parameters appearing after scene load are not missed
      • Better handling for parameters that appear/disappear during animation changes
    • Added native Multi-Bind
      • Multiple parameters can drive one axis
      • Priority decides which active rule wins
      • Optional activity/condition parameter per rule
      • Per-rule Min / Max / Invert / Multiplier / Offset
      • Supports formulas in rule fields
      • Copy/paste Multi-Bind rules between axes
      • Currently active rule is highlighted in the UI
    • Added native Auto-Load
      • Automatically switches templates by Unity scene name
      • Can also switch templates by matching log output
      • Useful for games with separate scenes, poses, or animation states
    • Improved parameter picker
      • Added pop-out resizable picker window
      • Added “New” filter for parameters that appear after opening the list
      • Added “Mark Old” to reset the new-parameter baseline
      • Added optional movement bars for quick visual comparison
      • Added optional reference range for picker indicators
      • Added copy button for parameter names
      • Added +M button to send parameters directly to Multi-Bind
      • Improved list refresh behavior while the picker is already open
    • Improved parameter detection and naming
      • Better unique names for Spine and Unity Transform parameters
      • Better handling for duplicate/simple parameter names
      • Improved support for full Spine: and Unity: parameter names in formulas
      • Reduced cases where active raw values existed but output did not update correctly
    • Improved scene scanning and performance
      • Reduced repeated full scans
      • Appends newly found parameters instead of constantly rebuilding the list
      • Better warmup scanning for scenes where animation objects load late
      • Lower overhead when the parameter list is open
    • Expanded expression support
      • Expressions can be used for Min / Max / Multiplier / Offset
      • Expressions can be used in Multi-Bind fields
      • Added helper functions such as exists, value, moving, motion, movingMs, motionMs, between, map, clamp, min, max, abs, if, and not
      • Added support for !, &&, ||, and, and or
      • Added better formula validation
      • Added improved helper UI and tooltips
      • Improved handling of full Spine / Unity parameter names with spaces and special characters
    • Improved UI and workflow
      • Added resizable pop-out windows for the parameter picker, graph, and expression editor
      • Added clearer Multi-Bind editor window
      • Added better parameter copy/selection workflow
      • Improved tooltip positioning
      • Improved spacing and scrolling in larger UI sections
      • Added hotkeys for Menu, Pause, and Mouse UI mode
      • Added Mouse UI mode to unlock the cursor and block game mouse input while using CubiLink
      • Esc now cancels accidental hotkey rebinding
      • Default UI transparency adjusted
      • Improved axis panel layout and borders
      • Added tooltips for several newer controls
    • Added Legacy Build
      • Separate build for older Mono Unity games
      • Intended for Unity 2017 / .NET 3.5-era games where the normal build cannot load

  • 19.04.2026 - v2.6.3 Preview fix
    • Fixed preview/debug not matching actual sent output in some formula-driven cases

  • 16.04.2026 - v2.6.2 UI fix
    • Fixed UI preview bars not matching actual T-Code output (D4 range)

  • 12.04.2026 - v2.6.1 UI & Perf
    • Improved UI behavior across templates
      • Template UI now acts as a baseline instead of resetting layout on every switch
      • Prevents window position/scale from jumping between templates
    • Improved performance
      • Reduced unnecessary scene rescans
      • Lower overhead while menu is open
      • Faster reaction on scene changes
    • Added unsaved changes indicator
      • Shows when current configuration differs from saved state
      • Save button now highlights pending changes
    • Per-axis output range control
      • Adjust final movement range (0–100%) independently from templates

  • 10.04.2026 - v2.6 SavePoint
    • Improved stability of saved configurations (registry / PlayerPrefs)
      • Added sanitizing and size limits for saved expressions/functions
      • Prevented corrupted saved data from breaking startup
      • Reduced unnecessary save operations to avoid slowdowns over time
      • Moved config storage from registry (PlayerPrefs) to local file (BepInEx\config\CubiLink.cfg)
    • Improved expression handling
      • Missing parameters now default to 0 instead of causing errors
      • Improves compatibility of templates across different games
    • Fixed UI configuration saving
      • “Save Current Configuration” now correctly stores window position, size, and layout
      • Resolved issue where outdated values were saved due to GUI timing
    • Improved stability during scene initialization
      • Reduced error spam and unnecessary re-evaluation loops
    • Minor internal improvements and cleanup
      • More reliable runtime behavior across different titles

  • 09.04.2026 - v2.5.4 Bug fix
    • Fixed template export/import not preserving Multiplier and Offset expressions
      • Templates now correctly retain formula-based values instead of only exporting evaluated numbers
    • Switched T-Code axis output from 0–999 (D3) to proper 0–9999 (D4) range
      • Fixed final output scaling so normalized values map correctly to full T-Code range
      • Updated Intiface T-Code parsing to match 4-digit (0–9999) values

  • 05.04.2026 - v2.5.2 UI fix
    • Templates section is now collapsible + list has a fixed height / is scrollable.
    • Minor layout and readability improvements

  • 04.04.2026 - v2.5.1 Serial Improv
    • Improved Serial Communication
      • Fixed SerialPort compatibility issues in certain Unity runtimes
      • Added Win32 fallback for systems where System.IO.Ports is unsupported
      • Improved error logging for Serial connections

  • 03.04.2026 - v2.5 Calculus
    • Expression support for Min / Max / Multiplier / Offset
      • Adds option to dynamically tune and adjust parameters/axis
      • Supports operators: + - * / ( ) < > <= >= == !=
      • Cross-parameter reference via p_ParameterName
      • [value] syntax to set range boarders (e.g. [0])

  • 29.03.2026 - v2.4 Compatibility Fix
    • Fixed plugin being unloaded immediately in certain Unity games
    • Refactored initialization: runtime now loads on a persistent DontDestroyOnLoad object instead of the BepInEx plugin instance
    • Improved compatibility with games that rebuild or clean up objects during startup

  • 28.03.2026 - v2.3.3 Bugfix.
    • Fixed reduced movement range during manual animation movement
    • Implemented adaptive smoothing
    • Fixed issue with some template export on some games

  • 28.03.2026 - v2.3.2 Bugfix.
    • Fixed recording export issue on some Unity runtimes by replacing unsupported JSON/file write calls with a compatible manual export
    • Fixed manual parameter control not reaching full range during playback
      • Caused by output being sent before GUI-driven parameter updates were applied
      • Adjusted sampling order so manual (input-driven) changes are correctly reflected in device output
    • Some more code-cleanup

  • 27.03.2026 - v2.3 Rec.
    • Added recording functionality to capture motion and export each enabled axis as a separate funscript file.
      Note: I tried to build a video recorder into the plugin, but that caused significant performance issues, which were also reflected in the recordings.
      For now, it is recommended to use an external screen recorder if a video is needed alongside the scripts.

  • 25.03.2026 - v2.2 Share & Sync
    • Added template import/export for sharing mappings between users
      • Can be done per scene or as a full game bundle
    • Added collapsible UI sections for better layout
    • Improved window opacity handling
    • Added option to enable/disable each axis

  • 24.03.2026 - v2.1 Small Improvements
    • Improved asset highlighter to better identify which model part a parameter affects
    • Added option to freeze the sorting list in the parameter picker
    • Minor Code Improvements

  • 22.03.2026 - v2.0 Refactored
    • Improved Intiface compatibility across different Unity game runtimes
    • Added fallback Intiface websocket transport for games where the normal Buttplug websocket path is unsupported
    • Fixed Newtonsoft.Json / Buttplug dependency conflicts by merging dependencies into the plugin DLL
    • Cleaned up and simplified the code structure for easier maintenance.

  • 22.03.2026 - v1.5 Universal Live2D
    • Added dynamic Cubism discovery and fallback parameter reading for better compatibility across Live2D titles
    • Reworked UI layout with scaling support, better scrolling, and improved panel sizing
    • Cleaned up transport handling, template loading/saving, and general UI behavior

  • 21.03.2026 - v1.4 Comm Patch
    • Added safer Intiface connection handling
    • Improved disconnect flow to avoid freeze-prone stop handling and added live connection status in UI
    • Added support for stroker-devices like the Handy

  • 21.03.2026 - v1.2 Initial Release

            

53 Likes

I did alot of testing with the older version and I just wanted to add my two cents.

Should be noted that not ALL Mono games with L2D assets. Next we are going to need a list of working games lol. I’ve burned through like 50 and only 3 worked, (the example being one)

These work: (I wont be updating this list lol I’ve done my part)
RJ01313038 がんばれうめちゃん おくちで奉仕
RJ01319890 東京物語:制服の誘惑
RJ01447280 合成×爆乳進化!バニーガールVIPパイズリ! [LAYO]
RJ01308696 羞恥!清楚なお姉さんに健康診断

2 Likes

I assume you tested with an SR6 or another OSR device ?

I tried with The Handy via Intiface but even though it connected it doesn’t seem to work for now. I unfortunately don’t own a multi axis device.

@ZeroScripts Thanks again for this fork and to Gohyrt for the original plugin :+1:
I hope this plugin will make it work with single axis devices if only the l0 axis is bind down the line

Yeah I primary use the SR6 for testing/creating stuff

Thanks for the feedback. Nice to have some other games confirmed working already. The original plugin creator might have plans to improve compatibility with more games too.

The latest version improves the Intiface communication and should also be able to work with The Handy. Though I imagine the movement will be very jittery, since the plugin’s real-time output wasn’t really made with The Handy in mind.

Im still using the previous creators as well as yours, no change since they updated their pateron/github about 15 hours ago.

Between the two compatibility is the same but not everything works. Eh, good enough for patch work.

The Handy is now working after updating/replacing files from the MEGA folder!

It connects via Intiface and responds to Live2D parameters.
Thanks for the great tool—I’ll report back if anything comes up.

1 Like

There’s definitely some issues with the plugin in some games as mentioned. Would be good if there was a way to manually open the overlay or if there was a companion program that could output some debug info if it fails. As it stands most games I tried it fails to even display despite loading in the bepinex logs.

The issue depends on how the game was compiled. In games where the plugin works perfectly, like RJ01323215 , “Live2D.Cubism.dll” is kept as an independent file. However, in games where the plugin fails to load, like RJ345267 , the developers merged the whole Live2D Cubism library directly into “Assembly-CSharp.dll”.

I managed to fix this on my end using dnSpy. I modified the CubiLink.dll plugin by swapping its assembly reference from Live2D.Cubism to Assembly-CSharp. After doing that, the plugin worked on RJ345267.

Modded “CubiLink.dll” 51 KB folder on MEGA

Maybe to @ZeroScripts makes more sense.

1 Like

Yeah I’m pretty sure in most cases it just comes down to how the game was built and where the Cubism classes ended up.

I’ll try to rework the plugin so it doesn’t hard-reference Live2D.Cubism.dll anymore and instead try to resolve the Cubism types at runtime, so it can hook into whichever assembly the game is actually using.
That should make it a lot more universal and hopefully let one build work across most Live2D games without needing manual patching each time.

2 Likes

For games where the plugin didn’t boot, I tried your modded dll and it did make it boot and able to edit the values, but it’s completely unable to connect to Intiface:
image

Eagerly awaiting for a dynamic resolver because this is likely due to some mismatch from the base CubiLink.

I can confirm it’s working with The Handy, though things will be stuttery.

Not sure that’s entirely the case. There’s some at least where the DLL is present but there’s still no output from the plugin despite it loading. An example is RJ01169637 as I’ve just been looking at that.

I’ve updated the plugin to detect Cubism at runtime instead of hard-referencing Live2D.Cubism.dll, so it should now be compatible with most Live2D Unity games out there.
HOUSHOU PLAYER (RJ345267)Succubus Casino ~Succubus Castle~ (RJ01169637)
Give it a try and let me know how it goes.

3 Likes

It looks like for some cases it still reproduces the error I talked about earlier

Intiface is indeed running in that instance

Perfect, I’ll do some testing and see what works. 1st thing I went into was RJ01055507 - Pinsaro Over The Wall since i did try to do this one for EDI but lost focus

Currently its still a no-go in either version.

Perhaps this one isnt Live2D like i thought it was xD

Each game handles the required connection libraries differently, which can break Intiface depending on the game.

I made the Intiface connection more self-contained in the latest version and added a fallback connection method for runtimes that don’t support the normal one.
May still fail in some games, but compatibility should now be much better overall.

This game does not appear to use the standard Live2D Cubism Unity components, so the plugin can’t detect model parameters here without a custom separate detection.

I can confirm connection is now working for a few of my examples :+1:

I see we now reached v2 already, thanks for the quick fixes !

1 Like

I gotta learn how to code… So one thing I found that i want to figure out is that some games use the same parameters (aka Parm 25 when you search has 3) but when you select it, it doesnt… read it right. Cant go around it so makes it unrecordable.

1 Like

With the latest update, you can now easily import/export templates.

If you test the plugin with a game, feel free to share your results and upload your templates so others can use them.
I might compile them all into a proper list at some point.


:pushpin:Example Format:

Game Title/Link: Griffith’s Paizuri Simulator - Special Services at Mermaid Tavern


Game Version: V0.10
Plugin Version: V2.3
Status: :white_check_mark: Working (or :record_button: Partial, :cross_mark: Not Working)

Notes: Not tested with actual SR6 device yet.

Template File:
Paizuri.cubilink.json


for Copy/Paste:
**Game Title/Link:** [GameName](GameLink)  
[preview image]
**Game Version:** Vxx  
**Plugin Version:** Vxx  
**Status:**  :white_check_mark: Working / :record_button: Partial / :cross_mark: Not Working

**Notes:**  

**Template File:**  
[file.json]
10 Likes