Référence CLI

Le binaire speech est le point d'entrée principal pour toutes les tâches de traitement de la parole. Compilez avec make build, puis exécutez depuis .build/release/speech.

transcribe

Transcrit des fichiers audio en texte.

speech transcribe <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio à transcrire (WAV, M4A, MP3, CAF)
--engineqwen3Moteur ASR : qwen3, qwen3-coreml, parakeet, nemotron, omnilingual, cohere, voxtral, moss, whisper
--model, -m0.6BVariante de modèle : 0.6B, 1.7B ou ID HuggingFace complet (qwen3 uniquement) [whisper]: default, turbo, or full CoreML HuggingFace repo ID.
[cohere/voxtral]: INT5 (par défaut), INT8, FP16, un identifiant de modèle Hugging Face ou un dossier local. [moss coreml] : int8 (par défaut) ou fp16 ; [moss mlx] : int5 (par défaut) ou int8. Un dépôt Hugging Face compatible ou un répertoire local est aussi accepté.
--max-tokensCoreML: 512
MLX: 5120
[moss] Nombre maximal de tokens de transcription générés.
--kv-cachefp16[moss mlx] Précision du cache KV dynamique : fp16 ou int8.
--languageIndication de langue (optionnel, ignoré par omnilingual)
--window10[omnilingual] Taille de fenêtre CoreML en secondes : 5 ou 10
--backendcoreml[omnilingual] Backend : coreml (Neural Engine) ou mlx (GPU Metal)
[moss] CoreML utilise un état fixe de 1 024 tokens ; MLX fournit un contexte dynamique de 131 072 tokens.
--variant300M[omnilingual mlx] Taille : 300M, 1B, 3B ou 7B
--bits4[omnilingual mlx] Bits de quantification : 4 ou 8
--streamActive la transcription en streaming avec VAD
--max-segment10Durée maximale d'un segment en secondes (streaming)
--partialÉmet des résultats partiels pendant la parole (streaming)

Exemples :

# Transcription de base
speech transcribe recording.wav

# Utiliser un modèle plus grand
speech transcribe recording.wav --model 1.7B

# Encodeur CoreML (Neural Engine + décodeur MLX)
speech transcribe recording.wav --engine qwen3-coreml

# Utiliser le moteur Parakeet (CoreML)
speech transcribe recording.wav --engine parakeet

# Omnilingual (CoreML, 1 672 langues)
speech transcribe recording.wav --engine omnilingual                              # fenêtre de 10 s
speech transcribe recording.wav --engine omnilingual --window 5                     # fenêtre de 5 s

# Omnilingual (MLX, toute longueur jusqu'à 40 s)
speech transcribe recording.wav --engine omnilingual --backend mlx                              # 300M @ 4-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 1B                  # 1B @ 4-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8         # 3B @ 8-bit
speech transcribe recording.wav --engine omnilingual --backend mlx --variant 7B                  # 7B @ 4-bit

# Cohere Transcribe 2B (MLX, INT5 par défaut)
speech transcribe recording.wav --engine cohere
speech transcribe recording.wav --engine cohere --model int8 --language de

# Voxtral Mini 3B (MLX, INT5 par défaut)
speech transcribe recording.wav --engine voxtral
speech transcribe recording.wav --engine voxtral --model int8 --language fr

# MOSS Transcribe Diarize (CoreML, format court)
speech transcribe recording.wav --engine moss
speech transcribe recording.wav --engine moss --model fp16

# MOSS Transcribe Diarize (contexte MLX hors ligne 128K ; INT5 par défaut)
speech transcribe meeting.wav --engine moss --backend mlx
speech transcribe meeting.wav --engine moss --backend mlx --model int8 --kv-cache int8

# Whisper Large-v3 Turbo (CoreML)
speech transcribe recording.wav --engine whisper
speech transcribe recording.wav --engine whisper --model turbo --language de

# Streaming avec VAD
speech transcribe recording.wav --stream --partial

align

Alignement forcé au niveau du mot — obtenez des horodatages précis pour chaque mot.

speech align <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio
--text, -tTexte à aligner (si omis, transcrit d'abord)
--model, -m0.6BModèle ASR pour la transcription : 0.6B, 1.7B ou ID complet
--aligner-modelID du modèle d'aligneur forcé
--languageIndication de langue

Exemples :

# Transcription automatique puis alignement
speech align recording.wav

# Alignement avec texte connu
speech align recording.wav --text "Can you guarantee that the replacement part will be shipped tomorrow?"

speak

Synthèse vocale (texte vers parole).

speech speak "<texte>" [options]
OptionPar défautDescription
<texte>Texte à synthétiser (optionnel avec --batch-file)
--engineqwen3Moteur TTS : qwen3, cosyvoice, voxcpm2, indextts2, f5, higgs, indic-mio, magpie ou magpie-coreml
--output, -ooutput.wavChemin du fichier WAV de sortie
--languageenglishLangue. Omettez pour utiliser le dialecte natif du locuteur quand --speaker est défini.
--streamActive la synthèse en streaming
--voice-sampleAudio de référence pour le clonage vocal (fonctionne avec qwen3, cosyvoice, voxcpm2, f5, higgs et indextts2)
--verboseAffiche les informations détaillées de chronométrage

Options Qwen3-TTS

OptionPar défautDescription
--modelbaseVariante du modèle : base, customVoice ou ID HF complet
--speakerVoix du locuteur (nécessite --model customVoice)
--instructInstruction de style (modèle CustomVoice)
--list-speakersListe les locuteurs disponibles et quitte
--temperature0.3Température d'échantillonnage
--top-k50Échantillonnage top-k
--max-tokens500Nombre maximal de tokens (500 = ~40 s d'audio)
--batch-fileFichier avec un texte par ligne pour la synthèse par lot
--batch-size4Taille de lot maximale pour la génération parallèle
--first-chunk-frames3Trames de codec dans le premier bloc streamé
--chunk-frames25Trames de codec par bloc streamé

Options CosyVoice3

OptionPar défautDescription
--speakersMappage de locuteurs pour le dialogue multi-locuteurs : s1=alice.wav,s2=bob.wav
--cosy-instructInstruction de style (surcharge la valeur par défaut). Contrôle le style vocal pour CosyVoice3.
--turn-gap0.2Silence entre les tours de dialogue en secondes
--crossfade0.0Fondu enchaîné entre les tours en secondes
--model-idID de modèle HuggingFace

Options IndexTTS2

IndexTTS2 est un moteur de clonage vocal zero-shot basé sur un bundle MLX étendu. Il nécessite --voice-sample et fonctionne actuellement en synthèse batch uniquement.

OptionPar défautDescription
--indextts2-model-idaufklarer/IndexTTS2-MLX-fp16ID de modèle HuggingFace. Par défaut aufklarer/IndexTTS2-MLX-fp16.
--indextts2-bundle-dirCharge un bundle étendu local au lieu de télécharger depuis Hugging Face.
--indextts2-emotion-audioAudio optionnel de référence d’émotion/style. Par défaut, la référence du locuteur est utilisée.
--indextts2-emotionPreset optionnel ou vecteur d’émotion à 8 valeurs. Les presets incluent eager, happy, excited et calm.
--indextts2-emotion-weight1.0Met à l’échelle --indextts2-emotion ; gardez une valeur modérée si l’identité du locuteur compte.
--indextts2-speaking-rate1.0Multiplicateur de débit de 0.5 à 1.5 ; les valeurs au-dessus de 1.0 sont plus rapides.
--indextts2-max-pausePlafond optionnel, en secondes, pour les longues pauses internes de faible énergie.
--indextts2-s2mel-steps15Pas de flux S2Mel (15 par défaut, validé à l'oreille ; 25 reproduit exactement l'upstream)

F5-TTS Options

OptionPar défautDescription
--f5-reference-textTranscription de référence : le texte de --voice-sample (obligatoire)
--f5-steps16Pas de flow matching (16 par défaut ; 32 pour une fidélité maximale)
--f5-cfg-strength2.0Force du guidage sans classifieur
--f5-sway-1.0Coefficient d'échantillonnage sway
--f5-speed1.0Multiplicateur de débit de parole
--f5-seed0Graine pour une sortie déterministe
--f5-target-rms0.1Cible de normalisation RMS de la référence
--f5-model-idID de modèle Hugging Face
--f5-bundle-dirCharger un bundle depuis ce répertoire local

Higgs TTS 3 Options

OptionPar défautDescription
--higgs-ref-textTranscription de référence : le texte de --voice-sample (améliore le clonage)
--higgs-temperature0.8Température d'échantillonnage (0.8 par défaut)
--higgs-top-pSeuil d'échantillonnage nucleus (désactivé par défaut)
--higgs-top-kCoupure top-k (désactivée par défaut)
--higgs-max-new-tokens2048Trames audio générées au maximum (25 par seconde)
--higgs-seed0Graine pour une sortie déterministe
--higgs-model-idID de modèle Hugging Face
--higgs-bundle-dirCharger un bundle depuis ce répertoire local

Exemples :

# TTS de base
speech speak "Hello, world!" --output hello.wav

# Clonage vocal (Qwen3-TTS)
speech speak "Hello in your voice" --voice-sample reference.wav -o cloned.wav

# Clonage vocal (CosyVoice)
speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav

# CosyVoice multilingue
speech speak "Hallo Welt" --engine cosyvoice --language german -o hallo.wav

# Dialogue multi-locuteurs
speech speak "[S1] Hello there! [S2] Hey, how are you?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav

# Balises inline d'émotion/style
speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Combiné : dialogue + émotions + clonage vocal
speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav

# Instruction de style personnalisée
speech speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

# Synthèse en streaming
speech speak "Long text here..." --stream

# Synthèse par lot depuis un fichier
speech speak --batch-file texts.txt --batch-size 4

kokoro

Synthèse vocale légère utilisant Kokoro-82M sur Neural Engine (CoreML). Non-autoregressif — passe avant unique, latence ~45 ms.

speech kokoro "<texte>" [options]
OptionPar défautDescription
<texte>Texte à synthétiser
--voiceaf_heartPréréglage de voix (50 disponibles sur 10 langues)
--languageenCode de langue : en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavChemin du fichier WAV de sortie
--list-voicesListe toutes les voix disponibles et quitte
--model, -mID de modèle HuggingFace

Exemples :

# Kokoro TTS de base
speech kokoro "Hello, world!" --voice af_heart -o hello.wav

# Voix française
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr -o bonjour.wav

# Liste les 50 voix
speech kokoro --list-voices

respond

Dialogue parole-à-parole full-duplex utilisant PersonaPlex 7B.

speech respond [options]
OptionPar défautDescription
--input, -iFichier WAV audio d'entrée (mono 24 kHz) (requis)
--output, -oresponse.wavFichier WAV de réponse en sortie
--voiceNATM0Préréglage de voix (par ex. NATM0, NATF1, VARF0)
--system-promptassistantPréréglage : assistant, focused, customer-service, teacher
--system-prompt-textTexte de prompt système personnalisé (surcharge le préréglage)
--max-steps200Étapes max de génération à 12,5 Hz (~16 s)
--streamÉmet des blocs audio pendant la génération
--compileActive le transformeur compilé (préchauffage + fusion de noyaux)
--list-voicesListe les préréglages de voix disponibles
--list-promptsListe les préréglages de prompt système disponibles
--transcriptAffiche le monologue intérieur du modèle
--jsonSortie au format JSON (transcription, latence, chemin audio)
--verboseAffiche les informations détaillées de chronométrage

Surcharges d'échantillonnage

OptionPar défautDescription
--audio-temp0.8Température d'échantillonnage audio
--text-temp0.7Température d'échantillonnage texte
--audio-top-k250Candidats top-k audio
--repetition-penalty1.2Pénalité de répétition audio (1.0 = désactivé)
--text-repetition-penalty1.2Pénalité de répétition texte (1.0 = désactivé)
--repetition-window30Fenêtre de pénalité de répétition en trames
--silence-early-stop15Trames de silence avant arrêt anticipé (0 = désactivé)
--entropy-threshold0Seuil d'entropie texte pour arrêt anticipé (0 = désactivé)
--entropy-window10Étapes consécutives à faible entropie avant arrêt anticipé

Exemples :

# Parole-à-parole de base
speech respond --input question.wav

# Utiliser une voix féminine avec transformeur compilé
speech respond -i question.wav --voice NATF1 --compile

# Streamer la réponse et afficher la transcription
speech respond -i question.wav --stream --transcript --verbose

vad

Détection d'activité vocale hors ligne utilisant la segmentation Pyannote.

speech vad <fichier> [options]
OptionDescription
<fichier>Fichier audio à analyser
--model, -mID de modèle HuggingFace
--onsetSeuil de début (début de parole)
--offsetSeuil de fin (fin de parole)
--min-speechDurée minimale de parole en secondes
--min-silenceDurée minimale de silence en secondes
--jsonSortie au format JSON

vad-stream

Détection d'activité vocale en streaming utilisant Silero VAD v5. Traite l'audio par blocs de 32 ms.

speech vad-stream <fichier> [options]
OptionDescription
<fichier>Fichier audio à analyser
--engineMoteur VAD : mlx (par défaut) ou coreml
--model, -mID de modèle HuggingFace (sélection auto selon le moteur)
--onsetSeuil de début
--offsetSeuil de fin
--min-speechDurée minimale de parole en secondes
--min-silenceDurée minimale de silence en secondes
--jsonSortie au format JSON

wake

Détection de mots-clés sur appareil avec le KWS Zipformer (3,49 M paramètres, CoreML INT8, 26× temps réel, anglais uniquement).

speech wake <fichier> [options]
OptionDescription
<fichier>Fichier audio à analyser
--keywordsUn ou plusieurs mots-clés. Formats : "hey soniqo", "hey soniqo:0.15:0.5" ou "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" (style sherpa-onnx avec pièces BPE explicites)
--keywords-fileFichier de mots-clés, une entrée par ligne
--model, -mID de modèle HuggingFace. Par défaut : aufklarer/KWS-Zipformer-3M-CoreML-INT8
--jsonSortie au format JSON

diarize

Diarisation de locuteurs — identifier qui a parlé quand.

speech diarize <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio à analyser
--enginepyannoteMoteur de diarisation : pyannote, community1 (CoreML + PLDA/VBx natif) ou sortformer
--community1-compute-unitsaneUnités de calcul CoreML de Community-1 : ane, cpu, gpu ou all
--num-speakersNombre exact connu de locuteurs pour Community-1
--min-speakers1Nombre minimal de locuteurs pour Community-1
--max-speakersNombre maximal de locuteurs pour Community-1
--target-speakerAudio d'enrôlement pour l'extraction du locuteur cible (pyannote uniquement)
--embedding-enginemlxMoteur d'empreinte de locuteur : mlx ou coreml (pyannote uniquement)
--vad-filterPré-filtrage avec Silero VAD (pyannote uniquement)
--rttmSortie au format RTTM
--jsonSortie au format JSON
--score-againstFichier RTTM de référence pour calculer le DER

Exemples :

# Diarisation de base (pyannote, par défaut)
speech diarize meeting.wav

# Sortformer bout en bout (CoreML, Neural Engine)
speech diarize meeting.wav --engine sortformer

# Sortie RTTM pour l'évaluation
speech diarize meeting.wav --rttm

# Extraction de locuteur cible (pyannote uniquement)
speech diarize meeting.wav --target-speaker enrollment.wav

# Score par rapport à une référence
speech diarize meeting.wav --score-against reference.rttm

embed-speaker

Extrait un vecteur d'empreinte de locuteur depuis l'audio.

speech embed-speaker <fichier> [options]
OptionDescription
<fichier>Fichier audio contenant la voix du locuteur
--enginemlx (par défaut) ou coreml pour WeSpeaker 256 dim ; redimnet2 pour l'identité persistante CoreML 192 dim ; camplusplus pour CAM++ CoreML 192 dim
--jsonSortie au format JSON

denoise

Supprime le bruit de fond en utilisant DeepFilterNet3 sur Neural Engine.

speech denoise <fichier> [options]
OptionPar défautDescription
<fichier>Fichier audio d'entrée
--output, -oinput_clean.wavChemin du fichier de sortie
--model, -mID de modèle HuggingFace

Exemple :

speech denoise noisy-recording.wav -o clean.wav

compose

Generate 30 s of music from a text prompt using MAGNeT on MLX.

speech compose <prompt> [options]
OptionDefaultDescription
<prompt>Text prompt describing the music to generate (e.g. "happy rock")
--output, -omagnet.wavOutput WAV path (32 kHz mono)
--variantsmall-int4Model variant: small-int4, small-int8, medium-int4, or medium-int8. Resolves to aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit.
--temperature3.0Sampling temperature, annealed linearly per stage.
--top-p0.9Nucleus sampling threshold.
--cfg-max10.0Max classifier-free guidance coefficient.
--cfg-min1.0Min CFG coefficient (annealed alongside the mask schedule).
--steps20,10,10,10Comma-separated decoding iterations per codebook (4 values).
--seedRandom seed for reproducible output.

Examples:

# Default: small-int4, ~10 s wall on M-series for a 30 s clip
speech compose "happy rock" -o happy_rock.wav

# Larger model — better prompt following, slower
speech compose "lo-fi hip hop with mellow piano" --variant medium-int4 -o lofi.wav

# Reproducible
speech compose "energetic EDM with synth lead" --seed 42 -o edm.wav

transcribe-batch

Transcrit un répertoire de fichiers audio ; le modèle n'est chargé qu'une fois.

speech transcribe-batch <input-dir> [options]
OptionPar défautDescription
<input-dir>Répertoire des fichiers audio à transcrire (WAV, FLAC, etc.)
--output-dirRépertoire de sortie des transcriptions
--engineqwen3Moteur ASR (mêmes valeurs que transcribe)
--jsonlSortie en JSON lines, une par fichier

restore

Restaure la voix (débruitage + déréverbération) avec Sidon — CoreML, sortie 48 kHz.

speech restore <audio-file> [options]
OptionPar défautDescription
--output, -oinput_restored.wavChemin du WAV de sortie (48 kHz)
--variantfp16Variante de précision / bundle

separate

Sépare un morceau en pistes (vocals, drums, bass, other).

speech separate <input> [options]
OptionPar défautDescription
--stemsvocals,drums,bass,otherPistes à extraire : vocals, drums, bass, other
--engineumxMoteur : umx (défaut) ou htdemucs (meilleure qualité)
--output-dirRépertoire de sortie des transcriptions

upsample

Super-résolution audio avec FlashSR — AudioSR distillé en une étape, sortie 48 kHz.

speech upsample <audio-file> [options]
OptionPar défautDescription
--output, -ohr.wavChemin du WAV de sortie (48 kHz)
--variantint4Variante de précision / bundle
--seedGraine pour une sortie déterministe

qwen3-tts-coreml

Synthèse vocale avec Qwen3-TTS sur CoreML (Neural Engine).

speech qwen3-tts-coreml "<text>" [options]
OptionPar défautDescription
--output, -ooutput.wavChemin du WAV de sortie
--languageenglishLangue de sortie
--modelID de modèle Hugging Face

vibevoice

Synthèse vocale avec Microsoft VibeVoice (MLX).

speech vibevoice "<text>" --voice-cache <cache> [options]
OptionPar défautDescription
--voice-cache, -vCache vocal créé par vibevoice-encode-voice (obligatoire)
--stepsPas d'inférence DPM-Solver (plus de pas, meilleure qualité)
--cfg1.3Force du guidage sans classifieur
--long-formSynthèse longue par segments pour les textes longs

vibevoice-encode-voice

Crée un cache vocal VibeVoice à partir d'un enregistrement de référence et de sa transcription.

speech vibevoice-encode-voice <input> "<transcript>" [options]
OptionPar défautDescription
<input>Fichier audio de référence
<transcript>Transcription de l'audio de référence (anglais uniquement)
--output, -oCache vocal de sortie (.safetensors)

translate

Traduit du texte vers la langue cible avec MADLAD-400 (MLX).

speech translate "<text>" --to <lang> [options]
OptionPar défautDescription
--to, -tCode de langue cible (ISO 639-1, p. ex. es, zh, ja)
--streamDiffuser les tokens pendant le décodage
--modelID de modèle Hugging Face

avatar-motion

Génère des trames de coefficients de mouvement d'avatar NVIDIA Audio2Face-3D à partir d'audio vocal.

speech avatar-motion <input> [options]
OptionPar défautDescription
--output, -oavatar-motion.jsonlChemin du JSONL de sortie
--model…James-MLXBundle d'identité d'avatar (James par défaut ; Claire et Mark disponibles)
--verboseAfficher les temps et le nombre de trames