Skip to content

Commit 2e684a3

Browse files
committed
Add Info modal
1 parent 06081aa commit 2e684a3

File tree

6 files changed

+143
-11
lines changed

6 files changed

+143
-11
lines changed

src/components/AudioManager.tsx

Lines changed: 128 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { Transcriber } from "../hooks/useTranscriber";
1414
import Progress from "./Progress";
1515
import AudioRecorder from "./AudioRecorder";
1616
import { t } from "i18next";
17-
import { useTranslation } from "react-i18next";
17+
import { Trans, useTranslation } from "react-i18next";
1818

1919
function titleCase(str: string) {
2020
str = str.toLowerCase();
@@ -215,6 +215,90 @@ export function AudioManager(props: { transcriber: Transcriber }) {
215215
</>
216216
)}
217217

218+
<InfoTile
219+
className='fixed bottom-4 right-28'
220+
icon={<InfoIcon />}
221+
title={t("manager.info_title")}
222+
content={
223+
<Trans i18nKey='manager.info_content'>
224+
Whisper-web is a small website to help you transcribe
225+
audio speech into text.
226+
<br />
227+
The first time you give it a file, it will download an
228+
open AI model and perform the transcription locally in
229+
your browser. This means that your audio file never
230+
leaves your device. It also means that the transcription
231+
will be slow or fail if your computer/smartphone is not
232+
powerful enough to perform it. In the settings (bottom
233+
right corner), you can pick among different models and
234+
various quantisation levels. A smaller model with a
235+
lower quantisation will be faster but make more
236+
mistakes. By default, Whisper-web uses small models but
237+
you can try a bigger one and see if it works on your
238+
device. For most languages, it is best to use{" "}
239+
<a
240+
className='underline'
241+
target='_blank'
242+
href='https://openai.com/index/whisper/'
243+
>
244+
OpenAI's official models
245+
</a>{" "}
246+
(Multilingual) but for Swedish or Norwegian, it is
247+
recommended to use versions that have been specifically
248+
trained for them. The Swedish models are called{" "}
249+
<a
250+
className='underline'
251+
target='_blank'
252+
href='https://huggingface.co/KBLab/kb-whisper-tiny'
253+
>
254+
KB-whisper
255+
</a>{" "}
256+
and have been trained by the{" "}
257+
<a
258+
className='underline'
259+
target='_blank'
260+
href='https://kb.se/samverkan-och-utveckling/nytt-fran-kb/nyheter-samverkan-och-utveckling/2025-02-20-valtranad-ai-modell-forvandlar-tal-till-text.html'
261+
>
262+
national library
263+
</a>{" "}
264+
on data from parliament debates and the Swedish public
265+
service. The Norwegian ones are named{" "}
266+
<a
267+
className='underline'
268+
target='_blank'
269+
href='https://huggingface.co/collections/NbAiLab/nb-whisper-65cb8322877f943912afcd9f'
270+
>
271+
nb-whisper
272+
</a>{" "}
273+
and have also been trained by the country's{" "}
274+
<a
275+
className='underline'
276+
target='_blank'
277+
href='https://arxiv.org/abs/2402.01917'
278+
>
279+
national library
280+
</a>
281+
. This project's source code is available on{" "}
282+
<a
283+
className='underline'
284+
target='_blank'
285+
href='https://github.com/PierreMesure/whisper-web'
286+
>
287+
Github
288+
</a>
289+
. Feel free to reuse or contribute to it. The website is
290+
hosted on{" "}
291+
<a
292+
className='underline'
293+
target='_blank'
294+
href='https://www.statichost.eu'
295+
>
296+
statichost.eu
297+
</a>
298+
, a privacy-friendly service to host static sites.
299+
</Trans>
300+
}
301+
/>
218302
<SettingsTile
219303
className='fixed bottom-4 right-4'
220304
transcriber={props.transcriber}
@@ -224,6 +308,36 @@ export function AudioManager(props: { transcriber: Transcriber }) {
224308
);
225309
}
226310

311+
function InfoTile(props: {
312+
icon: JSX.Element;
313+
className?: string;
314+
title: string;
315+
content: string | JSX.Element;
316+
}) {
317+
const [showModal, setShowModal] = useState(false);
318+
319+
const onClick = () => {
320+
setShowModal(true);
321+
};
322+
323+
const onClose = () => {
324+
setShowModal(false);
325+
};
326+
327+
return (
328+
<div className={props.className}>
329+
<Tile icon={props.icon} onClick={onClick} />
330+
<Modal
331+
show={showModal}
332+
submitEnabled={false}
333+
onClose={onClose}
334+
title={props.title}
335+
content={props.content}
336+
/>
337+
</div>
338+
);
339+
}
340+
227341
function SettingsTile(props: {
228342
icon: JSX.Element;
229343
className?: string;
@@ -511,7 +625,6 @@ function UrlModal(props: {
511625
onClose={props.onClose}
512626
submitText={t("manager.submit")}
513627
onSubmit={onSubmit}
514-
cacheSize={0}
515628
/>
516629
);
517630
}
@@ -641,7 +754,6 @@ function RecordModal(props: {
641754
submitText={t("manager.submit")}
642755
submitEnabled={audioBlob !== undefined}
643756
onSubmit={onSubmit}
644-
cacheSize={0}
645757
/>
646758
);
647759
}
@@ -708,7 +820,7 @@ function SettingsIcon() {
708820
xmlns='http://www.w3.org/2000/svg'
709821
fill='none'
710822
viewBox='0 0 24 24'
711-
strokeWidth='1.25'
823+
strokeWidth='1.75'
712824
stroke='currentColor'
713825
>
714826
<path
@@ -725,6 +837,18 @@ function SettingsIcon() {
725837
);
726838
}
727839

840+
function InfoIcon() {
841+
return (
842+
<svg
843+
xmlns='http://www.w3.org/2000/svg'
844+
viewBox='0 0 24 24'
845+
fill='currentColor'
846+
>
847+
<path d='M12 17q.425 0 .713-.288T13 16v-4q0-.425-.288-.712T12 11t-.712.288T11 12v4q0 .425.288.713T12 17m0-8q.425 0 .713-.288T13 8t-.288-.712T12 7t-.712.288T11 8t.288.713T12 9m0 13q-2.075 0-3.9-.788t-3.175-2.137T2.788 15.9T2 12t.788-3.9t2.137-3.175T8.1 2.788T12 2t3.9.788t3.175 2.137T21.213 8.1T22 12t-.788 3.9t-2.137 3.175t-3.175 2.138T12 22m0-2q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'></path>
848+
</svg>
849+
);
850+
}
851+
728852
function MicrophoneIcon() {
729853
return (
730854
<svg

src/components/modal/Modal.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import { Fragment, JSX } from "react";
55
export interface Props {
66
show: boolean;
77
onClose: () => void;
8-
onSubmit: () => void;
8+
onSubmit?: () => void;
99
submitText?: string;
1010
submitEnabled?: boolean;
1111
title: string | JSX.Element;
1212
content: string | JSX.Element;
13-
cacheSize: number;
13+
cacheSize?: number;
1414
}
1515

1616
export default function Modal({
@@ -62,7 +62,7 @@ export default function Modal({
6262
>
6363
{title}
6464
</DialogTitle>
65-
<div className='mt-3 text-sm text-gray-500'>
65+
<div className='modal-content mt-3 text-sm text-gray-500'>
6666
{content}
6767
</div>
6868

src/locale/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
"settings": "Settings",
2626
"gpu": "GPU",
2727
"gpu_disabled": "GPU (unsupported browser)",
28-
"clear_cache": "Clear cache"
28+
"clear_cache": "Clear cache",
29+
"info_title": "Whisper-web",
30+
"info_content": "Whisper-web is a small website to help you transcribe audio speech into text.<1></1><1></1>The first time you give it a file, it will download an open AI model and perform the transcription locally in your browser. This means that your audio file never leaves your device. It also means that the transcription will be slow or fail if your computer/smartphone is not powerful enough to perform it.<1></1><1></1>In the settings (bottom right corner), you can pick among different models and various quantisation levels. A smaller model with a lower quantisation will be faster but make more mistakes. By default, Whisper-web uses small models but you can try a bigger one and see if it works on your device.<1></1><1></1>For most languages, it is best to use <4>OpenAI's official models</4> (Multilingual) but for Swedish or Norwegian, it is recommended to use versions that have been specifically trained for them.<1></1><1></1>The Swedish models are called <8>KB-whisper</8> and have been trained by the <12>national library</12> on data from parliament debates and the Swedish public service. The Norwegian ones are named <16>nb-whisper</16> and have also been trained by the country's <20>national library</20>.<1></1><1></1>This project's source code is available on <23>Github</23>. Feel free to reuse or contribute to it.<1></1><1></1>The website is hosted on <26>statichost.eu</26>, a privacy-friendly service to host static sites."
2931
},
3032
"recorder": {
3133
"start_recording": "Start recording",

src/locale/es.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
"settings": "Configuraciones",
2626
"gpu": "GPU",
2727
"gpu_disabled": "GPU (navegador no compatible)",
28-
"clear_cache": "Borrar caché"
28+
"clear_cache": "Borrar caché",
29+
"info_title": "Whisper-web",
30+
"info_content": "Whisper-web es un pequeño sitio web para ayudarte a transcribir audio a texto.<1></1><1></1>La primera vez que le das un archivo, descargará un modelo de IA abierta y realizará la transcripción localmente en tu navegador. Esto significa que tu archivo de audio nunca saldrá de tu dispositivo. También significa que la transcripción será lenta o fallará si tu computadora/teléfono inteligente no es lo suficientemente potente para realizarla.<1></1><1></1>En la configuración (esquina inferior derecha), puedes elegir entre diferentes modelos y varios niveles de cuantización. Un modelo más pequeño con menor cuantización será más rápido pero cometerá más errores. Por defecto, Whisper-web utiliza modelos pequeños, pero puedes probar uno más grande y ver si funciona en tu dispositivo.<1></1><1></1>Para la mayoría de los idiomas, es mejor usar <4>los modelos oficiales de OpenAI</4> (Multilingües), pero para el sueco o el noruego se recomienda usar versiones que han sido entrenadas específicamente para ellos.<1></1><1></1>Los modelos suecos se llaman <8>KB-whisper</8> y han sido entrenados por la <12>biblioteca nacional</12> con datos de debates parlamentarios y el servicio público sueco. Los noruegos se llaman <16>nb-whisper</16> y también han sido entrenados por la <20>biblioteca nacional</20> del país.<1></1><1></1>El código fuente de este proyecto está disponible en <23>Github</23>. Siéntete libre de reutilizarlo o contribuir a él.<1></1><1></1>El sitio web está alojado en <26>statichost.eu</26>, un servicio amigable con la privacidad para alojar sitios estáticos."
2931
},
3032
"recorder": {
3133
"start_recording": "Iniciar grabación",

src/locale/no.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
"settings": "Innstillinger",
2626
"gpu": "GPU",
2727
"gpu_disabled": "GPU (ikke kompatibel med nettleseren)",
28-
"clear_cache": "Tøm hurtigbuffer"
28+
"clear_cache": "Tøm hurtigbuffer",
29+
"info_title": "Whisper-web",
30+
"info_content": "Whisper-web er et lite nettsted for å hjelpe deg med å transkribere lydtale til tekst.<1></1><1></1>Første gang du gir det en fil, vil det laste ned en åpen AI-modell og utføre transkripsjonen lokalt i nettleseren din. Dette betyr at lydfilen din aldri forlater enheten din. Det betyr også at transkripsjonen vil gå sakte eller mislykkes hvis datamaskinen/smarttelefonen din ikke er kraftig nok til å utføre den.<1></1><1></1>I innstillingene (nede i høyre hjørne) kan du velge blant forskjellige modeller og ulike kvantiseringsnivåer. En mindre modell med lavere kvantisering vil være raskere, men gjøre flere feil. Som standard bruker Whisper-web små modeller, men du kan prøve en større og se om det fungerer på enheten din.<1></1><1></1>For de fleste språk er det best å bruke <4>OpenAIs offisielle modeller</4> (Multilingual), men for svensk eller norsk anbefales det å bruke versjoner som har blitt spesifikt trent for dem.<1></1><1></1>De svenske modellene kalles <8>KB-whisper</8> og har blitt trent av <12>det nasjonale biblioteket</12> på data fra parlamentsdebatter og svensk offentlig tjeneste. De norske kalles <16>nb-whisper</16> og har også blitt trent av landets <20>nasjonalbibliotek</20>.<1></1><1></1>Prosjektets kildekode er tilgjengelig på <23>Github</23>. Føl deg fri til å gjenbruke eller bidra til det.<1></1><1></1>Nettstedet er vert på <26>statichost.eu</26>, en personvernvennlig tjeneste for å hoste statiske sider."
2931
},
3032
"recorder": {
3133
"start_recording": "Start opptak",

src/locale/sv.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
"settings": "Inställningar",
2626
"gpu": "GPU",
2727
"gpu_disabled": "GPU (ej kompatibel med webbläsaren)",
28-
"clear_cache": "Rensa cache"
28+
"clear_cache": "Rensa cache",
29+
"info_title": "Whisper-web",
30+
"info_content": "Whisper-web är en liten tjänst för att transkribera ljudtal till text.<1></1><1></1>Första gången du anger en ljudfil kommer en öppen AI-modell att laddas ner så transkriptionen kan ske lokalt i din webbläsare. På detta sätt lämnar din ljudfil aldrig din enhet. Det betyder också att transkriptionen kan bli långsam eller misslyckas om din dator/smartphone inte är tillräckligt kraftfull.<1></1><1></1>I inställningarna (nere till höger) kan du välja mellan olika modeller och olika kvantiseringsnivåer. En mindre modell med lägre kvantisering kommer att vara snabbare men göra fler språkmisstag. Som standard använder Whisper-web små modeller men du kan prova en större och se om det fungerar på din enhet.<1></1><1></1>För de flesta språk är det bäst att använda <4>OpenAI:s officiella modeller</4> (Multilingual) men för svenska eller norska rekommenderas särskilda versioner som har tränats specifikt för dem.<1></1><1></1>De svenska modellerna heter <8>KB-whisper</8> och har tränats av <12>Kungliga biblioteket</12> på ljud från riksdagsdebatter, SVT m.fl. De norska heter <16>nb-whisper</16> och har också tränats av landets <20>nationalbibliotek</20>.<1></1><1></1>Projektets källkod finns tillgänglig på <23>Github</23>. Du får gärna återanvända eller bidra till den.<1></1><1></1>Webbplatsen hostas på <26>statichost.eu</26>, en integritetsvänlig tjänst för statiska webbsidor."
2931
},
3032
"recorder": {
3133
"start_recording": "Starta inspelning",

0 commit comments

Comments
 (0)