Models Guide

This guide covers working with Live2D models in VTube Studio.

Getting Current Model

To get information about the currently loaded model:

from vtpy.data.requests import CurrentModelRequestData

response = await vts.request_current_model(CurrentModelRequestData())
model = response.data

print(f"Model ID: {model.modelID}")
print(f"Model Name: {model.modelName}")
print(f"Model Position: ({model.modelPosition.positionX}, {model.modelPosition.positionY})")

Listing Available Models

To get a list of all available models:

response = await vts.request_available_models()
models = response.data

for model in models:
    print(f"Model: {model.modelName}")
    print(f"  ID: {model.modelID}")
    print(f"  Path: {model.modelPath}")

Loading a Model

To load a specific model:

from vtpy.data.requests import ModelLoadRequestData

response = await vts.request_model_load(
    ModelLoadRequestData(modelID="model-id-here")
)

if response.data:
    print(f"Model loaded: {response.data.modelID}")

Moving a Model

To change a model’s position, rotation, or size:

from vtpy.data.requests import MoveModelRequestData, ModelPosition

position = ModelPosition(
    positionX=0.0,
    positionY=0.0,
    rotation=0.0,
    size=1.0
)

response = await vts.request_move_model(
    MoveModelRequestData(
        timeInSeconds=1.0,
        valuesAreRelativeToModel=False,
        position=position
    )
)

Model Position Properties

The ModelPosition class has the following properties:

  • positionX (float): X position (-1.0 to 1.0)

  • positionY (float): Y position (-1.0 to 1.0)

  • rotation (float): Rotation in degrees

  • size (float): Size multiplier

Listening to Model Events

You can listen to model-related events:

from vtpy.data.events import EventType, ModelMovedEvent

async def on_model_moved(event: ModelMovedEvent) -> None:
    data = event.data
    print(f"Model {data.modelName} moved")

vts.on_event(EventType.ModelMovedEvent, on_model_moved)

# Subscribe to events
from vtpy.data.events import (
    ModelMovedEventSubscriptionRequestData,
    ModelMovedEventSubscriptionRequestConfig,
)

await vts.event_sub_model_moved(
    ModelMovedEventSubscriptionRequestData(
        subscribe=True,
        config=ModelMovedEventSubscriptionRequestConfig()
    )
)

Getting Model Art Meshes

To get a list of art meshes in the current model:

from vtpy.data.requests import ArtMeshListRequestData

response = await vts.request_art_mesh_list(ArtMeshListRequestData())
meshes = response.data

for mesh in meshes:
    print(f"Mesh: {mesh.name}")
    print(f"  ID: {mesh.id}")

Tinting Model Art Meshes

To change the color of art meshes:

from vtpy.data.requests import ColorTintRequestData, ColorTint, ArtMeshMatcherData

tint = ColorTint(
    colorR=1.0,
    colorG=0.5,
    colorB=0.5,
    colorA=1.0,
    colorMixWithSceneLightingColor=0.5
)

artMeshMatcher = ArtMeshMatcherData(
    tintAll=True
)
response = await vts.request_color_tint(
    ColorTintRequestData(
        artMeshMatcher=artMeshMatcher,
        colorTint=tint
    )
)