diff --git a/abogen/web/templates/partials/new_job_step_entities.html b/abogen/web/templates/partials/new_job_step_entities.html index 9e38e75..1177401 100644 --- a/abogen/web/templates/partials/new_job_step_entities.html +++ b/abogen/web/templates/partials/new_job_step_entities.html @@ -228,6 +228,17 @@ + {% if options.voice_profile_options %} + + {% for profile in options.voice_profile_options %} + {% set profile_value = 'speaker:' ~ profile.name %} + {% set provider_label = 'Supertonic' if profile.provider == 'supertonic' else 'Kokoro' %} + + {% endfor %} + + {% endif %} {% if speaker.recommended_voices %} {% for voice_id in speaker.recommended_voices[:6] %} diff --git a/tests/test_prepare_form.py b/tests/test_prepare_form.py index 6db2c7a..7412dbb 100644 --- a/tests/test_prepare_form.py +++ b/tests/test_prepare_form.py @@ -65,6 +65,32 @@ def test_apply_prepare_form_handles_custom_mix_for_speakers(): assert "voice" not in hero or hero["voice"] != "__custom_mix" +def test_apply_prepare_form_accepts_saved_speaker_reference_for_voice(): + pending = _make_pending_job() + pending.speakers = { + "hero": { + "id": "hero", + "label": "Hero", + } + } + + form = MultiDict( + { + "chapter_intro_delay": "0.5", + "speaker-hero-voice": "speaker:Female HQ", + "speaker-hero-formula": "", + } + ) + + _, _, _, errors, *_ = apply_prepare_form(pending, form) + + assert not errors + hero = pending.speakers["hero"] + assert hero["voice"] == "speaker:Female HQ" + assert hero["resolved_voice"] == "speaker:Female HQ" + assert "voice_formula" not in hero + + def test_resolve_voice_setting_handles_profile_reference(): profiles = { "Blend": {