Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 12 additions & 2 deletions docs/releases/UNRELEASED.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@ then reset this file.

## User-facing changes

- None yet.
- Transcribe a file: drop an audio or video file onto the app (or browse from
the dashboard) to get a transcript from the local whisper.cpp engine, with
live progress and cancel. Results land in History marked with the source
file and export as TXT, SRT, or VTT. Fully local; the optional AI cleanup
step is off by default for files. Requires `ffmpeg` (new doctor check).
- File transcriptions are excluded from the dictation metrics (sessions,
minutes saved).

## Internal/release changes

Expand All @@ -21,13 +27,17 @@ then reset this file.

### Tested

- None yet.
- `cargo test --workspace` (79), `bun run check`, `bun run test:coverage`
(ratchet green) on the file-transcription PRs.
- ffmpeg conversion flags verified live against WAV/MP3/MP4 samples; whisper
`--output-json`/progress format verified against the installed whisper-cli.

### Not tested yet

- App build.
- Installer or updater flow.
- Platform smoke checks.
- Interactive drag-drop/dialog smoke in a real desktop session.

### Release blockers

Expand Down
1 change: 1 addition & 0 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ tauri = { version = "2", features = ["tray-icon", "image-png"] }
tauri-plugin-opener = "2"
tauri-plugin-single-instance = "2"
tauri-plugin-autostart = "2"
tauri-plugin-dialog = "2"
tauri-plugin-updater = "2"
tauri-plugin-process = "2"
tauri-plugin-sentry = "0.5"
Expand Down
1 change: 1 addition & 0 deletions src-tauri/capabilities/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"core:window:allow-set-position",
"core:window:allow-outer-position",
"sentry:default",
"dialog:default",
"autostart:allow-enable",
"autostart:allow-disable",
"autostart:allow-is-enabled",
Expand Down
4 changes: 4 additions & 0 deletions src-tauri/src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ use pickscribe::platform;
use serde::Serialize;
use tauri::{AppHandle, Emitter, Manager};

use crate::file_job::FileJobControl;

pub const EVENT_STATE: &str = "pickscribe://state";
pub const EVENT_LEVEL: &str = "pickscribe://level";
pub const EVENT_HISTORY: &str = "pickscribe://history";
Expand Down Expand Up @@ -103,6 +105,7 @@ struct SessionControl {
pub struct Engine {
recording: Mutex<Option<ActiveRecording>>,
active_session: Mutex<Option<SessionControl>>,
pub(crate) file_job: Mutex<Option<FileJobControl>>,
state: Mutex<StatePayload>,
levels_running: Arc<AtomicBool>,
/// Paste chord requested by the triggering invocation (e.g. the legacy
Expand All @@ -124,6 +127,7 @@ impl Engine {
Ok(Self {
recording: Mutex::new(None),
active_session: Mutex::new(None),
file_job: Mutex::new(None),
state: Mutex::new(StatePayload {
stage: Stage::Idle,
recording_started_ms: None,
Expand Down
Loading