 // Some base delay times
 uint16_t loopDelay = 10;     // Time (ms) between calls to animation function
 uint16_t holdTime = 50;      // Time (ms) delay at the end of some back-n-forth functions (e.g. bounce)
-
+bool repeat = true;          // Repeat the animations. If false, they complete once then stop
 
 // XXXXXXXXXX  DON'T CHANGE ANYTHING BELOW THIS IN THIS FILE  XXXXXXXXXX
 

        loopDelay = tmpLoopDelay;
      }
    }
    if (results.size() == 4) {
      // if there's a fourth param, it will be the holdTime
      char *tmpHoldTimeChar = const_cast<char*>(results[3].c_str());
      uint16_t tmpHoldTime = atoi(tmpHoldTimeChar);
      if (tmpHoldTime > 0) {
        holdTime = tmpHoldTime;
      }
    }
  }

  if (results.size() >= 2) {
    // results[1] should be a function name
    char *theFunction = const_cast<char*>(results[1].c_str());
    if (strstr(valid_functions, theFunction)) {
      saveCurrentAnimation(theFunction);
    }
