Communitygithub.com

모두와 대화하기

실제 인물이나 가상 캐릭터의 음성을 온라인에서 자동으로 찾아 깨끗한 샘플을 추출하고 오디오 응답을 생성하여 그들의 목소리로 대화합니다. 또한 업로드된 이미지에서 어울리는 음성을 생성할 수도 있습니다.

모두와 대화하기란 무엇인가요?

Chat with Anyone 스킬은 사용자가 실제 인물이나 가상 캐릭터와 그들의 고유한 목소리로 대화할 수 있게 해줍니다. Workflow A에서는 유튜브나 빌리빌리 같은 온라인 동영상에서 음성 클립을 찾아내고, 자동 생성된 자막을 분석하여 가장 깨끗하고 밀도 높은 3~12초 음성 구간을 추출합니다. 이후 TTS(Text-to-Speech) 스킬을 사용하여 추출된 음성을 참조로 응답을 합성합니다. Workflow B에서는 이미지에서 인물을 분석하고, 성별, 나이, 인상 등을 설명하는 음성 디자인을 생성하며, Noiz API를 통해 완전히 새로운 음성을 설계합니다. 이 스킬은 공개적으로 이용 가능한 미디어만 사용하고, 사용자에게 합성 음성임을 고지하며, 사기나 괴롭힘 같은 유해한 의도는 거절해야 하는 윤리적 사용 지침을 엄격히 따릅니다. Cursor 플랫폼에서 실행되며, ffmpeg, yt-dlp, 그리고 TTS 스킬이 사전에 설치되어 있어야 합니다.

지원 대상~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/chat-with-anyone

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

모두와 대화하기은(는) 무엇을 하나요?

온라인 동영상에서 실제 인물의 목소리를 복제하거나, 사진에서 음성을 디자인하여 해당 인물로 역할극을 하며 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 오디오 파일과 하나 이상의 .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"

스크립트 출력:

  • 감지된 음성 특징 (stdout에 출력)
  • 출력 디렉터리의 미리 듣기 오디오 파일
  • 최적의 음성 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. 트럼프 스타일로 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와 이야기 텍스트를 사용자에게 제공합니다.

예시: 이미지 기반

사용자: [photo.jpg 업로드] 我想跟这张图片里的人聊天

에이전트 단계:

  1. 비전 분석: 알아볼 수 없는 젊은 여성, 약 25세, 캐주얼 스웨터, 따뜻한 미소.
  2. 음성 디자인: python3 skills/chat-with-anyone/scripts/voice_design.py --picture "photo.jpg" --voice-description "약 25세의 젊은 중국 여성, 부드럽고 따뜻한 목소리, 친근한 어조" -o "tmp/chat_with_anyone/voice_design"
  3. tmp/chat_with_anyone/voice_design/voice_id.txt에서 음성 ID 읽기.
  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.

관련 스킬