Referencia de CLI
El binario speech es el punto de entrada principal para todas las tareas de procesamiento de voz. Compila con make build y luego ejecuta desde .build/release/speech.
transcribe
Transcribe archivos de audio a texto.
speech transcribe <file> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<file> | Archivo de audio a transcribir (WAV, M4A, MP3, CAF) | |
--engine | qwen3 | Motor ASR: qwen3, qwen3-coreml, parakeet, nemotron, omnilingual, cohere, voxtral, moss, whisper |
--model, -m | 0.6B | Variante del modelo: 0.6B, 1.7B, o un ID completo de modelo de HuggingFace (solo qwen3) [whisper]: default, turbo, or full CoreML HuggingFace repo ID.[cohere/voxtral]: INT5 (predeterminado), INT8, FP16, un ID de modelo de Hugging Face o un directorio local. [moss coreml]: int8 (predeterminado) o fp16; [moss mlx]: int5 (predeterminado) o int8. También acepta un repositorio compatible de Hugging Face o un directorio local. |
--max-tokens | CoreML: 512MLX: 5120 | [moss] Número máximo de tokens de transcripción generados. |
--kv-cache | fp16 | [moss mlx] Precisión de la caché KV dinámica: fp16 o int8. |
--language | Pista de idioma (opcional, ignorada por omnilingual) | |
--window | 10 | [omnilingual] Tamaño de ventana CoreML en segundos: 5 o 10 |
--backend | coreml | [omnilingual] Backend: coreml (Neural Engine) o mlx (GPU Metal)[moss] CoreML usa un estado fijo de 1.024 tokens; MLX ofrece un contexto dinámico de 131.072 tokens. |
--variant | 300M | [omnilingual mlx] Tamaño: 300M, 1B, 3B o 7B |
--bits | 4 | [omnilingual mlx] Bits de cuantización: 4 u 8 |
--stream | Activa la transcripción en streaming con VAD | |
--max-segment | 10 | Duración máxima del segmento en segundos (streaming) |
--partial | Emite resultados parciales durante el habla (streaming) |
Ejemplos:
# Basic transcription
speech transcribe recording.wav
# Use larger model
speech transcribe recording.wav --model 1.7B
# CoreML encoder (Neural Engine + MLX decoder)
speech transcribe recording.wav --engine qwen3-coreml
# Use Parakeet (CoreML) engine
speech transcribe recording.wav --engine parakeet
# Use Nemotron Streaming (CoreML, English with native punctuation)
speech transcribe recording.wav --engine nemotron # batch
speech transcribe recording.wav --engine nemotron --stream --partial # streaming
# Omnilingual (CoreML, 1,672 languages)
speech transcribe recording.wav --engine omnilingual # 10 s window
speech transcribe recording.wav --engine omnilingual --window 5 # 5 s window
# Omnilingual (MLX, any length up to 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 predeterminado)
speech transcribe recording.wav --engine cohere
speech transcribe recording.wav --engine cohere --model int8 --language de
# Voxtral Mini 3B (MLX, INT5 predeterminado)
speech transcribe recording.wav --engine voxtral
speech transcribe recording.wav --engine voxtral --model int8 --language fr
# MOSS Transcribe Diarize (CoreML para audio corto)
speech transcribe recording.wav --engine moss
speech transcribe recording.wav --engine moss --model fp16
# MOSS Transcribe Diarize (contexto MLX offline de 128K; INT5 predeterminado)
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 with VAD
speech transcribe recording.wav --stream --partial
align
Alineación forzada a nivel de palabra — obtén marcas temporales precisas para cada palabra.
speech align <file> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<file> | Archivo de audio | |
--text, -t | Texto a alinear (si se omite, primero transcribe) | |
--model, -m | 0.6B | Modelo ASR para transcripción: 0.6B, 1.7B, o ID completo |
--aligner-model | ID del modelo del alineador forzado | |
--language | Pista de idioma |
Ejemplos:
# Auto-transcribe then align
speech align recording.wav
# Align with known text
speech align recording.wav --text "Can you guarantee that the replacement part will be shipped tomorrow?"
speak
Síntesis de texto a voz.
speech speak "<text>" [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<text> | Texto a sintetizar (opcional si se usa --batch-file) | |
--engine | qwen3 | Motor TTS: qwen3, cosyvoice, voxcpm2, indextts2, f5, higgs, indic-mio, magpie o magpie-coreml |
--output, -o | output.wav | Ruta del archivo WAV de salida |
--language | english | Idioma. Omítelo para usar el dialecto nativo del hablante cuando se define --speaker. |
--stream | Activa la síntesis en streaming | |
--voice-sample | Audio de referencia para clonación de voz (funciona con qwen3, cosyvoice, voxcpm2, f5, higgs e indextts2) | |
--verbose | Muestra información de tiempos detallada |
Opciones de Qwen3-TTS
| Opción | Por defecto | Descripción |
|---|---|---|
--model | base | Variante del modelo: base, customVoice o ID completo de HF |
--speaker | Voz del hablante (requiere --model customVoice) | |
--instruct | Instrucción de estilo (modelo CustomVoice) | |
--list-speakers | Lista los hablantes disponibles y sale | |
--temperature | 0.3 | Temperatura de muestreo |
--top-k | 50 | Muestreo top-k |
--max-tokens | 500 | Tokens máximos (500 = ~40s de audio) |
--batch-file | Archivo con un texto por línea para síntesis por lotes | |
--batch-size | 4 | Tamaño máximo de lote para generación paralela |
--first-chunk-frames | 3 | Frames de códec en el primer fragmento en streaming |
--chunk-frames | 25 | Frames de códec por fragmento en streaming |
Opciones de CosyVoice3
| Opción | Por defecto | Descripción |
|---|---|---|
--speakers | Mapeo de hablantes para diálogo multi-hablante: s1=alice.wav,s2=bob.wav | |
--cosy-instruct | Instrucción de estilo (anula la predeterminada). Controla el estilo de voz para CosyVoice3. | |
--turn-gap | 0.2 | Silencio entre turnos de diálogo en segundos |
--crossfade | 0.0 | Solapamiento de crossfade entre turnos en segundos |
--model-id | ID de modelo de HuggingFace |
Opciones de IndexTTS2
IndexTTS2 es un motor de clonación zero-shot respaldado por un bundle MLX expandido. Requiere --voice-sample y actualmente solo ejecuta síntesis por lotes.
| Opción | Por defecto | Descripción |
|---|---|---|
--indextts2-model-id | aufklarer/IndexTTS2-MLX-fp16 | ID del modelo en HuggingFace. Por defecto aufklarer/IndexTTS2-MLX-fp16. |
--indextts2-bundle-dir | Carga un bundle expandido local en lugar de descargar desde Hugging Face. | |
--indextts2-emotion-audio | Audio opcional de referencia de emoción/estilo. Por defecto usa la referencia del hablante. | |
--indextts2-emotion | Preset opcional o vector de emoción de 8 valores. Incluye eager, happy, excited y calm. | |
--indextts2-emotion-weight | 1.0 | Escala --indextts2-emotion; mantenlo moderado si importa la identidad del hablante. |
--indextts2-speaking-rate | 1.0 | Multiplicador de velocidad de 0.5 a 1.5; valores mayores que 1.0 son más rápidos. |
--indextts2-max-pause | Límite opcional, en segundos, para pausas internas largas de baja energía. | |
--indextts2-s2mel-steps | 15 | Pasos de flujo S2Mel (15 por defecto, validado de oído; 25 replica exactamente el upstream) |
F5-TTS Options
| Opción | Por defecto | Descripción |
|---|---|---|
--f5-reference-text | Transcripción de referencia: el texto de --voice-sample (obligatoria) | |
--f5-steps | 16 | Pasos de flow matching (16 por defecto; 32 para máxima fidelidad) |
--f5-cfg-strength | 2.0 | Intensidad de la guía sin clasificador |
--f5-sway | -1.0 | Coeficiente de muestreo sway |
--f5-speed | 1.0 | Multiplicador de velocidad de habla |
--f5-seed | 0 | Semilla para salida determinista |
--f5-target-rms | 0.1 | Objetivo de normalización RMS de la referencia |
--f5-model-id | ID de modelo de Hugging Face | |
--f5-bundle-dir | Cargar un bundle desde este directorio local |
Higgs TTS 3 Options
| Opción | Por defecto | Descripción |
|---|---|---|
--higgs-ref-text | Transcripción de referencia: el texto de --voice-sample (mejora la clonación) | |
--higgs-temperature | 0.8 | Temperatura de muestreo (0.8 por defecto) |
--higgs-top-p | Umbral de muestreo nucleus (desactivado por defecto) | |
--higgs-top-k | Corte top-k (desactivado por defecto) | |
--higgs-max-new-tokens | 2048 | Máximo de fotogramas de audio generados (25 por segundo) |
--higgs-seed | 0 | Semilla para salida determinista |
--higgs-model-id | ID de modelo de Hugging Face | |
--higgs-bundle-dir | Cargar un bundle desde este directorio local |
Ejemplos:
# Basic TTS
speech speak "Hello, world!" --output hello.wav
# Voice cloning (Qwen3-TTS)
speech speak "Hello in your voice" --voice-sample reference.wav -o cloned.wav
# Voice cloning (CosyVoice)
speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav
# Voice cloning (IndexTTS2)
speech speak "Hello in your voice" --engine indextts2 \
--voice-sample reference.wav --indextts2-speaking-rate 1.35 \
--indextts2-max-pause 0.05 -o indextts2.wav
# CosyVoice multilingual
speech speak "Hallo Welt" --engine cosyvoice --language german -o hallo.wav
# Multi-speaker dialogue
speech speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# Inline emotion/style tags
speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# Combined: dialogue + emotions + voice cloning
speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# Custom style instruction
speech speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
# Streaming synthesis
speech speak "Long text here..." --stream
# Batch synthesis from file
speech speak --batch-file texts.txt --batch-size 4
kokoro
Texto a voz ligero usando Kokoro-82M en el Neural Engine (CoreML). No autoregresivo — una sola pasada hacia adelante, latencia de ~45 ms.
speech kokoro "<text>" [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<text> | Texto a sintetizar | |
--voice | af_heart | Preset de voz (50 disponibles en 10 idiomas) |
--language | en | Código de idioma: en, es, fr, hi, it, ja, pt, zh, ko, de |
--output, -o | kokoro_output.wav | Ruta del archivo WAV de salida |
--list-voices | Lista todas las voces disponibles y sale | |
--model, -m | ID de modelo de HuggingFace |
Ejemplos:
# Basic Kokoro TTS
speech kokoro "Hello, world!" --voice af_heart -o hello.wav
# French voice
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr -o bonjour.wav
# List all 50 voices
speech kokoro --list-voices
respond
Diálogo de voz a voz full-duplex usando PersonaPlex 7B.
speech respond [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--input, -i | Archivo WAV de audio de entrada (24 kHz mono) (obligatorio) | |
--output, -o | response.wav | Archivo WAV de respuesta de salida |
--voice | NATM0 | Preset de voz (p. ej. NATM0, NATF1, VARF0) |
--system-prompt | assistant | Preset: assistant, focused, customer-service, teacher |
--system-prompt-text | Texto personalizado del system prompt (anula el preset) | |
--max-steps | 200 | Pasos máximos de generación a 12.5 Hz (~16 s) |
--stream | Emite fragmentos de audio durante la generación | |
--compile | Activa el transformador compilado (calentamiento + fusión de kernels) | |
--list-voices | Lista los presets de voz disponibles | |
--list-prompts | Lista los presets de system prompt disponibles | |
--transcript | Imprime el texto del monólogo interior del modelo | |
--json | Salida en JSON (transcripción, latencia, ruta de audio) | |
--verbose | Muestra información de tiempos detallada |
Ajustes de muestreo
| Opción | Por defecto | Descripción |
|---|---|---|
--audio-temp | 0.8 | Temperatura de muestreo de audio |
--text-temp | 0.7 | Temperatura de muestreo de texto |
--audio-top-k | 250 | Candidatos top-k de audio |
--repetition-penalty | 1.2 | Penalización de repetición de audio (1.0 = desactivada) |
--text-repetition-penalty | 1.2 | Penalización de repetición de texto (1.0 = desactivada) |
--repetition-window | 30 | Ventana de penalización de repetición en frames |
--silence-early-stop | 15 | Frames de silencio antes de la parada temprana (0 = desactivado) |
--entropy-threshold | 0 | Umbral de entropía de texto para parada temprana (0 = desactivado) |
--entropy-window | 10 | Pasos consecutivos de baja entropía antes de la parada temprana |
Ejemplos:
# Basic speech-to-speech
speech respond --input question.wav
# Use a female voice with compiled transformer
speech respond -i question.wav --voice NATF1 --compile
# Stream response and show transcript
speech respond -i question.wav --stream --transcript --verbose
vad
Detección de actividad vocal offline usando segmentación Pyannote.
speech vad <file> [options]
| Opción | Descripción |
|---|---|
<file> | Archivo de audio a analizar |
--model, -m | ID de modelo de HuggingFace |
--onset | Umbral de inicio (comienzo del habla) |
--offset | Umbral de fin (final del habla) |
--min-speech | Duración mínima del habla en segundos |
--min-silence | Duración mínima del silencio en segundos |
--json | Salida en JSON |
vad-stream
Detección de actividad vocal en streaming usando Silero VAD v5. Procesa audio en fragmentos de 32 ms.
speech vad-stream <file> [options]
| Opción | Descripción |
|---|---|
<file> | Archivo de audio a analizar |
--engine | Motor de VAD: mlx (por defecto) o coreml |
--model, -m | ID de modelo de HuggingFace (autoseleccionado por el motor) |
--onset | Umbral de inicio |
--offset | Umbral de fin |
--min-speech | Duración mínima del habla en segundos |
--min-silence | Duración mínima del silencio en segundos |
--json | Salida en JSON |
wake
Detección de palabras clave en el dispositivo usando el KWS Zipformer (3,49M parámetros, CoreML INT8, 26× tiempo real, solo inglés).
speech wake <file> [options]
| Opción | Descripción |
|---|---|
<file> | Archivo de audio a analizar |
--keywords | Una o más palabras clave. Formatos: "hey soniqo", "hey soniqo:0.15:0.5" o "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" (estilo sherpa-onnx con piezas BPE explícitas) |
--keywords-file | Archivo de palabras clave, una entrada por línea |
--model, -m | ID de modelo de HuggingFace. Por defecto: aufklarer/KWS-Zipformer-3M-CoreML-INT8 |
--json | Salida en JSON |
diarize
Diarización de hablantes — identifica quién habló cuándo.
speech diarize <file> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<file> | Archivo de audio a analizar | |
--engine | pyannote | Motor de diarización: pyannote, community1 (CoreML + PLDA/VBx nativo) o sortformer |
--community1-compute-units | ane | Unidades de cómputo CoreML de Community-1: ane, cpu, gpu o all |
--num-speakers | Número exacto conocido de hablantes para Community-1 | |
--min-speakers | 1 | Número mínimo de hablantes para Community-1 |
--max-speakers | Número máximo de hablantes para Community-1 | |
--target-speaker | Audio de enrolamiento para extracción del hablante objetivo (solo pyannote) | |
--embedding-engine | mlx | Motor de embedding de hablante: mlx o coreml (solo pyannote) |
--vad-filter | Pre-filtra con Silero VAD (solo pyannote) | |
--rttm | Salida en formato RTTM | |
--json | Salida en JSON | |
--score-against | Archivo RTTM de referencia para calcular DER |
Ejemplos:
# Basic diarization (pyannote, default)
speech diarize meeting.wav
# End-to-end Sortformer (CoreML, Neural Engine)
speech diarize meeting.wav --engine sortformer
# RTTM output for evaluation
speech diarize meeting.wav --rttm
# Target speaker extraction (pyannote only)
speech diarize meeting.wav --target-speaker enrollment.wav
# Score against reference
speech diarize meeting.wav --score-against reference.rttm
embed-speaker
Extrae un vector de embedding de hablante a partir de audio.
speech embed-speaker <file> [options]
| Opción | Descripción |
|---|---|
<file> | Archivo de audio con la voz del hablante |
--engine | mlx (por defecto) o coreml para WeSpeaker 256-dim; redimnet2 para identidad persistente CoreML 192-dim; camplusplus para CAM++ CoreML 192-dim |
--json | Salida en JSON |
denoise
Elimina el ruido de fondo usando DeepFilterNet3 en el Neural Engine.
speech denoise <file> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<file> | Archivo de audio de entrada | |
--output, -o | input_clean.wav | Ruta del archivo de salida |
--model, -m | ID de modelo de HuggingFace |
Ejemplo:
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]
| Option | Default | Description |
|---|---|---|
<prompt> | Text prompt describing the music to generate (e.g. "happy rock") | |
--output, -o | magnet.wav | Output WAV path (32 kHz mono) |
--variant | small-int4 | Model variant: small-int4, small-int8, medium-int4, or medium-int8. Resolves to aufklarer/MAGNeT-{Small,Medium}-30secs-MLX-{4,8}bit. |
--temperature | 3.0 | Sampling temperature, annealed linearly per stage. |
--top-p | 0.9 | Nucleus sampling threshold. |
--cfg-max | 10.0 | Max classifier-free guidance coefficient. |
--cfg-min | 1.0 | Min CFG coefficient (annealed alongside the mask schedule). |
--steps | 20,10,10,10 | Comma-separated decoding iterations per codebook (4 values). |
--seed | Random 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
Transcribe un directorio de archivos de audio; el modelo se carga una sola vez.
speech transcribe-batch <input-dir> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<input-dir> | Directorio de archivos de audio a transcribir (WAV, FLAC, etc.) | |
--output-dir | Directorio de salida para las transcripciones | |
--engine | qwen3 | Motor ASR (mismos valores que transcribe) |
--jsonl | Salida como JSON lines, una por archivo |
restore
Restaura la voz (reducción de ruido + de reverberación) con Sidon — CoreML, salida a 48 kHz.
speech restore <audio-file> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--output, -o | input_restored.wav | Ruta del WAV de salida (48 kHz) |
--variant | fp16 | Variante de precisión / bundle |
separate
Separa una pista musical en stems (vocals, drums, bass, other).
speech separate <input> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--stems | vocals,drums,bass,other | Pistas a extraer: vocals, drums, bass, other |
--engine | umx | Motor: umx (por defecto) o htdemucs (mayor calidad) |
--output-dir | Directorio de salida para las transcripciones |
upsample
Superresolución de audio con FlashSR — AudioSR destilado de un paso, salida a 48 kHz.
speech upsample <audio-file> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--output, -o | hr.wav | Ruta del WAV de salida (48 kHz) |
--variant | int4 | Variante de precisión / bundle |
--seed | Semilla para salida determinista |
qwen3-tts-coreml
Texto a voz con Qwen3-TTS en CoreML (Neural Engine).
speech qwen3-tts-coreml "<text>" [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--output, -o | output.wav | Ruta del WAV de salida |
--language | english | Idioma de salida |
--model | ID de modelo de Hugging Face |
vibevoice
Texto a voz con Microsoft VibeVoice (MLX).
speech vibevoice "<text>" --voice-cache <cache> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--voice-cache, -v | Caché de voz creada con vibevoice-encode-voice (obligatoria) | |
--steps | Pasos de inferencia DPM-Solver (más pasos, mejor calidad) | |
--cfg | 1.3 | Intensidad de la guía sin clasificador |
--long-form | Síntesis de formato largo por fragmentos |
vibevoice-encode-voice
Crea una caché de voz de VibeVoice a partir de una grabación de referencia y su transcripción.
speech vibevoice-encode-voice <input> "<transcript>" [options]
| Opción | Por defecto | Descripción |
|---|---|---|
<input> | Archivo de audio de referencia | |
<transcript> | Transcripción del audio de referencia (solo inglés) | |
--output, -o | Caché de voz de salida (.safetensors) |
translate
Traduce texto al idioma destino con MADLAD-400 (MLX).
speech translate "<text>" --to <lang> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--to, -t | Código del idioma destino (ISO 639-1, p. ej. es, zh, ja) | |
--stream | Transmitir tokens mientras decodifica | |
--model | ID de modelo de Hugging Face |
avatar-motion
Genera fotogramas de coeficientes de movimiento de avatar NVIDIA Audio2Face-3D a partir de audio de voz.
speech avatar-motion <input> [options]
| Opción | Por defecto | Descripción |
|---|---|---|
--output, -o | avatar-motion.jsonl | Ruta del JSONL de salida |
--model | …James-MLX | Bundle de identidad del avatar (James por defecto; Claire y Mark disponibles) |
--verbose | Mostrar tiempos y número de fotogramas |