Actions

Work Header

Tutorial: Hide Video Creators' Real Names In Tags

Summary:

This is a userscript I made to hide video creators' real names in character tags and inside relationship and freeform tags. It can be installed in most desktop browsers and some mobile ones.

This version only has a list of names for Hermitcraft and Life Series fandoms but it can easily be modified to add more.

Minor edits last made on 2025-11-24.

Notes:

I'm not active on social media and I don't want to spend time supporting or updating this script as it already does what I need myself, so I'm just posting it here. I hope it can be helpful as is since the clutter in the Minecraft videoblogging tags seems to be a problem for other fans too.

Installation instructions assume you're proficient in using browsers and browser extensions, if you need further help, you can ask your friends or do your own research.

If you want to learn more about how this script works, here's a JavaScript guide and reference and the Tampermonkey documentation.

(See the end of the work for more notes.)

Work Text:

Installing the userscript

  1. Install a browser that supports extensions
  2. Install the Tampermonkey extension
  3. Create a new script using the Tampermonkey menu
  4. Replace the new script template with the script below
  5. Save the script (Ctrl+S or there's a save button in the menu)

Using the userscript

  1. To add another tag replacement: you can see where the list is, add a line that goes something like .replace('AO3 tag', 'Desired tag')
  2. To remove tags: just remove the line that has the tag, no other edits are needed
  3. If you need to see original tag names, you can hover over them, disable the script or navigate to their pages (it doesn't replace the headers, only links)

The userscript

Click to uncover (it's a bit long)
    
// ==UserScript==
// @name         [AO3] Declutter video creators' tags
// @version      0.4
// @description  Removes video creators' real (or extra) names from tags
// @homepage     https://www.ao3.icu/works/60422266
// @author       napdragon
// @namespace    https://www.ao3.icu/users/napdragon
// @tag          AO3
// @icon         https://www.ao3.icu/favicon.ico
// @match        *://*.www.ao3.icu/*
// @match        https://archiveofourown.gay/*
// @match        https://archive.transformativeworks.org/*
// @grant        none
// @run-at       document-body
// ==/UserScript==

(function() {
  declutter({
    tags: document.querySelectorAll('a.tag')
  })
  const workFilters = document.querySelector('#work-filters')
  if (workFilters) {
    const tagsToDeclutter = workFilters.querySelectorAll('.tags span:not([class])')
    declutter({
      tags: tagsToDeclutter,
      isFilter: true
    })
  }

  function declutter(options) {
    const { tags, isFilter } = options
    for (let tag of tags) {
      const oldTagText = tag.innerText
	  tag.title = oldTagText
      const shipSeparator = /&/.test(oldTagText) ? ' & ' : '/'
      if (isFilter) {
        const workCount = / \(\d+\)$/.exec(oldTagText)[0]
        const tagParts = oldTagText.slice(0, -workCount.length).split(shipSeparator)
        tag.innerHTML = tagParts.map(part => removeRealNames(part).trim()).join(shipSeparator) + workCount
      } else {
        const tagParts = oldTagText.split(shipSeparator)
        tag.innerHTML = tagParts.map(part => removeRealNames(part).trim()).join(shipSeparator)
      }
    }
  }

  function removeRealNames(tagText) {
    return tagText
      .replace('Charles | Grian', 'Grian')
      .replace('Martyn Littlewood | InTheLittleWood', 'Martyn | InTheLittleWood')
      .replace('Scott Major | Smajor1995', 'Scott | Smajor1995')
      .replace('Steffen Mössner | Docm77', 'Docm77')
      .replace('Oliver Brotherhood | Mumbo Jumbo', 'Mumbo Jumbo')
      .replace('Ryan | GoodTimesWithScar', 'GoodTimesWithScar')
      .replace('John Booko | BdoubleO100', 'BdoubleO100')
      .replace('Kris | ZedaphPlays', 'ZedaphPlays')
      .replace('Anthony Viviano | Bigbst4tz2', 'BigB')
      .replace('Anthony | Bigbst4tz2', 'BigB')
      .replace('Daniel M. | VintageBeef', 'VintageBeef')
      .replace('Arek Lisowski | Keralis', 'Keralis')
      .replace('Natalie Arnold | StressMonster101', 'StressMonster101')
      .replace('Katy | FalseSymmetry', 'FalseSymmetry')
      .replace('Viktor | Iskall85', 'Iskall85')
      .replace('Jevin | iJevin', 'iJevin')
      .replace('Pearl | PearlescentMoon', 'PearlescentMoon')
      .replace('Joe Hills | joehillssays', 'Joe Hills')
  }
})()

  

Notes:

Jevin's, Pearl's and Joe's tags are there just because they're too silly, "Pearl | PearlescentMoon" duh it's literally part of her username... My motivations for making this were only part "I have no idea who any of those people are" and mostly "I'm not reading all of that", long character tags get super annoying.

This script can also be used to replace any character tags with anything for any other purpose, it would be less reliable with other tag types. It might not work for characters whose names have & or /, I don't read fics with anyone whose names are like that and need replacing, so it doesn't account for those.

Obviously feel free to modify and share this code in any way.


Some minor updates I've made since publishing this script:

January 16th, 2025: remembered the archive.transformativeworks.org domain exists and added it to the script metadata too in case someone uses it.

July 15th, 2025: noticed Joe wasn't in the list here (apparently I'd never seen a Joe fanfic before I published this script for the first time... or did the canon tag change since?) so I had to add her... she's #1 in my heart :)

November 24th, 2025: updated the script metadata to look nicer and be more comprehensive and refactored the code a bit.

Series this work belongs to: