Soundlore

About Soundlore

Soundlore describes music by what it is made of. It names the musical resources a song can use, from a blast beat to a Dorian melody or a wall of sound, and records which of them define each genre. From that, it measures how close two genres are.

959musical concepts
14facets
2,212MusicBrainz genres
2,186genre profiles
651Wikidata links
48,127MusicBrainz artists

The project

Soundlore started as a map of musical concepts: a structured vocabulary for the rhythms, harmonies, forms, voices, instruments, techniques and production choices that make up a piece of music. It then grew to cover genres, and later artists. Today it has two connected vocabularies, organized the way libraries and medical databases organize knowledge, and a layer of artists linked to them:

  • Concepts: a thesaurus of musical resources, in the style of MeSH (the thesaurus used to index the medical literature) and modeled with SKOS, the W3C standard for thesauri.
  • Genres: every genre in MusicBrainz, with its subgenres, fusions and influences.
  • Artists, outside the thesaurus: MusicBrainz artists linked to the genres the community has voted for them.

The bridge between them is each genre's profile: the resources that are characteristic, frequent or occasional in it. Everything else, from the prompt drafts to the temperature and the map, is computed from those profiles.

It also works as a tool for writing prompts for AI music generators: every concept lists the words that describe it in a prompt, with an estimate of how reliably generators follow them, and every genre has a prompt draft built from its profile.

The site has four parts: the explorer for browsing concepts, genres and artists; the genre map; the layers view, which joins the genre map to a second plane of instruments, in 2D or 3D; and the thesaurus, which shows the full record of every concept and exports it as SKOS. Every method on this page is computed by scripts from the files listed in Data and code, so each result can be reproduced and checked.

How the concepts were built

The concept taxonomy is original work. It was designed to cover what a listener, a musician or a prompt writer would use to describe a piece of music, in fourteen facets:

CodeFacetCodeFacet
RHYRhythm, meter and tempoINSInstrumentation
DRMDrums and percussion patternsTECInstrumental techniques
HARHarmony and tonalityPRDProduction and sound
SCLScales and modesDYNDynamics and articulation
MELMelody and motifLYRLyrics and prosody
FRMForm and structureMOOMood and character
TEXTexture and counterpointVOCVoice and vocal technique

Hierarchy and relations

  • Within each facet, concepts form a hierarchy of broader and narrower terms (up to three levels below the facet), as in MeSH: Drum patterns is broader than Blast beat.
  • A concept can sit in more than one place when it genuinely belongs to two branches (polyhierarchy). Mixed meter, for example, is under both Meter and Odd meter.
  • Related terms link concepts that are associated but not hierarchical, such as Blast beat and Very fast tempo. The links are made symmetric automatically.
  • Every place in the hierarchy gets a tree number (DRM.01.13), which shows the position and can change when the tree is reorganized.

The form facet closely follows the musical form terms of the Library of Congress Genre/Form Terms (LCGFT), and the instrument facet those of the Library of Congress Medium of Performance Thesaurus (LCMPT). A formal crosswalk to their identifiers has not been made yet.

The record of each concept

  • Identifier. A permanent ID such as SL000081, like the MeSH Unique ID. It never changes when a concept is renamed or moved, and it is never reused.
  • Preferred term and entry terms. The name used in Soundlore, plus synonyms that searches also find.
  • Definition. What the concept is, in one or two sentences. All 959 are first drafts written with AI assistants (766 with ChatGPT, 193 with Claude, as recorded in each record) and are marked as drafts until reviewed.
  • Scope note. How the term is used here: typical genres and boundaries with neighboring concepts. Written separately from the definition, as MeSH does.
  • Prompt terms. The words that tend to work in a style prompt for that resource, and, for song sections, the structure tags that go in the lyrics, such as [Breakdown].
  • Prompt adherence. An estimate of how reliably music generators follow the term: high for timbre, instruments and production; low for meter, counterpoint or modulation. It is set per facet with some exceptions and has not been tested yet.
  • Wikidata link. The equivalent Wikidata item, with the type of match (exact, close, broader, narrower or related) and its English Wikipedia article.
  • MusicBrainz instrument. For instruments, the equivalent MusicBrainz instrument, with the same types of match.

Checking the links

The Wikidata links were checked against the Wikidata and English Wikipedia APIs. For the first 463, a script (check_links.py) confirmed that the item exists and is not a redirect, a disambiguation page or a list; that it has an English Wikipedia article; and that the article points back to the same item. The links added later were checked by hand against the same APIs (label, description and article), and those taken from MusicBrainz say so in the source file. Each pair was then read to decide the type of match. Of the 651 links, 601 are exact, 33 close, 13 broader, 1 narrower and 3 related; 308 concepts have no good equivalent yet.

Facet descriptions

Each facet page in the thesaurus opens with a one-sentence summary and a short article on what the facet covers, how its branches are organized and where neighboring topics belong. The articles were drafted with ChatGPT and checked against the concepts they describe.

Instruments from MusicBrainz

The instrument facet was checked against the MusicBrainz instrument list (about a thousand instruments, CC0). Matches went by shared Wikidata item first and by name after that, reviewed by hand; 320 instrument concepts now carry their MusicBrainz identifier. MusicBrainz also guided the hierarchy (steel guitars, hammered dulcimers) and the choice of new instruments. Soundlore adds an instrument only when it helps describe genres, so it does not copy the whole catalog.

How the genres were profiled

The genre list and its relations come from MusicBrainz, downloaded on 10 October 2026 through its public API (the list of genres) and each genre's page (its relations). Soundlore keeps:

  • subgenre of and subgenres, which act as broader and narrower terms;
  • fusion of and fusion genres;
  • influenced by and influenced;
  • the Wikidata item, the area of origin and links to other databases (RateYourMusic, Discogs, AllMusic).

Profiles

Each genre's profile lists the concepts it uses at three levels: characteristic (defines the genre), frequent (common but not defining) and occasional. The profiles were written with AI assistants from general musical knowledge, not from the analysis of recordings or a review of the literature, and no expert has reviewed them systematically yet. They were made in two passes:

  1. Core genres (713): profiled one by one in more detail, with priority on rock, metal and electronic music. High confidence.
  2. The rest (1,473): lighter profiles that usually inherit from the parent genre and add their own traits. Medium confidence with at least six resources (1,425 genres), low with fewer (48). The thinnest profiles (407, mostly little-documented regional traditions) were completed by Claude in a second pass in October 2026, choosing from the existing concepts (93 MusicBrainz instruments were added as concepts because these profiles needed them) and giving a confidence and a reason for every change; the pass also removed inherited traits that did not apply (Thai classical music no longer inherits gamelan tunings, for example). After it, the 24 control pairs still passed and 96% of the ten closest neighbors of the other genres stayed the same.

When a genre inherits a profile and also has characteristic resources of its own, the inherited ones drop one level (characteristic becomes frequent, frequent becomes occasional). That way a subgenre does not carry its parent's generic traits as defining. The 26 entries that are not music (audio drama, ASMR, stand-up comedy, nature sounds) have no profile.

Prompt drafts

The prompt draft of a genre takes its characteristic and then its frequent resources, leaves out those with low expected adherence and the lyric resources, orders each group from the rarest to the most common, and joins their first prompt terms after the genre name, up to eleven. It is a starting point to edit, not a finished prompt.

How temperature works

Temperature measures how close two genres are, from 0 to 100. It combines what the genres are made of with where they sit in the MusicBrainz family tree.

temperature = 100 × (0.7 × profile affinity + 0.3 × tree proximity)

Profile affinity (70%)

Each profile becomes a vector with one weight per concept: the level (characteristic 3, frequent 2, occasional 1) multiplied by how rare the concept is across all genres (its inverse document frequency, IDF). The rarity weight is ln((N + 1) / (n + 1)) + 0.05, where N is the number of profiled genres (2,186) and n the number that use the concept. Affinity is the cosine similarity between the two vectors. Because of the rarity weight, sharing a blast beat counts far more than sharing 4/4 time, which almost every genre has.

Tree proximity (30%)

Proximity is the shortest path between the two genres in the MusicBrainz relations. A subgenre or fusion step counts as 1 and an influence step as 1.5. Proximity is max(0, 1 − distance / 4): one step scores 0.75, two steps 0.5, three 0.25, and four or more 0. Paths are searched up to a distance of 4.5.

Genres without a profile (only the non-musical entries) are compared by tree proximity alone, with a 15% discount, and are marked as tree distance only.

Scale

Scorching, 80 or more Hot, 60 to 79 Warm, 40 to 59 Cool, 20 to 39 Cold, under 20

For every genre, Soundlore keeps its 25 closest genres with a temperature of at least 5 (the explorer shows the first 20). Each neighbor lists up to six shared resources, those with the highest product of the two levels and the rarity weight, so a temperature can always be explained.

Example. Shoegaze and doomgaze score 78 (hot): they share a wall of sound, breathy vocals, a dreamy mood, reverb and distortion, and are one influence step apart.

Validation

The build checks 24 control pairs: 16 that should come out close, such as synthwave and outrun or thrash metal and speed metal, and 8 that should come out far apart, such as black metal and bossa nova or ambient and grindcore. All 24 pass in the current version.

How the map is drawn

The map places every profiled genre in two dimensions with t-SNE, a method that keeps similar items close together. It uses the same weighted profile vectors as the temperature, normalized, with cosine distance (scikit-learn; perplexity 35, PCA initialization, 1,500 iterations, fixed random seed 7, so the map comes out the same on every build). A genre that lands far outside the rest (outside the 0.5–99.5 percentile box plus a 5% margin, such as whistling or white voice) is moved next to its closest genre by temperature, and the map is then scaled so that the 0.5–99.5 percentile range fills a 0–1 square; without this, two isolated genres squeezed all the others into a corner. Genres with identical profiles would land on the same spot, so they are fanned out on a small spiral and any two points closer than 0.0085 are pushed apart, moving them as little as possible. Distances on the map are approximate; the exact closeness between two genres is their temperature.

The colors show nine families. Each of the first eight has a list of anchor genres (for Metal: metal, heavy metal, black metal, death metal, doom metal, thrash metal, metalcore and grindcore; the lists are in build_map.py). Each genre takes the family of the nearest anchor found walking up its MusicBrainz tree through subgenre of and fusion of; any genre whose name ends in “metal” goes to Metal. Genres with no anchor take the most common family among their ten closest neighbors with a temperature of 40 or more, and the rest go to Classical, traditional & other. Families are for orientation only and do not affect any calculation.

The layers view

The map can show a second map above the genre map: switch the layer in its toolbar, or open the 3D view. Its first layer is the instruments: each Instrumentation concept used by at least one genre profile sits at the weighted center of the genres that use it (characteristic 3, frequent 2, occasional 1). Averages crowd toward the middle of the map, so the layer is stretched about its center until its 1st–99th percentile range spans the plane (what is left of a point stays left of it), and overlapping instruments are nudged apart with a spring back to that position. Its spread is the weighted mean distance of those genres from the center: a small spread means a focused instrument, a large one an instrument found across the map. The second layer is the artists, placed as described under How artists are linked. In 2D one layer is shown at a time, and selecting an item highlights what it is linked to on the other layer (a genre shows its instruments or its artists). The artist plane is larger than the genre plane (twice the area in 2D, one and a half times in 3D), so that crowded scenes have room. In 3D the planes are stacked, instruments above, genres in the middle and artists below, and each one can be switched on or off; lines join each instrument or artist to its genres, and for a genre with many artists they go to its 600 best-voted ones.

How artists are linked

Artists are not part of the thesaurus. They come from the MusicBrainz artist dump (2026-10-10), where the community votes genres for each artist. Of about three million artists, 214,970 have at least one genre vote; many of those votes are a single tag left by one person. Soundlore keeps an artist when its best-voted genre has at least two votes, or when it has a Wikidata item and its genre votes add up to at least two (48,127 artists). Within each artist, genres with less than a quarter of the top votes are left out, as stray tags.

Those votes leave out many well-known artists, above all outside English-language music: Vetusta Morla or La La Love You had no genre vote at all. So artists without enough votes are also taken from Wikidata when they are documented enough: their item has a MusicBrainz identifier, at least three sitelinks (pages about them in Wikipedia and other Wikimedia projects, a measure that does not depend on the language) and a genre (P136) that matches a Soundlore genre, either directly or one or two steps up the Wikidata class tree. That adds 47,800 artists, for 95,927 in all. Their genres have no votes, so each one counts the same, and their records say that the genres come from Wikidata.

The dump is read as a stream by a script (filter_artists.py) that keeps, for each artist with genre votes, its name, type, area, dates, Wikidata item and votes; nothing else is taken. At most eight genres are kept per artist. Everything else is derived from those links:

  • Resources. The profiles of its genres, mixed by votes (characteristic 3, frequent 2, occasional 1, each genre weighted by its share of the votes). A mixed score of 1.8 or more is shown as characteristic, 0.9 as frequent and 0.4 as occasional. They describe its genres, not its own recordings.
  • Prompt draft. Its two best-voted genres, then the resources chosen as for a genre's prompt draft. It never includes the artist's name.
  • Place on the map. The vote-weighted center of its genres, with the layer stretched like the instrument layer so that it fills the plane. Artists with the same genres share a center, so they are laid out around it on a sunflower spiral (even density, best-documented artists in the middle): a crowded center becomes a disc whose size shows how many artists it holds. An artist whose genres are close together is focused; one whose genres are far apart crosses genres.
  • Similar artists. 0.6 × cosine of the resource mixes (with the rarity weight of temperature) + 0.4 × cosine of the genre votes, from 0 to 100; twelve per artist, only above 20. Two thirds of the places (eight) go to the best-documented artists among the close matches (a similarity of at least 0.6 and within 0.12 of the best one), so that reference artists appear and not only little-known ones with identical genres; the other four go to the closest remaining matches. Every artist of a genre can be listed from the Artists tab.
  • Order of the list and relevance. The votes of an artist's five best genres, each counted up to 20, or 1.5 times its Wikidata sitelinks (up to 100) when that is higher; then its total votes. The cap keeps a few heavily fan-voted or self-tagged entries from leading the list, and the sitelinks give weight to artists who are well documented but little tagged. The same measure decides which artists fill the eight relevant places among similar artists.

The votes reflect what MusicBrainz users have tagged, not a complete or balanced catalog: well-documented scenes have many artists, and some artists carry fan or self-promotional votes.

Who made what

General Orchestrator: aydearcas · GitHub · LinkedIn

Soundlore is directed by its General Orchestrator, who sets the scope, takes the design decisions and reviews the results, with the help of two AI assistants, Claude (Anthropic) and ChatGPT (OpenAI). This table says where each part comes from and how far it has been checked.

PartOriginChecked
Scope, design decisions, thresholds and reviewThe General Orchestrator (aydearcas)Each decision is recorded in the project notes and the README
Concept taxonomy: facets, hierarchy, entry terms, scope notes, prompt termsOriginal, written with AI assistance; form and instrument facets modeled on LCGFT and LCMPTStructure validated by the build; content not yet reviewed by experts
DefinitionsDrafted with ChatGPT (766) and Claude (193)Drafts, not yet reviewed
Facet descriptionsDrafted with ChatGPTChecked against the concepts they describe; two articles rewritten
Prompt adherence levelsEstimated per facet, with exceptionsNot tested
Wikidata links of conceptsProposed with AI assistance and from MusicBrainzEvery link verified against the Wikidata and Wikipedia APIs; match type decided by reading each pair
MusicBrainz instrument linksShared Wikidata item, then nameName matches reviewed by hand
Genres and their relationsMusicBrainz, as publishedNot edited
Genre profilesWritten with AI assistance from general musical knowledge; the 407 thinnest completed by Claude with a reason for each change24 control pairs; no systematic expert review yet
Temperature, map, families, layersComputed by the build scriptsReproducible from the files
Artists and their genresMusicBrainz artist dump and community votes, as published; for 47,800 artists, Wikidata sitelinks and genresSelected and computed by script with thresholds chosen by the General Orchestrator; votes and Wikidata genres not edited
Code: build scripts and siteWritten with ClaudeBuild validations; manual testing

Data and code

The site reads plain files that can be downloaded and reused under the license of each part:

FileContents
soundlore.ttl, soundlore.jsonldThe concept thesaurus in SKOS (Turtle and JSON-LD)
concepts.jsonEvery concept record, with facets and facet descriptions
genres.jsonEvery genre: MusicBrainz identifier, relations, Wikidata item, profile and confidence
genres_by_concept.json, idf.jsonWhich genres use each concept, at which level; the rarity weight of each concept
temperature_viewer.jsonThe 20 closest genres of each genre, with temperature, tree distance and shared resources
genre_map.json, instrument_layer.jsonMap coordinates and families; the instrument layer with its genre links
artists.json, artist_neighbors.jsonThe artists with their genre votes and map positions; their similar artists (CC BY-NC-SA 3.0)

They are generated, in this order, by the build scripts: build_concepts.py (concepts, identifiers, definitions, links), export_skos.py, build_genres.py (profiles, temperature), verify.py (control pairs), build_map.py, build_layers.py and build_artists.py, after fetch_wikidata_artists.py has queried Wikidata and filter_artists.py has read the MusicBrainz dump. The editable sources are plain text: one line per concept, one line per genre profile. The project README documents every format and parameter.

Sources and credits

SourceUsed forLicense
MusicBrainzThe list of genres and their subgenre, fusion and influence relations, areas of origin and links to other databases (API, 10 October 2026); the instrument list, its hierarchy and identifiers (JSON dump of 10 October 2026).CC0
MusicBrainz artistsArtist names, types, areas, dates and Wikidata items (CC0), and the community genre votes that link artists to genres (CC BY-NC-SA 3.0), from the JSON dump of 10 October 2026.CC0 and CC BY-NC-SA 3.0
WikidataEquivalent items for concepts (each one verified) and for genres (as listed in MusicBrainz); for artists, sitelinks and genres (P136), queried on 11 October 2026.CC0
WikipediaLinks to the English article of each linked concept. No Wikipedia text is reproduced.Linked only
LCGFT and LCMPTReference vocabularies for the form and instrument facets (Library of Congress).Model only
MeSHModel for the structure: descriptors, entry terms, scope notes, tree numbers and unique IDs (U.S. National Library of Medicine).Model only
SKOSData model and export format (W3C).Standard
RateYourMusic, Discogs, AllMusicLinked from genre records, as listed in MusicBrainz.Linked only
Claude and ChatGPTAI assistants used during development: drafting the concepts, definitions, facet descriptions and genre profiles, writing the build scripts and the site, and checking the Wikidata links. See Who made what.Tools
Google FontsBricolage Grotesque, Instrument Sans and IBM Plex Mono.SIL OFL

Thanks to the MusicBrainz and Wikidata communities, whose open data makes this project possible.

License

PartLicense
Code: build scripts and the siteAGPL-3.0
Soundlore data: concepts, definitions, facet descriptions, genre profiles, temperature, map, instrument layerCC0 1.0
MusicBrainz core data: genres, instruments, artistsCC0 1.0
Artist–genre links from MusicBrainz votes and what is derived from them: artist profiles, positions and similar artists (artists.json, artist_neighbors.json). The links taken from Wikidata are CC0, but they are kept in the same filesCC BY-NC-SA 3.0, from MusicBrainz. Non-commercial use, with attribution, under the same license.

The artist files are kept apart from the rest of the data so that their license does not extend to it.

Limits

  • The genre profiles come from general musical knowledge, not from analysis of recordings. They have not had a systematic expert review yet, and low-confidence profiles are thin.
  • The map is a projection: two genres can look close on it and still have a low temperature, and the other way round.
  • The definitions are drafts, and the prompt adherence levels are estimates that have not been tested.
  • Temperature depends on the profiles: where a profile is wrong or sparse, its neighbors are less reliable.
  • Artists added from Wikidata have unweighted genres, often broad ones (rock, pop), so their resources and similar artists are less precise than those of artists with MusicBrainz votes.
  • Artist descriptions are inherited from their genres: two artists with the same genres look the same, however different their records are.
  • Some concepts have no Wikidata equivalent, and some links are close rather than exact matches; the match type is shown on each record.

Version 0.9. Corrections and suggestions are welcome.