feat(ui): speaker diarization download cards in Settings > Hardware

This commit is contained in:
iamdoubz committed 2026-07-11 00:23:19 -05:00
1 parent 5260a4240b
commit e082f99f32
1 file changed
+60
+60
View File
@@ -879,6 +879,66 @@
{/each}
</ul>
<h4>Speaker diarization</h4>
<p class="muted">
Install both models to have finished recordings separated by speaker (Speaker 1, Speaker
2, …) instead of one running transcript. Runs fully offline, once per meeting after it
stops. Without them, every line is attributed to a single speaker.
</p>
<ul class="models">
{#each settings.diarizationModels as m (m.id)}
{@const downloading = m.id in settings.downloadProgress}
{@const pct = progressPct(m.id)}
<li class="model" class:active={m.installed}>
<div class="model-info">
<span class="name">{m.label}</span>
<span class="meta">
{fmtBytes(m.size_mb)}
{#if m.installed}
<span class="badge ok"><Check size={11} aria-hidden="true" /> Installed</span>
{/if}
</span>
{#if downloading}
<div
class="progress"
role="progressbar"
aria-label="Downloading {m.label}"
aria-valuenow={pct ?? undefined}
aria-valuemin={0}
aria-valuemax={100}
>
<div
class="progress-fill"
class:indeterminate={pct === null}
style={pct !== null ? `width: ${pct}%` : ""}
></div>
</div>
<span class="muted progress-label"
>Downloading… {pct !== null ? `${pct}%` : ""}</span
>
{/if}
</div>
<div class="model-actions">
{#if downloading}
<!-- no actions while a download is in flight -->
{:else if m.installed}
<button
class="icon-btn danger"
title="Remove"
onclick={() => settings.removeDiarizationModel(m.id)}
>
<Trash2 size={13} aria-hidden="true" /> Remove
</button>
{:else}
<button class="icon-btn" onclick={() => settings.downloadDiarizationModel(m.id)}>
<Download size={13} aria-hidden="true" /> Download
</button>
{/if}
</div>
</li>
{/each}
</ul>
<h4>Transcription Language</h4>
{#if activeModel?.multilingual}
<label