Skip to main content

anitomy-ng

CI crates.io docs.rs PyPI npm NuGet License: MPL 2.0

A pure-Rust port of erengy/anitomy, an anime video filename parser, with Python, JavaScript, and .NET bindings. The core library is pure safe Rust — no unsafe, no C dependencies.

[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv

parses into release group, title, year, episode, resolution, video/audio codec, release version, and file checksum — see the examples below.

Status: conformance-tested against upstream's own bundled test data (the current C++ rewrite on the develop branch and the original, long-frozen master implementation), plus the anitopy Python port's fixtures. On each suite it scores at least as high as that suite's reference parser, run as a compiled/installed binary rather than judged from its source.

Install

Rust:

cargo add anitomy-ng

Python (wheels built via maturin):

pip install anitomy-ng

JavaScript / TypeScript (WebAssembly, works in Node and bundlers):

npm install anitomy-ng

Command line: prebuilt binaries for Linux, macOS, and Windows are attached to each GitHub release. Download one directly, or install with either:

cargo binstall anitomy-ng               # prebuilt binary, no toolchain needed
cargo install anitomy-ng --features cli # builds from source

.NET (prebuilt native binaries ship in the package, no Rust toolchain needed):

dotnet add package AnitomyNg

Usage

Rust:

let elements = anitomy_ng::parse(
    "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv",
    anitomy_ng::Options::default(),
);
for element in &elements {
    println!("{:?}: {}", element.kind, element.value);
}

Python:

import anitomy_ng

for element in anitomy_ng.parse(
    "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv"
):
    print(element.kind, element.value)

JavaScript / TypeScript:

import { parse } from "anitomy-ng";

for (const element of parse(
  "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv",
)) {
  console.log(element.kind, element.value);
}

C# / .NET:

using AnitomyNg;

foreach (var element in Anitomy.Parse(
    "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv"))
{
    Console.WriteLine($"{element.Kind}: {element.Value}");
}

They all return an ordered list of elements (position in the filename, kind, and value); ElementKind/kind covers title, episode, season, release group, video/audio terms, resolution, checksum, and so on — see anitomy/src/element.rs for the full set.

Parsing a path

parse treats its input as one flat string, matching upstream — given a path, separators and duplicated folder text end up in the title. parse_path strips a real directory prefix first, and recovers a title that lives only in the parent folder. Both / and \ are recognized on every platform, including UNC and drive-letter roots.

An input with no directory prefix is exactly parse, and a separator inside a title (Fate/stay night) is left alone.

// parse      -> title "My Show/My Show"
// parse_path -> title "My Show"
let elements = anitomy_ng::parse_path(
    "My Show/My Show - 01.mkv",
    anitomy_ng::Options::default(),
);
elements = anitomy_ng.parse_path("My Show/My Show - 01.mkv")
import { parse_path } from "anitomy-ng";
const elements = parse_path("My Show/My Show - 01.mkv");
var elements = Anitomy.ParsePath("My Show/My Show - 01.mkv");

On the command line, --path (-p) does the same:

anitomy --path 'My Show/My Show - 01.mkv'

For a set of related files, prefer parse_together below — it does everything parse_path does, plus uses what varies across the set.

Parsing a set together

parse_together parses a set of related filenames at once, returning one element list per input (result i is for input i). Using the whole set as shared context resolves things a single filename can't — most importantly, a directory batch range like (01-12) no longer masks the real per-file episode, and a series title that lives only in a parent folder is recovered. Unrelated or single-item lists are a safe no-op (each is just its ordinary parse). Full and relative paths work on every platform (/ and \, including UNC/drive-letter).

Parsing each of these on its own would read 01 and 12 from the folder's (01-12) range and miss the actual episode; together, they come back as 05 and 06:

Rust:

let results = anitomy_ng::parse_together(
    &[
        "Frieren (01-12) [Batch]/Frieren - 05 [1080p].mkv",
        "Frieren (01-12) [Batch]/Frieren - 06 [1080p].mkv",
    ],
    anitomy_ng::Options::default(),
);
// results[0] -> episode "05", results[1] -> episode "06"

Python:

results = anitomy_ng.parse_together([
    "Frieren (01-12) [Batch]/Frieren - 05 [1080p].mkv",
    "Frieren (01-12) [Batch]/Frieren - 06 [1080p].mkv",
])
# results[0] -> episode "05", results[1] -> episode "06"

JavaScript / TypeScript:

import { parse_together } from "anitomy-ng";

const results = parse_together([
  "Frieren (01-12) [Batch]/Frieren - 05 [1080p].mkv",
  "Frieren (01-12) [Batch]/Frieren - 06 [1080p].mkv",
]);
// results[0] -> episode "05", results[1] -> episode "06"

C# / .NET:

var results = Anitomy.ParseTogether(new[]
{
    "Frieren (01-12) [Batch]/Frieren - 05 [1080p].mkv",
    "Frieren (01-12) [Batch]/Frieren - 06 [1080p].mkv",
});
// results[0] -> episode "05", results[1] -> episode "06"

Command line (anitomy) takes filenames as arguments or reads them from stdin (one per line), and prints an aligned table or, with --json, an array of { filename, elements }:

anitomy '[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv'
ls *.mkv | anitomy --json

Pass --no-title, --no-episode, etc. to disable individual categories; see anitomy --help.

Layout

anitomy/       core Rust crate (published as `anitomy-ng`) — no unsafe, no non-dev dependencies
anitomy-py/    Python bindings (pyo3 + maturin, published as `anitomy-ng`), typed:
               ElementKind is a real enum.Enum, Element a real dataclass
anitomy-js/    JavaScript/TypeScript bindings (wasm-bindgen, published to npm as `anitomy-ng`)
anitomy-c/     C ABI (cdylib/staticlib) over the core — the only crate with `unsafe`;
               the foundation for non-Rust bindings
bindings/csharp/  .NET bindings (P/Invoke over anitomy-c, published to NuGet as `AnitomyNg`)
third_party/   vendored upstream test fixtures, not compiled — see third_party/README.md
scripts/       fixture-generation tooling

Development

cargo test -p anitomy-ng --test conformance     # Rust conformance suite
cd anitomy-py && uv run --extra test pytest tests/ -q   # Python conformance suite

License

Licensed under the Mozilla Public License 2.0 — see LICENSE.

This project builds on the following, all MPL-2.0, and is distributed under the same license accordingly:

  • erengy/anitomy (© Eren Okka) — the C++ implementation this project is a port of.
  • Rapptz/anitomy-rs (© Rapptz) — an independent Rust reimplementation; some logic and beyond-upstream keywords are adapted from it.
  • igorcmoura/anitopy (© Igor C. Moura) — its test data (table.py/failing_table.py) is used as a conformance fixture suite.

third_party/ vendors this upstream material under their own MPL-2.0 licenses — see third_party/README.md.

Release files for anitomy-ng 1.0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for anitomy-ng 1.0.10
File Size Uploaded
anitomy_ng-1.0.10.tar.gz 150.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for anitomy-ng 1.0.10
File
anitomy_ng-1.0.10-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
anitomy_ng-1.0.10-cp39-abi3-win32.whl CPython 3.9 abi3 Windows x86-32 Details
anitomy_ng-1.0.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
anitomy_ng-1.0.10-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
anitomy_ng-1.0.10-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.9 abi3 macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64 Details

Total release size: 3.4 MB

Release files / anitomy_ng-1.0.10.tar.gz

Download URL anitomy_ng-1.0.10.tar.gz
Size 150.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d80b1f0e6d7696018e82aa74de12e25fa9778ce573d455ca7ecb85fec5ea305e
BLAKE2b-256 checksum
How to use checksums
9a94df81ccae1bdf1c91ef1e5dabe1cc0c4838d43bc7730ce5fb7ba3c37bf517
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / anitomy_ng-1.0.10-cp39-abi3-win_amd64.whl

Download URL anitomy_ng-1.0.10-cp39-abi3-win_amd64.whl
Size 447.5 kB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
61211ec7cfd4318316498f95b8f2d1c9931159cef0ec28c37d0e2dcc4b6fa8cd
BLAKE2b-256 checksum
How to use checksums
a5c23c5742ce25f3ffa4d09427b74388926bd54d407c540495f7928902c327cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / anitomy_ng-1.0.10-cp39-abi3-win32.whl

Download URL anitomy_ng-1.0.10-cp39-abi3-win32.whl
Size 417.9 kB
Tags CPython 3.9 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
38bef43f1868063fbd4de4b295e3e6a22af2b76c776ec46b7fadd9adda14004b
BLAKE2b-256 checksum
How to use checksums
6f9f8cc7b61a594a2a797dd8fc038324c1a09433923d939812128302dd8a0bb6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / anitomy_ng-1.0.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL anitomy_ng-1.0.10-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 630.0 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
996963a60b73d31c89473c726f2aa7ade03e68dd28f68bed819fbe3802fc274e
BLAKE2b-256 checksum
How to use checksums
0b2f8ee93be46c40bf442c222a034a3550ac1af5dc661cf2768f98f031764019
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / anitomy_ng-1.0.10-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL anitomy_ng-1.0.10-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 621.7 kB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
c95a57f6a78c2b0374fd8cd4021ae30c99f2bdf16c214f2b6199e577e408eb11
BLAKE2b-256 checksum
How to use checksums
399aca467f6bd4e0d22f36355092479f1b56d75b28ca8cc4e0a4b5ee29daa2dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release files / anitomy_ng-1.0.10-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL anitomy_ng-1.0.10-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 1.1 MB
Tags CPython 3.9 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c65335328715f2d8053ea1cd1ffcc55bf48c28cf233e4b66c0061fe8e80f22f5
BLAKE2b-256 checksum
How to use checksums
df509c6e526c255f47753191c493bf3ce2a5acd80f23d0d8dbb01915f13a7336
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.10 This release

6 release files

1.0.9

6 release files

1.0.8

6 release files

1.0.7

6 release files

1.0.6

6 release files

1.0.5

6 release files

1.0.4

6 release files

1.0.3

6 release files

1.0.2

6 release files

1.0.1

6 release files

1.0.0

6 release 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