Theme
Font size
Hotkey
Microphone
{audioDevicesError}
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. If dictation is silent, pick the device explicitly here.
{/if}Language
{#if currentModelIsEnglishOnly()} The selected model only supports English in this build. {:else} Auto-detect is only meaningful with multilingual models. {/if}
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"}
Post-processing
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. Vocabulary is scoped to a profile, switch profiles to swap whole vocabularies.
Active Profile
Profile Name
{ if (e.key === 'Enter') e.target.blur(); }} class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text min-w-[280px] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]" />Initial Prompt
Passed to Whisper before every transcription in this profile. Used as a biasing prompt, keep it short and topic-specific (names, domain terms, tone cues).
Terms
{vocabularyErrorDetail}
No terms yet. Add one above.
{:else}Loading profiles…
{/if}Whisper Model
{modelDescriptions[settings.modelSize]}
Parakeet Model
Parakeet CTC 0.6B (int8). ~613MB, near-instant transcription
AI Model Tier
{LLM_MODELS.find((model) => model.id === selectedLlmModelId())?.subtitle || "Local model"}
{llmStatus}
{#if llmTestHint}{llmTestHint}
{/if}Recommended for this machine: {LLM_MODELS.find((model) => model.id === (settings.llmModelId || "qwen3_5_4b"))?.subtitle || "Qwen3.5 4B"} {#if systemInfo} · {Math.round((systemInfo.ram_mb || 0) / 1024)} GB RAM detected {/if}
How the Tasks page surfaces progress. Always additive.
AI use
The local LLM is used for transcript cleanup and task extraction only — both run fully offline after download. No voice, transcript, or task data is sent to any server. See privacy-and-ai-use.md for details.
Activation log
This log lives on your device only. We never send it anywhere. It records anonymous milestones (first capture, first export, first task extracted) so you can see your own usage shape.
{#if loadingEvents}Loading…
{:else if eventsError}Couldn't load activation log.
{:else if activationEvents.length === 0}No activation events recorded yet.
{:else}| Kind | When |
|---|---|
| {ev.kind} | {formatTimestamp(ev.occurred_at)} |
Data location
All transcripts, models, and settings are stored in your OS app-data directory. No files are written outside that path.
Feature Tier
{settings.aiTier === "off" ? "No local LLM calls. Lumotia falls back to the existing rule-based path." : settings.aiTier === "cleanup" ? "Use the local model for transcript cleanup and formatting." : "Use the local model for cleanup, task extraction, and task breakdown."}
Cleanup preset
{#if settings.llmPromptPreset === "email"} Formats output as an email paragraph, tight sentences, no markdown, no auto-added greeting or signoff. {:else if settings.llmPromptPreset === "notes"} Formats action items as a bullet list led by imperative verbs; keeps prose informational sentences as prose. {:else if settings.llmPromptPreset === "code"} Preserves technical terms, variable names, file paths, and symbols exactly as spoken. No translation of identifiers. {:else} No preset, the active profile's prompt governs tone alone. {/if}
GPU concurrency
{#if settings.aiGpuConcurrency === "sequential"} On tight-VRAM cards (≤6 GB), loading Whisper + LLM together OOMs. Sequential mode frees the other model before loading; adds a small reload pause between transcribe and cleanup. {:else} Both models stay resident in GPU memory. Faster transitions, but needs enough VRAM to hold both at once. {/if}
Compute Device
{#if hasGpuAcceleration()}Only accelerators built into this binary are shown here.
{:else}All off by default. Rituals only appear when you ask for them.
ADHD sleep inertia is intense for the first 30–45 minutes after waking. Pick a time when you're genuinely ready to decide.
Uses your operating system's built-in voices. No audio leaves the machine.
{ttsVoicesError}
No additional voices reported by the system synth. Install extra voices through your OS accessibility settings.
{/if}Apps to watch (comma-separated)
{ const raw = event.currentTarget.value; settings.meetingAutoCaptureApps = raw .split(",") .map((entry) => entry.trim().toLowerCase()) .filter((entry) => entry.length > 0); }} />Output Folder
{outputFolderPreview}
Toggle recording from anywhere. Click to change.
Theme
Zone
Font Size {settings.fontSize}px
{$_("settings.language")}
{$_("settings.languageDescription")}
{item}
Lumotia 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.
{diagnosticReportErrorDetail}
{diagnosticReportSavedTo}
{/if} {#if diagnosticReport}{diagnosticReport}
Need to walk through onboarding again? Replay the first-run tutorial and the gate will skip past your existing data.
Logs + system info + redacted preferences. Never includes audio or transcript content.
Known limitations for this release are documented in KNOWN-ISSUES.md. Bugs and feature requests can be filed at github.com/jakeadriansames/lumotia/issues.