I’m Tejas Hingu, a full stack developer, and I hit this Chatterbox TTS error the first time I loaded the model. If ChatterboxTTS.from_pretrained() crashes with TypeError: 'NoneType' object is not callable on the watermarker line, your environment is missing pkg_resources, which comes from setuptools. Install setuptools<81 into the same environment and the model loads:
pip install "setuptools<81"
# or, in a uv environment
uv pip install "setuptools<81"The confusing part is that the real error never shows up. Here’s what was going on.
What does the error look like?
I was setting up Chatterbox on a CPU-only Linux machine to narrate short videos for my blog. The model files downloaded fine (about 3 GB), and then loading failed with this:
File ".../chatterbox/tts.py", line 165, in from_local
return cls(t3, s3gen, ve, tokenizer, device, conds=conds)
File ".../chatterbox/tts.py", line 126, in __init__
self.watermarker = perth.PerthImplicitWatermarker()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'NoneType' object is not callableNothing about a missing module, nothing about setuptools. Just a None where a class should be.
Why does Chatterbox say ‘NoneType’ object is not callable?
Chatterbox adds Resemble AI’s Perth watermark to every clip it generates, so it creates a PerthImplicitWatermarker as soon as the model loads. The perth package imports that class inside a try block, and quietly sets it to None if the import fails:
# perth/__init__.py (resemble-perth 1.0.1)
try:
from .perth_net.perth_net_implicit.perth_watermarker import PerthImplicitWatermarker
except ImportError:
PerthImplicitWatermarker = NoneSo any ImportError inside the watermarker turns into None, and Chatterbox then tries to call None(). The original error is thrown away.
In my case the failing import was the very first line of perth/perth_net/__init__.py:
from pkg_resources import resource_filenameHow do I check that this is my problem?
Run this with the same Python that runs Chatterbox:
python -c "import perth; print(perth.PerthImplicitWatermarker)"If it prints None, the watermarker import failed. To see the real reason, import the class directly, so the try block can’t hide it:
python -c "from perth.perth_net.perth_net_implicit.perth_watermarker import PerthImplicitWatermarker"For me that printed ModuleNotFoundError: No module named 'pkg_resources'.
Why is pkg_resources missing?
pkg_resources ships with setuptools, and two things stack up here.
First, my environment didn’t have setuptools at all. I created it with uv venv, and a fresh uv environment starts empty: uv pip list shows nothing in it. Plain python -m venv on Python 3.12 and newer doesn’t add setuptools either.
Second, installing the latest setuptools doesn’t help. When I checked on November 10, 2026, the newest release on PyPI was 84.2.1, and its wheel has no pkg_resources folder. The deprecation warning that Perth triggers says it plainly: “Refrain from using this package or pin to Setuptools<81.”
How do I fix the Chatterbox TTS error?
Install a setuptools release that still includes pkg_resources:
uv pip install --python path/to/env/bin/python "setuptools<81"That gave me setuptools 80.10.2. The check from earlier now prints the class instead of None:
<class 'perth.perth_net.perth_net_implicit.perth_watermarker.PerthImplicitWatermarker'>After that, ChatterboxTTS.from_pretrained(device="cpu") loaded and generated audio normally. You’ll see a UserWarning that pkg_resources is deprecated every time the model loads. It’s only a warning.
For reference, this is the combination I tested: Python 3.11.18, chatterbox-tts 0.1.7, resemble-perth 1.0.1, PyTorch 2.6.0 (CPU build), and setuptools 80.10.2.
Frequently asked questions
Why does pip install chatterbox-tts work but the model fails to load?
Neither chatterbox-tts nor resemble-perth lists setuptools as a requirement, so the install finishes without it. The problem only appears at runtime, when the watermarker is created inside from_pretrained().
Do I get No module named pkg_resources with uv specifically?
You get it whenever setuptools is missing or is version 81 or newer. uv makes it more likely because its environments start with no packages, so nothing installs setuptools unless you ask for it.
Can I just install the latest setuptools?
No. The latest release I checked (84.2.1) doesn’t contain pkg_resources, so the import still fails. Pin it below 81.
Will pinning setuptools below 81 break anything?
Not in my Chatterbox environment. Keep Chatterbox in its own virtual environment, though, so the old setuptools doesn’t hold back other projects.
Is Chatterbox still maintained?
Resemble AI’s README says Chatterbox became retired research in August 2026 and stays public as an archive under the MIT license. Don’t expect a fix for this upstream, so the pin is the practical answer.

Be First to Comment