CrispASR exposes a large number of environment variables — tuning knobs, device placement overrides, benchmark timers, and debug/dump switches. This page is the single reference for all of them: the naming convention, the cross-cutting variables, the per-backend variables, and the ones CrispASR deliberately does not own.
This document was introduced for issue #265 (“consistency and documentation”). The same change standardized every backend-owned variable onto one prefix and unified the reference-voice cache location (see below).
Every CrispASR-owned variable is named:
CRISPASR_<BACKEND>_<FEATURE>
for example CRISPASR_OMNIVOICE_CODEC_GPU, CRISPASR_IRODORI_CODEC_GPU,
CRISPASR_PARAKEET_BENCH. Process-global variables that are not tied to one
backend drop the <BACKEND> segment (CRISPASR_MODELS_DIR, CRISPASR_KV_ON_CPU).
Historically many backends used a bare prefix (OMNIVOICE_CODEC_GPU,
QWEN3_TTS_BENCH, CHATTERBOX_DEBUG, …). Those bare names still work as
legacy aliases so existing scripts, notebooks, and Kaggle A/B kernels keep
running. The alias is derived automatically by stripping the CRISPASR_ prefix,
so for any CRISPASR_FOO_BAR documented here the bare FOO_BAR is also honored.
The first time a run reads a value from a legacy name, CrispASR prints a one-time notice to stderr:
[crispasr] warning: environment variable 'OMNIVOICE_CODEC_GPU' is deprecated and
will be removed in a future release; use 'CRISPASR_OMNIVOICE_CODEC_GPU' instead
(the old name still works for now). ...
Migrate to the canonical CRISPASR_-prefixed name at your convenience. To
silence the warnings (e.g. for a pipeline that scrapes stderr and cannot migrate
yet), set:
CRISPASR_SUPPRESS_ENV_DEPRECATION=1
The lookup + aliasing is implemented once in src/core/crispasr_env.h
(crispasr_env::get / truthy / present); new backends should read env vars
through that helper with a canonical CRISPASR_-prefixed name.
Most variables are read with one of two conventions — check the surrounding suffix legend, but as a rule:
1 (or any non-empty, non-0 value) to enable.
Some legacy flags treat being set at all as on, so prefer =1 / unset it
entirely rather than =0 when a flag’s exact semantics matter.The same feature suffixes recur across nearly every backend. Rather than repeat them per backend below, they mean:
| Suffix | Meaning |
|---|---|
_BENCH |
Print per-stage wall-clock timings for that engine. |
_DEBUG / _DIAG |
Verbose debug logging. |
_DUMP_DIR / _DUMP / _DUMP_* |
Write intermediate tensors / stages to disk (diagnostics, diff-harness). |
_FORCE_SCALAR |
Disable SIMD kernels (numeric-parity debugging). |
_GPU / _USE_GPU / _FORCE_METAL |
Force that stage/codec onto the GPU. |
_CPU / _CPU_ONLY / _FORCE_CPU |
Force that stage/codec onto the CPU. |
_NO_FA / _FLASH_ATTN |
Toggle flash-attention. |
_FASTCONV (_DEBUG) |
Enable the baked-F32 / matmul conv fast path for a codec/vocoder. |
_CFG_INTERVAL (_DEBUG) |
Interval-CFG cadence for a flow-matching decoder. |
_SEED |
RNG seed for reproducible generation. |
_*_FILE / _*_PATH / _*_GGUF |
Override an asset/model/fixture path (mostly dev/test). |
These are not tied to a single backend.
| Variable | Purpose |
|---|---|
CRISPASR_MODELS_DIR |
Directory searched for GGUF models (also the auto-download target root). |
CRISPASR_CACHE_DIR |
Base cache directory for auto-downloaded models/assets. Resolution order is CRISPASR_CACHE_DIR → CRISPASR_MODELS_DIR → platform default ($HOME/.cache/crispasr; %USERPROFILE%\.cache\crispasr on Windows). |
CRISPASR_SCRATCH_DIR |
Scratch directory for temporary run artifacts. |
CRISPASR_DUMP_DIR |
Global tensor-dump directory (diagnostics). |
CRISPASR_GGUF_MMAP / CRISPASR_GGUF_PRELOAD |
Control GGUF mmap vs. preload-into-RAM loading. |
CRISPASR_GGUF_MAX_ALLOC_CHUNK |
Lower the per-buffer allocation cap in bytes (default 1.5 GiB) used to split a model across several backend buffers on drivers with a small maxMemoryAllocationSize (#276). |
CRISPASR_MLOCK |
mlock model weights into RAM. |
CRISPASR_IGNORE_CPU_ISA |
=1 exactly (no other value works) continues past the startup build-vs-host CPU instruction-set check (#380) instead of exiting; the process will SIGILL at the first compute op the CPU can’t run. |
| Variable | Purpose |
|---|---|
CRISPASR_N_GPU_LAYERS |
Number of transformer layers to offload to the GPU. |
CRISPASR_ARG_DEVICE |
Default device selection for the CLI. |
CRISPASR_KV_ON_CPU |
Keep the KV cache on the CPU. |
CRISPASR_KV_QUANT / _KV_QUANT_K / _KV_QUANT_V / _KV_READ_F32 |
KV-cache quantization / read format. |
CRISPASR_GPU_PREF_CPU_LEGACY |
1 restores the pre-T18 behaviour where --gpu-backend cpu fell through to the best GPU. Off by default: the fall-through silently constructed a Metal device the flag exists to avoid. |
CRISPASR_METAL_PIPELINE_CACHE_MAX_MB |
Size cap in MiB (default 64) above which the on-disk Metal pipeline-cache archive is skipped at init — opening it costs ~1 ms/MB. 0 = uncapped (always use it). macOS only. |
Device selection across compiled backends also honors the standard ggml / CUDA variables
CUDA_VISIBLE_DEVICESandGGML_VK_VISIBLE_DEVICES— see “Variables CrispASR does not own” below.
| Variable | Purpose |
|---|---|
CRISPASR_SESSION_AUTOCHUNK |
Enable auto-chunking in the session API for long audio. |
CRISPASR_SESSION_CHUNK_SECONDS |
Chunk length (seconds) for session auto-chunking. |
CRISPASR_SESSION_PERBACKEND_CHUNK |
Use per-backend chunk-window tuning instead of a flat window. |
CRISPASR_SESSION_UNIFIED_DISPATCH |
Route surfaces through the unified library dispatch path. |
CRISPASR_SLICE_PIPELINE |
Force the CLI’s encode ∥ decode slice pipeline on/off. The override may only turn it OFF, or ON where it is already safe — it can never switch off one of the safety conditions (-p N, --return-logits, gap-fill re-entry, single slice). |
All OFF unless set. Each of these can delete or alter user-visible text, so none of them switches on by surprise; a wrong deletion is worse than a surviving artifact. Applied on both the CLI and the session C-ABI.
| Variable | Purpose |
|---|---|
CRISPASR_SEG_MAX_CHARS |
Truncate any segment longer than N code points, backing up to the last 。..!!??、, but never below 75% of the cap. A line past the cap is almost always a repetition hallucination that survived the n-gram collapse. |
CRISPASR_SEG_DROP_NONVERBAL |
Drop segments that are entirely a non-verbal marker — [Music], (applause), (喘ぎ声), ♪. Running speech merely containing such a word is never dropped. |
CRISPASR_SEG_LOGPROB_THOLD |
Drop segments whose average log-probability is below this. Post-hoc, on top of the decoder’s own fallback gate. |
CRISPASR_SEG_LOGPROB_MARGIN |
Loosen that threshold by this much for segments ≤1.6 s — a short segment’s mean logprob is noisier, so it gets more room, not less. |
CRISPASR_SEG_MERGE_REPEATS |
Collapse runs of near-identical adjacent segments into one spanning the whole run. Catches a phrase repeating across segment boundaries, which per-segment loop fixes cannot see. |
CRISPASR_SEG_MERGE_SIMILARITY |
Similarity bar for the above (default 0.90; LCS over code points). |
CRISPASR_SEG_MERGE_GAP_CS |
Never merge across a gap wider than this many centiseconds (default 200). Two identical lines a minute apart are two real utterances. |
CRISPASR_SEG_MERGE_MIN_RUN |
Minimum consecutive similar segments before merging (default 3), so an ordinary repeated “yes.” pair survives. |
| Variable | Purpose |
|---|---|
CRISPASR_ALIGN_SENTINEL |
0 disables the forced-alignment collapse check. On by default, detect + warn only. Catches ctc_forced_align() returning words at t0 == t1 == 0 — its two silent-zero paths (characters absent from the CTC vocab, or a word the Viterbi path never visited) produce garbage timestamps inside a successful return. |
CRISPASR_ALIGN_SENTINEL_REDISTRIBUTE |
1 opts into repair: respace the words across the clip in proportion to character count. Off by default — a wrong auto-repair would be just as invisible as the collapse. |
CRISPASR_VAD_FAILOVER |
0 disables the VAD sanity check. On by default: if a clip over 120 s comes back with under 1% speech coverage (or a couple of segments covering under 10% of a very long clip), the VAD is wrong and the run falls back to fixed full-clip chunks rather than losing the transcript. |
CRISPASR_NGRAM_LOOPFIX_OFF |
1 disables the repeated-n-gram collapse entirely, exposing the RAW decoded text. Diagnostic: for telling whether a loop originates in the decode itself or is merely being masked. |
CRISPASR_ORDER_WARN |
0 disables the one-shot “segment timestamps go backwards” warning. On by default; detect + warn only. Cues that merely overlap are deliberately not flagged (gap-fill jitter). |
CRISPASR_ALIGN_NO_ROMANIZE |
1 passes non-Latin reference text through raw instead of auto-romanizing it for a CTC aligner with a Latin vocabulary (#252). Since #419 the romanization is only the aligner’s internal label — aligned words hand back the original script, so srt/vtt/-sp/-sow output no longer flips Cyrillic/CJK transcripts to transliteration. |
CRISPASR_ALIGN_DEBUG |
1 prints the romanized reference transcript the aligner actually used. |
| Variable | Purpose |
|---|---|
CRISPASR_MAES_BETA / _MAES_GAMMA / _MAES_NUM_STEPS |
MAES beam-search parameters. |
CRISPASR_TDT_BATCH / CRISPASR_RNNT_BATCH |
Batch the TDT / RNNT joint decode. |
CRISPASR_RNNT_GGML_PERSTEP |
Per-step (vs. persistent-graph) ggml RNNT decode. |
CRISPASR_RNNT_GPU_ENC_PROJ |
Parakeet’s backend encoder-to-joint projection is default on CUDA. 0 restores the scalar CPU projection; 1 opts other GPU backends in. |
CRISPASR_NGRAM_LOOPFIX_OFF |
Disable the n-gram decode-loop breaker. |
CRISPASR_STREAM_SLICE_MEMO |
Memoize per-slice streaming partial decodes by absolute sample range (#404). Default ON — finals byte-equal, wall −12 % CPU / −6 % GPU in the quiet-box A/B; =0 re-decodes closed slices every step. |
CRISPASR_GAP_FILL / _GAP_FILL_MIN_CS |
Re-transcribe spans a first pass left empty (long audio); on by default for parakeet, threshold non-JA 300 cs / JA 100 cs. |
| Variable | Purpose |
|---|---|
CRISPASR_CMUDICT_PATH |
Path to the CMUdict pronunciation dictionary. |
CRISPASR_DE_DICT_PATH / _FR_DICT_PATH / _ES_DICT_PATH / _RU_DICT_PATH |
Language-specific pronunciation dictionaries. |
CRISPASR_RU_HETERONYMS_PATH |
Path to the Russian heteronym list. Only read when CRISPASR_G2P_RU_HETERONYM_WARN is on — it is diagnostic data, not a lookup tier. |
CRISPASR_G2P_RU_HETERONYM_WARN |
1 prints one line per input word that the upstream project flagged as genuinely ambiguous. Those 17,359 words are DISJOINT from the 812,953-entry vocabulary — they were removed because upstream could not choose a reading — so they have no dictionary entry and the letter-to-sound rules pick one reading from spelling alone. Common words are in that set (все, уже, потом, чем, небо, тест). Off by default; on, it turns a mispronunciation that looks like a rule bug into a named, explained limitation. Writing the ё or an explicit combining acute (замо́к) in the input resolves many of them, and both are honoured. |
CRISPASR_G2P_RU_ANALOGY |
0 disables the Russian stress-analogy tier, which finds a known relative of an OOV word (strip up to 3 letters, glue a short list of inflectional endings back on) and borrows its stress. On by default and measured on 10,000 held-out dictionary words: stressed-syllable index right 93.9% with it and 47.1% without; exact IPA match 79.4% vs 40.9%. The lever exists because it is the one tier that can take a stress from a word that merely LOOKS related. |
CRISPASR_G2P_DICT_SOURCE / _G2P_MODEL_PATH |
G2P dictionary source / neural G2P model path. |
CRISPASR_ESPEAK_DATA_PATH |
eSpeak-NG data directory. |
CRISPASR_MISAKI_DICT_PATH |
Path to the misaki US contextual-word dictionary (default ~/.cache/crispasr/misaki-us.txt) used by the English misaki G2P (#316). |
CRISPASR_KOKORO_G2P |
Kokoro G2P backend selection. |
CRISPASR_KOKORO_MISAKI_IPA |
0 disables the espeak-IPA → misaki-alphabet conversion Kokoro needs (#316), restoring the raw G2P spelling for A/B. On by default. |
CRISPASR_G2P_DE_UNSTRESS |
1 reads the German closed class the way espeak reads it in a SENTENCE (sie → ziː) instead of the citation form our per-word dictionary stores (zˈiː). Off by default: it takes phoneme agreement with espeak from 45.9% to 87.1%, but the ASR round-trip could not resolve a difference, and that metric measures intelligibility rather than naturalness (#316). |
CRISPASR_KOKORO_DE_MISAKI_ALPHABET |
1 applies misaki’s tied-sequence collapse for German (tsvˈaɪ → ʦvˈI), which is what the published training recipe does. Off by default: it made the ASR round-trip worse on the kokoro-de-hui-base model we ship, which appears to predate that part of the recipe (#316). The ʏ→y vocabulary fixup is applied either way. |
CRISPASR_T5_REPEAT_BREAK |
0 disables the decode-loop break for madlad/T5 translation, restoring exact PyTorch-blueprint behaviour. On by default: MADLAD greedy-decodes into a repeated token cycle on some short inputs and burns the whole token budget on it. The blueprint does the same — this is a deliberate improvement on it, not a parity fix (#333). |
CRISPASR_T5_NO_KV_REUSE |
1 re-forwards the whole decoder prefix each step instead of appending to the KV cache. Same output, much slower; an A/B lever for isolating cache bugs (#333). |
CRISPASR_T5_KEEP_EMBED |
1 keeps shared.embed.* and lm_head.* at source precision when quantizing a T5 model. Off by default because it was measured and loses: on madlad400 it makes q8_0 3.38→3.62 GB and q4_k 2.04→2.41 GB for a worst-stage cosine that does not improve (0.999922→0.999920, 0.992929→0.992606). The Q4_K loss accumulates through the 32 encoder blocks, not in the embedding lookup (#333). |
CRISPASR_KOKORO_PUNCT |
0 drops punctuation from the phoneme string for the German/French/Spanish built-in G2Ps, restoring pre-0.8.26 behaviour for A/B. On by default: Kokoro’s vocabulary contains ,.;:!? and they are how it pauses (#316). English is not gated — it is settled against misaki. |
| Variable | Purpose |
|---|---|
CRISPASR_NO_WATERMARK |
Disable the audio watermark. |
CRISPASR_WATERMARK_LEGACY |
Use the legacy watermark path. |
CRISPASR_WATERMARK_DETECT |
Which statistic --detect-watermark uses: frames (per-frame t + decoy specificity) or sign / 0 (the older averaged-spectrum sign test, kept for A/B and for re-reading an older release’s score). |
CRISPASR_NO_C2PA_REMUX |
Skip the C2PA MP4 remux step. |
CRISPASR_CONSENT_LOG |
Path to a JSON-Lines sink for voice-cloning consent records. Without it the records only go to stderr, which is interleaved with model-load noise and so a poor evidential artefact. |
| Variable | Purpose |
|---|---|
CRISPASR_QUANT_LMHEAD |
Quantize the LM head during crispasr-quantize. |
CRISPASR_IMATRIX_OUT |
Importance-matrix output path. |
CRISPASR_ACTDUMP_OUT / _ACTDUMP_TENSOR |
Activation dump output / target tensor. |
CRISPASR_DIFF_NO_GPU / _DIFF_USE_GPU / _DIFF_SLICES / _DIFF_STAGES |
crispasr-diff harness controls. |
CRISPASR_MEL_SERIAL |
Force the serial STFT. The parallel mel/STFT path is DEFAULT ON since #305; this is the opt-out. (The older opt-in CRISPASR_MEL_PARALLEL is no longer read.) |
CRISPASR_MEL_TIMING |
Print mel/STFT stage timings. |
CRISPASR_HQ_RESAMPLE |
0 selects the cheap linear resampler for CLI input decoding instead of the high-quality one. |
CRISPASR_CORE_ATTN_EAGER_F32 |
Force the shared attention helper’s eager (non-flash) path to F32 accumulation. |
CRISPASR_CORE_ATTN_DUMP_FA_LAYER |
Dump the shared attention helper’s flash-attn inputs/outputs for one layer index. |
CRISPASR_VERBOSE |
Global verbose output. |
CRISPASR_NO_WARMUP / CRISPASR_WARMUP |
Skip / force the model warmup pass. |
CRISPASR_SERVER_WORKERS / CRISPASR_API_KEYS |
HTTP server worker count / API keys. |
CRISPASR_TEST_STREAM_THROW |
Test-only: lets the server’s streaming worker throw on the magic input __throw_test__ (both the variable and the input are required, so it cannot fire in production). |
Read by the Docker images and .devops/run-server.sh, not by the C++ itself —
crispasr-diagnostics echoes them so a support dump shows how the container was
started.
| Variable | Purpose |
|---|---|
CRISPASR_BACKEND |
Backend the container’s entrypoint should select (docker-compose*.yml, .env.example). |
CRISPASR_USE_CUDA_COMPAT |
1 prepends /usr/local/cuda/compat to LD_LIBRARY_PATH in the CUDA images — for hosts whose driver is older than the image’s CUDA runtime. |
CrispASR’s in-tree ggml/ carries a few CrispASR-prefixed knobs on top of
upstream’s GGML_* set. They are read by getenv directly (no legacy alias).
| Variable | Purpose |
|---|---|
CRISPASR_GGML_ALLOC_TRACE |
Trace ggml-alloc graph-allocation decisions. |
CRISPASR_GGML_ALLOC_TRACE_MAX_PASSES |
Number of allocation passes that trace prints (default: unlimited once the trace is on). |
CRISPASR_METAL_N_CB |
Override the Metal backend’s command-buffer count (#83). |
CRISPASR_METAL_PROFILE |
1 whole-graph host/GPU split, 2 per-op breakdown, 3 per-op plus a per-node trace announced before each encode — with 3 the last line names the node an encode faulted on. |
CRISPASR_METAL_STRICT_FP |
Compile the Metal kernels with fast-math OFF (#83). Costs throughput; buys bit-identical CPU/GPU output where operand reordering was downconverting F32 intermediates. |
CRISPASR_METAL_FORCE_BARRIER |
1 forces a memory barrier before every Metal op (concurrency-hazard bisection, #83). |
CRISPASR_METAL_IM2COL_FLAT |
0 restores the legacy IM2COL Metal kernel. The flat kernel (one thread per dst element) is the default. |
CRISPASR_FORCE_BLIT_COPY |
Use the blit-encoder copy path even for a shared (unified-memory) Metal buffer (#83). |
CRISPASR_FORCE_DMB |
Insert a full memory barrier after the host memcpy into a shared Metal buffer (#83). |
Encoding a reference clip for voice cloning (a codec encoder, a Conformer /
Perceiver, or an ASR pass) is slow and produces a small, reusable blob. Every
voice-cloning TTS backend caches that blob through one shared mechanism
(src/core/tts_ref_cache.h), so the location and disable switch are identical
across backends (issue #265 unified OmniVoice — which previously used a bespoke
~/.cache/crispasr cache — onto this path):
| Variable | Purpose |
|---|---|
CRISPASR_TTS_REF_CACHE |
Set to 0 to disable reference-voice caching everywhere. |
CRISPASR_TTS_REF_CACHE_DIR |
Override the cache directory (default <TMPDIR>/crispasr-tts-refcache). |
Content-addressed entries are keyed by a hash of the raw reference (plus, for
some backends, an encoder-weight fingerprint) and tagged per backend
(irodori-latent, openvoice2-se, omnivoice-voice, f5-reftext, …) so no two
backends read each other’s blob. OmniVoice additionally honors the legacy
CRISPASR_OMNIVOICE_VOICE_CACHE=0 as an alias for the shared disable switch.
These are read by CrispASR but are OS / third-party conventions and are
intentionally not renamed to the CRISPASR_ prefix:
| Variable | Origin |
|---|---|
HOME, USERPROFILE, LOCALAPPDATA, XDG_CACHE_HOME |
OS home / cache dirs. |
TMPDIR, TEMP, TMP |
OS temp dir (also the default ref-cache root). |
HF_TOKEN, HUGGING_FACE_HUB_TOKEN |
HuggingFace auth (Hub convention). |
CUDA_VISIBLE_DEVICES |
CUDA device selection. |
GGML_VK_VISIBLE_DEVICES |
ggml Vulkan device selection. |
LLAMA_* |
Vendored llama.cpp (talk-llama example). |
The in-tree modular libraries keep their own established prefixes and are synced
from their sibling repos, so their variables are not part of the CRISPASR_
scheme:
crisp_audio/ — audio tower: CRISP_AUDIO_DUMP_STAGES, CRISP_AUDIO_KEEP_PAD_FRAMES, CRISP_AUDIO_WINDOWED_ATTN.glint/ — clean-room MP3/AAC codec: GLINT_*, AACDBG.crisp_lid/ · crisp_punc/ · crisp_truecase/ — standalone LID / punctuation / truecasing libraries; they and their src/ counterparts follow each library’s own naming (LID_*, FIREREDPUNC_*, PCS_*, TRUECASER_*). FIREREDPUNC_DEBUG=1 prints each restore pass as [PUNCDBG] in=<…> / out=<…>, which is the quickest way to see a backend’s true model output — --no-punctuation is not, because it strips punctuation after the fact and so hides text the model punctuated itself.
⚠ These libraries are built by the main target, and each has a second copy under
src/.src/CMakeLists.txtpreferscrisp_punc/(etc.) and falls back to thesrc/copy only when the sibling directory is missing from a checkout — so thecrisp_punc/copy is what normally links, and a change must be applied to both. #308’s capitalisation fix went intosrc/fireredpunc.cppalone and was dead code for months while the shipping copy kept the bug.tests/test-punc-copies-in-sync.cppnow fails if they diverge.
The live/integration test suite reads a few CRISPASR_-prefixed fixture
variables (model/audio paths); tests/env-live-tests.sh sets sensible defaults.
Like every other variable here, the pre-standardization bare names are still
honored as deprecated aliases:
| Variable | Purpose |
|---|---|
CRISPASR_PARAFORMER_MODEL / _PARAFORMER_MODEL_Q4K / _PARAFORMER_AUDIO_ZH / _PARAFORMER_AUDIO_EN |
Paraformer test model / audio paths. |
CRISPASR_AUDIOSEAL_GGUF |
AudioSeal test model path. |
CRISPASR_PIPER_TEST_MODEL |
Piper phonemize test model path. |
CRISPASR_OV2_DUMP_DIR |
OpenVoice2 HiFi test dump directory. |
CRISPASR_MODEL_BTC_CHORDS |
BTC chord-recognition test model path. Defaults to $CRISPASR_MODELS_DIR/btc-chords-large-f32.gguf. |
Every variable below is the canonical CRISPASR_-prefixed name; the bare form
(without CRISPASR_) is accepted as a deprecated alias. See the suffix
legend above for the meaning of the common _BENCH / _DEBUG / _DUMP_* /
_GPU / _CPU / _FORCE_SCALAR / _FASTCONV / _CFG_INTERVAL / _SEED
suffixes.
CRISPASR_AAC_DEBUGCRISPASR_AAC_DECODERCRISPASR_ARKASR_BLOCK_FROM_IDCRISPASR_ARKASR_CPUCRISPASR_ARKASR_DEBUG_GENCRISPASR_ARKASR_GPUCRISPASR_ARKASR_INSTRUCTIONCRISPASR_ARKASR_MAX_SINGLE_PASS_SCRISPASR_ARKASR_NO_CHUNK_CONTEXTCRISPASR_ARKASR_NO_EOS_SUPPRESSCRISPASR_ARKASR_NO_SPECIAL_SUPPRESSCRISPASR_ARKASR_TIMINGCRISPASR_AUDIOSEAL_BENCHCRISPASR_AUDIOSEAL_DEBUGCRISPASR_AUDIOSEAL_DUMP_STAGESCRISPASR_BANANAMIND_DEBUGCRISPASR_BANANAMIND_TTS_BENCHCRISPASR_BARK_BENCHCRISPASR_BARK_DECODE_CODESCRISPASR_BARK_DUMP_DIRCRISPASR_BEAT_THIS_DEBUGCRISPASR_BERT_ENCODER_BENCHCRISPASR_BTC_DEBUGCRISPASR_BTC_DUMP_FEATCRISPASR_BTC_MAJ_MIN — collapse the 170-class chord output to the 25-class
maj/min vocabulary. Default off (full 170-class output): 170 reduces to
maj/min at runtime, but a 25-class model can never be expanded, so the
170-class checkpoint is the shipping default.The shipped BTC weights are CC-BY-NC-SA (trained on Isophonics / Robbie Williams / UsPop2002 chord annotations) even though the upstream BTC code and CrispASR itself are MIT. The registry refuses to download them without
--accept-license cc-by-nc-sa-4.0(orCRISPASR_ACCEPT_LICENSE). A commercial product must supply its own weights.
CRISPASR_CANARY_BENCHCRISPASR_CANARY_CTC_BENCHCRISPASR_CANARY_QWEN_BENCHCRISPASR_CANARY_QWEN_DEBUGCRISPASR_CANARY_QWEN_MIN_ENC_FRAMESCRISPASR_CANARY_QWEN_NO_ECHO_STRIPCRISPASR_CANARY_LEGACY_STREAMCRISPASR_CANARY_SEAM_DEDUPCRISPASR_CANARY_STREAM_THRESHOLD_SCRISPASR_CHATTERBOX_BENCHCRISPASR_CHATTERBOX_BENCH_B2CRISPASR_CHATTERBOX_DEBUGCRISPASR_CHATTERBOX_DUMP_ATTN_ATCRISPASR_CHATTERBOX_DUMP_FFN_ATCRISPASR_CHATTERBOX_DUMP_GPT2_LAYERSCRISPASR_CHATTERBOX_DUMP_KPROJ_ATCRISPASR_CHATTERBOX_DUMP_KROPE_ATCRISPASR_CHATTERBOX_DUMP_KV_ATCRISPASR_CHATTERBOX_DUMP_KV_LAYERCRISPASR_CHATTERBOX_DUMP_LAYERCRISPASR_CHATTERBOX_DUMP_LOGITS_ATCRISPASR_CHATTERBOX_DUMP_NORM_ATCRISPASR_CHATTERBOX_DUMP_QPROJ_ATCRISPASR_CHATTERBOX_DUMP_VPROJ_ATCRISPASR_CHATTERBOX_DUMP_WKCRISPASR_CHATTERBOX_FLASH_ATTN — force ggml_flash_attn_ext for the T3
GPT-2 (turbo/nano) attention even on Vulkan, where naive attention is the
default since issue #402 (RADV 780M crashes in the Vulkan FLASH_ATTN_EXT
pipeline; the explicit softmax(QK^T)V path is verified working there).CRISPASR_CHATTERBOX_FORCE_GPUCRISPASR_CHATTERBOX_FULL_CPUCRISPASR_CHATTERBOX_LANGCRISPASR_CHATTERBOX_KV_CONT — materialize GPT-2 K/V layer views before
flash attention, reproducing the pre-PR-410 path for correctness/performance
A/Bs. The default passes the views directly; naive attention still
materializes them because its matrix operations require that layout.CRISPASR_CHATTERBOX_NAIVE_ATTN — force the explicit softmax(QK^T)V T3
attention on every backend (debug gate; outranks _FLASH_ATTN).CRISPASR_CHATTERBOX_S3GEN_CPUCRISPASR_CHATTERBOX_T3_CPU_S3GEN_GPUCRISPASR_CHATTERBOX_T3_GPUCRISPASR_CHATTERBOX_SEEDCRISPASR_CHATTERBOX_SYN_TEXTCRISPASR_CHATTERBOX_T3_BUCKET_REUSECRISPASR_CHATTERBOX_T3_CFG_B2CRISPASR_CHATTERBOX_T3_CFG_BUCKETCRISPASR_CHATTERBOX_T3_SEEDCRISPASR_CHATTERBOX_TEMPCRISPASR_CHATTERBOX_THREADSCRISPASR_S3GEN_CFG_INTERVALCRISPASR_S3GEN_DUMPCRISPASR_S3GEN_DUMP_UNETCRISPASR_S3GEN_DUMP_UNET_NO_AUTO_MARKCRISPASR_S3GEN_ENCODER_CPUCRISPASR_S3GEN_FASTCONVCRISPASR_S3GEN_FASTCONV_DEBUGCRISPASR_S3GEN_SIMDCONV_DEBUG — print pack count, selected ISA, and CPU/GPU fallback status.CRISPASR_S3GEN_RC_AS_MUL_MATCRISPASR_S3GEN_VOCODER_CPUCRISPASR_S3GEN_UNET_CFG_SINGLECRISPASR_S3GEN_UNET_CPUCRISPASR_S3GEN_UNET_GALLOCRCRISPASR_S3GEN_UNET_KEEP_GPU_OPCRISPASR_S3GEN_UNET_MARK_DB_OUTCRISPASR_S3GEN_UNET_MARK_DB_RESNETCRISPASR_S3GEN_UNET_MARK_DB_TBCRISPASR_S3GEN_UNET_MARK_MB_OUTCRISPASR_S3GEN_UNET_MARK_MB_OUT_INDEXCRISPASR_S3GEN_UNET_MARK_MB_OUT_MAXCRISPASR_S3GEN_UNET_MARK_MB_RESNETCRISPASR_S3GEN_UNET_PIN_CPU_OPCRISPASR_S3GEN_UNET_PRESERVE_INTERMEDIATESCRISPASR_S3GEN_UNET_PROBE_BLOCK1CRISPASR_S3GEN_UNET_PROBE_DENOISER_OUTCRISPASR_S3GEN_UNET_PROBE_INPUT_SNAPSHOTCRISPASR_S3GEN_UNET_PROBE_RC_OUTCRISPASR_CB_CAMPPLUS_BENCHCRISPASR_CB_S3GEN_BENCHCRISPASR_CB_S3TOK_BENCHCRISPASR_CB_VE_BENCHCRISPASR_COHERE_BENCHCRISPASR_COHERE_DEBUGCRISPASR_COHERE_DEVICECRISPASR_COHERE_DUMP_ATTNCRISPASR_COHERE_DUMP_ENCOUTCRISPASR_COHERE_DUMP_MELCRISPASR_COHERE_DUMP_STAGESCRISPASR_COHERE_FLASHCRISPASR_COHERE_GAPSCRISPASR_COHERE_LANGSCRISPASR_COHERE_LEGACY_SACRISPASR_COHERE_PROBE_MAX_LANGSCRISPASR_COHERE_PROBE_REUSE_ENCCRISPASR_COHERE_PROBE_TEXTLIDCRISPASR_COHERE_PROFCRISPASR_COHERE_SILENCE_GATECRISPASR_COHERE_THREADSCRISPASR_CONFUCIUS4_BEAMSCRISPASR_CONFUCIUS4_CFG_FUSECRISPASR_CONFUCIUS4_CFG_RATECRISPASR_CONFUCIUS4_COND_DIRCRISPASR_CONFUCIUS4_COND_PYEMBCRISPASR_CONFUCIUS4_DUMP_S2ACRISPASR_CONFUCIUS4_GRAPH_EMBEDCRISPASR_CONFUCIUS4_LR_LEGACYCRISPASR_CONFUCIUS4_MAX_LAYERSCRISPASR_CONFUCIUS4_PERSISTCRISPASR_CONFUCIUS4_REP_PENCRISPASR_CONFUCIUS4_S2A_TEMPCRISPASR_CONFUCIUS4_SCHEDCRISPASR_CONFUCIUS4_TEXT_IDSCRISPASR_CONFUCIUS4_T_SCHEDULECRISPASR_COSYVOICE3_BENCHCRISPASR_COSYVOICE3_CAMPPLUS_PATHCRISPASR_COSYVOICE3_CFG_BATCHCRISPASR_COSYVOICE3_CFG_INTERVALCRISPASR_COSYVOICE3_CFG_INTERVAL_DEBUGCRISPASR_COSYVOICE3_DUMP_HIFTCRISPASR_COSYVOICE3_DUMP_MELCRISPASR_COSYVOICE3_DUMP_TOKENSCRISPASR_COSYVOICE3_FASTCONVCRISPASR_COSYVOICE3_FASTCONV_DEBUGCRISPASR_COSYVOICE3_SIMDCONV — CPU-only direct SIMD Conv1d path for the 72 HiFT ResBlock convolutions; default ON since the Kaggle quiet-box A/B (1.07x on Xeon avx512f, 1.34x on Zen 4, output 1-LSB-equal, roundtrip exact). Set =0 for the ggml path.CRISPASR_COSYVOICE3_SIMDCONV_DEBUG — print pack count, selected ISA, and GPU fallback status.CRISPASR_COSYVOICE3_FLOW_STEPSCRISPASR_COSYVOICE3_FORCE_GALLOCRCRISPASR_COSYVOICE3_GREEDYCRISPASR_COSYVOICE3_HIFT_ON_GPUCRISPASR_COSYVOICE3_HIFT_PATHCRISPASR_COSYVOICE3_KV_BUCKETCRISPASR_COSYVOICE3_NO_CLONE_CACHE — re-extract the --voice ref.wav
speaker (s3tokenizer + CAMPPlus + prompt mel) on every synthesis instead of
once per reference. Output-identical; the cached path is ~30% faster on a
multi-sentence --tts (#334).CRISPASR_COSYVOICE3_NO_MIN_LEN — drop the decode’s minimum-length floor
(2 speech tokens per target text token, upstream’s min_token_text_ratio).
Without the floor a single unlucky sample at step 0 ends the decode with no
audio at all (#334).CRISPASR_COSYVOICE3_UPSTREAM_DIRCRISPASR_COSYVOICE3_VOICES_PATHCRISPASR_COSYVOICE3_VULKAN_NATIVECRISPASR_CV3_CAMPPLUS_GGUFCRISPASR_CV3_FLOW_GGUFCRISPASR_CV3_HIFT_GGUFCRISPASR_CV3_S3TOK_GGUFCRISPASR_CREPE_BATCHCRISPASR_CREPE_DEBUGCRISPASR_CREPE_NO_BAKE_F32CRISPASR_CREPE_NO_GPUCRISPASR_CSM_BENCHCRISPASR_CSM_WAV_FRAMESCRISPASR_CSM_WAV_OUTCRISPASR_CSM_WAV_TEMPCRISPASR_CSM_WAV_TEXTCRISPASR_DIA_BENCHCRISPASR_DIA_DECODE_CODESCRISPASR_DIA_DUMP_DIRCRISPASR_DIA_DUMP_STEPLOGITSCRISPASR_DIA_DUMP_TOKENSCRISPASR_DIA_FORCE_TOKENSCRISPASR_DIA_GREEDYCRISPASR_DIA_MAX_STEPSCRISPASR_DIA_TTS_GPUCRISPASR_DOTS_CFG_INTERVALCRISPASR_DOTS_CFG_INTERVAL_DEBUGCRISPASR_DOTS_DIFF_GPUCRISPASR_DOTS_DIT_DEBUGCRISPASR_DOTS_EOS_THRESHOLDCRISPASR_DOTS_FASTCRISPASR_DOTS_FM_ABCRISPASR_DOTS_FM_DUMPCRISPASR_DOTS_FUSED_STEPCRISPASR_DOTS_MAX_PATCHESCRISPASR_DOTS_ODE_STEPSCRISPASR_DOTS_PENC_VERIFYCRISPASR_DOTS_TTS_BENCHCRISPASR_DOTS_TTS_CPUCRISPASR_DOTS_TTS_DEBUGCRISPASR_ECAPA_ASP_CPUCRISPASR_ECAPA_ASP_GGMLCRISPASR_ECAPA_FORCE_SCALARCRISPASR_ECAPA_LID_BENCHCRISPASR_ECAPA_REF_FBANKCRISPASR_ECAPA_TIMINGCRISPASR_F5_BATCH_CFGCRISPASR_F5_BENCHCRISPASR_F5_CFG_INTERVALCRISPASR_F5_DIT_SKIPCRISPASR_F5_DURATION_CLAMP — clamp the per-char speech rate into a sane English band so a reference whose audio/transcript lengths are mismatched can’t truncate (or balloon) the output (#294). Default on; set 0 to restore the exact upstream ref_T / ref_text_len * gen_text_len / speed estimate.CRISPASR_F5_EMBED_GPUCRISPASR_F5_F16_ACTCRISPASR_F5_HIFIGAN_CPU — 1 restores the pre-a72fb66d CPU-loop
HiFi-GAN decode (A/B fallback; the default ggml core_hifigan graph path
is ~250x faster on GPU and cosine-1.000000 identical).CRISPASR_F5_VOCODE_MEL — debug probe: vocode this mel dump directly,
bypassing the DiT (used for the CPU-vs-graph vocoder parity A/B).CRISPASR_F5_FORCE_SCALARCRISPASR_F5_REF_MAX_SEC — clip the reference audio to this many seconds before it drives the duration estimate (upstream parity: 12 s). Default 12; set 0 to disable the clip.CRISPASR_F5_REF_TRIM_SILENCE — strip leading/trailing silence and collapse internal silences >~1 s in the reference audio (upstream parity). Default on; set 0 to disable.CRISPASR_F5_TEXT_LEN_BYTESCRISPASR_FC_ATTN_CONTCRISPASR_FC_BUCKETCRISPASR_FC_FUSED_QKVCRISPASR_FC_GPU_MANUAL_ATTNCRISPASR_FC_MAX_LAYERSCRISPASR_FC_MEM_DEBUGCRISPASR_FC_NO_FLASHCRISPASR_FC_PROFILECRISPASR_FC_PROF_FPCRISPASR_FC_PROF_FP_COLSCRISPASR_FC_PW_Q8CRISPASR_FC_TILED_ATTNCRISPASR_FC_TILED_BLOCKCRISPASR_FC_WINDOWED_ATTNCRISPASR_FC_WINDOW_BLOCKCRISPASR_FASTPITCH_BENCHCRISPASR_FASTPITCH_DUMP_DIRCRISPASR_FASTPITCH_FORCE_TOKENSCRISPASR_FFMPEG_LOGCRISPASR_FIRERED_BEAM_F32CRISPASR_FIRERED_BENCHCRISPASR_FIRERED_ENC_CPUCRISPASR_FIRERED_GGML_ATTNCRISPASR_FIRERED_LID_BENCHCRISPASR_FIRERED_MATVEC_CACHECRISPASR_FIRERED_NO_REPEAT_BREAKCRISPASR_FIRERED_VAD_BENCHCRISPASR_FIRERED_VAD_DEBUGCRISPASR_FIRERED_VAD_FORCE_SCALARCRISPASR_FIRERED_VAD_SERIALCRISPASR_FUNASR_BENCHCRISPASR_FUNASR_DUMP_STAGESCRISPASR_FUNASR_EMBED_FASTCRISPASR_FUNASR_LLM_CPUCRISPASR_FUNASR_LLM_LAYERSCRISPASR_FUNASR_NAN_CHECKCRISPASR_FUNASR_NO_FACRISPASR_FUNASR_ENC_CACHE — 0 disables the exact-T_lfr encoder graph
cache (repeat-length calls skip the 7.5–23.9 ms graph rebuild). Default on.CRISPASR_FUNASR_STEP_BUCKET — width of the cached decode-graph Lk buckets
(default 16, the measured optimum; >= kv_max_ctx reproduces the old
fixed-Lk design, which is a ~69% decode regression — A/B arm only).CRISPASR_FUNASR_STEP_CACHE — 0 disables the bucketed per-step decode
graph cache (bit-identical either way). Default on.CRISPASR_GEMMA4_AUTO_CHUNKCRISPASR_GEMMA4_E2B_BENCHCRISPASR_GEMMA4_E2B_EMBED_FASTCRISPASR_NO_REL_POS — drop the relative-position (matrix BD) term from the
Gemma-4 E2B encoder attention scores, leaving only the content term. Parity
bisection aid; not prefixed per-backend for historical reasons.CRISPASR_GLM_ASR_BENCHCRISPASR_GLM_ASR_DEBUGCRISPASR_GLM_ASR_EMBED_FASTCRISPASR_GLM_ASR_LEGACY_PROMPTCRISPASR_GLM_ASR_SINGLE_WINDOWCRISPASR_GRANITE_BENCHCRISPASR_GRANITE_DEC_GALLOCRCRISPASR_GRANITE_DEC_PROFILECRISPASR_GRANITE_DISABLE_ENCODER_GRAPHCRISPASR_GRANITE_ENC_F16CRISPASR_GRANITE_FORCE_SCALARCRISPASR_GRANITE_NLE_BENCHCRISPASR_GRANITE_NLE_EDIT_DUMPCRISPASR_GRANITE_QUANT_ALLCRISPASR_HIFT_FULL_IDFTCRISPASR_HTDEMUCS_BLAS — route the CrossTransformer matmuls through
cblas_sgemm (default ON where Accelerate is available). =0 selects the
scalar path. The transformer is ~86% of an unoptimised forward pass, so this is
the dominant knob (measured 44x on the transformer, 4.6x overall).CRISPASR_HTDEMUCS_FASTCONV — batched im2col + one GEMM for the CPU convs
(default ON). =0 selects the original per-time-frame scalar path.
Measured enc.conv2d 10.0 s -> 0.17 s and enc.rewrite 12.2 s -> 0.30 s.CRISPASR_HTDEMUCS_WCACHE — cache F32 copies of weight tensors by pointer
(default ON). =0 re-reads and re-converts on every access, which the
DConv stacks do ~6k times per encoder layer.CRISPASR_HTDEMUCS_GGML — run the ggml graph path instead of CPU/BLAS.
Since #414 the default is AUTO: ON exactly when a real GPU backend is
present and permitted (where the fused graph measured ~20x faster than
BLAS — RTF 0.37 vs 7.4 on an RTX 3090 Ti), OFF on CPU-only hosts (where
graphs measured slower than BLAS). =1/=0 force either way.CRISPASR_HTDEMUCS_GPU — GPU permission (CUDA > Metal > Vulkan). Default
AUTO follows the caller’s use_gpu (CLI default on); an explicit =0/=1
beats the caller in both directions — so =0 genuinely opts out even
though the CLI defaults use_gpu=true (#414 review catch). On GPU-less
hosts everything resolves to the BLAS path regardless.CRISPASR_HTDEMUCS_NO_BCAST_CAST — disable the issue-#398 fix that casts
non-F32 affine/bias weights to F32 in-graph before broadcast add/mul sites
(bisection aid). With =1 the pre-fix graph is rebuilt, which on CUDA
aborts in binbcast.cu (nb10 % sizeof(src1_t)) because the F16 GGUF
stores the DConv GroupNorm affines (*.dconv.layers.N.4.weight) as F16.CRISPASR_HTDEMUCS_PROFILE — print a per-phase wall-time breakdown of one
forward pass (stft / enc / transformer / dec / istft).CRISPASR_HTDEMUCS_DEBUG — verbose per-layer shape and NaN diagnostics.CRISPASR_HTDEMUCS_SKIP_TIME — skip the time branch (bisection aid).CRISPASR_HTDEMUCS_FUSED — single fused graph (encoder+transformer+decoder
on-device, no per-layer host↔device roundtrips). Default AUTO: ON with
the GPU graph path (#414), OFF otherwise. =1 alone implies the graph path
it needs; =0 on GPU keeps the per-layer-graph bisection arm.
The full decision table is unit-locked in tests/test-htdemucs-gates.cpp.CRISPASR_HTDEMUCS_MEMSTATS — log each weight-cache admission and the running
cache total in MB.CRISPASR_HTDEMUCS_NO_SEGMENT — process the whole track in one pass instead of
the 25%-overlap segment schedule (A/B against the old behaviour).All three optimisation gates are output-equivalent: the per-stage diff reports 45/45 stages passing with them ON or OFF.
CRISPASR_HIGGS_DEBUGCRISPASR_HIGGS_STT_BENCHCRISPASR_HIGGS_STT_EMBED_FASTCRISPASR_HIGGS_STT_FUSED_QKVCRISPASR_INDEXTTS_AA_BACKENDCRISPASR_INDEXTTS_AA_SCALARCRISPASR_INDEXTTS_AUDIO24K_FILECRISPASR_INDEXTTS_BEAM_SIZECRISPASR_INDEXTTS_BENCHCRISPASR_INDEXTTS_COND_FILECRISPASR_INDEXTTS_DEBUGCRISPASR_INDEXTTS_KV_DEVICE_COPYCRISPASR_INDEXTTS_LATENT_FILECRISPASR_INDEXTTS_MEL_CODES_FILECRISPASR_INDEXTTS_MEL_FILECRISPASR_INDEXTTS_SPK_NORMCRISPASR_INDEXTTS_TEXT_NORMALIZERCRISPASR_INDEXTTS_VOCODER_AACRISPASR_INDEXTTS_VOCODER_RAWCRISPASR_INDEXTTS_VOC_BENCHCRISPASR_INDEXTTS_VOC_FORCE_GPUCRISPASR_IRODORI_CAPTIONCRISPASR_IRODORI_CAPTION_TOKEN_IDSCRISPASR_IRODORI_CFG_CAPTIONCRISPASR_IRODORI_CFG_INTERVALCRISPASR_IRODORI_CFG_INTERVAL_DEBUGCRISPASR_IRODORI_CFG_SPEAKERCRISPASR_IRODORI_CFG_TEXTCRISPASR_IRODORI_CODEC_CPUCRISPASR_IRODORI_CODEC_GPUCRISPASR_IRODORI_CPUCRISPASR_IRODORI_DEBUGCRISPASR_IRODORI_DECODE_CHUNKCRISPASR_IRODORI_DECODE_CTXCRISPASR_IRODORI_DIT_TIMINGCRISPASR_IRODORI_DUMP_LATENTCRISPASR_IRODORI_DUMP_TEXT_STATECRISPASR_IRODORI_DUMP_TOKENSCRISPASR_IRODORI_DUMP_V_PRED0CRISPASR_IRODORI_ENC_DUMPCRISPASR_IRODORI_ENC_PRENORMCRISPASR_IRODORI_FASTCONVCRISPASR_IRODORI_LAYERSCRISPASR_IRODORI_ODE_STEPSCRISPASR_IRODORI_PERSIST_GRAPHCRISPASR_IRODORI_REF_NOISECRISPASR_IRODORI_TOKEN_IDSCRISPASR_IRODORI_T_LATENTCRISPASR_KOKORO_BENCHCRISPASR_KOKORO_DEBUGCRISPASR_KOKORO_DEBUG_INTERMEDIATESCRISPASR_KOKORO_DUMP_STAGESCRISPASR_KOKORO_FASTCONVCRISPASR_KOKORO_FASTCONV_DEBUGCRISPASR_KOKORO_G2PCRISPASR_KOKORO_GEN_FORCE_METAL / CRISPASR_KOKORO_GEN_GPU — either one puts
the generator (vocoder) stage on Metal.CRISPASR_KOKORO_SEEDCRISPASR_KOKORO_USE_GPUCRISPASR_KOKORO_VOICE_GGUFCRISPASR_KUGELAUDIO_CPU_ONLYCRISPASR_KUGELAUDIO_DEBUGCRISPASR_KYUTAI_RVQ_FASTCRISPASR_KYUTAI_STT_BENCHCRISPASR_LFM2_AUDIO_BENCHCRISPASR_LFM2_AUDIO_CPUCRISPASR_LFM2_SNAP_LAYERSCRISPASR_M2M100_BENCHCRISPASR_M2M100_GPUCRISPASR_MARBLENET_VAD_BENCHCRISPASR_MARBLENET_VAD_SERIALCRISPASR_MBR_PROFILE — print a per-stage wall-time breakdown of one forward
pass (stft+pack / band_split / run_time / run_freq / mask_est / synthesize).CRISPASR_MELBAND_GGML — run the ggml graph path instead of the legacy CPU
path. Since the Change-176 graph port the default is AUTO: ON exactly
when a real GPU backend is present and permitted (the fused single graph
measured ~112x faster than the per-layer graphs — RTF ~0.09 vs ~10 on an
RTX 3090 Ti), OFF on CPU-only hosts. =1/=0 force either way.CRISPASR_MELBAND_GPU — GPU permission (CUDA > Metal > Vulkan). Default
AUTO follows the caller’s use_gpu (CLI default on); an explicit =0/=1
beats the caller in both directions — so =0 genuinely opts out even
though the CLI defaults use_gpu=true (#414 review semantics). On GPU-less
hosts everything resolves to the CPU path regardless.CRISPASR_MELBAND_FUSED — single fused graph: band-split + the full
time/freq transformer stack + mask estimator on-device in one graph, no
per-layer host↔device roundtrips (the measured-fastest path on GPU).
Default AUTO: ON with the GPU graph path, OFF otherwise. =1 alone
implies the graph path it needs; =0 on GPU keeps the per-layer-graph
bisection arm. The full decision table is unit-locked in
tests/test-mel-band-gates.cpp.CRISPASR_MELBAND_SEG_S — override the Demucs-style segment length in
seconds (params.segment_seconds; <=0 → the checkpoint’s trained
chunk_size from GGUF metadata, 8 s Kim fallback — do NOT expect 10 s: the
earlier hardcoded 10 s ran RoPE 25% past the trained window, review #422).
The attention matrix is O(T²·bands·heads), so long inputs are split into
segments with 25% overlap and a triangular weight (bounds VRAM; the
unsegmented whole-buffer path OOMs on any clip beyond ~10 s).CRISPASR_MELBAND_NO_SEGMENT — process the whole track in one pass instead
of the segmented overlap-add schedule (A/B against the old behaviour).CRISPASR_MELOTTS_BENCHCRISPASR_MELOTTS_BERTCRISPASR_MELOTTS_FORCE_SCALARCRISPASR_MELOTTS_WEIGHT_CACHECRISPASR_MIMI_NONCAUSALCRISPASR_MIMO_ASR_BENCHCRISPASR_MIMO_ASR_DIAGCRISPASR_MIMO_ASR_DUMP_STAGESCRISPASR_MIMO_ASR_GPUCRISPASR_MIMO_FORCE_CPUCRISPASR_MIMO_SMOKE_DUMPCRISPASR_MIMO_SMOKE_GPUCRISPASR_MIMO_TOKENIZER_GPUCRISPASR_MIMO_TOK_CPUCRISPASR_MIMO_TOK_CPU_RVQCRISPASR_MIMO_TOK_VERIFY_RVQCRISPASR_MINI_OMNI2_BENCHCRISPASR_MOONSHINE_ALL_GPUCRISPASR_MOONSHINE_BENCHCRISPASR_MOONSHINE_ENC_ATTNCRISPASR_MOONSHINE_NO_REPEAT_BREAKCRISPASR_MOONSHINE_STREAMING_BENCHCRISPASR_MOONSHINE_STREAMING_GPUCRISPASR_MOONSHINE_STREAM_BENCHCRISPASR_MOSS_AUDIO_BENCHCRISPASR_MOSS_AUDIO_EMBED_FASTCRISPASR_MOSS_AUDIO_ENC_FLASHCRISPASR_MOSS_AUDIO_ENC_MANUALCRISPASR_MOSS_AUDIO_FORCE_CPUCRISPASR_MOSS_AUDIO_MEL_FILECRISPASR_MOSS_DIARIZE_BENCHCRISPASR_MOSS_DIARIZE_DEBUGCRISPASR_MOSS_DIARIZE_DUMP_CONVCRISPASR_MOSS_DIARIZE_ENC_FLASHCRISPASR_MOSS_DIARIZE_ENC_MANUALCRISPASR_MOSS_DIARIZE_FORCE_CPUCRISPASR_MOSS_DIARIZE_NO_LOOPFIXCRISPASR_MOSS_TRANSCRIBE_BENCHCRISPASR_MOSS_TRANSCRIBE_ENC_DUMPCRISPASR_MOSS_TRANSCRIBE_ENC_FLASHCRISPASR_MOSS_TRANSCRIBE_ENC_MANUALCRISPASR_MOSS_TRANSCRIBE_FORCE_CPUCRISPASR_MOSS_TRANSCRIBE_L0_DUMPCRISPASR_MOSS_TRANSCRIBE_MEL_DUMPCRISPASR_MOSS_TRANSCRIBE_NO_LOOPFIXCRISPASR_MOSS_TTS_BENCHCRISPASR_MOSS_TTS_LOCAL_DEBUGCRISPASR_MOSS_TTS_LOCAL_DUMP_FA_PATHCRISPASR_MOSS_TTS_LOCAL_DUMP_HIDDENCRISPASR_MOSS_TTS_LOCAL_DUMP_LAYERSCRISPASR_MOSS_TTS_LOCAL_DUMP_PROMPT_IDSCRISPASR_MOSS_TTS_LOCAL_DUMP_STOPCRISPASR_MOSS_TTS_LOCAL_DUMP_SUBLAYERCRISPASR_MOSS_TTS_LOCAL_DUMP_SUBLAYER_PATHCRISPASR_MOSS_TTS_LOCAL_FORCE_FRAMESCRISPASR_MOSS_TTS_LOCAL_GREEDY_AUDIOCRISPASR_MOSS_TTS_LOCAL_GREEDY_TEXTCRISPASR_MOSS_TTS_LOCAL_INJECT_LAYERCRISPASR_MOSS_TTS_LOCAL_INJECT_PATHCRISPASR_MOSS_TTS_LOCAL_MAX_FRAMESCRISPASR_MOSS_TTS_LOCAL_NO_GPUCRISPASR_MP3_ENCODERCRISPASR_DIARIZE_COUNT — speaker-count estimator: bic (default, the
upstream GMM/BIC + silhouette sweep) or eigengap. Eigengap is better on
well-separated synthetic data and cheaper, but under-counts on real speech
(11.4 % vs 5.3 % DER on VoxConverse) — see docs/foxnose-diarize/PLAN.mdCRISPASR_DIARIZE_BIC_WINDOW — score silhouette only in a [k-2, k+3] window
around the BIC anchor instead of the full [min, max] range. The full range is
the default: the BIC anchor is unreliable in both directions (measured errors
of +5 / -3 / -3 on 4/5/6 well-separated blobs) and when it over-counts the
window is stranded above the truth and cannot climb back to itCRISPASR_WESPEAKER_BENCH — per-stage embedder timings (fbank / resnet /
resnet_windows). Counting invocations of these is also how you check WHICH
embedding path actually ranCRISPASR_WESPEAKER_DEBUG — embedder diagnosticsCRISPASR_DIARIZE_DEBUG — chosen speaker count, the reason it was chosen,
and the per-k silhouette curve behind it. Worth reading before trusting a
count: on a borderline file the decision can rest on a <1 % score gapCRISPASR_DIARIZE_EMBED_WORKERS — windows embedded concurrently (default:
-t). Each worker gets its own context sharing one copy of the weightsCRISPASR_SPEAKER_EMBED_WORKERS — the same worker count for the standalone
crispasr-diarize CLI’s speaker-embedding stageCRISPASR_SPEAKER_EMBED_THREADS — ggml threads per embedder context
(default: -t). Honoured by the pluggable embedders and by wespeakerCRISPASR_DIARIZE_SPAN_EMBED=1 — run ONE network pass per span of windows
instead of one per window. 1.78x less diarization CPU for +0.30 mean DER on
the VoxConverse dev shard; off by default because accuracy is the better
default for a diarizer. See docs/cli.md#diarizationCRISPASR_DIARIZE_SPAN_WINDOWS — windows per span (default 32). Measured NOT
to affect the accuracy cost — identical from N=2 to N=32 — so there is
nothing to tune here; larger is simply fasterCRISPASR_WESPEAKER_CONV — conv lowering for the WeSpeaker embedder:
im2col (default) lowers each conv to explicit IM2COL + MUL_MAT nodes so
the GEMMs reach the Accelerate BLAS backend on CPU and the simdgroup
mul_mm kernels on Metal; direct restores GGML_OP_CONV_2D. Measured on
esrit.wav (215 s, -t 8): diarization delta 9.8 s -> 5.9 s (~1.6x),
embeddings cosine 1.0 vs direct, DER identical per file (7.32 % shard mean)CRISPASR_WESPEAKER_GPU=1 — run the WeSpeaker embedder on the GPU backend
(single context; the CPU worker pool is stood down because workers borrow
weights that now live in a GPU buffer). With the im2col default and batched
windows Metal reaches parity with the 8-worker CPU schedule on an M-series
(8.5 s vs 8.7 s wall on esrit.wav) but does not beat it, so CPU stays the
default; the switch exists for machines where the GPU/CPU balance differsCRISPASR_DIARIZE_BATCH_EMBED — batch independent 1.2 s windows into one
graph along ne[3] (arithmetic-identical to per-window; cosine 1.0). Default:
ON under CRISPASR_WESPEAKER_GPU=1 (collapses ~350 Metal dispatches into
~11 and is what got Metal from a 2x loss to parity), OFF on CPU (measured
12.1 -> 14.9 s wall on esrit.wav: ggml’s CPU conv loops ne[3], so fusing
buys no GEMM shape and the 32-window chunks starve the worker schedule).
1/0 forces either wayCRISPASR_WESPEAKER_BATCH — max windows per batched graph (default 32 on
GPU, 16 on CPU; cap 32). Only meaningful where the batch path is activeCRISPASR_GIGAAM_BENCH — per-stage timings (mel / encoder / decode)CRISPASR_GIGAAM_DEBUG — encoder output min/max/meanCRISPASR_GIGAAM_FLASH — ggml_flash_attn_ext in the encoder (opt-in; the
manual QK^T path is what the per-stage diff was validated on)CRISPASR_GIGAAM_FORCE_SCALAR — scalar LSTM/joint loops instead of cblasCRISPASR_GIGAAM_QUANT_ALL — let crispasr-quantize quantize the heads and
the pre-encode convs too (default keeps them at source precision)CRISPASR_NEMOTRON_BENCHCRISPASR_NEMOTRON_CONTEXT_PRESETCRISPASR_NEMOTRON_DEBUGCRISPASR_NEMOTRON_DECODE_TIMINGCRISPASR_NEMOTRON_FORCE_SCALARCRISPASR_NEMOTRON_GGML_DECODECRISPASR_NEMOTRON_MAESCRISPASR_NEMOTRON_NO_WINDOW_MASKCRISPASR_NEMOTRON_STREAMINGCRISPASR_NEMOTRON_STREAM_DEBUGCRISPASR_OMNIASR_BENCHCRISPASR_OMNIASR_DEBUGCRISPASR_OMNIASR_DUMP_DIRCRISPASR_OMNIASR_KEEP_F16_HEADCRISPASR_OMNIASR_KEEP_F16_TAILCRISPASR_OMNIASR_QUANT_ALLCRISPASR_OMNIVOICE_ACENC_BISECTCRISPASR_OMNIVOICE_AUTO_LANG — default on. When no language was requested
(-l / -tl / the server’s "language" / set_target_language), guess one
from the text being spoken and use it if it maps to an id the model knows.
An explicitly requested language always wins; a low-confidence guess resolves
to nothing and behaves exactly as before. =0 restores the old
always-language-agnostic behaviour. Exists because SubtitleEdit’s language
menu is not yet wired to its request payload (#13273).CRISPASR_OMNIVOICE_BENCHCRISPASR_OMNIVOICE_CFG_INTERVALCRISPASR_OMNIVOICE_CHUNKCRISPASR_OMNIVOICE_CLASS_TEMPCRISPASR_OMNIVOICE_CODEC_FASTCONVCRISPASR_OMNIVOICE_CODEC_GPU — codec placement override (1 = GPU, 0 = CPU). Unset defaults to GPU on
CUDA and CPU on Metal/CPU.CRISPASR_OMNIVOICE_CPUCRISPASR_OMNIVOICE_DEBUGCRISPASR_OMNIVOICE_DEBUG_CODESCRISPASR_OMNIVOICE_DEBUG_SUMCRISPASR_OMNIVOICE_DUMP_CODESCRISPASR_OMNIVOICE_ENCODE_DIFFCRISPASR_OMNIVOICE_FRAMES_PER_CHARCRISPASR_OMNIVOICE_FUSED_STEPCRISPASR_OMNIVOICE_GUIDANCECRISPASR_OMNIVOICE_HUBERT_REFCRISPASR_OMNIVOICE_NUM_STEPSCRISPASR_OMNIVOICE_PERSISTENT_GRAPHCRISPASR_OMNIVOICE_POS_TEMPCRISPASR_OMNIVOICE_REF_RATE_CHECKCRISPASR_OMNIVOICE_TOKENIZER_GGUFCRISPASR_OMNIVOICE_UNIFIED_CFGCRISPASR_OMNIVOICE_UPSTREAM_WEIGHTSCRISPASR_OMNIVOICE_VOICE_CACHECRISPASR_OPENVOICE2_BENCHCRISPASR_OV2_DUMP_DIRCRISPASR_OV2_FORCE_SCALARCRISPASR_OV2_NO_NORMALIZECRISPASR_OV2_TAUCRISPASR_OPUS_DEBUGCRISPASR_OPUS_DECODERCRISPASR_OPUS_ENCODERCRISPASR_ORPHEUS_BENCHCRISPASR_ORPHEUS_BUCKETCRISPASR_ORPHEUS_DEBUGCRISPASR_ORPHEUS_DIFF_GPUCRISPASR_ORPHEUS_DIFF_MAXGENCRISPASR_ORPHEUS_PROMPT_IDSCRISPASR_ORPHEUS_SNAC_CODECRISPASR_ORPHEUS_SNAC_GPUCRISPASR_ORPHEUS_SNAC_T_SUPERCRISPASR_OUTETTS_BENCHCRISPASR_PARAFORMER_BENCHCRISPASR_PARAFORMER_GPUCRISPASR_PARAKEET_ATT_CONTEXTCRISPASR_PARAKEET_BENCHCRISPASR_PARAKEET_CHUNK_OVERLAPCRISPASR_PARAKEET_CHUNK_SECONDSCRISPASR_PARAKEET_DEBUGCRISPASR_PARAKEET_DECODE_TIMINGCRISPASR_PARAKEET_ENC_CACHECRISPASR_PARAKEET_ENC_PROBECRISPASR_PARAKEET_FORCE_SCALARCRISPASR_PARAKEET_GGML_DECODECRISPASR_PARAKEET_INTERNAL_CHUNKINGCRISPASR_PARAKEET_LONGFORMCRISPASR_PARAKEET_LONGFORM_WINDOWCRISPASR_PARAKEET_MAESCRISPASR_PARAKEET_MEM_COEFFCRISPASR_PARAKEET_MEM_POLICYCRISPASR_PARAKEET_PIPELINECRISPASR_PARAKEET_QUANT_ALLCRISPASR_PARAKEET_SIMULATE_ENCODE_OOMCRISPASR_PARAKEET_STREAM_CHUNKCRISPASR_PARAKEET_STREAM_OVERLAPCRISPASR_PARAKEET_STREAM_THRESHOLDCRISPASR_PARAKEET_VAD_SLICE_CAPCRISPASR_PARAKEET_VRAM_BUDGET_MBCRISPASR_PARLER_BUCKETCRISPASR_PARLER_DEBUGCRISPASR_PARLER_DESC_IDSCRISPASR_PARLER_DIFF_MAXGENCRISPASR_PARLER_DUMP_ENCCRISPASR_PARLER_PROMPT_IDSCRISPASR_PARLER_TTS_BENCHCRISPASR_PIANO_SERIAL — 1 restores the single-threaded conv/GRU/linear
compute (the default parallel path is bit-identical; #305, ~1.7x).CRISPASR_PIPER_FORCE_SCALARCRISPASR_PIPER_TTS_BENCHCRISPASR_PIPER_WEIGHT_CACHECRISPASR_POCKET_DUMP_DIRCRISPASR_POCKET_FORCE_LATENTSCRISPASR_POCKET_FORCE_NOISECRISPASR_POCKET_MANUAL_BACKBONECRISPASR_POCKET_MANUAL_MIMICRISPASR_POCKET_MAX_FRAMESCRISPASR_POCKET_MIMI_DUMPCRISPASR_POCKET_MIMI_SCALARCRISPASR_POCKET_TTS_BENCHCRISPASR_POCKET_VOICE_CACHECRISPASR_POCKET_VULKAN_MIMI_MAX_FRAMESCRISPASR_PYANNOTE_LEGACYCRISPASR_PYANNOTE_SEG_BENCHCRISPASR_PYANNOTE_SEG_DUMPCRISPASR_PYANNOTE_CHUNK_S — audio per chunk of parallel inference, in
seconds (default 60; 0 restores the pre-#326 single scan over the whole
file). Chunking is decided by audio LENGTH and never by thread count, so
posteriors do not change with -tCRISPASR_PYANNOTE_CHUNK_CONTEXT_S — real audio spliced either side of a
chunk and then trimmed (default 5), which absorbs the convolutions’ zero
padding and the LSTM’s zero initial stateCRISPASR_QWEN3ASR_QUANT_AUDIOCRISPASR_QWEN3_ASR_BENCHCRISPASR_QWEN3_ASR_EMBED_FASTCRISPASR_QWEN3_ASR_FUSED_QKVCRISPASR_QWEN3_SYSPROMPT_LANGCRISPASR_QWEN3_TTS_BENCHCRISPASR_QWEN3_TTS_CODEC_ALLOW_FULLCRISPASR_QWEN3_TTS_CODEC_CHUNKCRISPASR_QWEN3_TTS_CODEC_CPUCRISPASR_QWEN3_TTS_CODEC_CTXCRISPASR_QWEN3_TTS_CODEC_FASTCONV — codec conv fast path. Default ON; 0 opts out.CRISPASR_QWEN3_TTS_CODEC_FORCE_METALCRISPASR_QWEN3_TTS_CODEC_GGUFCRISPASR_QWEN3_TTS_CODEC_GPUCRISPASR_QWEN3_TTS_HIP_CODEC_NATIVE — bypass the #337 ROCm codec-encoder
correctness fallback and run it natively on HIP. Diagnostic/A/B only until
the triggering Daphne spans pass on a real AMD GPU.CRISPASR_QWEN3_TTS_HIP_CP_NATIVE — bypass the #337 CPU fallback for the
ROCm 0.6B-F16 code predictor. Diagnostic/A/B only; its native gfx1100 path
was observed to emit all-NaN logits.CRISPASR_QWEN3_TTS_CODEC_TRACECRISPASR_QWEN3_TTS_CP_BACKENDCRISPASR_QWEN3_TTS_CP_DIRECTCRISPASR_QWEN3_TTS_CP_MTP_NOFUSECRISPASR_QWEN3_TTS_CP_STEP0_CACHECRISPASR_QWEN3_TTS_DEBUGCRISPASR_QWEN3_TTS_DUMP_DIRCRISPASR_QWEN3_TTS_EMBD_CHECKCRISPASR_QWEN3_TTS_FUSED_QKVCRISPASR_QWEN3_TTS_LK_BUCKETCRISPASR_QWEN3_TTS_NO_EMBD_CACHECRISPASR_QWEN3_TTS_O15 / _O15_SKIP_REALLOCCRISPASR_QWEN3_TTS_PROFCRISPASR_QWEN3_TTS_SEEDCRISPASR_QWEN3_TTS_TALKER_SCHEDCRISPASR_QWEN3_TTS_VULKAN_NATIVECRISPASR_QWEN3_TTS_DUMP_LOGITS=<dir> — write the raw per-frame talker
logits (f32, before the repetition penalty and the suppress mask) plus a
top-5 line to stderr. The instrument for a cross-backend diff: tokens
alone cannot tell a miscompute from amplified rounding (#337).CRISPASR_QWEN3_TTS_REPLAY_CODES=<file> — 16 whitespace-separated codec ids
per frame; the decode uses them instead of sampling. Teacher forcing, and
the ONLY way to compare two backends step by step: pin the whole frame or
the 15 residual codebooks (which must be sampled) diverge and the diff
measures trajectory, not arithmetic (#337).CRISPASR_QWEN3_TTS_REPLAY_TOKENS=<file> — the weaker form: codebook-0 ids
only. Useful for forcing a trajectory, NOT sufficient for a logits diff.CRISPASR_QWEN3_TTS_GREEDY — force the talker’s codebook-0 sampler to argmax
(top_k=1). The frame sequence then depends only on the logits, so two
backends agree if and only if their logits agree — this is the lever for
telling a GPU miscompute apart from a sampling difference, and without it a
CPU-vs-GPU token comparison proves nothing (#337).CRISPASR_QWEN3_TTS_MAX_FRAMESCRISPASR_QWEN3_TTS_SKIP_REF_DECODECRISPASR_SENSEVOICE_BENCHCRISPASR_SENSEVOICE_NO_FACRISPASR_SIDON_FASTCONV — DAC convolution mode (off, k1-f16, k1-f32, or full). Unset defaults to
k1-f16 on CUDA and off on Vulkan/CPU.CRISPASR_SIDON_RPE — relative-position-bias formulation: bucket-direct, bucket, or expand (legacy
[head_dim, T, T] expansion; keeps the Vulkan mul_mat batching branch). All three are algebraically
equivalent. Unset defaults to AUTO, resolved per graph build because the choice depends on the input
length: expand on a GPU backend while its extra transient footprint (4·T²·(head_dim+1−heads), i.e.
196·T² bytes for the shipped model — 58 MiB at T=557, 1.64 GiB at the 3000-frame cap) fits
CRISPASR_SIDON_RPE_BUDGET_MB, and bucket-direct otherwise. AUTO exists because expand measured 2.7×
faster in the predictor on the #416 reporter’s GTX 1660 SUPER (213.80 ms vs 575.25 ms at T=557, same
file and binary). AUTO stays off on CPU: that speedup is one device’s measurement and CPU behaviour is
left exactly as it was. An explicit value is honoured as given and never auto-overridden — it is the #416
bisection handle. The decision table is unit-locked in tests/test-sidon-rpe-gates.cpp.CRISPASR_SIDON_RPE_BUDGET_MB — AUTO’s budget in MiB for expand’s extra transient footprint (default
256, which admits expand up to T≈1170, ~23 s of audio). 0 disables AUTO, pinning bucket-direct.CRISPASR_SIDON_DECODER_CHUNK_FRAMES — maximum DAC core size in feature frames (default 512). 0 decodes
the whole utterance in one graph (~4.5 GiB at T≈2825 vs ~0.79 GiB chunked). Chunked output is bit-exact
against the whole-utterance decode.CRISPASR_SIDON_LOOKAHEAD — set to 0 to disable the input padding (one leading predictor frame plus 1.5 s
of right-side lookahead). Padding is on by default; without it the last ~12 ms of every clip is a full-scale
transient.CRISPASR_SIDON_MAX_FRAMES — predictor input cap in feature frames (default 3000, ~58.5 s after the
lookahead). Guards the O(T^2) attention.CRISPASR_SIDON_WINDOW_FRAMES — predictor window size in feature frames.
Default 0 = off, i.e. input past CRISPASR_SIDON_MAX_FRAMES is refused as
before. Set to e.g. 1500 to process long input as overlapping windows
instead (#431). Off by default because the evidence is incomplete: windowed
output beat the whole-utterance path on a 50 s ASR roundtrip, but an ASR
roundtrip measures “sounds better to a small ASR”, not “faithful to upstream”,
and those can disagree. tools/kaggle/sidon-length-parity is the experiment
that settles it. The window doubles as the threshold — at T <= window there
is one window and the split is a no-op — and it is clamped to
CRISPASR_SIDON_MAX_FRAMES so raising one cannot silently violate the other.CRISPASR_SIDON_PREDICTOR_CONTEXT_FRAMES — context frames on each side of a
window (default 300), cropped away after the run. Unlike the DAC’s chunking,
whose cores are exact because the decoder is fully convolutional with a finite
receptive field (dac_receptive_frames()), attention has no receptive field,
so no context size makes a windowed core exact — this trades compute for
boundary quality rather than buying correctness.CRISPASR_SIDON_DEBUG — print per-stage scheduler workspace sizes (per backend) after graph allocation.CRISPASR_SIDON_DUMP_HANDOFF — directory/path for the predictor→DAC handoff tensor dump.CRISPASR_SHERPA_LID_BINCRISPASR_SHERPA_LID_TIMEOUT_SEC / CRISPASR_SHERPA_TIMEOUT_SEC — wall-clock
timeout for the external sherpa LID / diarize helper, scaled by audio length.CRISPASR_SILERO_FORCE_SCALARCRISPASR_SILERO_LID_BENCHCRISPASR_SILERO_LID_DEBUGCRISPASR_SILERO_LID_DUMPCRISPASR_SILERO_LID_LEGACYCRISPASR_SILERO_LID_MAX_SCRISPASR_SILERO_LID_MIN_LOGIT — evidence gate (#409): discard a silero LID answer whose top-1 RAW logit is below this floor (default -2.0; -999 disables) and fall back to whisper-tiny LID. The raw-logit magnitude separates in-domain from out-of-domain audio where the softmax probability does not.CRISPASR_SILERO_LID_TRACECRISPASR_SILERO_LID_TRACE_OFFCRISPASR_SILERO_LID_TRUNCCRISPASR_SILERO_LID_VULKANCRISPASR_SPEECHT5_DUMP_DIRCRISPASR_SPEECHT5_FASTCONVCRISPASR_SPEECHT5_FASTCONV_DEBUGCRISPASR_SPEECHT5_TTS_BENCHCRISPASR_T5_DIFFCRISPASR_T5_GPUCRISPASR_T5_TRANSLATE_BENCHCRISPASR_TABCNN_DEBUGCRISPASR_TABCNN_NO_GPUCRISPASR_TADA_ACOUSTIC_CFGCRISPASR_TADA_ALLOW_VULKANCRISPASR_TADA_BATCH_PREFILLCRISPASR_TADA_BENCHCRISPASR_TADA_BUCKET_MINCRISPASR_TADA_CFG_INTERVALCRISPASR_TADA_CFG_INTERVAL_DEBUGCRISPASR_TADA_CODEC_BENCHCRISPASR_TADA_CODEC_DUMPCRISPASR_TADA_CODEC_GGUFCRISPASR_TADA_CODEC_VULKAN_NATIVECRISPASR_TADA_CTC_ASRCRISPASR_TADA_DIFF_TEXTCRISPASR_TADA_DO_SAMPLECRISPASR_TADA_DUMP_ACOUSTIC_FEATURESCRISPASR_TADA_DUMP_FEATURESCRISPASR_TADA_DUMP_FM_STEPSCRISPASR_TADA_DUMP_TIME_BEFORECRISPASR_TADA_ENCODER_DEBUGCRISPASR_TADA_EXTRA_STEPSCRISPASR_TADA_FM_B2CRISPASR_TADA_KEEP_F16_HEADCRISPASR_TADA_KEEP_F16_TAILCRISPASR_TADA_MAX_EXPANDED_FRAMESCRISPASR_TADA_NOISE_TEMPCRISPASR_TADA_NO_BUCKETCRISPASR_TADA_NUM_CANDIDATESCRISPASR_TADA_NUM_FM_STEPSCRISPASR_TADA_PROMPT_CACHECRISPASR_TADA_PROMPT_TEXTCRISPASR_TADA_QUANT_ALLCRISPASR_TADA_REPETITION_PENALTYCRISPASR_TADA_SCORERCRISPASR_TADA_TALKER_TIMINGCRISPASR_TADA_TEMPERATURECRISPASR_TADA_TOP_KCRISPASR_TADA_TOP_PCRISPASR_TADA_VULKAN_NATIVECRISPASR_TADA_WAV_CLONE — 1 enables on-the-fly TaDa voice cloning from a
reference .wav + transcript through the session C-ABI (#201). Off by default:
without it a .wav voice reference is still rejected with -2, preserving the
historical behaviour until the decoded-output roundtrip has validated the path.CRISPASR_TITANET_BENCHCRISPASR_TITANET_DUMPCRISPASR_TITANET_DUMP_MELCRISPASR_TITANET_FORCE_SCALARCRISPASR_TITANET_GGMLCRISPASR_TITANET_GPUCRISPASR_TITANET_LEGACYCRISPASR_TITANET_REF_MELThree compute paths exist and all are kept working; the default is the fastest one measured per platform.
| path | selected by | measured, M1, 2 s segment |
|---|---|---|
| legacy (Accelerate / hand-rolled) | default where HAVE_ACCELERATE |
71.7 ms |
| ggml graph, CPU | default elsewhere; CRISPASR_TITANET_GGML=1 |
277.3 ms |
| ggml graph, GPU | CRISPASR_TITANET_GGML=1 CRISPASR_TITANET_GPU=1 |
31.9 ms (but see below) |
All three agree to cosine 1.000000 with each other and 0.999996 against
NVIDIA’s nemo_en_titanet_large.onnx export fed the same mel — so the choice is
purely about speed.
⚠ CRISPASR_TITANET_GPU=1 is opt-in because it loses on real workloads
despite winning the micro-benchmark. Diarization embeds one segment per call
at variable lengths, so every call reshapes the graph and the GPU allocator
re-reserves; and CRISPASR_SPEAKER_EMBED_WORKERS runs several embedders at once,
which contend for the one GPU. End-to-end on a 600 s clip, 47 segments:
workers=4, legacy 9994 ms <- default, fastest
workers=1, legacy 12673 ms
workers=1, GPU 15275 ms
workers=4, GPU 49866 ms
Keep it for evaluating a discrete GPU (where the balance may differ) or for
CRISPASR_SPEAKER_EMBED_WORKERS=1 on a machine with weak CPU cores. Bucketing
segment lengths so the graph shape stops changing is the work that would make
this path win generally.
CRISPASR_TITANET_DUMP_MEL=<path> writes the computed mel as [T][n_mels]
float32 — the counterpart to CRISPASR_TITANET_REF_MEL. Feeding that dump to an
upstream ONNX export separates the front-end from the network, which a single
end-to-end cosine cannot do.
CRISPASR_VIBEVOICE_ASR_PROMPTCRISPASR_VIBEVOICE_ASR_SAMPLE — streaming ASR samples the acoustic
posterior by default, matching upstream. Set 0 for deterministic
posterior-mean reference diffs or 1 to force sampling.CRISPASR_VIBEVOICE_ATTN_PRECCRISPASR_VIBEVOICE_BENCHCRISPASR_VIBEVOICE_BITNET_ACT_QUANTCRISPASR_VIBEVOICE_DEBUGCRISPASR_VIBEVOICE_DUMP_DIRCRISPASR_VIBEVOICE_ENC_BACKEND — {auto|cpu|gpu} backend for the σ-VAE
tokenizer ENCODERS (the ASR direction). auto (default) diverts them to CPU
on Vulkan devices with a 65535 maxComputeWorkGroupCount (Intel Arc/Iris/
UHD, llvmpipe), where the conv dispatches over long audio overflow and abort
(issue #418 — the ASR twin of the decoder’s #52 fallback,
CRISPASR_VIBEVOICE_VAE_BACKEND). gpu forces the active backend (the
repro arm); cpu forces the fallback anywhere.CRISPASR_VIBEVOICE_ENCODER_CHUNK_SECONDSCRISPASR_VIBEVOICE_ENCODER_CONTEXT_SECONDSCRISPASR_VIBEVOICE_GELU_TANHCRISPASR_VIBEVOICE_GPUCRISPASR_VIBEVOICE_LM_BUCKETSCRISPASR_VIBEVOICE_NO_INPUT_NORMCRISPASR_VIBEVOICE_NO_LM_BUCKETSCRISPASR_VIBEVOICE_PRED_SCHEDCRISPASR_VIBEVOICE_QUANT_ALLCRISPASR_VIBEVOICE_RAW_TRANSCRIPT — 1 keeps the pre-#300 single segment
holding the model’s raw JSON blob instead of splitting it into one segment per
utterance with the speaker in the structured field.CRISPASR_VIBEVOICE_REF_FEATURESCRISPASR_VIBEVOICE_REUSE_PRED_GRAPHCRISPASR_VIBEVOICE_TTS_CFG_SCALECRISPASR_VIBEVOICE_TTS_DUMPCRISPASR_VIBEVOICE_TTS_DUMP_DECODERCRISPASR_VIBEVOICE_TTS_DUMP_PERFRAMECRISPASR_VIBEVOICE_TTS_FLASH_ATTNCRISPASR_VIBEVOICE_TTS_LATENTSCRISPASR_VIBEVOICE_TTS_NOISECRISPASR_VIBEVOICE_TTS_SEEDCRISPASR_VIBEVOICE_TTS_TRACECRISPASR_VIBEVOICE_TTS_TRACE_FRAMECRISPASR_VIBEVOICE_VAE_BACKENDCRISPASR_VIBEVOICE_VOICE_AUDIOCRISPASR_VOXCPM2_BENCHCRISPASR_VOXCPM2_BUCKET_CUDACRISPASR_VOXCPM2_CFG_INTERVALCRISPASR_VOXCPM2_CFG_INTERVAL_DEBUGCRISPASR_VOXCPM2_CFG_VALUECRISPASR_VOXCPM2_CPU_ONLYCRISPASR_VOXCPM2_FA_CPUCRISPASR_VOXCPM2_FORCE_SCALARCRISPASR_VOXCPM2_INFERENCE_STEPSCRISPASR_VOXCPM2_MAX_LENCRISPASR_VOXCPM2_NAN_CHECKCRISPASR_VOXCPM2_NO_BUCKETCRISPASR_VOXCPM2_USE_GRAPH — persistent-graph decode. Default ON; 0 opts out.CRISPASR_VOXCPM2_USE_REFCRISPASR_VOXCPM2_VAE_ENC_DIFFCRISPASR_VOXCPM2_VAE_TRACECRISPASR_VOXCPM2_VAE_MAX_SAMPLES - maximum 16 kHz input samples accepted by one voxcpm2-vae upscaling call
(default 960000, or 60 seconds). Split longer audio, or raise this only when enough RAM/VRAM is available.CRISPASR_VOXTRAL_BENCHCRISPASR_VOXTRAL_FUSED_QKVCRISPASR_VOXTRAL_TTS_CODEC_FROM_FILECRISPASR_VOXTRAL_TTS_DEBUGCRISPASR_VOXTRAL_TTS_DIFF_DUMPCRISPASR_VOXTRAL_TTS_FM_STEPSCRISPASR_VOXTRAL_TTS_SEMANTIC_CBCRISPASR_VOXTRAL_TTS_TEXTCRISPASR_VOXTRAL_TTS_TIMINGCRISPASR_VOXTRAL_TTS_VOICECRISPASR_VOXTRAL4B_BENCHCRISPASR_VOXTRAL4B_FUSED_QKVCRISPASR_VOXTRAL4B_STREAM_BATCH_ENCODERCRISPASR_VOXTRAL4B_STREAM_CHUNK_MSCRISPASR_VOXTRAL4B_STREAM_DEBUGCRISPASR_VOXTRAL4B_STREAM_DECODER_THREADCRISPASR_VOXTRAL4B_STREAM_DIFFCRISPASR_VOXTRAL4B_STREAM_LIVECRISPASR_VOXTRAL4B_STREAM_TIMINGCRISPASR_VAD_ENCDEC_CONV_CASTCRISPASR_VAD_ENCDEC_CPUCRISPASR_VAD_ENCDEC_DEBUGCRISPASR_VAD_ENCDEC_PERSISTCRISPASR_VAD_ENCDEC_SERIAL_MELCRISPASR_WEBRTC_VAD_MODE — WebRTC VAD aggressiveness, 0–3 (default 1).
Only consulted when the caller did not pass an explicit mode.CRISPASR_WAV2VEC2_BENCHCRISPASR_WAV2VEC2_DUMP_DIRCRISPASR_WAV2VEC2_VERBOSECRISPASR_WHISPER_TIRON — 0 forces the stock whisper decode for A/B. The
Tiron constrained-decoding grammar is auto-on whenever the model’s vocab has
speaker tokens; plain greedy loses ~5 cpWER.CRISPASR_WHISPER_TIRON_DEBUGCRISPASR_WHISPER_TIRON_MAX_SPEAKERSCRISPASR_WHISPER_TIRON_NOSPEECH — 0 disallows an initial <|nospeech|>.CRISPASR_WAVTOK_BENCHCRISPASR_WAVTOK_DUMP_DIRCRISPASR_WAVTOK_FIXED_CODESCRISPASR_ZONOS_CPP_DUMP_DIRCRISPASR_ZONOS_DECODE_CHUNKCRISPASR_ZONOS_DECODE_CTXCRISPASR_ZONOS_DIFF_N_STEPSCRISPASR_ZONOS_FASTCONVCRISPASR_ZONOS_G2P — builtin | espeak | auto (default). Which
phonemizer zonos tries first (#435). espeak is the pre-#435-follow-on
cascade bit for bit (in-process libespeak-ng → the espeak-ng binary → raw
ASCII → refuse) and never consults the built-in G2P; builtin puts the
built-in EN/DE/FR/ES/RU G2P from crispasr-core first; auto keeps espeak
first and uses the built-in only as a fallback below it. The default is
not builtin: the built-ins emit espeak-dialect IPA while zonos’s
inventory comes from its own conditioning.py symbol list, and unmapped
codepoints are dropped silently — the failure mode that made #435 look like a
working backend. A language’s default moves only on per-language agreement
and drop measurements, never on “it produced audio”.CRISPASR_ZONOS_RU_DIALECT — native (default) | espeak. Which SPELLING of
the Russian phonemes to hand the model when the built-in G2P produces them.
native is what crispasr-core’s Russian G2P emits — a narrow transcription
(ɐ/ə reduction gradation, ʂ/ʐ retroflexes, lʲ vs ɫ, æ fronting).
espeak rewrites the same sounds into espeak-ng’s ru conventions (ʌ, ʃ,
ʒ, ɭ, ɑ, y). Not cosmetic and invisible to the drop counter: every
symbol on both sides is inside zonos’s inventory, so nothing is dropped either
way — but a model conditions on the spelling it was TRAINED on, and zonos was
phonemised with espeak. Measured over 2,200 dictionary words phonemised both
ways, raw symbol agreement between the two spellings is 57.7% and the
conversion takes it to 88.0%. Same class of problem as CRISPASR_KOKORO_MISAKI_IPA
(#316), one language further on.
Off by default because it was measured and it LOSES. It did raise
phoneme-ID agreement with the espeak arm on all three test sentences
(0.773/0.759/0.627 → 0.818/0.852/0.847) — and took the ASR roundtrip from
0.293 to 0.000 on every sentence, in both the with-espeak and the
espeak-removed runs. Six arms, six zeros; it was the only arm that never
produced a recognisable transcript. Agreement with the tool a model was
trained on turns out not to be a proxy for the quality of its audio. Kept as
a lever because a different consumer (a piper or kokoro Russian voice trained
on espeak) may want it, but it must not be enabled for zonos without a new
measurement.CRISPASR_ZONOS_G2P_DEBUG — 1 prints the phonemisation readout to stderr:
which path ran, the IPA, the full phoneme-ID sequence, and how many emitted
codepoints zonos’s inventory could not map (with a histogram of which). Off
by default; it exists so a comparison between two G2P paths can come back
negative instead of “both produced a wav”.CRISPASR_ZONOS_SPEAKER_EMB_PATHCRISPASR_ZONOS_TTS_BENCHCRISPASR_ZONOS_TTS_TEXTCRISPASR_ZONOS_VULKAN_NATIVECRISPASR_COSYVOICE3_CAMPP_TAILlegacy makes cosyvoice3’s CAM++ speaker encoder use the old partial-tail
divisor. Default is the same convention as every other CAM++ backend.
Both paths synthesise correctly — the TTS→ASR roundtrip is 8/8 on each — so this
is a CONSISTENCY switch, not a correctness one. The eight speaker embeddings
baked into the shipped cosyvoice3-voices.gguf were produced with the old
divisor, so by default a voice cloned from a WAV and the same voice taken from
the bank differ by cos ~0.998. Set this to legacy if you need those two paths
to agree.
Why cosyvoice3 specifically is unsettled: its upstream is campplus.onnx, and
two onnxruntime builds disagree about AveragePool(ceil_mode=1) on the same
clip. CRISPASR_CAMPP_LEGACY_SEGPOOL also exists but is GLOBAL — it would drag
chatterbox, confucius4, dots-tts and fireredtts3 away from their own settled
PyTorch references to answer a cosyvoice3-only question.