rhythm.lighting docs
Search docs… ⌘K

Circadian engine

The model that decides what color and brightness your lights should be at any moment.

The engine is the thing that makes Rhythm different from a smart bulb app with a timer. It runs continuously on the LightHub and asks one question: given the time, your location, and the sun, what should every light in this home be doing right now?

What it does

On a periodic tick (about once a minute) the engine recomputes a target for each room based on:

  • Solar position at your latitude
  • Day of the year — winter light is different from summer light
  • The room's active light profile and mode (Day or Sleep)
  • Any manual offset you've dialed in (a brighter or warmer nudge that rides along with the curve)

It then sends each room a single command — brightness plus a color temperature — and the integration translates that into whatever the bulbs behind it understand.

Inputs

The engine is almost entirely a function of time and place. The only thing it needs from you is your location:

location:
  latitude     used for solar elevation and day length
  longitude    used to find true solar noon
  utc_offset   used to map solar time back to your wall clock

From those three numbers it derives sunrise, sunset, solar noon, and the twilight phases for today, then reads brightness and color off the curve at the current solar time. No cloud call, no account — the math runs locally on the hub.

Profiles and modes

A light profile is the curve plus its bounds. Rhythm ships two you'll actually select:

  • Day (rhythm) — the adaptive curve: cool and bright near noon, warm and dim toward dusk.
  • Sleep (sleep) — flat and off, for overnight.

Two more profiles run behind the scenes for soft-off / standby states — when a room times out on motion it dims to a 1% inherited glow rather than snapping to black. You don't pick those directly.

Modes are the home-wide context: the whole house is either in Day or Sleep. Each mode maps rooms to the right profile, and the house flips between them on a schedule — see Schedules.

Pluggable Profiles are data, not code paths. You can edit the bounds and curve shape, or — if you're running the open-source server — implement an entirely different curve. See Brightness curves.

Tuning

The knobs people reach for most, all per profile:

  • Warm floor — the lowest color temperature (default 1800K). Lower it if evenings still feel too blue.
  • Cool ceiling — the daytime peak (default 5500K).
  • Brightness floor / ceiling — default 20%100%.
  • Evening ramp width — how gently color and brightness fall after solar noon.

The autonomy switch

There's a single master switch — the light breaker — that governs whether the engine acts on its own at all. With it on (the default), Rhythm runs its periodic ticks and reacts to buttons and motion. Turn it off and the hub stays connected and answers the app, but stops driving the lights autonomously — useful when you want to take fully manual control for a while.