Settings

{#if openSection === 'audio'}

Microphone

{#if audioDevicesError}

{audioDevicesError}

{:else if audioDevices.length === 0}

No input devices detected. Check that a microphone is connected and PulseAudio/PipeWire is running.

{:else}

Auto mode tries the system default first, then any other real input. Speaker-monitor sources (loopback) are skipped because they record system audio rather than the microphone. If dictation is silent, pick the device explicitly here.

{/if}
{/if}
{#if openSection === 'vocabulary'}

Words and phrases the AI cleanup pass should preserve exactly. Useful for medication names, place names, jargon, names of people in your support network, anything Whisper tends to mishear.

{ if (e.key === 'Enter') addVocabTerm(); }} class="flex-1 bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(232,168,124,0.1)]" /> { if (e.key === 'Enter') addVocabTerm(); }} class="flex-1 bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(232,168,124,0.1)]" />
{#if vocabularyError}

{vocabularyError}

{/if} {#if vocabulary.length === 0}

No terms yet. Add one above.

{:else}
    {#each vocabulary as entry (entry.id)}
  • {entry.term}
    {#if entry.note}
    {entry.note}
    {/if}
  • {/each}
{/if}
{/if}
{#if openSection === 'transcription'}

Engine

{settings.engine === "whisper" ? "Whisper with the currently shipped English-only models in this build" : "Parakeet CTC 0.6B — English-only, fast when the model is installed"}

Format Mode

{settings.formatMode === "Raw" ? "Exact Whisper output, no formatting" : settings.formatMode === "Clean" ? "Grouped into paragraphs, punctuation tidied" : "Structured with lists, headings, and sections"}

{#if settings.engine === "whisper"}

Whisper Model

{modelDescriptions[settings.modelSize]}

{#if isModelLoaded(settings.modelSize)} Model loaded {:else if isModelDownloaded(settings.modelSize)} Downloaded {:else if downloadingModel === settings.modelSize.toLowerCase()} {downloadProgress}% downloading... {:else} {/if}
{:else}

Parakeet Model

Parakeet CTC 0.6B (int8) — ~613MB, near-instant transcription

{#if parakeetOk} Model loaded {:else if parakeetDownloaded} Downloaded {:else if parakeetDownloading} {parakeetProgress}% downloading... {:else} {/if}
{/if}

Compute Device

{#if hasGpuAcceleration()}

Only accelerators built into this binary are shown here.

{:else}
This build is CPU-only. GPU controls appear in GPU-enabled builds.
{/if}

Language

{#if currentModelIsEnglishOnly()} {:else} {/if} {#if settings.language === "en"} {/if}

{#if currentModelIsEnglishOnly()} The selected model only supports English in this build. {:else} Auto-detect is only meaningful with multilingual models. {/if}

{/if}
{#if openSection === 'processing'}
{/if}
{#if openSection === 'ai'}

Local LLM for smart task extraction, transcript cleanup, and formatting. Runs 100% offline.

Coming soon

AI-powered cleanup and smart extraction are being rebuilt with a faster engine. Task extraction currently uses rule-based matching, which runs automatically after each recording.

{/if}
{#if openSection === 'profiles'}

Custom vocabulary to improve transcription accuracy

{#if showProfiles}
{#each profiles as profile, i}
{profile.name} {profileWordCount(profile.words)} words
{#if editingProfile === i}
{/if}
{/each} {#if showNewProfile}
e.key === "Enter" && createProfile()} data-no-transition />
{:else} {/if}
{/if}

Structured formats for dictation sessions

{#if showTemplates}
{#each templates as template, i}
{template.name} {template.sections.length} sections
{#if editingTemplate === i}
{/if}
{/each} {#if showNewTemplate}
e.key === "Enter" && createTemplate()} data-no-transition />
{:else} {/if}
{/if}
{/if}
{#if openSection === 'output'}
{#if settings.saveAudio}

Output Folder

{outputFolderPreview}

{#if settings.outputFolder} {/if}
{/if}
{/if}
{#if openSection === 'hotkey'}

Toggle recording from anywhere. Click to change.

{/if}
{#if openSection === 'appearance'}

Theme

Zone

Font Size {settings.fontSize}px

{/if}
{#if openSection === 'accessibility'}
{/if}
{#if openSection === 'about'}
{engineStatus}
{#each [ "100% offline — all processing on your machine", "No Python required — compiled Whisper engine", "No cloud — audio never leaves your computer", "No accounts — no sign-up, no tracking", "No telemetry — zero data collection", ] as item}

{item}

{/each}

Kon v1.0 · Powered by whisper.cpp · Built by CORBEL Ltd

Diagnostics

If something goes wrong, generate a diagnostic report to share with the developer. The report contains your settings, recent errors, any crash dumps, and the tail of the log file. Nothing is sent automatically — you preview it first, then choose copy or save.

{#if diagnosticReport} {/if}
{#if diagnosticReportError}

{diagnosticReportError}

{/if} {#if diagnosticReportSavedTo}

{diagnosticReportSavedTo}

{/if} {#if diagnosticReport}
Preview report ({diagnosticReport.length} chars)
{diagnosticReport}
{/if}
{/if}