Skip to content

Commit 851f8fb

Browse files
committed
fix: add missing ZipEnhancer/ModelScope transitive dependencies
- setuptools: modelscope uses pkg_resources at runtime (not just build-time) - einops: tensor operations required by modelscope framework - attrs: attribute classes required by modelscope framework - Pillow: image processing required by modelscope framework - datasets: version bumped to >=3.0.0,<=3.6.0 to match modelscope constraint - whisperjav[huggingface]: cross-extra ref so enhance pulls transformers - llm extra added to installer_extras in build_release.py (was missing) - Updated docs to reflect all 5 speech enhancement backends Fixes ZipEnhancer 'No module named pkg_resources' error.
1 parent 48b2f0a commit 851f8fb

5 files changed

Lines changed: 55 additions & 14 deletions

File tree

installer/build_release.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ def generate_requirements_from_pyproject(self):
178178
"cli",
179179
"gui",
180180
"translate",
181+
"llm",
181182
"enhance",
182183
"huggingface",
183184
"qwen",

pyproject.toml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,19 +164,26 @@ llm = [
164164
# sudo dnf install libsndfile (Fedora/RHEL)
165165
#
166166
# VERSION NOTES:
167-
# - datasets: ZipEnhancer recommends ==2.18.0, we use >=2.14.0,<4.0 for flexibility.
168-
# If you encounter ModelScope issues, try: pip install datasets==2.18.0
169-
# - modelscope: >=1.20 required, 1.22.0 recommended by ZipEnhancer docs.
167+
# - datasets: ModelScope requires >=3.0.0,<=3.6.0 (as of modelscope master 2026-03)
168+
# - modelscope: >=1.20 required, 1.22.0+ recommended.
169+
# - setuptools: Required by modelscope at runtime (uses pkg_resources in utils/plugins.py)
170+
# - einops: Required by modelscope framework for tensor operations
170171
enhance = [
171172
# ModelScope (ZipEnhancer) - core framework
172173
"modelscope>=1.20",
174+
# setuptools: modelscope uses pkg_resources at runtime (not just build-time)
175+
"setuptools",
176+
# einops: tensor operations required by modelscope framework
177+
"einops",
173178
# oss2: Alibaba Cloud OSS SDK - required by ModelScope to download models
174179
"oss2",
175180
"addict",
176-
"datasets>=2.14.0,<4.0", # 4.x breaks modelscope; ZipEnhancer recommends 2.18.0
181+
"attrs", # Required by modelscope framework
182+
"datasets>=3.0.0,<=3.6.0", # Must match modelscope's constraint (was >=2.14.0)
177183
"simplejson",
178184
"sortedcontainers",
179185
"packaging",
186+
"Pillow", # Required by modelscope framework
180187

181188
# ClearVoice (fork with relaxed librosa)
182189
"clearvoice @ git+https://github.com/meizhong986/ClearerVoice-Studio.git#subdirectory=clearvoice",
@@ -186,6 +193,9 @@ enhance = [
186193

187194
# ONNX inference
188195
"onnxruntime>=1.16.0",
196+
197+
# ModelScope framework requires transformers; pull via huggingface extra
198+
"whisperjav[huggingface]",
189199
]
190200

191201
# HuggingFace ecosystem (for kotoba-whisper, model downloads)

whisperjav/installer/core/registry.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class Extra(Enum):
102102
GUI = "gui" # PyWebView GUI
103103
TRANSLATE = "translate" # AI translation (pysubtrans, OpenAI, Gemini)
104104
LLM = "llm" # Local LLM server (FastAPI, uvicorn)
105-
ENHANCE = "enhance" # Speech enhancement (ClearVoice, BS-RoFormer)
105+
ENHANCE = "enhance" # Speech enhancement (ZipEnhancer, ClearVoice, BS-RoFormer, FFmpeg-DSP)
106106
HUGGINGFACE = "huggingface" # HuggingFace Transformers
107107
QWEN = "qwen" # Qwen3-ASR support (v1.8.3+)
108108
ANALYSIS = "analysis" # Scientific analysis and visualization
@@ -602,9 +602,10 @@ def matches_platform(self, current_platform: str = None) -> bool:
602602
# Reference: https://modelscope.cn/models/iic/speech_zipenhancer_ans_multiloss_16k_base
603603
#
604604
# IMPORTANT - Version Sensitivity:
605-
# - datasets: ZipEnhancer docs recommend ==2.18.0, but we use >=2.14.0,<4.0
606-
# for broader compatibility. If you encounter issues, try pinning to 2.18.0.
607-
# - modelscope: >=1.20 required, 1.22.0 recommended by ZipEnhancer docs.
605+
# - datasets: ModelScope requires >=3.0.0,<=3.6.0 (as of 2026-03)
606+
# - modelscope: >=1.20 required, 1.22.0+ recommended
607+
# - setuptools: Required at RUNTIME by modelscope (uses pkg_resources in utils/plugins.py)
608+
# - einops: Required by modelscope framework for tensor operations
608609
#
609610
# LINUX SYSTEM DEPENDENCIES (not pip-installable):
610611
# - libsndfile1: Required for soundfile package. Install with:
@@ -618,6 +619,19 @@ def matches_platform(self, current_platform: str = None) -> bool:
618619
order=70,
619620
reason="ModelScope framework for ZipEnhancer speech enhancement",
620621
),
622+
Package(
623+
name="setuptools",
624+
extra=Extra.ENHANCE,
625+
order=70,
626+
import_name="pkg_resources",
627+
reason="Runtime dependency of modelscope (uses pkg_resources in utils/plugins.py)",
628+
),
629+
Package(
630+
name="einops",
631+
extra=Extra.ENHANCE,
632+
order=70,
633+
reason="Tensor operations - required by modelscope framework",
634+
),
621635
Package(
622636
name="oss2",
623637
extra=Extra.ENHANCE,
@@ -630,12 +644,18 @@ def matches_platform(self, current_platform: str = None) -> bool:
630644
order=72,
631645
reason="Dict subclass for modelscope configs",
632646
),
647+
Package(
648+
name="attrs",
649+
extra=Extra.ENHANCE,
650+
order=72,
651+
reason="Attribute classes - required by modelscope framework",
652+
),
633653
Package(
634654
name="datasets",
635-
version=">=2.14.0,<4.0",
655+
version=">=3.0.0,<=3.6.0",
636656
extra=Extra.ENHANCE,
637657
order=73,
638-
reason="HuggingFace datasets - pinned <4.0 due to modelscope compat (ZipEnhancer recommends 2.18.0)",
658+
reason="HuggingFace datasets - must match modelscope constraint (>=3.0.0)",
639659
),
640660
Package(
641661
name="simplejson",
@@ -655,6 +675,13 @@ def matches_platform(self, current_platform: str = None) -> bool:
655675
order=76,
656676
reason="Version parsing for modelscope",
657677
),
678+
Package(
679+
name="Pillow",
680+
extra=Extra.ENHANCE,
681+
order=76,
682+
import_name="PIL",
683+
reason="Image processing - required by modelscope framework",
684+
),
658685
Package(
659686
name="clearvoice",
660687
extra=Extra.ENHANCE,

whisperjav/modules/speech_enhancement/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333
3434
Available Backends:
3535
- none: Passthrough (no enhancement)
36-
- clearvoice: ClearerVoice speech enhancement (denoising)
37-
- bs-roformer: BS-RoFormer vocal isolation
36+
- ffmpeg-dsp: FFmpeg audio filters (loudnorm, compress, denoise)
37+
- zipenhancer: ZipEnhancer 16kHz via ModelScope (lightweight, SOTA quality)
38+
- clearvoice: ClearerVoice speech enhancement (denoising, 48kHz)
39+
- bs-roformer: BS-RoFormer vocal isolation (44.1kHz)
3840
3941
Design Principles:
4042
- Lazy loading: Backends loaded only when needed

whisperjav/modules/speech_enhancement/factory.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
44
Supports lazy loading to avoid import overhead for unused backends.
55
6-
Design Decisions (v1.7.3):
6+
Design Decisions (v1.7.3, extended v1.8.x):
77
- Single backend entry with model parameter (not separate entries per sample rate)
8-
- Default model is 48kHz variant for best quality
8+
- Default model varies by backend (e.g., 48kHz for ClearVoice, 16kHz for ZipEnhancer)
99
- Graceful degradation handled at backend level
1010
- Consistent with SpeechSegmenterFactory pattern
11+
- Five backends: none, ffmpeg-dsp, zipenhancer, clearvoice, bs-roformer
1112
"""
1213

1314
from typing import Dict, Type, Optional, Any, List, Tuple

0 commit comments

Comments
 (0)