Skip to main content

aninidhi

Track which anime have official Hindi dubs — across Crunchyroll, Netflix, Muse India, and Anime Times (Prime Video) — as a Python library and a CLI.

What's new in v0.2

  • 488 real anime/season records, compiled from each platform's own release history as of September 2026 — not a placeholder sample anymore.
  • Multi-platform dubs: the same anime is often dubbed independently by more than one platform at different times (e.g. Crunchyroll in 2023, then Muse India in 2026). Every anime now carries a hindi_dubs list instead of a single platform/date pair. 37 titles in this dataset are already dubbed on 2+ platforms — run aninidhi multi to see them.
  • Schema room for richer metadata: anilist_id, anilist_url, imdb_id, imdb_url, imdb_rating, studio, synopsis, original_title. These ship as null in the bulk-imported data (see "Enriching metadata" below) — filling them in per-title wasn't feasible as part of a bulk import, so two scripts are included to do it.
  • New functions: get_dub_info(), multi_platform_dubs(), platform_stats().
  • New CLI commands: info, multi, stats.

⚠️ Breaking change from v0.0.1: the old platform and hindi_dub_release_date fields are gone, replaced by hindi_dubs: [...]. If you wrote code against v0.0.1's schema, see "Migrating from v0.0.1" below.

Install

pip install aninidhi

Use it as a library

import aninidhi

aninidhi.get_latest(limit=5)              # most recent dub activity, any platform
aninidhi.search("naruto")                 # title search
aninidhi.get_by_platform("crunchyroll")   # anime with a Crunchyroll Hindi dub
aninidhi.get_dub_info("Dan Da Dan")       # full per-platform breakdown for one title
aninidhi.multi_platform_dubs()            # anime dubbed on 2+ platforms
aninidhi.platform_stats()                 # {"Crunchyroll": 298, "Anime Times (Prime Video)": 85, ...}
aninidhi.list_all()                       # everything

Every function returns a list of dicts shaped like this:

{
  "id": 83,
  "title": "Dan Da Dan",
  "original_title": null,
  "genres": [],
  "season": null,
  "season_year": null,
  "episodes": null,
  "studio": null,
  "synopsis": null,
  "poster_url": null,
  "mal_id": null,
  "mal_url": null,
  "anilist_id": null,
  "anilist_url": null,
  "imdb_id": null,
  "imdb_url": null,
  "imdb_rating": null,
  "hindi_available": true,
  "hindi_dubs": [
    { "platform": "Anime Times (Prime Video)", "release_date": "2024-10-17", "status": "Finished", "media_type": "series" },
    { "platform": "Crunchyroll", "release_date": "2024-10-25", "status": "Finished", "media_type": "series" },
    { "platform": "Muse India", "release_date": "2024-11-16", "status": "Finished", "media_type": "series" }
  ],
  "notes": null
}

Use it from the command line

aninidhi latest -n 5
aninidhi search "spy x family"
aninidhi info "Dan Da Dan"          # per-platform breakdown for one title
aninidhi platform crunchyroll
aninidhi multi                      # anime dubbed on 2+ platforms
aninidhi stats                      # dub count per platform
aninidhi all --json
aninidhi refresh --url https://raw.githubusercontent.com/you/aninidhi-data/main/anime.json

Data provenance

The bundled dataset (src/aninidhi/data/anime.json) was compiled by cross-referencing each platform's own release calendar (e.g. Crunchyroll's Simulcast Calendar). Snapshot date: September 2026. It will go stale — new dubs release every week — so treat it as a strong starting point, not a live feed:

  • Run aninidhi refresh against a URL you control (see "Staying fresh") to serve updates without republishing the package.
  • Consider building the automated polling pipeline described in the original project recap (YouTube/RSS/Reddit polling → review queue → publish) to keep it current long-term.
  • Sony YAY! and JioHotstar are known to carry Hindi-dubbed anime too but aren't in this snapshot yet — their catalogs are more TV-schedule-based and harder to date precisely from public sources. Good candidates for the next data pass.

Enriching metadata (AniList + IMDb)

The bulk import only had reliable platform/date data, so genres, synopsis, studio, episodes, and the AniList/IMDb ID+URL fields ship as null. Two scripts fill them in, one anime at a time, using each title as a search query:

# AniList - free, no API key needed
python scripts/enrich_anilist.py --limit 5   # try a handful first
python scripts/enrich_anilist.py             # then the rest

# IMDb ratings, via the OMDb API (get a free key: https://www.omdbapi.com/apikey.aspx)
export OMDB_API_KEY=your_key_here
python scripts/enrich_imdb.py --limit 5
python scripts/enrich_imdb.py

Neither script has been run against the live APIs — this environment has no internet access, so they're written to AniList's and OMDb's documented interfaces but untested end-to-end. Spot-check a few results before running either over the full 488 records, and expect some no-matches on titles with unusual formatting (cour/part splits especially) since the search is a plain title lookup, not a MAL/AniList ID match.

Staying fresh

aninidhi never requires a server. Point it at any publicly readable JSON file (a GitHub raw URL is the easiest option, and pairs well with a daily GitHub Action that regenerates anime.json) and it does the rest:

export ANINIDHI_SOURCE_URL="https://raw.githubusercontent.com/AniNidhi/aninidhi-data/main/anime.json"
  • If a source URL is set and the local cache (~/.cache/aninidhi/anime.json) is more than a day old, the next call refreshes it automatically.
  • If refreshing fails (offline, source down), it silently falls back to whatever's cached, then to the bundled snapshot. A query never raises just because the network is unavailable.
  • Force an immediate refresh any time with aninidhi.refresh(force=True) or aninidhi refresh on the CLI.

Migrating from v0.0.1

# v0.0.1
anime["platform"]
anime["hindi_dub_release_date"]

# v0.2
[d["platform"] for d in anime["hindi_dubs"]]
[d["release_date"] for d in anime["hindi_dubs"]]

# convenience: most recent dub date across all platforms
max(d["release_date"] for d in anime["hindi_dubs"])

get_by_platform() and get_latest() keep the same names and signatures but now search/sort across the whole hindi_dubs list under the hood, so most calling code only needs the field-access changes above.

Development

git clone https://github.com/AniNidhi/aninidhi.git
cd aninidhi
pip install -e .
python -m unittest discover -s tests

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aninidhi-0.2.0.tar.gz (27.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aninidhi-0.2.0-py3-none-any.whl (22.7 kB view details)

Uploaded Python 3

File details

Details for the file aninidhi-0.2.0.tar.gz.

File metadata

  • Download URL: aninidhi-0.2.0.tar.gz
  • Upload date:
  • Size: 27.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for aninidhi-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c1264f75384a93f7625951889480f8721b37186d4c3f7c8326e2e41ad99de808
MD5 1226bfa9c0a140569bcbd8b1a4fb4d81
BLAKE2b-256 f5f1f35475d7244053c9ae6e236531928ca25ffbbb087def29246ea0c1b39646

See more details on using hashes here.

File details

Details for the file aninidhi-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: aninidhi-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.6

File hashes

Hashes for aninidhi-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9f5f1ded1f4a3e7a84c586c03967c0bd886898d98e991ec0eb7fec2dd83848c0
MD5 1a1f0cfa5ac4bbc45b11f2b56d91768f
BLAKE2b-256 117c40298b6ede21b97ec6f7288ff00c8c4f2061f098c6c2feb78595fc217c8f

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.1

2 files

This release

0.2.0 This release

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page