VTuber Chat Search
A search engine for VTuber livestream chat, find interesting topics from past livestreams. Useful for making clips / shorts.
Live demo: https://akiroz.github.io/vtchat
- Support video audio transcription generation & indexing via VAD/TTS pipeline
- Improve search UI
- Automatically seek to week with results
- Change search term in results page
- Improve Japanese searching (e.g. hiragana <> katakana)
Project root contains the backend codebase while the frontend lives inside frontend/.
$ docker compose up --build
The backend process denpends on several environment variables which can be set in a .env file:
NODE_ENVstart in development mode if not set toproduction- scheduled tasks are disabled
- server is plain HTTP, does not care about reverse proxy
- server is served on port 3000 (can be overwritten by env
PORT)
VTCHAT_MGNT_KEYmanagement key (dev mode:admin), authentication for management APIsVTCHAT_MONIT_KEYmonitoring key (dev mode:monit), authentication for external monitoring APIsVTCHAT_YT_KEYYouTube API key (always required)VTCHAT_API_CERTHTTPS X.509 cert pathVTCHAT_API_KEYHTTPS X.509 key path
Authenticated APIs uses basic auth with keys as username, auth header should be formatted as follows:
Basic ${base64(key + ":")}
Build production image:
docker build --tag ghcr.io/akiroz/vtchat . ## --platform=linux/amd64
$ cd frontend
$ yarn start ## Main Web UI
$ yarn start-console ## Management Console
There are 2 seperate frontend apps sharing the same build toolchain configured in vite.config.mjs, src root dir are:
frontend/searchMain public-facing website (served by external hosting)frontend/consoleManagement console (served directly by backend)
Management APIs do not have CORS support, during development the dev server will proxy requests to the backend which needs to be running on localhost at the same time.
Channels of interest are stored in the database channel table.
VTChat periodically polls the most outdated channel for new livestreams, newly discovered stream archives are put on a job queue for further processing.
Currently livestreams less than 1 day old are ignored as a grace period.
A worker sequencially fetches video livechat data to be indexed in the database.
A basic management console is avaliable on the backend server /mgnt for administrative tasks such as:
- Adding channels of interest
- Setting tags on channels
- Monitoring the ingestion pipeline for failed jobs
- Manually adding videos to be indexed
- Inspired by にじさんじコメント検索
- pgroonga / Groonga Project
- Masterchat (@uetchy, @stu43005)
- All the kind folks at Holodex who helped along the way
Made with ❤️ for 💎💧🍵



