やりたかったこと

ゲーム配信画面を見ながら、AITuberが状況を把握して喋る構成を作りたかった。

最初のゴールは以下。

  1. OBSのゲーム画面をスクリーンショット取得
  2. OpenAIのVision対応モデルで画面要約
  3. 要約をAITuberKitへ送信
  4. AITuberKit側(VOICEVOX設定)で発話

構成

今回作ったのは外部ブリッジ(Python)で、構成は以下。

  • OBS WebSocket からスクショ取得
  • OpenAI Responses API で画面要約(1〜2文)
  • AITuberKit /api/messagestype=user_input でPOST
  • AITuberKit側の既存設定(AIモデル + VOICEVOX)で返答・発話

実装メモ

ブリッジはDockerで動かした。

主な設定値はこんな感じ。

OBS_WS_URL=ws://host.docker.internal:4455
OBS_WS_PASSWORD=...
OBS_SOURCE_NAME=ウィンドウキャプチャ
CAPTURE_INTERVAL_SEC=60
 
OPENAI_MODEL=gpt-4.1-mini
 
ENABLE_AITUBER_POST=true
AITUBER_BASE_URL=http://host.docker.internal:3000
AITUBER_CLIENT_ID=(AITuberKitと一致させる)
AITUBER_TYPE=user_input

ハマった点

1. OBS WebSocketがそもそも有効化されていなかった

TimeoutError が続いた原因はこれ。

  • OBSの Tools > WebSocket Server SettingsEnable WebSocket server をONにして解決。

2. 接続先ホスト

Docker化して host.docker.internal 経由に寄せた。

AITuberKit側の設定で必要だったこと

  • その他 タブ
  • 外部からの指示を受け付ける をON
  • Client ID をブリッジ側 AITUBER_CLIENT_ID と一致させる

結果

最終的に以下を確認できた。

  • OBS接続成功
  • スクショ取得成功
  • OpenAIで要約生成成功
  • AITuberKitへ要約POST成功
  • AITuberKit側でVOICEVOX発話まで確認

スクショ要約をAITuberKitに渡して、VOICEVOXで喋らせるところまでは確認できた。

次にやると良さそうなこと

  • 同一画面の重複発話をもう少し抑える(差分閾値の調整)
  • 要約プロンプトをゲームジャンル別に分岐
  • 発話頻度を固定60秒から可変化(戦闘中だけ短くする等)
  • スクショの要約が意味不明なことが多いので、どういうゲームなのかとか事前に必要なのかも