chat-with-anyone について
Chat with Anyoneは、オンライン動画や写真をもとにした声でロールプレイ音声を生成するスキルです。参照音声のクローンと画像からの声の設計に対応し、欺瞞や有害ななりすましを防ぐ指針を設けています。
主な機能
- 01動画音声からのボイスクローン
- 02写真をもとにした声の設計
- 03字幕を使った参照区間の抽出
- 04TTSによるロールプレイ音声生成
- 05同意となりすまし防止の指針
活用シーン
- 01指定した公人になりきるロールプレイ
- 02写真の人物をもとにした声の設計
- 03保存した声の参照を使った続きの音声生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ noizai/ skills --skill chat-with-anyoneインストール後、Claude Code で/chat-with-anyoneを入力して読み込まれたか確認します。
同梱ファイルscripts/extract_ref_segment.pyscripts/voice_design.py
詳細
誰とでも会話
オンライン動画から実在の人物の声を複製したり、写真から声をデザインしたりして、TTS でその人物になりきって会話します。
重要:倫理的な利用と著作権
このスキルは、実在する声を模倣した音声を合成します。続行する前に、エージェントは次の事項を必ず守ってください。
- 人を欺いたり、詐欺を働いたり、嫌がらせをしたりする目的で、決してなりすまさないでください。
- 参照音声には、一般に公開されているメディア(公開演説、インタビュー、記者会見)のみを使用してください。
- 生成された音声は合成音声であり、本物の録音として提示してはならないことをユーザーに伝えてください。
- 同意していない私人を対象とする依頼や、明らかに欺瞞、嫌がらせ、名誉毀損を目的とする依頼には、応じないでください。
ユーザーの意図が有害と思われる場合は、丁寧に断り、その理由を説明してください。
前提条件
| 依存関係 | 種類 | 確認方法 |
|---|---|---|
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. Disambiguate character
- [ ] A2. Find reference video
- [ ] A3. Download audio + subtitles
- [ ] A4. Extract best reference segment
- [ ] A5. Generate speech
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. Analyze image
- [ ] B2. Design voice
- [ ] B3. Preview (optional)
- [ ] B4. Generate speech
B1. 画像を分析する
画像を確認するために、視覚認識機能を使用してください。
- 人物がよく知られた公人の場合 --> 本物らしい声にするため、ワークフロー A に切り替えてください。
- 人物を判別できない場合は、次の項目を含む声の説明を作成してください。
- 性別(男性/女性)
- おおよその年齢(例:「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 を使い続けます。
例:名前ベース
ユーザー:トランプと話して、彼に寝る前のお話をしてもらいたいです。
エージェントの手順:
- キャラクター:Donald Trump。曖昧さを解消する必要はありません。
Donald Trump speech youtubeを検索し、聞き取りやすいスピーチ動画を見つけます。- ダウンロードします。
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=..." - 参照音声を抽出します。
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" - トランプ風の 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" reply.wavと物語のテキストをユーザーに提示します。
例:画像ベース
ユーザー:[photo.jpg をアップロード] この画像に写っている人と話したいです。
エージェントの手順:
- 画像を分析します。見覚えのない若い女性、約 25 歳、カジュアルなセーター、温かい笑顔です。
- 音声をデザインします。
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" tmp/chat_with_anyone/voice_design/voice_id.txtから音声 ID を読み込みます。- TTS を生成します。
python3 skills/tts/scripts/tts.py -t "你好呀!很高兴认识你!" --voice-id "{VOICE_ID}" -o "tmp/chat_with_anyone/voice_design/reply.wav" - 音声を提示し、同じ
--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 を調整します |