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

@@ -117,6 +117,24 @@ def make_pipeline_handler() -> HandlerFunc:
return handler
def make_export_handler() -> HandlerFunc:
"""Create an export handler."""
from voice_to_notes.services.export import ExportService, make_export_request
service = ExportService()
def handler(msg: IPCMessage) -> IPCMessage:
request = make_export_request(msg.payload)
output_path = service.export(request)
return IPCMessage(
id=msg.id,
type="export.result",
payload={"output_path": output_path, "format": request.format},
)
return handler
def hardware_detect_handler(msg: IPCMessage) -> IPCMessage:
"""Detect hardware capabilities and return recommendations."""
from voice_to_notes.hardware.detect import detect_hardware