Phase 4: Export to SRT, WebVTT, ASS, plain text, and Markdown

- Implement ExportService using pysubs2 for caption formats (SRT, VTT, ASS)
  and custom formatters for plain text and Markdown
- SRT exports with [Speaker]: prefix, WebVTT with <v Speaker> voice tags,
  ASS with color-coded speaker styles
- Plain text groups by speaker with labels, Markdown adds timestamps
- Add export.start IPC handler and export_transcript Tauri command
- Add export dropdown menu in header (appears after transcription)
- Uses native save dialog for output file selection
- Add pysubs2 dependency
- Tests: 30 Python (6 export tests), 6 Rust, 0 Svelte errors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-26 16:18:54 -08:00
parent 44480906a4
commit 415a648a2b
9 changed files with 557 additions and 9 deletions

View File

@@ -47,6 +47,27 @@ export interface PipelineResult extends TranscriptionResult {
num_speakers: number;
}
export interface ExportResult {
output_path: string;
format: string;
}
export async function exportTranscript(
segments: Array<{ text: string; start_ms: number; end_ms: number; speaker: string | null }>,
speakers: Record<string, string>,
format: string,
outputPath: string,
title?: string,
): Promise<ExportResult> {
return invoke('export_transcript', {
segments,
speakers,
format,
outputPath,
title,
});
}
export async function runPipeline(
filePath: string,
options?: {