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

The game might actually be using spine animations, not Live2D. Would need to take a closer look at how it’s implemented there.

You can apply BepInEx and the plugin to each executable/component of Live2DViewerEX, for example: C:\Program Files (x86)\Steam\steamapps\common\Live2DViewerEX\bin + \exstudio, \lw, \lwui, \motiontracker64

Each of those acts like its own Unity app, so BepInEx needs to be installed separately for the one you want to use.


Preview on EX Studio

Game Title/Link:
【2人プレイ対応×全編Live2D】お姉ちゃん、追いかけないで!~サキュバスとの鬼ごっこ!

Game Version: V1.0
Plugin Version: V2.5.3
Status: :white_check_mark: Working /

Notes: Tested and confirmed to work on SR6.

Template File:
SuccubusChase - All Templates.cubilinkpack.json (19.2 KB)

I’m sorry to trouble you, but may I ask a question?

When I first launched the application, it started without any issues and I was even able to export files. However, from the next launch onward, it either freezes on a black screen during startup or only runs in the background.

I was able to launch it successfully when I removed BepInEx, or when I removed only CubiLink. Also, if I launch the game a second time while it is already running, the game itself starts, but the CubiLink UI does not appear.

Since it worked fine the first time, I don’t believe the game itself is incompatible.

I would like to try deleting the data created by CubiLink, but I’m not sure where it is stored. Could you please let me know where I can find it?

I would also appreciate it if you could let me know of any other possible solutions.

Also, I do have the exported data, so I will provide it. However, it hasn’t been fully tested, and I believe it may still need some adjustments.

1 Like

I came across several games I really like, but they all use the il2cpp architecture — it’s so frustrating.

I could use some help with the setup, most likely something on my end but from what I understand the plugin UI should appear when launching the game after setup, but it doesn’t appear to show up, for context here is what I’m doing

  • Unpacking BepInEx_win_x64_5.4.23.2 into the game folder
  • Launching the game to create the BeplnEx folder structure
  • Placing the CubiLink.dll in BeplnEx/plugins (the plugins folder wasn’t automatically generated so I just created it)
  • Launching the game (no UI appears from what I can tell)

Tested with latest available files from this mod, game testing on was Griffiths Pazuri
Not sure if anyone else had issues but any direction would be appreciated

So far I’ve found 3 games that CubiLink has detected Cubism installed. I avoided VN and sex sim games as I generally enjoy having some form of gameplay involved. Here is what I’ve found so far:

MazeCave II
The Buried Pillars
Object Control [WARNING: possible loli]

I haven’t been able to recreate this issue so far, but it could be caused by corrupted PlayerPrefs / saved data.

CubiLink stores settings in two places:
BepInEx/config/CubiLink
• Unity PlayerPrefs (Windows registry)

Try the following:

  1. Delete the folder: BepInEx/config/CubiLink

  2. Reset PlayerPrefs by deleting this registry key: Computer\HKEY_CURRENT_USER\Software\A86GJ3\SuccubusChase
    (this will reset all saved settings for the game)

If that doesn’t work, you can send your BepInEx/LogOutput.log and I’ll have a closer look.

If the BepInEx/plugins folder isn’t created after launch, BepInEx wasn’t applied.

Are you sure the game uses Unity Mono (does it have a *GameName*_Data/Managed folder)?
It might also need the BepInEx_x86 version instead

I was able to launch it successfully after deleting the SuccubusChase registry entry!

However, since the CubiLink files had been deleted, when I re-imported the exported file, I noticed that all the functions I had entered for Multiplier and Offset were missing.

I feel this is quite unfortunate, as it makes it difficult to share and enjoy these results with others.

If this issue was caused by something I did incorrectly, I would greatly appreciate it if you could let me know the correct procedure.

Thanks for testing

I checked the plugin code and this is indeed a bug on CubiLink’s side, not something you did wrong.

Currently the original Multiplier / Offset formulas are stored internally and also supported on import, but they are not actually written into the exported template file.
Because of that, after re-importing, only the evaluated numeric values remain.

I fixed that in the latest version now, so the Multiplier & Offset formulas will be included in the template file itself.

1 Like

I’m not sure if this is due to incorrect usage on my part, but CubiLink may have a mapping issue when outputting TCode commands. The axis range for TCode commands is 0–9999, not 0–100 (or any other range).

When outputting commands like “L0xxxx\n”, the values should be linearly mapped from the original range to 0–9999. It seems that CubiLink is not performing this mapping, resulting in outputs like “L0100\n” with very small values. From a macro perspective, it looks like the OSR isn’t moving at all.

The plugin does indeed output T-Code values in the 0–999 range, not 0–9999.
So if your target setup expects 4-digit values, that would explain why the movement looks far too small.

I’ll look into making the T-Code output scale configurable, or updating it so 4-digit output can be supported properly as well.

You don’t need to make the output scaling configurable—the T-Code specification already defines the range as 0–9999 (this is fixed). You just need to apply a linear mapping.

For example, if the original range is 0–100 and the current value is 50, then it should be mapped to 5000 when outputting the T-Code command. I also noticed that the original project Live2D-to-SR6-Motion doesn’t perform this linear mapping either, which is clearly a mistake.

For example, in my project OSRChat, this is how I implemented it:

    def _scale_value(self, v, i_min=0, i_max=100, o_min=0, o_max=9999):
        if i_min >= i_max or o_min >= o_max:
            raise ValueError("Invalid range")
        return round((max(i_min, min(v, i_max)) - i_min) * (o_max - o_min) / (i_max - i_min) + o_min)

The original plugin did do internal normalization/mapping, but it only scales the final value to 0–999 and formats it as D3.

I’ve updated CubiLink to scale the output correctly to 0–9999 (D4), so the final T-Code values should match the expected range.

CubiLink is working properly now! Thanks for the quick update. This plugin is very useful.

1 Like

Thank you very much for your prompt response!

I have made revisions to the three files I previously submitted.

Perhaps some people have already created something similar, but please feel free to use this if you’d like.

Game Title/Link: サキュバスカジノ ~淫魔城サキュバス~

Game Version: V1.09
Plugin Version: V2.5.4
Status: :white_check_mark: Working

Notes: Tested and confirmed to work on SR6.

Template File:
サキュバスカジノ~淫魔城サキュバス~ - All Templates.cubilinkpack.json (22.2 KB)

I apologize in advance if my request sounds unrealistic, as I am not very knowledgeable about the technical aspects. I also apologize if anything I say comes across as inappropriate.

I understand that this may be difficult, and you have already done more than enough. I also respect that you have your own time to consider, so I would appreciate it if you could take this as a casual suggestion.

Would it be technically possible to link the currently playing Live2D animation with templates and automatically switch which one is used?

Alternatively, would it be possible to implement multiple axes of the same type within a single template, and determine priority based on the presence of specific Live2D parameters or threshold values, so that multiple Live2D animations can switch seamlessly within a single scene or during gameplay?

I believe this plugin is primarily suited for games like the ones you’ve shared, where Live2D transitions are not very frequent, or where the user can manually switch Live2D models.

I’m sorry for making such a demanding request.

4 Likes

No worries, I always appreciate feedback and suggestions.

It might be possible to detect most scene changes automatically, but that will likely differ a lot from game to game.
The tricky part is making it work across a wide range of titles.

Switching based on parameters is a bit more complicated as well, since many games reuse the same parameters or keep them active in the background.
So it’s not always easy to clearly define when an animation actually “switches”.

I’ll definitely look into implementing something along those lines in the future, but results will probably vary depending on the game.

Thank you for your response.

I also felt that switching based on parameters would be difficult, so it seems that detecting animations is indeed necessary.

Regarding parameters, if a function includes parameters that do not currently exist, it results in an error. In such cases, would it be possible to assign a value of 0 instead?

I look forward to the possibility of automatic switching through animation detection in the future.

I will continue to support your work.

1 Like

Sure, I’ve added this to the latest version.

2 Likes

Game Title/Link: Four Nights at the Burger Shop ~ハンバーガー食べながら食べられるミニゲーム~


This is an interesting game where you make yourself sandwhich whilst enduring a blowjob. Great with toy integration.

Game Version: 2026/03/03
Plugin Version: v2.5.5
Status: :white_check_mark: Working

Notes: Template bundle includes all scenes. Tested with OSR2+.

Template File: BJ.cubilink.json (2.3 KB)


Game Title/Link: ソムニア掌編 – 薔薇色 –

Game Version: N/A
Plugin Version: v2.5.5
Status: :white_check_mark: Working

Notes: Template bundle includes all scenes. Tested with OSR2+. Game’s no longer on DLSite.

Template File: ソムニア掌編 - 薔薇色 -.cubilink.json (2.3 KB)


Game Title/Link: サカって!メスネコちゃん

Game Version: 2026/04/03
Plugin Version: v2.5.5
Status: :white_check_mark: Working

Notes: Template bundle includes all scenes. Tested with OSR2+.

Template File: neko - All Templates.cubilinkpack.json (5.6 KB)

6 Likes