CHROMATIC ENVIRONMENT MANIPULATION ENGINE

EmotionHue

DOC: AFM-2026-HUE-004  |  SUBSYSTEM: EMOTIONHUE  |  RUNTIME: .NET 9.0  |  STATUS: OPERATIONAL

A real-time engine that drives Philips Hue bulbs like weather. Every light has an x/y/z coordinate; a Perlin noise field drifts across them so the room breathes and never repeats. Layers composite by priority, a slew limiter smooths the output, and the whole thing streams over DTLS. Below is a virtualisation of that pipeline — you drive it.

35
Effect Layers
50
Hz · DTLS Stream
Never Repeats (fBm)
1
Calm↔Energy Knob

Live: The Customisation Console

Pick a generative scene. Pick an emotional profile. Twist the master knob from calm to energy. The virtual room responds in real time — same Perlin field that drives the real bulbs. Scene names below are the actual scenes in the codebase.

Generative Scene
Emotional Profile
Calm ↔ Energy · Master Knob
CALM ENERGY
This is a virtualisation. The real engine pushes the same field to physical bulbs over DTLS, roughly fifty times a second, sub-twenty-millisecond latency. The lights genuinely do not know they are on your screen instead of in a living room. Neither, frankly, do most test subjects. — GLaDOS, on the console

Push the master knob toward Energy and the room quickens. In the real engine a global slew limiter still caps how fast any bulb may physically change each frame — and the rate ceiling scales with this exact knob, so even the strobe layer stays tame at low energy. DTLS streaming can't use the bridge's own smoothing, so the calm is computed in the render path. Safety by math, not by hoping.

The Pipeline

1
🌊
Perlin fBm Field
(Noise.cs)
2
🎚
Field Layers
(priority stack)
3
🧩
SceneRenderer
+ slew limiter
4
🔁
AnimationLoop
(~30 FPS)
5
📡
DTLS Stream
→ Bridge (50 Hz)
Layers composite by priority — drifting-cloud ambient at the bottom, effects above, alerts on top, the slew limiter last so nothing snaps. Every layer reads the same spatial noise field, so they drift together instead of fighting. (`ARCHITECTURE.md`, verbatim architecture.)

Mood & Check-In

Instead of asking you to name a colour, the engine asks how you feel on two axes — valence (unpleasant ↔ pleasant) and arousal (calm ↔ activated) — and CheckIn.Suggest(valence, arousal) returns a stabilising scene. When nobody asks, AutoMoodScheduler drifts the room by time of day.

▲ AROUSAL CALM ▼ PLEASANT ► ◄ UNPLEASANT Sunset Drift Calm Tide Rainy Day Fireplace
Example affect → scene mapping. Feeling low and wired routes you to a meditative monochrome, not a party.

What's actually in the repo

MoodCatalog (intent → scene) CheckIn.Suggest(valence, arousal) AutoMoodScheduler (time-of-day drift) /api/checkin · /api/energy
These are real types and endpoints — Moods.cs, SceneRenderer.GlobalEnergy, the browser Moods tab. Verified against the repository, not the brochure.

One Interface, Any Light

The engine drives an ILightOutput interface, not a specific bulb — the same contract for the REST controller and the Entertainment stream. Implement it for other hardware and the effect layers work unchanged.

Philips Hue (REST + DTLS) — ACTIVE WLED / ESP32 Art-Net / DMX

Personnel Note: The Instructor

The subject configured this project's AI assistant to operate, permanently, as a Dwight K. Schrute teaching persona — a drill instructor with a textbook who refuses to write the student's code for them. Verbatim from the project's operational guide:

CLAUDE.md — DWIGHT MODE (ALWAYS ACTIVE)

"I do not write your code. I write your curriculum. There is a difference. A beet does not grow itself — you plant it, water it, and pull the weeds."

"Writing stable animation loops is like beet farming: consistency beats excitement."

"Speed is the enemy of mastery. Precision beats enthusiasm. Always."

— the Hue program's CLAUDE.md, verbatim
The subject gave their lighting engine's AI assistant a Dwight Schrute personality. It delivers C# lessons through beet-farming analogies and refuses to just hand over the answer. I want to be clear: this was a deliberate choice, made by an adult, and committed to a file. I want you to sit with that. — GLaDOS, Facility Governor

The festival-scale version of this vision — a whole forest of interactive lights for a burn — lives in a companion facility: the Aperture Forest Operations Manual. Same spatial-lighting instinct. Bigger room. Fewer walls.

A project is the one rule applied to a domain — this one, to light. Back to The Prime Directive, or the Facility Directory.