Code Monkey home page Code Monkey logo

aituber-kit's Introduction

GitHub Last Commit GitHub Top Language GitHub Tag

X (Twitter) Discord GitHub Sponsor

概要

主に以下の2つの機能があります。

  1. AIキャラとの対話
  2. AITuber配信

下記の記事に詳細な使用方法を記載しました。

今日からあなたもAITuberデベロッパー|ニケちゃん

共通事前準備

  1. リポジトリをローカルにクローンします。
git clone https://github.com/tegnike/aituber-kit.git
  1. フォルダを開きます。
cd aituber-kit
  1. パッケージインストールします。
npm install
  1. 開発モードでアプリケーションを起動します。
npm run dev
  1. URLを開きます。http://localhost:3000

AIキャラとの対話

  • AIキャラと会話する機能です。
  • このリポジトリの元になっているpixiv/ChatVRMを拡張した機能です。
  • 各種LLMのAPIキーさえあれば比較的簡単に試すことが可能です。
  • 直近の会話文を記憶として保持します。
  • マルチモーダルで、カメラからの映像やアップロードした画像を認識して回答を生成することが可能です。

使用方法

  1. 設定画面で各種LLMのAPIキーを入力します。
    • OpenAI
    • Anthropic
    • Google Gemini
    • Groq
    • ローカルLLM(APIキーは不要ですが、ローカルAPIサーバーを起動しておく必要があります。)
    • Dify Chatbot(APIキーは不要ですが、ローカルAPIサーバーを起動しておく必要があります。)
  2. 必要に応じてキャラクターの設定プロンプトを編集します。
  3. 用意がある場合は、VRMファイルおよび背景ファイルをアップロードします。
  4. 音声合成エンジンを選択し、必要に応じて声の設定を行います。
    • VOICEVOXの場合は複数の選択肢から話者を選ぶことができます。予めVOICEVOXアプリを起動しておく必要があります。
    • Koeiromapの場合は、細かく音声を調整することが可能です。APIキーの入力が必要です。
    • Google TTSの場合は日本語以外の言語も選択可能です。credential情報が必要です。
    • Style-Bert-VITS2は、ローカルAPIサーバーを起動しておく必要があります。
    • GSVI TTSは、ローカルAPIサーバーを起動しておく必要があります。
    • ElevenLabsは様々な言語の選択が可能です。APIキーを入力してください。
  5. 入力フォームからキャラクターと会話を開始します。マイク入力も可能。

AITuber配信

  • Youtubeの配信コメントを取得して発言することが可能です。
  • Youtube APIキーが必要です。
  • 「#」から始まるコメントは読まれません。

使用方法

  1. 設定画面でYoutubeモードをONにします。
  2. Youtube APIキーとYoutube Live IDを入力します。
  3. 他の設定は「AIキャラとの対話」と同様に行います。
  4. Youtubeの配信を開始し、キャラクターがコメントに反応するのを確認します。
  5. 会話継続モードをONにすると、コメントが無いときにAIが自ら発言することができます。

その他の機能

外部連携モード(β版)

  • WebSocketでサーバーアプリにメッセージを送信して、レスポンスを取得することができます。
  • 上記2つと異なり、フロントアプリで完結しないため少し難易度が高いです。
  • ⚠ 現在メンテナンスしきれていないため、動かない可能性があります。

使用方法

  1. サーバーアプリを起動し、ws://127.0.0.1:8000/ws エンドポイントを開きます。
  2. 設定画面でWebSocketモードをONにします。
  3. 他の設定は「AIキャラとの対話」と同様に行います。
  4. サーバーアプリからのメッセージを待ち、キャラクターが反応するのを確認します。

関連

スライドモード

  • スライドをAIキャラが自動で発表するモードです。
  • 予めスライドと台本ファイルを用意しておく必要があります。

使用方法

  1. 予めAIキャラと対話できるところまで進めておきます。
  2. スライドフォルダと台本ファイルを指定のフォルダに配置します。
  3. 設定画面でスライドモードをONにします。
  4. スライド開始ボタンを押して発表を開始します。

TIPS

VRMモデル、背景固定方法

  • VRMモデルは public/AvatarSample_B.vrm のデータを変更してください。名称は変更しないでください。
  • 背景画像は public/bg-c.jpg の画像を変更してください。名称は変更しないでください。

環境変数の設定

  • 一部の設定値は .env ファイルの内容を参照することができます。
  • 設定画面で入力した場合は、その値が優先されます。

その他

  • 会話履歴は設定画面でリセットすることができます。
  • 各種設定項目はブラウザに保存されます。
  • コードブロックで囲まれた要素はTTSで読まれません。

スポンサー募集

開発を継続するためにスポンサーの方を募集しています。
あなたの支援は、AITuberキットの開発と改善に大きく貢献します。

GitHub Sponsor

協力者の皆様(ご支援いただいた順)

morioki3 hodachi-axcxept coderabbitai ai-bootcamp-tokyo wmoto-ai JunzoKamahara darkgaldragon usagi917 ochisamu mo0013 tsubouchi bunkaich

他、プライベートスポンサー 複数名

利用規約

コントリビューター用TIPS

新しい言語の追加方法

新しい言語をプロジェクトに追加するには、以下の手順に従ってください。

  1. 言語ファイルの追加:

    • locales ディレクトリに新しい言語のディレクトリを作成し、その中に translation.json ファイルを作成します。
    • 例: locales/fr/translation.json (フランス語の場合)
  2. 翻訳の追加:

    • translation.json ファイルに、既存の言語ファイルを参考にして翻訳を追加します。
  3. 言語設定の更新:

    • src/lib/i18n.js ファイルを開き、resources オブジェクトに新しい言語を追加します。
    resources: {
      ...,
      fr: {  // 新しい言語コード
        translation: require("../../locales/fr/translation.json"),
      },
    },
  4. 言語選択オプションの追加:

    • ユーザーが言語を選択できるように、UIの適切な部分(例えば設定画面の言語選択ドロップダウン)に新しい言語オプションを追加します。
    <select>
      ...,
      <option value="FR">フランス語 - French</option>
    </select>
  5. テスト:

    • 新しい言語でアプリケーションが正しく表示されるかテストします。

これで新しい言語のサポートがプロジェクトに追加されます。

音声言語コードの追加

  • 音声言語コードの対応も追加する必要があります。
  • 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 ディレクトリに追加してください。

aituber-kit's People

Contributors

tegnike avatar thenameless7741 avatar ke456-png avatar yelban avatar junzokamahara avatar ochisamu avatar inoueharutaka avatar batoracli avatar kazuya-bros avatar

Stargazers

playcodelatam avatar はおりん avatar  avatar  avatar  avatar May Kirihara avatar Rapidash Black avatar  avatar hahaha avatar  avatar  avatar mktn avatar Keiji Isogimi avatar Yudai Ushiro avatar  avatar  avatar marvo avatar  avatar  avatar rotejin avatar T Kumagai avatar  avatar MahatmA avatar ZanD avatar  avatar  avatar Edison_Luo avatar Gwanhyeong Lee avatar ryohei-miki avatar Yuma Kakefuda avatar tokitoki avatar  avatar Yutaka Kubota avatar  avatar Inaridiy avatar  avatar Koichi Tamiya avatar kk avatar komada avatar s. kusuhara avatar SATOH Kiyoshi avatar Ray avatar  avatar zenk avatar  avatar おってぃ avatar  avatar  avatar athulspal avatar  avatar Yoshikatsu Nishida avatar Hitoshi Hasegawa avatar Koki Nakashima avatar  avatar goto yuta avatar A.Nagamachi avatar Hayato Sakamaki avatar  avatar Derrick avatar conanssam avatar  avatar misuto avatar Jaehun Choe avatar obashun22 avatar YOSHINO avatar  avatar Buyzed  Hossain Akash avatar  avatar Olemi avatar  avatar Pauli avatar Happlex avatar chasing1874 avatar 水音 凪 avatar  avatar  avatar  avatar mamecheee avatar bongin avatar  avatar  avatar  avatar maza avatar Shojo Hakase avatar  avatar Elvis Shi avatar rayfiyo avatar  avatar  avatar VTF avatar Mashiro_Mawo avatar KingYoSun avatar necoyanagi avatar あお avatar 峯岸 亮 avatar  avatar Ina299 avatar Han avatar keigo9 avatar  avatar

Watchers

YabusameRyoma avatar  avatar  avatar necoyanagi avatar

aituber-kit's Issues

モバイルでの認証

Unable to access due to missing initial state.

Some specific scenarios are:

  1. Using IDP-initiated SAML SSO
  2. Using SignInWithRedirect i storage-partitioned browser environment.

特定のローカルLLMでの発言数制限における問題

特定のローカルLLM(具体的にはCommand R PlusやMistral系?)では、ユーザroleがuser/assistant/user/assitant/user/...という順序になっていないとエラーになるものがありました。その場合Bad Request 405が返ってきます。
調べてみると、発言履歴を10個だけ使っていますが、この場合「assitant/user」の5回繰り返しになります。先頭がassistantoなら良さそうなんですが、実は最初にsystem promptが入っているので、systemはassistanto相当になり、assistant/assitantと続くのでエラーになるようです。
単純にエラーをなくすだけなら、slice(-11)とかにすればエラーは出なくなります。
あるいは、この系統のLLMでは、system promptをuser roleに変更するとか(すいません、確認できていません)もありそうですが、モデル毎の設定を追加するのはちょっと面倒ですね。
src/pages/index.tsx:484
const messages: Message[] = [
{
role: "system",
content: systemPrompt,
},
...messageLog.slice(-10),
];

対話言語を増やす方法は?

ありがとうございます、この素晴らしい音声対話AITuberを開発してくれて。初めて試してみましたが、彼女の応答速度は非常に速く、通常の会話レベルに達することができます。お聞きしたいことがありますが、他の言語対話を追加する場合、例えば**語(繁体字**語 / zh-Hant)を追加する必要があるかもしれません。気になさらなければ、喜んで**語の対話サポートコードを追加してみたいです。

Style-Bert-VITS2で日本語をしゃべらせる時は、設定で言語を一度別の言語にする必要がある

音声エンジンにStyle-Bert-VITS2を設定して初めてnike-ChatVRMを使う時に、言語設定を何もいじっていないと、selectLanguageが"JA"になっていて、API呼び出しが失敗します。一度、言語設定を別のに変えてから日本語にすると"JP"になってうまくいくようになりました。

index.tsxの41行めでデフォルトが"JP"になっているのに、なぜ、"JA"が入っているかまでは追及できませんでした。
一度設定すればブラウザが覚えるようなので大きな問題ではありませんが、初めて使う人がハマりそうなので書かせていただきました。

配信終了機能

  • 特定のコマンドで配信終了させる?
  • 配信終了発言させる

配信終了機能

  • 特定のコマンドで配信終了させる?
  • 配信終了発言させる

マイクを自動受付化にする

  • マイクの自動受付モード追加

  • AIキャラ自身の発言を拾わないように、発言しているときはマイクをOFFにさせる

  • デスクトップモードでマイク使えない不具合あるかも?

変な音声が再生される

なぜかTTSサービスに「..」という文字列が渡され、変な音声が作成されてしまう事象が発生している。
文字のトリミング処理がうまくいっていない可能性あり。
「..」のような非発音文字列はTTSサービスに渡さないような処理を挟むのが良いかもしれない。

アプリとREADMEの韓国語対応

koサンプル

{
  "Settings": "설정",
  "ExternalConnectionMode": "외부 연동 모드 (WebSocket)",
  "YoutubeMode": "YouTube 모드",
  "YoutubeInfo": "처음에 '#'이 있는 댓글은 무시됩니다.",
  "YoutubeAPIKey": "YouTube API 키",
  "YoutubeLiveID": "YouTube Live ID",
  "ConversationContinuityMode": "대화 지속 모드 (베타 버전)",
  "ConversationContinuityModeInfo": "댓글이 없을 때 AI가 스스로 대화를 지속하려고 하는 모드입니다. 현재 OpenAI만 지원됩니다.",
  "ConversationContinuityModeInfo2": "한 번의 응답에 여러 번 LLM을 호출하기 때문에 API 사용료가 증가할 수 있습니다. 주의하십시오.",
  "ConversationContinuityModeInfo3": "gpt-4o 또는 gpt-4-turbo에서 비교적 안정적으로 동작합니다.",
  "StatusOn": "상태: ON",
  "StatusOff": "상태: OFF",
  "SelectAIService": "AI 서비스 선택",
  "LocalLLM": "로컬 LLM",
  "SelectModel": "모델 선택",
  "OpenAIAPIKeyLabel": "OpenAI API 키",
  "AnthropicAPIKeyLabel": "Anthropic API 키",
  "GoogleAPIKeyLabel": "Google Gemini API 키",
  "GroqAPIKeyLabel": "Groq API 키",
  "DifyAPIKeyLabel": "Dify API 키",
  "APIKeyInstruction": "API 키는 아래 링크에서 얻을 수 있습니다. 얻은 API 키를 폼에 입력하십시오.",
  "ChatGPTInfo": "ChatGPT API는 브라우저에서 직접 접근하고 있습니다.",
  "LocalLLMInfo": "로컬 LLM 서버를 실행해야 합니다.",
  "LocalLLMInfo2": "로컬 LLM의 URL(포트 번호 포함)과 모델 이름을 입력하십시오.",
  "GroqInfo": "Groq API는 브라우저에서 직접 접근하고 있습니다.",
  "DifyInfo": "Dify에서는 채팅 봇 타입만 지원됩니다.",
  "DifyInfo2": "Dify의 사양상 대화 기록이 유지되지 않으므로 주의하십시오.",
  "DifyInfo3": "예: http://localhost:81/v1/chat-messages",
  "DifyInstruction": "Dify를 사용하는 경우, 이 시스템 프롬프트는 사용되지 않습니다. Dify 채팅 봇에 설정하십시오.",
  "EnterURL": "URL 입력",
  "CharacterModelLabel": "캐릭터 모델",
  "OpenVRM": "VRM 열기",
  "BackgroundImage": "배경 이미지",
  "ChangeBackgroundImage": "배경 이미지 변경",
  "CharacterSettingsPrompt": "캐릭터 설정 (시스템 프롬프트)",
  "CharacterSettingsReset": "캐릭터 설정 재설정",
  "SyntheticVoiceEngineChoice": "합성 음성 엔진 선택",
  "VoiceAdjustment": "목소리 조정",
  "VoiceEngineInstruction": "사용할 합성 음성 엔진을 선택하십시오.",
  "UsingKoeiromap": "Koeiromap 사용 (일본어 전용)",
  "UsingVoiceVox": "VOICEVOX 사용 (일본어 전용)",
  "UsingGoogleTTS": "Google TTS 사용",
  "UsingStyleBertVITS2": "Style-Bert-VITS2 사용",
  "StyleBertVITS2Info": "Style-Bert-VITS2를 사용합니다. 로컬 API를 사용하기 때문에 아래 사이트에서 환경에 맞는 앱을 다운로드하고 실행해야 합니다.",
  "SpeakerSelection": "보이스 타입 선택",
  "GoogleTTSInfo": "Google Cloud Text-to-Speech를 사용합니다. 다국어 지원이 가능합니다.",
  "AuthFileInstruction": "인증용 JSON 파일을 아래에서 얻어 리포지토리 루트 폴더에 credentials.json이라는 이름으로 배치하십시오.",
  "LanguageModelURL": "언어 모델은 아래 URL에서 선택하십시오.",
  "LanguageChoice": "언어 선택",
  "StyleBeatVITS2LocalServerURL": "Style-Bert-VITS2 로컬 서버 URL",
  "StyleBeatVITS2ModelID": "Style-Bert-VITS2 모델 ID",
  "StyleBeatVITS2Style": "Style-Bert-VITS2 스타일",
  "ConversationHistory": "대화 기록",
  "ConversationHistoryInfo": "최근 10개의 대화 문장이 기억으로 유지됩니다.",
  "ConversationHistoryReset": "대화 기록 재설정",
  "NotConnectedToExternalAssistant": "외부 어시스턴트와 연결되지 않았습니다.",
  "APIKeyNotEntered": "API 키가 입력되지 않았습니다.",
  "CodeLog": "코드 로그",
  "ChatLog": "대화 로그",
  "EnterYourQuestion": "질문을 입력하세요",
  "AboutThisApplication": "이 애플리케이션에 대해",
  "AboutThisApplicationDescription": "웹 브라우저에서 3D 캐릭터와 대화를 즐길 수 있습니다. 마이크나 텍스트 입력, 음성 합성을 사용하여 대화할 수 있습니다. 캐릭터(VRM)의 변경이나 성격 설정, 목소리 조정도 가능합니다. 설정은 왼쪽 상단의 메뉴 버튼에서 변경할 수 있습니다.",
  "TechnologyIntroduction": "기술 소개",
  "TechnologyIntroductionDescription1": "이 애플리케이션은 pixiv사의<b>ChatVRM</b>을 개조하여 만들어졌습니다. 원본 소스 코드는",
  "TechnologyIntroductionLink1": "여기",
  "TechnologyIntroductionDescription2": "를 참조하십시오.",
  "TechnologyIntroductionDescription3": "3D 모델 표시 및 조작에는",
  "TechnologyIntroductionDescription4": "을 사용하고 있으며, 대화 문장 생성에는",
  "TechnologyIntroductionDescription5": "등의 여러 LLM을 사용하고 있으며, 음성 합성에는",
  "TechnologyIntroductionDescription6": "등의 여러 TTS를 사용하고 있습니다. 자세한 내용은",
  "TechnologyIntroductionLink2": "설명 기사",
  "TechnologyIntroductionDescription7": "를 참조하십시오.",
  "SourceCodeDescription1": "이 애플리케이션의 소스 코드는 GitHub에서 공개되고 있습니다. 자유롭게 변경 및 개조가 가능합니다.",
  "RepositoryURL": "리포지토리 URL:",
  "DontShowIntroductionNextTime": "다음에 이 대화 상자를 표시하지 않기",
  "Close": "닫기",
  "Language": "언어 설정",
  "UsingGSVITTS": "GSVI TTS 사용",
  "GSVITTSInfo": "GSVI TTS 설정",
  "GSVITTSServerUrl": "GSVI TTS 서버 URL",
  "GSVITTSModelID": "GSVI TTS 모델 ID",
  "GSVITTSBatchSize": "GSVI TTS 배치 크기 (1 ~ 100 숫자가 클수록 추론 속도가 빨라지지만, 너무 크면 메모리가 부족할 수 있습니다)",
  "GSVITTSSpeechRate": "말 속도 (0.5 ~ 2.0 숫자가 클수록 빠름)"
}

気付いた細かい不具合

geminiがない

index.tsx

        if (selectAIService === "openai" && !openAiKey) {
          setAssistantMessage(t('APIKeyNotEntered'));
          return;
        } else if (selectAIService === "anthropic" && !anthropicKey) {
          setAssistantMessage(t('APIKeyNotEntered'));
          return;
        } else if (selectAIService === "groq" && !groqKey) {
          setAssistantMessage(t('APIKeyNotEntered'));
          return;
        } else if (selectAIService === "dify" && !difyKey) {
          setAssistantMessage(t('APIKeyNotEntered'));
          return;
        }

なんかVRMのドラッグしたときの挙動が変?

=> #44 に移動

本番環境にデプロイする

議題

本番環境にデプロイする
どのサービスが一番カンタンかを検証、Vercelが良い?

オンラインで使える各種サービス

TTS

  • Google TTSが一番安い
  • Koeiromapは2円/req、流石に高い

LLM

  • 少額クレジット用意してHaiku?
  • 無料のAIサービス使えるかも確認

Menuボタンを表示切替できるようにする

左上にある設定を開く歯車アイコン(Menuコンポーネント)を表示ON/OFFできるようにする。
非表示の場合は設定画面を開けなくなるので、特定のコマンドで開けるようにするとよいかも

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.