Skip to content

erengy/anitomy

Repository files navigation

Anitomy

Anitomy is a C++ library and a command-line tool for parsing anime video filenames.

Important

The library is currently being rewritten in the develop branch. The documentation below may be out of date.

Example

[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1080p_H.264_FLAC][BAD7A16A].mkv
Element Value
Release group TaigaSubs
Title Toradora!
Year 2008
Episode 01
Release version 2
Episode title Tiger and Dragon
Video resolution 1080p
Video term H.264
Audio term FLAC
File checksum BAD7A16A
File extension mkv

Usage

Library

Requires a compiler that supports C++23. Currently only tested with the latest version of MSVC.

#include <print>
#include <anitomy.hpp>

int main() {
  auto elements = anitomy::parse("[Ouroboros] Fullmetal Alchemist Brotherhood - 01");

  for (auto [kind, value, _] : elements) {
    std::println("{:<16}{}", kind, value);
  }

  return 0;
}
release_group   Ouroboros
title           Fullmetal Alchemist Brotherhood
episode         01

CLI

Use --help to see available options.

anitomy --format=json --pretty "[Ouroboros] Fullmetal Alchemist Brotherhood - 01"
{
  "episode": "01",
  "release_group": "Ouroboros",
  "title": "Fullmetal Alchemist Brotherhood"
}

FAQ

How does it work?

Anitomy makes some educated guesses on how filenames are formed. In more technical terms, the input is split into a sequence of tokens, and the tokens are inspected for various keywords and patterns to extract the elements.

What should I do if a filename is not being parsed correctly?

Please report the issue, though it may not be possible to resolve a terribly ambiguous naming scheme.

Can I use it for other media such as movies or TV series?

It should work to some extent, but the library is mostly optimized for anime.

Can I use it on Unicode filenames?

Yes, just make sure your input is UTF-8 encoded and preferably in composed form.

Can I use it in another programming language?

See other repositories for related projects.

Migration

v2.0 (WIP)

  • Building the library now requires a compiler with C++23 support.
  • The library is now located inside the include directory and used with #include <anitomy.hpp>.
  • Library internals (anything not mentioned below) are moved to anitomy::detail namespace.
  • The library now uses UTF-8 encoded std::string. You no longer need to convert from/to std::wstring.
  • Removed anitomy::Anitomy class. You can use the free anitomy::parse function instead.
  • Removed allowed_delimiters and ignored_strings options.
  • Removed anitomy::Elements class. Parser now returns std::vector<Element> instead.
  • ElementCategory enum is replaced with ElementKind enum class.
  • Parsed elements are now ordered according to their position in the input.

License

Anitomy is licensed under Mozilla Public License 2.0.