Skip to content

Commit 38b3caf

Browse files
hi-ogawa-agentOpenCode
andauthored
feat: add direct model download links (#64)
Co-authored-by: OpenCode <noreply@opencode.ai>
1 parent 0c18517 commit 38b3caf

2 files changed

Lines changed: 29 additions & 25 deletions

File tree

packages/app/src/app.tsx

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { AUDIO_SAMPLE_RATE } from "./lib/audio/constants";
66
import { decodeAudioFile } from "./lib/audio/decode";
77
import {
88
isModelFilename,
9+
modelAssetUrl,
910
requiredModelFiles,
1011
type ModelArtifact,
1112
type ModelFilename,
@@ -373,16 +374,7 @@ export function App() {
373374
3. Add models
374375
</h2>
375376
<p className="text-muted mb-5.5 leading-relaxed">
376-
Download model assets from the{" "}
377-
<a
378-
className="text-primary hover:text-accent font-semibold underline underline-offset-3"
379-
href="https://github.com/hi-ogawa/demucs-onnx/releases"
380-
target="_blank"
381-
rel="noreferrer"
382-
>
383-
GitHub Releases page
384-
</a>
385-
, then select the required files.
377+
Download each required model, then select the downloaded file.
386378
</p>
387379
<div className="grid gap-2.5">
388380
{requiredFiles.map((filename) => (
@@ -525,8 +517,8 @@ function ModelFileSlot({
525517
}) {
526518
return (
527519
<div data-testid="model-file-slot">
528-
<label
529-
className={`flex min-h-13 cursor-pointer items-center gap-3 rounded-md border px-4 py-3 transition-colors ${
520+
<div
521+
className={`flex min-h-13 items-center gap-3 rounded-md border px-4 py-3 transition-colors ${
530522
ready
531523
? "border-success-border bg-success-surface hover:bg-success-surface-hover"
532524
: "border-border-strong bg-surface-muted hover:border-drop-border-hover hover:bg-drop-surface-hover border-dashed"
@@ -545,20 +537,26 @@ function ModelFileSlot({
545537
<code className="text-foreground min-w-0 flex-1 overflow-hidden text-sm font-semibold text-ellipsis">
546538
{filename}
547539
</code>
548-
<span className="text-primary-strong shrink-0 text-sm font-bold">
540+
<a
541+
className="text-primary hover:text-accent shrink-0 text-sm font-semibold underline underline-offset-3"
542+
href={modelAssetUrl(filename)}
543+
>
544+
Download
545+
</a>
546+
<label className="text-primary-strong shrink-0 cursor-pointer text-sm font-bold">
549547
{ready ? "Ready" : "Choose file"}
550-
</span>
551-
<input
552-
className="sr-only"
553-
type="file"
554-
aria-label={`Select ${filename}`}
555-
accept={filename.endsWith(".onnx") ? ".onnx" : ".bin"}
556-
onChange={(event) => {
557-
onSelect([...(event.target.files ?? [])]);
558-
event.target.value = "";
559-
}}
560-
/>
561-
</label>
548+
<input
549+
className="sr-only"
550+
type="file"
551+
aria-label={`Select ${filename}`}
552+
accept={filename.endsWith(".onnx") ? ".onnx" : ".bin"}
553+
onChange={(event) => {
554+
onSelect([...(event.target.files ?? [])]);
555+
event.target.value = "";
556+
}}
557+
/>
558+
</label>
559+
</div>
562560
{error && <p className="text-danger mt-1.5 text-sm">{error}</p>}
563561
</div>
564562
);

packages/app/src/lib/audio/models.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ const MODEL_FILENAMES = [
77
"htdemucs_ft_vocals.onnx",
88
] as const;
99

10+
const MODEL_RELEASE_TAG = "models-2026-07-11";
11+
1012
export type ModelFilename = (typeof MODEL_FILENAMES)[number];
1113

1214
export type ModelArtifact = { name: ModelFilename; blob: Blob };
@@ -16,6 +18,10 @@ export function isModelFilename(name: string): name is ModelFilename {
1618
return MODEL_FILENAMES.includes(name as ModelFilename);
1719
}
1820

21+
export function modelAssetUrl(filename: ModelFilename): string {
22+
return `https://github.com/hi-ogawa/demucs-onnx/releases/download/${MODEL_RELEASE_TAG}/${filename}`;
23+
}
24+
1925
export function requiredModelFiles(
2026
model: string,
2127
source?: string,

0 commit comments

Comments
 (0)