This worked perfectly!!! I should have read through the comments a bit more for the attribute, so that was a good catch. I am a bit curious what caused those errors, though. Thank you so much for your help! timmaugh said: Hey, Cina... I figured out that error (and a couple others). Here is the reworked script from that link. This works for me in my game: on('change:token:rotation',(obj) => { let tok = obj; //Unless there is an attribute "Rotateable?" with the current value is set to "Yes" it will not attempt to change token image. if(tok.get('represents') == "" || (findObjs({ type: 'attribute', characterid: tok.get('represents'), name: 'Rotateable?'})[0] || {get: () => ''}).get('current').toLowerCase() !== 'yes') { return; } //Make sure token rotation does not exceed 360 for simplification reasons. let rot = ((tok.get('rotation') % 360) + 360) % 360; log(rot); if (rot !== tok.get('rotation')) { tok.set('rotation', rot); }; //Make an array of the sides from the token, making them usable by ".set()" so the api //wont complain it's not a thumb or in your library. //log(tok.get("sides")); let sides = tok.get('sides') .split(`|`) .map(s => s.replace(`%3A`, `:`) .replace(`%3F`, `?`) .replace(`med`, `thumb`) ); //Set the image based on 90 degree rotations. if (rot < 90) { tok.set({imgsrc: sides[0], currentSide: 0}); } //Back else if (rot < 180) { tok.set({imgsrc: sides[1], currentSide: 1}); } //Back else if (rot < 270) { tok.set({imgsrc: sides[2], currentSide: 2}); } //Back else { tok.set({imgsrc: sides[3], currentSide: 3}); } //Left });