Commit graph

2 commits

Author SHA1 Message Date
jlightner
ad16cc6141 fix: direct per-video enrichment and migration statement breakpoints
All checks were successful
CI / test (push) Successful in 20s
- Rewrote scheduler enrichNewItems to fetch metadata per-video directly
  instead of redundantly re-running Phase 1 discovery. Background enrichment
  now calls yt-dlp --dump-json per video ID, updating publishedAt and
  duration on DB records. Emits scan:complete when enrichment finishes
  so clients know to refetch.

- Added missing --> statement-breakpoint markers to migration 0011.
  Without them, Drizzle concatenated the three ALTER TABLE statements
  and SQLite only executed the first one, leaving embed_thumbnail and
  sponsor_block_remove columns missing from format_profiles.
2026-04-04 08:23:23 +00:00
jlightner
aa09bc089c feat: Generic platform + YouTube enhancements (chapters, SponsorBlock, thumbnails)
Generic Platform:
- New 'generic' platform type — catch-all for any URL yt-dlp supports
- GenericSource resolves channel metadata from any URL via yt-dlp extractors
- Content type auto-detection (video/audio/livestream) from yt-dlp metadata
- Works with Vimeo, Twitch, Bandcamp, Dailymotion, and 1000+ other sites
- Registered in both scheduler registry and channel route registry
- Frontend: indigo badge, URL detection fallback, AddChannelModal support

YouTube Enhancements:
- embedChapters: --embed-chapters flag on FormatProfile
- embedThumbnail: --embed-thumbnail flag on FormatProfile
- sponsorBlockRemove: --sponsorblock-remove with configurable categories
  (sponsor, selfpromo, interaction, intro, outro, preview, music_offtopic, filler)
- Migration 0011: adds columns to format_profiles table
- All three configurable per format profile via API and (future) Settings UI
2026-04-04 02:45:02 +00:00