Components

Dialogs and settings components

The dialogs a user opens to describe, export or configure: the shared dialog shell, recording details, export, settings and microphone preferences, in every state the shipped code can reach.

Rendered from the shipped source with synthetic demo data. Not captured from a running app. Native microphone capture has not passed host qualification; this page shows interface states only and does not imply working hardware capture.

Dialog shell

Every dialog in Cassette is the same native dialog element with a serif heading, an optional small subtitle and a close button. This is where users learn that a dialog closes with the X or Escape, and when it refuses to.

▭
Modal shell
The frame around settings, details, export and confirmations: heading, optional subtitle, optional close button, then whatever the dialog needs. The body shown here is placeholder content.
apps/desktop/src/App.tsx · Modal
Title only, wide (the way Settings uses it)

Dialog body content goes here.

Title and subtitle, default width 510px (as the remove-recording confirmation uses it)
Wide (590px) with subtitle
Not closeable: no X, Escape ignored (while saving or exporting)

Recording details

Where a user adds private context to a recording: a title, tags, a free-text note and a kind. Opened from the “Notes & kind” button on a library row or from the editor. The dialog holds two independent forms, so it is easy to save one and forget the other.

✎
Notes & kind panel
The upper half of the details dialog: pick what kind of recording this is and write local notes. It saves on its own button and refuses to save when the note is over 16,384 bytes.
apps/desktop/src/LibraryDetails.tsx · LibraryDetails; kinds from apps/desktop/src/library.ts · RECORDING_KINDS
Loading (disabled while the saved values are read)
0 / 16,384 bytes
Loaded, nothing changed (Save stays disabled until the draft differs)
106 / 16,384 bytes
Unsaved draft (Save enabled; Reload now says it discards the draft)
144 / 16,384 bytes
Saved
144 / 16,384 bytes

Notes and kind saved locally.

Revision conflict (message text comes from the backend; draft kept)
144 / 16,384 bytes

Metadata conflict: expected revision 3, current 4. Reload before saving. Your draft is retained in this panel.

Note over the limit (text elided; Save disabled)
16,512 / 16,384 bytes

Notes exceed 16,384 UTF-8 bytes. Shorten them before saving.

Could not load (example backend message)
0 / 16,384 bytes

Recording was not found.

Browser preview: everything disabled browser only
0 / 16,384 bytes

Notes and kind are stored in the desktop library.

Every kind option: the select shown expanded (size=12) so all 12 values of RECORDING_KINDS are visible
✎
Recording details dialog
Wraps the notes panel plus a title and tags form. Tags are one comma-separated text box, not chips; the dialog cannot be closed while either form is saving.
apps/desktop/src/App.tsx · MetadataModal
Opening: notes still loading (X hidden; Close and Save title & tags disabled)
0 / 16,384 bytes
Ready, no unsaved draft
106 / 16,384 bytes
Pending notes draft: Close stays enabled and discards it without asking quirk
144 / 16,384 bytes
Saving title and tags (X hidden, fields locked)
106 / 16,384 bytes
Title and tags saved
106 / 16,384 bytes

Title and tags saved locally.

Title and tags failed (example backend message)
106 / 16,384 bytes
Browser preview browser only
0 / 16,384 bytes

Notes and kind are stored in the desktop library.

Export

Where a user turns an edited recording into a shareable file. It starts from intent (share, small file, high quality, archive), then lets them tune the details. The destination file name is chosen afterwards in the operating system’s save dialog, never inside this dialog.

⇪
Export dialog: purposes
Pick what the file is for and the format, bitrate, sample rate and channels follow. Editing any setting drops the purpose to Custom, which has no button of its own. Sizes are estimates for a 12:34 recording.
apps/desktop/src/App.tsx · ExportModal, presets
Share (default on desktop): MP3 128 kbps, 44.1 kHz, stereo
Weekly planning callEntire edited recording · 12:34 · MP3
~12.1 MBEstimated size
Small file: MP3 64 kbps, 24 kHz, mono
Weekly planning callEntire edited recording · 12:34 · MP3
~6.0 MBEstimated size
High quality: MP3 256 kbps, 48 kHz, stereo (headphones icon is the fallback branch)
Weekly planning callEntire edited recording · 12:34 · MP3
~24.1 MBEstimated size
Archive: FLAC, 48 kHz, stereo. Bitrate is disabled but still shows a stale 320 kbps quirk
Weekly planning callEntire edited recording · 12:34 · FLAC
~72.4 MBEstimated size
Custom: no purpose highlighted after a manual edit (M4A 192 kbps, volume balancing on)
Weekly planning callEntire edited recording · 12:34 · M4A
~18.1 MBEstimated size
⇪
Export dialog: running and finished
What a user sees between choosing a file name and getting the file: the save-dialog wait, a live progress bar and the ways it can stop. A successful export closes the dialog and shows a notice instead.
apps/desktop/src/App.tsx · ExportModal status polling; packages/contracts/src/index.ts · ExportStatus; crates/cassette-platform/src/export.rs
Waiting for the system save dialog (busy, no job yet)
Weekly planning callEntire edited recording · 12:34 · MP3
~12.1 MBEstimated size
Running, 42% (state running; only Cancel export is offered)
Weekly planning callEntire edited recording · 12:34 · MP3
~12.1 MBEstimated size
Rendering audio… 42%
Completed: the dialog closes and a notice names the destination
Audio exported to C:\Users\Demo\Music\Cassette\Exports\Weekly planning call.mp3
Failed: the chosen file already exists (backend wording; nothing is overwritten)
Weekly planning callEntire edited recording · 12:34 · MP3
~12.1 MBEstimated size
Cancelled or failed with an empty error: fallback text
Weekly planning callEntire edited recording · 12:34 · MP3
~12.1 MBEstimated size
⇪
Export dialog: browser preview
The same dialog in the browser preview, where only WAV export exists and every preset is switched off. Not the shipped desktop product.
apps/desktop/src/App.tsx · ExportModal (api.desktop === false)
Purpose Custom, WAV only, a note explains why browser only
Weekly planning callEntire edited recording · 12:34 · WAV
~66.5 MBEstimated size
Browser preview exports WAV. All formats are available on desktop.
Finished: a notice replaces the dialog browser only
Edited WAV downloaded.

Settings

One scrolling dialog for everything that is configured rather than done: microphone and folders, optional cassette sounds, where data lives, whether FFmpeg is installed, which cloud keys are remembered and what version this is. There is no account, sign-in or sign-out anywhere in it.

⚙
Settings dialog
The whole dialog, desktop build, with all sections in their shipped order. At 1280×800 it scrolls inside the dialog and the All set button sits at the bottom of that scroll. The transport section is owned by the recorder components page.
apps/desktop/src/App.tsx · SettingsModal; apps/desktop/src/cassette.tsx · TransportPreferences
Desktop, FFmpeg ready, no saved keys (dialog capped at 768px high as in an 800px window; scroll to see the rest)

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

C:\Users\Demo\Music\Cassette

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Cassette transport

Reels move only during recording or playback. Your system’s reduced-motion setting takes priority.

Optional local cues may be picked up by your microphone. Off by default.

Local storage

Recordings, edit recipes, and transcripts live on your device.

C:\Users\Demo\AppData\Roaming\Cassette

Imports are managed copies. Source files remain untouched. Recording files are flushed during capture so interrupted sessions can be recovered.

Audio conversion

FFmpeg is ready

Provider credentials

Keys you choose to remember use your operating system’s protected credential store.

OpenAINo saved key
DeepgramNo saved key
AssemblyAINo saved key

Cassette 2.4.7

Windows first. No account, telemetry, or background uploads. Local AI models and watched-folder imports are planned for a later release.

⌂
Local storage section
Tells the user where Cassette keeps everything and that imports are copies. The only place the data folder is shown.
apps/desktop/src/App.tsx · SettingsModal
Workspace path known

Local storage

Recordings, edit recipes, and transcripts live on your device.

C:\Users\Demo\AppData\Roaming\Cassette

Imports are managed copies. Source files remain untouched. Recording files are flushed during capture so interrupted sessions can be recovered.

Runtime info not loaded yet

Local storage

Recordings, edit recipes, and transcripts live on your device.

Loading workspace location…

Imports are managed copies. Source files remain untouched. Recording files are flushed during capture so interrupted sessions can be recovered.

♫
Audio conversion section
Says whether FFmpeg, needed for MP3, M4A, FLAC and OGG export, was found on this PC.
apps/desktop/src/App.tsx · SettingsModal
FFmpeg found

Audio conversion

FFmpeg is ready
FFmpeg missing (desktop): instructions shown

Audio conversion

FFmpeg is not installed

Install FFmpeg, add its bin directory to your Windows PATH, and restart Cassette. Native WAV recording works without it.

Browser preview browser only

Audio conversion

Browser preview · WAV export only
⚿
Provider credentials section
Shows which cloud transcription providers have a remembered key. It only says “Key saved” or “No saved key”; a key is never displayed, and entering one happens in the transcription dialog. There is no consent control here.
apps/desktop/src/App.tsx · SettingsModal, providers; calls credential_status and forget_credential
No keys saved

Provider credentials

Keys you choose to remember use your operating system’s protected credential store.

OpenAINo saved key
DeepgramNo saved key
AssemblyAINo saved key
One key saved (Forget key enabled on that row)

Provider credentials

Keys you choose to remember use your operating system’s protected credential store.

OpenAIKey saved
DeepgramNo saved key
AssemblyAINo saved key
All three saved

Provider credentials

Keys you choose to remember use your operating system’s protected credential store.

OpenAIKey saved
DeepgramKey saved
AssemblyAIKey saved
After Forget key: a notice confirms
OpenAI key forgotten.
ℹ
About and privacy statement
The closing note: the version and a one-line promise of no account, telemetry or background uploads. It also admits what is not built yet.
apps/desktop/src/App.tsx · SettingsModal; version from apps/desktop/package.json
Version line, read from package.json roadmap

Cassette 2.4.7

Windows first. No account, telemetry, or background uploads. Local AI models and watched-folder imports are planned for a later release.

Microphone and folders

Where a user chooses which input the next recording uses and which folder it lands in. Embedded at the top of Settings. Choosing a microphone here is a preference only; no capture is started.

🎙
Recording microphone and destination
A microphone picker with plain recovery messages when the remembered device is gone, plus the default recording folder and recent folders.
apps/desktop/src/App.tsx · MicrophonePreferences
Loading (settings and device list pending)

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

Loading recording destination...

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Devices listed, system default selected (first row is the default device’s own name, id “default”; it appears twice) quirk

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

C:\Users\Demo\Music\Cassette

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Another microphone selected

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

C:\Users\Demo\Music\Cassette

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Remembered microphone unplugged: extra “Unavailable” option and an alert

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

C:\Users\Demo\Music\Cassette

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Device enumeration failed (example message): the select stays on “Loading microphones...” quirk

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

Loading recording destination...

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Saving a choice (controls locked, button reads Checking microphones...)

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

C:\Users\Demo\Music\Cassette

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Browser preview: unidentified devices disabled, no native folders (select expanded to show the disabled rows) browser only

Recording microphone

New recordings use this microphone. Active capture keeps its input.

Recording destination

Browser storage

Remembered for new recordings. An active recording keeps its current destination until you change it in the recorder.

Native folders are available in the desktop app.