[DOCS] Music presets + more (#1095)

This commit is contained in:
Jesse Bannon 2024-10-23 21:34:38 -07:00 committed by GitHub
parent c8ef766627
commit 31e4da9ff7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 157 additions and 42 deletions

View file

@ -1,16 +1,13 @@
==================
Subscriptions File
==================
------------------
subscriptions.yaml
------------------
The ``subscriptions.yaml`` file is where we use our :ref:`config_reference/config_yaml:presets` in the :ref:`config_reference/config_yaml:config.yaml`
to define a ``subscription``: something we want to recurrently download such as a specific
The ``subscriptions.yaml`` file is where we use :ref:`config_reference/config_yaml:presets`
to define a ``subscription``: something we want to recurrently download, such as a specific
channel or playlist.
The only difference between a ``subscription`` and ``preset`` is that the subscription
must have all required fields and ``{override_variables}`` defined so it can perform a download.
must have all required variables defined to perform a download.
Below is an example that downloads a YouTube playlist:
@ -41,7 +38,7 @@ the ``parent preset`` to ``playlist_preset_ex``, and must define the variables `
and ``{url}`` since the preset did not.
Beautifying Subscriptions
~~~~~~~~~~~~~~~~~~~~~~~~~
-------------------------
Subscriptions support using presets as keys, and using keys to set override variables as values.
For example:
@ -96,10 +93,8 @@ parent preset:
genre: "{subscription_indent_1}"
content_rating: "{subscription_indent_2}"
.. _subscription value:
File Preset
~~~~~~~~~~~
-----------
You can apply a preset to all subscriptions in the ``subscription.yaml`` file
by using the file-wide ``__preset__``:
@ -117,31 +112,3 @@ by using the file-wide ``__preset__``:
This ``subscription.yaml`` is equivalent to the one above it because all
subscriptions automatically set ``__preset__`` as a ``parent preset``.
Subscription Value
~~~~~~~~~~~~~~~~~~~
NOTE: This is deprecated in favor of using the method in :ref:`config_reference/subscriptions_yaml:beautifying subscriptions`.
With a clever config and use of ``__preset__``, your subscriptions can typically boil
down to a name and url. You can set ``__value__`` to the name of an override variable,
and use the override variable ``subscription_name`` to achieve one-liner subscriptions.
Using the example above, we can do:
.. code-block:: yaml
:caption: subscription.yaml
__preset__:
preset:
- "tv_show"
overrides:
tv_show_name: "{subscription_name}"
__value__: "url"
# single-line subscription, sets "Brandon Acker" and the subscription value
# to the override variables tv_show_name and url
"Brandon Acker": "https://www.youtube.com/@brandonacker"
Traditional subscriptions that can override presets will still work when using ``__value__``.
``__value__`` can also be set within a :ref:`config_reference/config_yaml:config.yaml`.

View file

@ -1,5 +1,64 @@
Development and Contributing
============================
.. toctree::
Requirements
------------
- python >= 3.10
- ffmpeg/ffprobe 4.4.5 (test checksums rely on this version)
- make
Local Install
-------------
.. tab-set-code::
.. code-block:: shell
pip install -e .[test,lint,docs]
.. code-block:: zsh
pip install -e .\[test,lint,docs\]
Linter
------
All source code contributed must be formatted to our linter specification.
Run the following to auto-format and check for any issues with your code:
.. code-block:: shell
make lint
Adding Documentation
--------------------
Docs can be found in ``ytdl-sub/docs/source/``, and are built using the command:
.. code-block:: shell
:caption: Viewable at http://localhost:63342/ytdl-sub/docs/build/html/index.html once built
make docs
Some of the documentation is built using doc-strings from the python source code. The above
command will rebuild those as well.
Testing
-------
Tests are written using pytest. Many of them evaluate checksums of output files to ensure no unintended
changes are introduced to the way ``ytdl-sub`` produces files. This checksum can be inaccurate for
end-to-end tests, but are reliable for integration tests.
If integration tests are failing, ensure...
- you're using the correct ffmpeg version
- you are developing on Linux or Mac (have not tested windows yet)
- your local ``ytdl-sub`` dependencies are up-to-date
IDE Setup
---------
PyCharm is our preferred IDE. The codebase is simple enough to where it's not required, but
is highly recommended.
TODO: screenshots of configuration

View file

@ -20,6 +20,28 @@ Helper Presets
Common presets are not usable by themselves- setting one of these as the sole preset of your subscription and attempting to download will not work. But you can add these presets to quickly modify an existing preset to better suit your needs.
Only Recent
-----------
To only download a recent number of videos, apply the ``Only Recent`` preset. Once a video's
upload date is outside of the range, or you hit max files, older videos will be deleted automatically.
.. code-block:: yaml
__preset__:
overrides:
# Set to a non-zero value to only keep this many files at once per sub
only_recent_max_files: 0
only_recent_date_range: "7days"
Plex TV Show by Date | Only Recent:
= Documentaries:
"NOVA PBS": "https://www.youtube.com/@novapbs"
To prevent deletion of files, use the preset ``Only Recent Archive`` instead.
Best A/V Quality
----------------

View file

@ -11,4 +11,5 @@ definitions :doc:`here </config_reference/prebuilt_presets/index>`.
helpers
tv_shows
music
music
music_videos

View file

@ -1,3 +1,64 @@
=============
Music Presets
=============
=============
Music downloadable by yt-dlp comes in many flavors. ``ytdl-sub`` offers a suite
of various presets for handling some of the most popular forms of uploaded music
content.
YouTube Releases
----------------
Many artists, especially those auto-uploaded as ``Topics`` in YouTube have a section on
their channel named "Releases", or "Albums and Singles". The ``YouTube Releases`` preset aims to
scrape this *playlist of playlists*.
Playlists are recognized as the album, and videos within it are tracks.
.. code-block:: yaml
YouTube Releases:
= Jazz: # Sets genre tag to "Jazz"
"Thelonious Monk": "https://www.youtube.com/@theloniousmonk3870/releases"
.. hint::
The subscription *value* (denoted by =) will set the genre tag for all music scraped under its key.
YouTube Full Albums
-------------------
In many cases, albums are uploaded to YouTube as a single video, where each track as separated by either
chapters or timestamps in a description. The ``YouTube Full Albums`` preset will take each video and split
it by the chapters to form an album.
Videos are recognized as the album, and chapters within it are tracks.
.. code-block:: yaml
YouTube Full Albums:
= Lofi:
"Game Chops": "https://www.youtube.com/playlist?list=PLBsm_SagFMmdWnCnrNtLjA9kzfrRkto4i"
Soundcloud Discography
----------------------
SoundCloud tracks can be uploaded as either a single, part of an album, or a collaboration
with another artist. At this time, ``SoundCloud Discography`` only scrapes singles and albums.
It will attempt to group tracks into albums before falling back to single format.
.. code-block:: yaml
SoundCloud Discography:
= Chill Hop:
"UKNOWY": "https://soundcloud.com/uknowymunich"
= Synthwave:
"Lazerdiscs Records": "https://soundcloud.com/lazerdiscsrecords"
"Earmake": "https://soundcloud.com/earmake"
Bandcamp
--------
Bandcamp albums and singles can be scraped using the ``Bandcamp`` preset.
.. code-block:: yaml
Bandcamp:
= Lofi:
"Emily Hopkins": "https://emilyharpist.bandcamp.com/"

View file

@ -0,0 +1,5 @@
===================
Music Video Presets
===================
WIP