================== Configuration File ================== ytdl-sub is configured using a ``config.yaml`` file. The ``config.yaml`` is made up of two sections: .. code-block:: yaml configuration: presets: You can jump to any section and subsection of the config using the navigation section to the left. Note for Windows users, paths can be represented with ``C:/forward/slashes/like/linux``. If you wish to represent paths like Windows, you will need to ``C:\\double\\bashslash\\paths`` in order to escape the backslash character. configuration ------------- The ``configuration`` section contains app-wide configs applied to all presets and subscriptions. .. autoclass:: ytdl_sub.config.config_validator.ConfigOptions() :members: :member-order: bysource :exclude-members: subscription_value, persist_logs, experimental persist_logs ~~~~~~~~~~~~ Without this key, ``ytdl-sub`` only prints output to it's ``stdout`` and ``stderr``. If your configuration includes the ``persist_logs:`` key, then ``ytdl-sub`` also writes log files to disk. .. warning:: The log files grow rapidly if ``keep_successful_logs:`` is ``true``, the default, and may fill up disk space. Set ``keep_successful_logs: false`` or prune the log files regularly. For example: .. code-block:: yaml configuration: persist_logs: logs_directory: "/path/to/log/directory" .. autoclass:: ytdl_sub.config.config_validator.PersistLogsValidator() :members: :member-order: bysource presets ------- Each key under ``presets:`` defines a `formula` for how to format downloaded media and metadata. The key is the name of the preset and the value is a mapping that defines the preset. .. note:: The ``presets:`` key at the top of the configuration file contains multiple user-defined presets, but *each preset* itself may include a ``preset:`` key that defines *that preset's* base presets. For example: .. code-block:: yaml presets: Foo Preset: preset: - "Jellyfin TV Show by Date" - "Only Recent" preset ~~~~~~ Presets support inheritance by defining one or more parent presets: .. code-block:: yaml presets: custom_preset: ... parent_preset: ... child_preset: preset: - "parent_preset" In the example above, ``child_preset`` inherits all fields defined in ``parent_preset``. Use parent presets where possible to reduce duplicate yaml definitions. Presets also support inheritance from multiple presets: .. code-block:: yaml child_preset: preset: - "custom_preset" - "parent_preset" In this example, ``child_preset`` will inherit all fields from ``custom_preset`` and ``parent_preset`` in that order. The bottom-most preset has the highest priority. More specifically, presets are merged using `mergedeep`_ via `a TYPESAFE_ADDITIVE merge`_, which means: - if two conflicting keys arent lists or mappings, overwrite the higher priority one - otherwise, combine then re-evaluate If you are only inheriting from one preset, using a single string instead of a list is valid, for example ``preset: "parent_preset"``, but we recommend always using a list for consistent readability between presets. .. _`mergedeep`: https://mergedeep.readthedocs.io/en/latest/ .. _`a TYPESAFE_ADDITIVE merge`: https://mergedeep.readthedocs.io/en/latest/index.html#merge-strategies