Downloads anime from Crunchyroll and outputs them in a MKV file.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tenshii d70ca81ddb
fix: make audio locale selection inclusive
Skip unavailable audio locales with a warning instead of aborting the episode,
so a prioritized list like "ja-JP,en-US" downloads whichever are available.
Abort only when none of the requested locales exist.

Closes #28
2026-09-02 01:19:52 +02:00
.github ci: use the latest action versions in the release workflow 2026-08-31 22:53:49 +02:00
.gitignore chore: ignore compiled binaries 2026-08-31 22:39:56 +02:00
CHANGELOG.md docs: add the 1.3.0 changelog entry 2026-08-31 23:28:14 +02:00
download.go fix: make audio locale selection inclusive 2026-09-02 01:19:52 +02:00
download_test.go fix: skip unavailable subtitle locales instead of aborting 2026-09-02 01:17:14 +02:00
drm.go fix: support on-demand manifests and non-Widevine PSSH system IDs 2026-09-01 22:58:42 +02:00
drm_test.go fix: support on-demand manifests and non-Widevine PSSH system IDs 2026-09-01 22:58:42 +02:00
episode.go fix: handle polymorphic "error" field in playback response 2026-09-01 23:23:44 +02:00
episode_test.go fix: handle polymorphic "error" field in playback response 2026-09-01 23:23:44 +02:00
go.mod fix: keep checking tracks when one KID has no matching key 2026-08-31 23:05:29 +02:00
go.sum Initial commit 2025-11-29 02:24:49 +01:00
http_request.go feat: 1.1.1 2026-01-12 02:53:42 +01:00
LICENSE.txt feat: add license 2026-06-01 20:21:40 +02:00
main.go fix: parse URLs with locale prefix like /fr/series/ 2026-09-01 22:14:29 +02:00
main_test.go fix: parse URLs with locale prefix like /fr/series/ 2026-09-01 22:14:29 +02:00
mpd.go fix: support on-demand manifests and non-Widevine PSSH system IDs 2026-09-01 22:58:42 +02:00
ondemand.go fix: support on-demand manifests and non-Widevine PSSH system IDs 2026-09-01 22:58:42 +02:00
ondemand_test.go fix: support on-demand manifests and non-Widevine PSSH system IDs 2026-09-01 22:58:42 +02:00
output.go Add independent cc-lang flag for downloading closed captions 2026-06-21 15:31:47 -07:00
README.md docs: add badges and correct the documented flags 2026-08-31 23:28:13 +02:00
season.go urls flag rename to file flag & audio-lang / sub_lang flag implementation in season download 2026-03-21 21:10:50 +01:00
token.go feat: 1.1.1 2026-01-12 02:53:42 +01:00
utils.go fix: bound memory during segment download and check write errors 2026-08-31 22:45:08 +02:00
utils_test.go fix: bound memory during segment download and check write errors 2026-08-31 22:45:08 +02:00

Crunchyroll Downloader

Tests Latest release Downloads Go version License

Downloads anime from Crunchyroll and outputs them in a MKV file.

You won't be banned or anything, I downloaded all Kaguya-Sama seasons to test during 30 mins and everything went fine

Features

  • Supports choosing the audio and subtitles language, including downloading multiple of each into a single file
  • Supports choosing the audio and video quality
  • Decrypts Widevine DRM (requires: a .wvd file or client_id.bin and private_key.pem files)
  • Adds metadata (like episode name) to the MKV container
  • Parallel segment downloads (10 workers) for faster downloads
  • Retry with backoff on connection errors
  • Batch download from a list of URLs

Requirements

  • FFmpeg
  • To download Premium-only content, a Crunchyroll Premium account. No, this can't be bypassed and a free trial should be enough
  • Either a .wvd file, or a client_id.bin and private_key.pem

Download

Check the latest release and download the file that corresponds to your OS.

Usage

  • Open a Terminal/Command prompt, and go to the folder where you downloaded the binary/cloned the repo
  • Run the program with the options you want:
Usage of ./crunchyroll-downloader:
  -audio-lang string
        Audio language(s), comma-separated for multiple (e.g. "ja-JP,en-US"). First is the default track (default "ja-JP")
  -audio-quality string
        Audio quality (default "192k")
  -cc-lang string
        Closed caption language(s), comma-separated for multiple (e.g. "en-US"). Downloaded in addition to --subs-lang, not instead of it
  -debug-manifest
        Log raw episode playback JSON and manifest XML
  -etp-rt string
        The "etp_rt" cookie value of your account
  -file string
        Path to a text file with one URL per line
  -season int
        Season number. Not used if an episode link is entered
  -subs-lang string
        Subtitle language(s), comma-separated for multiple (e.g. "en-US,es-419"). First is the default track (default "en-US")
  -url string
        URL of the episode/season to download
  -video-quality string
        Video quality (default "1080p")

Ex: to download the first season of Hell's Paradise:

./crunchyroll-downloader --url https://www.crunchyroll.com/series/GJ0H7Q5ZJ/hells-paradise --season 1 --etp-rt replace_this

To download a specific episode:

./crunchyroll-downloader --url https://www.crunchyroll.com/watch/GE00198973JAJP/dawn-and-confusion --etp-rt replace_this

To batch download from a file (one URL per line):

./crunchyroll-downloader --file list.txt --etp-rt replace_this --subs-lang pt-BR

To download multiple audio tracks and subtitles into a single file (the first of each is set as the default track). If any requested language is missing for an episode, that episode is skipped:

./crunchyroll-downloader --url https://www.crunchyroll.com/watch/GE00198973JAJP/dawn-and-confusion --etp-rt replace_this --audio-lang ja-JP,en-US --subs-lang en-US,es-419,de-DE

Building

Requirements

Guide

  • Clone this repository
  • Open a Terminal/Command prompt, and go to the folder where you cloned the repo
  • Run go build .

Help

  • Go to https://crunchyroll.com
  • Open Developer Tools
  • Firefox: Go to Storage then Cookies
    Chrome: Go to Application then Cookies
  • Select the Crunchyroll domain, then copy the etp_rt cookie value

What is a .wvd file and do I really need one?

Yes, Crunchyroll uses DRM-only content. This file is used to get a Widevine license, which gives the keys to decrypt the media.

If you don't have a rooted Android device or are just lazy, search "ready to use cdms" and you'll find plenty of websites providing those files.

License

This project is licensed under the MIT License. See LICENSE.txt