From d373c5e04bac0a1f89d1b179dd3796f7ddca5a7a Mon Sep 17 00:00:00 2001 From: Umair Farrukh <140781176+scarletdragon9632@users.noreply.github.com> Date: Wed, 25 Mar 2026 14:14:09 +0500 Subject: [PATCH 1/4] add English title option --- ani-cli | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/ani-cli b/ani-cli index 677b59daa..4bfeabc8d 100755 --- a/ani-cli +++ b/ani-cli @@ -1,6 +1,6 @@ #!/bin/sh -version_number="4.10.6" +version_number="4.10.7" # UI @@ -72,6 +72,8 @@ help_info() { Specify the number of episodes to watch --dub Play dubbed version + --en + Show english anime titile if available --rofi Use rofi instead of fzf for the interactive menu --dmenu @@ -233,13 +235,36 @@ get_episode_url() { fi } -# search the query and give results + search_anime() { - #shellcheck disable=SC2016 + if [ "$english_title" = false ]; then + #shellcheck disable=SC2016 search_gql='query( $search: SearchInput $limit: Int $page: Int $translationType: VaildTranslationTypeEnumType $countryOrigin: VaildCountryOriginEnumType ) { shows( search: $search limit: $limit page: $page translationType: $translationType countryOrigin: $countryOrigin ) { edges { _id name availableEpisodes __typename } }}' curl -e "$allanime_refr" -s -G "${allanime_api}/api" --data-urlencode "variables={\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}" --data-urlencode "query=$search_gql" -A "$agent" | sed 's|Show|\ | g' | sed -nE "s|.*_id\":\"([^\"]*)\",\"name\":\"(.+)\",.*${mode}\":([1-9][^,]*).*|\1 \2 (\3 episodes)|p" | sed 's/\\"//g' + + else + curl -e "$allanime_refr" -s -X POST "${allanime_api}/api" -H "Content-Type: application/json" -d "{\"query\":\"query(\$search:SearchInput,\$limit:Int,\$page:Int,\$translationType:VaildTranslationTypeEnumType,\$countryOrigin:VaildCountryOriginEnumType){shows(search:\$search,limit:\$limit,page:\$page,translationType:\$translationType,countryOrigin:\$countryOrigin){edges{_id name englishName availableEpisodes}}}\",\"variables\":{\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}}" -A "$agent" | sed 's/\\u002F/\//g;s/\\"//g' | grep -oE '"_id":"[^"]*","name":"[^"]*","englishName":(null|"[^"]*"),"availableEpisodes":{[^}]*}' | while IFS= read -r e; do + id=${e#*_id\":\"} + id=${id%%\"*} + name=${e#*\"name\":\"} + name=${name%%\"*} + + # Check for englishName:null using case statement (POSIX compliant) + case "$e" in + *'"englishName":null'*) en="" ;; + *) en=${e#*\"englishName\":\"}; en=${en%%\"*} ;; + esac + + eps=${e#*\"$mode\":} + eps=${eps%%,*} + eps=${eps%\}*} + + title=${en:-$name} + echo "$id $title (${eps:-0} episodes)" + done +fi } time_until_next_ep() { @@ -391,6 +416,7 @@ mode="${ANI_CLI_MODE:-sub}" download_dir="${ANI_CLI_DOWNLOAD_DIR:-.}" log_episode="${ANI_CLI_LOG:-1}" quality="${ANI_CLI_QUALITY:-best}" +english_title=false case "$(uname -a | cut -d " " -f 1,3-)" in *Darwin*) player_function="${ANI_CLI_PLAYER:-$(where_iina)}" ;; # mac OS *ndroid*) player_function="${ANI_CLI_PLAYER:-android_mpv}" ;; # Android OS (termux) @@ -469,6 +495,7 @@ while [ $# -gt 0 ]; do shift ;; --dub) mode="dub" ;; + --en) english_title=true ;; --no-detach) no_detach=1 ;; --exit-after-play) exit_after_play=1 && no_detach=1 ;; --rofi) use_external_menu=1 ;; From b8adac45a88e3e9edcd1fbbd0fa97d992c75c767 Mon Sep 17 00:00:00 2001 From: Umair Farrukh <140781176+scarletdragon9632@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:33:39 +0500 Subject: [PATCH 2/4] English title option --- ani-cli | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/ani-cli b/ani-cli index 4bfeabc8d..ad58f6204 100755 --- a/ani-cli +++ b/ani-cli @@ -72,8 +72,6 @@ help_info() { Specify the number of episodes to watch --dub Play dubbed version - --en - Show english anime titile if available --rofi Use rofi instead of fzf for the interactive menu --dmenu @@ -235,36 +233,38 @@ get_episode_url() { fi } - search_anime() { if [ "$english_title" = false ]; then #shellcheck disable=SC2016 - search_gql='query( $search: SearchInput $limit: Int $page: Int $translationType: VaildTranslationTypeEnumType $countryOrigin: VaildCountryOriginEnumType ) { shows( search: $search limit: $limit page: $page translationType: $translationType countryOrigin: $countryOrigin ) { edges { _id name availableEpisodes __typename } }}' + search_gql='query( $search: SearchInput $limit: Int $page: Int $translationType: VaildTranslationTypeEnumType $countryOrigin: VaildCountryOriginEnumType ) { shows( search: $search limit: $limit page: $page translationType: $translationType countryOrigin: $countryOrigin ) { edges { _id name availableEpisodes __typename } }}' - curl -e "$allanime_refr" -s -G "${allanime_api}/api" --data-urlencode "variables={\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}" --data-urlencode "query=$search_gql" -A "$agent" | sed 's|Show|\ + curl -e "$allanime_refr" -s -G "${allanime_api}/api" --data-urlencode "variables={\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}" --data-urlencode "query=$search_gql" -A "$agent" | sed 's|Show|\ | g' | sed -nE "s|.*_id\":\"([^\"]*)\",\"name\":\"(.+)\",.*${mode}\":([1-9][^,]*).*|\1 \2 (\3 episodes)|p" | sed 's/\\"//g' else - curl -e "$allanime_refr" -s -X POST "${allanime_api}/api" -H "Content-Type: application/json" -d "{\"query\":\"query(\$search:SearchInput,\$limit:Int,\$page:Int,\$translationType:VaildTranslationTypeEnumType,\$countryOrigin:VaildCountryOriginEnumType){shows(search:\$search,limit:\$limit,page:\$page,translationType:\$translationType,countryOrigin:\$countryOrigin){edges{_id name englishName availableEpisodes}}}\",\"variables\":{\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}}" -A "$agent" | sed 's/\\u002F/\//g;s/\\"//g' | grep -oE '"_id":"[^"]*","name":"[^"]*","englishName":(null|"[^"]*"),"availableEpisodes":{[^}]*}' | while IFS= read -r e; do - id=${e#*_id\":\"} - id=${id%%\"*} - name=${e#*\"name\":\"} - name=${name%%\"*} - - # Check for englishName:null using case statement (POSIX compliant) - case "$e" in - *'"englishName":null'*) en="" ;; - *) en=${e#*\"englishName\":\"}; en=${en%%\"*} ;; - esac - - eps=${e#*\"$mode\":} - eps=${eps%%,*} - eps=${eps%\}*} - - title=${en:-$name} - echo "$id $title (${eps:-0} episodes)" - done -fi + curl -e "$allanime_refr" -s -X POST "${allanime_api}/api" -H "Content-Type: application/json" -d "{\"query\":\"query(\$search:SearchInput,\$limit:Int,\$page:Int,\$translationType:VaildTranslationTypeEnumType,\$countryOrigin:VaildCountryOriginEnumType){shows(search:\$search,limit:\$limit,page:\$page,translationType:\$translationType,countryOrigin:\$countryOrigin){edges{_id name englishName availableEpisodes}}}\",\"variables\":{\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}}" -A "$agent" | sed 's/\\u002F/\//g;s/\\"//g' | grep -oE '"_id":"[^"]*","name":"[^"]*","englishName":(null|"[^"]*"),"availableEpisodes":{[^}]*}' | while IFS= read -r e; do + id=${e#*_id\":\"} + id=${id%%\"*} + name=${e#*\"name\":\"} + name=${name%%\"*} + + # Check for englishName:null using case statement (POSIX compliant) + case "$e" in + *'"englishName":null'*) en="" ;; + *) + en=${e#*\"englishName\":\"} + en=${en%%\"*} + ;; + esac + + eps=${e#*\"$mode\":} + eps=${eps%%,*} + eps=${eps%\}*} + + title=${en:-$name} + echo "$id $title (${eps:-0} episodes)" + done + fi } time_until_next_ep() { From 6eee303c07d88ae61344d7ed2955d397ce60c4fe Mon Sep 17 00:00:00 2001 From: Umair Farrukh <140781176+scarletdragon9632@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:47:37 +0500 Subject: [PATCH 3/4] Add option to display English title --- ani-cli | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ani-cli b/ani-cli index ad58f6204..65da5ea69 100755 --- a/ani-cli +++ b/ani-cli @@ -72,6 +72,8 @@ help_info() { Specify the number of episodes to watch --dub Play dubbed version + --en + Display English title if available --rofi Use rofi instead of fzf for the interactive menu --dmenu From f026d5d343e7b3e9e0be4eb6b3ee136c04102653 Mon Sep 17 00:00:00 2001 From: Umair Farrukh <140781176+scarletdragon9632@users.noreply.github.com> Date: Mon, 6 Apr 2026 00:18:11 +0500 Subject: [PATCH 4/4] API fix --- ani-cli | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ani-cli b/ani-cli index 65da5ea69..5c0f8ff71 100755 --- a/ani-cli +++ b/ani-cli @@ -1,6 +1,6 @@ #!/bin/sh -version_number="4.10.7" +version_number="4.11.0" # UI @@ -216,7 +216,7 @@ get_episode_url() { #shellcheck disable=SC2016 episode_embed_gql='query ($showId: String!, $translationType: VaildTranslationTypeEnumType!, $episodeString: String!) { episode( showId: $showId translationType: $translationType episodeString: $episodeString ) { episodeString sourceUrls }}' - resp=$(curl -e "$allanime_refr" -s -G "${allanime_api}/api" --data-urlencode "variables={\"showId\":\"$id\",\"translationType\":\"$mode\",\"episodeString\":\"$ep_no\"}" --data-urlencode "query=$episode_embed_gql" -A "$agent" | tr '{}' '\n' | sed 's|\\u002F|\/|g;s|\\||g' | sed -nE 's|.*sourceUrl":"--([^"]*)".*sourceName":"([^"]*)".*|\2 :\1|p') + resp=$(curl -e "$allanime_refr" -s -H "Content-Type: application/json" -X POST "${allanime_api}/api" --data "{\"variables\":{\"showId\":\"$id\",\"translationType\":\"$mode\",\"episodeString\":\"$ep_no\"},\"query\":\"$episode_embed_gql\"}" -A "$agent" | tr '{}' '\n' | sed 's|\\u002F|\/|g;s|\\||g' | sed -nE 's|.*sourceUrl":"--([^"]*)".*sourceName":"([^"]*)".*|\2 :\1|p') # generate links into sequential files cache_dir="$(mktemp -d)" providers="1 2 3 4" @@ -238,11 +238,10 @@ get_episode_url() { search_anime() { if [ "$english_title" = false ]; then #shellcheck disable=SC2016 - search_gql='query( $search: SearchInput $limit: Int $page: Int $translationType: VaildTranslationTypeEnumType $countryOrigin: VaildCountryOriginEnumType ) { shows( search: $search limit: $limit page: $page translationType: $translationType countryOrigin: $countryOrigin ) { edges { _id name availableEpisodes __typename } }}' + search_gql='query( $search: SearchInput $limit: Int $page: Int $translationType: VaildTranslationTypeEnumType $countryOrigin: VaildCountryOriginEnumType ) { shows( search: $search limit: $limit page: $page translationType: $translationType countryOrigin: $countryOrigin ) { edges { _id name availableEpisodes __typename } }}' - curl -e "$allanime_refr" -s -G "${allanime_api}/api" --data-urlencode "variables={\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}" --data-urlencode "query=$search_gql" -A "$agent" | sed 's|Show|\ + curl -e "$allanime_refr" -s -H "Content-Type: application/json" -X POST "${allanime_api}/api" --data "{\"variables\":{\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"},\"query\":\"$search_gql\"}" -A "$agent" | sed 's|Show|\ | g' | sed -nE "s|.*_id\":\"([^\"]*)\",\"name\":\"(.+)\",.*${mode}\":([1-9][^,]*).*|\1 \2 (\3 episodes)|p" | sed 's/\\"//g' - else curl -e "$allanime_refr" -s -X POST "${allanime_api}/api" -H "Content-Type: application/json" -d "{\"query\":\"query(\$search:SearchInput,\$limit:Int,\$page:Int,\$translationType:VaildTranslationTypeEnumType,\$countryOrigin:VaildCountryOriginEnumType){shows(search:\$search,limit:\$limit,page:\$page,translationType:\$translationType,countryOrigin:\$countryOrigin){edges{_id name englishName availableEpisodes}}}\",\"variables\":{\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}}" -A "$agent" | sed 's/\\u002F/\//g;s/\\"//g' | grep -oE '"_id":"[^"]*","name":"[^"]*","englishName":(null|"[^"]*"),"availableEpisodes":{[^}]*}' | while IFS= read -r e; do id=${e#*_id\":\"} @@ -288,7 +287,7 @@ episodes_list() { #shellcheck disable=SC2016 episodes_list_gql='query ($showId: String!) { show( _id: $showId ) { _id availableEpisodesDetail }}' - curl -e "$allanime_refr" -s -G "${allanime_api}/api" --data-urlencode "variables={\"showId\":\"$*\"}" --data-urlencode "query=$episodes_list_gql" -A "$agent" | sed -nE "s|.*$mode\":\[([0-9.\",]*)\].*|\1|p" | sed 's|,|\ + curl -e "$allanime_refr" -s -H "Content-Type: application/json" -X POST "${allanime_api}/api" --data "{\"variables\":{\"showId\":\"$*\"},\"query\":\"$episodes_list_gql\"}" -A "$agent" | sed -nE "s|.*$mode\":\[([0-9.\",]*)\].*|\1|p" | sed 's|,|\ |g; s|"||g' | sort -n -k 1 }