Awesome
AITuberKit
<img style="max-width: 100%;" src="./docs/logo.png">お知らせ: 本プロジェクトはバージョン v2.0.0 以降、カスタムライセンスを採用しています。商用目的でご利用の場合は、利用規約 セクションをご確認ください。
<p align="center"> <a href="https://github.com/tegnike/aituber-kit"><img alt="GitHub Last Commit" src="https://img.shields.io/github/last-commit/tegnike/aituber-kit"></a> <a href="https://github.com/tegnike/aituber-kit"><img alt="GitHub Top Language" src="https://img.shields.io/github/languages/top/tegnike/aituber-kit"></a> <img alt="GitHub Tag" src="https://img.shields.io/github/v/tag/tegnike/aituber-kit?sort=semver&color=orange"> <a href="https://github.com/tegnike/aituber-kit/blob/main/LICENSE"><img alt="License: Custom" src="https://img.shields.io/badge/License-Custom-blue"></a> </p> <p align="center"> <a href="https://github.com/tegnike/aituber-kit/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/tegnike/aituber-kit"></a> <a href="https://github.com/tegnike/aituber-kit/network/members"><img alt="GitHub forks" src="https://img.shields.io/github/forks/tegnike/aituber-kit"></a> <a href="https://github.com/tegnike/aituber-kit/graphs/contributors"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/tegnike/aituber-kit"></a> <a href="https://github.com/tegnike/aituber-kit/issues"><img alt="GitHub issues" src="https://img.shields.io/github/issues/tegnike/aituber-kit"></a> </p> <p align="center"> <a href="https://x.com/tegnike"><img alt="X (Twitter)" src="https://img.shields.io/badge/X-tegnike-1DA1F2?logo=x&style=flat&logoColor=white"/></a> <a href="https://discord.gg/5rHEue52nZ"><img alt="Discord" src="https://img.shields.io/badge/Discord-AITuberKit-7289DA?logo=discord&style=flat&logoColor=white"/></a> <a href="https://github.com/sponsors/tegnike"><img alt="GitHub Sponsor" src="https://img.shields.io/badge/Sponsor-GitHub-ea4aaa?style=flat&logo=github"/></a> </p> <h3 align="center"> <a href="./docs/README_en.md">English</a>| <a href="./docs/README_zh.md">中文</a>| <a href="./docs/README_ko.md">韓語</a> </h3>概要
主に以下の2つの機能があります。
- AIキャラとの対話
- AITuber配信
下記の記事に詳細な使用方法を記載しました。
開発環境
このプロジェクトは以下の環境で開発されています:
- Node.js: ^20.0.0
- npm: 10.8.1
共通事前準備
- リポジトリをローカルにクローンします。
git clone https://github.com/tegnike/aituber-kit.git
- フォルダを開きます。
cd aituber-kit
- パッケージインストールします。
npm install
- 開発モードでアプリケーションを起動します。
npm run dev
- URLを開きます。http://localhost:3000
AIキャラとの対話
- AIキャラと会話する機能です。
- このリポジトリの元になっている pixiv/ChatVRM を拡張した機能です。
- 各種LLMのAPIキーさえあれば簡単に始めることが可能です。
- 直近の会話文を記憶として保持します。
- マルチモーダルで、カメラからの映像やアップロードした画像を認識して回答を生成することが可能です。
使用方法
- 設定画面で各種LLMのAPIキーを入力します。
- OpenAI
- Anthropic
- Google Gemini
- Azure OpenAI
- Groq
- Cohere
- Mistral AI
- Perplexity
- Fireworks
- ローカルLLM
- Dify(Chatbot or Agent)
- 必要に応じてキャラクターの設定プロンプトを編集します。
- 必要に応じてキャラクターのVRMファイルおよび背景ファイルをアップロードします。
- 音声合成エンジンを選択し、必要に応じて声の設定を行います。
- VOICEVOX: 複数の選択肢から話者を選ぶことができます。予めVOICEVOXアプリを起動しておく必要があります。
- Koeiromap: 細かく音声を調整することが可能です。APIキーの入力が必要です。
- Google TTS: 日本語以外の言語も選択可能です。credential情報が必要です。
- Style-Bert-VITS2: ローカルAPIサーバーを起動しておく必要があります。
- AivisSpeech: 予めAivisSpeechアプリを起動しておく必要があります。
- GSVI TTS: ローカルAPIサーバーを起動しておく必要があります。
- ElevenLabs: 様々な言語の選択が可能です。APIキーの入力が必要です。
- OpenAI: APIキーの入力が必要です。
- Azure OpenAI: APIキーの入力が必要です。
- 入力フォームからキャラクターと会話を開始します。マイク入力も可能です。
AITuber配信
- Youtubeの配信コメントを取得して発言することが可能です。
- Youtube APIキーが必要です。
- 「#」から始まるコメントは読まれません。
使用方法
- 設定画面でYoutubeモードをONにします。
- Youtube APIキーとYoutube Live IDを入力します。
- 他の設定は「AIキャラとの対話」と同様に行います。
- Youtubeの配信を開始し、キャラクターがコメントに反応するのを確認します。
- 会話継続モードをONにすると、コメントが無いときにAIが自ら発言することができます。
その他の機能
外部連携モード
- WebSocketでサーバーアプリにリクエストを送信して、レスポンスを取得することができます。
- 別途サーバーアプリを用意する必要があります。
使用方法
- サーバーアプリを起動し、
ws://127.0.0.1:8000/ws
エンドポイントを開きます。 - 設定画面で外部連携モードをONにします。
- 他の設定は「AIキャラとの対話」と同様に行います。
- 入力フォームからリクエストを送信し、サーバーアプリからのリクエストが返却されるのを確認します。
関連
- こちらのサーバーアプリのリポジトリですぐに試すことが可能です。tegnike/aituber-server
- 詳しい設定は「美少女と一緒に開発しようぜ!!【Open Interpreter】」をお読みください。
スライドモード
- スライドをAIキャラが自動で発表するモードです。
- 予めスライドと台本ファイルを用意しておく必要があります。
使用方法
- AIキャラと対話できるところまで進めておきます。
- スライドフォルダと台本ファイルを指定のフォルダに配置します。
- 設定画面でスライドモードをONにします。
- スライド開始ボタンを押して発表を開始します。
関連
- 詳しい設定は「スライド発表はAIがやる時代!!!!」をお読みください。
Realtime APIモード
- OpenAIのRealtime APIを使用して、低遅延でキャラと対話できるモードです。
- 関数実行を定義することができます。
使用方法
- AIサービスでOpenAIまたはAzure OpenAIを選択します。
- Realtime APIモードをONにします。
- マイクを使用して話しかけます。
関数実行
- src/components/realtimeAPITools.tsx, src/components/realtimeAPITools.json に新しい関数を定義します。
- 既存の get_current_weather 関数を参考にしてください。
TIPS
VRMモデル、背景固定方法
- VRMモデルは
public/AvatarSample_B.vrm
のデータを変更してください。名称は変更しないでください。 - 背景画像は
public/bg-c.png
の画像を変更してください。名称は変更しないでください。
環境変数の設定
- 一部の設定値は
.env
ファイルの内容を参照することができます。 - 設定画面で入力した場合は、環境変数で指定された値よりも優先されます。
マイク入力方法(2パターン)
- Alt (or option) キーを押している間入力受付 => 離したら送信
- マイクボタンをクリック(一度押したら入力受付)=> もう一度クリックで送信
その他
- 設定情報・会話履歴は設定画面でリセットすることができます。
- 各種設定項目はブラウザにローカルストレージとして保存されます。
- コードブロックで囲まれた要素はTTSで読まれません。
関連記事
- 今日からあなたもAITuberデベロッパー|ニケちゃん
- 美少女と一緒に開発しようぜ!!【Open Interpreter】
- スライド発表はAIがやる時代!!!!
- AITuberKitにマルチモーダル機能を追加したのでAIキャラと宅飲みしてみる
- AITuberKit × Dify で超簡単チャットボット構築
- DifyをXserverでインターネットに公開する
- 高度な音声モード こと Realtime API を試してみる
スポンサー募集
開発を継続するためにスポンサーの方を募集しています。<br> あなたの支援は、AITuberキットの開発と改善に大きく貢献します。
協力者の皆様(ご支援いただいた順)
<p> <a href="https://github.com/morioki3" title="morioki3"> <img src="https://github.com/morioki3.png" width="40" height="40" alt="morioki3"> </a> <a href="https://github.com/hodachi-axcxept" title="hodachi-axcxept"> <img src="https://github.com/hodachi-axcxept.png" width="40" height="40" alt="hodachi-axcxept"> </a> <a href="https://github.com/coderabbitai" title="coderabbitai"> <img src="https://github.com/coderabbitai.png" width="40" height="40" alt="coderabbitai"> </a> <a href="https://github.com/ai-bootcamp-tokyo" title="ai-bootcamp-tokyo"> <img src="https://github.com/ai-bootcamp-tokyo.png" width="40" height="40" alt="ai-bootcamp-tokyo"> </a> <a href="https://github.com/wmoto-ai" title="wmoto-ai"> <img src="https://github.com/wmoto-ai.png" width="40" height="40" alt="wmoto-ai"> </a> <a href="https://github.com/JunzoKamahara" title="JunzoKamahara"> <img src="https://github.com/JunzoKamahara.png" width="40" height="40" alt="JunzoKamahara"> </a> <a href="https://github.com/darkgaldragon" title="darkgaldragon"> <img src="https://github.com/darkgaldragon.png" width="40" height="40" alt="darkgaldragon"> </a> <a href="https://github.com/usagi917" title="usagi917"> <img src="https://github.com/usagi917.png" width="40" height="40" alt="usagi917"> </a> <a href="https://github.com/ochisamu" title="ochisamu"> <img src="https://github.com/ochisamu.png" width="40" height="40" alt="ochisamu"> </a> <a href="https://github.com/mo0013" title="mo0013"> <img src="https://github.com/mo0013.png" width="40" height="40" alt="mo0013"> </a> <a href="https://github.com/tsubouchi" title="tsubouchi"> <img src="https://github.com/tsubouchi.png" width="40" height="40" alt="tsubouchi"> </a> <a href="https://github.com/bunkaich" title="bunkaich"> <img src="https://github.com/bunkaich.png" width="40" height="40" alt="bunkaich"> </a> <a href="https://github.com/seiki-aliveland" title="seiki-aliveland"> <img src="https://github.com/seiki-aliveland.png" width="40" height="40" alt="seiki-aliveland"> </a> <a href="https://github.com/rossy8417" title="rossy8417"> <img src="https://github.com/rossy8417.png" width="40" height="40" alt="rossy8417"> </a> <a href="https://github.com/gijigae" title="gijigae"> <img src="https://github.com/gijigae.png" width="40" height="40" alt="gijigae"> </a> <a href="https://github.com/takm-reason" title="takm-reason"> <img src="https://github.com/takm-reason.png" width="40" height="40" alt="takm-reason"> </a> <a href="https://github.com/haoling" title="haoling"> <img src="https://github.com/haoling.png" width="40" height="40" alt="haoling"> </a> <a href="https://github.com/FoundD-oka" title="FoundD-oka"> <img src="https://github.com/FoundD-oka.png" width="40" height="40" alt="FoundD-oka"> </a> <a href="https://github.com/terisuke" title="terisuke"> <img src="https://github.com/terisuke.png" width="40" height="40" alt="terisuke"> </a> <a href="https://github.com/konpeita" title="konpeita"> <img src="https://github.com/konpeita.png" width="40" height="40" alt="konpeita"> </a> </p>他、プライベートスポンサー 複数名
利用規約
ライセンス
本プロジェクトは、バージョン v2.0.0 以降、カスタムライセンスを採用しています。
-
無償利用
- 営利目的以外での個人利用、教育目的、非営利目的での使用は無償で利用可能です。
-
商用ライセンス
- 商用目的での使用に関しては、別途商用ライセンスの取得が必要です。
- 詳細は、ライセンスについてをご確認ください。
その他
コントリビューター用TIPS
新しい言語の追加方法
新しい言語をプロジェクトに追加するには、以下の手順に従ってください。
-
言語ファイルの追加:
locales
ディレクトリに新しい言語のディレクトリを作成し、その中にtranslation.json
ファイルを作成します。- 例:
locales/fr/translation.json
(フランス語の場合)
-
翻訳の追加:
translation.json
ファイルに、既存の言語ファイルを参考にして翻訳を追加します。
-
言語設定の更新:
src/lib/i18n.js
ファイルを開き、resources
オブジェクトに新しい言語を追加します。
resources: { ..., fr: { // 新しい言語コード translation: require("../../locales/fr/translation.json"), }, },
-
言語選択オプションの追加:
- ユーザーが言語を選択できるように、UIの適切な部分(例えば設定画面の言語選択ドロップダウン)に新しい言語オプションを追加します。
<select> ..., <option value="FR">フランス語 - French</option> </select>
-
テスト:
- 新しい言語でアプリケーションが正しく表示されるかテストします。
これで新しい言語のサポートがプロジェクトに追加されます。
音声言語コードの追加
- 音声言語コードの対応も追加する必要があります。
Introduction
コンポーネント内のgetVoiceLanguageCode
関数に新しい言語コードを追加します。
const getVoiceLanguageCode = (selectLanguage: string) => {
switch (selectLanguage) {
case 'JP':
return 'ja-JP';
case 'EN':
return 'en-US';
case 'ZH':
return 'zh-TW';
case 'zh-TW':
return 'zh-TW';
case 'KO':
return 'ko-KR';
case 'FR':
return 'fr-FR';
default:
return 'ja-JP';
}
}
READMEの追加
- 新しい言語のREADME (
README_fr.md
), ロゴ利用規約 (logo_licence_fr.md
), VRMモデル利用規約 (vrm_licence_fr.md
) をdocs
ディレクトリに追加してください。