Improve time codes (forced alignment): navigation/filter for the 'to check' rows that need manual review
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 76/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- csharp
- Domain
- accessibility, desktop
Research direction
Start in src/ui/Features/Tools/ImproveTimeCodes/ImproveTimeCodesViewModel.cs and read NextChange/PreviousChange, OnKeyDown, and the row selection logic; then check ImproveTimeCodesRow.cs for how Apply represents rows needing review. The request allows keyboard navigation, a table filter, or status sorting, with keyboard navigation and filtering preferred. Done means users can reach the unticked rows that need review without scanning every changed row; update docs/features/improve-time-codes.md if the key bindings change.
Written by the indexing model from the issue text.
Description
Context
Regular workflow: re-time a subtitle track with Tools → Improve time codes (forced alignment), using Max shift = 6 s and Check with speech-to-text always on (it's essential for my files — subtitles extracted from the source disc are often a bit out of sync, and subtitles muxed into a differently-framerate MP4 of the same film are off on every line).
A recent real example: subtitles extracted from the film source this morning — all 2044 lines were shifted by the aligner, and 15 of them are flagged for manual review (large moves / disputed by speech). The only way to get to those 15 rows is to scroll the entire 2044-row results table hunting for the amber entries.
Current behaviour (verified against the v5.3.0 source)
- F7/F8 (or Alt+Up/Alt+Down, or the ▲/▼ buttons) step to the previous/next changed line.
NextChange()/PreviousChange()walk every row whereIsChangedis true — i.e. all seven move statuses inSubtitleRetimer.IsMove(re-timed, moved with neighbours, large move unconfirmed, confirmed by speech, heard where it was, moved with sync, adjusted by hand). When the max shift is generous, essentially every line in the file is "changed", so F8 degenerates to "next line" — no faster than scrolling, and it still lands on every auto-applied row that needs no review. - The window's complete key set is: Space (play/pause), Esc (close), F5/Shift+F5 (play selected line new/old), F7, F8. There is no navigation to the unconfirmed set.
- There is no filter in the dialog (no "show only to check" toggle).
- The results table registers no sortable columns (
TableViewHeaderSorterexists insrc/ui/Logic/TableViewExtras.csbutImproveTimeCodesWindowdoesn't use it), so clicking the Status header does nothing.
The "to check" set is well-defined: SubtitleRetimer.IsUnconfirmed — LargeMoveUnconfirmed and DisputedBySpeech — exactly the rows left unticked in the Apply column ("the user listens and ticks it"), and exactly the count shown in the summary header ("N to check") and the status line ("N large moves to check"). There is currently no in-app way to jump between them.
Request
Make the lines that need a human decision reachable without scrolling the whole table. Any of the following would help; the first two combined would be ideal:
- Keyboard navigation to to-check rows only — e.g. F9 / F10 (or Alt+PageUp/Alt+PageDown) for "next/previous line to check", walking exactly the unticked rows (
IsChanged && !Apply, which is the unconfirmed set before the user starts ticking/unticking). This is a direct mirror of the existingNextChange/PreviousChange+CanGoNext/CanGoPreviouspattern inImproveTimeCodesViewModel. - A "to check only" toggle in the results table, so the flagged rows are the entire table for the review pass.
- (Smaller alternative) Make the Status column sortable via the existing
TableViewHeaderSorter, so amber rows cluster together.
Why it matters
With large max shifts and speech-to-text checking on, the auto-applied rows are the majority and need no human attention; the unconfirmed rows are the small minority that do (in the example above: 15 of 2044). Review speed scales with the whole file instead of the flagged set, and it gets worse the more thoroughly the tool does its job.
Where to look
src/ui/Features/Tools/ImproveTimeCodes/ImproveTimeCodesViewModel.cs—OnKeyDown,NextChange/PreviousChange,OnSelectedRowChanged, summary/status countssrc/ui/Features/Tools/ImproveTimeCodes/ImproveTimeCodesWindow.cs— results table construction, toolbar buttonssrc/ui/Features/Tools/ImproveTimeCodes/ImproveTimeCodesRow.cs—Apply = IsChanged && !IsUnconfirmed(...)src/ui/Features/Tools/ImproveTimeCodes/SubtitleRetimer.cs—IsMove,IsUnconfirmedsrc/ui/Logic/TableViewExtras.cs—TableViewHeaderSorter(option 3)docs/features/improve-time-codes.md— key documentation
- Dominant language
- C#
- Stars
- 14.8k
- Forks
- 1.4k
- Avg merge
- 58m
- Merged PRs (30d)
- 630
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from SubtitleEdit/subtitleedit
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
SubtitleEdit/subtitleedit#16614 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
SubtitleEdit/subtitleedit#16374 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
SubtitleEdit/subtitleedit#14510 · 3 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
SubtitleEdit/subtitleedit#16643 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 48/100
SubtitleEdit/subtitleedit#16623 ·
Maintainers usually reply within 1 day
All issues in SubtitleEdit/subtitleedit
Similar issues
-
Bug: Needs Replicating
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
space-wizards/RobustToolbox#7189 ·
Maintainers usually reply within 1 day
-
enhancement needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
microsoft/microsoft-ui-reactor#1460 ·
Maintainers usually reply within 1 day
-
t/bug
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
dotnet/maui#39950 · 1 reaction ·
Maintainers usually reply within 1 day
-
The server's default HttpClient fails on plain http and on HTTPS servers without HTTP/2Possibly taken @yasmoradi claimed this today. Openarea / templates
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
bitfoundation/bitplatform#14659 ·
Maintainers usually reply within 1 day
-
DbTransaction.SupportsSavepoints docs say Release/ReleaseAsync are expected to throw, but they are no-ops by designPossibly taken @alaricd claimed this today. Openarea-System.Transactions untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
dotnet/runtime#137040 · 1 comment ·
Maintainers usually reply within 1 day