 #define LED_SETTINGS_1 CHIPSET, CLOCK_PIN_1, DATA_PIN_0, COLOR_ORDER
  */
 
+
+// EVERYTHING BELOW HERE WON'T CHANGE FOR A NORMAL PROJECT.
+
+
 #define EEPROM_SAVE_TIMEOUT_MS 5000
 #define EEPROM_START_POINTER_ADDR 0x0
 
-#define NUM_LEDS    18
-#define BASE_WIDTH  1
-// If true, adds 1 to BASE_WIDTH for every other row
-#define STAGGERED   false
-// Varies by NUM_LEDS to ensure not overloading SRAM
-#define MAX_FRAMES 64
-
 CRGB leds[NUM_LEDS];
+
+// Calculate max number of frames we can store in SRAM
+#define SRAM_SIZE 2048
+// Assume we need this much for everything else
+#define VAR_ALLOWANCE 600
+#define MAX_FRAMES ((SRAM_SIZE - VAR_ALLOWANCE) / NUM_LEDS)
 
 int width;
 int height;

    return;
  }
  if (!Serial.find("!")) {
    Serial.println("no !");
    return;
  }
  //Serial.println("found !");
  byte len;
  if (!Serial.readBytes(&len, 1)) {
    Serial.println("no len");
  }
  //Serial.print("len=");
  //Serial.println(len);
  if (!len) {
    // Special case: no length means primary is asking a question.
    byte question;
    if (!Serial.readBytes(&question, 1)) {
      Serial.println("no question");
    } else {
      if (question == 'D') {
        // Send dimensions.

    // Uses update() so only rewrites if necessary
    EEPROM.put(eepromStart, settings);
    saveTarget = 0;
    //Serial.println(F("SAVED!"));
  }
}

void restoreFromSettings() {
  /*Serial.print(F("settings: "));
  Serial.print(settings.brightness);
  Serial.print(',');
  Serial.print(settings.mode);
