mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-14 21:15:06 +00:00
docs: correct DRM, muxing, and proxy references (+ case-insensitive proxy prefix fix)
This commit is contained in:
@@ -71,8 +71,8 @@ The differences that matter to you are:
|
|||||||
[Widevine and PlayReady on the same title](#widevine-and-playready-on-the-same-title)).
|
[Widevine and PlayReady on the same title](#widevine-and-playready-on-the-same-title)).
|
||||||
|
|
||||||
To download a Widevine-protected title you need a `.wvd` device; for PlayReady you
|
To download a Widevine-protected title you need a `.wvd` device; for PlayReady you
|
||||||
need a `.prd` device. You can hold both and let unshackle choose, or force one with
|
need a `.prd` device. You can hold both, and unshackle automatically selects the
|
||||||
the `--drm` flag.
|
appropriate one for each track.
|
||||||
|
|
||||||
!!! info "Obtaining device files"
|
!!! info "Obtaining device files"
|
||||||
A `.wvd` or `.prd` encodes the private keys of a real client device. unshackle
|
A `.wvd` or `.prd` encodes the private keys of a real client device. unshackle
|
||||||
@@ -205,12 +205,7 @@ cdm:
|
|||||||
EXAMPLE2: sm_g935f_l1
|
EXAMPLE2: sm_g935f_l1
|
||||||
```
|
```
|
||||||
|
|
||||||
Lookups are case-insensitive. On the command line you can override the configured
|
Lookups are case-insensitive.
|
||||||
device for a single run:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ unshackle dl -w chromecdm_l3 EXAMPLE1 B0ABCDEF
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! tip "The device name is the file name"
|
!!! tip "The device name is the file name"
|
||||||
A device named `chromecdm_l3` in the config resolves to `chromecdm_l3.wvd` in the
|
A device named `chromecdm_l3` in the config resolves to `chromecdm_l3.wvd` in the
|
||||||
@@ -238,8 +233,9 @@ profile.
|
|||||||
|
|
||||||
=== "By DRM system"
|
=== "By DRM system"
|
||||||
|
|
||||||
Keys `widevine` and `playready` select a device per system. This pairs with the
|
Keys `widevine` and `playready` select a device per system. unshackle applies
|
||||||
`--drm` flag, which accepts `wv`/`widevine` or `pr`/`playready`.
|
these automatically, using the `widevine` device for Widevine tracks and the
|
||||||
|
`playready` device for PlayReady tracks.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
cdm:
|
cdm:
|
||||||
@@ -471,8 +467,8 @@ Title needs a Widevine CDM but SOMESERVICE is configured with PlayReady.
|
|||||||
```
|
```
|
||||||
|
|
||||||
Use the `cdm` mapping's [DRM-based selection](#advanced-selection-by-quality-drm-or-profile)
|
Use the `cdm` mapping's [DRM-based selection](#advanced-selection-by-quality-drm-or-profile)
|
||||||
to configure a device for each system, or force one system with `--drm` on the
|
to configure a device for each system; unshackle selects the right one per track
|
||||||
command line.
|
automatically.
|
||||||
|
|
||||||
## Keys, vaults, and caching
|
## Keys, vaults, and caching
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ When a download finishes muxing, unshackle builds the final path from three piec
|
|||||||
```
|
```
|
||||||
|
|
||||||
- **Output directory**: `directories.downloads` from your config, or whatever you pass to `-o/--output` on the command line for a single run.
|
- **Output directory**: `directories.downloads` from your config, or whatever you pass to `-o/--output` on the command line for a single run.
|
||||||
- **Folder template**: an optional per-title subfolder. TV episodes and music tracks are **always** placed in a folder; movies only get one if you define a `movies` folder template (see [Folder templates](#folder-templates)).
|
- **Folder template**: an optional per-title subfolder. TV episodes and music tracks are **always** placed in a folder; movies only get one if you define a `movies` folder template, or a single-string `folder` template that applies to all title kinds (see [Folder templates](#folder-templates)).
|
||||||
- **Filename template**: the `output_template` for the title kind (movie, series, or song).
|
- **Filename template**: the `output_template` for the title kind (movie, series, or song).
|
||||||
- **Extension**: chosen by the muxer: `.mkv` for video, `.mka` for audio-only, `.mks` for subtitle-only.
|
- **Extension**: chosen by the muxer: `.mkv` for video, `.mka` for audio-only, `.mks` for subtitle-only.
|
||||||
|
|
||||||
@@ -188,10 +188,10 @@ The per-kind folder keys are `movies`, `series`, `songs`, and `albums`. Any othe
|
|||||||
**Fallback behavior:**
|
**Fallback behavior:**
|
||||||
|
|
||||||
- A per-kind folder template wins if present; otherwise the single `folder` string is used; otherwise unshackle falls back to a built-in default.
|
- A per-kind folder template wins if present; otherwise the single `folder` string is used; otherwise unshackle falls back to a built-in default.
|
||||||
- Built-in defaults when no folder template is set: movies get no folder at all unless a `movies` folder template exists; series fall back to a folder *derived* from the `series` output template (stripping `{episode}`, `{episode_name}`, and collapsing `{season_episode}` down to `{season}`); music albums fall back to `{artist} - {album} ({year})`.
|
- Built-in defaults when no folder template is set: movies get no folder at all unless a `movies` folder template (or a single-string `folder` template) exists; series fall back to a folder *derived* from the `series` output template (stripping `{episode}`, `{episode_name}`, and collapsing `{season_episode}` down to `{season}`); music albums fall back to `{artist} - {album} ({year})`.
|
||||||
|
|
||||||
!!! note "Movies are flat by default"
|
!!! note "Movies are flat by default"
|
||||||
Episodes and songs are always foldered. Movies are written directly into the output directory *unless* you define a `movies` folder template. Set one if you want each movie in its own directory.
|
Episodes and songs are always foldered. Movies are written directly into the output directory *unless* you define a `movies` folder template (or a single-string `folder` template, which folders every kind). Set one if you want each movie in its own directory.
|
||||||
|
|
||||||
## Muxing options
|
## Muxing options
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ Muxing (combining video, audio, subtitle, chapter and attachment tracks into a s
|
|||||||
```yaml title="unshackle.yaml"
|
```yaml title="unshackle.yaml"
|
||||||
muxing:
|
muxing:
|
||||||
set_title: true
|
set_title: true
|
||||||
merge_video: true
|
merge_video: false
|
||||||
merge_audio: true
|
merge_audio: true
|
||||||
default_language:
|
default_language:
|
||||||
audio: en
|
audio: en
|
||||||
@@ -210,7 +210,7 @@ muxing:
|
|||||||
| Key | Type | Default | Effect |
|
| Key | Type | Default | Effect |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `set_title` | bool | `true` | Write the title name into the MKV container title with `--title`. Set to `false` to omit it. |
|
| `set_title` | bool | `true` | Write the title name into the MKV container title with `--title`. Set to `false` to omit it. |
|
||||||
| `merge_video` | bool | `true` | Group video tracks that share the same resolution, range, and codec into one file so only language varies inside it. |
|
| `merge_video` | bool | `false` | Group video tracks that share the same resolution, range, and codec into one file so only language varies inside it. |
|
||||||
| `merge_audio` | bool | `true` | Merge audio tracks of the same kind so multiple languages sit in one file. |
|
| `merge_audio` | bool | `true` | Merge audio tracks of the same kind so multiple languages sit in one file. |
|
||||||
| `default_language` | map | *(unset)* | Preferred language per track type (`video` / `audio` / `subtitle`). A track in the preferred language is flagged as the default track. |
|
| `default_language` | map | *(unset)* | Preferred language per track type (`video` / `audio` / `subtitle`). A track in the preferred language is flagged as the default track. |
|
||||||
|
|
||||||
|
|||||||
@@ -418,7 +418,7 @@ proxy_providers:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Required keys:** `username`, `password`. unshackle validates them up front: the
|
**Required keys:** `username`, `password`. unshackle validates them up front: the
|
||||||
combined username and password must be exactly 48 lowercase alphanumeric characters, and
|
combined username and password must be exactly 48 alphanumeric characters (case-insensitive), and
|
||||||
the username must not contain an `@`. If validation fails, you have almost certainly used
|
the username must not contain an `@`. If validation fails, you have almost certainly used
|
||||||
your login credentials instead of your service credentials.
|
your login credentials instead of your service credentials.
|
||||||
|
|
||||||
@@ -555,7 +555,7 @@ proxy_providers:
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Required keys:** `username`, `password`, validated with the same 48-character rule as
|
**Required keys:** `username`, `password`, validated with the same 48-character rule as
|
||||||
NordVPN (combined username+password must be 48 lowercase alphanumeric characters, no `@`).
|
NordVPN (combined username+password must be 48 alphanumeric characters, case-insensitive, no `@`).
|
||||||
`server_map` optionally pins server IDs per region.
|
`server_map` optionally pins server IDs per region.
|
||||||
|
|
||||||
**Query forms:**
|
**Query forms:**
|
||||||
|
|||||||
@@ -1104,7 +1104,11 @@ class dl:
|
|||||||
with console.status(status_msg, spinner="dots"):
|
with console.status(status_msg, spinner="dots"):
|
||||||
if requested_provider:
|
if requested_provider:
|
||||||
proxy_provider = next(
|
proxy_provider = next(
|
||||||
(x for x in self.proxy_providers if x.__class__.__name__.lower() == requested_provider),
|
(
|
||||||
|
x
|
||||||
|
for x in self.proxy_providers
|
||||||
|
if x.__class__.__name__.lower() == requested_provider.lower()
|
||||||
|
),
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
if not proxy_provider:
|
if not proxy_provider:
|
||||||
|
|||||||
Reference in New Issue
Block a user