feat: Enhance voice selection and settings UI with default voice option and improved layout

This commit is contained in:
JB
2025-10-06 09:20:33 -07:00
parent 1b907be322
commit 5497697741
5 changed files with 226 additions and 37 deletions
+8 -8
View File
@@ -5,7 +5,7 @@
{% block content %}
<section class="card">
<h1 class="card__title">Create a new audiobook</h1>
<form action="{{ url_for('web.enqueue_job') }}" method="post" enctype="multipart/form-data" class="grid grid--two">
<form action="{{ url_for('web.enqueue_job') }}" method="post" enctype="multipart/form-data" class="grid grid--two form-grid">
<div class="grid">
<div class="field">
<label for="source_file">Source file</label>
@@ -21,9 +21,9 @@
</div>
<div class="field" data-conditional="standard" data-role="voice-field">
<label for="voice">Voice</label>
<select id="voice" name="voice" data-role="voice-select">
<select id="voice" name="voice" data-role="voice-select" data-default="{{ settings.default_voice }}">
{% for voice in options.voices %}
<option value="{{ voice }}">{{ voice }}</option>
<option value="{{ voice }}" {% if settings.default_voice == voice %}selected{% endif %}>{{ voice }}</option>
{% endfor %}
</select>
</div>
@@ -32,10 +32,10 @@
<select id="voice_profile" name="voice_profile" data-role="voice-profile">
<option value="__standard" selected>Standard voice</option>
<option value="__formula">Formula</option>
{% if options.voice_profiles %}
{% if options.voice_profile_options %}
<optgroup label="Saved mixes">
{% for name, data in options.voice_profiles %}
<option value="{{ name }}">{{ name }} ({{ data.language|upper }})</option>
{% for profile in options.voice_profile_options %}
<option value="{{ profile.name }}" data-language="{{ profile.language }}" data-formula="{{ profile.formula|e }}">{{ profile.name }} {% if profile.language %}({{ profile.language|upper }}){% endif %}</option>
{% endfor %}
</optgroup>
{% endif %}
@@ -64,7 +64,7 @@
</div>
</div>
<div class="grid">
<div class="field">
<div class="field field--full">
<label for="source_text">Or paste text directly</label>
<textarea id="source_text" name="source_text" rows="12" placeholder="Drop some text here if you don't have a file handy..." data-role="source-text"></textarea>
</div>
@@ -79,7 +79,7 @@
</div>
<pre class="text-preview__body" data-role="preview-body">Paste text to see a live preview and character count.</pre>
</div>
<div class="field" style="justify-content: flex-end;">
<div class="field field--actions">
<button type="submit" class="button">Queue conversion</button>
</div>
</div>
+30 -8
View File
@@ -30,6 +30,15 @@
{% endfor %}
</select>
</div>
<div class="field">
<label for="default_voice">Default voice</label>
<select id="default_voice" name="default_voice">
{% for voice in options.voices %}
<option value="{{ voice }}" {% if settings.default_voice == voice %}selected{% endif %}>{{ voice }}</option>
{% endfor %}
</select>
<p class="hint">Used when “Standard voice” is selected on the dashboard.</p>
</div>
<div class="field">
<label for="save_mode">Save location</label>
<select id="save_mode" name="save_mode">
@@ -43,14 +52,27 @@
<fieldset class="settings__section">
<legend>Processing</legend>
<div class="field field--inline">
<label class="tag"><input type="checkbox" name="replace_single_newlines" value="true" {% if settings.replace_single_newlines %}checked{% endif %}> Replace single newlines</label>
<label class="tag"><input type="checkbox" name="use_gpu" value="true" {% if settings.use_gpu %}checked{% endif %}> Use GPU (when available)</label>
</div>
<div class="field field--inline">
<label class="tag"><input type="checkbox" name="save_chapters_separately" value="true" {% if settings.save_chapters_separately %}checked{% endif %}> Save each chapter separately</label>
<label class="tag"><input type="checkbox" name="merge_chapters_at_end" value="true" {% if settings.merge_chapters_at_end %}checked{% endif %}> Also create merged audiobook</label>
<label class="tag"><input type="checkbox" name="save_as_project" value="true" {% if settings.save_as_project %}checked{% endif %}> Save as project with metadata</label>
<div class="field field--choices">
<label class="toggle-pill">
<input type="checkbox" name="replace_single_newlines" value="true" {% if settings.replace_single_newlines %}checked{% endif %}>
<span>Replace single newlines</span>
</label>
<label class="toggle-pill">
<input type="checkbox" name="use_gpu" value="true" {% if settings.use_gpu %}checked{% endif %}>
<span>Use GPU (when available)</span>
</label>
<label class="toggle-pill">
<input type="checkbox" name="save_chapters_separately" value="true" {% if settings.save_chapters_separately %}checked{% endif %}>
<span>Save each chapter separately</span>
</label>
<label class="toggle-pill">
<input type="checkbox" name="merge_chapters_at_end" value="true" {% if settings.merge_chapters_at_end %}checked{% endif %}>
<span>Also create merged audiobook</span>
</label>
<label class="toggle-pill">
<input type="checkbox" name="save_as_project" value="true" {% if settings.save_as_project %}checked{% endif %}>
<span>Save as project with metadata</span>
</label>
</div>
<div class="field">
<label for="separate_chapters_format">Separate chapter format</label>