{"id":26641526,"url":"https://github.com/shinshin86/aituber-onair","last_synced_at":"2026-06-01T01:01:16.614Z","repository":{"id":282525937,"uuid":"948855680","full_name":"shinshin86/aituber-onair","owner":"shinshin86","description":"AITuber OnAir Toolkit","archived":false,"fork":false,"pushed_at":"2026-05-26T13:35:04.000Z","size":28014,"stargazers_count":58,"open_issues_count":2,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-26T15:29:26.781Z","etag":null,"topics":["ai-companion","ai-companion-systems","ai-vtuber","aichat","aichatbot","aituber","aivoice","vtuber"],"latest_commit_sha":null,"homepage":"https://start-aituber-with-ai-agent.aituberonair.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shinshin86.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-03-15T05:26:24.000Z","updated_at":"2026-05-24T10:19:53.000Z","dependencies_parsed_at":"2026-01-13T13:05:40.473Z","dependency_job_id":null,"html_url":"https://github.com/shinshin86/aituber-onair","commit_stats":null,"previous_names":["shinshin86/aituber-onair"],"tags_count":129,"template":false,"template_full_name":null,"purl":"pkg:github/shinshin86/aituber-onair","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Faituber-onair","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Faituber-onair/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Faituber-onair/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Faituber-onair/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shinshin86","download_url":"https://codeload.github.com/shinshin86/aituber-onair/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinshin86%2Faituber-onair/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33755369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-companion","ai-companion-systems","ai-vtuber","aichat","aichatbot","aituber","aivoice","vtuber"],"created_at":"2025-03-24T18:29:24.722Z","updated_at":"2026-06-01T01:01:16.606Z","avatar_url":"https://github.com/shinshin86.png","language":"TypeScript","funding_links":[],"categories":["Open Source Projects"],"sub_categories":["A"],"readme":"# AITuber OnAir\n\n[![CI](https://github.com/shinshin86/aituber-onair/actions/workflows/ci.yml/badge.svg)](https://github.com/shinshin86/aituber-onair/actions/workflows/ci.yml)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/shinshin86/aituber-onair)\n\n![AITuber OnAir Toolkit - logo](./images/aituber-onair-toolkit.png)\n\n[日本語版はこちら](./README_ja.md)\n\n\u003e **Build stream-ready AI VTubers with TypeScript**\n\u003e\n\u003e AITuber OnAir is an open source toolkit for building AI VTubers\n\u003e that can chat, speak, react to viewers, use memory, and run with\n\u003e PNG, VRM, or Live2D avatars. Start from the hosted web app, scaffold\n\u003e a starter app, self-host a working example, or assemble your own stack\n\u003e from modular TypeScript packages.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://aituberonair.com\"\u003eTry the hosted web app\u003c/a\u003e ・\n  \u003ca href=\"./docs/quickstart.md\"\u003eQuickstart\u003c/a\u003e ・\n  \u003ca href=\"./docs/examples.md\"\u003eExamples\u003c/a\u003e ・\n  \u003ca href=\"#packages\"\u003ePackages\u003c/a\u003e\n\u003c/p\u003e\n\n![AITuber OnAir Demo](./images/aituber-onair-demo.png)\n\n## What you can build\n\n- AI VTubers that chat and speak with live viewers\n- Streaming assistants that react to YouTube / Twitch comments\n- AI character apps with text, voice, vision, and long-term memory\n- Viewer relationship systems with points, levels, and achievements\n- Browser- and Node.js-based integrations, composed from independent packages\n\n## Start in 10 minutes\n\nIf you want the shortest path to a local AI VTuber:\n\n```bash\nnpm create aituber-onair@latest my-aituber\ncd my-aituber\nnpm run dev\n```\n\nThen open the app, choose a template, and configure your LLM / TTS provider\nfrom **Settings**. See the [Quickstart](./docs/quickstart.md) for the full\nwalkthrough.\n\n## Choose your path\n\n### 1. Try the hosted web app\n\n[AITuber OnAir](https://aituberonair.com) is a full, standalone AITuber streaming web app built on top of `@aituber-onair/core`. It's both the quickest way to experience the toolkit end-to-end and a working reference for what you can ship with it. No setup required.\n\n### 2. Create a starter app\n\nUse `create-aituber-onair` to scaffold your own app from an official PNGTuber,\nVRM, or Live2D starter template.\n\n```bash\nnpm create aituber-onair@latest\n```\n\nThe CLI asks for a project name, template, and whether to install\ndependencies. You can also pass the project name up front:\n\n```bash\nnpm create aituber-onair@latest my-aituber\ncd my-aituber\nnpm run dev\n```\n\nFor step-by-step setup and template selection, see\n[Quickstart](./docs/quickstart.md).\n\n### 3. Run an example app locally\n\nThree full, ready-to-run React apps built on `@aituber-onair/core`. Pick the\navatar style that fits your project. All three share the same broad LLM / TTS\nprovider coverage and in-app **Settings** UI.\n\n#### PNGTuber Chat — 2D PNG avatar\n\n![PNGTuber example app](./packages/core/examples/react-pngtuber-app/images/react-pngtuber-app.png)\n\nSwap in 4 PNG states (mouth/eyes open/close) and get real-time lip-sync driven from actual audio output. See [`packages/core/examples/react-pngtuber-app`](./packages/core/examples/react-pngtuber-app).\n\n```bash\ngit clone https://github.com/shinshin86/aituber-onair.git\ncd aituber-onair/packages/core/examples/react-pngtuber-app\nnpm install\nnpm run dev\n```\n\n#### VRM Chat — 3D VRM avatar\n\n![VRM example app](./packages/core/examples/react-vrm-app/images/react-vrm-app.png)\n\nRender a 3D VRM avatar (`miko.vrm`) with optional idle VRMA animation, real-time mouth lip-sync driven from audio output, and camera controls (drag to rotate / wheel to zoom). See [`packages/core/examples/react-vrm-app`](./packages/core/examples/react-vrm-app).\n\n```bash\ngit clone https://github.com/shinshin86/aituber-onair.git\ncd aituber-onair/packages/core/examples/react-vrm-app\nnpm install\nnpm run dev\n```\n\n#### Live2D Chat — local Live2D folder loader\n\nLoad a local Live2D model folder that contains `.model3.json`, render it in\nthe browser, and drive mouth movement from actual audio output volume. This\nexample intentionally does not bundle any Live2D assets. See\n[`packages/core/examples/react-live2d-app`](./packages/core/examples/react-live2d-app).\n\n```bash\ngit clone https://github.com/shinshin86/aituber-onair.git\ncd aituber-onair/packages/core/examples/react-live2d-app\nnpm install\nnpm run dev\n```\n\nOpen `http://localhost:5173` in any case, then set API keys and provider options in **Settings**.\n\nSee [Examples](./docs/examples.md) for the full example map and recommended\nstarting points.\n\n### 4. Build your own with the packages\n\nInstall only what you need and drop it into your own app:\n\n```bash\nnpm install @aituber-onair/chat\n```\n\n```ts\nimport { ChatServiceFactory } from '@aituber-onair/chat';\n\nconst chat = ChatServiceFactory.createChatService('openai', {\n  apiKey: process.env.OPENAI_API_KEY!,\n});\n\nawait chat.processChat(\n  [{ role: 'user', content: 'Hello!' }],\n  (partial) =\u003e process.stdout.write(partial),\n  async (full) =\u003e console.log('\\nDone:', full),\n);\n```\n\nSee each package README for provider setup and fuller usage.\n\n## Documentation\n\n- [Quickstart](./docs/quickstart.md): create a starter app, pick a template,\n  configure providers, and run locally.\n- [Examples](./docs/examples.md): choose from full AI VTuber apps, package\n  examples, bot examples, and local runtime examples.\n\n## Packages\n\n### [create-aituber-onair](./packages/create-aituber-onair/README.md)\n\n\u003cimg src=\"./packages/create-aituber-onair/images/create-aituber-onair.png\" alt=\"create-aituber-onair logo\" width=\"240\" /\u003e\n\nCLI for creating an AITuber OnAir app from an official starter template.\nCurrently includes PNGTuber and VRM templates with bundled starter assets.\n```bash\nnpm create aituber-onair@latest\n```\n\n### [@aituber-onair/core](./packages/core/README.md)\n\n\u003cimg src=\"./packages/core/images/aituber-onair-core.png\" alt=\"AITuber OnAir Core logo\" width=\"240\" /\u003e\n\nCore runtime tying chat, voice, memory, and conversation context together for full AITuber experiences.\n```bash\nnpm install @aituber-onair/core\n```\n\n### [@aituber-onair/chat](./packages/chat/README.md)\n\n\u003cimg src=\"./packages/chat/images/aituber-onair-chat.png\" alt=\"AITuber OnAir Chat logo\" width=\"240\" /\u003e\n\nUnified LLM layer across OpenAI, Claude, Gemini, Z.ai, Kimi, DeepSeek, Mistral, and OpenRouter — streaming, tool/function calling, vision, and MCP support included.\n```bash\nnpm install @aituber-onair/chat\n```\n\n### [@aituber-onair/voice](./packages/voice/README.md)\n\n\u003cimg src=\"./packages/voice/images/aituber-onair-voice.png\" alt=\"AITuber OnAir Voice logo\" width=\"240\" /\u003e\n\nStandalone TTS library with VOICEVOX, VoicePeak, OpenAI TTS, MiniMax, AIVIS Speech, and more, plus emotion-aware synthesis.\n```bash\nnpm install @aituber-onair/voice\n```\n\n### [@aituber-onair/manneri](./packages/manneri/README.md)\n\n\u003cimg src=\"./packages/manneri/images/aituber-onair-manneri.png\" alt=\"AITuber OnAir Manneri logo\" width=\"240\" /\u003e\n\nDetects repetitive conversation patterns and injects topic-diversification prompts to keep dialogue fresh.\n```bash\nnpm install @aituber-onair/manneri\n```\n\n### [@aituber-onair/comment-intelligence](./packages/comment-intelligence/README.md)\n\n\u003cimg src=\"./packages/comment-intelligence/images/aituber-onair-comment-intelligence.png\" alt=\"AITuber OnAir Comment Intelligence logo\" width=\"240\" /\u003e\n\nFilters live comments before they reach an AI character: selects one comment to answer, blocks unsafe input, summarizes ignored comments, and builds compact LLM context. Rules-first with optional LLM-assisted analysis.\n```bash\nnpm install @aituber-onair/comment-intelligence\n```\n\n### [@aituber-onair/bushitsu-client](./packages/bushitsu-client/README.md)\n\n\u003cimg src=\"./packages/bushitsu-client/images/aituber-onair-bushitsu-client.png\" alt=\"AITuber OnAir Bushitsu Client logo\" width=\"240\" /\u003e\n\nWebSocket chat client with React hooks, auto-reconnect, rate limiting, mentions, and voice integration. Browser and Node.js.\n```bash\nnpm install @aituber-onair/bushitsu-client\n```\n\n### [@aituber-onair/kizuna](./packages/kizuna/README.md)\n\n\u003cimg src=\"./packages/kizuna/images/aituber-onair-kizuna.png\" alt=\"AITuber OnAir Kizuna logo\" width=\"240\" /\u003e\n\nRelationship / bond system (絆) for AI characters and viewers: points, achievements, emotion-based bonuses, level progression, persistent storage.\n```bash\nnpm install @aituber-onair/kizuna\n```\n\n## Why AITuber OnAir\n\n- Proven in production — powers [AITuber OnAir](https://aituberonair.com), a live AITuber streaming web app, so you're building on the same code path a real product ships on\n- Pick any entry point: hosted web app, starter CLI, self-hosted example, or modular npm packages\n- First-class coverage of the providers AITuber builders actually use — OpenAI / Claude / Gemini for chat, VOICEVOX / OpenAI TTS / AIVIS Speech and more for voice\n- Chat, voice, streaming (YouTube / Twitch / WebSocket), and viewer relationships in a single, consistent stack\n- MIT-licensed TypeScript — you keep control of hosting, data, and integrations\n\n## Project structure\n\n```txt\naituber-onair/\n└── packages/\n    ├── create-aituber-onair/ # npm create CLI with starter templates\n    ├── core/             # AITuberOnAirCore, memory, orchestration\n    ├── chat/             # LLM providers, streaming, tools, MCP\n    ├── voice/            # TTS engines, emotion, playback\n    ├── manneri/          # Conversation pattern detection\n    ├── comment-intelligence/ # Live comment filtering and context building\n    ├── bushitsu-client/  # WebSocket chat client + React hooks\n    └── kizuna/           # Viewer relationship / bond system\n```\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n## Special Thanks\n\nThis project is based on [the work referenced here](https://x.com/shinshin86/status/1862806042603847905). Without the contributions of these pioneers, it would not exist.\n\n---\n\n## For contributors\n\nWorking on the monorepo itself:\n\n```bash\ngit clone https://github.com/shinshin86/aituber-onair.git\ncd aituber-onair\nnpm install\nnpm run build\nnpm run test\nnpm run fmt\n```\n\n### Agent Skills\n\nShared Agent Skills so Codex and Claude Code use the same workflow definitions.\nSee [`docs/agent-skills.md`](./docs/agent-skills.md) for the full guide. Canonical sources live in `skills/`, with Claude Code runtime copies under `.claude/skills/`.\n\n### Releases\n\nReleases are driven by manual version bumps + per-package `CHANGELOG.md`, published automatically by GitHub Actions on merge to `main`. Do **not** run `npm publish` directly.\n\n- **Patch**: bug fixes, dependency updates\n- **Minor**: new features, backward-compatible changes\n- **Major**: breaking changes to public API\n\n`release.yml` uses Changesets to publish packages, create tags (`@aituber-onair/\u003cpkg\u003e@x.y.z`), and create GitHub Releases for packages published in that run. If CI fails mid-run, re-running publishes the remainder but does **not** backfill Releases for already-published packages — create those manually from the package CHANGELOG (tag will already exist). `prerelease-next.yml` only updates the `next` prerelease tag.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinshin86%2Faituber-onair","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinshin86%2Faituber-onair","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinshin86%2Faituber-onair/lists"}