Skip to content
GPTMarketPlusBetter software decisions
GuideAI for business8 min read

Five SRT quality checks: CueKeeper's actual errors and limits

Inspect fictional malformed timestamps, reversed intervals, empty cues, overlap and duplicates. See what CueKeeper 1.0.0 reports and two timing problems it misses.

WHAT WE CHECKED

First-party automated synthetic CLI checks

The scope of this guide

Checked

What the check covers

Ran seven fictional SRT fixtures through the unchanged shipped CueKeeper 1.0.0 CLI with CPython 3.13.14 on Windows in an isolated temporary directory. Three invalid fixtures exited 2; four other fixtures exited 0. Selected reports, generated transcripts and hashes are published with this guide.

Read the documented steps
  • Verified archive SHA-256 b9d7fdb31bdbe69423b5031e1681a9868406b7fb093cef82b8db66396fcc6dcc.
  • Ran the recorded commands in one isolated toolkit working directory, with separate per-case output directories and a constrained child environment.
  • Recorded exit statuses and raw-output hashes; copied only fictional inputs, generated text, and selected report fields for publication.
  • Checked both the detected issues and the zero-length/nonadjacent-overlap counterexamples.

What it does not establish

Synthetic SRT examples only. No customer data, media accuracy, exhaustive WebVTT/SRT conformance, usability, time savings, payment settlement, sales, or profit was tested. Python 3.10+ is the declared requirement; these CLI runs used 3.13.14. Public reports contain selected deterministic fields, not full unmodified reports.

Ownership and preparation: We own and sell CueKeeper. This guide was prepared with AI assistance from first-party automated runs of fictional SRT fixtures on November 15, 2026. It is not an independent review or a customer result.

A subtitle file can convert successfully and still need review. This checklist shows what the shipped CueKeeper 1.0.0 CLI actually reports, including two timing cases it misses. You can use all five manual checks and read the fictional inputs and selected outputs without buying the toolkit.

A five-check manual pass

  1. Check the timestamp components and timing-line structure.
  2. Require each cue's end to be later than its start.
  3. Check that each timed cue contains dialogue.
  4. Review overlaps and exact duplicates against the original material.
  5. Compare the exported text with the source after styling and entity conversion.

Keep an untouched copy of the original subtitle file. These checks concern the supplied text and intervals; important passages still need comparison with the recording. For the clean starting point, see the two-cue before-and-after example. Our clean fixture emitted two cues without reported issues.

1. A malformed timestamp stops this conversion

1
00:00:61,000 --> 00:01:02,000
Fictional malformed timestamp.

The seconds component is 61. In this run the command exited 2, the report status was FAILED, and the error was INVALID_TIMESTAMP at cue 1. No transcript was generated in the new output directory. Check the intended time against your source rather than guessing a correction.

{"status":"FAILED","emitted_cue_count":0,"errors":[{"code":"INVALID_TIMESTAMP","cue_index":1}]}

This display selects a few fields from the published selected report. It omits the error message and other fields; it is not the full unmodified report.

2. A reversed interval is an error; a zero-length interval slips through

1
00:00:02,000 --> 00:00:01,000
Fictional reversed interval.

The reversed-interval run exited 2 with INVALID_INTERVAL at cue 1. For a manual review, require a positive duration: the end should be greater than the start.

1
00:00:01,000 --> 00:00:01,000
Fictional zero-length cue.

The shipped Python toolkit accepts this zero-length cue without a warning: exit 0, COMPLETE, one emitted cue. Inspect the selected report and generated transcript. A completed conversion is not proof that every cue has a useful duration. The free browser preview uses a stricter end-after-start check and rejects this example.

3. A timing range without dialogue is not a reading copy

1
00:00:01,000 --> 00:00:02,000

The empty-dialogue fixture exited 2 with EMPTY_DIALOGUE at cue 1. Check for missing text, accidental cue separators, or a cue that contains only styling. The tool cannot reconstruct missing words.

4. Warnings keep the cues, so review them

1
00:00:01,000 --> 00:00:03,000
<i>Hello</i> &amp; goodbye

2
00:00:02,000 --> 00:00:04,000
Overlap

3
00:00:02,000 --> 00:00:04,000
Overlap

This run exited 0 with COMPLETE and three emitted cues. Its selected report includes UNSUPPORTED_MARKUP, OVERLAP, DUPLICATE_CUE, and another OVERLAP. All three passages remain in the timed export.

An exact duplicate has the same start, end, and cleaned dialogue. A repeated phrase at a different time is not that same test. Overlapping captions may be intentional, such as simultaneous dialogue; check the source before deleting or retiming anything.

Check nonadjacent overlaps yourself

1
00:00:01,000 --> 00:00:10,000
Long fictional cue.

2
00:00:02,000 --> 00:00:03,000
Short fictional cue.

3
00:00:04,000 --> 00:00:05,000
Also inside the first cue.

Cue 3 is still inside cue 1's interval. The Python toolkit compares each cue with only the preceding cue: this run reports an overlap for cues 1 and 2, but does not flag cue 3's nonadjacent overlap with cue 1. Its selected report has one overlap warning and three emitted cues. Review long intervals against all cues inside them; this is not exhaustive overlap detection or automatic repair.

5. Compare the words after formatting changes

The first cue in the warnings fixture contains <i>Hello</i> &amp; goodbye. In the Python toolkit it becomes Hello & goodbye, with an UNSUPPORTED_MARKUP warning. The dialogue-only output retains the words but drops the timestamps and styling. Markdown output also escapes punctuation. Compare the reading copy with the original; a styling transformation is not a spelling, translation, or accuracy check.

The free preview keeps that markup and entity text literally rather than performing the Python toolkit's cleanup. It also groups overlap/out-of-order warnings differently. The preview and the paid Python parser are separate implementations: use it to inspect a short excerpt, not as a promise of an identical full report. This guide's captured CLI fixtures are SRT only and do not establish complete SRT/WebVTT conformance.

Read the evidence or reproduce the CLI runs

The evidence manifest records the archive hash, CPython 3.13.14 runtime, commands, exit statuses, and file hashes for all seven cases. Public report names end in .report.selected.json; batch excerpts are named batch-summary.selected.json. They contain selected deterministic fields, sorted and formatted with LF newlines. Generated transcript text is copied unchanged. Raw output and report hashes are recorded; raw reports and runtime files are not published.

Reproduction needs your own purchased CueKeeper 1.0.0 archive; no paid source or ZIP is republished here. The offline reproduction instructions create a fresh directory outside the repository. After extracting the toolkit manually, this is one of the recorded case commands:

python app.py convert fixtures/invalid-timestamp.srt -o output/invalid-timestamp --dialogue-only

Use the fixture from this guide and the Python launcher for your installation. Exit 2 is the expected result for this invalid example. Python 3.10+ is the toolkit's declared requirement; this run used 3.13.14. No customer subtitles, media recording, time-saving benchmark, payment, sale, or profit was evaluated.

Use the checklist, then decide whether you need the toolkit

Try the free browser excerpt preview with up to 20 cues, or keep using this manual checklist. If local file/batch conversion and reports suit your workflow, buy CueKeeper for a one-time $1.00 USD through PayPal. The product page also offers 1.00 USDC on Base. The full toolkit needs Python 3.10+ and no third-party Python packages. It converts subtitles you already have; it does not transcribe media, translate dialogue, identify speakers, or certify caption accuracy.

THE USEFUL PARTS

What works for this scope

  • Shows actual CLI outcomes for seven public fictional fixtures.
  • Separates conversion errors from warnings that retain the cues.
  • Includes manual checks for zero-length and nonadjacent overlaps that the shipped parser misses.

THE TRADE-OFFS

What to keep in mind

  • The Python toolkit accepts zero-length cues without a warning.
  • Its overlap check compares only adjacent cues, not every intersecting interval.
  • The free preview and Python toolkit differ; neither verifies captions against media.

START WITH THE FIT

Is this the right starting point?

A possible fit if you…

  • People reviewing existing SRT files before turning them into a reading copy.
  • Buyers who want to inspect error reports and limitations before installing a local tool.

Look elsewhere if you…

  • Speech-to-text, translation, speaker identification, or exhaustive SRT/WebVTT conformance certification.

PRICE & SCOPE

Know what you’re buying.

Prices documented for this guide. Check the product page for current terms.
ProductListed priceScope and notes
CueKeeper $1.00 USD with PayPal; or 1.00 USDC on BaseOne-time local toolkit purchase. Python 3.10+ and no third-party packages. The checklist and fictional artifacts are free to read; review current checkout terms before paying.

THE VERDICT

The practical takeaway.

Use the manual checklist without buying anything. CueKeeper can report several structural issues, but a successful export is not a caption-quality certificate and its timing checks have specific gaps.

FOLLOW THE EVIDENCE

Sources & supporting material

Open the source notes to understand what supports this guide.

  1. Seven fictional inputs and selected observed outputs
  2. Archive hash, runtime, commands, exit statuses and artifact hashes
  3. Offline reproduction instructions and selection rules
  4. CueKeeper scope and purchase options