Conversation
… editing tools Phase 1 subtitle editor with inline text/timing editing, undo/redo (50-level), search/replace with regex, and 8-format parser/serializer support (SRT, ASS/SSA, VTT, SUB, SMI, TXT, MPL). New features in this commit: - Video preview with native seeking for browser-compatible codecs, remux mode for unsupported audio (separate audio element), and full transcode fallback - Waveform timeline (wavesurfer.js) with draggable cue regions, zoom, and time-synced cursor - Backend /api/editor/ endpoints: video streaming with FFmpeg remux/transcode, audio extraction with disk caching, waveform peak generation - AI translate integration: in-editor translation via translator service API with progress tracking and batch apply - QC panel with Netflix/Amazon/BBC presets and 7 batch fix tools - Timing tools: bulk shift, linear correction (two-point fit), auto-sync - Reference subtitle loading from existing languages or file import, with time-aligned matching to current cues - Keyboard shortcut sheet, jump-to-cue, cue bookmarking, live CPS display - Playback speed control, auto-play after seek, Ctrl+Shift+Space play/pause - Browser codec detection with Direct/Remux/Transcode mode indicator - ETag conflict auto-retry on save, suppressed global 412/409 notifications
- Add ffsubsync integration with VAD/GSS/framerate options in timing panel - Fix AI translate to use loaded reference subtitles as source text - Create cues from reference timing when translating from reference - Add subtitle language switcher dropdown in breadcrumb navigation - Audio track switching via separate audio element (no video reload) - Fix waveform region event handlers after track switch re-initialization - Action-based auto-save to localStorage (2s debounce, not 30s timer) - Add MARK_DIRTY action for translation-created cues - Detail pane shows empty cue form with reference when no cue selected - Ctrl+Shift+Enter inserts cue at current playback position - Reference text follows playback position, not selected cue - QC markers with visible symbols instead of thin color bars - Bookmark filter hides gap rows, button disabled when no bookmarks - Waveform loading spinner with visible please-wait message - Clean up status bar and toolbar badge duplication
… sort fixes - Add seekbar, -5s/+5s buttons, Alt+Left/Right seek shortcuts - Add text style buttons (I/B/U) and symbol insert (music, ellipsis, em dash) - Ctrl+I/B/U keyboard shortcuts for tag wrapping in cue textarea - CPS and line length now strip HTML tags before counting - Translate panel: source toggle (Auto/Reference/Editor cues) - Change Alt+T shortcut for translate panel (Ctrl+Shift+T is browser-reserved) - Cues auto-sort by start time after timing changes - Selected cue follows by id after re-sort - Save As no longer triggers unsaved changes modal on navigate - Subtitle language switcher in breadcrumb using Mantine Menu - Gap detection minimum raised to 1 second - Remove hero image from README
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dae4388d50
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Tests (424 passing, 0 failures): - document.ts: 77 tests (operations, undo/redo, sort, QC, gaps) - parsers: 100 tests (SRT, VTT, ASS, SUB, SMI, MPL, TXT) - serializers: 62 tests (round-trip, format-specific output) - DetailPane: 27 tests (CPS, tag stripping, style buttons) - StatusBar: 19 tests (CPS computation, display states) - translate flow: 19 tests (source toggle, cue creation) - media utils: 40 tests (formatTime, renderSubtitleHtml, codec detection) - backend API: 50 tests (editor endpoints, parameter validation) Type fixes: - Add MARK_DIRTY to DocumentAction union - Fix useRefCues forward reference in TranslatePanel - Fix SubtitleEditor/index.tsx data destructuring ESLint cleanup: - Fix import sorting across all files - Add missing useCallback/useEffect dependencies - Remove unused parameters and variables - Add eslint-disable for intentional dep omissions Code fixes from PR review: - Save & Switch now waits for save completion instead of fixed 1s delay
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 13d7340da4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- Mark recovered drafts as dirty (MARK_DIRTY after LOAD) so unsaved changes prompt appears when navigating away after recovery - Re-throw 409/412 errors in shared HTTP client instead of silently swallowing them, so non-editor callers still get error notifications - Make audio stream mapping optional in ffmpeg transcode command, falling back to -an for videos without audio or invalid track index
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b38ea761db
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Subtitle Editor
A full-featured subtitle editor built directly into Bazarr+. Edit, translate, sync, and preview subtitles without leaving the app.
What's New
Core Editor
Video Preview
Waveform Timeline
AI Translation
Subtitle Sync (ffsubsync)
Text Editing Tools
Timing Tools
Persistence & Recovery
Navigation
File Format Support
Parsers and serializers for: SRT, VTT, ASS/SSA, SUB (MicroDVD), SMI, MPL, TXT
Backend (API)
/api/editor/info— video metadata, codec info, audio tracks, available subtitles/api/editor/video— direct play, remux, or transcode video streaming with seek support/api/editor/audio— cached AAC audio extraction per track/api/editor/peaks— waveform peak data generation/api/editor/sync— ffsubsync integration via jobs queue/api/editor/subtitles— list available subtitle files for media/api/subtitles/content— read/write/create subtitle files with ETag supportKeyboard Shortcuts (40+)
Full shortcut sheet accessible via
?key. Includes: file ops, cue editing, timing nudge, navigation, playback, bookmarks, panels.Quality
npm run checknpm run buildTest Breakdown
Stats
Manual Test Plan
npx tsc --noEmit)npm run check)npx vitest run)npm run build)