mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-19 06:40:38 -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:
|
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).
|
- **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, archive-audio toggle.
|
- **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.
|
- **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.
|
- **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
|
### 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
|
- **Edit inline** — tweak the transcript and save on blur
|
||||||
- **Play as voice profile** — turn any capture into speech with a cloned voice, one click
|
- **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
|
- **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
|
### Agent Voice Output
|
||||||
|
|
||||||
|
|||||||
@@ -138,11 +138,6 @@ export function CapturesPage() {
|
|||||||
const pushToTalkKeys = settings?.chord_push_to_talk_keys ?? defaultChordKeys('push');
|
const pushToTalkKeys = settings?.chord_push_to_talk_keys ?? defaultChordKeys('push');
|
||||||
const toggleToTalkKeys = settings?.chord_toggle_to_talk_keys ?? defaultChordKeys('toggle');
|
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 [chordEditor, setChordEditor] = useState<'push' | 'toggle' | null>(null);
|
||||||
const [opening, setOpening] = useState(false);
|
const [opening, setOpening] = useState(false);
|
||||||
const [capturesPath, setCapturesPath] = useState<string | null>(null);
|
const [capturesPath, setCapturesPath] = useState<string | null>(null);
|
||||||
@@ -292,20 +287,6 @@ export function CapturesPage() {
|
|||||||
<HotkeyPillPreview enabled={hotkeyEnabled} />
|
<HotkeyPillPreview enabled={hotkeyEnabled} />
|
||||||
</SettingRow>
|
</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>
|
<div>
|
||||||
<SettingRow
|
<SettingRow
|
||||||
title={t('settings.captures.dictation.autoPaste.title')}
|
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>
|
||||||
|
|
||||||
<SettingSection
|
<SettingSection
|
||||||
@@ -539,24 +514,6 @@ export function CapturesPage() {
|
|||||||
title={t('settings.captures.storage.title')}
|
title={t('settings.captures.storage.title')}
|
||||||
description={t('settings.captures.storage.description')}
|
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
|
<SettingRow
|
||||||
title={t('settings.captures.storage.folder.title')}
|
title={t('settings.captures.storage.folder.title')}
|
||||||
description={capturesPath ?? t('settings.captures.storage.folder.description')}
|
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
|
save — the capture stays in the Captures tab untouched; the sample is a
|
||||||
copy, not a move.
|
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 |
|
Every capture's audio file and metadata row can be re-processed (retranscribe,
|
||||||
|---|---|
|
refine, Play-as) as long as the audio file still exists.
|
||||||
| **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.
|
|
||||||
|
|
||||||
## Short-recording guard
|
## Short-recording guard
|
||||||
|
|
||||||
|
|||||||
@@ -82,8 +82,7 @@ export default function CapturePage() {
|
|||||||
</h3>
|
</h3>
|
||||||
<p className="text-sm leading-relaxed text-muted-foreground">
|
<p className="text-sm leading-relaxed text-muted-foreground">
|
||||||
Every dictation keeps both the audio and the transcript. Search, re-run, or turn
|
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
|
any capture into a voice sample for cloning from the Captures tab.
|
||||||
or keep forever.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user