Spaces:
Running
Running
File size: 10,288 Bytes
3d610ae 3e2f466 3d610ae | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | <!doctype html>
<html lang="da">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="description"
content="Lokal dansk talegenkendelse i browseren med Ekko v1 Tiny."
/>
<meta name="theme-color" content="#f3f4f0" />
<title>Ekko v1 Tiny | Rye AI</title>
<link rel="icon" href="data:," />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="styles.css?v=20260926-9" />
</head>
<body>
<canvas id="ambient" aria-hidden="true"></canvas>
<header class="topbar">
<a class="brand" href="https://rye-ai.com" target="_blank" rel="noreferrer">
<span class="brand-mark">Rye AI</span>
<span class="brand-divider">/</span>
<span class="product-name">EKKO-TINY-V1</span>
</a>
<div class="topbar-actions">
<button class="circle-button theme-button" id="themeButton" type="button" aria-label="Slå mørk tilstand til" title="Slå mørk tilstand til" aria-pressed="false">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20.2 15.5A8.5 8.5 0 0 1 8.5 3.8 8.5 8.5 0 1 0 20.2 15.5Z" /></svg>
</button>
<button class="circle-button" id="infoButton" aria-label="Om demoen" title="Om demoen">
<span aria-hidden="true">i</span>
</button>
<button class="circle-button sliders" id="settingsButton" aria-label="Indstillinger" title="Indstillinger">
<span aria-hidden="true"></span>
</button>
</div>
</header>
<main class="scene" id="app">
<section class="intro" aria-labelledby="pageTitle">
<h1 id="pageTitle">Sig det til Ekko</h1>
<p class="intro-copy">
Dansk tale til tekst - direkte i din browser.<br />
Ingen lyd eller tekst forlader din enhed.
</p>
</section>
<section class="workspace" aria-label="Transskription">
<div class="model-status" aria-live="polite">
<span class="status-dot" id="statusDot"></span>
<span id="statusText">Forbereder lokal model</span>
<span id="statusDetail"></span>
</div>
<div class="progress-track" id="progressTrack" aria-hidden="true">
<span id="progressBar"></span>
</div>
<div id="livePanel" class="mode-panel">
<button class="stage" id="recordButton" disabled aria-label="Begynd optagelse">
<span class="ring ring-1" aria-hidden="true"></span>
<span class="orb" id="orb" aria-hidden="true"></span>
</button>
<div class="stage-copy">
<p class="stage-label" id="recordLabel">Modellen indlæses</p>
<p class="stage-note">Tekst vises løbende, mens du taler</p>
</div>
</div>
</section>
<section class="transcript" id="transcriptPanel" aria-labelledby="transcriptTitle">
<h2 id="transcriptTitle" hidden>Transskription</h2>
<div class="empty-transcript" id="emptyTranscript">
Din transskription vises her.
</div>
<ol class="segments" id="segments" aria-live="polite"></ol>
</section>
<div class="transcript-heading" aria-label="Transskriptionshandlinger">
<div class="transcript-actions">
<button class="icon-button" id="copyButton" disabled title="Kopiér tekst" aria-label="Kopiér tekst">⧉</button>
<button class="icon-button" id="downloadButton" disabled title="Hent JSON" aria-label="Hent JSON">↓</button>
<button class="icon-button" id="clearButton" disabled title="Ryd" aria-label="Ryd">×</button>
</div>
</div>
</main>
<footer>
<span>Ekko v1 Tiny + PnC · int8 · CPU/WASM</span>
<nav class="footer-links" aria-label="Modeller, kildekode og Rye AI">
<a class="footer-chip footer-chip--tiny" href="https://huggingface.co/RyeAI/ekko-v1-tiny" target="_blank" rel="noreferrer" aria-label="Ekko v1 Tiny på Hugging Face">
<img src="huggingface-logo.svg" width="16" height="16" alt="" aria-hidden="true" />
<span>Tiny</span>
</a>
<a class="footer-chip footer-chip--pnc" href="https://huggingface.co/RyeAI/ekko-pnc" target="_blank" rel="noreferrer" aria-label="Ekko PnC på Hugging Face">
<img src="huggingface-logo.svg" width="16" height="16" alt="" aria-hidden="true" />
<span>PnC</span>
</a>
<a class="footer-chip footer-chip--github" href="https://github.com/Rye-A1/ekko-danish-stt" target="_blank" rel="noreferrer" aria-label="Ekko kildekode på GitHub">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M9 19c-4.3 1.4-4.3-2.5-6-3m12 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 19 4.77 5.07 5.07 0 0 0 18.91 1S17.73.65 15 2.48a13.38 13.38 0 0 0-7 0C5.27.65 4.09 1 4.09 1A5.07 5.07 0 0 0 4 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 8 18.13V22" />
</svg>
<span>GitHub</span>
</a>
<a class="footer-chip footer-chip--linkedin" href="https://www.linkedin.com/company/rye-a1" target="_blank" rel="noreferrer" aria-label="Rye AI på LinkedIn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M8 11v5M8 8v.01M12 16v-5M16 16v-3a2 2 0 1 0-4 0M3 7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v10a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V7" />
</svg>
<span>LinkedIn</span>
</a>
</nav>
</footer>
<dialog id="microphoneDialog" aria-labelledby="microphoneTitle" aria-describedby="microphoneDescription">
<div class="microphone-dialog-content">
<button class="dialog-close" id="microphoneCloseButton" type="button" aria-label="Luk">×</button>
<div class="microphone-icon" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">
<rect x="9" y="2" width="6" height="12" rx="3" />
<path d="M5 10a7 7 0 0 0 14 0M12 17v5m-4 0h8" />
</svg>
</div>
<p class="section-label">FØR DU BEGYNDER</p>
<h2 id="microphoneTitle">Giv Ekko adgang til din mikrofon</h2>
<p id="microphoneDescription">Mikrofonen bruges kun, mens du optager. Lyd og tekst behandles på din enhed, og lyd gemmes ikke.</p>
<p class="microphone-browser-note" id="microphoneHelp">Når du fortsætter, beder browseren dig om at vælge Tillad.</p>
<div class="microphone-actions">
<button class="microphone-secondary" id="microphoneCancelButton" type="button">Ikke nu</button>
<button class="microphone-primary" id="microphoneContinueButton" type="button">Fortsæt</button>
</div>
</div>
</dialog>
<dialog id="infoDialog">
<form method="dialog">
<button class="dialog-close" aria-label="Luk">×</button>
<p class="section-label">OM DEMOEN</p>
<h2>Alt sker lokalt</h2>
<p>
Modellen hentes ved første besøg og kører derefter i browserens
WebAssembly-runtime. Ingen lyd, tekst eller brugsdata forlader din browser.
</p>
<dl>
<div>
<dt>Talegenkendelse</dt>
<dd>
<a class="model-link" href="https://huggingface.co/RyeAI/ekko-v1-tiny" target="_blank" rel="noreferrer">
Ekko v1 Tiny int8
<svg class="lucide lucide-chevron-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="m9 18 6-6-6-6" />
</svg>
</a>
</dd>
</div>
<div>
<dt>Tegnsætning</dt>
<dd>
<a class="model-link" href="https://huggingface.co/RyeAI/ekko-pnc" target="_blank" rel="noreferrer">
Ekko PnC v2 int8
<svg class="lucide lucide-chevron-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="m9 18 6-6-6-6" />
</svg>
</a>
</dd>
</div>
<div><dt>Runtime</dt><dd>sherpa-onnx + ONNX Runtime</dd></div>
<div><dt>Modelstørrelse</dt><dd>ca. 153 MiB samlet</dd></div>
<div><dt>Kildekode</dt><dd><a class="model-link" href="https://github.com/Rye-A1/ekko-danish-stt" target="_blank" rel="noreferrer">Ekko på GitHub</a></dd></div>
</dl>
</form>
</dialog>
<dialog id="settingsDialog">
<form method="dialog">
<button class="dialog-close" aria-label="Luk">×</button>
<p class="section-label">INDSTILLINGER</p>
<h2>Transskription</h2>
<div class="setting-row">
<span><strong>Tegnsætning</strong><small id="pncStatus">Hentes i baggrunden</small></span>
</div>
<section class="history-section" aria-labelledby="historyTitle">
<div class="history-title-row">
<div>
<p class="section-label">HISTORIK</p>
<h2 id="historyTitle">Tidligere samtaler</h2>
</div>
<button class="history-clear" id="clearHistoryButton" type="button" disabled>Ryd alle</button>
</div>
<p>Kun transskriptioner gemmes i denne browser. Lyd gemmes ikke.</p>
<p class="history-empty" id="historyEmpty">Ingen gemte samtaler endnu.</p>
<ol class="history-list" id="historyList" hidden></ol>
</section>
</form>
</dialog>
<script src="app.js?v=20261001-3" type="module"></script>
</body>
</html>
|