Referência da CLI

O binário speech é o ponto de entrada principal para todas as tarefas de processamento de fala. Compile com make build, depois execute a partir de .build/release/speech.

transcribe

Transcreve arquivos de áudio para texto.

speech transcribe <file> [options]
OpçãoPadrãoDescrição
<file>Arquivo de áudio para transcrever (WAV, M4A, MP3, CAF)
--engineqwen3Engine de ASR: qwen3, qwen3-coreml, parakeet, nemotron, omnilingual, cohere, voxtral, moss, whisper
--model, -m0.6BVariante do modelo: 0.6B, 1.7B ou ID completo do modelo no HuggingFace (apenas qwen3) [whisper]: default, turbo, or full CoreML HuggingFace repo ID.
[cohere/voxtral]: INT5 (padrão), INT8, FP16, um ID de modelo do Hugging Face ou um diretório local. [moss coreml]: int8 (padrão) ou fp16; [moss mlx]: int5 (padrão) ou int8. Também aceita um repositório Hugging Face compatível ou diretório local.
--max-tokensCoreML: 512
MLX: 5120
[moss] Número máximo de tokens de transcrição gerados.
--kv-cachefp16[moss mlx] Precisão do cache KV dinâmico: fp16 ou int8.
--languageDica de idioma (opcional, ignorada pelo omnilingual)
--window10[omnilingual] Tamanho da janela CoreML em segundos: 5 ou 10
--backendcoreml[omnilingual] Backend: coreml (Neural Engine) ou mlx (GPU Metal)
[moss] CoreML usa um estado fixo de 1.024 tokens; MLX oferece contexto dinâmico de 131.072 tokens.
--variant300M[omnilingual mlx] Tamanho: 300M, 1B, 3B ou 7B
--bits4[omnilingual mlx] Bits de quantização: 4 ou 8
--streamAtiva transcrição em streaming com VAD
--max-segment10Duração máxima do segmento em segundos (streaming)
--partialEmite resultados parciais durante a fala (streaming)

Exemplos:

# Transcrição básica
speech transcribe recording.wav

# Usar modelo maior
speech transcribe recording.wav --model 1.7B

# Encoder CoreML (Neural Engine + decodificador MLX)
speech transcribe recording.wav --engine qwen3-coreml

# Usar engine Parakeet (CoreML)
speech transcribe recording.wav --engine parakeet

# Omnilingual (CoreML, 1.672 idiomas)
speech transcribe recording.wav --engine omnilingual                              # janela de 10 s
speech transcribe recording.wav --engine omnilingual --window 5                     # janela de 5 s

# Omnilingual (MLX, qualquer duração até 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 padrão)
speech transcribe recording.wav --engine cohere
speech transcribe recording.wav --engine cohere --model int8 --language de

# Voxtral Mini 3B (MLX, INT5 padrão)
speech transcribe recording.wav --engine voxtral
speech transcribe recording.wav --engine voxtral --model int8 --language fr

# MOSS Transcribe Diarize (CoreML para formato curto)
speech transcribe recording.wav --engine moss
speech transcribe recording.wav --engine moss --model fp16

# MOSS Transcribe Diarize (contexto MLX offline de 128K; INT5 padrão)
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 com VAD
speech transcribe recording.wav --stream --partial

align

Alinhamento forçado por palavra — obtenha timestamps precisos para cada palavra.

speech align <file> [options]
OpçãoPadrãoDescrição
<file>Arquivo de áudio
--text, -tTexto para alinhar (se omitido, transcreve primeiro)
--model, -m0.6BModelo de ASR para transcrição: 0.6B, 1.7B ou ID completo
--aligner-modelID do modelo do alinhador forçado
--languageDica de idioma

Exemplos:

# Transcrever automaticamente e depois alinhar
speech align recording.wav

# Alinhar com texto conhecido
speech align recording.wav --text "Can you guarantee that the replacement part will be shipped tomorrow?"

speak

Síntese de texto para fala.

speech speak "<text>" [options]
OpçãoPadrãoDescrição
<text>Texto para sintetizar (opcional se usar --batch-file)
--engineqwen3Motor TTS: qwen3, cosyvoice, voxcpm2, indextts2, f5, higgs, indic-mio, magpie ou magpie-coreml
--output, -ooutput.wavCaminho do arquivo WAV de saída
--languageenglishIdioma. Omita para usar o dialeto nativo do locutor quando --speaker estiver definido.
--streamAtiva síntese em streaming
--voice-sampleÁudio de referência para clonagem de voz (funciona com qwen3, cosyvoice, voxcpm2, f5, higgs e indextts2)
--verboseMostra informações detalhadas de timing

Opções do Qwen3-TTS

OpçãoPadrãoDescrição
--modelbaseVariante do modelo: base, customVoice ou ID completo de modelo HF
--speakerVoz do locutor (requer --model customVoice)
--instructInstrução de estilo (modelo CustomVoice)
--list-speakersLista os locutores disponíveis e sai
--temperature0.3Temperatura de amostragem
--top-k50Amostragem top-k
--max-tokens500Máximo de tokens (500 = ~40s de áudio)
--batch-fileArquivo com um texto por linha para síntese em lote
--batch-size4Tamanho máximo do lote para geração paralela
--first-chunk-frames3Frames de codec no primeiro chunk em streaming
--chunk-frames25Frames de codec por chunk em streaming

Opções do CosyVoice3

OpçãoPadrãoDescrição
--speakersMapeamento de locutores para diálogo multi-locutor: s1=alice.wav,s2=bob.wav
--cosy-instructInstrução de estilo (sobrescreve o padrão). Controla o estilo de voz do CosyVoice3.
--turn-gap0.2Intervalo de silêncio entre turnos de diálogo em segundos
--crossfade0.0Sobreposição de crossfade entre turnos em segundos
--model-idID do modelo no HuggingFace

Opções do IndexTTS2

IndexTTS2 é um motor de clonagem de voz zero-shot baseado em um bundle MLX expandido. Ele requer --voice-sample e atualmente executa apenas síntese em lote.

OpçãoPadrãoDescrição
--indextts2-model-idaufklarer/IndexTTS2-MLX-fp16ID do modelo HuggingFace. O padrão é aufklarer/IndexTTS2-MLX-fp16.
--indextts2-bundle-dirCarrega um bundle expandido local em vez de baixar do Hugging Face.
--indextts2-emotion-audioÁudio opcional de referência de emoção/estilo. O padrão é a referência do falante.
--indextts2-emotionPreset opcional ou vetor de emoção com 8 valores. Presets incluem eager, happy, excited e calm.
--indextts2-emotion-weight1.0Escala --indextts2-emotion; mantenha moderado quando a identidade do falante importar.
--indextts2-speaking-rate1.0Multiplicador de velocidade de fala de 0.5 a 1.5; valores acima de 1.0 são mais rápidos.
--indextts2-max-pauseLimite opcional para pausas internas longas de baixa energia, em segundos.
--indextts2-s2mel-steps15Passos de fluxo S2Mel (padrão 15, validado de ouvido; 25 replica exatamente o upstream)

F5-TTS Options

OpçãoPadrãoDescrição
--f5-reference-textTranscrição de referência: o texto de --voice-sample (obrigatória)
--f5-steps16Passos de flow matching (padrão 16; 32 para fidelidade máxima)
--f5-cfg-strength2.0Intensidade do guidance sem classificador
--f5-sway-1.0Coeficiente de amostragem sway
--f5-speed1.0Multiplicador de velocidade de fala
--f5-seed0Semente para saída determinística
--f5-target-rms0.1Alvo de normalização RMS da referência
--f5-model-idID de modelo do Hugging Face
--f5-bundle-dirCarregar um bundle deste diretório local

Higgs TTS 3 Options

OpçãoPadrãoDescrição
--higgs-ref-textTranscrição de referência: o texto de --voice-sample (melhora a clonagem)
--higgs-temperature0.8Temperatura de amostragem (padrão 0.8)
--higgs-top-pLimiar de amostragem nucleus (desligado por padrão)
--higgs-top-kCorte top-k (desligado por padrão)
--higgs-max-new-tokens2048Máximo de quadros de áudio gerados (25 por segundo)
--higgs-seed0Semente para saída determinística
--higgs-model-idID de modelo do Hugging Face
--higgs-bundle-dirCarregar um bundle deste diretório local

Exemplos:

# TTS básico
speech speak "Hello, world!" --output hello.wav

# Clonagem de voz (Qwen3-TTS)
speech speak "Hello in your voice" --voice-sample reference.wav -o cloned.wav

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

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

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

# Tags de emoção/estilo inline
speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
    --engine cosyvoice -o emotion.wav

# Combinado: diálogo + emoções + clonagem de voz
speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
    --engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav

# Instrução de estilo personalizada
speech speak "Hello world" --engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav

# Síntese em streaming
speech speak "Long text here..." --stream

# Síntese em lote a partir de arquivo
speech speak --batch-file texts.txt --batch-size 4

kokoro

Texto para fala leve usando Kokoro-82M no Neural Engine (CoreML). Não-autorregressivo — um único forward pass, latência ~45ms.

speech kokoro "<text>" [options]
OpçãoPadrãoDescrição
<text>Texto para sintetizar
--voiceaf_heartPreset de voz (50 disponíveis em 10 idiomas)
--languageenCódigo de idioma: en, es, fr, hi, it, ja, pt, zh, ko, de
--output, -okokoro_output.wavCaminho do arquivo WAV de saída
--list-voicesLista todas as vozes disponíveis e sai
--model, -mID do modelo no HuggingFace

Exemplos:

# Kokoro TTS básico
speech kokoro "Hello, world!" --voice af_heart -o hello.wav

# Voz francesa
speech kokoro "Bonjour le monde" --voice ff_siwis --language fr -o bonjour.wav

# Listar todas as 50 vozes
speech kokoro --list-voices

respond

Diálogo fala-a-fala full-duplex usando PersonaPlex 7B.

speech respond [options]
OpçãoPadrãoDescrição
--input, -iArquivo WAV de áudio de entrada (24kHz mono) (obrigatório)
--output, -oresponse.wavArquivo WAV de resposta de saída
--voiceNATM0Preset de voz (ex. NATM0, NATF1, VARF0)
--system-promptassistantPreset: assistant, focused, customer-service, teacher
--system-prompt-textTexto de system prompt personalizado (sobrescreve o preset)
--max-steps200Máximo de passos de geração a 12.5Hz (~16s)
--streamEmite chunks de áudio durante a geração
--compileAtiva o transformer compilado (warmup + fusão de kernels)
--list-voicesLista os presets de voz disponíveis
--list-promptsLista os presets de system prompt disponíveis
--transcriptImprime o texto do monólogo interno do modelo
--jsonSaída como JSON (transcript, latência, caminho do áudio)
--verboseMostra informações detalhadas de timing

Ajustes de amostragem

OpçãoPadrãoDescrição
--audio-temp0.8Temperatura de amostragem de áudio
--text-temp0.7Temperatura de amostragem de texto
--audio-top-k250Candidatos top-k de áudio
--repetition-penalty1.2Penalidade de repetição de áudio (1.0 = desativado)
--text-repetition-penalty1.2Penalidade de repetição de texto (1.0 = desativado)
--repetition-window30Janela da penalidade de repetição em frames
--silence-early-stop15Frames de silêncio antes do early stop (0 = desativado)
--entropy-threshold0Limiar de entropia de texto para early stop (0 = desativado)
--entropy-window10Passos consecutivos de baixa entropia antes do early stop

Exemplos:

# Fala-a-fala básico
speech respond --input question.wav

# Usar voz feminina com transformer compilado
speech respond -i question.wav --voice NATF1 --compile

# Resposta em streaming e mostrar transcript
speech respond -i question.wav --stream --transcript --verbose

vad

Detecção de atividade de voz offline usando segmentação Pyannote.

speech vad <file> [options]
OpçãoDescrição
<file>Arquivo de áudio para analisar
--model, -mID do modelo no HuggingFace
--onsetLimiar de onset (início da fala)
--offsetLimiar de offset (fim da fala)
--min-speechDuração mínima de fala em segundos
--min-silenceDuração mínima de silêncio em segundos
--jsonSaída como JSON

vad-stream

Detecção de atividade de voz em streaming usando Silero VAD v5. Processa áudio em chunks de 32ms.

speech vad-stream <file> [options]
OpçãoDescrição
<file>Arquivo de áudio para analisar
--engineEngine de VAD: mlx (padrão) ou coreml
--model, -mID do modelo no HuggingFace (selecionado automaticamente pelo engine)
--onsetLimiar de onset
--offsetLimiar de offset
--min-speechDuração mínima de fala em segundos
--min-silenceDuração mínima de silêncio em segundos
--jsonSaída como JSON

wake

Detecção de palavras-chave no dispositivo usando o KWS Zipformer (3,49M parâmetros, CoreML INT8, 26× tempo real, apenas inglês).

speech wake <file> [options]
OpçãoDescrição
<file>Arquivo de áudio para analisar
--keywordsUma ou mais palavras-chave. Formatos: "hey soniqo", "hey soniqo:0.15:0.5" ou "LIGHT UP|▁ L IGHT ▁UP:0.25:2.0" (estilo sherpa-onnx com peças BPE explícitas)
--keywords-fileArquivo de palavras-chave, uma entrada por linha
--model, -mID do modelo no HuggingFace. Padrão: aufklarer/KWS-Zipformer-3M-CoreML-INT8
--jsonSaída como JSON

diarize

Diarização de falantes — identifica quem falou quando.

speech diarize <file> [options]
OpçãoPadrãoDescrição
<file>Arquivo de áudio para analisar
--enginepyannoteEngine de diarização: pyannote, community1 (CoreML + PLDA/VBx nativo) ou sortformer
--community1-compute-unitsaneUnidades de computação CoreML do Community-1: ane, cpu, gpu ou all
--num-speakersNúmero exato conhecido de falantes para Community-1
--min-speakers1Número mínimo de falantes para Community-1
--max-speakersNúmero máximo de falantes para Community-1
--target-speakerÁudio de enrollment para extração de falante alvo (apenas pyannote)
--embedding-enginemlxEngine de embedding de falante: mlx ou coreml (apenas pyannote)
--vad-filterPré-filtro com Silero VAD (apenas pyannote)
--rttmSaída no formato RTTM
--jsonSaída como JSON
--score-againstArquivo RTTM de referência para calcular DER

Exemplos:

# Diarização básica (pyannote, padrão)
speech diarize meeting.wav

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

# Saída RTTM para avaliação
speech diarize meeting.wav --rttm

# Extração de falante alvo (apenas pyannote)
speech diarize meeting.wav --target-speaker enrollment.wav

# Avaliar contra referência
speech diarize meeting.wav --score-against reference.rttm

embed-speaker

Extrai um vetor de embedding de falante a partir do áudio.

speech embed-speaker <file> [options]
OpçãoDescrição
<file>Arquivo de áudio contendo a voz do falante
--enginemlx (padrão) ou coreml para WeSpeaker 256-dim; redimnet2 para identidade persistente CoreML 192-dim; camplusplus para CAM++ CoreML 192-dim
--jsonSaída como JSON

denoise

Remove o ruído de fundo usando DeepFilterNet3 no Neural Engine.

speech denoise <file> [options]
OpçãoPadrãoDescrição
<file>Arquivo de áudio de entrada
--output, -oinput_clean.wavCaminho do arquivo de saída
--model, -mID do modelo no HuggingFace

Exemplo:

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

Transcreve um diretório de arquivos de áudio; o modelo é carregado uma única vez.

speech transcribe-batch <input-dir> [options]
OpçãoPadrãoDescrição
<input-dir>Diretório de arquivos de áudio a transcrever (WAV, FLAC etc.)
--output-dirDiretório de saída das transcrições
--engineqwen3Motor ASR (mesmos valores de transcribe)
--jsonlSaída em JSON lines, uma por arquivo

restore

Restaura a voz (remoção de ruído + de reverberação) com Sidon — CoreML, saída a 48 kHz.

speech restore <audio-file> [options]
OpçãoPadrãoDescrição
--output, -oinput_restored.wavCaminho do WAV de saída (48 kHz)
--variantfp16Variante de precisão / bundle

separate

Separa uma faixa musical em stems (vocals, drums, bass, other).

speech separate <input> [options]
OpçãoPadrãoDescrição
--stemsvocals,drums,bass,otherFaixas a extrair: vocals, drums, bass, other
--engineumxMotor: umx (padrão) ou htdemucs (maior qualidade)
--output-dirDiretório de saída das transcrições

upsample

Super-resolução de áudio com FlashSR — AudioSR destilado de um passo, saída a 48 kHz.

speech upsample <audio-file> [options]
OpçãoPadrãoDescrição
--output, -ohr.wavCaminho do WAV de saída (48 kHz)
--variantint4Variante de precisão / bundle
--seedSemente para saída determinística

qwen3-tts-coreml

Texto para fala com Qwen3-TTS em CoreML (Neural Engine).

speech qwen3-tts-coreml "<text>" [options]
OpçãoPadrãoDescrição
--output, -ooutput.wavCaminho do WAV de saída
--languageenglishIdioma de saída
--modelID de modelo do Hugging Face

vibevoice

Texto para fala com Microsoft VibeVoice (MLX).

speech vibevoice "<text>" --voice-cache <cache> [options]
OpçãoPadrãoDescrição
--voice-cache, -vCache de voz criado com vibevoice-encode-voice (obrigatório)
--stepsPassos de inferência DPM-Solver (mais passos, melhor qualidade)
--cfg1.3Intensidade do guidance sem classificador
--long-formSíntese longa em blocos para textos extensos

vibevoice-encode-voice

Cria um cache de voz do VibeVoice a partir de uma gravação de referência e sua transcrição.

speech vibevoice-encode-voice <input> "<transcript>" [options]
OpçãoPadrãoDescrição
<input>Arquivo de áudio de referência
<transcript>Transcrição do áudio de referência (somente inglês)
--output, -oCache de voz de saída (.safetensors)

translate

Traduz texto para o idioma alvo com MADLAD-400 (MLX).

speech translate "<text>" --to <lang> [options]
OpçãoPadrãoDescrição
--to, -tCódigo do idioma alvo (ISO 639-1, ex.: es, zh, ja)
--streamTransmitir tokens durante a decodificação
--modelID de modelo do Hugging Face

avatar-motion

Gera quadros de coeficientes de movimento de avatar NVIDIA Audio2Face-3D a partir de áudio de fala.

speech avatar-motion <input> [options]
OpçãoPadrãoDescrição
--output, -oavatar-motion.jsonlCaminho do JSONL de saída
--model…James-MLXBundle de identidade do avatar (James padrão; Claire e Mark disponíveis)
--verboseMostrar tempos e contagem de quadros