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 exists

View on GitHub (pinned to 51f49dea19)

Solutions

  1. Use one of: qwen, luxtts, chatterbox, chatterbox_turbo, tada — match the spelling and casing exactly.
  2. Strip whitespace and lowercase the engine string before passing it.
  3. If you need a preset/designed engine, switch to a profile whose voice_type matches (see errors 256-258).
  4. 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

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


AI-assisted analysis of jamiepine/voicebox@51f49dea19 (2026-08-12). Data as JSON: /api/errors/2d6fa3c4c51b329d. Report an issue: GitHub.