👇 Command-line downloader for Crunchyroll
Find a file
2023-05-25 18:58:03 +02:00
.github Remove dependabot 2023-04-08 15:10:37 +02:00
crunchy-cli-core Fix long help language formatting 2023-05-24 13:15:28 +02:00
src Rewrite it in Rust 2022-11-24 15:30:49 +01:00
.gitignore add minimal .gitignore (#83) 2022-12-16 16:09:52 +01:00
build.rs Update dependencies 2022-12-16 10:09:41 +01:00
Cargo.lock Update version 2023-04-25 10:47:08 +02:00
Cargo.toml Update version 2023-04-25 10:47:08 +02:00
LICENSE Change license to GPL-3.0 2022-06-27 22:31:36 +02:00
README.md Remove no-subtitle-optimization flag in README 2023-05-25 18:58:03 +02:00

crunchy-cli

A pure Rust CLI for Crunchyroll.

Code size Download Badge License Release Discord CI

Usage 🖥️Disclaimer 📜License ⚖

We are in no way affiliated with, maintained, authorized, sponsored, or officially associated with Crunchyroll LLC or any of its subsidiaries or affiliates. The official Crunchyroll website can be found at crunchyroll.com.

This README belongs to the master branch which is currently under heavy development towards the next major version (3.0). It is mostly stable but some issues may still occur. If you do not want to use an under-development / pre-release version, head over to the golang branch which contains the EOL but last stable version (and documentation for it).

Features

  • Download single videos and entire series from Crunchyroll.
  • Archive episodes or seasons in an .mkv file with multiple subtitles and audios.
  • Specify a range of episodes to download from an anime.

💾 Get the executable

📥 Download the latest binaries

Check out the releases tab and get the binary from the latest (pre-)release.

🛠 Build it yourself

Since we do not support every platform and architecture you may have to build the project yourself. This requires git and Cargo.

$ git clone https://github.com/crunchy-labs/crunchy-cli
$ cd crunchy-cli
$ cargo build --release
$ cargo install --force --path .

🖥️ Usage

All shown commands are examples 🧑🏼‍🍳

crunchy-cli requires you to log in. Though you can use a non-premium account, you will not have access to premium content without a subscription. You can authenticate with your credentials (username:password) or by using a refresh token.

  • Credentials
    • $ crunchy --credentials "user:password"
      
  • Refresh Token
    • To obtain a refresh token, you have to log in at crunchyroll.com and extract the etp_rt cookie. The easiest way to get it is via a browser extension which lets you export your cookies, like Cookie-Editor (Firefox / Chrome). When installed, look for the etp_rt entry and extract its value.
    • $ crunchy --etp-rt "4ebf1690-53a4-491a-a2ac-488309120f5d"
      
  • Stay Anonymous
    • Skip the login check:
    • $ crunchy --anonymous
      

Login

crunchy-cli can store your session, so you don't have to authenticate every time you execute a command.

Note that the login keyword has to be used last.

$ crunchy --etp-rt "4ebf1690-53a4-491a-a2ac-488309120f5d" login

With the session stored, you do not need to use --credentials / --etp-rt anymore. This does not work with --anonymous.

Download

Supported urls

  • Single episode
    $ crunchy download https://www.crunchyroll.com/watch/GRDQPM1ZY/alone-and-lonesome
    
  • Series
    $ crunchy download https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

Options

  • Audio language

    Set the audio language with the -a / --audio flag. This only works if the url points to a series since episode urls are language specific.

    $ crunchy download -a de-DE https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is your system locale. If not supported by Crunchyroll, en-US (American English) is the default.

  • Subtitle language

    Besides the audio, you can specify the subtitle language by using the -s / --subtitle flag. The subtitles will be burned into the video track (cf. hardsub) and thus can not be turned off.

    $ crunchy download -s de-DE https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is none.

  • Output template

    Define an output template by using the -o / --output flag. If you want to use any other file format than .ts you need ffmpeg.

    $ crunchy download -o "ditf.ts" https://www.crunchyroll.com/watch/GRDQPM1ZY/alone-and-lonesome
    

    Default is {title}.ts.

  • Resolution

    The resolution for videos can be set via the -r / --resolution flag.

    $ crunchy download -r worst https://www.crunchyroll.com/watch/GRDQPM1ZY/alone-and-lonesome
    

    Default is best.

Archive

Supported urls

  • Series

    Only series urls are supported, because episode urls are locked to a single audio language.

    $ crunchy archive https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

Options

  • Audio languages

    Set the audio language with the -a / --audio flag. Can be used multiple times.

    $ crunchy archive -a ja-JP -a de-DE https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is your system locale (if not supported by Crunchyroll, en-US (American English) and ja-JP (Japanese) are used).

  • Subtitle languages

    Besides the audio, you can specify the subtitle language by using the -s / --subtitle flag.

    $ crunchy archive -s de-DE https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is all subtitles.

  • Output template

    Define an output template by using the -o / --output flag. crunchy-cli uses the .mkv container format, because of it's ability to store multiple audio, video and subtitle tracks at once.

    $ crunchy archive -o "{title}.mkv" https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is {title}.mkv.

  • Resolution

    The resolution for videos can be set via the -r / --resolution flag.

    $ crunchy archive -r worst https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is best.

  • Merge behavior

    Due to censorship, some episodes have multiple lengths for different languages. In the best case, when multiple audio & subtitle tracks are used, there is only one video track and all other languages can be stored as audio-only. But, as said, this is not always the case. With the -m / --merge flag you can define the behaviour when an episodes' video tracks differ in length. Valid options are audio - store one video and all other languages as audio only; video - store the video + audio for every language; auto - detect if videos differ in length: if so, behave like video - otherwise like audio. Subtitles will always match the primary audio and video.

    $ crunchy archive -m audio https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is auto.

  • Default subtitle

    --default-subtitle Set which subtitle language is to be flagged as default and forced.

    $ crunchy archive --default-subtitle en-US https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx
    

    Default is none.

Episode filtering

Filters patterns can be used to download a specific range of episodes from a single series.

A filter pattern may consist of either a season, an episode, or a combination of the two. When used in combination, seasons S must be defined before episodes E.

There are many possible patterns, for example:

  • ...[E5] - Download the fifth episode.
  • ...[S1] - Download the whole first season.
  • ...[-S2] - Download the first two seasons.
  • ...[S3E4-] - Download everything from season three, episode four, onwards.
  • ...[S1E4-S3] - Download season one, starting at episode four, then download season two and three.
  • ...[S3,S5] - Download season three and five.
  • ...[S1-S3,S4E2-S4E6] - Download season one to three, then episodes two to six from season four.

In practice, it would look like this: https://www.crunchyroll.com/series/GY8VEQ95Y/darling-in-the-franxx[E1-E5]

📜 Disclaimer

This tool is ONLY meant for private use. You need a subscription to 💳 Crunchyroll Premium 💳 to download premium content.

You are entirely responsible for what happens to files you downloaded through crunchy-cli.

⚖ License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0) - see the LICENSE file for more details.