Metadata mapping

gallery-dl returns each post’s fields in the source site’s own vocabulary. monloader translates that into what monbooru expects: tags sorted into categories, a rating, a source label, and a canonical URL. The translation is driven by the curated site profiles plus a generic fallback, with override tables in the config for the edge cases.

Tags by category

monbooru sorts tags into categories (general, character, artist, copyright, meta, medium, person, year). Boorus expose per-category tag lists, and each list is routed to the closest monbooru category:

Source tag category monbooru category Notes
general general
artist artist
character character
copyright copyright
meta / metadata meta gelbooru calls it metadata
species (e621) general no monbooru equivalent
lore (e621) meta
contributor (e621) artist
circle / group artist doujin circle or group
parody / series copyright the parodied or source work
studio copyright production studio
model person real-person model (photo boorus)
faults (moebooru) meta
invalid, deprecated dropped not real tags
anything else general best-effort fallback

Tag names are normalized to monbooru’s lower_snake_case before they are sent: lowercased, with any run of characters monbooru’s tag rules reject collapsed to an underscore and the ends trimmed (fate/grand_order becomes fate_grand_order). A name with nothing representable left (a CJK-only name, for instance) is dropped.

monbooru auto-creates tags it has not seen before; any it rejects come back as tag warnings, recorded on the queue item without failing the push.

Rating

monbooru ratings are ordered general < sensitive < questionable < explicit. The full-word forms (general, sensitive, questionable, explicit, and safe) map one to one on every site, case-insensitively, with safe becoming general.

The catch is the single letter s: on Danbooru it means “sensitive”, on every other family it means “safe”. monloader knows which family each site belongs to, so the letter is read per family, not globally. A rating value it cannot recognize leaves the image unrated; monbooru keeps unrated images visible under every rating ceiling, so an unknown value is treated as safe to show.

NSFW manga. Manga and comic galleries carry no per-post rating. Leaving them unrated would surface them under a safe ceiling, so the profiles of NSFW-only sites (nhentai, hitomi, exhentai, and similar) set a default_rating of explicit that applies only when the source gives no rating. A real source rating always wins.

monbooru field Value
url the booru post page, built from the profile’s post URL template (e.g. https://danbooru.donmai.us/posts/{id})
source the site name, so filtering by source:danbooru works in monbooru
via monloader, recorded as the image’s origin and as the tagger of each pushed tag
target gallery the site’s per-source gallery, falling back to the default gallery
collection / collection_order the pool name and page order, when a pool is pushed as a collection

A direct link to a media file has no booru post behind it: the source is the file’s host and the URL is the file URL itself.

Commentary, original source, and notes

Danbooru-family posts carry the artist’s commentary, and some families carry positional note boxes overlaid on the image; both are pushed along, notes with their pixel coordinates and reduced to plain text. Most boorus also declare the post’s original source - the upstream artist URL, such as a Pixiv or Twitter page - and monloader pushes it as the origin’s original source, several entries joined one per line. monbooru overwrites a source’s commentary, original source, and notes on each re-pull.

Parent posts

A post that declares a parent (a booru parent/child pair, such as an edit or a variant set) is pushed with the parent’s post URL. Once both posts are in the monbooru gallery - whichever arrived first - monbooru links the pair as a derivative relation, with the parent as the source. Pairs already related (or marked not related) in monbooru are left alone.

Override tables

When a profile’s default is wrong for your library, override it in monloader.toml (these tables are not exposed in the settings UI). An override wins over the profile and takes effect on the next download:

# route a source tag category to a different monbooru category for one site
[[tag_overrides]]
site = "e621"
from = "species"
to   = "general"

# route a source rating value to a monbooru rating for one site
[[rating_overrides]]
site = "somebooru"
from = "x"
to   = "explicit"

site is the gallery-dl category. A tag_overrides entry matches a source tag category (its from) and reroutes it; a rating_overrides entry matches a raw rating value (case-insensitively) and remaps it. Either wins over both the curated profile and the built-in family rule, so they also cover a generic-fallback site that needs a tweak.

Giving a new site a curated profile of its own is a code change (the profiles ship inside the binary); see API and development.