# mtg/mtg-jamendo-dataset architecture

> Architecture diagram of the GitHub repository mtg/mtg-jamendo-dataset, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mtg/mtg-jamendo-dataset
- Repository: https://github.com/mtg/mtg-jamendo-dataset

## Overview

MTG-Jamendo is a research dataset and companion scripts for music auto-tagging, not a hosted application. Researchers start with metadata and download audio or precomputed features, then use prepared tag subsets and artist-separated splits to train or test the CNN baseline and inspect results. The repository also supports metadata filtering, tag statistics, and MediaEval baseline evaluation. Edges reflect the README, sampled calls, or SOURCE INDEX references; some documented capabilities have no inspected implementation excerpt, so their links are limited to README evidence.

Main entry points: [`scripts/commons.py`](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/commons.py) (Metadata reader), [`data/raw.tsv`](https://github.com/mtg/mtg-jamendo-dataset/blob/master/data/raw.tsv) (Dataset metadata), [`scripts/download/download.py`](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/download/download.py) (Dataset downloader), [`scripts/baseline/data_loader.py`](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/data_loader.py) (Feature loader)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_metadata["Metadata and subsets"]
  node_metadata_files["Dataset metadata<br/>[raw.tsv]"]
  node_split_data["Train/test metadata"]
end

subgraph group_preparation["Preparation and statistics"]
  node_reader["Metadata reader<br/>[commons.py]"]
  node_clean_tags["Tag merging<br/>[clean_tags.py]"]
  node_category_filter["Category subsets<br/>[filter_category.py]"]
  node_subset_filter["Tag-list filtering<br/>[filter_subset.py]"]
  node_top_tags["Top-tag filtering<br/>[filter_toptags.py]"]
  node_splits["Artist-separated splits<br/>[data_split.py]"]
  node_statistics["Tag statistics<br/>[get_statistics.py]"]
end

subgraph group_assets["Audio and features"]
  node_download_tool["Dataset downloader<br/>[download.py]"]
  node_remote_data[("MTG data host")]
  node_audio_assets["Audio and features"]
  node_mel_specs["Mel-spectrograms<br/>[melspectrograms.py]"]
end

subgraph group_experiments["Baseline experiments"]
  node_baseline_entry["Baseline runner<br/>[main.py]"]
  node_audio_loader["Feature loader<br/>[data_loader.py]"]
  node_solver["Train and test<br/>[solver.py]"]
  node_cnn["CNN classifier<br/>[model.py]"]
  node_baseline_results["Baseline results"]
end

subgraph group_evaluation["Evaluation"]
  node_mediaeval_baseline["MediaEval naive baseline<br/>[baseline_naive.py]"]
  node_mediaeval_results["MediaEval results"]
end

node_researcher(("Researcher"))

node_researcher -->|"uses metadata"| node_metadata_files
node_metadata_files -->|"reads TSV"| node_reader
node_reader -.->|"reads metadata"| node_clean_tags
node_reader -->|"loads tracks"| node_category_filter
node_reader -->|"loads tracks"| node_subset_filter
node_reader -->|"loads tracks"| node_top_tags
node_reader -->|"loads tracks"| node_statistics
node_metadata_files -->|"splits metadata"| node_splits
node_splits -->|"writes splits"| node_split_data
node_category_filter -->|"writes subset"| node_metadata_files
node_subset_filter -->|"writes subset"| node_metadata_files
node_top_tags -->|"computes tag counts"| node_statistics
node_researcher -->|"requests files"| node_download_tool
node_download_tool -->|"downloads archives"| node_remote_data
node_download_tool -->|"stores archives"| node_audio_assets
node_researcher -->|"computes features"| node_mel_specs
node_baseline_entry -->|"creates loaders"| node_audio_loader
node_audio_loader -->|"loads split labels"| node_split_data
node_audio_loader -->|"loads features"| node_audio_assets
node_baseline_entry -->|"starts training or test"| node_solver
node_solver -->|"calls classifier"| node_cnn
node_solver -.->|"reports metrics"| node_baseline_results
node_researcher -->|"runs evaluation"| node_mediaeval_baseline
node_mediaeval_baseline -->|"computes tag rates"| node_statistics
node_mediaeval_baseline -.->|"writes predictions"| node_mediaeval_results

click node_metadata_files "https://github.com/mtg/mtg-jamendo-dataset/blob/master/data/raw.tsv"
click node_reader "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/commons.py"
click node_clean_tags "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/clean_tags.py"
click node_category_filter "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/filter_category.py"
click node_subset_filter "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/filter_subset.py"
click node_top_tags "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/filter_toptags.py"
click node_splits "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/data_split.py"
click node_statistics "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/get_statistics.py"
click node_split_data "https://github.com/mtg/mtg-jamendo-dataset/tree/master/data/splits"
click node_download_tool "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/download/download.py"
click node_audio_assets "https://github.com/mtg/mtg-jamendo-dataset/tree/master/data/download"
click node_mel_specs "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/melspectrograms.py"
click node_baseline_entry "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/main.py"
click node_audio_loader "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/data_loader.py"
click node_solver "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/solver.py"
click node_cnn "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/model.py"
click node_baseline_results "https://github.com/mtg/mtg-jamendo-dataset/tree/master/results/ml4md2019"
click node_mediaeval_baseline "https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/mediaeval/baseline_naive.py"
click node_mediaeval_results "https://github.com/mtg/mtg-jamendo-dataset/tree/master/results/mediaeval"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_metadata_files,node_split_data toneBlue
class node_reader,node_clean_tags,node_category_filter,node_subset_filter,node_top_tags,node_splits,node_statistics toneAmber
class node_download_tool,node_remote_data,node_audio_assets,node_mel_specs toneMint
class node_baseline_entry,node_audio_loader,node_solver,node_cnn,node_baseline_results toneRose
class node_mediaeval_baseline,node_mediaeval_results,node_researcher toneIndigo
```

## Components

### Metadata and subsets

- [Dataset metadata](https://github.com/mtg/mtg-jamendo-dataset/blob/master/data/raw.tsv): `data/raw.tsv`
- [Train/test metadata](https://github.com/mtg/mtg-jamendo-dataset/tree/master/data/splits): `data/splits`

### Preparation and statistics

- [Metadata reader](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/commons.py): `scripts/commons.py`
- [Tag merging](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/clean_tags.py): `scripts/clean_tags.py`
- [Category subsets](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/filter_category.py): `scripts/filter_category.py`
- [Tag-list filtering](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/filter_subset.py): `scripts/filter_subset.py`
- [Top-tag filtering](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/filter_toptags.py): `scripts/filter_toptags.py`
- [Artist-separated splits](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/data_split.py): `scripts/data_split.py`
- [Tag statistics](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/get_statistics.py): `scripts/get_statistics.py`

### Audio and features

- [Dataset downloader](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/download/download.py): `scripts/download/download.py`
- **MTG data host**
- [Audio and features](https://github.com/mtg/mtg-jamendo-dataset/tree/master/data/download): `data/download`
- [Mel-spectrograms](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/melspectrograms.py): `scripts/melspectrograms.py`

### Baseline experiments

- [Baseline runner](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/main.py): `scripts/baseline/main.py`
- [Feature loader](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/data_loader.py): `scripts/baseline/data_loader.py`
- [Train and test](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/solver.py): `scripts/baseline/solver.py`
- [CNN classifier](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/baseline/model.py): `scripts/baseline/model.py`
- [Baseline results](https://github.com/mtg/mtg-jamendo-dataset/tree/master/results/ml4md2019): `results/ml4md2019`

### Evaluation

- [MediaEval naive baseline](https://github.com/mtg/mtg-jamendo-dataset/blob/master/scripts/mediaeval/baseline_naive.py): `scripts/mediaeval/baseline_naive.py`
- [MediaEval results](https://github.com/mtg/mtg-jamendo-dataset/tree/master/results/mediaeval): `results/mediaeval`

### Other components

- **Researcher**

## Connections

- Researcher → Dataset metadata: uses metadata (evidence: `README.md`)
- Dataset metadata → Metadata reader: reads TSV (evidence: `README.md`)
- Metadata reader → Tag merging: reads metadata (evidence: `scripts/clean_tags.py`)
- Metadata reader → Category subsets: loads tracks (evidence: `scripts/filter_category.py`)
- Metadata reader → Tag-list filtering: loads tracks (evidence: `scripts/filter_subset.py`)
- Metadata reader → Top-tag filtering: loads tracks (evidence: `scripts/filter_toptags.py`)
- Metadata reader → Tag statistics: loads tracks (evidence: `scripts/get_statistics.py`)
- Dataset metadata → Artist-separated splits: splits metadata (evidence: `README.md`)
- Artist-separated splits → Train/test metadata: writes splits (evidence: `README.md`)
- Category subsets → Dataset metadata: writes subset (evidence: `scripts/filter_category.py`)
- Tag-list filtering → Dataset metadata: writes subset (evidence: `scripts/filter_subset.py`)
- Top-tag filtering → Tag statistics: computes tag counts (evidence: `scripts/filter_toptags.py`)
- Researcher → Dataset downloader: requests files (evidence: `README.md`)
- Dataset downloader → MTG data host: downloads archives (evidence: `README.md`)
- Dataset downloader → Audio and features: stores archives (evidence: `README.md`)
- Researcher → Mel-spectrograms: computes features (evidence: `README.md`)
- Baseline runner → Feature loader: creates loaders (evidence: `scripts/baseline/main.py`)
- Feature loader → Train/test metadata: loads split labels (evidence: `README.md`)
- Feature loader → Audio and features: loads features (evidence: `scripts/baseline/data_loader.py`)
- Baseline runner → Train and test: starts training or test (evidence: `scripts/baseline/main.py`)
- Train and test → CNN classifier: calls classifier (evidence: `scripts/baseline/solver.py`)
- Train and test → Baseline results: reports metrics
- Researcher → MediaEval naive baseline: runs evaluation (evidence: `README.md`)
- MediaEval naive baseline → Tag statistics: computes tag rates (evidence: `scripts/mediaeval/baseline_naive.py`)
- MediaEval naive baseline → MediaEval results: writes predictions
