From dc4eec2e9e944d29003f542bcf483142397f0c33 Mon Sep 17 00:00:00 2001
From: Lucas Winther
Date: Tue, 14 Jul 2026 20:38:25 +0200
Subject: [PATCH] Describe clearly you don't need to download models on the
server.
---
docs/Decisions.md | 4 ++++
src/App.tsx | 1 +
src/components/ModelPicker.tsx | 16 +++++++++++++++-
src/index.css | 5 +++++
4 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/docs/Decisions.md b/docs/Decisions.md
index 1e0e81b..9c74b02 100644
--- a/docs/Decisions.md
+++ b/docs/Decisions.md
@@ -290,3 +290,7 @@ starts the weight download. Weights load exactly when they are needed or asked f
(`loadStarted`, progress); the next load starts from clean progress. The explicit
download is a full pipeline load, so it also warms up inference and surfaces the
"Running on …" backend badge.
+**Amendment (2026-07-14):** while the engine toggle is on "server" (signed in,
+available), `ModelPicker` states explicitly that nothing is downloaded to the
+device; the Download button stays (with a matching tooltip) for on-device /
+offline preparation.
diff --git a/src/App.tsx b/src/App.tsx
index e448c9e..5532f0d 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -644,6 +644,7 @@ export function App() {
disabled={busy || liveActive}
onDownloadSelected={handleDownloadModel}
downloading={loadStarted && !modelReady}
+ serverEngine={serverSelected}
/>
{model?.multilingual && (
diff --git a/src/components/ModelPicker.tsx b/src/components/ModelPicker.tsx
index 3771972..61834b1 100644
--- a/src/components/ModelPicker.tsx
+++ b/src/components/ModelPicker.tsx
@@ -23,6 +23,8 @@ interface ModelPickerProps {
onDownloadSelected: () => void;
/** True while a model load/download is in flight. */
downloading: boolean;
+ /** True when transcription will run on the server — no download needed (D-020). */
+ serverEngine: boolean;
}
const DEVICE_OPTIONS: readonly { value: DevicePreference; label: string }[] = [
@@ -56,6 +58,7 @@ export function ModelPicker({
disabled = false,
onDownloadSelected,
downloading,
+ serverEngine,
}: ModelPickerProps) {
// Size estimates depend on the dtype the worker will pick, which depends on
// the device. Until the worker has reported one, assume WASM unless the
@@ -116,6 +119,13 @@ export function ModelPicker({
Model switching is disabled while a transcription is running.
)}
+ {serverEngine && (
+
+ Transcription is set to run on the server — the selected model runs
+ there, so nothing is downloaded to this device. Downloading is only
+ useful if you plan to transcribe on-device or offline.
+
+ )}
0 ? " offline-status-ready" : ""}`}
>
@@ -164,7 +174,11 @@ export function ModelPicker({
type="button"
className="model-download-button"
disabled={disabled || downloading}
- title="Download this model now so it is available offline. Otherwise it downloads automatically when an on-device transcription starts."
+ title={
+ serverEngine
+ ? "Not needed while transcribing on the server — download only to prepare on-device or offline use."
+ : "Download this model now so it is available offline. Otherwise it downloads automatically when an on-device transcription starts."
+ }
onClick={onDownloadSelected}
>
{downloading ? "Downloading…" : "Download"}
diff --git a/src/index.css b/src/index.css
index 10eff78..e32f36c 100644
--- a/src/index.css
+++ b/src/index.css
@@ -207,6 +207,11 @@ body {
font-size: 0.85rem;
}
+/* Server engine active — no model download needed on this device (D-020). */
+.server-engine-hint {
+ color: #9ad6ae;
+}
+
.device-select,
.transcription-options label {
display: flex;