Commit Graph
60 Commits
Author SHA1 Message Date
WildAi ceea0c71cf feat(tts): emotion tags reach the model, long scripts are chunked
The upstream Chatterbox README documents paralinguistic tags ([laugh],
[chuckle], [sigh], ...) as native to the Turbo family, and the vendored
Turbo pack passes them straight to the tokenizer -- it never parses them.
Our engine deleted them before the model saw them, so the feature looked
implemented and was inaudible.

* the text engine keeps a Turbo tag verbatim and records its name; on any
  other pack the nine Turbo names stay literal text instead of being
  swallowed as a voice name, and the run says so
* the v2 angle tokens are re-spelled for Turbo (<giggle> -> [giggle]) and
  left untouched everywhere else
* generate_audio now builds one plan for every family, synthesises one
  chunk per model call and joins the chunks; the classic path goes through
  the engine too, which is what makes "[Alice]" open a character segment
* per-chunk seeds (seed + index) keep a chunked run reproducible without
  giving every chunk the same prosody
* four appended widgets on ChatterboxTTS: enable_chunking,
  max_chars_per_chunk, chunk_combination_method, silence_between_chunks_ms
* chunk boundaries prefer a sentence end and never land inside a tag
* Turbo's exaggeration is passed as 0.0: the family ignores it for
  sampling and upstream warns about every non-zero value, once per chunk
2026-10-22 15:01:53 +03:00
WildAi 4597af8f59 chore: drop tests workflow, bump 2.0.3
CI cannot boot ComfyUI; pytest gate runs locally.
v2.0.3
2026-10-14 13:26:47 +03:00
WildAi 896c6c34df feat(ui): toast node errors in the web ui
Core app logged execution_error without a toast; startup note dropped.
2026-10-14 13:26:27 +03:00
WildAi fcf92a906e update v2.0.2 2026-10-11 20:13:00 +03:00
WildAi 6d4c82deba update 2026-10-11 19:09:58 +03:00
WildAi 721ecaec1b chore: revised display name, final readme v2.0.0 2026-10-09 23:56:42 +03:00
WildAi 125e06594b feat(audio): in-memory clips, drop temp wavs
Every entry point that conditions on a reference clip now takes the
waveform in memory: the vendored loaders gained load_audio_at (path,
ndarray or tensor -> float32 mono at the target rate, soundfile +
torchaudio, no librosa), and the resamples ride the new dsp module. The
node hands over preprocess_comfy_audio output at the right rate per
site (S3Gen 24k for conditioning, the tokenizer's 16k for the VC
source), so temp_wav_path and its temp-file machinery are gone -- which
also removes the 16-bit PCM quantization the file round-trip imposed.

Resampling is the one deliberate numerical difference: torchaudio's
sinc kernel instead of soxr, touching only clips supplied at call time.
The built-in-voice shared-assets E2E stays byte-identical
(md5 370acf3f9469d55759c3d6096b2628ff); the reference-clip E2E changes
measurably in the last digits, as expected and reported.
2026-10-09 22:03:41 +03:00
WildAi 6e81c7e604 refactor(vendor): librosa/scipy to dsp replicas
The training-baked featurization (three Slaney mel filterbanks, the
voice encoder's STFT, the periodic Hann behind the vocoder's ISTFT
convergence) is reimplemented operation-for-operation in a new vendored
module, src/chatterbox/models/dsp.py (ISC attribution retained), so
librosa and scipy leave the vendored tree's import list. Bit-exactness
against librosa 1.0.0 on these exact parameters was proven once by the
probe; tests/test_dsp.py pins what must not drift afterwards.
2026-10-09 22:02:49 +03:00
WildAi bad0475cdd refactor(vendor): drop omegaconf and conformer deps 2026-10-08 10:45:18 +03:00
WildAi f3966f3f34 fix(tests): mtl_tts hash missed in 2b1cf20 2026-10-08 01:32:51 +03:00
WildAi 2b1cf209d6 feat(loader): dedupe shared weights across packs
- ve/s3gen/s3gen_v3 safetensors + grapheme tokenizer are byte-identical
  across every repo that ships them (sha256-verified): fetched at most
  once into a reserved _shared store, hardlinked into each pack
- downloads carry pack-unique files only (allow_patterns); legacy
  full-repo folders satisfy the store before anything is fetched
- vendored MTL loads ve/s3gen from either serialization, safetensors
  first; upstream's strict load refused every SLP pack (P-036)
- .pt twins (s3gen.pt, s3gen_v3.pt, t3_cfg.pt, ve.pt) are never fetched
2026-10-07 13:22:03 +03:00
WildAi 7b810a7752 feat(tts): add flash params + single lang packs
- flash sampler's num_steps/cfg_scale surface as TTS widgets
- MTL node loads the 6 SLP finetunes: per-pack t3/s3gen
  resolution, companion ve.pt fetch, no-voice packs refuse
  with an actionable error (P-036)
- s3gen loads non-strict: SLP checkpoints predate two
  recomputed tokenizer buffers, strict load refused them
- schema tests pin pack discovery to an empty models root
2026-10-07 11:30:00 +03:00
WildAi 7cb6ba0a89 refactor(vendor): flash flat under src/ 2026-10-07 01:02:50 +03:00
WildAi b5ca0f3cea feat(flash): vendor chatterbox-flash into src/ 2026-10-07 00:38:22 +03:00
WildAi d3e126897e feat(tts): route flash packs through main node 2026-10-07 00:14:21 +03:00
WildAi aee74353bf feat(models): one folder for the turbo family 2026-10-06 22:42:08 +03:00
WildAi bb6b7ad30e feat(tts): route turbo family through main node 2026-10-06 22:09:44 +03:00
WildAi f7b9cd3764 docs(readme): pack/model pairing notes 2026-10-06 20:57:25 +03:00
WildAi 607aecff51 fix(loader): route nano/flash packs 2026-10-06 20:56:39 +03:00
WildAi e42b5a17a0 fix(vendor): nano tokenizer layout (P-035) 2026-10-06 20:51:30 +03:00
WildAi 38f4bb5524 fix(vendor): survive half-dtype packs (P-031..034) 2026-10-06 20:06:51 +03:00
WildAi 41f4cacbec fix(dtype): exclude fp32-resident frontends 2026-10-06 20:04:00 +03:00
WildAi c1d15347b7 fix(build): keep registered package name
ComfyUI-ChatterboxTTS is the registry identity; renaming
it was wrong. Test now pins it.
2026-10-06 19:13:42 +03:00
WildAi 63e4831fa4 feat(nodes): move nodes to WMNodes/sound group
Matches the VibeVoice menu convention: tts/vc/util
sub-groups instead of audio/generation.
2026-10-06 19:13:42 +03:00
WildAi ff81628ff4 test: explain the pyproject name rewriter 2026-10-06 19:03:41 +03:00
WildAi 4372e0851c fix(build): restore unprefixed name 2026-10-06 18:59:01 +03:00
WildAi 4bfe8beeb0 fix(vc): map n_timesteps to upstream kwarg
Upstream 0.1.7 renamed S3Token2Wav.inference's kwarg to
n_cfm_timesteps; the B2 patch kept the 0.1.2 spelling, so
every real VC run raised TypeError. Found by the E2E smoke
on real weights (6/7 passed; TTS path green).
2026-10-06 18:59:01 +03:00
WildAi 5e575daf07 fix(build): restore unprefixed package name
ComfyUI-Manager on the running install rewrote the
registry-duplicated ComfyUI- prefix back in; the parity
test caught it.
2026-10-06 18:49:20 +03:00
WildAi 06af454126 fix(dtype): walk plain pack containers
Vendored pack classes are not nn.Modules; the dtype cast
crashed on named_modules. Walk their Module attributes, and
delegate into each child's own tree (_modules is invisible
to __dict__ iteration).
2026-10-06 18:47:01 +03:00
WildAi 5d4770ea70 docs: readme, changelog, ci; ignore .dev
.dev is a local-only symlink; nothing may reference it.
Workflow examples renamed per registry convention.
2026-10-06 18:36:09 +03:00
WildAi df65c1ef77 build: unpinned deps, comfyui 0.37 floor, 2.0.0 2026-10-06 18:36:09 +03:00
WildAi dc29843483 test: add mock-based suite
Vendored tree mocked at collection, so the suite runs
green without perth, diffusers, s3tokenizer or conformer.
Frozen widget snapshot pins node ids and widget order.
2026-10-06 18:36:08 +03:00
WildAi 4a7fbf5a1b feat!: rebuild nodes on comfyui v3 api
BREAKING CHANGE: V1 NODE_CLASS_MAPPINGS removed.

Node ids and widget order unchanged, so saved workflows
keep binding. Six nodes: TTS, MTL, Turbo, SRT, Dialog, VC.
2026-10-06 18:35:59 +03:00
WildAi 9574c1bc87 feat(modules): port download and model infra
Borrowed from VoxCPM (HF download stack, settings, routes
support) and VibeVoice (registry, patcher, device/dtype/
attention). Deletes chatterbox_handler.py.
2026-10-06 18:35:59 +03:00
WildAi 1fa4653a60 build(vendor): re-sync chatterbox 0.1.7
Vendored 0.1.2 was stale: no mtl_tts, no turbo. 30 local
patches recorded in src/PATCHES.md; diffusers dependency
replaced by matcha/_diffusers_compat.py.
2026-10-06 18:34:52 +03:00
WildAi f0300cf84e Update pyproject.toml 2025-08-21 22:21:21 +03:00
WildAi 3201268644 Merge pull request #13 from francislabountyjr/main
Mps and cpu device fix
2025-08-21 22:20:15 +03:00
Francis LaBounty 40985ef6ed Use string representation of torch device to prevent trying to load with CUDA on non-CUDA systems 2025-08-17 15:49:52 -06:00
WildAi a64e0a14aa Update README.md 2025-07-21 17:50:38 +03:00
WildAi d08bcc61d3 Update README.md 2025-07-21 17:46:00 +03:00
WildAi 4c7416600a Update pyproject.toml 2025-07-21 17:16:18 +03:00
WildAi 2a32f70b10 Update README.md 2025-07-21 17:14:18 +03:00
WildAi 8b718b576e ver 1.2.0 2025-07-21 17:12:37 +03:00
WildAi 613980ab3c ver 1.2.0 2025-07-21 17:11:16 +03:00
WildAi 5679a012d8 Update README.md 2025-07-21 15:09:50 +03:00
Art K 2497e7eda2 readme update 2025-07-21 15:07:12 +03:00
Art K 8fc60925cb Update README.md 2025-05-30 09:27:04 +03:00
Art K d59b269975 Update pyproject.toml 2025-05-30 00:28:06 +03:00
Art K 496f5e3ab3 Update pyproject.toml 2025-05-30 00:19:31 +03:00
Art K cf326a162d Update README.md 2025-05-29 23:59:03 +03:00