{
  "_readme": "Seasonal edits live here. Anything marked PLACEHOLDER must be replaced with real details. Times are 24h HH:MM, local time. Day numbers: 0=Sun ... 6=Sat. Section switches live in 'show': set showSongs/showGallery/showStats to true when real content is ready.",
  "site": {
    "name": "The Lights of Christmas",
    "nameHighlight": "Christmas",
    "domain": "lightsofxmas.com",
    "tagline": "Lights and music celebrating the reason we celebrate: the birth of Jesus. Pull over safely, tune your radio, and enjoy.",
    "eyebrow": "A free Christmas light show in Wichita, Kansas",
    "fm": "89.5",
    "address": "1857 N Ridge Road, Wichita, KS 67212",
    "addressDetail": "Main show faces 18th Street",
    "mapsQuery": "1857 N Ridge Road, Wichita, KS 67212",
    "xHandle": "",
    "xUrl": "",
    "nowPlayingUrl": "/api/now-playing",
    "pollSeconds": 12,
    "idlePollSeconds": 120,
    "fmLabelFormat": "{fm} FM",
    "_mapsHelp": "Apple devices open Apple Maps; Android opens the default maps app via geo:; others open Apple Maps on the web.",
    "musicLede": "Music that tells the Christmas story, from timeless carols to the modern remix. Each song is sequenced by hand. Each night features a different playlist drawn from our full song lineup below, and it loops all evening.",
    "behindLede": "Months of planning, thousands of feet of wiring and cords, and a little computer called the BeagleBone Black that runs it all.",
    "addressShort": "1857 N Ridge Road",
    "addressCity": "Wichita, KS 67212",
    "livePollSeconds": 10,
    "fastPollSeconds": 2,
    "_pollHelp": "Not live: pollSeconds during show hours, idlePollSeconds otherwise. Live: livePollSeconds mid-song, fastPollSeconds from ~4 s before a song ends until the next song appears."
  },
  "season": {
    "rule": "thanksgiving-to-dec31",
    "label": "Thanksgiving through New Year's Eve",
    "note": "Christmas Eve & New Year's Eve until midnight",
    "_help": "Fixed every year: Thanksgiving night (4th Thursday of November) through New Year's Eve (Dec 31). Dates are computed in the browser (America/Chicago)."
  },
  "weatherNote": "The show runs just fine in the rain and hopefully snow! It's a complex setup, so now and then some lights or sections may be off. We'll get them back on as soon as we can.",
  "stats": [
    {
      "n": 14172,
      "label": "Pixels",
      "d": "Individually controlled smart lights"
    },
    {
      "n": 42518,
      "label": "Channels",
      "d": "Updated 40 times a second"
    },
    {
      "n": 2610,
      "u": "ft",
      "label": "Of cabling",
      "d": "So many extension cords."
    },
    {
      "n": 2,
      "label": "DMX universes",
      "d": "For the flood lights under the trees"
    },
    {
      "n": 15,
      "label": "Controllers",
      "d": "All driven by FPP 10"
    },
    {
      "n": 5500,
      "u": "W",
      "label": "Peak power",
      "d": "At full white... Sorry neighbors"
    },
    {
      "n": 600,
      "plus": true,
      "u": "hrs",
      "label": "Of programming",
      "d": "Every song sequenced by hand"
    },
    {
      "n": 1000,
      "plus": true,
      "label": "3D-printed parts",
      "d": "Including 7 custom designs"
    },
    {
      "n": "songs",
      "label": "Songs this season",
      "d": "Each one sequenced to the lights"
    }
  ],
  "statsPlaceholder": false,
  "behindTheScenes": {
    "steps": [
      {
        "title": "Design",
        "text": "Every arch, stick, and flood is mapped in software, so each pixel knows exactly where it sits on the property. We also design our own custom 3D models."
      },
      {
        "title": "Build",
        "text": "Every prop is built in the off-season and tested for quality, then installed each fall."
      },
      {
        "title": "Sequence",
        "text": "Each song is programmed by hand right here in our living room, 1/40th of a second at a time. A single four-minute song can take dozens of hours."
      },
      {
        "title": "Play",
        "text": "A BeagleBone Black with a Kulp controller runs the show every night, sending light data to the controllers and music to the transmitter."
      },
      {
        "title": "Broadcast",
        "text": "A small, low-power FM transmitter sends the music to your car radio on 89.5 FM, in sync with the lights."
      }
    ]
  },
  "faq": [
    {
      "q": "Is it free?",
      "a": "Yes. No tickets or reservations. Just come enjoy the show."
    },
    {
      "q": "Where exactly is it?",
      "a": "<b>1857 N Ridge Road, Wichita, KS 67212</b>. The main show faces <b>18th Street</b>, so that's the best side to watch from."
    },
    {
      "id": "faq-music",
      "q": "How do I hear the music?",
      "a": "Tune your car radio to <b>{fm} FM</b> as you approach. The signal is low-power and only reaches a short distance, so you'll pick it up best once you can see the lights. The main show faces <b>18th Street</b>."
    },
    {
      "q": "Where do I park?",
      "a": "The best spot is on <b>18th Street</b>, right where the main show faces. There's no off-road parking, so just pull over to the side of the street and settle in. When it's time to head home, simply continue west on 18th Street and make a right turn on Bittersweet Ln. This will take you right back to Ridge Road."
    },
    {
      "q": "Can I donate?",
      "a": "Thank you for asking! The show is our gift, so no donation is needed. If you'd like to give back, consider dropping a gift at a local food bank, toy drive, or your church's outreach."
    },
    {
      "q": "What if it's raining (or snowing)?",
      "a": "The show runs just fine in the rain and hopefully snow! It's a complex setup, so now and then some lights or sections may be off. We'll get them back on as soon as we can."
    },
    {
      "q": "Can I request a song?",
      "a": "Absolutely! Will it get sequenced? That's a much tougher question.\n\nEvery song in the show is hand-sequenced, and creating a single sequence usually takes 24-30 hours of work. Because of that, we have to be pretty selective about the music we choose and what ultimately makes the final show.\n\nWe still love hearing suggestions, though. If there's a song you'd like to see, send it through the contact form. While we can't guarantee it'll ever appear in the display, great ideas are always welcome and occasionally help shape future seasons."
    }
  ],
  "etiquette": [
    "<b>Make yourself at home on 18th Street.</b> There's no off-road parking, so just pull over to the side of the street, right where the main show faces.",
    "<b>Headlights off once you're parked</b>, so you and everyone around you get the full show.",
    "<b>Be kind to our neighbors.</b> Please refrain from using their driveways. A simple right turn just down the road will get you back to Ridge Road.",
    "<b>Tune to {fm} FM</b> and enjoy high quality audio! We dial in the transmitter for great sound, so your car speakers should be able to rock!"
  ],
  "gallery": [
    {
      "src": "img/snowy-trees.jpg",
      "cls": "big",
      "alt": "Snow-covered trees uplit in red, purple, green and blue by bucket lights",
      "caption": "Oops, this is our backyard. Still pretty"
    },
    {
      "src": "img/house-front.jpg",
      "cls": "wide",
      "alt": "Our house at night in the snow, with roofline pixel lights, glowing trees and green bulbs on the fence",
      "caption": "We love the snow!"
    },
    {
      "src": "img/red-glow.jpg",
      "alt": "A red glowing mega-bulb covered in about 4 inches of snow, with the lit fence and tree behind",
      "caption": "A red glowing mega-bulb with 4 inches of snow!"
    },
    {
      "src": "img/snowman.jpg",
      "cls": "pos-top",
      "alt": "Grandma's lit wire-frame snowman with a blue top hat, standing in the snow",
      "caption": "Grandma's Snowman"
    }
  ],
  "galleryPlaceholder": false,
  "show": {
    "showSongs": true,
    "showGallery": true,
    "showStats": true,
    "_help": "Songs: real list from Randy (Nov 4). Gallery: Randy's 4 real photos (metadata stripped). Stats: real numbers from Randy (Nov 4)."
  },
  "playlists": {
    "_help": "Internal reference only, never shown on the site: Randy's Playlist A/B/C membership per song (songs[].rotations: 1=A, 2=B, 3=C). Playlists have no set nights.",
    "rotations": [
      "1",
      "2",
      "3"
    ]
  },
  "_galleryHelp": "Real photos only. Run tools/process_photos.py (strips all metadata) to make img/<name>.jpg (1600px) and <name>-sm.jpg (800px), add {src, alt, cls: big|wide|pos-top} here, keep show.showGallery true.",
  "songs": [
    {
      "title": "A Holly Jolly Christmas",
      "artist": "Lady A",
      "len": "2:02",
      "rotations": [
        "2"
      ]
    },
    {
      "title": "Christmas Eve Sarajevo",
      "artist": "Trans-Siberian Orchestra",
      "len": "3:25",
      "rotations": [
        "1"
      ]
    },
    {
      "title": "Christmas This Year",
      "artist": "Toby Mac",
      "len": "3:30",
      "rotations": [
        "2"
      ]
    },
    {
      "title": "Ding Dong Merrily on High",
      "artist": "Rend Collective",
      "len": "1:57",
      "rotations": [
        "1"
      ]
    },
    {
      "title": "Dueling Jingle Bells",
      "artist": "US Navy Band",
      "len": "2:02",
      "rotations": [
        "3"
      ]
    },
    {
      "title": "Frosty the Snowman",
      "artist": "Safety Orange",
      "len": "2:40",
      "rotations": [
        "1"
      ]
    },
    {
      "title": "God Rest",
      "artist": "Awaken Music",
      "len": "3:58",
      "rotations": [
        "1",
        "2",
        "3"
      ],
      "isNew": true
    },
    {
      "title": "Here Comes Santa Claus",
      "artist": "Gene Autry",
      "len": "2:30",
      "rotations": [
        "3"
      ]
    },
    {
      "title": "Here We Come A-Wassailing",
      "artist": "Under the Streetlamp",
      "len": "2:26",
      "rotations": [
        "2"
      ]
    },
    {
      "title": "Joy to the World",
      "artist": "Mannheim Steamroller",
      "len": "3:34",
      "rotations": [
        "2"
      ]
    },
    {
      "title": "Joy to the World (Dubstep)",
      "artist": "Red Letter Hymnal",
      "len": "3:10",
      "rotations": [
        "3"
      ]
    },
    {
      "title": "Light of Christmas",
      "artist": "Owl City, Toby Mac",
      "len": "3:44",
      "rotations": [
        "1",
        "2",
        "3"
      ]
    },
    {
      "title": "Music Box Dancer",
      "artist": "DJ Schwede",
      "len": "3:13",
      "rotations": [
        "2"
      ]
    },
    {
      "title": "Oh Come All Ye Faithful",
      "artist": "Tenth Avenue North",
      "len": "2:47",
      "rotations": [
        "1"
      ]
    },
    {
      "title": "Wizards in Winter",
      "artist": "Trans-Siberian Orchestra",
      "len": "3:05",
      "rotations": [
        "3"
      ]
    }
  ],
  "hours": {
    "startAfterSunsetMin": 30,
    "end": "23:00",
    "lat": 37.718,
    "lon": -97.425,
    "tz": "America/Chicago",
    "_help": "Nightly from dusk (about 30 minutes after sunset) until 11:00 PM; lateNights (month/day) end later, 24:00 = midnight. Dusk is computed in the browser from sunset at lat/lon (NOAA formula, no API).",
    "lateNights": [
      {
        "m": 12,
        "d": 24,
        "end": "24:00"
      },
      {
        "m": 12,
        "d": 31,
        "end": "24:00"
      }
    ]
  },
  "etiquetteLede": "Ridge Road is busy and is the main way onto 18th Street, so 18th Street is the place to settle in and watch. A few friendly tips:",
  "_statsHelp": "n may be a number, or \"songs\" to count the songs list automatically. plus:true adds a '+'. u = unit.",
  "verses": [
    {
      "text": "For to us a child is born, to us a son is given; and the government shall be upon his shoulder, and his name shall be called Wonderful Counselor, Mighty God, Everlasting Father, Prince of Peace.",
      "ref": "Isaiah 9:6"
    },
    {
      "text": "The light shines in the darkness, and the darkness has not overcome it.",
      "ref": "John 1:5"
    },
    {
      "text": "For God so loved the world, that he gave his only Son, that whoever believes in him should not perish but have eternal life.",
      "ref": "John 3:16"
    }
  ],
  "thanks": "We're so grateful for our neighbors' support and grace every season. This show wouldn't be possible without them."
}
