MENU

AITuber開発日誌 3 VTube Studioの連携「体」を作る!

前回は音声ソフト”VOICEVOX”と連動して、テキストから自動で音声データを作成することに成功しました!
今回はVTuverの体部分をデザインしたり動かしたりする”VTube Studio”と連動させる未来です。

つくる人

レッツトライ!
次はどうする? 教えてLM!

AITuber 開用LMの回答

次は、以前話題に出た VTube StudioのAPIトークン(許可証) を取得し、Pythonからキャラクターを動かせるようにします。以下の手順で進めましょう。

目次

VTube Studioと連携しよう!

手順

1. 必要なライブラリの追加インストール

VTube Studioとの通信には「WebSocket(ウェブソケット)」という仕組みを使います。そのためのライブラリをインストールします。

PowerShell(ターミナル)で以下を実行してください:

pip install websockets
2. トークン取得用プログラムの作成

「許可証(トークン)」を発行してもらうための、1回だけ使う専用プログラムを作成します。

ファイル名: setup_vts.py (ルートディレクトリに作成)

以下のコードをコピーして貼り付けてください。

import asyncio
import websockets
import json
import os

# 設定
VTS_URL = "ws://localhost:8001"
PLUGIN_NAME = "MyAITuber"  # 好きな名前に変更可
DEVELOPER_NAME = "MyName"  # あなたの名前に変更可

async def authenticate():
    print(f"🔌 VTube Studio ({VTS_URL}) に接続中...")
    
    try:
        async with websockets.connect(VTS_URL) as websocket:
            print("✅ 接続成功!")
            print("⏳ VTube Studioの画面を見てください。「許可」を求めるポップアップが出ます。")
            
            # 1. 認証トークンをリクエストする
            request = {
                "apiName": "VTubeStudioPublicAPI",
                "apiVersion": "1.0",
                "requestID": "TokenRequestID",
                "messageType": "AuthenticationTokenRequest",
                "data": {
                    "pluginName": PLUGIN_NAME,
                    "pluginDeveloper": DEVELOPER_NAME,
                }
            }
            
            await websocket.send(json.dumps(request))
            
            # 2. レスポンスを待つ(VTS側で「許可」が押されるまで待機)
            response = await websocket.recv()
            data = json.loads(response)
            
            # 3. 結果の確認
            if "data" in data and "authenticationToken" in data["data"]:
                token = data["data"]["authenticationToken"]
                print("\n" + "="*50)
                print("🎉 トークン取得に成功しました!")
                print("以下のトークンを .env ファイルの VTUBE_STUDIO_API_TOKEN に貼り付けてください:")
                print("-" * 50)
                print(token)
                print("-" * 50)
                print("="*50 + "\n")
            else:
                print("❌ 失敗しました。VTube Studio側で「拒否」されたか、エラーが発生しました。")
                print(f"レスポンス: {data}")

    except ConnectionRefusedError:
        print("❌ エラー: VTube Studioに接続できませんでした。")
        print("ヒント: VTube Studioは起動していますか? 設定で「APIの起動」はONになっていますか?")

if __name__ == "__main__":
    asyncio.run(authenticate())
3. 実行してトークンを取得する

重要:実行前に必ず VTube Studio アプリを起動しておいてください。

ファイルができたら、ターミナルで以下を実行してトークンを取得してください。

python setup_vts.py
STEP
MyAITuberのアクセス許可

VTube Studioの画面を見ると、「MyAITuberからのアクセスを許可しますか?」というポップアップが出ているはずです。

STEP
「許可 (Allow)」 をクリック
STEP
トークン確認

PowerShellの画面に、長い文字列(トークン)が表示されます。

4. .env に貼り付け

表示されたトークンをコピーして、.env ファイルの VTUBE_STUDIO_API_TOKEN= の後ろに貼り付けて保存してください。

これができたら、ついに「脳(AI)」「声(VOICEVOX)」「体(VTube Studio)」をつなげる準備が整います!

1. 必要なライブラリの追加インストール

VTube Studioとの通信には「WebSocket(ウェブソケット)」という仕組みを使います。そのためのライブラリをインストールします。

PowerShell(ターミナル)で以下を実行してください:

pip install websockets
つくる人

いざ、ENTER!

この画面が出たら完了です。すぐ終わった。

2. トークン取得用プログラムの作成

「許可証(トークン)」を発行してもらうための、1回だけ使う専用プログラムを作成します。

ファイル名: setup_vts.py (ルートディレクトリに作成)

つくる人

これって手動でファイルを作成するのかな?

AITuber 開用LMの回答

はい、その通りです!手動で setup_vts.py というファイルを新規作成してください。

このファイルはAITuberの本体(メインシステム)ではなく、**「VTube Studioから許可証(APIトークン)をもらうためだけに使う、1回限りの設定用ツール」**であるため、最初のプロジェクト自動生成には含めていませんでした。

以下の手順で進めてください。

方法A:手動で作る(確実)

1. Cursorの左側のファイル一覧(エクスプローラー)の何もないところを右クリックします。

2. 「新しいファイル (New File)」 を選択します。

3. 名前を setup_vts.py と入力してEnterを押します。

4. 先ほど提示したコードをコピーして、そのファイルに貼り付けて保存(Ctrl + S)してください。

コピペするコード

import asyncio
import websockets
import json
import os

# 設定
VTS_URL = "ws://localhost:8001"
PLUGIN_NAME = "MyAITuber"  # 好きな名前に変更可
DEVELOPER_NAME = "MyName"  # あなたの名前に変更可

async def authenticate():
    print(f"🔌 VTube Studio ({VTS_URL}) に接続中...")
    
    try:
        async with websockets.connect(VTS_URL) as websocket:
            print("✅ 接続成功!")
            print("⏳ VTube Studioの画面を見てください。「許可」を求めるポップアップが出ます。")
            
            # 1. 認証トークンをリクエストする
            request = {
                "apiName": "VTubeStudioPublicAPI",
                "apiVersion": "1.0",
                "requestID": "TokenRequestID",
                "messageType": "AuthenticationTokenRequest",
                "data": {
                    "pluginName": PLUGIN_NAME,
                    "pluginDeveloper": DEVELOPER_NAME,
                }
            }
            
            await websocket.send(json.dumps(request))
            
            # 2. レスポンスを待つ(VTS側で「許可」が押されるまで待機)
            response = await websocket.recv()
            data = json.loads(response)
            
            # 3. 結果の確認
            if "data" in data and "authenticationToken" in data["data"]:
                token = data["data"]["authenticationToken"]
                print("\n" + "="*50)
                print("🎉 トークン取得に成功しました!")
                print("以下のトークンを .env ファイルの VTUBE_STUDIO_API_TOKEN に貼り付けてください:")
                print("-" * 50)
                print(token)
                print("-" * 50)
                print("="*50 + "\n")
            else:
                print("❌ 失敗しました。VTube Studio側で「拒否」されたか、エラーが発生しました。")
                print(f"レスポンス: {data}")

    except ConnectionRefusedError:
        print("❌ エラー: VTube Studioに接続できませんでした。")
        print("ヒント: VTube Studioは起動していますか? 設定で「APIの起動」はONになっていますか?")

if __name__ == "__main__":
    asyncio.run(authenticate())
方法B:CursorのAIに作らせる(楽な方法)

Cursorを使っているので、AIに任せることも可能です。

1. Ctrl + I (Composer)を開きます。

2. 以下の指示を入力します。

3. 生成されたら「Accept(適用)」を押します。

手動の方が早そうだったのでAプランで実装!

 3実行してトークンを取得する

重要:実行前に必ず VTube Studio アプリを起動しておいてください。

起動OK!

ターミナルで以下を実行してトークンを取得してください。

python setup_vts.py
実行!
STEP
MyAITuberのアクセス許可

VTube Studioの画面を見ると、「MyAITuberからのアクセスを許可しますか?」というポップアップが出ているはずです

STEP
「許可 (Allow)」 をクリック
STEP
トークン確認

PowerShellの画面に、長い文字列(トークン)が表示されます。

サクサクすすみますね。まだ躓いてない!

4. .env に貼り付け

表示されたトークンをコピーして、.env ファイルの VTUBE_STUDIO_API_TOKEN= の後ろに貼り付けて保存してください。
これができたら、ついに「脳(AI)」「声(VOICEVOX)」「体(VTube Studio)」をつなげる準備が整います!

すぐおわっちゃったww
つくる人

なんかスムーズにここまで来てしまったよ
順調すぎて怖いくらいだよ。

いよいよ
「脳(AI)」「声(VOICEVOX)」「体(VTube Studio)」
つなげるそうだけど、果たしてどうなるかな。。。楽しみ!

よかったらシェアしてね!
  • URLをコピーしました!
目次