Skip to content

Repository files navigation

Curd

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:

curd-go-demo.mp4

Rofi with Image preview

curd-go-rofi-demo.mp4

Features

  • Multiple Content Providers (Senshi, AniNeko, 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-
-softsubPrefer soft subtitles when available (AniNeko)-
-hardsubPrefer hard subtitles when available (AniNeko)-
-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
MpvPlaybackStartTimeoutInteger1 to 600 (seconds)How long to wait for MPV playback to start before trying another provider. Default: 20
AddMissingOptionsBooleantrue, falseWhen true, on a version upgrade only options registered as new for that release are appended to curd.conf (not every historical default). Set false to opt out. Defaults still apply in memory always.
VimKeysBooleantrue, falseWhen true, selection menus use vim motions: j/k/h/l (and arrows) to move, / or ? to search. Default: false (type-to-filter immediately). Add VimKeys=true to ~/.config/curd/curd.conf to enable.
CheckUpdatesBooleantrue, falseWhen true (default), checks GitHub for a newer release while idle (does not delay startup). If an update is found, the next launch shows notes and options: update now / skip / remind later / turn off.
MpvEpisodePlaylistBooleantrue, falseWhen true (default), after playback is stable curd fills the MPV playlist with episodes (and dub/sub when available) so you can pick from MPV's playlist UI. Access: MPV → right-click the prev/next OSC button (or Ctrl+P). Selecting a row loads that stream and keeps tracking in sync.
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.
SubStyleEnumask, soft, hardFor AniNeko sub streams: ask prompts once when both soft-sub and hard-sub servers exist, then saves your choice here; soft uses external .vtt subtitles via mpv; hard uses burned-in subs. Default: ask
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, REMAP_PROVIDER, CONTINUE_LAST, PLANNING, COMPLETED, PAUSED, DROPPED, REWATCHING, TRACKER, PROVIDER. Only listed items will be shown. Default: CURRENT,ALL,UNTRACKED,UPDATE,REMAP_PROVIDER,CONTINUE_LAST,TRACKER,PROVIDER
ProviderListstacked, ["anipub"], ["anineko"], ["allanime"], ["animepahe"]Sets the content-provider fallback list. stacked (default) uses the preferred order: senshi → anipub → anineko → allanime → animepahe. A single-provider list uses only that site. AllAnime and Animepahe are disabled by default unless included in Provider. Default: stacked
ManualProviderSearchBooleantrue, falseSkip automatic provider matching and always show provider search results for manual selection. Displays a hint with the tracker title, format (TV/Movie/etc.), episode count, and sub/dub mode. Default: false
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

About

Watch anime in cli with Anilist, MAL Integration and Discord RPC

Topics

Resources

Stars

313 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages