mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-15 04:40:40 -07:00
fix(captures): hide unwired storage settings
This commit is contained in:
+3
-3
@@ -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
|
||||
|
||||
|
||||
@@ -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')}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user