Deployed b710b5b0 with MkDocs version: 1.6.1

This commit is contained in:
2026-11-03 16:15:21 +00:00
parent 5e1acb6077
commit 78ebacddbf
16 changed files with 355 additions and 161 deletions
+2 -2
View File
@@ -2363,7 +2363,7 @@
<div class="doc doc-contents ">
<p>Find the folder template for the given title kind.</p>
<p>kind: one of "movies", "series", "songs", "albums".
<p>kind: one of "movies", "series", "sports", "songs", "albums".
Falls back to the legacy single-string folder template, then "".</p>
@@ -2409,7 +2409,7 @@ between variables. Falls back to dot separator (scene-style) by default.</p>
</td>
<td>
<div class="doc-md-description">
<p>One of "movies", "series", or "songs".</p>
<p>One of "movies", "series", "sports", or "songs".</p>
</div>
</td>
<td>
+84
View File
@@ -2731,6 +2731,17 @@
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.drm.is_null_key" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;is_null_key
</span>
</a>
</li>
<li class="md-nav__item">
@@ -2742,6 +2753,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.drm.drop_null_keys" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;drop_null_keys
</span>
</a>
</li>
<li class="md-nav__item">
@@ -3619,6 +3641,17 @@
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.drm.is_null_key" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;is_null_key
</span>
</a>
</li>
<li class="md-nav__item">
@@ -3630,6 +3663,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.drm.drop_null_keys" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;drop_null_keys
</span>
</a>
</li>
<li class="md-nav__item">
@@ -6113,6 +6157,26 @@ track exactly. A PSSH can name the KIDs of other renditions too.</p>
<div class="doc doc-object doc-function">
<h2 id="unshackle.core.drm.is_null_key" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">is_null_key</span>
<a href="#unshackle.core.drm.is_null_key" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">is_null_key</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>True for a blank or all-zero content key, the null key that no vault stores.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="unshackle.core.drm.drm_from_dict" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">drm_from_dict</span>
@@ -6136,6 +6200,26 @@ contacting a license server.</p>
<div class="doc doc-object doc-function">
<h2 id="unshackle.core.drm.drop_null_keys" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">drop_null_keys</span>
<a href="#unshackle.core.drm.drop_null_keys" class="headerlink" title="Permanent link">&para;</a></h2>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">drop_null_keys</span><span class="p">(</span><span class="n">drm</span><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p>Remove the null keys from a DRM object's content keys. A read-only key view stays as it is.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h2 id="unshackle.core.drm.real_kids" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">real_kids</span>
+46 -3
View File
@@ -1926,6 +1926,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.titles.Episode.template_kind" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;template_kind
</span>
</a>
</li>
<li class="md-nav__item">
@@ -2190,6 +2201,17 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#unshackle.core.titles.Episode.template_kind" class="md-nav__link">
<span class="md-ellipsis">
<code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;template_kind
</span>
</a>
</li>
<li class="md-nav__item">
@@ -2427,7 +2449,8 @@ A service returns one of these collections from its title lookup. See
</span><span id="__span-0-12"><a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a> <span class="n">air_date</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-13"><a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="n">part</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-14"><a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a> <span class="n">absolute</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
</span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a><span class="p">)</span>
</span><span id="__span-0-15"><a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a> <span class="n">sport</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
</span><span id="__span-0-16"><a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="p">)</span>
</span></code></pre></div>
<div class="doc doc-contents ">
@@ -2483,6 +2506,26 @@ takes every part. A dated episode also answers to its ISO air date.
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.titles.Episode.template_kind" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">template_kind</span>
<a href="#unshackle.core.titles.Episode.template_kind" class="headerlink" title="Permanent link">&para;</a></h3>
<div class="language-python doc-signature highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">template_kind</span><span class="p">()</span>
</span></code></pre></div>
<div class="doc doc-contents ">
<p><code>sports</code> for a sport episode when a sports template is set, else <code>series</code>.</p>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="unshackle.core.titles.Episode.part_suffix" class="doc doc-heading">
<code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">part_suffix</span>
@@ -2493,7 +2536,7 @@ takes every part. A dated episode also answers to its ISO air date.
<div class="doc doc-contents ">
<p><code>.Part.2</code> / <code>Part 2</code> in the series template's own separator style.</p>
<p><code>.Part.2</code> / <code>Part 2</code> in the active template's own separator style.</p>
</div>
@@ -2535,7 +2578,7 @@ takes every part. A dated episode also answers to its ISO air date.
<div class="doc doc-contents ">
<p>Render air_date using the series template's own separator (dots or spaces).</p>
<p>Render air_date using the active template's own separator (dots or spaces).</p>
</div>
+14 -6
View File
@@ -2115,21 +2115,23 @@ the <a href="../../../guide/output-and-naming/">Output &amp; naming guide</a>.</
<li><strong>Type:</strong> <code>dict</code> &nbsp;·&nbsp; <strong>Required</strong> (no usable default; <code>dl</code> exits with an error if this is missing)</li>
</ul>
<p>Filename templates keyed by media kind, using <code>{variable}</code> placeholders. Recognised kinds are
<code>movies</code>, <code>series</code>, and <code>songs</code> (and <code>albums</code> for folder templates). A trailing <code>?</code> on a
<code>movies</code>, <code>series</code>, <code>sports</code>, and <code>songs</code> (and <code>albums</code> for folder templates). A trailing <code>?</code> on a
variable (e.g. <code>{quality?}</code>) marks it optional: if empty, it and one adjacent separator are
dropped.</p>
<div class="language-yaml highlight"><span class="filename">unshackle.yaml</span><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nt">output_template</span><span class="p">:</span>
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a><span class="w"> </span><span class="nt">movies</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}.{year}.{quality?}.{source}-{tag}"</span>
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="w"> </span><span class="nt">series</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}.{season_episode}.{episode_name?}.{quality?}.{source}-{tag}"</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="nt">songs</span><span class="p">:</span><span class="w"> </span><span class="s">"{track_number}.</span><span class="nv"> </span><span class="s">{title}"</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span><span class="nt">folder</span><span class="p">:</span><span class="w"> </span><span class="c1"># special nested key, see below</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span><span class="nt">movies</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}</span><span class="nv"> </span><span class="s">({year})"</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="nt">series</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}</span><span class="nv"> </span><span class="s">({year})"</span>
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="w"> </span><span class="nt">sports</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}.{year?}.{date?}.{episode_name}.{quality?}.{source}-{tag}"</span>
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="w"> </span><span class="nt">songs</span><span class="p">:</span><span class="w"> </span><span class="s">"{track_number}.</span><span class="nv"> </span><span class="s">{title}"</span>
</span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="w"> </span><span class="nt">folder</span><span class="p">:</span><span class="w"> </span><span class="c1"># special nested key, see below</span>
</span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="w"> </span><span class="nt">movies</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}</span><span class="nv"> </span><span class="s">({year})"</span>
</span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="w"> </span><span class="nt">series</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}</span><span class="nv"> </span><span class="s">({year})"</span>
</span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a><span class="w"> </span><span class="nt">sports</span><span class="p">:</span><span class="w"> </span><span class="s">"{title}.{year?}"</span>
</span></code></pre></div>
<p><strong>The nested <code>folder</code> sub-key</strong> controls output subfolders, and unshackle pops it out of
<code>output_template</code>:</p>
<ul>
<li>A <strong>dict</strong> sets per-kind folder templates (kinds: <code>movies</code>, <code>series</code>, <code>songs</code>, <code>albums</code>).</li>
<li>A <strong>dict</strong> sets per-kind folder templates (kinds: <code>movies</code>, <code>series</code>, <code>sports</code>, <code>songs</code>, <code>albums</code>).</li>
<li>A <strong>str</strong> sets a single folder template for everything.</li>
</ul>
<p>unshackle validates templates on load and emits warnings for unknown variables, non-string
@@ -2164,6 +2166,12 @@ Services can supply it, and
<a href="../../../guide/downloading/#metadata-and-tagging"><code>--enrich</code></a> fills it in from TVDB.
Use <code>{absolute?}</code> so the name stays clean when it is unknown.</p>
</div>
<div class="admonition tip">
<p class="admonition-title"><code>sports</code> names an event by year or date</p>
<p>A service marks an event episode as sport, and that episode then uses the <code>sports</code>
templates. Without them it uses the <code>series</code> templates. For the variables and
examples, see <a href="../../../guide/output-and-naming/#sports-events">Sports events</a>.</p>
</div>
<h2 id="tagging-naming-keys">Tagging &amp; naming keys<a class="headerlink" href="#tagging-naming-keys" title="Permanent link">&para;</a></h2>
<table>
<thead>
+2 -2
View File
@@ -2092,8 +2092,8 @@ name) and a <code>name</code>, plus backend-specific keys.</p>
<li>A vault of <code>type: API</code> whose <code>name</code> contains <code>decrypt_labs</code> auto-fills its <code>token</code> from
<a href="../misc/#external-api-keys"><code>decrypt_labs_api_key</code></a> when not set inline. Vault <code>type</code> values are
case-sensitive module names.</li>
<li>unshackle treats an all-zero content key (32 zeros) as "no key" everywhere and never
stores it.</li>
<li>unshackle treats an empty or all-zero content key, of any length, as "no key" everywhere
and never stores it.</li>
</ul>
</div>
<div class="admonition note">