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.
[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 |
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
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 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-failureClang 22 does not work with this codebase at the moment.
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.
- Building the library now requires a compiler with C++23 support.
- The library is now located inside the
includedirectory and used with#include <anitomy.hpp>. - Library internals (anything not mentioned below) are moved to
anitomy::detailnamespace. - The library now uses UTF-8 encoded
std::string. You no longer need to convert from/tostd::wstring. - Removed
anitomy::Anitomyclass. You can use the freeanitomy::parsefunction instead. - Removed
allowed_delimitersandignored_stringsoptions. - Removed
anitomy::Elementsclass. Parser now returnsstd::vector<Element>instead. ElementCategoryenum is replaced withElementKindenum class.- Parsed elements are now ordered according to their position in the input.
Anitomy is licensed under Mozilla Public License 2.0.