Communitygithub.com

discuter-avec-quiconque

Discutez avec toute personne réelle ou personnage fictif en utilisant sa propre voix : trouvez automatiquement un extrait audio en ligne, extrayez un échantillon de référence propre, et générez des réponses audio. Prend également en charge la création d'une voix correspondante à partir d'une image téléchargée.

Qu'est-ce que discuter-avec-quiconque ?

Cette compétence permet à un agent d'IA de converser avec n'importe quelle personne réelle ou personnage fictif en utilisant une voix synthétique imitant la leur. Elle extrait automatiquement un échantillon vocal de référence à partir de vidéos en ligne (YouTube, Bilibili) ou conçoit une voix à partir d'une photo. La compétence s'appuie sur `yt-dlp` pour télécharger l'audio et les sous-titres, `ffmpeg` pour le traitement, et le script `extract_ref_segment.py` pour isoler le meilleur segment de parole (3 à 12 secondes). La synthèse vocale utilise l'API Noiz via la compétence `tts`. Deux workflows sont proposés : le Workflow A (basé sur le nom) pour les personnages réels ou fictifs dont on peut trouver une vidéo, et le Workflow B (basé sur une image) pour créer une voix inédite à partir d'une photo. Un fort accent est mis sur l'éthique : l'agent doit refuser toute demande d'usurpation, de fraude ou de harcèlement, et toujours informer l'utilisateur que l'audio est synthétique. La compétence est conçue pour Cursor et nécessite que les dépendances `ffmpeg`, `yt-dlp` et la compétence `tts` soient installées.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Discuter avec quiconque

Clonez la voix d'une personne réelle à partir d'une vidéo en ligne, ou créez une voix à partir d'une photo, puis incarnez cette personne avec la synthèse vocale.

Important : Utilisation éthique et droits d'auteur

Cette compétence synthétise une parole qui imite des voix réelles. Avant de procéder, l'agent doit :

  1. Ne jamais usurper l'identité de quelqu'un pour tromper, frauder ou harceler.
  2. Utiliser uniquement des médias accessibles au public (discours publics, interviews, conférences de presse) comme audio de référence.
  3. Informer l'utilisateur que l'audio généré est synthétique et ne doit pas être présenté comme un enregistrement authentique.
  4. Refuser les demandes ciblant des personnes privées n'ayant pas donné leur consentement, ou clairement destinées à la tromperie, au harcèlement ou à la diffamation.

Si l'intention de l'utilisateur semble nuisible, refusez poliment et expliquez pourquoi.

Prérequis

DépendanceTypeComment vérifier
ffmpegBinaire systèmeffmpeg -version
yt-dlpBinaire systèmeyt-dlp --version
Compétence ttsCompétence Cursorls skills/tts/scripts/tts.py
NOIZ_API_KEYVariable d'environnement ou fichierpython3 skills/tts/scripts/tts.py config --show

Avant la première exécution, vérifiez que toutes les dépendances sont présentes :

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

Si yt-dlp est manquant, installez-le :

uv pip install yt-dlp

Si la clé API Noiz n'est pas configurée :

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

Sélection du mode

  • L'utilisateur nomme une personne (réelle ou fictive) --> Workflow A
  • L'utilisateur fournit une image, la personne n'est pas reconnaissable --> Workflow B
  • L'utilisateur fournit une image, la personne est une figure publique reconnaissable --> Workflow A (la voix réelle est plus authentique)
  • Plusieurs personnes dans l'image --> Demandez d'abord quelle personne

Workflow A : Basé sur le nom (voix à partir d'une vidéo en ligne)

Suivez la progression avec cette liste de vérification :

- [ ] A1. Désambiguïsation du personnage
- [ ] A2. Trouver une vidéo de référence
- [ ] A3. Télécharger l'audio et les sous-titres
- [ ] A4. Extraire le meilleur segment de référence
- [ ] A5. Générer la parole

A1. Désambiguïsation du personnage

Si ambigu (par exemple « président des États-Unis », « acteur de Spider-Man »), demandez à l'utilisateur de préciser la personne exacte avant de continuer.

A2. Trouver une vidéo de référence

Utilisez une recherche web pour trouver une vidéo YouTube (ou Bilibili) où la personne parle clairement. Les meilleurs candidats : interviews, discours, conférences de presse. Évitez les vidéos avec une musique de fond forte.

Requêtes de recherche à essayer :

  • {NOM_PERSONNAGE} interview / {NOM_PERSONNAGE} 采访
  • {NOM_PERSONNAGE} discours / {NOM_PERSONNAGE} 演讲
  • {NOM_PERSONNAGE} conférence de presse

A3. Télécharger l'audio et les sous-titres

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

Après le téléchargement, listez le répertoire de sortie pour identifier le fichier audio et le fichier de sous-titres SRT :

ls tmp/chat_with_anyone/{NOM_PERSONNAGE}/

Résultat attendu : un fichier audio .mp3 et un ou plusieurs fichiers de sous-titres .srt.

Si aucun fichier de sous-titres n'apparaît : essayez une autre vidéo qui possède des sous-titres automatiques, ou ajustez --sub-langs pour la langue cible.

A4. Extraire le meilleur segment de référence

Utilisez le script d'extraction automatisée — il analyse le SRT, trouve la fenêtre de parole la plus dense (3 à 12 secondes) et l'extrait en WAV :

python3 skills/chat-with-anyone/scripts/extract_ref_segment.py \
  --srt "tmp/chat_with_anyone/{NOM_PERSONNAGE}/{FICHIER_SRT}" \
  --audio "tmp/chat_with_anyone/{NOM_PERSONNAGE}/{FICHIER_AUDIO}" \
  -o "tmp/chat_with_anyone/{NOM_PERSONNAGE}/ref.wav"

Le script affiche la plage temporelle sélectionnée et enregistre le WAV de référence. Vérifiez que le fichier existe et n'est pas vide avant de continuer.

Si le script ne trouve aucun segment approprié : essayez --min-duration 2 pour des extraits plus courts, ou téléchargez une autre vidéo.

A5. Générer la parole et incarner

Écrivez une réponse dans le personnage, puis synthétisez-la :

python3 skills/tts/scripts/tts.py \
  -t "{TEXTE_RÉPONSE}" \
  --ref-audio "tmp/chat_with_anyone/{NOM_PERSONNAGE}/ref.wav" \
  -o "tmp/chat_with_anyone/{NOM_PERSONNAGE}/reponse.wav"

Présentez le fichier audio généré à l'utilisateur avec le texte. Pour les messages suivants, réutilisez le même chemin --ref-audio.


Workflow B : Basé sur l'image (voix à partir d'une photo)

Suivez la progression avec cette liste de vérification :

- [ ] B1. Analyser l'image
- [ ] B2. Concevoir la voix
- [ ] B3. Prévisualisation (optionnelle)
- [ ] B4. Générer la parole

B1. Analyser l'image

Utilisez votre capacité de vision pour examiner l'image :

  1. Si la personne est une figure publique reconnaissable --> passez au Workflow A pour une voix authentique.
  2. Si elle n'est pas reconnaissable, produisez une description vocale couvrant :
    • Genre (homme / femme)
    • Âge approximatif (par exemple « environ 30 ans »)
    • Attitude apparente (par exemple joyeux, autoritaire, doux)
    • Indices contextuels (par exemple costume -> ton professionnel ; tenue de sport -> énergique)

B2. Concevoir la voix

Passez à la fois l'image et la description au script de conception vocale :

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

Le script produit :

  • Les caractéristiques vocales détectées (affichées sur la sortie standard)
  • Des fichiers audio de prévisualisation dans le répertoire de sortie
  • voice_id.txt contenant le meilleur identifiant vocal

Lisez l'identifiant vocal :

cat tmp/chat_with_anyone/voice_design/voice_id.txt

B3. Prévisualisation (optionnelle)

Présentez les fichiers audio de prévisualisation du répertoire de sortie pour que l'utilisateur puisse entendre la voix. Si non satisfait, relancez B2 avec --voice-description ou --guidance-scale ajusté.

B4. Générer la parole et incarner

python3 skills/tts/scripts/tts.py \
  -t "{TEXTE_RÉPONSE}" \
  --voice-id "{IDENTIFIANT_VOCAL}" \
  -o "tmp/chat_with_anyone/voice_design/reponse.wav"

Pour les messages suivants, continuez à utiliser le même --voice-id pour la cohérence.


Exemple : Basé sur le nom

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

Étapes de l'agent :

  1. Personnage : Donald Trump. Aucune désambiguïsation nécessaire.
  2. Recherche Donald Trump speech youtube, trouve une vidéo de discours claire.
  3. Téléchargement : 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. Extraction de la référence : 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. Génération du TTS dans le style de Trump : 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. Présentez reply.wav et le texte de l'histoire à l'utilisateur.

Exemple : Basé sur l'image

Utilisateur : [télécharge photo.jpg] 我想跟这张图片里的人聊天

Étapes de l'agent :

  1. Analyse visuelle : jeune femme non reconnaissable, ~25 ans, pull décontracté, sourire chaleureux.
  2. Conception de la voix : python3 skills/chat-with-anyone/scripts/voice_design.py --picture "photo.jpg" --voice-description "Une jeune femme chinoise d'environ 25 ans, voix douce et chaleureuse, ton amical" -o "tmp/chat_with_anyone/voice_design"
  3. Lisez l'identifiant vocal depuis tmp/chat_with_anyone/voice_design/voice_id.txt.
  4. Génération du TTS : python3 skills/tts/scripts/tts.py -t "你好呀!很高兴认识你!" --voice-id "{IDENTIFIANT_VOCAL}" -o "tmp/chat_with_anyone/voice_design/reponse.wav"
  5. Présentez l'audio et continuez l'échange avec le même --voice-id.

Dépannage

ProblèmeSolution
Le téléchargement yt-dlp échoue ou la vidéo est indisponibleEssayez une autre URL de vidéo ; certaines régions/vidéos sont restreintes. Exécutez yt-dlp -U pour mettre à jour
Aucun fichier de sous-titres SRTRetéléchargez avec --sub-lang en,zh-Hans ; si toujours rien, essayez une autre vidéo avec sous-titres automatiques
extract_ref_segment.py ne trouve aucune fenêtre appropriéeUtilisez --min-duration 2 pour des extraits plus courts, ou essayez une autre vidéo
La conception vocale renvoie une erreurVérifiez la clé API Noiz ; assurez-vous que l'image est une photo claire d'une personne
Le rendu TTS sonne malPour le Workflow A, essayez une autre vidéo de référence ; pour le Workflow B, ajustez --voice-description

Individual skills in this repo

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

Skills associés