CubiLink – Unity Live2D Motion Mapper for Multi-Axis (v2.0)

Hey everyone,

I’m sharing my forked version of Gohyrt’s Live2D-to-SR6-Motion plugin.

This release is based on the original plugin, but adds a UI overhaul and a few extra features I originally made for myself, but I figured other people here might also find them useful.

Since the original EroScripts post seems to have been deleted by OP for some reason, I’m posting this build in a new topic so it’s still available to everyone interested.

The original creator said that they wanted to keep their version simple and lightweight, so rather than treating this as an update to the original project, I’m releasing it separately as a more feature-rich fork.

Current additions in this version

  • Parameter highlighter to make it easier to tell which asset or model element a parameter likely belongs to
  • Live parameter graph / scope to help track how values change over time and identify the right parameter more easily
  • Additional output modes, including UDP and Intiface support
  • Dynamic Live2D/Cubism detection for vastly improved game compatibility
  • UI overhaul

Possible future additions

  • Recording / export, such as saving movements as a funscript, ideally together with video
  • Profile / template import-export, so users can share their mappings more easily between games and scenes.

Example: Griffith’s Paizuri Simulator

Notes

  • I haven’t been able to fully test device-side output myself, since I don’t own an SR6
  • The plugin in general only supports Mono-Unity games that use the standard Live2D Cubism SDK

How to use

  1. Install BepInEx for the game you want to use this 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\.. folders and config structure.
  3. Copy the plugin .dll files into: BepInEx\plugins
  4. The plugin UI should now show up on game start.
  5. In the Connection section, select the output mode you want and click Connect:
  • Serial: COM port, for example COM4
  • UDP: host and port
  • Intiface: websocket address, for example ws://127.0.0.1:12345
  1. Create a new template or use the default one.
    Templates let you save different mappings for different games, characters, or scenes.
  2. In the Axis Mapping section, click the parameter button for an axis you want to bind.
  3. A parameter picker will open. From there you can:
  • search for parameters by name
  • hover parameters to help identify likely matching model parts
  • use the live values / graph to see how a parameter behaves
  • left click a parameter to bind it
  • right click a parameter to open its trace graph
  1. After binding a parameter, adjust:
  • Min / Max
  • Multiplier
  • Offset
  • Invert if needed
  1. Use Range Lock depending on what you want:
  • ON = keeps your manual range settings fixed
  • OFF = automatically records motion range while the model is moving
  1. Adjust Global Smoothing and Target Hz to your preference.
  2. Click Save Current Configuration when you are happy with the setup.

Changelog

  • 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
7 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.

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