Skip to content

Releases: jsight/ytsync

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Mar 21:44
v1.4.0: add timestamp and release_timestamp fields to VideoMetadata

v1.3.0 - Comprehensive yt-dlp Option Support

Choose a tag to compare

@jsight jsight released this 06 Feb 17:50

What's New in v1.3.0

This release dramatically expands the public DownloadOptions API to expose the full breadth of yt-dlp's capabilities through a clean, typed Go interface.

Added

  • Cookie and authentication support - CookiesFile, CookiesFromBrowser, Username/Password, Netrc, VideoPassword
  • Network configuration - Proxy, RateLimit, SourceAddress, ForceIPv4, SocketTimeout, ConcurrentFragments, Impersonate
  • Format discovery API - ListFormats() and ListSubtitles() convenience wrappers with FormatInfo/SubtitleInfo types
  • Subtitle support - WriteSubtitles, WriteAutoSubtitles, SubtitleLanguages, SubtitleFormat, ConvertSubtitles, EmbedSubtitles
  • Download behavior controls - Retries, FragmentRetries, NoOverwrites, Continue, RestrictFilenames, DownloadArchive, BreakOnExisting, MaxDownloads, ExtraArgs
  • Metadata embedding - WriteThumbnail, EmbedMetadata, EmbedThumbnail, EmbedChapters, WriteInfoJSON, ConvertThumbnails
  • Post-processing - RemuxVideo, RecodeVideo, SponsorBlockMark, SponsorBlockRemove, FFmpegLocation, DownloadSections
  • Content filtering - MatchFilters, DateAfter, DateBefore, AgeLimit, XForwardedFor, PlaylistItems
  • Format selection - FormatSort, MergeOutputFormat
  • Enhanced CLI - 16+ new download flags for cookies, metadata, subtitles, SponsorBlock, proxy, and more
  • Cookie-aware metadata/transcript APIs - MetadataOptions, FetchMetadataWithOptions()

Full Changelog

See CHANGELOG.md for the complete list of changes.

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Jan 22:43

Added

Custom filename support in DownloadOptions

Implements feature request #4

  • New Filename field - Optional custom output filename (without extension)
  • Resolves filename conflicts - Avoids collisions from reused video titles
  • Precedence over title - Custom filename takes priority when provided
  • Automatic sanitization - Invalid characters removed from filenames
  • Use case: ragpile - Allows unique naming using video IDs (e.g., 'dQw4w9WgXcQ')

Usage Example

// Download with custom filename using video ID
result, err := ytsync.DownloadVideoWithOptions(ctx, "dQw4w9WgXcQ", &ytsync.DownloadOptions{
    OutputDir: "/tmp/downloads",
    Filename:  "dQw4w9WgXcQ", // Use video ID for unique naming
})

Testing

  • Added 7 comprehensive unit tests
  • Coverage for custom filenames with special characters
  • Tests for video ID usage and edge cases
  • All existing tests pass

Binaries

Pre-built binaries available for:

  • Linux (amd64, arm64)
  • macOS (amd64, arm64)
  • Windows (amd64)

SHA256 checksums in SHA256SUMS file.

v1.1.2

Choose a tag to compare

@github-actions github-actions released this 19 Jan 21:35
Add metadata command to ytsync CLI

- Add new 'metadata' command for fetching video metadata without transcripts
- Support table (default) and JSON output formats
- Display comprehensive metadata: title, uploader, duration, view count, etc.
- More reliable than transcript extraction which can hit API limits

Closes: ytsync-tt4

v1.1.1

Choose a tag to compare

@github-actions github-actions released this 19 Jan 07:57

Fixed

VideoInfo.Published date parsing - Upload date parsing verification

Fixes #3

  • Added comprehensive test coverage for YYYYMMDD format parsing from yt-dlp output
  • Verified correct handling of edge cases:
    • Old video dates (1980s-2000s)
    • Invalid date strings
    • Multiple fallback date sources (release_date, published_date)
    • Timestamp fallbacks (ReleaseTimestamp, CreatedAt)
  • Enhanced unit tests with 11 new test cases
  • Existing parsing logic verified to be working correctly for all date sources

Binaries

This release includes pre-built binaries for:

  • Linux (amd64, arm64)
  • macOS (amd64, arm64)
  • Windows (amd64)

SHA256 checksums are available in SHA256SUMS file.

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Jan 20:40
Release v1.1.0 - Public DownloadVideo API

Features:
- New DownloadVideo() and DownloadVideoWithOptions() public API functions
- Support for audio-only extraction (MP3) with configurable quality
- Optional metadata JSON file alongside downloaded media
- Custom output directory and format selection
- Context support for cancellation and timeouts

Changes:
- Improved video format selection with fallback chain

Closes #2

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 13 Jan 03:22
ytsync v1.0.1 - Windows Build Fix

Fixes the Windows build that failed in v1.0.0.

- Cross-platform file locking: split into Unix (flock) and Windows (LockFileEx) implementations

- Added golang.org/x/sys/windows dependency for Windows file locking
- Uses build tags to select platform-specific implementation

Full release notes in v1.0.0.

v1.0.0-alpha1

Choose a tag to compare

@github-actions github-actions released this 11 Jan 01:58

ytsync 1.0.0-alpha1

Features

  • Public Library API: Use ytsync as a Go library with high-level convenience functions
  • YouTube Integration: List videos from channels using RSS feeds or yt-dlp
  • Transcript Extraction: Extract transcripts with language preference support
  • Metadata Fetching: Retrieve comprehensive video metadata including duration, view count, and more
  • Robust Error Handling: Custom error types for programmatic error handling
  • Retry Logic: Exponential backoff with jitter for resilient operations
  • CLI Tool: Standalone command-line tool for all major operations
  • Cross-Platform: Binaries for Linux, macOS, and Windows (both amd64 and arm64)

What's Included

  • ytsync package for programmatic use
  • ytsync list command to discover videos
  • ytsync transcript command to extract captions
  • ytsync download command to get videos with metadata

Documentation

  • Comprehensive godoc comments on all public APIs
  • Example code for common operations
  • doc.go with detailed package documentation

Requirements

  • Go 1.24+ for library usage
  • yt-dlp installed and available in PATH

CI/CD

  • Automated testing on Go 1.23 and 1.24
  • Linting and code quality checks
  • Automated multi-platform builds
  • GitHub Actions workflows for test, lint, build, and release

Known Limitations

  • Requires yt-dlp for most operations
  • YouTube may rate-limit heavy usage (retry logic helps)
  • Respects YouTube Terms of Service (no private/unlisted content access)

Next Steps

  • Integration tests for video list fetching
  • Optional YouTube Data API v3 support
  • Pagination state persistence for incremental syncs
  • Rate limiting improvements for Innertube API