What's Changed
- Fix python version in manage.py by @michalmiddleton in #537
- Use YOUTUBE_DL_TEMPDIR setting by @tcely in #556
- Reworked Dockerfile by @tcely in #558
- Remove value from TARGETARCH by @tcely in #559
- Spelled firewall correctly by @tcely in #560
- Configure minimum permitted video height with VIDEO_HEIGHT_CUTOFF env var by @danielmawhirter in #557
- Refinements for Dockerfile by @tcely in #562
- Adjust to correct 60 fps case by @tcely in #569
- Accept '-' in sub_langs by @tcely in #573
- Simplify regex for sub_langs by @tcely in #574
- Handle STR0NNN in a generic way by @tcely in #571
- Sort video formats by height and bitrate by @tcely in #566
- Disable checking against days to keep by @tcely in #576
- Add Support for TUBESYNC_DIRECTORY_PREFIX Environment Variable by @jameswlane in #572
- Adjust days_to_keep logic by @tcely in #577
- Remove audio / video directory modification by @tcely in #578
- Simplify directory_path by @tcely in #579
- Remove unused timedelta import by @tcely in #585
- Use tempfile for write_text_file by @tcely in #587
- Remove forcejson option by @tcely in #589
- Switch to color option by @tcely in #590
- Use Path in file_is_editable by @tcely in #592
- Bump yt_dlp & ffmpeg by @tcely in #607
- Do not log download progress lines by default by @tcely in #600
- Remove duplicated ' to:' by @tcely in #602
- Cleanup removed media that has not been downloaded too by @tcely in #605
- Made messages more human friendly by @tcely in #606
- Use title from DB by @tcely in #604
- Only log new media by @tcely in #601
- Update ci.yaml by @tcely in #597
- Handle download_media_metadata task failures by @RichardHyde in #593
- Ignore case when checking the filter by @RichardHyde in #594
- Handle raise_no_formats exception by @tcely in #591
- Fix paths for when filename includes sub-directories by @tcely in #599
- Reduce image size and keep pycache in a volume by @tcely in #596
- Do not try to skip already skipped media by @tcely in #595
- Match another variation of the message by @tcely in #610
- Don't chmod a+r when it already has those permissions by @tcely in #611
- exec nginx so bash isn't still running by @tcely in #613
- Make better use of CPU cache with nginx by @tcely in #614
- Test and log ffmpeg version output earlier by @tcely in #615
- Simplify directory_path for Media by @tcely in #618
- Feature by @Makhuta in #617
- Multi-stage docker build for ffmpeg & s6-overlay by @tcely in #619
- Filter metadata to avoid storing excess text in the database table by @tcely in #612
- Dockerfile health check without the shell by @tcely in #620
- Avoid env for healthcheck by @tcely in #623
- Add environment variables for container by @tcely in #622
- Don't write 'None' in default rating by @tcely in #626
- Don't write zero into MPAA in .nfo by @tcely in #627
- Bump ffmpeg & yt-dlp by @tcely in #629
- Cache for pipenv & apt by @tcely in #630
- Update README.md by @FaySmash in #625
- Treat static_url the same as other URLs by @tcely in #635
- Create upgrade_yt-dlp.sh by @tcely in #628
- Pipefile -> Pipfile by @tcely in #636
- Update architectures FAQ by @tcely in #637
- Add youtube.com as a valid domain by @tcely in #638
- Automated channel_id extraction by @tcely in #640
- Better display for audio formats by @tcely in #643
- Report db.sqlite3 size on dashboard by @tcely in #580
- Display media we can't download as skipped by @tcely in #648
- Remove unnecessary spaces by @tcely in #651
- DRY {json,nfo,thumb}name functions by @tcely in #652
- Default to valid JSON by @tcely in #653
- Display language_code for audio formats by @tcely in #654
- Set a default nice level by @tcely in #656
- Download thumbnail and media at the same priority by @tcely in #650
- Rename files after a source format change by @tcely in #586
- Use TextChoices for SponsorBlock_Category by @tcely in #658
- Fix CommaSepChoiceField by @tcely in #657
- Use yt_dlp.get_postprocessors() by @tcely in #655
- Use a temporary directory per task by @tcely in #659
- Add
ytoptsby @tcely in #664 - Use strings for
ytoptspaths by @tcely in #666 - Fix log.debug() by @tcely in #667
- Fix filesizeformat prefixes by @tcely in #644
- Remove files in post_delete when Media is deleted by @tcely in #598
- Reorganize hooks by @tcely in #663
- Update local_settings.py.container by @tcely in #671
- Configure settings for this test by @tcely in #673
- Simply add the string we want by @tcely in #674
- Adjustments for downloading delays by @tcely in #672
- export
TUBESYNC_RESET_DOWNLOAD_DIRby @tcely in #679 - Rework
sponsorblock_categoriesandCommaSepChoiceFieldby @tcely in #680 - Fix the misspelled
expected_categoriesby @tcely in #681 - Also check for
media.media_file.nameby @tcely in #684 - Do not store duplicate categories by @tcely in #687
- Wait for video premiere by @tcely in #685
- Turn off the
text-transformwith a class by @tcely in #686 - Remove code that didn't work by @tcely in #688
- Bump
ffmpegby @tcely in #689 - Do not delete tasks that are currently running by @tcely in #665
- Rework download progress hook by @tcely in #691
- Remove existing (unlocked) tasks is safe to use by @tcely in #694
- Add more keys to filter by @tcely in #696
- Add & use functions from status classes by @tcely in #692
- Use
libopusand speed up VP9 encoding by @tcely in #697 - Add status text to the download task by @tcely in #706
- Do not schedule additional
download_mediatasks by @tcely in #707 - Try to include
timestampby @tcely in #704 - Rename the internal function by @tcely in #709
- Control
writethumbnailwithembed_thumbnailby @tcely in #712 - Stop when the paths match by @tcely in #699
- Remove subtitles also by @tcely in #700
- Allow
exec_cmddictionary to be configured in settings by @tcely in #701 - Remove unused
filter_mediaby @tcely in #702 - Deduplicated
fieldsby @tcely in #710 - Skip downloaded media that was deleted by @tcely in #703
- We can filter before metadata by @tcely in #714
- Use a raw string by @tcely in #715
- Show publication date and the not truncated title by @tcely in #717
- Find the correct media instance from hooks by @tcely in #720
- Remove logging of the SQL by @tcely in #724
- Handle
Noneinvideo["duration"]by @tcely in #726 - Move things into
choices.pyby @tcely in #711 - Do not turn
Media.skipoff for already skipped media by @tcely in #727 - Let Tasks expire correctly by @tcely in #690
- Schedule a rename task per media item instead by @tcely in #730
- Review of signals.py by @tcely in #731
- Do not show controls when skipped by @tcely in #732
- Unskip when redownloading by @tcely in #733
- Ensure the directory exists for testing by @tcely in #735
- Add
metadata_publishedfunction by @tcely in #737 - Move import for
tzby @tcely in #739 - Load
fulltitlefrom themetadataby @tcely in #736 - Prefer
fulltitlebut do not require it by @tcely in #740 - Add
XDG_CACHE_HOMEenvironment variable by @tcely in #743 - Bump
ffmpegbuild by @tcely in #744 - Defer fields for
rename_mediatask by @tcely in #745 - Select a combined format if nothing else is available by @tcely in #746
- Add and use
refresh_formatsby @tcely in #747 - Do not let one private video hold up the rest by @tcely in #749
- Use multiple threads for renaming by @tcely in #750
- Remove duplicate function by @tcely in #751
- Process renaming after downloads by @tcely in #752
- Check for the database vendor first by @tcely in #755
- Log not existing source pre save by @tcely in #758
- Move
rename_mediatask creation toMediapost save by @tcely in #759 - Update
rename_all_media_for_sourceby @tcely in #760 - Be more consistent with
fmtby @tcely in #761 - Add scheduling delays by @tcely in #757
- Optimize
rename_filesby @tcely in #762 - Fix an internal server error by @tcely in #763
- Be more efficient with
Media.loaded_metadataby @tcely in #764 - Jellyfin media server support by @tcely in #756
- Pin
django-background-tasksby @tcely in #754 - Upgrade to 1.2.8 for Django 5 support by @tcely in #765
- Remove Redis by @tcely in #766
- Prevent unintended changes to the cached dictionary by @tcely in #767
- Access
posix_epochcorrectly by @tcely in #769 - SQLite connection options by @tcely in #581
- Check for the cached dictionary first by @tcely in #771
- Remove unnecessary
chmodexecutions by @tcely in #775 - Store
Media.downloaded_filesizefor imported files by @tcely in #776 - Prevent unintended unhealthy restarts by @tcely in #784
- CSRF Fixes for Django 5.1 by @tcely in #786
- Use
yt-dlpdaterangeoption by @tcely in #787 - Clean up
__pycache__directories by @tcely in #792 - Add
paginationfor scheduled tasks by @tcely in #790 - Better display of large numbers by @tcely in #793
- Do not lose track of downloaded files by @tcely in #794
- Be more user-friendly when sorting tasks by @tcely in #795
- Restrict
PYTHONPYCACHEPREFIXtopipenvby @tcely in #796 - Rename to a temporary path then final destination by @tcely in #799
- Fail tasks when metadata can't be fetched by @tcely in #801
- Display task errors from the current page by @tcely in #802
- Verify
nginxconfiguration for the image by @tcely in #804 - Long web requests by @tcely in #803
- Bump
ffmpegby @tcely in #806 - No more errors for
Nonevalues set in metadata by @tcely in #807 - Name the buildx step by @tcely in #809
- Set
Media.download_datefor imported files by @tcely in #800 - Removed extra characters by @tcely in #810
- Fix 2160 resolution label by @tcely in #812
- Filter latest downloads with
download_date IS NOT NULLby @tcely in #814 - Remove useless duplicated assignment by @tcely in #815
- Disable proxies for health checking by @tcely in #816
- Do not try to refresh formats when no metadata exists by @tcely in #819
- Update 0028_alter_source_source_resolution.py by @tcely in #822
- Increase database efficiency by @tcely in #824
- Improve checking media efficiency by @tcely in #826
- Speed up
arm64builds by @tcely in #808 - Remove explicit
libsassby @tcely in #828 - Remove explicit
django-compressorby @tcely in #829 - Use socks support from the operating system by @tcely in #830
- Reorder checking all media to after indexing by @tcely in #832
- Check the copied
nginxconfiguration by @tcely in #835 - docs: update README.md by @eltociear in #836
- Use '/downloads' instead of '/' for odd cases by @tcely in #838
- Increase episode number calculation speed by @tcely in #839
- Better environment variable support for settings by @tcely in #821
- Patch
yt-dlpto usecheck_thumbnailsby @tcely in #818 - Add timing and profiling decorators by @tcely in #827
- Improve deleting sources by @tcely in #842
- Clean up more tasks for deleted sources by @tcely in #844
- Add
geo_verification_proxyto defaultyt-dlpsettings by @tcely in #845 - More Docker cache hits by @tcely in #846
- Use the
curl-cffiextra to supportimpersonateoption by @tcely in #847 - Base request delay on the number of tasks running by @tcely in #851
- Prevent
filenamefrom beginning with/by @tcely in #853 - Create
fatal_http_errors.pypatch by @tcely in #852 - Upgrade
psycopgby @tcely in #854 - Reduce the amount of time the database is locked by @tcely in #855
- Reschedule download tasks when metadata is not ready by @tcely in #856
- Delete pip.conf by @tcely in #831
- Use the specific
NoMetadataExceptionby @tcely in #857 - Better indexing of inactive sources by @tcely in #860
- Add a default thumbnail URL before metadata is available by @tcely in #864
- Show progress on tasks page by @tcely in #833
- fixup: indentation by @tcely in #866
- Thumbnail download can proceed without metadata by @tcely in #865
- The workflow should work for forks also by @tcely in #859
- Be consistent with the tuple syntax by @tcely in #867
- Use
Media.metadata_publishedinreduce_databy @tcely in #868 - More stable
ffmpegreleases by @tcely in #870 - Refresh formats only after metadata was saved by @tcely in #850
- Tweak tasks page by @tcely in #823
- Apply the suggested "Sync Now" changes by @tcely in #841
- Tweak name to be accurate again by @tcely in #872
- Clean
verbose_namewhen a repeating task did not complete by @tcely in #874 - Add and use the
update_task_statusfunction by @tcely in #875 - Add the video number to the debug log message by @tcely in #876
- Don't skip missing fragments during format testing by @tcely in #877
- Use
locked_atas it is closer to started by @tcely in #878 - Resume partial downloads unless the
.cleanfile is found by @tcely in #879 - Change the task expiration to 1 day by @tcely in #880
- Configure logging for
background_taskby @tcely in #881 - fixup: missed
self.by @tcely in #883 - fixup: use the class instead of an instance by @tcely in #884
- Remove the hard-coded class name by @tcely in #885
- Force new
yt-dlpversion by @tcely in #886 - Turn off the
infostep again for pull requests by @tcely in #890 - Move
yt-dlpAPI work to an action by @tcely in #889 - Turn off debugging for the
lowercase-variablesstep by @tcely in #891 - Add the
string-caseaction by @tcely in #892 - Tweak the step name by @tcely in #894
- Clean up the
.jsonfile and log the results by @tcely in #896 - Start a library of useful functions for actions and workflows by @tcely in #895
- Handle strings better by @tcely in #898
- Clean up debug logs from
process_tasksby @tcely in #899 - Adjust to the much larger
MAX_RUN_TIMEby @tcely in #901 - Don't skip unavailable fragments during download by @tcely in #903
- Create down-signal for
tubesync-workerby @tcely in #906 - Switch to an allowed signal by @tcely in #907
- Add a post-processor to disallow partial playlist results by @tcely in #905
- Add
extractorso thatidcannot collide by @tcely in #910 - Use
list.appendinstead oflist.extendby @tcely in #914 - Run the check source directory task before saving existing sources by @tcely in #916
- Add
diveanalysis by @tcely in #915 - Log more details about what
pipenvinstalls by @tcely in #918 - Avoid Django
5.2until it is tested by @tcely in #919 - Clean up old
debconfcache files by @tcely in #922 - Close the
ThreadPoolbefore exiting by @tcely in #923 - Set priority in tasks.py by @tcely in #920
- Allow AV1 as a choice by @tcely in #753
- Rework task queuing by @tcely in #925
- Create
0030_alter_source_source_vcodec.pyby @tcely in #929 - Use a task per instance for
Media.refresh_formatsby @tcely in #930 - Restrict delays to a range between 10 seconds and 20 minutes by @tcely in #911
- Fix video format sorting in case of missing keys by @danielmawhirter in #931
- Set
verbose_nameforrefesh_formatstask by @tcely in #932 - Switch to
getattrby @tcely in #934 - Add renaming feature warning to the dashboard by @tcely in #936
- Extract audio from
webmdownloads by @tcely in #937 - Remove unused
media_post_deleteby @tcely in #939 - Check source directory when tasks were reset by @tcely in #940
- Increase minor version by @tcely in #942
New Contributors
- @michalmiddleton made their first contribution in #537
- @tcely made their first contribution in #556
- @danielmawhirter made their first contribution in #557
- @jameswlane made their first contribution in #572
- @RichardHyde made their first contribution in #593
- @Makhuta made their first contribution in #617
- @eltociear made their first contribution in #836
Full Changelog: v0.13.7...v0.14.1