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ónPor defectoDescripción
<file>Archivo de audio a transcribir (WAV, M4A, MP3, CAF)
--engineqwen3Motor ASR: qwen3, qwen3-coreml, parakeet, nemotron u omnilingual
--model, -m0.6BVariante del modelo: 0.6B, 1.7B, o un ID completo de modelo de HuggingFace (solo qwen3)
--languagePista de idioma (opcional, ignorada por omnilingual)
--window10[omnilingual] Tamaño de ventana CoreML en segundos: 5 o 10
--backendcoreml[omnilingual] Backend: coreml (Neural Engine) o mlx (GPU Metal)
--variant300M[omnilingual mlx] Tamaño: 300M, 1B, 3B o 7B
--bits4[omnilingual mlx] Bits de cuantización: 4 u 8
--streamActiva la transcripción en streaming con VAD
--max-segment10Duración máxima del segmento en segundos (streaming)
--partialEmite 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

# 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ónPor defectoDescripción
<file>Archivo de audio
--text, -tTexto a alinear (si se omite, primero transcribe)
--model, -m0.6BModelo ASR para transcripción: 0.6B, 1.7B, o ID completo
--aligner-modelID del modelo del alineador forzado
--languagePista 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ónPor defectoDescripción
<text>Texto a sintetizar (opcional si se usa --batch-file)
--engineqwen3Motor TTS: qwen3 o cosyvoice
--output, -ooutput.wavRuta del archivo WAV de salida
--languageenglishIdioma. Omítelo para usar el dialecto nativo del hablante cuando se define --speaker.
--streamActiva la síntesis en streaming
--voice-sampleAudio de referencia para clonación de voz (funciona con los motores qwen3 y cosyvoice)
--verboseMuestra información de tiempos detallada

Opciones de Qwen3-TTS

OpciónPor defectoDescripción
--modelbaseVariante del modelo: base, customVoice o ID completo de HF
--speakerVoz del hablante (requiere --model customVoice)
--instructInstrucción de estilo (modelo CustomVoice)
--list-speakersLista los hablantes disponibles y sale
--temperature0.3Temperatura de muestreo
--top-k50Muestreo top-k
--max-tokens500Tokens máximos (500 = ~40s de audio)
--batch-fileArchivo con un texto por línea para síntesis por lotes
--batch-size4Tamaño máximo de lote para generación paralela
--first-chunk-frames3Frames de códec en el primer fragmento en streaming
--chunk-frames25Frames de códec por fragmento en streaming

Opciones de CosyVoice3

OpciónPor defectoDescripción
--speakersMapeo de hablantes para diálogo multi-hablante: s1=alice.wav,s2=bob.wav
--cosy-instructInstrucción de estilo (anula la predeterminada). Controla el estilo de voz para CosyVoice3.
--turn-gap0.2Silencio entre turnos de diálogo en segundos
--crossfade0.0Solapamiento de crossfade entre turnos en segundos
--model-idID de modelo de HuggingFace

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

# 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ónPor defectoDescripción
<text>Texto a sintetizar
--voiceaf_heartPreset de voz (50 disponibles en 10 idiomas)
--languageenCódigo de idioma: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavRuta del archivo WAV de salida
--list-voicesLista todas las voces disponibles y sale
--model, -mID 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ónPor defectoDescripción
--input, -iArchivo WAV de audio de entrada (24 kHz mono) (obligatorio)
--output, -oresponse.wavArchivo WAV de respuesta de salida
--voiceNATM0Preset de voz (p. ej. NATM0, NATF1, VARF0)
--system-promptassistantPreset: assistant, focused, customer-service, teacher
--system-prompt-textTexto personalizado del system prompt (anula el preset)
--max-steps200Pasos máximos de generación a 12.5 Hz (~16 s)
--streamEmite fragmentos de audio durante la generación
--compileActiva el transformador compilado (calentamiento + fusión de kernels)
--list-voicesLista los presets de voz disponibles
--list-promptsLista los presets de system prompt disponibles
--transcriptImprime el texto del monólogo interior del modelo
--jsonSalida en JSON (transcripción, latencia, ruta de audio)
--verboseMuestra información de tiempos detallada

Ajustes de muestreo

OpciónPor defectoDescripción
--audio-temp0.8Temperatura de muestreo de audio
--text-temp0.7Temperatura de muestreo de texto
--audio-top-k250Candidatos top-k de audio
--repetition-penalty1.2Penalización de repetición de audio (1.0 = desactivada)
--text-repetition-penalty1.2Penalización de repetición de texto (1.0 = desactivada)
--repetition-window30Ventana de penalización de repetición en frames
--silence-early-stop15Frames de silencio antes de la parada temprana (0 = desactivado)
--entropy-threshold0Umbral de entropía de texto para parada temprana (0 = desactivado)
--entropy-window10Pasos 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ónDescripción
<file>Archivo de audio a analizar
--model, -mID de modelo de HuggingFace
--onsetUmbral de inicio (comienzo del habla)
--offsetUmbral de fin (final del habla)
--min-speechDuración mínima del habla en segundos
--min-silenceDuración mínima del silencio en segundos
--jsonSalida 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ónDescripción
<file>Archivo de audio a analizar
--engineMotor de VAD: mlx (por defecto) o coreml
--model, -mID de modelo de HuggingFace (autoseleccionado por el motor)
--onsetUmbral de inicio
--offsetUmbral de fin
--min-speechDuración mínima del habla en segundos
--min-silenceDuración mínima del silencio en segundos
--jsonSalida 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ónDescripción
<file>Archivo de audio a analizar
--keywordsUna 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-fileArchivo de palabras clave, una entrada por línea
--model, -mID de modelo de HuggingFace. Por defecto: aufklarer/KWS-Zipformer-3M-CoreML-INT8
--jsonSalida en JSON

diarize

Diarización de hablantes — identifica quién habló cuándo.

speech diarize <file> [options]
OpciónPor defectoDescripción
<file>Archivo de audio a analizar
--enginepyannoteMotor de diarización: pyannote (segmentación + encadenado de hablantes) o sortformer (CoreML de extremo a extremo)
--target-speakerAudio de enrolamiento para extracción del hablante objetivo (solo pyannote)
--embedding-enginemlxMotor de embedding de hablante: mlx o coreml (solo pyannote)
--vad-filterPre-filtra con Silero VAD (solo pyannote)
--rttmSalida en formato RTTM
--jsonSalida en JSON
--score-againstArchivo 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ónDescripción
<file>Archivo de audio con la voz del hablante
--engineMotor de inferencia: mlx (por defecto), coreml (WeSpeaker 256-dim) o camplusplus (CAM++ CoreML 192-dim)
--jsonSalida en JSON

denoise

Elimina el ruido de fondo usando DeepFilterNet3 en el Neural Engine.

speech denoise <file> [options]
OpciónPor defectoDescripción
<file>Archivo de audio de entrada
--output, -oinput_clean.wavRuta del archivo de salida
--model, -mID 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]
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