zantetsu
Ultra-fast anime metadata extraction and canonical title matching for Rust.
What it does
zantetsu parses anime release filenames into structured metadata and
optionally resolves the parsed title to a canonical entry with cross-referenced
Kitsu / AniList / MAL identifiers.
[SubsPlease] Frieren - Beyond Journey's End - 01 (1080p) [A1B2C3D4].mkv
│ │ │ │
group title episode resolution
No machine learning. No network calls required for parsing. No runtime downloads. Entirely self-contained.
Install
[]
= "0.2"
Requires Rust 1.85+.
Quick start
Parse a filename
use ;
let engine = new?;
let result = engine.parse?;
assert_eq!;
assert_eq!;
assert_eq!;
println!; // Some(P1080)
# Ok::
Match to a canonical title (local Kitsu dump)
use ;
let matcher = new?;
if let Some = matcher.match_title?
# Ok::
Match to a canonical title (remote GraphQL)
use ;
let matcher = new?;
if let Some = matcher.match_title?
# Ok::
Parsed fields
| Field | Type | Example |
|---|---|---|
title |
Option<String> |
"Cowboy Bebop" |
group |
Option<String> |
"SubsPlease" |
episode |
Option<EpisodeSpec> |
Single(1), Range(1,3), Special(0.5) |
resolution |
Option<Resolution> |
P1080, P720, P2160 |
video_codec |
Option<VideoCodec> |
H265, H264, AV1 |
audio_codec |
Option<AudioCodec> |
AAC, FLAC, AC3 |
source |
Option<MediaSource> |
BluRay, WebDL, HDTV |
confidence |
f32 |
0.92 |
Quality scoring
Score a parse result against a configurable quality profile:
use ;
let engine = new?;
let result = engine.parse?;
let profile = default;
let scores = engine.score;
println!;
println!;
# Ok::
Crate family
zantetsu is a façade over two focused sub-crates. Depend on the façade for
most use cases; depend on the sub-crates directly if you need finer control.
| Crate | Purpose |
|---|---|
zantetsu |
This crate — unified public API |
zantetsu-core |
Heuristic filename parser, quality scoring, types |
zantetsu-vecdb |
Canonical title matching, TitleMatcher |
Error handling
All fallible functions return Result<T, ZantetsuError>. Errors implement
std::error::Error via thiserror.
use ;
let engine = new?;
match engine.parse
# Ok::
License
MIT