Hi Aaron,  Here's the script I think David is talking about (thanks for the ping!):  on('ready',()=>{
  const scriptName = 'RandomLightFlash';
  const version = '0.1.0';
  const schemaVersion = 0.1;
  const lastUpdate = 1643732108;
  const CHANGE_MIN = 5;
  const CHANGE_MAX = 7;
  
  const EmitPattern = [[0,2.5],[2.5,5],[5,10],[5,5],[2.5,5],[0,2.5]];
  const PHASE_DELAY = 100;
  const checkInstall = () => {
    log(`-=> ${scriptName} v${version} <=-  [${lastUpdate}]`);
    if (
      !state.hasOwnProperty(scriptName) ||
      state[scriptName].version !== schemaVersion
    ) {
      log(`  > Updating Schema to v${schemaVersion} <`);
      switch (state[scriptName] && state[scriptName].version) {
        case 0.1: 
            /* break; // intentional dropthrough */ /* falls through */
		case "UpdateSchemaVersion":
          state[scriptName].version = schemaVersion;
          break;
        default:
          state[scriptName] = {
            version: schemaVersion,
            options: {},
            tokenMap: {}
          };
          break;
      }
    }
  };
  const flashToken = (t) => {
    t.set({
      emits_bright_light: true,
      emits_low_light: true,
    });
    let phases = [...EmitPattern];
    const burndown = () => {
      let phase = phases.shift();
      if(phase){
        t.set({
          bright_light_distance: phase[0],
          low_light_distance: phase[0]+phase[1]
        });
        setTimeout(burndown,PHASE_DELAY);
      } else {
        t.set({
          emits_bright_light: false,
          emits_low_light: false,
          bright_light_distance: 0,
          low_light_distance: 0
        });
      }
    };
    burndown();
  };
  const checkTokens = () => {
    let now = Date.now();
    Object.keys(state[scriptName].tokenMap).forEach(t=>{
      if(state[scriptName].tokenMap[t].nextChange < now){
        let token = getObj('graphic',t);
        if(token){
          flashToken(token);
          state[scriptName].tokenMap[t].nextChange = now + (CHANGE_MIN + randomInteger(CHANGE_MAX-CHANGE_MIN))*1000;
        } else {
          delete state[scriptName].tokenMap[t];
        }
      }
    });
  };
  let interval = setInterval(checkTokens,1000);
  on('chat:message',msg=>{
    if('api'===msg.type && /^!toggle-flashing(\b\s|$)/i.test(msg.content) && playerIsGM(msg.playerid)){
      let who = (getObj('player',msg.playerid)||{get:()=>'API'}).get('_displayname');
      let now = Date.now();
      (msg.selected || [])
        .map(o=>getObj('graphic',o._id))
        .filter(g=>undefined !== g)
        .forEach(token=>{
          if(state[scriptName].tokenMap.hasOwnProperty(token.id)){
            delete state[scriptName].tokenMap[token.id];
          } else {
            state[scriptName].tokenMap[token.id] = {
              nextChange: now + (CHANGE_MIN + randomInteger(CHANGE_MAX-CHANGE_MIN))*1000
            };
          }
        })
        ;
    }
  });
  checkInstall();
});
     Just select tokens you want to have as your emitters and run:  !toggle-flashing  Those tokens will then begin emitting UDL flashes every 5-7 seconds.  Cheers!