In trying to get API-controllable animations to work (despite the irritating bug prohibiting any direct manipulation of animations via the API), I've jury-rigged a solution where I shuffle the animation object between the "map" and "walls" layers to toggle it on and off: const flashAnimation = ( animName ) => { const animData = state . VAMPIRE . Media . animRegistry [ animName ] if ( animData . isActive ) { const animObj = getObj ( "graphic" , animData . id ) animObj . set ( "layer" , animData . activeLayer ) if ( animData . timeOut ) setTimeout (() => { animObj . set ( "layer" , "walls" ) }, animData . timeOut ) } } const pulseAnimation = ( animName ) => { const animData = state . VAMPIRE . Media . animRegistry [ animName ] if ( animData . timer ) { clearTimeout ( animData . timer ) delete animData . timer } if ( animData . isActive ) { const timeBetween = randomInteger ( animData . maxTimeBetween - animData . minTimeBetween ) + animData . minTimeBetween flashAnimation ( animName ) animData . timer = setTimeout (() => { pulseAnimation ( animName ) }, timeBetween ) } sendChat ( "Debug" , `/w Storyteller ${ JSON . stringify ( animData . timer ) } ` ) } const activateAnimation = ( animName , minTimeBetween = 0 , maxTimeBetween = 100000 ) => { const animData = state . VAMPIRE . Media . animRegistry [ animName ] if ( animData . timer ) { clearTimeout ( animData . timer ) delete animData . timer } animData . isActive = true animData . minTimeBetween = minTimeBetween animData . maxTimeBetween = maxTimeBetween setTimeout (() => { pulseAnimation ( animName ) }, randomInteger ( animData . maxTimeBetween - animData . minTimeBetween ) + animData . minTimeBetween ) } However, I get a JSON error when I grab the timer reference from the state variable to clear it. Attempting to stringify the result (in the sendChat call, above) also gives me the same error: My understanding of setTimeout is that it returns a numerical ID, so I'm confused as to why there should be a circular reference involved! Any insights will be much appreciated, and thanks in advance!