Communitygithub.com

Chat with Anyone - 誰とでも会話

実在の人物や架空のキャラクターと、その人らしい声で会話できます。オンライン上の音声からクリーンな参照サンプルを抽出し、音声応答を生成します。画像から対応する声を生成することも可能です。

Chat with Anyone - 誰とでも会話 とは?

このスキルは、実在の人物または架空のキャラクターの声をクローンし、テキスト読み上げ(TTS)機能を使ってロールプレイ対話を可能にするAIエージェントスキルです。ユーザーが誰かの名前を指定すると、YouTubeやBilibiliなどのオンラインビデオからその人の明確な発話音声を自動検索・ダウンロードし、字幕(SRT)を解析して最適な参照音声区間(3〜12秒)を抽出します。抽出した参照音声をもとに、TTSスキル(NOIZ APIベース)を用いて、その人物らしい声で任意のテキストを合成できます。また、人物が認識できない画像が与えられた場合には、画像分析と音声デザインスクリプトを使用して、年齢・性別・雰囲気に合った声をゼロから生成するワークフローも備えています。対応プラットフォームはCursor(CLIツールおよびPythonスクリプト)で、依存関係としてffmpeg、yt-dlp、およびTTSスキルが必要です。重要な注意点として、このスキルはユーザーを欺いたり、嫌がらせや詐欺に使用することを禁止しており、必ず本人の同意がある公開メディアのみを参照音声として使用するよう倫理的なガイドラインが定められています。

対応~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/chat-with-anyone

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Chat with Anyone - 誰とでも会話 は何をしますか?

オンラインビデオから実在の人物の声をクローンしたり、写真から声をデザインして、その人物になりきってTTSでロールプレイできます。

重要:倫理的使用と著作権

このスキルは実際の声を模倣する音声を合成します。進める前に、エージェントは必ず以下を遵守してください:

  1. なりすましによる欺瞞、詐欺、嫌がらせを決して行わないこと。
  2. 公開メディアのみ(公開スピーチ、インタビュー、記者会見)を参照音声として使用すること。
  3. ユーザーに通知すること:生成された音声は合成音声であり、本物の録音として提示すべきではないこと。
  4. リクエストを拒否すること:同意のない個人を対象とするもの、または明らかに欺瞞、嫌がらせ、名誉毀損を意図したものは拒否すること。

ユーザーの意図が有害であると思われる場合は、丁寧に拒否し、理由を説明してください。

前提条件

依存関係タイプ確認方法
ffmpegシステムバイナリffmpeg -version
yt-dlpシステムバイナリyt-dlp --version
tts スキルCursorスキルls skills/tts/scripts/tts.py
NOIZ_API_KEY環境変数またはファイルpython3 skills/tts/scripts/tts.py config --show

初回実行前に、すべての依存関係が揃っていることを確認してください:

ffmpeg -version && yt-dlp --version && ls skills/tts/scripts/tts.py

yt-dlp がない場合はインストールしてください:

uv pip install yt-dlp

Noiz APIキーが設定されていない場合:

python3 skills/tts/scripts/tts.py config --set-api-key YOUR_KEY

モード選択

  • ユーザーが人物名を指定(実在または架空) --> ワークフローA
  • ユーザーが画像を提供、人物が認識できない --> ワークフローB
  • ユーザーが画像を提供、人物が認識可能な公人 --> ワークフローA(実際の声の方がより本格的)
  • 画像に複数の人物がいる --> 先に誰について話すか質問

ワークフローA:名前ベース(オンラインビデオからの音声)

チェックリストで進捗を記録してください:

- [ ] A1. キャラクターの特定
- [ ] A2. 参照ビデオを探す
- [ ] A3. 音声と字幕をダウンロード
- [ ] A4. 最適な参照区間を抽出
- [ ] A5. 音声を生成

A1. キャラクターの特定

曖昧な場合(例:「アメリカ大統領」「スパイダーマン俳優」)は、進める前に正確な人物をユーザーに確認してください。

A2. 参照ビデオを探す

ウェブ検索を使用して、その人物がはっきりと話しているYouTube(またはBilibili)のビデオを見つけてください。最適な候補:インタビュー、スピーチ、記者会見。背景音楽が激しいビデオは避けてください。

検索クエリの例:

  • {CHARACTER_NAME} interview / {CHARACTER_NAME} 采访
  • {CHARACTER_NAME} speech / {CHARACTER_NAME} 演讲
  • {CHARACTER_NAME} press conference

A3. 音声と字幕をダウンロード

mkdir -p "tmp/chat_with_anyone/{CHARACTER_NAME}"
yt-dlp -x --audio-format mp3 \
  --write-subs --write-auto-subs --sub-langs "en,zh-Hans" \
  --convert-subs srt \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/%(title)s.%(ext)s" \
  "{VIDEO_URL}"

ダウンロード後、出力ディレクトリをリストして音声ファイルとSRT字幕ファイルを確認してください:

ls tmp/chat_with_anyone/{CHARACTER_NAME}/

期待される出力:.mp3 音声ファイルと1つ以上の .srt 字幕ファイル。

字幕ファイルが表示されない場合:自動キャプションが付いている別のビデオを試すか、対象言語に合わせて --sub-langs を調整してください。

A4. 最適な参照区間を抽出

自動抽出スクリプトを使用します。SRTを解析し、最も密度の高い3〜12秒の音声区間を見つけてWAVとして抽出します:

python3 skills/chat-with-anyone/scripts/extract_ref_segment.py \
  --srt "tmp/chat_with_anyone/{CHARACTER_NAME}/{SRT_FILE}" \
  --audio "tmp/chat_with_anyone/{CHARACTER_NAME}/{AUDIO_FILE}" \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/ref.wav"

スクリプトは選択された時間範囲を表示し、参照WAVを保存します。出力が存在し、空でないことを確認してから進めてください。

スクリプトが適切な区間を見つけられなかった場合:短いクリップには --min-duration 2 を試すか、別のビデオをダウンロードしてください。

A5. 音声を生成してロールプレイ

キャラクターになりきって応答テキストを書き、それを合成します:

python3 skills/tts/scripts/tts.py \
  -t "{RESPONSE_TEXT}" \
  --ref-audio "tmp/chat_with_anyone/{CHARACTER_NAME}/ref.wav" \
  -o "tmp/chat_with_anyone/{CHARACTER_NAME}/reply.wav"

生成された音声ファイルをテキストと一緒にユーザーに提示してください。以降のメッセージでは、同じ --ref-audio パスを再利用してください。


ワークフローB:画像ベース(写真からの音声)

チェックリストで進捗を記録してください:

- [ ] B1. 画像を分析
- [ ] B2. 声をデザイン
- [ ] B3. プレビュー(オプション)
- [ ] B4. 音声を生成

B1. 画像を分析

視覚認識機能を使って画像を確認してください:

  1. 人物が認識可能な公人の場合 --> 本物の声のためにワークフローAに切り替えてください。
  2. 認識できない場合、以下の内容を含む声の説明を作成してください:
    • 性別(男性 / 女性)
    • おおよその年齢(例:「30歳くらい」)
    • 印象(例:明るい、権威がある、優しい)
    • 文脈の手がかり(例:スーツ → プロフェッショナルな口調;アスレチックウェア → エネルギッシュ)

B2. 声をデザイン

画像と説明の両方を音声デザインスクリプトに渡します:

python3 skills/chat-with-anyone/scripts/voice_design.py \
  --picture "{IMAGE_PATH}" \
  --voice-description "{VOICE_DESCRIPTION}" \
  -o "tmp/chat_with_anyone/voice_design"

スクリプトの出力:

  • 検出された音声特徴(標準出力に表示)
  • 出力ディレクトリ内のプレビュー音声ファイル
  • 最適な音声IDを含む voice_id.txt

音声IDを読み取ってください:

cat tmp/chat_with_anyone/voice_design/voice_id.txt

B3. プレビュー(オプション)

出力ディレクトリからプレビュー音声ファイルを提示し、ユーザーが声を聞けるようにします。満足できない場合は、--voice-description または --guidance-scale を調整してB2を再実行してください。

B4. 音声を生成してロールプレイ

python3 skills/tts/scripts/tts.py \
  -t "{RESPONSE_TEXT}" \
  --voice-id "{VOICE_ID}" \
  -o "tmp/chat_with_anyone/voice_design/reply.wav"

以降のメッセージでは、一貫性のために同じ --voice-id を使い続けてください。


例:名前ベース

ユーザー: 我想跟特朗普聊天,让他给我讲个睡前故事。

エージェントの手順:

  1. キャラクター:Donald Trump。明確化不要。
  2. Donald Trump speech youtube を検索し、明瞭なスピーチビデオを見つける。
  3. ダウンロード: yt-dlp -x --audio-format mp3 --write-subs --write-auto-subs --sub-langs "en" --convert-subs srt -o "tmp/chat_with_anyone/trump/%(title)s.%(ext)s" "https://youtube.com/watch?v=..."
  4. 参照区間を抽出: python3 skills/chat-with-anyone/scripts/extract_ref_segment.py --srt "tmp/chat_with_anyone/trump/....srt" --audio "tmp/chat_with_anyone/trump/....mp3" -o "tmp/chat_with_anyone/trump/ref.wav"
  5. TrumpスタイルでTTSを生成: python3 skills/tts/scripts/tts.py -t "Let me tell you a tremendous bedtime story..." --ref-audio "tmp/chat_with_anyone/trump/ref.wav" -o "tmp/chat_with_anyone/trump/reply.wav"
  6. reply.wav とストーリーテキストをユーザーに提示する。

例:画像ベース

ユーザー: [uploads photo.jpg] 我想跟这张图片里的人聊天

エージェントの手順:

  1. 視覚分析:認識できない若い女性、約25歳、カジュアルなセーター、温かい笑顔。
  2. 声をデザイン: python3 skills/chat-with-anyone/scripts/voice_design.py --picture "photo.jpg" --voice-description "A young Chinese woman around 25, gentle and warm voice, friendly tone" -o "tmp/chat_with_anyone/voice_design"
  3. 音声IDを tmp/chat_with_anyone/voice_design/voice_id.txt から読み取る。
  4. TTSを生成: python3 skills/tts/scripts/tts.py -t "你好呀!很高兴认识你!" --voice-id "{VOICE_ID}" -o "tmp/chat_with_anyone/voice_design/reply.wav"
  5. 音声を提示し、同じ --voice-id でロールプレイを続ける。

トラブルシューティング

問題解決策
yt-dlp のダウンロードが失敗する、またはビデオが利用できない別のビデオURLを試す。一部の地域やビデオは制限されている場合があります。yt-dlp -U を実行して更新
SRT字幕ファイルがない--sub-lang en,zh-Hans で再ダウンロード。それでもない場合は、自動キャプション付きの別のビデオを試す
extract_ref_segment.py が適切な区間を見つけられない短いクリップには --min-duration 2 を使用するか、別のビデオを試す
音声デザインがエラーを返すNoiz APIキーを確認。画像が人物の明確な写真であることを確認
TTS出力の音質がおかしいワークフローAの場合は別の参照ビデオを試す。ワークフローBの場合は --voice-description を調整

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

関連スキル