mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 12:05:07 +00:00
4105 lines
111 KiB
HTML
4105 lines
111 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
<meta name="description" content="Movie, TV, and Music archival software. User guide and REST API reference">
|
|
|
|
|
|
|
|
<link rel="canonical" href="https://docs.unshackle.dev/guide/cli-reference/">
|
|
|
|
|
|
<link rel="prev" href="../downloading/">
|
|
|
|
|
|
<link rel="next" href="../drm-and-cdm/">
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../../assets/favicon.svg">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
|
|
|
|
|
|
|
<title>CLI Reference - unshackle</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/main.ec1eaa64.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/_mkdocstrings.css">
|
|
|
|
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="indigo">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#cli-reference" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<header class="md-header" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href="../.." title="unshackle" class="md-header__button md-logo" aria-label="unshackle" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m800-274-80-80v-206H514l-80-80h166v-80q0-50-34.5-85T481-840q-50 0-84 34.5T363-720v9l-73-73q22-61 75-98.5T481-920q83 0 141 58.5T680-720v80h40q33 0 56.5 23.5T800-560v286Zm20 246-62-62q-11 5-20 7.5T720-80H240q-33 0-56.5-23.5T160-160v-400q0-25 14.5-46t37.5-30L28-820l56-56L876-84l-56 56ZM686-160 539-309q-11 11-25.5 17t-31.5 6q-33 0-56.5-23.5T402-366q0-17 6-31.5t17-25.5L286-560h-46v400h446ZM486-360Zm131-97Z"/></svg>
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
unshackle
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
CLI Reference
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1M8 13h8v-2H8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4a5 5 0 0 0 5-5 5 5 0 0 0-5-5"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to system preference" type="radio" name="__palette" id="__palette_2">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to system preference" for="__palette_0" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5M7 15a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
|
|
</label>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
</label>
|
|
<nav class="md-search__options" aria-label="Search">
|
|
|
|
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
|
|
</a>
|
|
|
|
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
</button>
|
|
</nav>
|
|
|
|
<div class="md-search__suggest" data-md-component="search-suggest"></div>
|
|
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-header__source">
|
|
<a href="https://github.com/unshackle-dl/unshackle" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
unshackle-dl/unshackle
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
<div class="md-grid">
|
|
<ul class="md-tabs__list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../.." class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Home
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../../getting-started/installation/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Getting Started
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item md-tabs__item--active">
|
|
<a href="../downloading/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
User Guide
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../../reference/configuration/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Configuration
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../../dev/creating-a-service/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Developer
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../../reference/api/service/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
API Reference
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href="../.." title="unshackle" class="md-nav__button md-logo" aria-label="unshackle" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="m800-274-80-80v-206H514l-80-80h166v-80q0-50-34.5-85T481-840q-50 0-84 34.5T363-720v9l-73-73q22-61 75-98.5T481-920q83 0 141 58.5T680-720v80h40q33 0 56.5 23.5T800-560v286Zm20 246-62-62q-11 5-20 7.5T720-80H240q-33 0-56.5-23.5T160-160v-400q0-25 14.5-46t37.5-30L28-820l56-56L876-84l-56 56ZM686-160 539-309q-11 11-25.5 17t-31.5 6q-33 0-56.5-23.5T402-366q0-17 6-31.5t17-25.5L286-560h-46v400h446ZM486-360Zm131-97Z"/></svg>
|
|
|
|
</a>
|
|
unshackle
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://github.com/unshackle-dl/unshackle" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
unshackle-dl/unshackle
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../.." class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Home
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Getting Started
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Getting Started
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../getting-started/installation/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Installation
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../getting-started/quickstart/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Quick Start
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../getting-started/configuration-file/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
The Configuration File
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
User Guide
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
|
|
<label class="md-nav__title" for="__nav_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
User Guide
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../downloading/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Downloading
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CLI Reference
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
CLI Reference
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#root-command" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Root command
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#dl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="dl">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#quality-codec-bitrate-range" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Quality, codec, bitrate & range
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#language-subtitles" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Language & subtitles
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#title-episode-selection" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Title & episode selection
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#track-type-inclusion-exclusion" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Track-type inclusion / exclusion
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#output-muxing-files" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Output, muxing & files
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#metadata-tagging" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Metadata & tagging
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Metadata & tagging">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#episode-ordering" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Episode ordering
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#drm-keys-decryption" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DRM, keys & decryption
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#network-proxy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Network & proxy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#concurrency-caching-listing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Concurrency, caching & listing
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#search" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
search
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#import" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
import
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#cfg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
cfg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="env">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-check" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env check
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-info" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env info
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-theme" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env theme
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-clear" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env clear
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="kv">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-copy-to_vault-from_vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv copy TO_VAULT FROM_VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-sync-vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv sync VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-add-file-service-vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv add FILE SERVICE VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-search-kid" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv search KID
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-prepare-vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv prepare VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#wvd" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
wvd
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="prd">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd-new-paths" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd new PATHS...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd-reprovision-prd_path" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd reprovision PRD_PATH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd-test-device" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd test DEVICE
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#serve" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
serve
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="util">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-refresh-services" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util refresh-services
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-crop-path-aspect" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util crop PATH ASPECT
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-range-path" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util range PATH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-test-path" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util test PATH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#see-also" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
See also
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../drm-and-cdm/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
DRM & CDM Setup
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../proxies-and-vpn/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Proxies & VPN
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../vaults/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Key Vaults
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../output-and-naming/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Output & Naming
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../subtitles/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Subtitles
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../troubleshooting/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Troubleshooting
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
|
|
|
|
|
|
<div class="md-nav__link md-nav__container">
|
|
<a href="../../reference/configuration/" class="md-nav__link ">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Configuration
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
</div>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Configuration
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/directories/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Directories
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/services/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Services & Authentication
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/download/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Download & Processing
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/output/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Output & Naming
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/drm/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
DRM & CDM
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/network/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Network & Proxy
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/vaults/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Key Vaults
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/post-scripts/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Post-Scripts
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/misc/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Other Settings
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/configuration/example/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Annotated Example
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Developer
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_5">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Developer
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/creating-a-service/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Creating a Service
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/service-architecture/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Service Architecture
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" >
|
|
|
|
|
|
<div class="md-nav__link md-nav__container">
|
|
<a href="../../dev/rest-api/" class="md-nav__link ">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
REST API
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
<label class="md-nav__link " for="__nav_5_3" id="__nav_5_3_label" tabindex="0">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
</div>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_5_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
REST API
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/quickstart/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Quick Start
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/authentication/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Authentication
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/endpoints/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Endpoints
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/job-lifecycle/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Job Lifecycle
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/dashboard/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Dashboard
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/remote-sessions/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Remote Sessions
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../dev/rest-api/errors/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Error Responses
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
API Reference
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_6">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
API Reference
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/api/service/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Service
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/api/config/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Config
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/api/tracks/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Tracks
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/api/titles/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Titles
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../reference/api/drm/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
DRM
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#root-command" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Root command
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#dl" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dl
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="dl">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#quality-codec-bitrate-range" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Quality, codec, bitrate & range
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#language-subtitles" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Language & subtitles
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#title-episode-selection" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Title & episode selection
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#track-type-inclusion-exclusion" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Track-type inclusion / exclusion
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#output-muxing-files" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Output, muxing & files
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#metadata-tagging" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Metadata & tagging
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Metadata & tagging">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#episode-ordering" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Episode ordering
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#drm-keys-decryption" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
DRM, keys & decryption
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#network-proxy" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Network & proxy
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#concurrency-caching-listing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Concurrency, caching & listing
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#search" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
search
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#import" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
import
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#cfg" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
cfg
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="env">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-check" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env check
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-info" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env info
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-theme" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env theme
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#env-clear" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
env clear
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="kv">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-copy-to_vault-from_vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv copy TO_VAULT FROM_VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-sync-vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv sync VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-add-file-service-vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv add FILE SERVICE VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-search-kid" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv search KID
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#kv-prepare-vault" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
kv prepare VAULT...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#wvd" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
wvd
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="prd">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd-new-paths" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd new PATHS...
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd-reprovision-prd_path" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd reprovision PRD_PATH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prd-test-device" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
prd test DEVICE
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#serve" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
serve
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="util">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-refresh-services" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util refresh-services
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-crop-path-aspect" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util crop PATH ASPECT
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-range-path" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util range PATH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#util-test-path" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
util test PATH
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#see-also" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
See also
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h1 id="cli-reference">CLI Reference<a class="headerlink" href="#cli-reference" title="Permanent link">¶</a></h1>
|
|
<p>A complete reference for every <code>unshackle</code> command, subcommand, and flag. This page groups the commands by purpose:</p>
|
|
<ul>
|
|
<li><strong><a href="#dl"><code>dl</code></a></strong>: the download pipeline (the command you use most).</li>
|
|
<li><strong><a href="#search"><code>search</code></a></strong>: find titles on a service.</li>
|
|
<li><strong><a href="#import"><code>import</code></a></strong>: rebuild a download from an export file.</li>
|
|
<li><strong><a href="#cfg"><code>cfg</code></a></strong>, <strong><a href="#env"><code>env</code></a></strong>: manage configuration and the environment.</li>
|
|
<li><strong><a href="#kv"><code>kv</code></a></strong>: Key Vault operations.</li>
|
|
<li><strong><a href="#wvd"><code>wvd</code></a></strong>, <strong><a href="#prd"><code>prd</code></a></strong>: Widevine / PlayReady device management.</li>
|
|
<li><strong><a href="#serve"><code>serve</code></a></strong>: operate the local CDM and REST API server.</li>
|
|
<li><strong><a href="#util"><code>util</code></a></strong>: helper media utilities.</li>
|
|
</ul>
|
|
<div class="admonition tip">
|
|
<p class="admonition-title">Getting help on any command</p>
|
|
<p>Every command accepts <code>-h</code>, <code>--help</code>, or <code>-?</code>. For example <code>unshackle dl --help</code> or <code>unshackle wvd new --help</code>. Each service defines its own arguments for <code>dl</code> and <code>search</code> (such as a title ID or a query), so examine <code>unshackle dl SERVICE --help</code> for those.</p>
|
|
</div>
|
|
<hr />
|
|
<h2 id="root-command">Root command<a class="headerlink" href="#root-command" title="Permanent link">¶</a></h2>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>unshackle [OPTIONS] COMMAND [ARGS]...
|
|
</span></code></pre></div>
|
|
<blockquote>
|
|
<p>unshackle: Modular Movie, TV, and Music Archival Software.</p>
|
|
</blockquote>
|
|
<p>Every invocation prints a banner and, when you enable <code>update_checks</code> in your config, checks for a newer release.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-v</code>, <code>--version</code></td>
|
|
<td>Print version information and exit.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-d</code>, <code>--debug</code></td>
|
|
<td>Enable <code>DEBUG</code>-level logs and JSON debug logging. Silences noisy HTTP libraries unless <code>debug_requests</code> is set in config.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-h</code>, <code>--help</code>, <code>-?</code></td>
|
|
<td>Show help and exit.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Commands are auto-discovered, so third-party command modules dropped into the commands directory appear automatically.</p>
|
|
<hr />
|
|
<h2 id="dl"><code>dl</code><a class="headerlink" href="#dl" title="Permanent link">¶</a></h2>
|
|
<p>The download command. It is itself a group whose <strong>subcommands are the installed streaming services</strong>, so an invocation always has three layers:</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>unshackle dl [OPTIONS] SERVICE [SERVICE ARGS...]
|
|
</span></code></pre></div>
|
|
<ul>
|
|
<li><code>OPTIONS</code>: every flag below, parsed at the <code>dl</code> level.</li>
|
|
<li><code>SERVICE</code>: a service tag (for example <code>EXAMPLE1</code> or <code>EXAMPLE2</code>). Tags are case-insensitive and honour each service's aliases (<code>example+</code>, <code>EXAMPLE2</code>, and the other alias forms all give the same tag).</li>
|
|
<li><code>SERVICE ARGS</code>: the title, URL, or ID, plus any service-specific options. These belong to the service, not to <code>dl</code>.</li>
|
|
</ul>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Typical downloads</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="c1"># Best available 1080p SDR of a title</span>
|
|
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>unshackle<span class="w"> </span>dl<span class="w"> </span>-q<span class="w"> </span><span class="m">1080</span><span class="w"> </span>EXAMPLE<span class="w"> </span><span class="m">81234567</span>
|
|
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a>
|
|
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a><span class="c1"># 4K HDR10, English audio + subs, from a URL</span>
|
|
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a>unshackle<span class="w"> </span>dl<span class="w"> </span>-q<span class="w"> </span><span class="m">2160</span><span class="w"> </span>-r<span class="w"> </span>HDR10<span class="w"> </span>-l<span class="w"> </span>en<span class="w"> </span>EXAMPLE<span class="w"> </span><span class="s2">"https://www.example.com/..."</span>
|
|
</span><span id="__span-2-6"><a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a>
|
|
</span><span id="__span-2-7"><a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a><span class="c1"># A season range, HEVC video, EC3 audio</span>
|
|
</span><span id="__span-2-8"><a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a>unshackle<span class="w"> </span>dl<span class="w"> </span>-w<span class="w"> </span>S01-S03<span class="w"> </span>-v<span class="w"> </span>H.265<span class="w"> </span>-a<span class="w"> </span>EC3<span class="w"> </span>SERVICE<span class="w"> </span>TITLE-ID
|
|
</span></code></pre></div>
|
|
</div>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Config-driven defaults</p>
|
|
<p>You can give any <code>dl</code> flag a default under the <code>dl:</code> section of <code>unshackle.yaml</code>, and per-service under <code>services.<TAG>.dl</code>. Explicit command-line values (and environment values) always win over both. Service defaults only fill in options you did not set. See the <a href="../../getting-started/configuration-file/">configuration file</a> guide.</p>
|
|
</div>
|
|
<h3 id="quality-codec-bitrate-range">Quality, codec, bitrate & range<a class="headerlink" href="#quality-codec-bitrate-range" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-p</code>, <code>--profile</code></td>
|
|
<td>-</td>
|
|
<td>Profile for credentials and cookies.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-q</code>, <code>--quality</code></td>
|
|
<td>best</td>
|
|
<td>Resolution(s), comma-separated, e.g. <code>1080,720</code>. <code>-q 1080</code> also matches anamorphic tracks by 16:9 canvas.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-v</code>, <code>--vcodec</code></td>
|
|
<td>any</td>
|
|
<td>Video codec(s). Accepts names or values: <code>AVC</code>/<code>H.264</code>/<code>H264</code>, <code>HEVC</code>/<code>H.265</code>/<code>H265</code>, <code>VC1</code>/<code>VC-1</code>, <code>VP8</code>, <code>VP9</code>, <code>AV1</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-a</code>, <code>--acodec</code></td>
|
|
<td>any</td>
|
|
<td>Audio codec(s), comma-separated. Accepts <code>AAC</code>, <code>AC3</code>/<code>DD</code>, <code>EC3</code>/<code>DD+</code>/<code>eac3</code>/<code>ddp</code>, <code>AC4</code>/<code>AC-4</code>, <code>OPUS</code>, <code>OGG</code>/<code>VORB</code>/<code>vorbis</code>, <code>DTS</code>, <code>DTSX</code>/<code>DTS-X</code>, <code>ALAC</code>, <code>FLAC</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-vb</code>, <code>--vbitrate</code></td>
|
|
<td>highest</td>
|
|
<td>Exact video bitrate in kbps.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-ab</code>, <code>--abitrate</code></td>
|
|
<td>highest</td>
|
|
<td>Exact audio bitrate in kbps.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-vb-range</code>, <code>--vbitrate-range</code></td>
|
|
<td>-</td>
|
|
<td>Video bitrate range in kbps, e.g. <code>6000-7000</code>; picks highest within. Mutually exclusive with <code>--vbitrate</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-ab-range</code>, <code>--abitrate-range</code></td>
|
|
<td>-</td>
|
|
<td>Audio bitrate range in kbps, e.g. <code>128-256</code>. Mutually exclusive with <code>--abitrate</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-r</code>, <code>--range</code></td>
|
|
<td><code>SDR</code></td>
|
|
<td>Colour range(s): <code>SDR</code>, <code>HLG</code>, <code>HDR10</code>, <code>HDR10P</code> (HDR10+), <code>DV</code>, <code>HYBRID</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-c</code>, <code>--channels</code></td>
|
|
<td>-</td>
|
|
<td>Audio channels; matches sub-layouts (5.1 ≈ 6.0).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-naa</code>, <code>--noatmos</code></td>
|
|
<td>off</td>
|
|
<td>Exclude Dolby Atmos audio tracks.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--worst</code></td>
|
|
<td>off</td>
|
|
<td>Pick the lowest bitrate within the requested quality. <strong>Requires <code>-q</code>.</strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--best-available</code>, <code>--warn-only</code></td>
|
|
<td>off</td>
|
|
<td>Warn and continue when a requested resolution, range, or language is absent, instead of failing.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-rvb</code>, <code>--real-video-bitrate</code></td>
|
|
<td>off</td>
|
|
<td>Probe real media size for true video bitrates, overriding the manifest.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-rab</code>, <code>--real-audio-bitrate</code></td>
|
|
<td>off</td>
|
|
<td>Same for audio (slower).</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition note">
|
|
<p class="admonition-title"><code>HYBRID</code> range</p>
|
|
<p><code>-r HYBRID</code> fetches both HDR10/HDR10+ and Dolby Vision and merges them with <code>dovi_tool</code>. It requires the <code>dovi_tool</code> binary on your <code>PATH</code>.</p>
|
|
</div>
|
|
<h3 id="language-subtitles">Language & subtitles<a class="headerlink" href="#language-subtitles" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-l</code>, <code>--lang</code></td>
|
|
<td><code>orig</code></td>
|
|
<td>Language(s) for <strong>both</strong> video and audio. <code>orig</code> = the title's original language; e.g. <code>orig,en</code>. A <code>-</code> prefix excludes, e.g. <code>all,-es</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-vl</code>, <code>--v-lang</code></td>
|
|
<td>-</td>
|
|
<td>Video-only language (overrides <code>-l</code> for video). A <code>-</code> prefix excludes.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-al</code>, <code>--a-lang</code></td>
|
|
<td>-</td>
|
|
<td>Audio-only language (overrides <code>-l</code> for audio). A <code>-</code> prefix excludes.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-sl</code>, <code>--s-lang</code></td>
|
|
<td><code>all</code></td>
|
|
<td>Subtitle language(s). A <code>-</code> prefix excludes, e.g. <code>all,-es</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--require-audio</code></td>
|
|
<td>-</td>
|
|
<td>Audio langs that must exist. The title fails even with <code>--best-available</code>. Does not select tracks.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--require-video</code></td>
|
|
<td>-</td>
|
|
<td>Video langs that must exist. The title fails even with <code>--best-available</code>. Does not select tracks.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--require-subs</code></td>
|
|
<td>-</td>
|
|
<td>Subtitle langs that must exist. Fails the title if one is missing. <code>--s-lang</code> still decides what to keep.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-fs</code>, <code>--forced-subs</code></td>
|
|
<td>off</td>
|
|
<td>Include forced subtitle tracks.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-fsl</code>, <code>--forced-s-lang</code></td>
|
|
<td>none</td>
|
|
<td>Language(s) wanted for forced subtitles; implies <code>-fs</code>. A <code>-</code> prefix excludes.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--exact-lang</code></td>
|
|
<td>off</td>
|
|
<td>Exact matching only: <code>-l es-419</code> matches <code>es-419</code>, not <code>es-ES</code>. Applies to selection and to sort order.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--sub-format</code></td>
|
|
<td>-</td>
|
|
<td>Output subtitle format (<code>SRT</code>/<code>srt</code>, <code>VTT</code>/<code>webvtt</code>, <code>ASS</code>/<code>ssa</code>, <code>TTML</code>, <code>SMI</code>, ...), or <code>original</code> to keep the source format.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition tip">
|
|
<p class="admonition-title">These flags select languages, they do not order them</p>
|
|
<p>Naming languages with <code>-l</code> or <code>-sl</code> removes the others. To keep every language but put
|
|
your preferred ones first, use <code>audio.language_priority</code> and
|
|
<a href="../../reference/configuration/download/#subtitle"><code>subtitle.language_priority</code></a> in your
|
|
configuration file.</p>
|
|
</div>
|
|
<p>unshackle honours the special language tokens <code>orig</code>, <code>all</code>, and <code>best</code> everywhere it expects a language.</p>
|
|
<h3 id="title-episode-selection">Title & episode selection<a class="headerlink" href="#title-episode-selection" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-w</code>, <code>--wanted</code></td>
|
|
<td>Wanted episodes, e.g. <code>S01-S05,S07</code>, <code>S01E01-S02E03</code>. Supports exclusions with a leading <code>-</code> (e.g. <code>-S03</code>). For a <a href="../downloading/#split-episodes">split episode</a>, <code>.N</code> picks one part (<code>S01E01.2</code>), a range must stay inside the episode (<code>S01E01.1-S01E01.3</code>), and <code>S01E01</code> on its own takes every part. For a <a href="../downloading/#daily-and-date-based-content">dated episode</a>, a token can also be an ISO air date (<code>2026-08-11</code>) or a date range with a colon (<code>2026-08-01:2026-08-31</code>). For a <a href="../downloading/#music-tracks">music release</a>, a token is a track number (<code>1-5</code>, <code>1,3,7</code>), or <code>{disc}x{track}</code> (<code>2x3</code>) when the release has more than one disc.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--select-titles</code></td>
|
|
<td>Interactively select what to download: episodes of a series, or films when a title has more than one. <strong>Cannot combine with <code>-w</code>.</strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--latest-episode</code></td>
|
|
<td>Download only the single most recent episode.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--list-titles</code></td>
|
|
<td>List titles only; do not download.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="track-type-inclusion-exclusion">Track-type inclusion / exclusion<a class="headerlink" href="#track-type-inclusion-exclusion" title="Permanent link">¶</a></h3>
|
|
<p>Keep only certain track types, or skip certain track types.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Include-only</th>
|
|
<th>Skip</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-V</code>, <code>--video-only</code></td>
|
|
<td><code>-nv</code>, <code>--no-video</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-A</code>, <code>--audio-only</code></td>
|
|
<td><code>-na</code>, <code>--no-audio</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-S</code>, <code>--subs-only</code></td>
|
|
<td><code>-ns</code>, <code>--no-subs</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-C</code>, <code>--chapters-only</code></td>
|
|
<td><code>-nc</code>, <code>--no-chapters</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td><code>-nt</code>, <code>--no-attachments</code> (cover art, subtitle fonts, and files the service attaches)</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-ad</code>, <code>--audio-description</code></td>
|
|
<td>Include descriptive (audio-description) tracks.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--skip-subtitle-errors</code></td>
|
|
<td>Skip a failed subtitle instead of aborting the title. Video/audio failures remain fatal.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="output-muxing-files">Output, muxing & files<a class="headerlink" href="#output-muxing-files" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--split-audio</code></td>
|
|
<td>Write a separate output file per audio codec instead of merging. Defaults to config <code>muxing.merge_audio</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--merge-video</code></td>
|
|
<td>Mux video tracks that share a height, range, and codec into one file, so only language varies inside a file. Defaults to config <code>muxing.merge_video</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-o</code>, <code>--output</code></td>
|
|
<td>Override the output directory for this run.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-folder</code></td>
|
|
<td>Disable folder creation for TV shows.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-source</code></td>
|
|
<td>Remove the source tag from the filename/path.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-mux</code></td>
|
|
<td>Do not mux; keep individual track files.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--tag</code></td>
|
|
<td>Group tag override.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--repack</code></td>
|
|
<td>Add a <code>REPACK</code> tag to the filename.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--postscript</code></td>
|
|
<td>Run a command after each output file, with <code>{variable}</code> placeholders substituted. Repeatable. Replaces the <code>post_scripts</code> config for this run. See <a href="../../reference/configuration/post-scripts/">Post-scripts</a>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-postscript</code></td>
|
|
<td>Run no post-script for this run, neither the configured ones nor <code>--postscript</code>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="metadata-tagging">Metadata & tagging<a class="headerlink" href="#metadata-tagging" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--tmdb</code></td>
|
|
<td>TMDB ID (integer). Used for the tags. Skips the title search. <code>--enrich</code> reads it too. Needs <code>tmdb_api_key</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--imdb</code></td>
|
|
<td>IMDb ID, e.g. <code>tt1375666</code>. Used for the tags. Skips the title search. <code>--enrich</code> reads it too. Needs no API key.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--tvdb</code></td>
|
|
<td>TVDB ID (integer). Used for the tags. Skips the series lookup that <code>--tvdb-order</code> would otherwise do. <code>--enrich</code> reads it too. Needs <code>tvdb_api_key</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--anilist</code></td>
|
|
<td>AniList ID (integer), e.g. <code>--anilist 21</code>. A MyAnimeList ID is accepted as <code>mal:12345</code> and resolved to the AniList entry. Used for the tags. Skips the title search. <code>--enrich</code> reads it too. Needs no API key.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--enrich</code></td>
|
|
<td>Overwrite show title, year and original language with the external source's. <strong>Requires</strong> one of <code>--tmdb</code>, <code>--imdb</code>, <code>--tvdb</code>, or <code>--anilist</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--daily</code></td>
|
|
<td>Treat the title as daily/date-based content and fill missing episode air dates from TVDB. The fill needs <code>--enrich</code> and a TVDB ID. See <a href="../downloading/#daily-and-date-based-content">Daily and date-based content</a>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--tvdb-order</code></td>
|
|
<td>Renumber episodes to a TVDB season order: <code>official</code> (aired), <code>dvd</code>, <code>absolute</code>, <code>alternate</code>, or <code>regional</code>. Needs <code>tvdb_api_key</code>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">One ID at a time</p>
|
|
<p>You cannot combine <code>--tmdb</code>, <code>--imdb</code> and <code>--tvdb</code>. Give one and unshackle finds the
|
|
others from it, and writes all three to the tags. <code>--anilist</code> is outside that rule and pairs
|
|
with one of them, which is how you attach a western ID to an anime title.
|
|
An ID with no metadata provider that can find it, such as <code>--tmdb</code> with no <code>tmdb_api_key</code>,
|
|
fails before the download starts. <code>--anilist</code> needs no API key, so it never fails this check.</p>
|
|
</div>
|
|
<h4 id="episode-ordering">Episode ordering<a class="headerlink" href="#episode-ordering" title="Permanent link">¶</a></h4>
|
|
<p>A service does not always number a series the way TVDB's aired order does. Some services use
|
|
TVDB's <code>alternate</code> (Streaming) order for Futurama, for example. <code>--tvdb-order</code> works out which
|
|
order the service used, then renumbers the episodes into the order you asked for.</p>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Orders that do not cover the whole series</p>
|
|
<p>An order can ignore episodes the service carries. TVDB's <code>dvd</code> order for Futurama leaves
|
|
out the four movies. Those episodes keep their original numbering. If that would give two
|
|
episodes the same season/episode slot, and so the same filename, unshackle logs an error
|
|
and keeps the service's numbering unchanged. Pick an order that covers the whole series.</p>
|
|
</div>
|
|
<h3 id="drm-keys-decryption">DRM, keys & decryption<a class="headerlink" href="#drm-keys-decryption" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--cdm-only</code> / <code>--vaults-only</code></td>
|
|
<td>Use only the CDM, or only Key Vaults, for key acquisition.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--cdm <name></code></td>
|
|
<td>Use the named CDM device from the <code>cdm</code> config mapping for this run, ignoring the service/default mapping.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--skip-dl</code></td>
|
|
<td>Skip the download but still retrieve keys.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--export</code></td>
|
|
<td>Export track info and keys to a JSON file in the exports directory.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="network-proxy">Network & proxy<a class="headerlink" href="#network-proxy" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--proxy</code></td>
|
|
<td>Proxy URI, a country or location code resolved from configured providers, or <code>provider:region</code> (e.g. <code>nordvpn:ca</code>, <code>gluetun:us</code>, <code>protonvpn:de:berlin</code>, <code>controld:yul</code>).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-proxy</code></td>
|
|
<td>Force-disable all proxy use.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-proxy-download</code></td>
|
|
<td>Bypass the proxy for <strong>all downloads</strong> (manifest, licence, and auth stay proxied).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--proxy-download</code></td>
|
|
<td>Use a different proxy for <strong>all downloads</strong>, in the same forms as <code>--proxy</code> (manifest, licence, and auth stay on <code>--proxy</code>).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--remote</code></td>
|
|
<td>Use a remote unshackle server.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--server</code></td>
|
|
<td>Name a remote server from the <code>remote_services</code> config.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="concurrency-caching-listing">Concurrency, caching & listing<a class="headerlink" href="#concurrency-caching-listing" title="Permanent link">¶</a></h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flag</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--workers</code></td>
|
|
<td>downloader default</td>
|
|
<td>Per-track download threads.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--adaptive-workers</code></td>
|
|
<td>off</td>
|
|
<td>Scale per-track segment workers dynamically (up to the <code>--workers</code> cap) based on measured CDN throughput and errors.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--download-processes</code></td>
|
|
<td><code>1</code></td>
|
|
<td>Split large segment batches (24+) across this many download processes to exceed the single-process throughput cap on multi-gigabit connections. Ignored while a speed limit is set: the cap is one shared budget, which extra processes cannot share, so the download stays in a single process. Also ignored when the service HTTP session carries state a child process cannot rebuild, such as a custom TLS adapter.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--continue-downloads</code></td>
|
|
<td>off</td>
|
|
<td>Keep completed segment files across runs and resume a previously failed download. One-off enable of the <a href="../../reference/configuration/download/#continue_downloads"><code>continue_downloads</code></a> config option.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--downloads</code></td>
|
|
<td><code>1</code></td>
|
|
<td>Number of tracks downloaded concurrently.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--speed-limit</code></td>
|
|
<td>unlimited</td>
|
|
<td>Cap total download speed across all threads and tracks, e.g. <code>500k</code>, <code>5M</code>, <code>1.5G</code> or plain bytes/sec. Values are bytes, not bits (<code>5M</code> = 5.0 MB/s). <code>off</code> disables a configured limit.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-cache</code></td>
|
|
<td>off</td>
|
|
<td>Bypass the title cache.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--reset-cache</code></td>
|
|
<td>off</td>
|
|
<td>Clear the title cache.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--list</code></td>
|
|
<td>off</td>
|
|
<td>List available/would-be-downloaded tracks; do not download.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--slow</code></td>
|
|
<td>-</td>
|
|
<td>Inter-title delay. Bare <code>--slow</code> = 60-120s; <code>--slow 20-40</code> = custom range (minimum 20s).</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition warning">
|
|
<p class="admonition-title">Some flags cannot be combined</p>
|
|
<p><code>--select-titles</code> and <code>--wanted</code> are mutually exclusive. <code>--worst</code> needs <code>--quality</code>. <code>--vbitrate</code> and <code>--vbitrate-range</code> (and the audio equivalents) are mutually exclusive.</p>
|
|
</div>
|
|
<hr />
|
|
<h2 id="search"><code>search</code><a class="headerlink" href="#search" title="Permanent link">¶</a></h2>
|
|
<p>Find titles on a service. Like <code>dl</code>, <code>search</code> is a group whose subcommands are the installed services, and it reuses <code>dl</code>'s authentication, cookie, and proxy machinery.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>unshackle search [OPTIONS] SERVICE [QUERY...]
|
|
</span></code></pre></div>
|
|
<p>Each service defines its own query syntax. unshackle prints the results as a tree of titles with their service IDs. Feed an ID straight into <code>dl</code>.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-p</code>, <code>--profile</code></td>
|
|
<td>Profile for credentials and cookies.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--proxy</code></td>
|
|
<td>Proxy URI, country or location code, or <code>provider:region</code> (e.g. <code>controld:ca</code>).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-proxy</code></td>
|
|
<td>Force-disable all proxy use.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>unshackle<span class="w"> </span>search<span class="w"> </span>EXAMPLE<span class="w"> </span><span class="s2">"My Show"</span>
|
|
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>unshackle<span class="w"> </span>search<span class="w"> </span>-p<span class="w"> </span>myprofile<span class="w"> </span>EXAMPLE<span class="w"> </span><span class="s2">"Another Show"</span>
|
|
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>unshackle<span class="w"> </span>search<span class="w"> </span>--proxy<span class="w"> </span>nordvpn:ca<span class="w"> </span>SERVICE<span class="w"> </span><span class="s2">"query"</span>
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="import"><code>import</code><a class="headerlink" href="#import" title="Permanent link">¶</a></h2>
|
|
<p>Reconstruct a download (download → decrypt → mux) from an <code>--export</code> JSON file without re-contacting the service. It re-fetches the manifest, injects the stored keys, and then runs the normal <code>dl</code> pipeline. The service tag is read from the export file, not passed by you.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>unshackle import EXPORT_FILE [DL_ARGS...]
|
|
</span></code></pre></div>
|
|
<p>unshackle forwards any <code>dl</code> options after the file verbatim, so you can override quality, range, proxy, and so on.</p>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>unshackle<span class="w"> </span>import<span class="w"> </span>export.json
|
|
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a>unshackle<span class="w"> </span>import<span class="w"> </span>export.json<span class="w"> </span>-r<span class="w"> </span>HDR10<span class="w"> </span>--proxy<span class="w"> </span>US
|
|
</span></code></pre></div>
|
|
</div>
|
|
<p>The export file must be a valid v2 export from a current version of unshackle, made with <code>dl --export</code>, and must contain a <code>service</code> tag.</p>
|
|
<hr />
|
|
<h2 id="cfg"><code>cfg</code><a class="headerlink" href="#cfg" title="Permanent link">¶</a></h2>
|
|
<p>Read, set, delete, or show configuration values in <code>unshackle.yaml</code> without hand-editing YAML.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>unshackle cfg [KEY] [VALUE] [OPTIONS]
|
|
</span></code></pre></div>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Argument / Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>KEY</code></td>
|
|
<td>Dotted path into the config, e.g. <code>tag</code>, <code>serve.api_secret</code>, <code>directories.downloads</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>VALUE</code></td>
|
|
<td>Value to set. Parsed as a Python literal when possible, so <code>true</code>, <code>123</code>, <code>['a','b']</code>, and <code>{'k':1}</code> become real types; bare words stay strings.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--unset</code></td>
|
|
<td>Remove the configuration value.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--list</code></td>
|
|
<td>List all set configuration values.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition warning">
|
|
<p class="admonition-title">Comments are stripped</p>
|
|
<p>Writing a value through <code>cfg</code> rewrites the configuration file and <strong>removes all comments</strong> from it. If your config relies on comments, edit it by hand instead. Setting a value and using <code>--unset</code> together is an error.</p>
|
|
</div>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>unshackle<span class="w"> </span>cfg<span class="w"> </span>--list<span class="w"> </span><span class="c1"># print entire config</span>
|
|
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>unshackle<span class="w"> </span>cfg<span class="w"> </span>serve.api_secret<span class="w"> </span><span class="c1"># read a nested key</span>
|
|
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>unshackle<span class="w"> </span>cfg<span class="w"> </span>tag<span class="w"> </span>MYGROUP<span class="w"> </span><span class="c1"># set a string</span>
|
|
</span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a>unshackle<span class="w"> </span>cfg<span class="w"> </span>update_checks<span class="w"> </span><span class="nb">false</span><span class="w"> </span><span class="c1"># literal → boolean False</span>
|
|
</span><span id="__span-8-5"><a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a>unshackle<span class="w"> </span>cfg<span class="w"> </span>directories.downloads<span class="w"> </span>/mnt/dl<span class="w"> </span><span class="c1"># set a nested path</span>
|
|
</span><span id="__span-8-6"><a id="__codelineno-8-6" name="__codelineno-8-6" href="#__codelineno-8-6"></a>unshackle<span class="w"> </span>cfg<span class="w"> </span>tag<span class="w"> </span>--unset<span class="w"> </span><span class="c1"># remove a key</span>
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="env"><code>env</code><a class="headerlink" href="#env" title="Permanent link">¶</a></h2>
|
|
<p>Inspect and manage the project environment.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>unshackle env COMMAND [ARGS]...
|
|
</span></code></pre></div>
|
|
<h3 id="env-check"><code>env check</code><a class="headerlink" href="#env-check" title="Permanent link">¶</a></h3>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>unshackle env check
|
|
</span></code></pre></div>
|
|
<p>Prints a dependency table (Category / Tool / Status / Required / Purpose) that shows which external tools unshackle finds on your <code>PATH</code>. It also gives a summary of how many required tools are present.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Tools</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Core</td>
|
|
<td>FFmpeg*, FFprobe*, MKVToolNix*, mkvpropedit*</td>
|
|
</tr>
|
|
<tr>
|
|
<td>DRM</td>
|
|
<td>shaka-packager*, mp4decrypt</td>
|
|
</tr>
|
|
<tr>
|
|
<td>HDR</td>
|
|
<td>dovi_tool, HDR10Plus_tool</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Subtitle</td>
|
|
<td>SubtitleEdit, CCExtractor</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Player</td>
|
|
<td>FFplay, MPV</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Network</td>
|
|
<td>HolaProxy, Caddy, Docker, git</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><small>* required. All others are optional.</small></p>
|
|
<h3 id="env-info"><code>env info</code><a class="headerlink" href="#env-info" title="Permanent link">¶</a></h3>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a>unshackle env info
|
|
</span></code></pre></div>
|
|
<p>Shows the location unshackle loaded the configuration file from. If it found no file, it shows the candidate locations instead. It then prints a table of every configured directory (downloads, temp, cache, cookies, logs, exports, WVDs, PRDs, services, and more).</p>
|
|
<h3 id="env-theme"><code>env theme</code><a class="headerlink" href="#env-theme" title="Permanent link">¶</a></h3>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a>unshackle env theme
|
|
</span></code></pre></div>
|
|
<p>Prints a sample of every available CLI theme. Each sample has colour swatches, help text with option rows, and a track listing with video, audio and subtitle entries. It also has log lines, a progress bar, and the gradient pulse bar. unshackle marks the active theme and shows each theme's aliases. Set your choice with the <a href="../../reference/configuration/misc/#appearance"><code>theme</code></a> config key.</p>
|
|
<h3 id="env-clear"><code>env clear</code><a class="headerlink" href="#env-clear" title="Permanent link">¶</a></h3>
|
|
<p>Clear an environment directory. unshackle empties the directory, makes it again, and reports the number of files and bytes it freed.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Command</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>unshackle env clear cache [SERVICE]</code></td>
|
|
<td>Clear the cache directory, or only one service's cache subdirectory.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>unshackle env clear temp</code></td>
|
|
<td>Clear the temp directory.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a>unshackle<span class="w"> </span>env<span class="w"> </span>check
|
|
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a>unshackle<span class="w"> </span>env<span class="w"> </span>info
|
|
</span><span id="__span-13-3"><a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a>unshackle<span class="w"> </span>env<span class="w"> </span>theme
|
|
</span><span id="__span-13-4"><a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a>unshackle<span class="w"> </span>env<span class="w"> </span>clear<span class="w"> </span>cache
|
|
</span><span id="__span-13-5"><a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a>unshackle<span class="w"> </span>env<span class="w"> </span>clear<span class="w"> </span>cache<span class="w"> </span>EXAMPLE<span class="w"> </span><span class="c1"># one service only</span>
|
|
</span><span id="__span-13-6"><a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a>unshackle<span class="w"> </span>env<span class="w"> </span>clear<span class="w"> </span>temp
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="kv"><code>kv</code><a class="headerlink" href="#kv" title="Permanent link">¶</a></h2>
|
|
<p>Manage Key Vaults. You configure vaults under <code>key_vaults</code> in <code>unshackle.yaml</code>, each with a <code>name</code>, a <code>type</code> (<code>sqlite</code>, <code>mysql</code>, <code>http</code>, <code>api</code>), and type-specific options. unshackle normalises service tags automatically.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a>unshackle kv COMMAND [ARGS]...
|
|
</span></code></pre></div>
|
|
<h3 id="kv-copy-to_vault-from_vault"><code>kv copy TO_VAULT FROM_VAULT...</code><a class="headerlink" href="#kv-copy-to_vault-from_vault" title="Permanent link">¶</a></h3>
|
|
<p>Copy content keys from one or more source vaults into a destination vault. unshackle skips rows whose KIDs match, unless the existing row has no content key. unshackle never alters or deletes existing data.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-s</code>, <code>--service</code></td>
|
|
<td>Only copy data for a specific service.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-l</code>, <code>--local-only</code></td>
|
|
<td>Only copy data for services installed locally. Mutually exclusive with <code>--service</code>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="kv-sync-vault"><code>kv sync VAULT...</code><a class="headerlink" href="#kv-sync-vault" title="Permanent link">¶</a></h3>
|
|
<p>Make sure that two or more vaults hold the same set of content keys, essentially a chained bidirectional copy. More than one vault is necessary. Accepts the same <code>--service</code> / <code>--local-only</code> options as <code>copy</code>.</p>
|
|
<h3 id="kv-add-file-service-vault"><code>kv add FILE SERVICE VAULT...</code><a class="headerlink" href="#kv-add-file-service-vault" title="Permanent link">¶</a></h3>
|
|
<p>Add content keys to one or more vaults for a service. <code>FILE</code> contains one <code>KID:KEY</code> pair per line (32 hex : 32 hex, UTF-8). unshackle skips every line that does not match that form.</p>
|
|
<h3 id="kv-search-kid"><code>kv search KID</code><a class="headerlink" href="#kv-search-kid" title="Permanent link">¶</a></h3>
|
|
<p>Find a KID (32 hex characters, no dashes) in the configured vaults and report its content key.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-s</code>, <code>--service</code></td>
|
|
<td>Limit the search to a specific service tag.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-v</code>, <code>--vault</code></td>
|
|
<td>Limit the search to a specific configured vault by name.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition note">
|
|
<p class="admonition-title">Note</p>
|
|
<p>unshackle cannot enumerate remote vaults without a service, so pass <code>--service</code> when you examine them.</p>
|
|
</div>
|
|
<h3 id="kv-prepare-vault"><code>kv prepare VAULT...</code><a class="headerlink" href="#kv-prepare-vault" title="Permanent link">¶</a></h3>
|
|
<p>Make service tables on vaults that use tables, for every installed service, where they do not already exist.</p>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a>unshackle<span class="w"> </span>kv<span class="w"> </span>copy<span class="w"> </span>main<span class="w"> </span>backup1<span class="w"> </span>backup2
|
|
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a>unshackle<span class="w"> </span>kv<span class="w"> </span>copy<span class="w"> </span>main<span class="w"> </span>backup<span class="w"> </span>-s<span class="w"> </span>EXAMPLE
|
|
</span><span id="__span-15-3"><a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a>unshackle<span class="w"> </span>kv<span class="w"> </span>sync<span class="w"> </span>main<span class="w"> </span>mysql_vault
|
|
</span><span id="__span-15-4"><a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a>unshackle<span class="w"> </span>kv<span class="w"> </span>add<span class="w"> </span>keys.txt<span class="w"> </span>EXAMPLE<span class="w"> </span>main<span class="w"> </span>backup
|
|
</span><span id="__span-15-5"><a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a>unshackle<span class="w"> </span>kv<span class="w"> </span>search<span class="w"> </span>0123456789abcdef0123456789abcdef<span class="w"> </span>-s<span class="w"> </span>EXAMPLE<span class="w"> </span>-v<span class="w"> </span>main
|
|
</span><span id="__span-15-6"><a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a>unshackle<span class="w"> </span>kv<span class="w"> </span>prepare<span class="w"> </span>main<span class="w"> </span>mysql_vault
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="wvd"><code>wvd</code><a class="headerlink" href="#wvd" title="Permanent link">¶</a></h2>
|
|
<p>Manage Widevine Device (<code>.wvd</code>) files. Devices live in the configured WVDs directory.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a>unshackle wvd COMMAND [ARGS]...
|
|
</span></code></pre></div>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Command</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>wvd add PATHS...</code></td>
|
|
<td>Validate and move one or more <code>.wvd</code> files into the WVDs directory.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>wvd delete NAMES...</code></td>
|
|
<td>Delete <code>.wvd</code> files by name (without extension). Prompts for confirmation.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>wvd parse PATH</code></td>
|
|
<td>Parse a <code>.wvd</code> and print its System ID, security level, type, flags, and client info. Relative paths resolve against the WVDs directory.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>wvd dump WVD_PATHS... OUT_DIR</code></td>
|
|
<td>Extract a device's contents (metadata, private key, client ID, VMP) into <code>OUT_DIR/<name>/</code>. With no paths, dumps every WVD in the WVDs directory.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>wvd new NAME PRIVATE_KEY CLIENT_ID [FILE_HASHES]</code></td>
|
|
<td>Create a new <code>.wvd</code> from a PEM private key and a <code>ClientIdentification</code> blob, optionally with a VMP (<code>FileHashes</code>) blob.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><code>wvd new</code> options:</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-t</code>, <code>--type</code></td>
|
|
<td><code>Android</code></td>
|
|
<td>Device type.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-l</code>, <code>--level</code></td>
|
|
<td><code>1</code></td>
|
|
<td>Security level (1-3).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-o</code>, <code>--output</code></td>
|
|
<td>WVDs dir</td>
|
|
<td>Output directory.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-17-1"><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a>unshackle<span class="w"> </span>wvd<span class="w"> </span>add<span class="w"> </span>device.wvd
|
|
</span><span id="__span-17-2"><a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a>unshackle<span class="w"> </span>wvd<span class="w"> </span>parse<span class="w"> </span>nexus_6p_1234_l1
|
|
</span><span id="__span-17-3"><a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a>unshackle<span class="w"> </span>wvd<span class="w"> </span>dump<span class="w"> </span>device.wvd<span class="w"> </span>./out_dir
|
|
</span><span id="__span-17-4"><a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a>unshackle<span class="w"> </span>wvd<span class="w"> </span>new<span class="w"> </span><span class="s2">"Nexus 6P"</span><span class="w"> </span>private_key.pem<span class="w"> </span>client_id.bin<span class="w"> </span>vmp.bin<span class="w"> </span>-t<span class="w"> </span>ANDROID<span class="w"> </span>-l<span class="w"> </span><span class="m">3</span>
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="prd"><code>prd</code><a class="headerlink" href="#prd" title="Permanent link">¶</a></h2>
|
|
<p>Manage PlayReady Device (<code>.prd</code>) files. Devices live in the configured PRDs directory. Built on <code>pyplayready</code>.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a>unshackle prd COMMAND [ARGS]...
|
|
</span></code></pre></div>
|
|
<h3 id="prd-new-paths"><code>prd new PATHS...</code><a class="headerlink" href="#prd-new-paths" title="Permanent link">¶</a></h3>
|
|
<p>Make a new <code>.prd</code>. Give either a single folder that contains <code>zgpriv.dat</code> (group key) and <code>bgroupcert.dat</code> (group certificate), or two file paths (group key, then group certificate).</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-e</code>, <code>--encryption_key</code></td>
|
|
<td>Optional device ECC private encryption key (generated if omitted).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-s</code>, <code>--signing_key</code></td>
|
|
<td>Optional device ECC private signing key (generated if omitted).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-o</code>, <code>--output</code></td>
|
|
<td>Output directory or <code>.prd</code> file path.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><code>prd new</code> will not overwrite an existing file.</p>
|
|
<h3 id="prd-reprovision-prd_path"><code>prd reprovision PRD_PATH</code><a class="headerlink" href="#prd-reprovision-prd_path" title="Permanent link">¶</a></h3>
|
|
<p>Reprovision an existing device by replacing its leaf certificate and keys. Only a device of version 3 or higher can do reprovisioning. Accepts the same <code>-e</code> / <code>-s</code> / <code>-o</code> options. By default it overwrites the device in place.</p>
|
|
<h3 id="prd-test-device"><code>prd test DEVICE</code><a class="headerlink" href="#prd-test-device" title="Permanent link">¶</a></h3>
|
|
<p>Do a test of a device against the Microsoft PlayReady demo server and print the returned content keys.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-c</code>, <code>--ckt</code></td>
|
|
<td><code>aesctr</code></td>
|
|
<td>Content key encryption type: <code>aesctr</code> or <code>aescbc</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-sl</code>, <code>--security-level</code></td>
|
|
<td><code>2000</code></td>
|
|
<td>Minimum security level: <code>150</code>, <code>2000</code>, or <code>3000</code>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a>unshackle<span class="w"> </span>prd<span class="w"> </span>new<span class="w"> </span>./device_folder/
|
|
</span><span id="__span-19-2"><a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a>unshackle<span class="w"> </span>prd<span class="w"> </span>new<span class="w"> </span>zgpriv.dat<span class="w"> </span>bgroupcert.dat<span class="w"> </span>-o<span class="w"> </span>/out/dir
|
|
</span><span id="__span-19-3"><a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a>unshackle<span class="w"> </span>prd<span class="w"> </span>reprovision<span class="w"> </span>mydevice.prd
|
|
</span><span id="__span-19-4"><a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a>unshackle<span class="w"> </span>prd<span class="w"> </span><span class="nb">test</span><span class="w"> </span>mydevice.prd<span class="w"> </span>-sl<span class="w"> </span><span class="m">3000</span><span class="w"> </span>-c<span class="w"> </span>aescbc
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="serve"><code>serve</code><a class="headerlink" href="#serve" title="Permanent link">¶</a></h2>
|
|
<p>Serve your local Widevine/PlayReady devices and the REST API for remote access. Built on <code>aiohttp</code>.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a>unshackle serve [OPTIONS]
|
|
</span></code></pre></div>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-h</code>, <code>--host</code></td>
|
|
<td><code>127.0.0.1</code></td>
|
|
<td>Host to serve from.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-p</code>, <code>--port</code></td>
|
|
<td><code>8786</code></td>
|
|
<td>Port to serve from.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--caddy</code></td>
|
|
<td>off</td>
|
|
<td>Also serve through Caddy (requires the <code>caddy</code> binary and a <code>Caddyfile</code>).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--api-only</code></td>
|
|
<td>off</td>
|
|
<td>Serve only the REST API, not the CDM endpoints. Incompatible with <code>--no-widevine</code>/<code>--no-playready</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-widevine</code></td>
|
|
<td>off</td>
|
|
<td>Disable the Widevine CDM endpoints.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-playready</code></td>
|
|
<td>off</td>
|
|
<td>Disable the PlayReady CDM endpoints.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--no-key</code></td>
|
|
<td>off</td>
|
|
<td>Disable API-key authentication (allows all requests).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--debug-api</code></td>
|
|
<td>off</td>
|
|
<td>Include tracebacks/stderr in API error responses.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--debug</code></td>
|
|
<td>off</td>
|
|
<td>Enable debug logging for API operations.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>--remote-only</code></td>
|
|
<td>off</td>
|
|
<td>Expose only the remote service session endpoints (health, services, search, session). Implies <code>--api-only</code>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>WVD files in the WVDs directory and PRD files in the PRDs directory are auto-loaded. The REST API lives under <code>http://<host>:<port>/api/</code>, with Swagger UI at <code>/api/docs/</code> and a health check at <code>/api/health</code> (exempt from auth).</p>
|
|
<div class="admonition warning">
|
|
<p class="admonition-title">Configure <code>api_secret</code> first</p>
|
|
<p>Unless you pass <code>--no-key</code>, <code>serve.api_secret</code> must be set in your config. Requests authenticate with the <code>X-Secret-Key</code> header. <code>--no-key</code> disables authentication entirely. Only use it on a trusted, private network.</p>
|
|
<div class="language-yaml highlight"><span class="filename">unshackle.yaml</span><pre><span></span><code><span id="__span-21-1"><a id="__codelineno-21-1" name="__codelineno-21-1" href="#__codelineno-21-1"></a><span class="nt">serve</span><span class="p">:</span>
|
|
</span><span id="__span-21-2"><a id="__codelineno-21-2" name="__codelineno-21-2" href="#__codelineno-21-2"></a><span class="w"> </span><span class="nt">api_secret</span><span class="p">:</span><span class="w"> </span><span class="s">"your-api-secret"</span>
|
|
</span><span id="__span-21-3"><a id="__codelineno-21-3" name="__codelineno-21-3" href="#__codelineno-21-3"></a><span class="w"> </span><span class="nt">users</span><span class="p">:</span>
|
|
</span><span id="__span-21-4"><a id="__codelineno-21-4" name="__codelineno-21-4" href="#__codelineno-21-4"></a><span class="w"> </span><span class="nt">your-secret-key</span><span class="p">:</span>
|
|
</span><span id="__span-21-5"><a id="__codelineno-21-5" name="__codelineno-21-5" href="#__codelineno-21-5"></a><span class="w"> </span><span class="nt">devices</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">"device_name"</span><span class="p p-Indicator">]</span><span class="w"> </span><span class="c1"># Widevine devices</span>
|
|
</span><span id="__span-21-6"><a id="__codelineno-21-6" name="__codelineno-21-6" href="#__codelineno-21-6"></a><span class="w"> </span><span class="nt">playready_devices</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">"device_name"</span><span class="p p-Indicator">]</span><span class="w"> </span><span class="c1"># PlayReady devices</span>
|
|
</span><span id="__span-21-7"><a id="__codelineno-21-7" name="__codelineno-21-7" href="#__codelineno-21-7"></a><span class="w"> </span><span class="nt">username</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">user</span>
|
|
</span></code></pre></div>
|
|
</div>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-22-1"><a id="__codelineno-22-1" name="__codelineno-22-1" href="#__codelineno-22-1"></a>unshackle<span class="w"> </span>serve
|
|
</span><span id="__span-22-2"><a id="__codelineno-22-2" name="__codelineno-22-2" href="#__codelineno-22-2"></a>unshackle<span class="w"> </span>serve<span class="w"> </span>-h<span class="w"> </span><span class="m">0</span>.0.0.0<span class="w"> </span>-p<span class="w"> </span><span class="m">8080</span>
|
|
</span><span id="__span-22-3"><a id="__codelineno-22-3" name="__codelineno-22-3" href="#__codelineno-22-3"></a>unshackle<span class="w"> </span>serve<span class="w"> </span>--api-only
|
|
</span><span id="__span-22-4"><a id="__codelineno-22-4" name="__codelineno-22-4" href="#__codelineno-22-4"></a>unshackle<span class="w"> </span>serve<span class="w"> </span>--remote-only
|
|
</span><span id="__span-22-5"><a id="__codelineno-22-5" name="__codelineno-22-5" href="#__codelineno-22-5"></a>unshackle<span class="w"> </span>serve<span class="w"> </span>--caddy
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="util"><code>util</code><a class="headerlink" href="#util" title="Permanent link">¶</a></h2>
|
|
<p>Various helper media utilities. When you give a command a directory, it processes every <code>.mkv</code>/<code>.mp4</code> inside it in natural (S01E01 before S01E10) order.</p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-23-1"><a id="__codelineno-23-1" name="__codelineno-23-1" href="#__codelineno-23-1"></a>unshackle util COMMAND [ARGS]...
|
|
</span></code></pre></div>
|
|
<h3 id="util-refresh-services"><code>util refresh-services</code><a class="headerlink" href="#util-refresh-services" title="Permanent link">¶</a></h3>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-24-1"><a id="__codelineno-24-1" name="__codelineno-24-1" href="#__codelineno-24-1"></a>unshackle util refresh-services
|
|
</span></code></pre></div>
|
|
<p>Force a refresh (git pull / hard reset) of all service repos configured under <code>directories.services</code>. This updates the clones on disk. A server that is already running reloads the changed services through <code>POST /api/maintenance/refresh-services</code> or <code>serve.services_refresh_interval</code> instead.</p>
|
|
<h3 id="util-crop-path-aspect"><code>util crop PATH ASPECT</code><a class="headerlink" href="#util-crop-path-aspect" title="Permanent link">¶</a></h3>
|
|
<p>Losslessly crop H.264/H.265 video at the bitstream level. <code>ASPECT</code> is a <code>W:H</code> target such as <code>2.39:1</code>.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--letter</code> / <code>--pillar</code></td>
|
|
<td><code>--letter</code></td>
|
|
<td>Crop top/bottom (<code>--letter</code>) or the sides (<code>--pillar</code>).</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-o</code>, <code>--offset</code></td>
|
|
<td><code>0</code></td>
|
|
<td>Fine-tune the computed crop area if not perfectly centred.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-p</code>, <code>--preview</code></td>
|
|
<td>off</td>
|
|
<td>Preview the crop in MPV (or FFplay) instead of writing a file.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="util-range-path"><code>util range PATH</code><a class="headerlink" href="#util-range-path" title="Permanent link">¶</a></h3>
|
|
<p>Losslessly set the video range flag to full or limited at the bitstream level.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>--full</code> / <code>--limited</code></td>
|
|
<td>-</td>
|
|
<td>Full (0-255) or limited (16-235) range.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>-p</code>, <code>--preview</code></td>
|
|
<td>off</td>
|
|
<td>Preview instead of writing a file.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="util-test-path"><code>util test PATH</code><a class="headerlink" href="#util-test-path" title="Permanent link">¶</a></h3>
|
|
<p>Decode an entire video with FFmpeg and report any corruptions or errors. By default it does a test of every track. It cannot do a test of subtitles.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Option</th>
|
|
<th>Default</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>-m</code>, <code>--map</code></td>
|
|
<td><code>0</code></td>
|
|
<td>Do a test of specific tracks with FFmpeg's <code>-map</code>, for example <code>0:v:0</code> or <code>0:a</code>.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="admonition example">
|
|
<p class="admonition-title">Example</p>
|
|
<div class="language-shell highlight"><pre><span></span><code><span id="__span-25-1"><a id="__codelineno-25-1" name="__codelineno-25-1" href="#__codelineno-25-1"></a>unshackle<span class="w"> </span>util<span class="w"> </span>refresh-services
|
|
</span><span id="__span-25-2"><a id="__codelineno-25-2" name="__codelineno-25-2" href="#__codelineno-25-2"></a>unshackle<span class="w"> </span>util<span class="w"> </span>crop<span class="w"> </span>video.mkv<span class="w"> </span><span class="m">2</span>.39:1
|
|
</span><span id="__span-25-3"><a id="__codelineno-25-3" name="__codelineno-25-3" href="#__codelineno-25-3"></a>unshackle<span class="w"> </span>util<span class="w"> </span>crop<span class="w"> </span>./season/<span class="w"> </span><span class="m">16</span>:9<span class="w"> </span>--pillar<span class="w"> </span>-o<span class="w"> </span><span class="m">10</span>
|
|
</span><span id="__span-25-4"><a id="__codelineno-25-4" name="__codelineno-25-4" href="#__codelineno-25-4"></a>unshackle<span class="w"> </span>util<span class="w"> </span>range<span class="w"> </span>video.mkv<span class="w"> </span>--full
|
|
</span><span id="__span-25-5"><a id="__codelineno-25-5" name="__codelineno-25-5" href="#__codelineno-25-5"></a>unshackle<span class="w"> </span>util<span class="w"> </span><span class="nb">test</span><span class="w"> </span>video.mkv<span class="w"> </span>-m<span class="w"> </span><span class="m">0</span>:v:0
|
|
</span></code></pre></div>
|
|
</div>
|
|
<hr />
|
|
<h2 id="see-also">See also<a class="headerlink" href="#see-also" title="Permanent link">¶</a></h2>
|
|
<ul>
|
|
<li><a href="../../getting-started/installation/">Installation</a>: install unshackle and its dependencies.</li>
|
|
<li><a href="../../getting-started/quickstart/">Quickstart</a>: your first download.</li>
|
|
<li><a href="../../getting-started/configuration-file/">Configuration file</a>: set defaults for any <code>dl</code> flag and configure vaults, proxies, and directories.</li>
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
|
|
Back to top
|
|
</button>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
|
|
|
|
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
|
|
|
|
|
<a href="../downloading/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Downloading">
|
|
<div class="md-footer__button md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
</div>
|
|
<div class="md-footer__title">
|
|
<span class="md-footer__direction">
|
|
Previous
|
|
</span>
|
|
<div class="md-ellipsis">
|
|
Downloading
|
|
</div>
|
|
</div>
|
|
</a>
|
|
|
|
|
|
|
|
<a href="../drm-and-cdm/" class="md-footer__link md-footer__link--next" aria-label="Next: DRM & CDM Setup">
|
|
<div class="md-footer__title">
|
|
<span class="md-footer__direction">
|
|
Next
|
|
</span>
|
|
<div class="md-ellipsis">
|
|
DRM & CDM Setup
|
|
</div>
|
|
</div>
|
|
<div class="md-footer__button md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
|
|
</div>
|
|
</a>
|
|
|
|
</nav>
|
|
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
Material for MkDocs
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["content.code.annotate", "content.code.copy", "content.tabs.link", "content.tooltips", "navigation.footer", "navigation.indexes", "navigation.sections", "navigation.tabs", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
|
|
|
|
|
<script src="../../assets/javascripts/bundle.d7400e89.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |