Communitygithub.com

chat-with-anyone

Chatea con cualquier persona real o personaje ficticio con su propia voz, buscando automáticamente su discurso en línea, extrayendo una muestra de referencia limpia y generando respuestas de audio. También admite la creación de una voz a partir de una imagen subida.

¿Qué es chat-with-anyone?

Esta habilidad, 'Chat with Anyone', permite a un agente de IA clonar la voz de una persona real a partir de un video en línea (Workflow A) o diseñar una voz a partir de una foto (Workflow B) para luego sintetizar respuestas de audio mediante TTS. Es útil para juegos de rol, prototipos de voz o aplicaciones de accesibilidad, pero impone estrictas directrices éticas: nunca para suplantación, fraude o acoso, y solo usando material público con consentimiento implícito. Funciona con Claude Code, Cursor o Codex, y requiere dependencias como `ffmpeg`, `yt-dlp` y el skill `tts` con una clave API de Noiz. El flujo A descarga un video, extrae automáticamente el segmento de habla más denso (3-12 segundos) usando un script de Python, y luego genera respuestas con esa voz de referencia. El flujo B toma una imagen, solicita una descripción de voz al usuario y diseña una voz sintética, permitiendo previsualización antes de la síntesis. Ambos flujos almacenan resultados en `tmp/chat_with_anyone/` y permiten reutilizar la voz para mensajes posteriores.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Chatea con Cualquiera

Clona la voz de una persona real a partir de un video en línea, o diseña una voz a partir de una foto, luego juega a ser esa persona con TTS.

Importante: Uso Ético y Derechos de Autor

Esta habilidad sintetiza habla que imita voces reales. Antes de proceder, el agente debe:

  1. Nunca suplantar a alguien para engañar, defraudar o acosar.
  2. Usar solo medios disponibles públicamente (discursos públicos, entrevistas, conferencias de prensa) como audio de referencia.
  3. Informar al usuario que el audio generado es sintético y no debe presentarse como grabaciones genuinas.
  4. Rechazar solicitudes que tengan como objetivo personas privadas que no hayan dado su consentimiento, o que estén claramente destinadas al engaño, acoso o difamación.

Si la intención del usuario parece dañina, rechace cortésmente y explique por qué.

Requisitos Previos

DependenciaTipoCómo verificar
ffmpegBinario del sistemaffmpeg -version
yt-dlpBinario del sistemayt-dlp --version
skill ttsSkill de Cursorls skills/tts/scripts/tts.py
NOIZ_API_KEYVariable de entorno o archivopython3 skills/tts/scripts/tts.py config --show

Antes de la primera ejecución, verifique que todas las dependencias estén presentes:

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

Si falta yt-dlp, instálelo:

uv pip install yt-dlp

Si la clave API de Noiz no está configurada:

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

Selección de Modo

  • El usuario nombra a una persona (real o ficticia) --> Flujo de trabajo A
  • El usuario proporciona una imagen, la persona no es reconocible --> Flujo de trabajo B
  • El usuario proporciona una imagen, la persona es una figura pública reconocible --> Flujo de trabajo A (la voz real es más auténtica)
  • Varias personas en la imagen --> Pregunte primero cuál persona

Flujo de trabajo A: Basado en nombre (voz a partir de video en línea)

Siga el progreso con esta lista de verificación:

- [ ] A1. Desambiguar personaje
- [ ] A2. Encontrar video de referencia
- [ ] A3. Descargar audio + subtítulos
- [ ] A4. Extraer el mejor segmento de referencia
- [ ] A5. Generar habla

A1. Desambiguar Personaje

Si es ambiguo (por ejemplo, "Presidente de EE.UU.", "Actor de Spider-Man"), pregunte al usuario que especifique la persona exacta antes de continuar.

A2. Encontrar un Video de Referencia

Use la búsqueda web para encontrar un video de YouTube (o Bilibili) donde la persona hable claramente. Los mejores candidatos: entrevistas, discursos, conferencias de prensa. Evite videos con música de fondo alta.

Consultas de búsqueda para probar:

  • {NOMBRE_DEL_PERSONAJE} entrevista / {NOMBRE_DEL_PERSONAJE} 采访
  • {NOMBRE_DEL_PERSONAJE} discurso / {NOMBRE_DEL_PERSONAJE} 演讲
  • {NOMBRE_DEL_PERSONAJE} conferencia de prensa

A3. Descargar Audio y Subtítulos

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

Después de la descarga, enumere el directorio de salida para identificar el archivo de audio y el archivo de subtítulos SRT:

ls tmp/chat_with_anyone/{NOMBRE_DEL_PERSONAJE}/

Salida esperada: un archivo de audio .mp3 y uno o más archivos de subtítulos .srt.

Si no aparecen archivos de subtítulos: pruebe con un video diferente que tenga subtítulos generados automáticamente, o ajuste --sub-langs para el idioma de destino.

A4. Extraer el Mejor Segmento de Referencia

Use el script de extracción automatizada: analiza el SRT, encuentra la ventana de habla más densa de 3 a 12 segundos y la extrae como WAV:

python3 skills/chat-with-anyone/scripts/extract_ref_segment.py \
  --srt "tmp/chat_with_anyone/{NOMBRE_DEL_PERSONAJE}/{ARCHIVO_SRT}" \
  --audio "tmp/chat_with_anyone/{NOMBRE_DEL_PERSONAJE}/{ARCHIVO_DE_AUDIO}" \
  -o "tmp/chat_with_anyone/{NOMBRE_DEL_PERSONAJE}/ref.wav"

El script imprime el rango de tiempo seleccionado y guarda el WAV de referencia. Verifique que la salida exista y no esté vacía antes de continuar.

Si el script informa que no hay un segmento adecuado: pruebe con --min-duration 2 para clips más cortos, o descargue un video diferente.

A5. Generar Habla y Juego de Roles

Escriba una respuesta en el personaje, luego sintetícela:

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

Presente el archivo de audio generado al usuario junto con el texto. Para mensajes posteriores, reutilice la misma ruta --ref-audio.


Flujo de trabajo B: Basado en imagen (voz a partir de foto)

Siga el progreso con esta lista de verificación:

- [ ] B1. Analizar imagen
- [ ] B2. Diseñar voz
- [ ] B3. Vista previa (opcional)
- [ ] B4. Generar habla

B1. Analizar la Imagen

Use su capacidad de visión para examinar la imagen:

  1. Si la persona es una figura pública reconocible --> cambie al Flujo de trabajo A para una voz auténtica.
  2. Si no es reconocible, produzca una descripción de voz que cubra:
    • Género (masculino / femenino)
    • Edad aproximada (por ejemplo, "alrededor de 30 años")
    • Actitud aparente (por ejemplo, alegre, autoritaria, amable)
    • Pistas contextuales (por ejemplo, traje --> tono profesional; ropa deportiva --> enérgica)

B2. Diseñar la Voz

Pase tanto la imagen como la descripción al script de diseño de voz:

python3 skills/chat-with-anyone/scripts/voice_design.py \
  --picture "{RUTA_DE_LA_IMAGEN}" \
  --voice-description "{DESCRIPCIÓN_DE_LA_VOZ}" \
  -o "tmp/chat_with_anyone/voice_design"

El script genera:

  • Características de voz detectadas (impresas en stdout)
  • Archivos de audio de vista previa en el directorio de salida
  • voice_id.txt que contiene el ID de la mejor voz

Lea el ID de la voz:

cat tmp/chat_with_anyone/voice_design/voice_id.txt

B3. Vista Previa (Opcional)

Presente los archivos de audio de vista previa del directorio de salida para que el usuario pueda escuchar la voz. Si no está satisfecho, vuelva a ejecutar B2 con --voice-description o --guidance-scale ajustados.

B4. Generar Habla y Juego de Roles

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

Para mensajes posteriores, siga usando el mismo --voice-id para mantener la coherencia.


Ejemplo: Basado en nombre

Usuario: Quiero chatear con Trump, que me cuente un cuento para dormir.

Pasos del agente:

  1. Personaje: Donald Trump. No necesita desambiguación.
  2. Buscar discurso de Donald Trump youtube, encontrar un video de discurso claro.
  3. Descargar: 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. Extraer referencia: 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. Generar TTS al estilo de Trump: python3 skills/tts/scripts/tts.py -t "Déjame contarte un cuento para dormir tremendo..." --ref-audio "tmp/chat_with_anyone/trump/ref.wav" -o "tmp/chat_with_anyone/trump/reply.wav"
  6. Presentar reply.wav y el texto del cuento al usuario.

Ejemplo: Basado en imagen

Usuario: [sube foto.jpg] Quiero chatear con la persona de esta imagen

Pasos del agente:

  1. Análisis de visión: mujer joven no reconocible, ~25 años, suéter informal, sonrisa cálida.
  2. Diseñar voz: python3 skills/chat-with-anyone/scripts/voice_design.py --picture "foto.jpg" --voice-description "Una joven china de unos 25 años, voz suave y cálida, tono amigable" -o "tmp/chat_with_anyone/voice_design"
  3. Leer ID de la voz de tmp/chat_with_anyone/voice_design/voice_id.txt.
  4. Generar TTS: python3 skills/tts/scripts/tts.py -t "¡Hola! ¡Encantada de conocerte!" --voice-id "{ID_DE_LA_VOZ}" -o "tmp/chat_with_anyone/voice_design/reply.wav"
  5. Presentar audio y continuar el juego de roles con el mismo --voice-id.

Solución de Problemas

ProblemaSolución
La descarga de yt-dlp falla o el video no está disponiblePruebe con una URL de video diferente; algunas regiones/videos están restringidos. Ejecute yt-dlp -U para actualizar
No hay archivos de subtítulos SRTVuelva a descargar con --sub-lang en,zh-Hans; si aún así no aparecen, pruebe con otro video que tenga subtítulos automáticos
extract_ref_segment.py no encuentra una ventana adecuadaUse --min-duration 2 para clips más cortos, o pruebe con otro video
El diseño de voz devuelve un errorVerifique la clave API de Noiz; asegúrese de que la imagen sea una foto clara de una persona
La salida de TTS suena malPara el Flujo de trabajo A, pruebe con otro video de referencia; para el Flujo de trabajo B, ajuste --voice-description

Individual skills in this repo

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

Skills relacionados