Skip to content
This repository was archived by the owner on Feb 6, 2026. It is now read-only.

Commit 73fd954

Browse files
committed
Version 0.1.6
Use latest Live2D SDK for TypeTree dump Update codegen
1 parent 500e89f commit 73fd954

26 files changed

Lines changed: 59011 additions & 15890 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ General purpose [Live2D](https://www.live2d.com/) Asset recovery tool built w/ [
77

88
As the name suggests, this project is heavily inspired by [Perfare/UnityLive2DExtractor](https://github.com/Perfare/UnityLive2DExtractor). With a few key differences:
99
- All Live2D types are implemented with [dumped TypeTree](https://github.com/mos9527/UnityPyLive2DExtractor/blob/main/external/typetree_cubism.json) and [generated types](https://github.com/mos9527/UnityPyLive2DExtractor/blob/main/typetree_codegen.py). This should help with compatibility issues.
10+
- Do note, however, that you may need to update the TypeTree if the Live2D version changes.
11+
- Generate the TypeTree with [typetree_codegen](https://github.com/mos9527/UnityPyLive2DExtractor/blob/main/typetree_codegen.py) and replace the existing TypeTree at `UnityPyLive2DExtractor/generated`
12+
```bash
13+
python typetree_codegen.py type_tree_cubism.json UnityPyLive2DExtractor/generated
14+
```
15+
- Feel free to submit a PR into a new branch if you have found a new TypeTree that worked for you.
1016
- New (not necessarily better) asset discovery method. Though proven to be more reliable in some cases.
1117

1218
## Installation

UnityPyLive2DExtractor/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = (0, 1, 5)
1+
__version__ = (0, 1, 6)

UnityPyLive2DExtractor/__main__.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
Transform,
1010
PPtr,
1111
Texture2D,
12-
AnimationClip,
1312
)
1413
from UnityPy.enums import ClassIDType
1514
from UnityPy.files import ObjectReader
@@ -149,6 +148,17 @@ def __eq__(self: CubismRenderer, other: CubismRenderer):
149148
return self.__hash__() == other.__hash__()
150149

151150

151+
from dataclasses import dataclass
152+
153+
154+
@dataclass
155+
class ExtractorFlags:
156+
live2d_variant: str = "cubism"
157+
158+
159+
FLAGS = ExtractorFlags()
160+
161+
152162
# XXX: Is monkey patching this into UnityPy a good idea?
153163
def read_from(reader: ObjectReader, **kwargs):
154164
"""Import generated classes by MonoBehavior script class type and read from reader"""
@@ -207,6 +217,8 @@ def __main__():
207217
isatty=True,
208218
)
209219
os.makedirs(args.outdir, exist_ok=True)
220+
logger.info("UnityPyLive2D Extractor v%d.%d.%d" % __version__)
221+
logger.info("Loading %s" % args.infile)
210222
env = UnityPy.load(args.infile)
211223
objs = [
212224
read_from(reader)
@@ -215,9 +227,10 @@ def __main__():
215227
env.objects,
216228
)
217229
]
230+
logger.info("MonoBehaviours: %d" % len(objs))
218231
candidates = [
219232
read_from_ptr(obj.m_GameObject, obj)
220-
for obj in filter(lambda obj: isinstance(obj, CubismPhysicsController), objs)
233+
for obj in filter(lambda obj: isinstance(obj, CubismModel), objs)
221234
]
222235
crc_cache = dict()
223236
# fmt: off
@@ -244,9 +257,10 @@ def __main__():
244257
fname = metadata["FileReferences"]["Moc"] = f"{NAME}.moc3"
245258
with open(os.path.join(outdir, fname), "wb") as f:
246259
moc = read_from_ptr(MOC._moc, MOC.object_reader)
247-
logger.info(".moc3: %d bytes" % f.write(moc._bytes))
260+
moc = bytes(moc._bytes)
261+
logger.info(".moc3: %d bytes" % f.write(moc))
248262
try:
249-
parts, parameters = read_moc3(io.BytesIO(moc._bytes))
263+
parts, parameters = read_moc3(io.BytesIO(moc))
250264
for s in parts:
251265
path = "Parts/" + s
252266
crc_cache[crc32(path.encode("utf-8"))] = path

UnityPyLive2DExtractor/generated/Live2D/Cubism/Core/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ class ArrayExtensionMethods(MonoBehaviour):
1010
class ComponentExtensionMethods(MonoBehaviour):
1111
pass
1212
@typetree_defined
13+
class CubismCanvasInformation(MonoBehaviour):
14+
pass
15+
@typetree_defined
1316
class CubismDrawable(MonoBehaviour):
1417
_unmanagedIndex : int
18+
_screenColor : ColorRGBA
1519
@typetree_defined
1620
class CubismDynamicDrawableData(MonoBehaviour):
1721
pass
@@ -20,7 +24,7 @@ class CubismLogging(MonoBehaviour):
2024
pass
2125
@typetree_defined
2226
class CubismMoc(MonoBehaviour):
23-
_bytes : bytes
27+
_bytes : List[int]
2428
@typetree_defined
2529
class CubismModel(MonoBehaviour):
2630
_moc : PPtr[CubismMoc]

UnityPyLive2DExtractor/generated/Live2D/Cubism/Framework/Expression/__init__.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,37 @@
44
from ..... import *
55
from .....Live2D.Cubism.Core import CubismParameter
66
from .....Live2D.Cubism.Framework import CubismParameterBlendMode
7+
from ..... import SerializableExpressionParameter
78

89
@typetree_defined
910
class CubismExpressionData(MonoBehaviour):
1011
Type : str
1112
FadeInTime : float
1213
FadeOutTime : float
13-
Parameters : List[object] # XXX: Fallback of SerializableExpressionParameter[]
14+
Parameters : List[SerializableExpressionParameter]
1415
@typetree_defined
1516
class CubismExpressionList(MonoBehaviour):
16-
CubismExpressionObjects : List[CubismExpressionData]
17+
CubismExpressionObjects : List[PPtr[CubismExpressionData]]
1718
@typetree_defined
1819
class CubismExpressionController(MonoBehaviour):
1920
ExpressionsList : PPtr[CubismExpressionList]
21+
UseLegacyBlendCalculation : bool
2022
CurrentExpressionIndex : int
2123
@typetree_defined
24+
class CubismExpressionParameterValue(MonoBehaviour):
25+
Parameter : PPtr[CubismParameter]
26+
AdditiveValue : float
27+
MultiplyValue : float
28+
OverwriteValue : float
29+
@typetree_defined
2230
class CubismPlayingExpression(MonoBehaviour):
2331
Type : str
2432
FadeInTime : float
2533
FadeOutTime : float
2634
Weight : float
2735
ExpressionUserTime : float
36+
ExpressionStartTime : float
2837
ExpressionEndTime : float
29-
Destinations : List[CubismParameter]
38+
Destinations : List[PPtr[CubismParameter]]
3039
Value : List[float]
31-
Blend : List[CubismParameterBlendMode]
40+
Blend : List[int]

UnityPyLive2DExtractor/generated/Live2D/Cubism/Framework/Json/__init__.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,75 @@
22
# Python definition for Live2D.Cubism.Framework.Json
33

44
from ..... import *
5+
from ..... import PhysicsDictionaryItem
6+
from ..... import SerializableCombinedParameterIds
7+
from ..... import SerializableCurve
8+
from ..... import SerializableEffectiveForces
9+
from ..... import SerializableExpression
10+
from ..... import SerializableExpressionParameter
11+
from ..... import SerializableFileReferences
12+
from ..... import SerializableGroup
13+
from ..... import SerializableHitArea
14+
from ..... import SerializableInput
15+
from ..... import SerializableMeta
16+
from ..... import SerializableMotions
17+
from ..... import SerializableNormalization
18+
from ..... import SerializableNormalizationValue
19+
from ..... import SerializableOutput
20+
from ..... import SerializableParameter
21+
from ..... import SerializableParameterGroups
22+
from ..... import SerializableParameters
23+
from ..... import SerializableParts
24+
from ..... import SerializablePhysicsSettings
25+
from ..... import SerializableUserData
26+
from ..... import SerializableVector2
27+
from ..... import SerializableVertex
528

629
@typetree_defined
730
class CubismBuiltinPickers(MonoBehaviour):
831
pass
932
@typetree_defined
33+
class CubismDisplayInfo3Json(MonoBehaviour):
34+
Version : int
35+
Parameters : List[SerializableParameters]
36+
ParameterGroups : List[SerializableParameterGroups]
37+
Parts : List[SerializableParts]
38+
CombinedParameters : List[SerializableCombinedParameterIds]
39+
@typetree_defined
1040
class CubismExp3Json(MonoBehaviour):
1141
Type : str
1242
FadeInTime : float
1343
FadeOutTime : float
14-
Parameters : List[object] # XXX: Fallback of SerializableExpressionParameter[]
44+
Parameters : List[SerializableExpressionParameter]
1545
@typetree_defined
1646
class CubismJsonParser(MonoBehaviour):
1747
pass
1848
@typetree_defined
1949
class CubismModel3Json(MonoBehaviour):
2050
Version : int
21-
FileReferences : object # XXX: Fallback of SerializableFileReferences
22-
Groups : List[object] # XXX: Fallback of SerializableGroup[]
23-
HitAreas : List[object] # XXX: Fallback of SerializableHitArea[]
51+
FileReferences : SerializableFileReferences
52+
Groups : List[SerializableGroup]
53+
HitAreas : List[SerializableHitArea]
2454
@typetree_defined
2555
class CubismMotion3Json(MonoBehaviour):
2656
Version : int
27-
Meta : object # XXX: Fallback of SerializableMeta
28-
Curves : List[object] # XXX: Fallback of SerializableCurve[]
29-
UserData : List[object] # XXX: Fallback of SerializableUserData[]
57+
Meta : SerializableMeta
58+
Curves : List[SerializableCurve]
59+
UserData : List[SerializableUserData]
3060
@typetree_defined
3161
class CubismPhysics3Json(MonoBehaviour):
3262
Version : int
33-
Meta : object # XXX: Fallback of SerializableMeta
34-
PhysicsSettings : List[object] # XXX: Fallback of SerializablePhysicsSettings[]
63+
Meta : SerializableMeta
64+
PhysicsSettings : List[SerializablePhysicsSettings]
3565
@typetree_defined
3666
class CubismPose3Json(MonoBehaviour):
3767
Type : str
3868
FadeInTime : float
3969
@typetree_defined
4070
class CubismUserData3Json(MonoBehaviour):
4171
Version : int
42-
Meta : object # XXX: Fallback of SerializableMeta
43-
UserData : List[object] # XXX: Fallback of SerializableUserData[]
72+
Meta : SerializableMeta
73+
UserData : List[SerializableUserData]
4474
@typetree_defined
4575
class Value(MonoBehaviour):
4676
pass

UnityPyLive2DExtractor/generated/Live2D/Cubism/Framework/Motion/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,8 @@ class CubismMotionController(MonoBehaviour):
1010
class CubismMotionLayer(MonoBehaviour):
1111
pass
1212
@typetree_defined
13+
class CubismMotionPriority(MonoBehaviour):
14+
pass
15+
@typetree_defined
1316
class CubismMotionState(MonoBehaviour):
1417
pass

UnityPyLive2DExtractor/generated/Live2D/Cubism/Framework/MotionFade/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
@typetree_defined
77
class CubismFadeMotionData(MonoBehaviour):
88
MotionName : str
9+
ModelFadeInTime : float
10+
ModelFadeOutTime : float
911
FadeInTime : float
1012
FadeOutTime : float
1113
ParameterIds : List[str]
@@ -16,7 +18,7 @@ class CubismFadeMotionData(MonoBehaviour):
1618
@typetree_defined
1719
class CubismFadeMotionList(MonoBehaviour):
1820
MotionInstanceIds : List[int]
19-
CubismFadeMotionObjects : List[CubismFadeMotionData]
21+
CubismFadeMotionObjects : List[PPtr[CubismFadeMotionData]]
2022
@typetree_defined
2123
class CubismFadeController(MonoBehaviour):
2224
CubismFadeMotionList : PPtr[CubismFadeMotionList]
@@ -33,6 +35,7 @@ class CubismFadePlayingMotion(MonoBehaviour):
3335
FadeInStartTime : float
3436
Speed : float
3537
Motion : PPtr[CubismFadeMotionData]
38+
IsLooping : bool
3639
@typetree_defined
3740
class CubismFadeStateObserver(MonoBehaviour):
3841
pass

UnityPyLive2DExtractor/generated/Live2D/Cubism/Framework/Physics/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,17 @@ class CubismPhysicsParticle(MonoBehaviour):
4141
Radius : float
4242
@typetree_defined
4343
class CubismPhysicsSubRig(MonoBehaviour):
44+
Name : str
4445
Input : List[CubismPhysicsInput]
4546
Output : List[CubismPhysicsOutput]
4647
Particles : List[CubismPhysicsParticle]
4748
Normalization : CubismPhysicsNormalization
4849
@typetree_defined
4950
class CubismPhysicsRig(MonoBehaviour):
5051
SubRigs : List[CubismPhysicsSubRig]
52+
Gravity : Vector2f
53+
Wind : Vector2f
54+
Fps : float
5155
@typetree_defined
5256
class CubismPhysicsController(MonoBehaviour):
5357
_rig : CubismPhysicsRig

UnityPyLive2DExtractor/generated/Live2D/Cubism/Framework/Pose/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ class CubismPosePart(MonoBehaviour):
1616
class CubismPoseData(MonoBehaviour):
1717
PosePart : PPtr[CubismPosePart]
1818
Part : PPtr[CubismPart]
19-
LinkParts : List[CubismPart]
19+
LinkParts : List[PPtr[CubismPart]]
2020
Opacity : float

0 commit comments

Comments
 (0)