fix(captures): hide unwired storage settings

This commit is contained in:
Jamie Pine
2026-04-25 10:32:44 -07:00
parent 3f2c22b793
commit 2c3df3873d
5 changed files with 11 additions and 60 deletions
+3 -3
View File
@@ -70,11 +70,11 @@ Refinement shipped earlier; 0.5.0 closes the stubborn edge cases:
Settings → Captures is now the home for the whole dictation flow:
- **Dictation**: global shortcut toggle, push-to-talk chord picker, toggle chord picker, live pill preview, copy-transcript-to-clipboard, auto-paste into focused field (with inline accessibility prompt).
- **Transcription**: model picker (Whisper Base / Small / Medium / Large / Turbo), language lock, archive-audio toggle.
- **Dictation**: global shortcut toggle, push-to-talk chord picker, toggle chord picker, live pill preview, auto-paste into focused field (with inline accessibility prompt).
- **Transcription**: model picker (Whisper Base / Small / Medium / Large / Turbo), language lock.
- **Refinement**: auto-refine toggle, model picker, smart cleanup, remove self-corrections, preserve technical terms.
- **Playback**: default voice for the Captures tab's "Play as" action.
- **Storage**: retention (forever / 90d / 30d / 7d), clear-all-captures.
- **Storage**: captures folder quick-open.
### Interface
+1 -1
View File
@@ -220,7 +220,7 @@ Every dictation, in-app recording, and uploaded audio file lands in the Captures
- **Edit inline** — tweak the transcript and save on blur
- **Play as voice profile** — turn any capture into speech with a cloned voice, one click
- **Promote to voice sample** — use a capture's audio + transcript as a reference sample on any voice profile
- **Configurable retention** — keep captures forever, or auto-expire after 7 / 30 / 90 days
- **Local capture storage** — original audio and transcript stay in your Voicebox data directory, with a folder shortcut in Settings
### Agent Voice Output
@@ -138,11 +138,6 @@ export function CapturesPage() {
const pushToTalkKeys = settings?.chord_push_to_talk_keys ?? defaultChordKeys('push');
const toggleToTalkKeys = settings?.chord_toggle_to_talk_keys ?? defaultChordKeys('toggle');
// Mock-only settings — not yet wired to a backend. Keep local so the UI
// still responds while Phase 7 (hotkey / clipboard / paste) catches up.
const [archiveAudio, setArchiveAudio] = useState(true);
const [copyToClipboard, setCopyToClipboard] = useState(true);
const [retention, setRetention] = useState('forever');
const [chordEditor, setChordEditor] = useState<'push' | 'toggle' | null>(null);
const [opening, setOpening] = useState(false);
const [capturesPath, setCapturesPath] = useState<string | null>(null);
@@ -292,20 +287,6 @@ export function CapturesPage() {
<HotkeyPillPreview enabled={hotkeyEnabled} />
</SettingRow>
<SettingRow
title={t('settings.captures.dictation.copyToClipboard.title')}
description={t('settings.captures.dictation.copyToClipboard.description')}
htmlFor="copyToClipboard"
action={
<Toggle
id="copyToClipboard"
checked={copyToClipboard}
onCheckedChange={setCopyToClipboard}
disabled={!hotkeyEnabled}
/>
}
/>
<div>
<SettingRow
title={t('settings.captures.dictation.autoPaste.title')}
@@ -382,12 +363,6 @@ export function CapturesPage() {
}
/>
<SettingRow
title={t('settings.captures.transcription.archive.title')}
description={t('settings.captures.transcription.archive.description')}
htmlFor="archiveAudio"
action={<Toggle id="archiveAudio" checked={archiveAudio} onCheckedChange={setArchiveAudio} />}
/>
</SettingSection>
<SettingSection
@@ -539,24 +514,6 @@ export function CapturesPage() {
title={t('settings.captures.storage.title')}
description={t('settings.captures.storage.description')}
>
<SettingRow
title={t('settings.captures.storage.retention.title')}
description={t('settings.captures.storage.retention.description')}
action={
<Select value={retention} onValueChange={setRetention}>
<SelectTrigger className="w-[180px]">
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="forever">{t('settings.captures.storage.retention.forever')}</SelectItem>
<SelectItem value="90d">{t('settings.captures.storage.retention.d90')}</SelectItem>
<SelectItem value="30d">{t('settings.captures.storage.retention.d30')}</SelectItem>
<SelectItem value="7d">{t('settings.captures.storage.retention.d7')}</SelectItem>
</SelectContent>
</Select>
}
/>
<SettingRow
title={t('settings.captures.storage.folder.title')}
description={capturesPath ?? t('settings.captures.storage.folder.description')}
+6 -11
View File
@@ -129,19 +129,14 @@ Voicebox:
save — the capture stays in the Captures tab untouched; the sample is a
copy, not a move.
## Storage and retention
## Storage
**Settings → Captures → Storage** controls how long captures live on disk:
The original audio is kept alongside the transcript in your Voicebox data
directory. **Settings → Captures → Storage** shows the captures folder and can
open it directly in your file manager.
| Setting | Effect |
|---|---|
| **Retention: forever** | Never auto-delete. Default. |
| **Retention: 90 days / 30 days / 7 days** | Captures older than the window are pruned on app start. |
| **Clear all captures** | One-click nuke of every capture and its audio on disk. No undo. |
The original audio is always kept alongside the transcript — archival is on
by default. Every capture's audio file and metadata row can be re-processed
(retranscribe, refine, Play-as) as long as the audio file still exists.
Every capture's audio file and metadata row can be re-processed (retranscribe,
refine, Play-as) as long as the audio file still exists.
## Short-recording guard
+1 -2
View File
@@ -82,8 +82,7 @@ export default function CapturePage() {
</h3>
<p className="text-sm leading-relaxed text-muted-foreground">
Every dictation keeps both the audio and the transcript. Search, re-run, or turn
any capture into a voice sample for cloning. Configurable retention auto-expire
or keep forever.
any capture into a voice sample for cloning from the Captures tab.
</p>
</div>
</div>