Skip to content

Releases: ozkozturk/ytcap

v0.4.0

Choose a tag to compare

@ozkozturk ozkozturk released this 20 Jul 02:44

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@ozkozturk ozkozturk released this 20 Jul 00:36

Added

  • Improved sentence-level export with a dependency-free sentence boundary engine that avoids splitting abbreviations (Dr., Mr., e.g., etc.), decimals and version numbers (3.14, v2.4.1), domains and technical names (example.com, Node.js, Next.js), and initials (J. R. R. Tolkien, U.S.). Closing quotes and brackets after terminal punctuation stay inside the sentence.
  • Sentence JSONL records now include cue_coverage, timing_precision, padded playback_start/playback_end playback ranges, and cue provenance fields (start_cue_index, end_cue_index, cue_count, start_char_in_first_cue, end_char_in_last_cue, boundary_engine).
  • Cue-internal sentence boundaries are now estimated with weighted token interpolation (word length and punctuation pause weights), with the previous character-ratio approach kept as a fallback.
  • Strong cue gaps (over 0.6 s) can split unpunctuated text when the next cue starts with an uppercase letter; well punctuated continuing sentences are never split because of a gap.

Changed

  • The legacy timing_strategy sentence field is now derived from the new cue_coverage and timing_precision fields with unchanged values (cue_exact, cue_merge, heuristic, unknown).

v0.2.0

Choose a tag to compare

@ozkozturk ozkozturk released this 19 Jul 10:19

Added

  • Added channel command to process all videos inside a YouTube channel target, by channel ID or URL.
  • Added --ignore-no-subs flag to the channel command to skip videos lacking the requested subtitle track instead of counting them as failures.

Changed

  • Optimized flat playlist extraction in both playlist and channel commands by calculating playlist_end and passing it via --playlist-end to yt-dlp, preventing unnecessary fetching of entire large playlists/channels.
  • Added channel URL normalization to automatically append /videos if a channel URL lacks a specific tab, targeting uploaded videos directly.
  • Enhanced _playlist_entry_source to filter out non-video entries (such as nested sub-playlists or channel tabs returned by yt-dlp).

v0.1.5

Choose a tag to compare

@ozkozturk ozkozturk released this 19 Jul 01:13
  • Relaxed output filename validation in SAFE_FILENAME_PART_RE to allow leading hyphens (-) and underscores (_), fixing export errors on videos with IDs starting with these characters (e.g. --NqGw9rfNA).

v0.1.4

Choose a tag to compare

@ozkozturk ozkozturk released this 17 Jul 21:40

Fixed

  • Relaxed SRT/VTT end timestamp validation to allow zero-duration cues (end == start), commonly generated by YouTube and other subtitle systems.

v0.1.3

Choose a tag to compare

@ozkozturk ozkozturk released this 17 Jul 14:55

Fixed

  • Normalized URLs containing escaped backslashes in CLI input to prevent 404 errors during extraction.
  • Improved subtitle parsing robustness by rejoining cue blocks split by internal blank lines and supporting empty/silent subtitle cues.

v0.1.2

Choose a tag to compare

@ozkozturk ozkozturk released this 09 Jul 21:29

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@ozkozturk ozkozturk released this 07 Jul 02:43

Changed

  • Added GitHub Actions CI and Trusted Publishing release workflows.
  • Updated release documentation to use GitHub Releases, GitHub Actions, and PyPI/TestPyPI Trusted Publishing.
  • Updated English subtitle selection so --lang en can use manual en-* tracks while keeping output filenames canonical.

ytcap 0.1.0

Choose a tag to compare

@ozkozturk ozkozturk released this 07 Jul 00:06

Initial public release of ytcap.\n\nHighlights:\n- Extract YouTube metadata and subtitles with yt-dlp.\n- Inspect video metadata and subtitle availability.\n- Process single videos, batch files, and playlists.\n- Export SRT/VTT subtitles to cue-level or sentence-level JSONL.\n- Publishable Python CLI package with the ytcap console command.\n\nInstall from PyPI with: pipx install ytcap