Curd

May 26, 2026 ยท View on GitHub

A cli application to stream anime with Anilist integration and Discord RPC written in golang. Works on Linux, MacOS and Windows.

Join the discord server

https://discord.gg/rrpBfu2gHq

Join the Matrix server

https://matrix.to/#/#curd:matrix.org

Demo Video

Normal mode:

https://github.com/user-attachments/assets/376e7580-b1af-40ee-82c3-154191f75b79

Rofi with Image preview

https://github.com/user-attachments/assets/cbf799bc-9fdd-4402-ab61-b4e31f1e264d

Features

  • Multiple Content Providers (AllAnime and Animepahe) with ordered fallback and up to 1080p support
  • Built-in headless browser to bypass Cloudflare/DDoS-Guard protections
  • Stream anime online
  • Track anime locally, on AniList, or on MyAnimeList
  • Browser-based AniList and MyAnimeList login flows
  • Skip anime Intro and Outro
  • Skip Filler and Recap episodes
  • Discord RPC about the anime
  • Rofi support
  • Image preview in rofi
  • Local anime history to continue from where you left off last time
  • Save mpv speed for next episode
  • Configurable through config file

Installing and Setup

Note: Curd requires mpv, rofi, and ueberzugpp for Rofi support and image preview. These are included in the installation instructions below for each distribution.

Linux

Arch Linux / Manjaro (AUR-based systems)

Using Yay:

yay -Sy curd

or using Paru:

paru -Sy curd

Or, to manually clone and install:

git clone https://aur.archlinux.org/curd.git
cd curd
makepkg -si
sudo pacman -S rofi ueberzugpp
Debian / Ubuntu (and derivatives)
sudo apt update
sudo apt install mpv curl rofi ueberzugpp

# For x86_64 systems:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-x86_64

# For ARM64 systems:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-arm64

chmod +x curd
sudo mv curd /usr/bin/
curd
Fedora Installation
sudo dnf update
sudo dnf install mpv curl rofi ueberzugpp

# For x86_64 systems:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-x86_64

# For ARM64 systems:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-arm64

chmod +x curd
sudo mv curd /usr/bin/
curd
openSUSE Installation
sudo zypper refresh
sudo zypper install mpv curl rofi ueberzugpp

# For x86_64 systems:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-x86_64

# For ARM64 systems:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-arm64

chmod +x curd
sudo mv curd /usr/bin/
curd
NixOS Installation
  1. Add curd as a flake input, for example:
{
    inputs = {
        nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
        curd = {
            url = "github:Wraient/curd";
            inputs.nixpkgs.follows = "nixpkgs";
        };
    }
}
  1. Install the package, for example:
{inputs, pkgs, ...}: {
  environment.systemPackages = [
    inputs.curd.packages.${pkgs.system}.default
  ];
}
Generic Installation

Choose the appropriate binary for your system:

# For Linux x86_64:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-x86_64

# For Linux ARM64:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-linux-arm64

chmod +x curd
sudo mv curd /usr/bin/
curd
Uninstallation
sudo rm /usr/bin/curd

For AUR-based distributions:

yay -R curd

MacOS

MacOS Installation

Install required dependencies

brew install mpv curl

Download the appropriate binary for your system:

  • For Apple Silicon (M1/M2) Macs:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-macos-arm64
  • For Intel Macs:
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-macos-x86_64
  • For Universal Binary (works on both architectures):
curl -Lo curd https://github.com/Wraient/curd/releases/latest/download/curd-macos-universal

Then complete the installation:

chmod +x curd
sudo mv curd /usr/local/bin/
curd
Uninstallation
sudo rm /usr/local/bin/curd

Windows

Windows Installation

Option 1: Using the installer

Option 2: Standalone executable

Data Storage

Windows Stroage: (Token, Timestamps, debug.log, etc)
C:\.local\share\curd

Config :

C:\Users\USERNAME\AppData\Roaming\Curd
Linux/Unix Stroage: (Token, Timestamps, debug.log, etc)
$USER/.local/share/curd

Config :

$USER/.config/curd

Usage

Run curd with the following options:

curd [options]

Arguments would always take precedence over configuration

Note:

  • To use rofi you need rofi and ueberzug installed.
  • Rofi .rasi files are at default ~/.local/share/curd/
  • You can edit them as you like.
  • If there are no rasi files with specific names, they would be downloaded from this repo.

Options

FlagDescriptionDefault
-cContinue the last episode-
-change-tokenChange your authentication token-
-dubWatch the dubbed version of the anime-
-subWatch the subbed version of the anime-
-newAdd a new anime to your list-
-eEdit the configuration file-
-skip-opAutomatically skip the opening section of each episodetrue
-skip-edAutomatically skip the ending section of each episodetrue
-skip-fillerAutomatically skip filler episodestrue
-skip-recapAutomatically skip recap sectionstrue
-discord-presenceEnable or disable Discord presencetrue
-image-previewShow an image preview of the anime-
-no-image-previewDisable image preview-
-next-episode-promptPrompt for the next episode after completing one-
-rofiOpen anime selection in the rofi interface-
-no-rofiDisable rofi interface-
-percentage-to-mark-completeSet the percentage watched to mark an episode as complete85
-playerSpecify the player to use for playback"mpv"
-save-mpv-speedSave the current MPV speed setting for future sessionstrue
-score-on-completionPrompt to score the episode on completiontrue
-storage-pathPath to the storage directory"$HOME/.local/share/curd"
-subs-langSet the language for subtitles"english"
-uUpdate the script-
-vShow curd version-

Examples

  • Continue the Last Episode:

    curd -c
    
  • Add a New Anime:

    curd -percentage-to-mark-complete=90
    
  • Play with Rofi and Image Preview:

    curd -rofi -image-preview
    

Configuration

All configurations are stored in a file you can edit with the -e option.

curd -e

Script is made in a way that you use it for one session of watching.

You can quit it anytime and the resume time would be saved in the history file

more settings can be found at config file. config file is located at ~/.config/curd/curd.conf

On first start, curd asks which tracking mode you want to use:

  • local
  • anilist
  • myanimelist
  • anilist + myanimelist

Local history stays enabled in all modes. anilist means local history + AniList sync, myanimelist means local history + MyAnimeList sync, and anilist + myanimelist updates both platforms. In dual-sync mode, curd compares the latest remote update time for each anime and pushes the newest status/progress/category back to the older tracker so both sides converge automatically. Legacy installs are migrated to anilist automatically. If you switch trackers later, curd exposes a Change Tracker menu entry and can either merge both lists, replace MyAnimeList with AniList, or replace AniList with MyAnimeList.

MyAnimeList OAuth requires your own MAL application credentials. You can set them in the config file or with environment variables:

CURD_MAL_CLIENT_ID=your_client_id
CURD_MAL_CLIENT_SECRET=your_client_secret

If the browser reaches the localhost callback page but curd does not continue automatically, rerun the command and paste the full callback URL when prompted. Curd now keeps the pending MyAnimeList PKCE state so the login can be completed manually.

OptionTypeValid ValuesDescription
DiscordPresenceBooleantrue, falseEnables or disables Discord Rich Presence integration.
AnimeNameLanguageEnumenglish, romajiSets the preferred language for anime names.
MpvArgsListall mpv args eg ["--fullscreen=yes", "--mute=yes"]Add args to mpv player
AddMissingOptionsBooleantrue, falseAutomatically adds missing configuration options with default values to the config file.
AlternateScreenBooleantrue, falseToggles the use of an alternate screen buffer for cleaner UI.
RofiSelectionBooleantrue, falseEnables or disables anime selection via Rofi.
PercentageToMarkCompleteInteger0 to 100Sets the percentage of an episode watched to consider it as completed.
StoragePathStringAny valid path (Environment variables accepted)Specifies the directory where Curd stores its data.
SubOrDubEnumsub, dubSets the preferred format for anime audio.
NextEpisodePromptBooleantrue, falsePrompts the user before automatically playing the next episode.
SubsLanguageStringenglish (redundant rn)Sets the preferred subtitle language.
ScoreOnCompletionBooleantrue, falseAutomatically prompts the user to rate the anime upon completion.
SkipOpBooleantrue, falseAutomatically skips the opening of episodes when supported.
SkipEdBooleantrue, falseAutomatically skips the ending of episodes when supported.
SkipRecapBooleantrue, falseSkips recap sections in episodes when supported.
ImagePreviewBooleantrue, falseEnables or disables image previews during anime selection (only for rofi).
PlayerStringany mpv-compatible binary (e.g. mpv, iina)Player binary used for playback. If not found, Curd falls back to mpv.
SaveMpvSpeedBooleantrue, falseRetains the playback speed set in MPV for next episode.
SkipFillerBooleantrue, falseSkips filler episodes when supported.
MenuOrderStringComma-separated listControls which menu items appear and their order. Available options: CURRENT, ALL, UNTRACKED, UPDATE, CONTINUE_LAST, PLANNING, COMPLETED, PAUSED, DROPPED, REWATCHING, TRACKER, PROVIDER. Only listed items will be shown. Default: CURRENT,ALL,UNTRACKED,UPDATE,CONTINUE_LAST,TRACKER,PROVIDER
ProviderList["allanime"], ["animepahe"], ["allanime","animepahe"], ["allanime","no-animepahe"]Sets the ordered content-provider fallback list. Curd tries providers from left to right for the requested stream. If AllAnime has no search results or the requested episode stream is unavailable and Animepahe is not configured, Curd asks before enabling Animepahe and warns that DDoS-Guard verification may require a ~500 MB chromium download. Declining stores no-animepahe so Curd does not ask again. Legacy single values like allanime are migrated to list form. Default: ["allanime"]
TrackingLocalBooleantrueLegacy compatibility flag. Local playback history is always enabled.
TrackingRemoteEnumnone, anilist, myanimelist, anilist+myanimelistSelects which remote tracker curd syncs with.
TrackingConfiguredBooleantrue, falseInternal flag used to remember that the startup tracking prompt has already been completed.
MyAnimeListClientIDStringMAL OAuth client IDClient ID used for MyAnimeList browser login.
MyAnimeListClientSecretStringMAL OAuth client secretOptional secret used for MyAnimeList browser login and token refresh.
MyAnimeListImportedBooleantrue, falseTracks whether the one-time AniList-to-MyAnimeList import prompt has already been handled.

Todo (fix)

  • Use Powershell for windows token input instead of notepad or cmd
  • Add a better way to do commands in windows (Convinience for users)

Dependencies

  • mpv - Video player (required fallback)
  • iina - Optional mpv-based player on macOS
  • rofi - Selection menu
  • ueberzug - Display images in rofi
  • chromium - Required for Animepahe (auto-downloaded by default, but Termux users must install manually via pkg install chromium)

API Used

Credits

  • ani-cli - Code for fetching anime url
  • jerry - For the inspiration