# OpenVT streaming setup

This setup is for a simple Linux-first OpenVT pipeline that is ready to render a model window for capture/streaming.

## Reality check

OpenVT is not a trivial single-binary install:

- it is built in Godot
- it uses third-party dependencies and submodules
- full Live2D functionality depends on proprietary Live2D Cubism components
- for face tracking, OpenSeeFace is a separate executable

So the first goal here is not full unattended bot control. The first goal is a reproducible local setup path that gets OpenVT rendering and capturable for streaming.

## Recommended first streaming path

1. Run OpenVT locally on Linux
2. Load a compatible model
3. Use transparent window capture in OBS
4. Stream from OBS to stream.place via WHIP/RTMP
5. Add bot/chat/TTS control afterward

## Requirements

- Godot 4.6+ according to the project docs
- OpenVT source tree
- built third-party dependencies
- optional: OpenSeeFace for webcam tracking
- optional: OBS for local production

## Local build notes for this repo

This repo includes a helper for building as far as possible in a Nix/dev shell environment:

```bash
devenv shell -- ./scripts/openvt-build-local.sh
```

It works around some upstream assumptions:

- upstream expects `pyenv`
- upstream tries to `pip install` tools globally
- upstream keylogger build wants Rust targets and `libudev`

This still does not bypass the Cubism SDK requirement.

## Notes from upstream docs

- OpenVT focuses on Linux availability
- supported trackers: OpenSeeFace and VTubeStudio mobile TCP over Wi-Fi
- transparent window support is one of its key streaming features
- hotkey capture on Linux may require the `input` group

## Hotkey note

If OpenVT hotkeys do not work under Linux while unfocused, upstream says you may need:

```bash
sudo -g input -u "$USER" open_vt.x86_64
```

Or to permanently add the user to the `input` group.

## Next integration step

Once OpenVT is rendering reliably, we can layer on:

- chat-triggered expressions
- TTS-driven mouth movement heuristics
- stream.place chat read/write
- autonomous reply logic
