# \[WS\] Metal Archives

**URL:** https://community.mp3tag.de/t/ws-metal-archives/5923
**Category:** Web Sources Scripts
**Created:** [December 20, 2007, 2:52pm UTC](https://community.mp3tag.de/t/ws-metal-archives/5923 "2007-12-20T14:52:32Z")
**Posts on this page:** 16
**Page:** 11

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [November 2, 2025, 7:24am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/204 "2025-11-02T07:24:49Z")

</div>

Thanks @anton , I’m gonna check it tomorrow and I’ll let you know how it works 🙂

PS: btw, it’s necesary to run both scripts everytime is needed to?

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [November 2, 2025, 7:45am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/205 "2025-11-02T07:45:07Z")

</div>

Hey, good day/night

> [@Jaeger1349](#):
>
> btw, it’s necesary to run both scripts everytime is needed to?

With latest changes that I made, you just need to run the setup once, and then just use run every time that you need to use the proxy.

Previous issues were tied to how one of the components was being configured and used in setup and run (respectively), so recent changes were aimed to fix that

Nonetheless, please let me know if you have any issues.

Regards.

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [November 7, 2025, 11:27pm UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/206 "2025-11-07T23:27:36Z")

</div>

Hi @anton, tomorrow I’ll be testing the scripts, I’ve been dealing with a massive crash and data loss in my computer (corrupted HDD 😕 ). Best regards!

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [November 8, 2025, 12:22am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/207 "2025-11-08T00:22:17Z")

</div>

Oh no! That’s awful mate ☹ I’m so sorry, and hope that you can recover most, if not all of lost data.

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [November 12, 2025, 4:03am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/208 "2025-11-12T04:03:43Z")

</div>

Luckily, I could fully recover all my data, only the OS partition was damaged so it was a close call. Anyway, I’ll have to buy an SSD to upgrade my 10-year HDD hahaha

I tried the new script, but it gave me this error:

 ![image](https://community.mp3tag.de/uploads/default/original/3X/4/1/41b3f20a3f20a9f7df87a96ce391948ff9bcbace.png)

I tried both with VPN and without VPN, and the result it was the same. Any clue?

Best regards.

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [November 12, 2025, 4:31am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/209 "2025-11-12T04:31:53Z")

</div>

> [@Jaeger1349](#):
>
> Luckily, I could fully recover all my data, only the OS partition was damaged so it was a close call.

A very close one indeed… I know that you’ve upgraded your old HDD (and almost as old as a couple that I have since at least 2007 / 2012 lol), but maybe you would like to consider get a 2nd HDD/SSD for your data (or backup). That strategy has saved me a couple of times heh

Ok, let’s go to the topic at hand

> [@Jaeger1349](#):
>
> I tried the new script, but it gave me this error:

QQ: When running the proxy does it show a message that says:

`Proxy MA with Playwright available at http://localhost:5000`

or

`Success! Preload completed in XXX seconds` (XXX can be any number)?

I saw that message a couple of times when I ran MP3Tag and proxy wasn’t working (by whatever reason).

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [November 12, 2025, 7:04pm UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/210 "2025-11-12T19:04:03Z")

</div>

Hi again! Well, I made my tests. Using the cmd file the script finally worked, for some reason the python file it didn’t for me, but anyway:

“Search by band”, “Search by album” and “Search band + album” scripts gave this error:

 ![image](https://community.mp3tag.de/uploads/default/original/3X/c/a/caa63cd83611e13ea3fe35f8f5b5454994185c23.png)

If this was reported earlier by you, my bad, it didn’t know.

In the other hand, the remaining scripts are working smooth and fine.

For me, this is a banger!

PS: is it a way for “customize” the script like the old one using the "set” command like?

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [November 12, 2025, 7:49pm UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/211 "2025-11-12T19:49:26Z")

</div>

I detected a bug: the function “This album on The metal archives” it redirects to a different page:

 ![image](https://community.mp3tag.de/uploads/default/original/3X/f/8/f8af8ff766493b8c4cfd2dc2527f63cbd90d805b.png)

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [November 12, 2025, 10:55pm UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/212 "2025-11-12T22:55:36Z")

</div>

Hi,

Let me go issue by issue:

> [@Jaeger1349](#):
>
> “Search by band”, “Search by album” and “Search band + album” scripts gave this error:

These are the “proxy” versions (that have “(Proxy)” on their name), or the regular ones?

> [@Jaeger1349](#):
>
> PS: is it a way for “customize” the script like the old one using the "set” command like?

> [@Jaeger1349](#):
>
> the function “This album on The metal archives”

Could you please expand more about these? I am not quite following you at the moment (I blame how my day was at office lol).

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [November 13, 2025, 12:16am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/213 "2025-11-13T00:16:25Z")

</div>

Ah, the proxy version gave that error. At least for me, only 2 scripts are working.

The second issue, is just a recalling with a function present in the code of the older scripts, when you write SET “field” to let out from the query that field. But I’ve digging in the code, and well, the same result it can achieved with deleting the “unwanted” fields for the user.

The third issue is the link in the lower left aside with the “Utils” button: in the older script, that link redirects directly into the page album in MA; in the new script, it shows a page like the one I sent early in the screenshot.

That’s for the moment.

Ah, one more thing, the new script it doesn’t call a list with all the versions of the release, like the old “Search by band + album (advanced)” and “Search by band + album (advanced by format)”, maybe in a future release it can be added?

That’s for now, if I find something else, I’ll report it. And congratulations again, you’ve made a great work with this upgraded version of an nearly 20-years script 🫡

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [November 13, 2025, 1:35am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/214 "2025-11-13T01:35:26Z")

</div>

> [@Jaeger1349](#):
>
> Ah, the proxy version gave that error. At least for me, only 2 scripts are working.

Weird, I’ll check if not today, before Saturday (long weekend for me and I’ll be offline).

> [@Jaeger1349](#):
>
> The second issue, is just a recalling with a function present in the code of the older scripts, when you write SET “field” to let out from the query that field.

Maybe I am wrong, but I believe that _maybe_ you’re thinking on “`outputto`" and "`sayrest`" functions, as "`SET`" is/was only used while getting the Disc Number. Those are also used on Proxy versions, although logic if quite different with code in-between those two (thanks to JSON).

> [@Jaeger1349](#):
>
> The third issue is the link in the lower left aside with the “Utils” button: in the older script, that link redirects directly into the page album in MA; in the new script, it shows a page like the one I sent early in the screenshot.

Ok, you got me with that one lol

Being honest, in all those years using MP3Tag (you can see when my first post here was, and go back a year or so lol) I’ve never noticed, nor used that link 😅

But yeah, as far as I can tell, that link uses the source from where the data is coming from, and considering that data is coming from Proxy, that’s what is being shown.

Honestly, I don’t know if that can be changed/configured, but I could take a look at it.

> [@Jaeger1349](#):
>
> the new script it doesn’t call a list with all the versions of the release […] maybe in a future release it can be added?

That’s something that I’ve in my mind/my goals since the beginning, but I want to make sure that current implementation works as expected before going into that task - specially since advanced search works a little bit different than the regular search.

Moreover, next weeks will be very annoying due to “end of year” activities on my workplace, as well holidays and what not, so I can’t compromise with having those scripts done… Yet… Nonetheless, once I figure out what’s going on with your case I’ll take a look at “advanced search” scripts whenever I have a chance.

> [@Jaeger1349](#):
>
> And congratulations again, you’ve made a great work with this upgraded version of an nearly 20-years script 🫡

Thank you for the kind words, although I like to think that it has been a team effort (starting with **dano** , and including all of you) 🙂 nonetheless, I appreciate your words 😃

---

<div class="post-metadata">

### Author: ![deathrashed](https://community.mp3tag.de/user_avatar/community.mp3tag.de/deathrashed/32/23282_2.png) [@deathrashed](https://community.mp3tag.de/u/deathrashed)
#### Post date: [July 17, 2026, 6:41pm UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/215 "2026-07-17T18:41:22Z")

</div>

I have created an extension to the Metal Archives web source to capture artist genres, along with some additional artist data.

The original script retrieves data from the album page, which prevents it from fetching the band's genre. This script scrapes the artist page directly to capture the genre along with other specific band details.

**Captured Metadata**

The following data points are scraped and saved to their own custom metadata fields:

- `METAL ARCHIVES GENRE`

- `METAL ARCHIVES FORMED IN`

- `METAL ARCHIVES STATUS`

- `METAL ARCHIVES LOCATION`

- `METAL ARCHIVES COUNTRY`

- `METAL ARCHIVES THEMES`

- `METAL ARCHIVES BAND URL`

**Configurable Settings**

The script includes a built-in settings page to adjust the output format:

- **Keep era descriptions:** Toggle historical era brackets in the genre list (e.g., '(early)', '(mid)').

- **Deduplicate genre list:** Toggle the removal of repeating genres.

- **Genre Separator:** Select the character used to separate multiple genres (Options: `; `, `/`, `/`, `, `, `\\`).

- **Write dedicated band tags:** Toggle writing the band info to the specific custom fields listed above.

- **Write band info to Comment tag:** Toggle writing the Country, Location, Status, Formed In, and Themes directly into the standard Comment field.

- **Custom Genre Replacements**  
The script code includes a `CUSTOM GENRE REPLACEMENTS` section. The current replacements reflect my personal tagging preferences. You can add, edit, or remove these lines to match your own standards using the format `replace "Original Text" "Replacement Text"`.

Let me know if anyone is interested in testing this or integrating it into the main script.

**Script** - `Metallum Genres#S - Metallum Genres.src`

```auto
# ╭───────────────────────────╮
#╭───────────────────────────────┤ W E B S O U R C E ├───────────────────────────────╮
#│ ╰───╮ •────  ────• ╭───╯ │
#│ •───────•───────•───────• │ M P 3 T A G │ •───────•───────•───────• │
#│ ╰───────────────────╯ │
#│ │
#│ ███╗ ███╗███████╗████████╗ █████╗ ██╗ ██╗ ██╗ ██╗███╗ ███╗ │
#│ ████╗ ████║██╔════╝╚══██╔══╝██╔══██╗██║ ██║ ██║ ██║████╗ ████║ │
#│ ██╔████╔██║█████╗ ██║ ███████║██║ ██║ ██║ ██║██╔████╔██║ │
#│ ██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██║ ██║ ██║ ██║██║╚██╔╝██║ │
#│ ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║███████╗███████╗╚██████╔╝██║ ╚═╝ ██║ │
#│ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝ │
#│ ██████╗ ███████╗███╗ ██╗██████╗ ███████╗███████╗ │
#│ ██╔════╝ ██╔════╝████╗ ██║██╔══██╗██╔════╝██╔════╝ │
#│ ██║ ███╗█████╗ ██╔██╗ ██║██████╔╝█████╗ ███████╗ │
#│ ██║ ██║██╔══╝ ██║╚██╗██║██╔══██╗██╔══╝ ╚════██║ │
#│ ╚██████╔╝███████╗██║ ╚████║██║ ██║███████╗███████║ │
#│ ╚═════╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═╝╚══════╝╚══════╝ │
#│ │
#│ https://github.com/deathrashed/mp3tag │
#│ │
#│ Native Metal Archives genre tagging script for Mp3tag │
#│ •─────────────────────────────────────────────────────────────────────────────────• │
#│ custom replacements • deduplication • era descriptions • band info • comment tags │
#│ │
#│ ╭────────────────────────╮ │
#╰─────────────────────────────────┤ L A S T U P D A T E D ├────────────────────────────────╯
# ╰────────────⚡───────────╯
# July 18, 2026

# Mp3tag Web Source for Metal Archives band genres.
# Uses Metal Archives directly; no local server required.

[Name]=Metallum Genres
[BasedOn]=www.metal-archives.com
[IndexUrl]=https://www.metal-archives.com/search/ajax-band-search/?field=name&query=%s
[AlbumUrl]=
[WordSeperator]=+
[IndexFormat]=%_url%|%Artist%|%Genre%|%Metal Archives Country%
[SearchBy]=%artist%
[Encoding]=utf-8
[Settings]=Metallum Genres#Settings….settings

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# INDEX PARSER
# - Searches Metal Archives for bands matching the artist name.
# - Returns: Band URL, Artist, Genre, Country
#•═══════════════════════════════════════════════════════════════════════════════════════════•
[ParserScriptIndex]=...
findline "<a href=\\\""
do
    # Band URL
    findinline "<a href=\\\""
    sayuntil "\\\""
    say "|"

    # Artist
    findinline "\\\">"
    sayuntil "<"
    say "|"

    # Genre
    moveline 1
    replace "\"" ""
    replace "," ""
    IfVar "keepEraDescriptions" "false"
        regexpreplace "\s*\([^)]*\)" ""
    EndIf
#•═══════════════════════════════════════════════════════════════════════════════════════════•
#  CUSTOM GENRE REPLACEMENTS
# - Customize genre mappings by adding, editing, or removing "replace" lines below.
# - Format: replace "Original Text" "Replacement Text"
#•═══════════════════════════════════════════════════════════════════════════════════════════•
    replace "Progressive Death/Thrash Metal" "Progressive Death/Thrash; Progressive Metal; Death Metal; Thrash Metal"
    replace "Blackened Death/Thrash Metal" "Blackened Death/Thrash; Black Metal; Death Metal; Thrash Metal"
    replace "Death/Thrash Metal" "Death/Thrash; Death Metal; Thrash Metal"
    replace "Thrash/Death Metal" "Thrash/Death; Thrash Metal; Death Metal"
    replace "Black/Death Metal" "Black/Death; Black Metal; Death Metal"
    replace "Death/Black Metal" "Death/Black; Death Metal; Black Metal"
    replace "Black/Thrash Metal" "Black/Thrash; Black Metal; Thrash Metal"
    replace "Thrash/Black Metal" "Thrash/Black; Thrash Metal; Black Metal"
    replace "Death/Doom Metal" "Death/Doom; Death Metal; Doom Metal"
    replace "Doom/Death Metal" "Doom/Death; Doom Metal; Death Metal"
    replace "Death/Grind Metal" "Deathgrind; Death Metal; Grindcore"
    replace "Death/Grind" "Deathgrind; Death Metal; Grindcore"
    replace "Grind/Death Metal" "Deathgrind; Grindcore; Death Metal"
    replace "Grind/Death" "Deathgrind; Grindcore; Death Metal"
    replace "Death Metal/Grindcore" "Deathgrind; Death Metal; Grindcore"
    replace "Grindcore/Death Metal" "Deathgrind; Grindcore; Death Metal"
    replace "Death/Hardcore" "Deathcore; Death Metal; Hardcore"
    replace "Black/Grind" "Blackgrind; Black Metal; Grindcore"
    replace "Heavy/Power Metal" "Heavy Metal; Power Metal"
    replace "Power/Heavy Metal" "Power Metal; Heavy Metal"
    replace "Heavy/Thrash Metal" "Heavy Metal; Thrash Metal"
    replace "Thrash/Heavy Metal" "Thrash Metal; Heavy Metal"
    replace "Speed/Thrash Metal" "Speed Metal; Thrash Metal"
    replace "Thrash/Speed Metal" "Thrash Metal; Speed Metal"
    replace "Raw Black Metal" "Black Metal"
    replace "Epic Doom Metal" "Doom Metal"
    replace "Avant-Garde" "Avantgarde"
    replace "/" "; "
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# GENRE PROCESSING & DEDUPLICATION
#•═══════════════════════════════════════════════════════════════════════════════════════════•
    IfVar "deduplicateGenres" "true"
        regexpreplace "(?i)\b([^;]+);\s*\1\b" "$1"
        regexpreplace "(?i)\b([^;]+);\s*([^;]+(;\s*[^;]+)*);\s*\1\b" "$1; $2"
        regexpreplace "(?i)\b([^;]+);\s*\1\b" "$1"
        regexpreplace "(?i)\b([^;]+);\s*([^;]+(;\s*[^;]+)*);\s*\1\b" "$1; $2"
        regexpreplace "^\s*;\s*|\s*;\s*$" ""
        regexpreplace "\s*;\s*" "; "
    EndIf
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# GENRE SEPARATOR
# - Controls how multiple genres are joined in the output field.
#•═══════════════════════════════════════════════════════════════════════════════════════════•
    IfVar "genreSeparator" "/"
        replace "; " "/"
    EndIf
    IfVar "genreSeparator" " / "
        replace "; " " / "
    EndIf
    IfVar "genreSeparator" ", "
        replace "; " ", "
    EndIf
    IfVar "genreSeparator" "\\"
        replace "; " "\\"
    EndIf
    sayrest
    say "|"

    # Country
    moveline 1
    replace "\"" ""
    replace "," ""
    sayrest
    saynewline

    findline "<a href=\\\"" 1 1
    unspace
while "\"<a href" 500

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# ALBUM PARSER
# - Fetches the full band page for a selected result.
# - Returns: Artist, Genre, Composer, dedicated tags, Comment, Publisher
#•═══════════════════════════════════════════════════════════════════════════════════════════•
[ParserScriptAlbum]=...
findline "id=\"band_stats\""

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# ARTIST
#•═══════════════════════════════════════════════════════════════════════════════════════════•
outputto "Artist"
gotoline 1
findline "<h1 class=\"band_name\">"
regexpreplace "<[^>]+>" ""
sayrest

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# GENRE
#•═══════════════════════════════════════════════════════════════════════════════════════════•
outputto "Genre"
findline "<dt>Genre:</dt>"
moveline 1 1
regexpreplace "<[^>]+>" ""
IfVar "keepEraDescriptions" "false"
    regexpreplace "\s*\([^)]*\)" ""
EndIf
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# CUSTOM GENRE REPLACEMENTS
# - Customize genre mappings by adding, editing, or removing "replace" lines below.
# - Format: replace "Original Text" "Replacement Text"
#•═══════════════════════════════════════════════════════════════════════════════════════════•
replace "Progressive Death/Thrash Metal" "Progressive Death/Thrash; Progressive Metal; Death Metal; Thrash Metal"
replace "Blackened Death/Thrash Metal" "Blackened Death/Thrash; Black Metal; Death Metal; Thrash Metal"
replace "Death/Thrash Metal" "Death/Thrash; Death Metal; Thrash Metal"
replace "Thrash/Death Metal" "Thrash/Death; Thrash Metal; Death Metal"
replace "Black/Death Metal" "Black/Death; Black Metal; Death Metal"
replace "Death/Black Metal" "Death/Black; Death Metal; Black Metal"
replace "Black/Thrash Metal" "Black/Thrash; Black Metal; Thrash Metal"
replace "Thrash/Black Metal" "Thrash/Black; Thrash Metal; Black Metal"
replace "Death/Doom Metal" "Death/Doom; Death Metal; Doom Metal"
replace "Doom/Death Metal" "Doom/Death; Doom Metal; Death Metal"
replace "Death/Grind Metal" "Deathgrind; Death Metal; Grindcore"
replace "Death/Grind" "Deathgrind; Death Metal; Grindcore"
replace "Grind/Death Metal" "Deathgrind; Grindcore; Death Metal"
replace "Grind/Death" "Deathgrind; Grindcore; Death Metal"
replace "Death Metal/Grindcore" "Deathgrind; Death Metal; Grindcore"
replace "Grindcore/Death Metal" "Deathgrind; Grindcore; Death Metal"
replace "Death/Hardcore" "Deathcore; Death Metal; Hardcore"
replace "Black/Grind" "Blackgrind; Black Metal; Grindcore"
replace "Heavy/Power Metal" "Heavy Metal; Power Metal"
replace "Power/Heavy Metal" "Power Metal; Heavy Metal"
replace "Heavy/Thrash Metal" "Heavy Metal; Thrash Metal"
replace "Thrash/Heavy Metal" "Thrash Metal; Heavy Metal"
replace "Speed/Thrash Metal" "Speed Metal; Thrash Metal"
replace "Thrash/Speed Metal" "Thrash Metal; Speed Metal"
replace "Raw Black Metal" "Black Metal"
replace "Epic Doom Metal" "Doom Metal"
replace "Avant-Garde" "Avantgarde"
replace "/" "; "
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# GENRE PROCESSING & DEDUPLICATION
#•═══════════════════════════════════════════════════════════════════════════════════════════•
regexpreplace "\s*;\s*" "; "
IfVar "deduplicateGenres" "true"
    regexpreplace "(?i)\b([^;]+);\s*\1\b" "$1"
    regexpreplace "(?i)\b([^;]+);\s*([^;]+(;\s*[^;]+)*);\s*\1\b" "$1; $2"
    regexpreplace "(?i)\b([^;]+);\s*\1\b" "$1"
    regexpreplace "(?i)\b([^;]+);\s*([^;]+(;\s*[^;]+)*);\s*\1\b" "$1; $2"
    regexpreplace "^\s*;\s*|\s*;\s*$" ""
    regexpreplace "\s*;\s*" "; "
EndIf
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# GENRE SEPARATOR
# - Controls how multiple genres are joined in the output field.
#•═══════════════════════════════════════════════════════════════════════════════════════════•
IfVar "genreSeparator" "/"
    replace "; " "/"
EndIf
IfVar "genreSeparator" " / "
    replace "; " " / "
EndIf
IfVar "genreSeparator" ", "
    replace "; " ", "
EndIf
IfVar "genreSeparator" "\\"
    replace "; " "\\"
EndIf
sayrest

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# COMPOSER (current lineup)
# - Writes "Name - Role" pairs separated by semicolons.
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# Current lineup -> Composer
outputto "Composer"
gotoline 1
findline "id=\"band_tab_members_current\"" 1 1
if "id=\"band_tab_members_current\""
    findline "class=\"lineupRow\"" 1 1
    do
        findline "class=\"bold\"" 1 1
        regexpreplace "<[^>]+>" ""
        regexpreplace "\s+" " "
        sayrest
        say " - "
        findline "<td>" 1 1
        moveline 1 1
        replace "&nbsp;" " "
        regexpreplace "<[^>]+>" ""
        regexpreplace "\s+" " "
        sayrest
        findline "class=\"lineupRow\"" 1 1
        if "class=\"lineupRow\""
            say "; "
        endif
    while "class=\"lineupRow\"" 20
endif

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# DEDICATED TAGS (Country, Location, Status, Formed, Themes, Band URL)
# - Toggle with "Write dedicated Metal Archives tags" in Settings.
#•═══════════════════════════════════════════════════════════════════════════════════════════•
IfVar "writeDedicatedTags" "true"
    # Country
    outputto "Metal Archives Country"
    gotoline 1
    findline "<dt>Country of origin:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    sayrest

    # Location
    outputto "Metal Archives Location"
    gotoline 1
    findline "<dt>Location:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    sayrest

    # Status
    outputto "Metal Archives Status"
    gotoline 1
    findline "<dt>Status:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    sayrest

    # Formed in
    outputto "Metal Archives Formed"
    gotoline 1
    findline "<dt>Formed in:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    sayrest

    # Themes
    outputto "Metal Archives Themes"
    gotoline 1
    findline "<dt>Themes:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    sayrest

    # Band URL
    outputto "METAL ARCHIVES BAND URL"
    sayoutput "CurrentUrl"
EndIf

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# COMMENT FIELD
# - Toggle with "Write band info to Comment tag" in Settings.
#•═══════════════════════════════════════════════════════════════════════════════════════════•
IfVar "writeCommentField" "true"
    outputto "Comment"
    gotoline 1
    findline "<dt>Country of origin:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    say "Country: "
    sayrest
    saynewline

    findline "<dt>Location:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    say "Location: "
    sayrest
    saynewline

    findline "<dt>Status:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    say "Status: "
    sayrest
    saynewline

    findline "<dt>Formed in:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    say "Formed in: "
    sayrest
    saynewline

    findline "<dt>Themes:</dt>"
    moveline 1 1
    regexpreplace "<[^>]+>" ""
    say "Themes: "
    sayrest
    saynewline

    say "Metal Archives Band URL: "
    sayoutput "CurrentUrl"
EndIf

#•═══════════════════════════════════════════════════════════════════════════════════════════•
# PUBLISHER (record label — always written)
#•═══════════════════════════════════════════════════════════════════════════════════════════•
# Publisher (always write, standard tag)
outputto "Publisher"
gotoline 1
findline "label:</dt>"
moveline 1 1
regexpreplace "<[^>]+>" ""
sayrest

```

**Settings** - `Metallum Genres#Settings….settings`

```auto
{
  "key": "metallumgenres",
  "title": "Metallum Genres Settings",
  "settings": [
    {
      "type": "bool",
      "key": "keepEraDescriptions",
      "title": "Keep era descriptions (e.g. '(early)', '(mid)')",
      "description": "If enabled, historical era brackets will be preserved in the genre list.",
      "default": false
    },
    {
      "type": "bool",
      "key": "deduplicateGenres",
      "title": "Deduplicate genre list",
      "description": "Remove repeating genres from the list.",
      "default": true
    },
    {
      "type": "string",
      "key": "genreSeparator",
      "title": "Genre Separator",
      "description": "Character used to separate multiple genres.",
      "choices": [
        "; ",
        "/",
        " / ",
        ", ",
        "\\\\"
      ],
      "default": "; "
    },
    {
      "type": "bool",
      "key": "writeCommentField",
      "title": "Write band info to Comment tag",
      "description": "Write Country, Location, Status, Formed In, and Themes into the Comment field.",
      "default": true
    },
    {
      "type": "bool",
      "key": "writeDedicatedTags",
      "title": "Write dedicated band tags",
      "description": "Write Country, Location, Status, Formed In, and Themes into separate tags.",
      "default": true
    }
  ]
}

```

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [July 18, 2026, 2:31am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/216 "2026-07-18T02:31:38Z")

</div>

Hi!

Let me say that **this is awesome**! It's impressive and I really love how you structured/developed it.

I'll give a try, and specially I'll take a deep dive into the settings file as it is something that I am still don't know how it works.

That being said, life has been kinda unforgiving in the last year, so I don't think that I'll get back to you soon enough (maybe next week or so), but be sure that I'll come back with some doubts lol.

Once again that's a impressive piece of work, hats off, and thank you so much for such contribution to the community.

Best regards!

EDIT: Forgot to mention but **I REALLY, REALLY LOVE** the ASCII ART on it, it brings memories back from my learning days on MS-DOS

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [October 7, 2026, 2:12am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/217 "2026-10-07T02:12:48Z")

</div>

Wow, it looks amazing, but for some reason i can't make it work. Just copy/paste into a notepad, save it with \*.src format and try it? Or something else is needed to do/set? Best regards, my friend!

---

<div class="post-metadata">

### Author: ![Jaeger1349](https://community.mp3tag.de/user_avatar/community.mp3tag.de/jaeger1349/32/19547_2.png) [@Jaeger1349](https://community.mp3tag.de/u/Jaeger1349)
#### Post date: [October 7, 2026, 2:28am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/218 "2026-10-07T02:28:41Z")

</div>

And BTW, script nuked by CF: 403 Forbidden ☹

---

<div class="post-metadata">

### Author: ![anton](https://community.mp3tag.de/user_avatar/community.mp3tag.de/anton/32/16235_2.png) [@anton](https://community.mp3tag.de/u/anton)
#### Post date: [October 7, 2026, 3:26am UTC](https://community.mp3tag.de/t/ws-metal-archives/5923/219 "2026-10-07T03:26:43Z")

</div>

Ugh... That's awful... And I was wondering a couple of weeks ago how long before CF started to give headaches again...

> Just copy/paste into a notepad, save it with \*.src format and try it? Or something else is needed to do/set?

As far as I can tell/I know you need both parts to get that script working: the scr (the one with the gorgeous ASCII Art), and the settings file (the one below). Once you have both, it shoud work as intended.

[Previous page](https://community.mp3tag.de/t/ws-metal-archives/5923.md?page=10)
