the subtitle editor :)
This report summarizes scanner evidence for SubtitleEdit/subtitleedit, a C# project with 14,794 GitHub stars. SynthScan examined 1,337,147 lines of code across 4599 source files, recording 912 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 728 finding(s).
Are imports declared and package/API names verified? 100 finding(s).
Are wrappers, guards, and repeated structures necessary? 84 finding(s).
Which changes need focused human review? 912 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 912 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …res/Tools/BatchConvert/BatchConverterRunPluginTests.cs | 161 | Nikse.SubtitleEdit.Logic.Config.Se.Settings.Plugins.Settings.Remove(name); | CODE |
| CRITICAL | …res/Tools/BatchConvert/BatchConverterRunPluginTests.cs | 170 | Assert.False(Nikse.SubtitleEdit.Logic.Config.Se.Settings.Plugins.Settings.ContainsKey(name)); | CODE |
| CRITICAL | …atchConvert/BatchConverterMultipleReplaceRegexTests.cs | 46 | Se.Settings.Edit.MultipleReplace.Categories.Clear(); | CODE |
| CRITICAL | …atchConvert/BatchConverterMultipleReplaceRegexTests.cs | 47 | Se.Settings.Edit.MultipleReplace.Categories.Add(category); | CODE |
| CRITICAL | …atchConvert/BatchConverterMultipleReplaceRegexTests.cs | 84 | Se.Settings.Edit.MultipleReplace.Categories.Clear(); | CODE |
| CRITICAL | tests/UI/Features/Edit/MultipleReplacePreviewTests.cs | 370 | Se.Settings.Edit.MultipleReplace.Categories.Clear(); | CODE |
| CRITICAL | tests/UI/Features/Edit/MultipleReplacePreviewTests.cs | 385 | Se.Settings.Edit.MultipleReplace.Categories.Add(c); | CODE |
| CRITICAL | tests/UI/Features/Edit/MultipleReplacePreviewTests.cs | 459 | Se.Settings.Edit.MultipleReplace.Categories.Clear(); | CODE |
| CRITICAL | tests/UI/Features/Edit/MultipleReplacePreviewTests.cs | 479 | Assert.False(Se.Settings.Edit.MultipleReplace.Categories.First(c => c.Name == "English").IsActive); | CODE |
| CRITICAL | tests/UI/Features/Edit/MultipleReplacePreviewTests.cs | 488 | Se.Settings.Edit.MultipleReplace.Categories.Clear(); | CODE |
| CRITICAL | tests/UI/Features/Assa/AssaStylesViewModelTests.cs | 62 | Header = Nikse.SubtitleEdit.Core.SubtitleFormats.AdvancedSubStationAlpha.GetHeaderAndStylesFromAdvancedSubSt | CODE |
| CRITICAL | tests/UI/Features/Assa/AssaStylesViewModelTests.cs | 479 | var styles = Nikse.SubtitleEdit.Core.SubtitleFormats.AdvancedSubStationAlpha.GetSsaStylesFromHeader(text); | CODE |
| CRITICAL | tests/UI/Features/Assa/AdvancedEffectTests.cs | 320 | var list = Nikse.SubtitleEdit.Features.Assa.AssaApplyAdvancedEffect.AdvancedEffectDisplayFactory.List(); | CODE |
| CRITICAL | …sts/UI/Features/Main/MainOriginalTextInPreviewTests.cs | 192 | Nikse.SubtitleEdit.Features.Main.Layout.InitWaveform.MakeWaveform(vm); | CODE |
| CRITICAL | tests/UI/Logic/CasingAndUuEncodingRegressionTests.cs | 29 | var decoded = Nikse.SubtitleEdit.Core.Common.UUEncoding.UUDecode( | CODE |
| CRITICAL | tests/UI/Logic/CasingAndUuEncodingRegressionTests.cs | 30 | Nikse.SubtitleEdit.Core.Common.UUEncoding.UUEncode(input)); | CODE |
| CRITICAL | tests/UI/Logic/SkBitmapExtensionsTests.cs | 56 | var item = new Nikse.SubtitleEdit.Features.Files.ImportImages.ImportImageItem(path); | CODE |
| CRITICAL | tests/seconv/Core/ImageOutputTest.cs | 177 | Assert.True(Nikse.SubtitleEdit.Core.Common.FileUtil.IsSpDvdSup(supFiles[0])); | STRING |
| CRITICAL | tests/seconv/Core/XSubInputTest.cs | 87 | var pcsList = Nikse.SubtitleEdit.Core.BluRaySup.BluRaySupParser.ParseBluRaySup(sup, log); | CODE |
| CRITICAL | tests/benchmarks/PerfHuntRound31Benchmarks.cs | 254 | _durationLimits = new Nikse.SubtitleEdit.Features.Tools.ApplyDurationLimits.ApplyDurationLimitsViewModel(); | CODE |
| CRITICAL | tests/benchmarks/PerfHuntRound32Benchmarks.cs | 188 | return Nikse.SubtitleEdit.Core.Common.LanguageAutoDetect.AutoDetectGoogleLanguageOrNull(_subtitle); | CODE |
| CRITICAL | …e/ContainerFormats/TransportStreamClosedCaptionTest.cs | 116 | Nikse.SubtitleEdit.Core.Cea608.GetCcDataHelper.ParseCcDataFromScte20UserData(userData.ToArray(), topFieldFirst, | CODE |
| CRITICAL⚡ | tests/libse/SubtitleFormats/Cea708Test.cs | 256 | Assert.Equal(string.Empty, Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(0, Line("Line one"), state, false)); | CODE |
| CRITICAL⚡ | tests/libse/SubtitleFormats/Cea708Test.cs | 258 | Assert.Equal("Line one", Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(1, Line("Line two"), state, false)); | CODE |
| CRITICAL⚡ | tests/libse/SubtitleFormats/Cea708Test.cs | 261 | Assert.Equal("Line two", Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(2, new byte[] { 0x0D }, state, false)); | CODE |
| CRITICAL | tests/libse/SubtitleFormats/Cea708Test.cs | 273 | var text = Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(0, bytes, new CommandState(), false); | CODE |
| CRITICAL | tests/libse/SubtitleFormats/Cea708Test.cs | 286 | return Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(0, bytes, new CommandState(), false); | CODE |
| CRITICAL | tests/libse/SubtitleFormats/Cea708Test.cs | 333 | var decode = new Func<int, byte[], string>((lineIndex, bytes) => Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(li | CODE |
| CRITICAL | tests/libse/SubtitleFormats/Cea708Test.cs | 350 | var text = Nikse.SubtitleEdit.Core.Cea708.Cea708.Decode(0, bytes, state, false); | CODE |
| CRITICAL | src/ui/Program.cs | 117 | Nikse.SubtitleEdit.Core.SubtitleFormats.SubtitleFormat.WarmUpAsync(); | CODE |
| CRITICAL | src/ui/Program.cs | 532 | Nikse.SubtitleEdit.Features.Main.Layout.InitNativeMacMenu.SetupAppMenu(app); | CODE |
| CRITICAL | src/ui/Program.cs | 533 | Nikse.SubtitleEdit.Features.Main.Layout.MacHelpSearchInterop.TryRegister(); | CODE |
| CRITICAL | src/ui/Program.cs | 597 | await Nikse.SubtitleEdit.Features.Main.Layout.MainWindowFactory.OpenNewWindowWithFil | CODE |
| CRITICAL | src/ui/Program.cs | 617 | lifetime.MainWindow = Nikse.SubtitleEdit.Features.Main.Layout.MainWindowFactory.Create(isPrimary: true); | CODE |
| CRITICAL | …ures/Options/Settings/CustomContinuationStyleWindow.cs | 151 | EditorChrome.MakeEditorSection(Se.Language.Options.Settings.AfterLongGap.TrimEnd(':', ' '), longGapConte | CODE |
| CRITICAL | …ns/Settings/WaveformToolbarItems/ToolbarItemDisplay.cs | 55 | SeWaveformToolbarItemType.AudioTrackPicker => Se.Language.Main.Menu.AudioTracks.Replace("_", string.Empty), | CODE |
| CRITICAL | …ptions/Settings/WaveformThemes/WaveformThemesWindow.cs | 44 | var themeLabel = Se.Language.Options.Settings.WaveformColorTheme.TrimEnd(':', ' '); | CODE |
| CRITICAL | …i/Features/Video/SpeechToText/SpeechToTextViewModel.cs | 3889 | viewModal.ChangeUnderlineToColorColor = Se.Settings.Tools.AudioToText.WhisperPostProcessingChangeUnderli | CODE |
| CRITICAL | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 1175 | ? string.Format("{0} ({1})", Se.Language.Video.TextToSpeech.SetupCast.TrimEnd('.'), actorCount) | CODE |
| CRITICAL | src/ui/Features/Tools/Renumber/RenumberWindow.cs | 24 | var numericUpDown = EditorChrome.AsField(UiUtil.MakeNumericUpDownInt(0, 99999, 1, 150, vm, nameof(vm.StartNumber | CODE |
| CRITICAL | …es/Tools/ChangeFormatting/ChangeFormattingViewModel.cs | 135 | SelectedColor = Se.Settings.Tools.ChangeFormatting.Color.FromHexToColor(); | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 408 | if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals("nOcr", StringComparison.OrdinalIgnoreCase)) | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 412 | else if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals("BinaryOcr", StringComparison.OrdinalIgnoreCase)) | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 416 | else if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals("PaddleOCR", StringComparison.OrdinalIgnoreCase)) | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 423 | else if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals("Ollama", StringComparison.OrdinalIgnoreCase)) | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 433 | else if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals("llama.cpp", StringComparison.OrdinalIgnoreCase)) | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 440 | else if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals(CrispEmbedEngine.StaticName, StringComparison.Ordin | CODE |
| CRITICAL⚡ | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 447 | else if (Se.Settings.Tools.BatchConvert.OcrEngine.Equals(AppleVisionOcr.StaticName, StringComparison.Ordinal | CODE |
| CRITICAL | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 841 | var text = Nikse.SubtitleEdit.UiLogic.Export.CustomTextFormatter.GenerateCustomText(selectedCustomFormat.ToTempl | CODE |
| CRITICAL | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 2266 | return Se.Settings.File.ExportImages.Profiles.FirstOrDefault(p => p.ProfileName == Se.Settings.File.ExportImages | CODE |
| CRITICAL | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 2267 | ?? Se.Settings.File.ExportImages.Profiles.FirstOrDefault() | CODE |
| CRITICAL | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 2723 | foreach (var category in Se.Settings.Edit.MultipleReplace.Categories.Where(p => p.IsActive)) | CODE |
| CRITICAL | src/ui/Features/Tools/BatchConvert/BatchConverter.cs | 3400 | ? Nikse.SubtitleEdit.Core.Forms.FixCommonErrors.Helper.FixShortLines(paragraph.Text, Language) | CODE |
| CRITICAL | …i/Features/Tools/BatchConvert/BatchConvertViewModel.cs | 1153 | ConvertActorsColor = Se.Settings.Tools.BatchConvert.ConvertActorsColor.FromHexToColor(); | CODE |
| CRITICAL | …i/Features/Tools/BatchConvert/BatchConvertViewModel.cs | 1607 | if (!Se.Settings.Tools.BatchConvert.OcrEngine.Equals("PaddleOCR", StringComparison.OrdinalIgnoreCase)) | CODE |
| CRITICAL | …i/Features/Tools/BatchConvert/BatchConvertViewModel.cs | 1728 | if (!Se.Settings.Tools.BatchConvert.OcrEngine.Equals(CrispEmbedEngine.StaticName, StringComparison.OrdinalIgnore | CODE |
| CRITICAL | …i/Features/Tools/BatchConvert/BatchConvertViewModel.cs | 2746 | customTextPreview = Nikse.SubtitleEdit.UiLogic.Export.CustomTextFormatter.GenerateCustomText( | CODE |
| CRITICAL | …i/Features/Tools/BatchConvert/BatchConvertViewModel.cs | 3385 | Se.Settings.Tools.BatchConvert.Presets.RemoveAll(p => p.Name == name); | CODE |
| CRITICAL | …ures/Tools/FixCommonErrors/FixCommonErrorsViewModel.cs | 174 | Se.Settings.Tools.FixCommonErrors.Profiles.Clear(); | CODE |
| CRITICAL | …ures/Tools/FixCommonErrors/FixCommonErrorsViewModel.cs | 194 | Se.Settings.Tools.FixCommonErrors.Profiles.Add(setting); | CODE |
| 28 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/UI/MainWindowTestHost.cs | 1 | using Avalonia.Controls; | COMMENT |
| LOW | tests/UI/MainWindowTestHost.cs | 21 | /// (KeyboardDevice.FocusedElement) and the whole headless run shares one application, so one | COMMENT |
| LOW | tests/UI/SettingsScopeLibSeMirrorTests.cs | 1 | using Nikse.SubtitleEdit.Core.Common; | COMMENT |
| LOW | tests/UI/SettingsScope.cs | 1 | using Nikse.SubtitleEdit.Core.Common; | COMMENT |
| LOW | tests/UI/SettingsScope.cs | 21 | { | COMMENT |
| LOW | tests/UI/HeadlessSessionBootstrap.cs | 1 | using Avalonia.Headless; | COMMENT |
| LOW | tests/UI/HeadlessSessionBootstrap.cs | 21 | /// failure to point at (1104 of 4631 tests on one CI attempt). Test class order is not | COMMENT |
| LOW | tests/UI/Features/Video/BurnInEncoderQualityTests.cs | 1 | using Nikse.SubtitleEdit.Features.Video.BurnIn; | COMMENT |
| LOW | …ideo/TextToSpeech/Engines/AudioCppPerLineCloneTests.cs | 1 | using Nikse.SubtitleEdit.Features.Video.TextToSpeech; | COMMENT |
| LOW | tests/UI/Features/Ocr/Engines/AppleVisionOcrTests.cs | 1 | using Nikse.SubtitleEdit.Features.Ocr.Engines; | COMMENT |
| LOW | …ts/UI/Features/Main/MergeWithReadOnlyReferenceTests.cs | 21 | /// | COMMENT |
| LOW | tests/UI/Features/Main/PlayheadResumeFromCursorTests.cs | 21 | /// request funnels through CancelPausePlayheadFreeze, which now seeks the paused player onto the | COMMENT |
| LOW | tests/UI/Features/Main/MacNativeMenuParityTests.cs | 1 | using System.Text.RegularExpressions; | COMMENT |
| LOW | tests/UI/Features/Main/MacNativeMenuParityTests.cs | 21 | // Matches the command references both builders use: | COMMENT |
| LOW | tests/UI/Features/Main/MacWindowMenuItemsTests.cs | 1 | using Avalonia.Controls; | COMMENT |
| LOW | tests/UI/Logic/InitialFocusConventionTests.cs | 1 | using System.Text.RegularExpressions; | COMMENT |
| LOW | tests/UI/Logic/DialogViewModelRegistrationTests.cs | 1 | using Avalonia.Controls; | COMMENT |
| LOW | tests/UI/Logic/ModalMinimizeMirroringTests.cs | 1 | using Avalonia.Controls; | COMMENT |
| LOW | tests/UI/Logic/VideoContentRectTests.cs | 1 | using Nikse.SubtitleEdit.Logic; | COMMENT |
| LOW | tests/UI/Logic/EnglishLanguageFileUpToDateTests.cs | 1 | using System.Text; | COMMENT |
| LOW | tests/UI/Logic/MpvClipboardOptionTests.cs | 1 | using System.Text.RegularExpressions; | COMMENT |
| LOW | tests/UI/Logic/Config/SeLanguageJsonContextTests.cs | 1 | using System.Collections; | COMMENT |
| LOW | tests/UI/Logic/Config/DataFolderLocationTests.cs | 41 | Assert.Equal(Se.ExePath, resolved); | COMMENT |
| LOW | tests/UI/Logic/Media/MpvReloaderRetryTests.cs | 1 | using System.Reflection; | COMMENT |
| LOW | tests/UI/Controls/AudioVisualizerScrubFeedbackTests.cs | 21 | /// closes a loop: the drag delta is measured in absolute waveform time (#13600), so the scroll is | COMMENT |
| LOW | tests/UI/Controls/AudioVisualizerShotChangeSnapTests.cs | 21 | /// | COMMENT |
| LOW | …Controls/VideoPlayerControlRestorePositionSeekTests.cs | 1 | using Avalonia.Headless.XUnit; | COMMENT |
| LOW | tests/UI/Controls/AudioVisualizerRtlTextTests.cs | 81 | /// And the direction really reaches the shaping: the same string drawn right to left comes out | COMMENT |
| LOW | tests/UI/Controls/AudioVisualizerDragTests.cs | 21 | /// without releasing), the dragged edge must keep following the pointer - SE4 behaved this way, | COMMENT |
| LOW | tests/libuilogic/Ocr/NOcrDbExpandedNeighbourInkTests.cs | 1 | using Nikse.SubtitleEdit.UiLogic.Ocr; | COMMENT |
| LOW | tests/libuilogic/Ocr/AppleVisionTextLayoutTests.cs | 1 | using Nikse.SubtitleEdit.UiLogic.Ocr.AppleVision; | COMMENT |
| LOW | tests/seconv/Core/MxfInputTest.cs | 141 | }); | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound18Benchmarks.cs | 1 | using BenchmarkDotNet.Attributes; | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound18Benchmarks.cs | 21 | /// allocations, so the before/after pair is trustworthy): | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound19Benchmarks.cs | 1 | using BenchmarkDotNet.Attributes; | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound13Benchmarks.cs | 1 | using System.Numerics; | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound15Benchmarks.cs | 1 | using BenchmarkDotNet.Attributes; | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound17Benchmarks.cs | 21 | /// ASCII table and Blu-ray's palette matching; and (c) per-pixel byte work that fits in one | COMMENT |
| LOW | tests/benchmarks/AudioVisualizerRenderBenchmarks.cs | 21 | /// cost under raster work the UI thread never pays. | COMMENT |
| LOW | tests/benchmarks/PerfHuntRound20Benchmarks.cs | 1 | using BenchmarkDotNet.Attributes; | COMMENT |
| LOW | tests/benchmarks/SubRipLegacy.cs | 301 | } | COMMENT |
| LOW | tests/benchmarks/DynamicProgrammingBenchmarks.cs | 1 | using BenchmarkDotNet.Attributes; | COMMENT |
| LOW | tests/benchmarks/WaveformPeakSimdBenchmarks.cs | 1 | using System.Runtime.InteropServices; | COMMENT |
| LOW | tests/libse/Core/LanguageAutoDetectShortFileTest.cs | 1 | using Nikse.SubtitleEdit.Core.Common; | COMMENT |
| LOW | tests/libse/Core/SubtitleFormatConcurrencyTest.cs | 1 | using Nikse.SubtitleEdit.Core.SubtitleFormats; | COMMENT |
| LOW | …s/libse/Core/ContainerFormats/Mp4/Mp4Cea708H264Test.cs | 1 | using System.Text; | COMMENT |
| LOW | …s/libse/Core/ContainerFormats/Mp4/Mp4Cea608H264Test.cs | 221 | /// <summary> | COMMENT |
| LOW | …bse/ContainerFormats/ProgramStreamClosedCaptionTest.cs | 1 | using Nikse.SubtitleEdit.Core.Cea608; | COMMENT |
| LOW | tests/libse/SubtitleFormats/SubRipLegacy.cs | 301 | // No '>' means this cannot be a time code line, so bail before the normalization | COMMENT |
| LOW | .github/workflows/build-ui.yml | 241 | org.freedesktop.Sdk//26.08 \ | COMMENT |
| LOW | .github/workflows/build-ui.yml | 421 | Copy-Item "libmpv-arm64-temp/*" "./publish/windows-arm64/" | COMMENT |
| LOW | .github/workflows/tests.yml | 1 | name: Tests | COMMENT |
| LOW | installer/flatpak/dk.nikse.subtitleedit.yaml | 341 | # (see Program.cs) - which need the family to actually be present. The portable build works | COMMENT |
| LOW | installer/flatpak/update-metainfo-version.sh | 1 | #!/bin/bash | COMMENT |
| LOW | installer/flatpak/update-metainfo-version.sh | 21 | # for a stable release it is the one thing worth filling in by hand afterwards | COMMENT |
| LOW | installer/flatpak/generate-nuget-sources.sh | 1 | #!/bin/bash | COMMENT |
| LOW | installer/flatpak/flathub/dk.nikse.subtitleedit.yaml | 341 | # (see Program.cs) - which need the family to actually be present. The portable build works | COMMENT |
| LOW | installer/flatpak/flathub/prepare-flathub-release.sh | 1 | #!/bin/bash | COMMENT |
| LOW | installer/flatpak/flathub/prepare-flathub-release.sh | 21 | # .github/workflows/build-ui.yml checks out the pinned commit directly in its | COMMENT |
| LOW | installer/flatpak/flathub/prepare-flathub-release.sh | 101 | COMMENT | |
| 630 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | installer/flatpak/update-metainfo-version.sh | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/update-metainfo-version.sh | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/update-metainfo-version.sh | 65 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/update-metainfo-version.sh | 67 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/update-metainfo-version.sh | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/update-metainfo-version.sh | 95 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | installer/flatpak/generate-nuget-sources.sh | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | installer/flatpak/generate-nuget-sources.sh | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | installer/flatpak/generate-nuget-sources.sh | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | installer/flatpak/generate-nuget-sources.sh | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | installer/flatpak/generate-nuget-sources.sh | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | installer/flatpak/generate-nuget-sources.sh | 65 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/generate-nuget-sources.sh | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/generate-nuget-sources.sh | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/generate-nuget-sources.sh | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | installer/flatpak/generate-nuget-sources.sh | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 62 | // ── Background ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 65 | // ── Paragraph block ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 76 | // ── Subtitle text label inside the paragraph ────────────────── | COMMENT |
| MEDIUM | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 86 | // ── Grid lines ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 98 | // ── Waveform lines ──────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 131 | // ── Shot-change lines ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 139 | // ── Cursor ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 144 | // ── Border ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ions/Settings/WaveformThemes/WaveformPreviewControl.cs | 148 | // ── Synthetic data ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 19 | // ┌──────────────────────────────────────────────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 22 | // ├──────────────────────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 23 | // │ ┌────────────┬───────┬────────┬──────────────────────────────────┐ │ | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 25 | // │ ├────────────┼───────┼────────┼──────────────────────────────────┤ │ | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 28 | // │ └────────────┴───────┴────────┴──────────────────────────────────┘ │ | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 29 | // ├──────────────────────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM⚡ | …/Video/TextToSpeech/AutoCast/AutoCastSpeakersWindow.cs | 31 | // └──────────────────────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 20 | // ┌──────────────────────────────────────────────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 23 | // ├──────────────────────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 24 | // │ ┌───────────┬───────────┬───────────┬────────────────────────┬─────┐ │ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 26 | // │ ├───────────┼───────────┼───────────┼────────────────────────┼─────┤ │ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 29 | // │ └───────────┴───────────┴───────────┴────────────────────────┴─────┘ │ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 30 | // ├──────────────────────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM⚡ | …eo/TextToSpeech/ActorVoices/ActorVoiceMappingWindow.cs | 32 | // └──────────────────────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM⚡ | …extToSpeech/ActorVoices/ActorVoiceRowSettingsWindow.cs | 17 | // ┌────────────────────────────────────────────────────────┐ | COMMENT |
| MEDIUM⚡ | …extToSpeech/ActorVoices/ActorVoiceRowSettingsWindow.cs | 20 | // ├────────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM⚡ | …extToSpeech/ActorVoices/ActorVoiceRowSettingsWindow.cs | 22 | // │ ┌────────────────────────────────────────────────────┐ │ | COMMENT |
| MEDIUM⚡ | …extToSpeech/ActorVoices/ActorVoiceRowSettingsWindow.cs | 24 | // │ └────────────────────────────────────────────────────┘ │ | COMMENT |
| MEDIUM⚡ | …extToSpeech/ActorVoices/ActorVoiceRowSettingsWindow.cs | 30 | // ├────────────────────────────────────────────────────────┤ | COMMENT |
| MEDIUM⚡ | …extToSpeech/ActorVoices/ActorVoiceRowSettingsWindow.cs | 32 | // └────────────────────────────────────────────────────────┘ | COMMENT |
| MEDIUM | src/ui/Features/Translate/TranslationErrorWindow.cs | 34 | // ── Header row: icon + bold title ────────────────────────────────────── | COMMENT |
| MEDIUM | src/ui/Features/Translate/TranslationErrorWindow.cs | 54 | // ── Hint text ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/ui/Features/Translate/TranslationErrorWindow.cs | 76 | // ── Details ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/ui/Features/Translate/TranslationErrorWindow.cs | 99 | // ── Toggle details link ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/ui/Features/Translate/TranslationErrorWindow.cs | 106 | // ── OK button ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/ui/Features/Translate/TranslationErrorWindow.cs | 111 | // ── Main content stack ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …saApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs | 41 | // ── Left: search, categories, effect gallery ────────────────────────── | COMMENT |
| MEDIUM | …saApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs | 82 | // ── Right: preview, customize, apply to ─────────────────────────────── | COMMENT |
| MEDIUM | …saApplyAdvancedEffect/AssaApplyAdvancedEffectWindow.cs | 172 | // ── Main layout ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ssaApplyAdvancedEffect/Effects/AdvancedEffectMatrix.cs | 49 | // ── MATRIX RAIN COLUMNS ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ssaApplyAdvancedEffect/Effects/AdvancedEffectMatrix.cs | 112 | // ── SUBTITLE CHARACTERS FALL INTO POSITION ─────────────────────────────────────── | COMMENT |
| MEDIUM | src/ui/Features/Main/Layout/InitNativeMacMenu.cs | 91 | // ── App menu ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/ui/Features/Main/Layout/InitNativeMacMenu.cs | 116 | // ── Full NSMenuBar ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/ui/Features/Main/Layout/InitNativeMacMenu.cs | 182 | // ── File ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/ui/Features/Main/Layout/InitNativeMacMenu.cs | 271 | // ── Edit ────────────────────────────────────────────────────────────── | COMMENT |
| 14 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …s/UI/Features/Main/SubtitleOpenPremiereProjectTests.cs | 0 | <premieredata version="3"> <videocomponentchain objectid="10"> <componentchain> <components> <component objectref="20"/> | STRING |
| HIGH | tests/seconv/Core/Se4FormatInputTest.cs | 0 | <premieredata version="3"> <videocomponentchain objectid="10"> <componentchain> <components> <component objectref="20"/> | STRING |
| HIGH | tests/libse/SubtitleFormats/AdobeFormatsSweepTest.cs | 0 | <premieredata version="3"> <videocomponentchain objectid="10"> <componentchain> <components> <component objectref="20"/> | STRING |
| HIGH | tests/seconv/Core/Se4FormatInputTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| HIGH | tests/seconv/Core/DCinemaMxfOutputTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| HIGH | tests/seconv/Core/ImageOutputTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| HIGH | tests/seconv/Core/BinaryFormatRoundTripTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| HIGH | tests/seconv/Core/SubtitleConverterTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| HIGH | tests/seconv/Core/FrameRateConversionTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| HIGH | tests/seconv/Core/Phase7OutputTest.cs | 0 | 1 00:00:01,000 --> 00:00:04,000 <i>hello</i>, world! 2 00:00:05,000 --> 00:00:08,000 this is a test subtitle. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1833 | // review (space to listen, R to redo), as requested in #12093. | COMMENT |
| HIGH | …es/Video/TextToSpeech/Engines/CrispAsrTtsProvenance.cs | 63 | // surfaces the AI-generated nature in its UI, and a spoken disclaimer in front of every | COMMENT |
| HIGH | src/ui/Logic/Config/SeVideoTextToSpeech.cs | 144 | // for disclosing that the result is AI-generated. Drives the `consent_attestation` / | COMMENT |
| HIGH | src/libuilogic/Ocr/NOcrDb.cs | 1604 | // deepSeek: very wide aspect, requires lots of lines, errors as requested | COMMENT |
| HIGH | src/libse/Properties/Resources.Designer.cs | 3 | // This code was generated by a tool. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/UI/Features/Assa/AdvancedEffectTests.cs | 221 | // Step 0: first word flips in, second word is a hidden placeholder | COMMENT |
| LOW⚡ | tests/UI/Features/Assa/AdvancedEffectTests.cs | 224 | // Step 1: first word is shown solid, second word flips in | COMMENT |
| LOW | tests/seconv/Core/OcrTest.cs | 117 | // Step 1: extract everything to count pages | COMMENT |
| LOW⚡ | tests/seconv/Core/OcrTest.cs | 133 | // Step 2: find a specific page in the produced filenames (format: name.teletext_PID_pPAGE.srt) | COMMENT |
| LOW⚡ | tests/seconv/Core/OcrTest.cs | 139 | // Step 3: extract just that one page | COMMENT |
| LOW | docs/features/fix-common-errors.md | 8 | ## Step 1 - Rules | COMMENT |
| LOW | docs/features/fix-common-errors.md | 14 | ## Step 2 - Fixes | COMMENT |
| LOW⚡ | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 4407 | // Step 1: Trim silence from start and end | COMMENT |
| LOW⚡ | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 4414 | // Step 2: VAD-based internal silence compression | COMMENT |
| LOW | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 4498 | // Step 3: Time-stretching (only for audio that still exceeds subtitle duration) | COMMENT |
| LOW | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1661 | // Step 1: Trim silence from start and end. A failed trim (misconfigured/failing ffmpeg) | COMMENT |
| LOW | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1675 | // Step 2: VAD-based internal silence compression | COMMENT |
| LOW | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1734 | // Step 3: Time-stretching | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/UI/Features/Assa/AdvancedEffectTests.cs | 221 | // Step 0: first word flips in, second word is a hidden placeholder | COMMENT |
| LOW⚡ | tests/UI/Features/Assa/AdvancedEffectTests.cs | 224 | // Step 1: first word is shown solid, second word flips in | COMMENT |
| LOW | tests/seconv/Core/OcrTest.cs | 117 | // Step 1: extract everything to count pages | COMMENT |
| LOW⚡ | tests/seconv/Core/OcrTest.cs | 133 | // Step 2: find a specific page in the produced filenames (format: name.teletext_PID_pPAGE.srt) | COMMENT |
| LOW⚡ | tests/seconv/Core/OcrTest.cs | 139 | // Step 3: extract just that one page | COMMENT |
| LOW⚡ | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 4407 | // Step 1: Trim silence from start and end | COMMENT |
| LOW⚡ | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 4414 | // Step 2: VAD-based internal silence compression | COMMENT |
| LOW | …i/Features/Video/TextToSpeech/TextToSpeechViewModel.cs | 4498 | // Step 3: Time-stretching (only for audio that still exceeds subtitle duration) | COMMENT |
| LOW | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1661 | // Step 1: Trim silence from start and end. A failed trim (misconfigured/failing ffmpeg) | COMMENT |
| LOW | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1675 | // Step 2: VAD-based internal silence compression | COMMENT |
| LOW | …deo/TextToSpeech/ReviewSpeech/ReviewSpeechViewModel.cs | 1734 | // Step 3: Time-stretching | COMMENT |
| LOW | src/libse/Forms/MoveWordUpDown.cs | 232 | // If we had opening tags and there's remaining content, we need to check if we should re-add those tags | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/build-ui.yml | 749 | # is the recommended notarization-robust pattern. | COMMENT |
| MEDIUM | …ssaApplyAdvancedEffect/Effects/AdvancedEffectMatrix.cs | 113 | // Each character falls the full screen height in two seamless halves: | COMMENT |
| LOW | src/ui/Logic/UiUtil.cs | 2564 | /// (issue #11553). Callers just set <c>AutomationProperties.Name</c> on the control. | COMMENT |
| MEDIUM | src/ui/Logic/Media/AacDurationReader.cs | 8 | /// and summing per-frame durations. Used as a robust method for computing accurate | COMMENT |
| MEDIUM | src/libuilogic/AutoTranslate/MistralTranslate.cs | 32 | "mistral-large-latest", // Mistral Large 3 — flagship, best for nuanced translation | CODE |
| MEDIUM | src/libuilogic/AutoTranslate/OpenRouterTranslate.cs | 32 | "anthropic/claude-opus-5.5", // Current Anthropic flagship for nuanced translation | CODE |
| MEDIUM | src/libse/Common/VobSubColorIsolation.cs | 151 | /// <see cref="Isolate"/>, this does not assume an indexed palette, so it is robust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/UI/Features/Assa/AdvancedEffectTests.cs | 287 | Assert.EndsWith("Jane Doe", result[1].Text); | CODE |
| LOW | tests/UI/Features/Assa/AdvancedEffectTests.cs | 296 | var result = effect.ApplyEffect(string.Empty, [MakeLine("Jane Doe")], 1280, 720, null); | CODE |
| LOW | tests/UI/Features/Assa/AdvancedEffectTests.cs | 311 | var result = effect.ApplyEffect(header, [MakeLine("Jane Doe")], 1920, 1080, null); | CODE |
| LOW | tests/UI/Controls/SyntaxTextEditorTests.cs | 44 | .Append("Lorem <i>ipsum</i> dolor sit amet, line ").Append(i).Append("\r\n") | CODE |
| LOW | tests/libse/Core/PlainTextImporterTest.cs | 7 | private const string LoremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce feugiat, est id ul | CODE |
| LOW | tests/libse/Core/PlainTextImporterTest.cs | 7 | private const string LoremIpsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce feugiat, est id ul | CODE |
| LOW | docs/plugin.md | 74 | "author": "Jane Doe", | CODE |
| LOW | docs/plugin.md | 116 | "author": "Jane Doe", | CODE |
| LOW | src/libse/Common/ContinuationUtilities.cs | 1383 | var line1 = "Lorem ipsum dolor sit amet\nconsectetur adipiscing elit,"; | CODE |
| LOW | src/libse/Common/ContinuationUtilities.cs | 1383 | var line1 = "Lorem ipsum dolor sit amet\nconsectetur adipiscing elit,"; | CODE |
| LOW | src/libse/Common/DialogSplitMerge.cs | 447 | var line1 = "Lorem ipsum dolor sit amet."; | CODE |
| LOW | src/libse/Common/DialogSplitMerge.cs | 447 | var line1 = "Lorem ipsum dolor sit amet."; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ui/Features/Tools/AiReview/AiReviewContextGenerator.cs | 17 | /// (issue #15290). The text is read in parts sized for a local model's context window; each part | COMMENT |