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.
[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 |
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
Use --help
to see available options.
anitomy --format=json --pretty "[Ouroboros] Fullmetal Alchemist Brotherhood - 01"
{
"episode": "01",
"release_group": "Ouroboros",
"title": "Fullmetal Alchemist Brotherhood"
}
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.
include
directory and used with #include <anitomy.hpp>
.anitomy::detail
namespace.std::string
. You no longer need to convert from/to std::wstring
.anitomy::Anitomy
class. You can use the free anitomy::parse
function instead.allowed_delimiters
and ignored_strings
options.anitomy::Elements
class. Parser now returns std::vector<Element>
instead.ElementCategory
enum is replaced with ElementKind
enum class.Anitomy is licensed under Mozilla Public License 2.0.