What's new
🔍 In-app YouTube search
A search bar on the dashboard lets you find videos and channels without leaving the app.
- Videos tab returns up to 300 results with pagination ("Load 30 more")
- Channels tab returns the first page of channel results, each with a Videos button that opens a browse page
- Each result has a one-click Add video / Subscribe button that feeds straight into the download pipeline
📺 Channel browse page
Clicking Videos on any channel result opens /channel/<id> — a paginated list of that channel's uploads.
- Starts at 60 videos
- Load 30 more button increments by 30 up to 500
- Includes the channel avatar, name, and a Subscribe button for the whole channel
🗑️ Auto-delete after watching
Optional per-user toggle on the dashboard. When enabled, ytfinall is notified by Jellyfin the moment a video is watched to completion and removes the file from disk.
- Only fires when Jellyfin reports
PlayedToCompletion=true— stopping halfway, pausing, or closing the player does nothing - Deletion also removes the
.nfo,.info.json, and ytfinall's own marker file - Falls back to the retention scheduler for anything you don't watch
- Requires Jellyfin's Webhook plugin — setup instructions are shown on ytfinall's admin settings page
🏷️ Ownership markers
Every download is now tagged with a .ytfinall.json sidecar that records the source it came from. This serves two purposes:
- Retention — each file is evaluated against its own source's retention period
- Safe deletion — the webhook and cleanup pass refuse to delete any file without a marker, so non-ytfinall media under the same mount is never touched
🧩 Browser extension v1.0.2
The companion extension was updated alongside this release:
- Server URL now works with or without
http://— typingyoutube.example.combehaves the same ashttp://youtube.example.com - Widened host permissions for reverse-proxied setups on ports other than 6842
- Firefox: added required data collection declaration
Chrome users should grab the new zip from this release's assets. Firefox and Edge users will get it automatically once the store updates are approved.
🛠️ Fixes
- Fixed a
name 'db' is not definederror on startup that prevented download task cleanup from running - Fixed the retention scheduler crashing on
No item with that key— sweeps now actually run - Fixed Jellyfin webhook user matching — Jellyfin sends UUIDs with dashes, ytfinall stores them without, and the two now normalize
- Rewrote the in-app webhook setup instructions to match what actually works with the current plugin
📝 Upgrade notes
Drop-in — no database migration needed. Existing downloads will not have .ytfinall.json markers, so auto-delete will skip them until they're re-downloaded. To backfill markers for existing files, run this inside the container:
find /media/users -type f \( -name "*.mp4" -o -name "*.mkv" -o -name "*.webm" -o -name "*.m4v" \) | while read f; do
[ -f "$f.ytfinall.json" ] || echo "{\"source_id\":null}" > "$f.ytfinall.json"
done