Skip to content

Data format

Generated from schema/, the same JSON Schemas pnpm validate checks every file against. For how to use these fields, see Contributing mappings.

One canonical work (usually one cour, film or OVA): data/works/.yaml. When data/seeds/ has a work with the same id, this file overrides it key by key (see docs/SPEC.md, “Seeds and manual files”), and only the keys it sets are needed; otherwise type and episodes are required.

Field Type Required Description
id slug yes Stable slug, equal to the file name. Never changes once published.
type tv, movie, ova, ona, special
status finished, airing, upcoming Omitted means finished. Open-ended ranges require airing.
year integer at least 1900
episodes integer or null Regular episode count. null only while airing or upcoming. at least 1
specials integer Special (S) episode count. Omitted means unknown, which skips the specials bounds check. at least 0
titles object
ids WorkIds Provider IDs. In a file that overrides a seed, null removes the seed’s ID.
projections WorkProjections How season-based providers lay out this work’s episodes. In a file that overrides a seed, a block replaces the seed’s block for that provider, and null removes it.
aliases list of text
prequel slug id of the work this one directly follows.
notes string
sources sources

Provider IDs. In a file that overrides a seed, null removes the seed’s ID.

Field Type Required Description
anidb numericId or null
anilist numericId or null
mal numericId or null
kitsu numericId or null
tvdb_show numericId or null
tmdb_show numericId or null
tmdb_movie numericId or null
imdb string or null

How season-based providers lay out this work’s episodes. In a file that overrides a seed, a block replaces the seed’s block for that provider, and null removes it.

Field Type Required Description
tvdb_show projectionBlock or null
tmdb_show projectionBlock or null

Lowercase letters and digits, separated by single hyphens (for example sousou-no-frieren).

Type: string; pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$, at most 120 characters.

Type: string.

Type: integer; at least 1.

Type: list of string.

A single episode (12, “S3”) or a range (“1-12”, “S1-S2”, “892-” for open-ended). Prefix S = special, C = credit, T = trailer, P = parody; no prefix = regular.

Type: integer or string.

Provider episode numbers for an N-to-M split: a single number or “12-13”.

Type: integer or string.

Type: ProjectionEntry.

Field Type Required Description
episodes episodeRange yes
kind regular, special, credit, trailer, parody Defaults to the kind implied by the episodes prefix.
season integer Provider season. Omit for providers or orderings without seasons (for example TVDB absolute order). at least 0
start integer Provider episode number of the first episode in the range. Defaults to the first canonical number. at least 0
target targetRange Only for N-to-M splits: one canonical episode to several provider episodes, or several to one.
gap boolean Marks that the canonical episodes just before this range are intentionally unmapped.

Type: list of projection.

One provider’s projection: a list of ranges, or an object when coverage needs a note.

Type: projectionList or ProjectionBlockObject.

Absolute sequences: data/sequences/<id>.yaml

Section titled “Absolute sequences: data/sequences/<id>.yaml”

An absolute sequence: an ordered chain of works numbered continuously, the way fansubs number long series. data/sequences/.yaml.

Field Type Required Description
id slug yes
members list of SequenceMember yes
notes string
sources sources
Field Type Required Description
work slug yes
episodes episodeRange yes Regular canonical episodes of the work covered by this member.
absolute_start integer yes Absolute number of the first episode in the range. at least 1
default boolean Marks this sequence as the default absolute numbering for the member work. Required on exactly one sequence when a work belongs to several.

Lowercase letters and digits, separated by single hyphens (for example sousou-no-frieren).

Type: string; pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$, at most 120 characters.

Type: list of string.

A single episode (12, “S3”) or a range (“1-12”, “S1-S2”, “892-” for open-ended). Prefix S = special, C = credit, T = trailer, P = parody; no prefix = regular.

Type: integer or string.

A release group and its known numbering quirks: data/groups/.yaml.

Field Type Required Description
id slug yes
aliases list of string
overrides list of GroupOverride
notes string
sources sources
Field Type Required Description
work slug yes
numbering continue_prequel, absolute, offset yes continue_prequel: numbers this work after its prequel’s last episode. absolute: uses the work’s absolute sequence (its default one, unless sequence names another). offset: adds offset to canonical numbers.
offset integer Required when numbering is offset, not allowed otherwise.
sequence slug With numbering: absolute, the sequence this group numbers by, when it is not the work’s default sequence.

Lowercase letters and digits, separated by single hyphens (for example sousou-no-frieren).

Type: string; pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$, at most 120 characters.

Type: list of string.

Rejected bot proposals: data/rejected.yaml

Section titled “Rejected bot proposals: data/rejected.yaml”

Bot proposals a maintainer rejected: data/rejected.yaml. The bots read it before proposing anything and never propose a matching change again. Hand-written only (origin: manual).

Field Type Required Description
rejected list of relation or airing or tmdb_split or tmdb_extras yes
Field Type Required Description
kind relation, airing, tmdb-split, tmdb-extras yes

Type: string; pattern ^[a-z0-9]+(-[a-z0-9]+)*$.

A prequel link the bots must not propose: prequel as the prequel of work.

Type: RelationRejection.

Field Type Required Description
kind relation yes
work slug yes
prequel slug yes
reason reason yes
decided_by decided_by yes
date date yes
link link
origin manual yes

An airing or count update the bots must not propose for work. Without episodes and status it covers every airing update for the work; with them, only updates to exactly those values.

Type: AiringRejection.

Field Type Required Description
kind airing yes
work slug yes
episodes integer or null at least 0
status airing, finished
reason reason yes
decided_by decided_by yes
date date yes
link link
origin manual yes

Why the proposal was rejected, in a sentence.

Type: string.

Who rejected it.

Type: string.

When it was rejected (YYYY-MM-DD).

Type: string; pattern ^\d{4}-\d{2}-\d{2}$.

The pull request or issue where it was rejected.

Type: string.

TMDB episodes of work’s TMDB show that no work of ours covers (a bonus, a 3D version, a recap TMDB lists as a special). The TMDB checker counts them as mapped, so it stops flagging the show for them. Say which TMDB season and episodes, and why no work owns them.

Type: TmdbExtrasRejection.

Field Type Required Description
kind tmdb-extras yes
work slug yes
season integer yes The TMDB season the episodes are in (0 for specials). at least 0
episodes string yes The TMDB episode number, or a range such as 11-12. pattern ^[0-9]+(-[0-9]+)?$
reason reason yes
decided_by decided_by yes
date date yes
link link
origin manual yes

A split-cour proposal from the TMDB checker the bots must not make again for work: that its TMDB episodes continue the previous TMDB season.

Type: TmdbSplitRejection.

Field Type Required Description
kind tmdb-split yes
work slug yes
reason reason yes
decided_by decided_by yes
date date yes
link link
origin manual yes

This product uses the TMDB API but is not endorsed or certified by TMDB.