Not sure if this already exists, I remember some talk about flippable tokens for characters that are lycanthropes. I was more interested in an easy way to do two side tokens for boardgames without going to rollable tables or decks. Decks would work great for a lot of games, but they can only have one graphic for a back. This is a very simple script and idea. It was written as a test to see how well it would work and if it might be useful for boardgames that need to flip a token. Could be used for tokens that have two different forms like a human/wererat. Very easy to use. The only requirement is you can't use the GMNotes for anything else. Eventually we could make it so you still could yuse the notes by incorporating some kind of header into the notes to tell the script where the paths are? GMNotes is where the path to the images are stored unless someone can think of a better place. You need to find the path to both graphics in your art library that you want to use by using your browser to inspect the graphic. You put both complete paths in the GMNotes separated by a space. If anyone needs help figuring out the paths just let me know, there is info on it in the Wiki API entries. Thats it. Then in the chat window you type !! 0 or !! 1. Of course this has potential to be upgraded a lot. You could have multiple sides, sides could have names instead of just a number, etc. If anyone thinks its useful I'll expand on it or if someone else wants to take the idea and run with it then of course you are welcome! Oh and there isn't any error checking and it works on the currently selected token. Of course we could add error checking and even have a popup to target which token you would like to flip. Possibilities are endless with this magical machine Riley has created!!! :) Well here it is, nice and simple. // Two Sided Tokens // // copyright pug games 2014 // please feel free to use this script, change it, add to it in any way you feel // Script created by Roll20 user Konrad J. var tstCONSTANTS = { TSTCOMMAND : "!!" }; function processTwoSidedToken(command, msg){ var token = getObj('graphic', msg.selected[0]._id); var tokenPathTemp1 = token.get("gmnotes"); var tokenPathTemp2 = toString(" "); var side = Number(command); tokenPathTemp2 = decodeURIComponent(tokenPathTemp1); var tokenPath = tokenPathTemp2.split(' '); token.set("imgsrc", tokenPath[side]); } on("chat:message", function(msg) { var chatCommand = msg.content; chatCommand = chatCommand.toLowerCase(); //make all characters lowercase if (msg.type != 'api') { return; } var argv = chatCommand.split(' '); switch(argv[0]) { case tstCONSTANTS.TSTCOMMAND: processTwoSidedToken(argv[1], msg); break; } });