Items Guide
This guide covers working with items (accessories, effects, etc.) in VTube Studio.
Getting Item List
To get a list of all available items:
from vtpy.data.requests import ItemListRequestData
response = await vts.request_item_list(ItemListRequestData())
items = response.data
for item in items:
print(f"Item: {item.name}")
print(f" ID: {item.itemID}")
print(f" File: {item.fileName}")
Loading Items
To load an item:
from vtpy.data.requests import ItemLoadRequestData
response = await vts.request_item_load(
ItemLoadRequestData(fileName="item-name.vtsitem")
)
if response.data:
print(f"Item loaded: {response.data.itemID}")
Unloading Items
To unload an item:
from vtpy.data.requests import ItemUnloadRequestData
response = await vts.request_item_unload(
ItemUnloadRequestData(itemID="item-id-here")
)
if response.data:
print("Item unloaded successfully")
Controlling Item Animations
To control item animations:
from vtpy.data.requests import ItemAnimationControlRequestData
response = await vts.request_item_animation_control(
ItemAnimationControlRequestData(
itemInstanceID="item-instance-id",
animationType="SetAnimation",
animationName="animation-name"
)
)
Animation Types
Available animation types:
“SetAnimation”: Set a specific animation
“SetAnimationFrame”: Set animation to a specific frame
“SetSpeed”: Set animation speed
“SetPause”: Pause/unpause animation
Moving Items
To move an item:
from vtpy.data.requests import ItemMoveRequestData, ItemPosition
position = ItemPosition(
positionX=0.0,
positionY=0.0,
rotation=0.0,
size=1.0
)
response = await vts.request_item_move(
ItemMoveRequestData(
itemInstanceID="item-instance-id",
timeInSeconds=1.0,
valuesAreRelativeToModel=False,
position=position
)
)
Sorting Items
To change the rendering order of items:
from vtpy.data.requests import ItemSortRequestData
response = await vts.request_item_sort(
ItemSortRequestData(
itemInstanceID="item-instance-id",
moveUp=True # or False to move down
)
)
Pinning Items
To pin an item to a specific position:
from vtpy.data.requests import ItemPinRequestData
response = await vts.request_item_pin(
ItemPinRequestData(
itemInstanceID="item-instance-id",
pin=True # or False to unpin
)
)
Listening to Item Events
You can listen to item-related events:
from vtpy.data.events import EventType, ItemEvent
async def on_item_event(event: ItemEvent) -> None:
data = event.data
print(f"Item event: {data.itemName}")
vts.on_event(EventType.ItemEvent, on_item_event)
# Subscribe to events
from vtpy.data.events import ItemEventSubscriptionRequestData
await vts.event_sub_item(
ItemEventSubscriptionRequestData(subscribe=True)
)
Complete Example
import asyncio
from vtpy import VTS
from vtpy.data.requests import (
ItemListRequestData,
ItemLoadRequestData,
ItemMoveRequestData,
ItemPosition,
)
async def main():
vts = VTS(plugin_name="MyPlugin", plugin_developer="MyName")
try:
await vts.start(host="localhost", port=8001)
# Get available items
items_response = await vts.request_item_list(ItemListRequestData())
print("Available items:")
for item in items_response.data:
print(f" - {item.name} ({item.fileName})")
# Load an item (if you know the filename)
# load_response = await vts.request_item_load(
# ItemLoadRequestData(fileName="some-item.vtsitem")
# )
# item_id = load_response.data.itemID
# Move an item
# await vts.request_item_move(
# ItemMoveRequestData(
# itemInstanceID=item_id,
# timeInSeconds=1.0,
# valuesAreRelativeToModel=False,
# position=ItemPosition(
# positionX=0.5,
# positionY=0.5,
# rotation=0.0,
# size=1.0
# )
# )
# )
finally:
if vts.connected:
await vts.close()
asyncio.run(main())