Widevine DRM downloader and decrypter.
Thanks to wvleaks for this leak
NEED CDM ?
-
🎉 Need L1 CDM FOR AMZN ,NF,DSNP mail us on [email protected],CDM is not free paid only
DRM Sites Supported
- Amazon
- Netflix
- Apple Tv Plus
- DisneyPlus
- Bbciplayer
- Braviacore
- Crave
- CTV
- Disney Now
- Filmio
- Flixole
- Google Play
- HBO MAX
- Hotstar
- HULU
- Itunes
- Paramount Plus
- Peacock
- Rakutentv
- Rtlmost
- Showtime
- Spectrum
- Stan
- TVNow
- Video Land
- Vudu
To-do
There's various TODO's all around the project's code as comments as well as in the doc-strings of the root functions found in vinetrimmer.py, feel free to check them if you want something to do.
Installation
Requirements
Install the following dependencies in the listed order. Ensure shaka-packager is added to the environment path.
- python, 3.7.0 or newer
- pip, v19.0 or newer - Python package management
- poetry, latest recommended - Python dependency management
- shaka-packager, latest recommended - Battle-tested encryption suite created by Google
The following are optional, but will most likely be used:
- MKVToolNix, v54 or newer for Muxing, Demuxing, and Remuxing. Required if not using --no-mux
- FFMPEG, latest recommended for Repacking, Remuxing, and Identifying streams. Required if stream requires a repack, e.g. Disney+
- CCExtractor, latest recommended for EIA (CEA) Closed Captions extraction (might only be doing CEA 608 and assumes Field 1 Channel 1). Required if a c608 box exists (e.g. iTunes) or ffprobe can find a CEA 608 track embedded in the video bitstream (e.g. CTV).
- NodeJS, v12 or newer for Netflix web-data JS Object to JSON conversion. Required if using Netflix
Ensure any dependency that has no installer (e.g. portable .exe files) are stored somewhere and added to environment PATH.
Steps
poetry config virtualenvs.in-project true
(optional but recommended)poetry install
- You now have a
.venv
folder in your project root directory. Python and dependencies are installed here. - You now also have
vt
shim executable installed in the virtual-env. Example usage method:poetry shell
thenvt -h
orpoetry run vt -h
- For more ways to use
vt
or the virtual-env, follow Poetry Docs: Using your virtual environment. You could even add the.venv\Scripts
to your environment path to havevt
available on any terminal.
Important: Do not run Pip as Admin. pip should not even be used with vinetrimmer, ever, unless you wish to directly install to the system Python installation with pip install .
.
Usage
The first step to configuring and using vinetrimmer is setting up the data available for use.
See the Data-directory structure for the majority of data preparation. Then look at the vinetrimmer.toml
file to configure the application settings and profile credentials.
Vinetrimmer currently has three commands: dl
, cfg
and prv
. dl
allows you to download titles. cfg
allows you to configure your vinetrimmer setup. prv
allows you to provision Widevine keyboxes.
For more usage information, see vt -h
or e.g. vt dl -h
for help on each command.
Config directory
The config directory is where the main configuration for vinetrimmer and each service is stored. It is usually at %LOCALAPPDATA%\vinetrimmer
on Windows, ~/Library/Preferences/vinetrimmer
on macOS, and ~/.config/vinetrimmer
on Linux. You can do vt dl -h
to see the exact path for your current platform. Example config files are available in the example_configs
directory in the repo.
Structure:
- vinetrimmer.toml
- Services/ ¬
- service_name.toml (e.g.
DisneyPlus.toml
)
- service_name.toml (e.g.
Data directory
The data directory is where various data for use is stored, e.g. Profiles, Cookies, and .wvd WideVineDevices. It is usually at %LOCALAPPDATA%\vinetrimmer
on Windows, ~/Library/Application Support/vinetrimmer
on macOS, and ~/.local/share/vinetrimmer
on Linux. You can do vt dl -h
to see the exact path for your current platform.
Structure:
- /Cookies/ ¬
- /service name/ ¬ (e.g.
/Amazon/
)
- /service name/ ¬ (e.g.
- /WVDs/ ¬
Profiles
A Profile is simply a filename moniker that will be used to identify a Cookie or Credential file per service.
Profile files are unique per service folder, i.e. two services can use the same john.txt
cookie and/or credential file.
You can specify which profile (or profiles) to use on each service in the main configuration file under [profiles]
. When defining multiple profiles per service like the Amazon example, you choose which one to use with -z
or let it ask you when running.
Widevine Device (.wvd) files
This is the device key data in Struct format that is needed for the CDM (Content Decryption Module).
A good idea would be to name the file with respect to the device it's from as well as state its security level. For example, nexus_6_l3.wvd
. The files must be using .wvd
(_W_ide_V_ine_D_evice) as the file extension.
To make a WVD file is super simple! Use the available helper scripts at /scripts/WVD/, or take a look by manually creating one by using the LocalDevice class object below.
from pathlib import Path
from vinetrimmer.utils.Widevine.device import LocalDevice
device = LocalDevice(
type=LocalDevice.Types.CHROME,
security_level=3,
flags={"send_key_control_none": False}, # example flags only, check struct in LocalDevice() to see flags
private_key=b"...",
client_id=b"...",
vmp=b"..." # or None if you don't have (or need) one
)
# print(device) # print it out (as python Device object)
# print(device.dumps()) # print it out as bytes
device.dump(Path("C:/Users/john/Documents/chromecdm903_l3.wvd")) # dump it to a file
Cookies
Cookies must be in the standard Netscape cookies file format.
Recommended extensions:
- "Export Cookies" by
Rotem Dan
- "Get cookies.txt" by
Rahul Shaw
Any other extension that exports to the standard Netscape format should theoretically work.
Credentials
Credentials' sole purpose is to provide the service with a Username (or Email) and Password that would be used to log in and obtain required cookies and/or tokens automatically. Ideally, Services should only ever need either a Credential, or a Cookies file (not both). However, this isn't always the case.
Credentials are stored in the vinetrimmer.toml
file of the config directory. See the [credentials]
section in vinetrimmer.example.toml
for information on the format and usage.
Tip: The key/profile name used in the [credentials]
section must match the filename used for cookies if you wish to provide both Credentials and Cookies to a service.