jamiepine/voicebox · error · ValueError
Engine '{engine}' does not support cloned voice profiles
Error message
Engine '{engine}' does not support cloned voice profiles What it means
Raised by validate_profile_engine for the default (cloned) voice_type branch when the requested engine is not in CLONING_ENGINES (profiles.py:134-135). CLONING_ENGINES is {'qwen','luxtts','chatterbox','chatterbox_turbo','tada'} — any other engine string passed against a cloned profile is rejected. This guards against asking a clone-only engine to render a voice it cannot render.
Source
Thrown at backend/services/profiles.py:135
if voice_type == "preset":
preset_engine = getattr(profile, "preset_engine", None)
preset_voice_id = getattr(profile, "preset_voice_id", None)
if not preset_engine or not preset_voice_id:
raise ValueError(f"Preset profile {profile.id} is missing preset engine metadata")
if preset_engine != engine:
raise ValueError(
f"Preset profile {profile.id} only supports engine '{preset_engine}', not '{engine}'"
)
return
if voice_type == "designed":
design_prompt = getattr(profile, "design_prompt", None)
if not design_prompt or not design_prompt.strip():
raise ValueError(f"Designed profile {profile.id} is missing design_prompt")
return
if engine not in CLONING_ENGINES:
raise ValueError(f"Engine '{engine}' does not support cloned voice profiles")
async def create_profile(
data: VoiceProfileCreate,
db: Session,
) -> VoiceProfileResponse:
"""
Create a new voice profile.
Args:
data: Profile creation data
db: Database session
Returns:
Created profile
Raises:
ValueError: If a profile with the same name already existsView on GitHub (pinned to 51f49dea19)
Solutions
- Use one of: qwen, luxtts, chatterbox, chatterbox_turbo, tada — match the spelling and casing exactly.
- Strip whitespace and lowercase the engine string before passing it.
- If you need a preset/designed engine, switch to a profile whose voice_type matches (see errors 256-258).
- If you believe the engine should be supported, add it to CLONING_ENGINES in profiles.py after confirming it can clone.
Example fix
# before await generate(cloned_profile, engine='Chatterbox ') # after await generate(cloned_profile, engine='chatterbox') # or, if you need a preset engine, use a preset profile await generate(preset_profile, engine=preset_profile.preset_engine)
Defensive patterns
Strategy: validation
Validate before calling
CLONING_ENGINES = {'qwen', 'luxtts', 'chatterbox', 'chatterbox_turbo', 'tada'}
def engine_supports_clone(engine: str) -> bool:
return engine in CLONING_ENGINES
# before generate on a cloned profile:
if not engine_supports_clone(engine):
raise HTTPException(400, f"Engine '{engine}' cannot render cloned voices. Use one of {sorted(CLONING_ENGINES)}.") Type guard
def is_cloning_engine(engine: str) -> bool:
return isinstance(engine, str) and engine in {'qwen', 'luxtts', 'chatterbox', 'chatterbox_turbo', 'tada'} Try / catch
try:
validate_profile_engine(profile, engine)
except ValueError as e:
if 'does not support cloned voice profiles' in str(e):
raise HTTPException(400, str(e) + f" Valid cloning engines: {sorted(CLONING_ENGINES)}")
raise HTTPException(400, str(e)) Prevention
- Normalize engine strings to lowercase and strip whitespace before validation.
- Filter the UI engine dropdown by the selected profile's voice_type.
- Keep CLONING_ENGINES and the UI engine list in sync when adding/removing engines.
When it happens
Trigger: POST /generate with engine='preset' or some non-cloning engine against a cloned profile; typo in the engine name ('chatterbox ' with trailing space, 'Chatterbox' capitalized, 'luxttt' misspelled); an engine string from a newer/older version that is not in this build's CLONING_ENGINES.
Common situations: Frontend engine dropdown includes engines that are not cloning-capable; API consumer passed a preset/designed engine name to a cloned profile; engine name casing or spelling mismatch; version skew where one build added an engine the other does not know.
Related errors
- Preset profile {profile.id} only supports engine '{preset_en
- {e}
- This profile has no personality set. Add one on the profile
- Preset profile {profile.id} is missing preset engine metadat
- Designed profile {profile.id} is missing design_prompt
AI-assisted analysis of jamiepine/voicebox@51f49dea19 (2026-08-12).
Data as JSON: /api/errors/2d6fa3c4c51b329d.
Report an issue: GitHub.