Skip to content

Latest commit

 

History

382 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

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

Header-only, has no dependencies other than the standard library. Requires a compiler that supports C++23 (currently only tested with MSVC). See the docs for details.

#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 or visit the docs for available options.

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

Linux Build

Linux builds are possible with GCC 16.1 or higher.

cmake --preset gcc-x64
cmake --build --preset gcc-x64-debug
ctest --preset test-gcc-x64-debug --output-on-failure

Clang 22 does not work with this codebase at the moment.

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?

Try the CLI, or 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.

About

Anime video filename parser

Topics

Resources

Stars

317 stars

Watchers

20 watching

Forks

Releases

Packages

Used by

Contributors

Languages