An API script could do this, but otherwise I don't think there's any way for players to interact with the map layer. Here's an example - a player just types !delTok into chat (not case sensitive): on('ready', () => { on('chat:message', (msg) => { if (msg.type === 'api' && msg.content.match(/^!delTok/i)) { let playerId = msg.playerid; let pageId = Campaign().get('playerpageid'); let regex = new RegExp(`(${playerId}|all)`); let tokens = findObjs({type: 'graphic', subtype: 'token', layer: 'map', pageid: pageId}); if (tokens) tokens.forEach(t => { if (t.get('controlledby').match(regex)) { t.remove(); } else { let charId = t.get('represents'); if (charId) { let charControl = getObj('character', charId).get('controlledby'); if (charControl.match(regex)) t.remove(); } } }) } }) }) This will also delete tokens with "all players" control. If you don't want that to happen, just change line 6 to: let regex = new RegExp(playerId); This will check both the token controlledby settings, and the character sheet controlledby setting if the token is linked to one.