docs: revise design + roadmap for single pano projector
Operator decision (2026-06-04): single panoramic projector spanning the three walls showing the real selected video (nature-video focus), replacing four projectors + a procedural side-wall renderer. - Design spec: revision banner; updated §1, §6 (one pano projector), §7 (procedural side walls REMOVED), §10 layout, §12 open questions. - ROADMAP: sub-project 5 marked Dropped; diagram + dependency order updated; §3 player drives one pano output; cross-cutting decisions reconciled. - Sub-project-2 spec: follow-up note updated to past tense (design spec done). dominant_color's only consumer was the side walls, so it stays optional/opt-in in the sub-project-2 tooling (already specced). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+33
-29
@@ -17,10 +17,12 @@ Design reference: [`specs/2026-06-04-human-experience-filter-design.md`](./super
|
||||
| 2 | Ingest & Tagging / Review tools | ⏳ Next | a real library |
|
||||
| 3 | Player Runtime (Pi) | ◻ Not started | the room runs |
|
||||
| 4 | Arduino Firmware (control panel)| ◻ Not started | real knobs |
|
||||
| 5 | Procedural Side Walls | ◻ Not started | full immersion |
|
||||
| 5 | ~~Procedural Side Walls~~ | ❌ Dropped | — (superseded) |
|
||||
|
||||
**Dependency order:** 1 → 2, and 1 → 3. Sub-projects 3 and 4 share a serial
|
||||
protocol contract and can then proceed in parallel. 5 depends on 3.
|
||||
protocol contract and can then proceed in parallel. Sub-project 5 was **dropped**
|
||||
(2026-06-04): the move to a single panoramic projector showing real video across
|
||||
the three walls removes the procedural side walls — see the design spec §6/§7.
|
||||
|
||||
```
|
||||
┌─────────────────────────┐
|
||||
@@ -29,15 +31,17 @@ protocol contract and can then proceed in parallel. 5 depends on 3.
|
||||
│
|
||||
┌───────────┴───────────┐
|
||||
▼ ▼
|
||||
┌───────────────┐ ┌─────────────────┐
|
||||
│ 2. Ingest / │ │ 3. Player │
|
||||
│ Review │─────▶│ Runtime (Pi) │
|
||||
└───────────────┘ feeds└───┬─────────┬────┘
|
||||
(fills catalog) │ │
|
||||
serial ▼ ▼ mood+color
|
||||
┌────────────────┐ ┌──────────────────┐
|
||||
│ 4. Firmware │ │ 5. Side Walls │
|
||||
└────────────────┘ └──────────────────┘
|
||||
┌───────────────┐ ┌─────────────────────┐
|
||||
│ 2. Ingest / │ │ 3. Player Runtime │
|
||||
│ Review │─────▶│ (Pi) → 1 pano │
|
||||
└───────────────┘ feeds│ projector │
|
||||
(fills catalog) └──────────┬──────────┘
|
||||
serial ▼
|
||||
┌────────────────┐
|
||||
│ 4. Firmware │
|
||||
└────────────────┘
|
||||
|
||||
(5. Procedural Side Walls — dropped 2026-06-04, single pano projector)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -91,7 +95,7 @@ files on the drive.
|
||||
## 3. Player Runtime (Pi) ◻
|
||||
|
||||
**Goal:** the thing that makes the room run — read the controls, pick media, play
|
||||
it on the primary wall.
|
||||
it across the single panoramic projector.
|
||||
|
||||
**Delivers (`player/`):**
|
||||
|
||||
@@ -99,8 +103,8 @@ it on the primary wall.
|
||||
- Call `hef.selection.select()` on each change; loop the chosen 5–15 min segment
|
||||
until the knobs move; **crossfade** on change.
|
||||
- `None` mode → fade to black + silence.
|
||||
- Drive the **primary** projector; emit current `dominant_color` + dark/light to
|
||||
the side-wall renderer (sub-project 5).
|
||||
- Drive the **single panoramic projector** spanning the three walls with the real
|
||||
selected video (no primary/side split; no side-wall feed — sub-project 5 dropped).
|
||||
|
||||
**Depends on:** sub-project 1 (`select`); a populated catalog from sub-project 2
|
||||
to be meaningful, but can be developed against a hand-authored catalog and a
|
||||
@@ -134,20 +138,17 @@ a serial monitor) and the Pi player reacts.
|
||||
|
||||
---
|
||||
|
||||
## 5. Procedural Side Walls ◻
|
||||
## 5. ~~Procedural Side Walls~~ ❌ Dropped (2026-06-04)
|
||||
|
||||
**Goal:** make the mood axis physically felt in peripheral vision.
|
||||
**Superseded.** The move to a single panoramic projector showing the real selected
|
||||
video across the three walls (design spec §6/§7) removes the procedural ambient
|
||||
renderer entirely — the mood axis is felt through the chosen content itself. With
|
||||
it goes the only consumer of `dominant_color`, which becomes optional/opt-in in
|
||||
the ingest tooling (sub-project 2 spec §5.2).
|
||||
|
||||
**Delivers (`sidewalls/`):**
|
||||
|
||||
- Render a slow color wash on the three non-primary walls: **hue** from the
|
||||
playing piece's `dominant_color`, **brightness** from the dark/light knobs.
|
||||
- Fade to black in `None` mode.
|
||||
|
||||
**Depends on:** sub-project 3 emitting current `dominant_color` + mood state.
|
||||
**Done when:** given a color + mood input stream, the wash renders and tracks
|
||||
changes — testable headless by snapshotting rendered frames.
|
||||
**Open decisions:** runs on the primary Pi's extra outputs vs. a second Pi.
|
||||
> *Original goal (for the record): render a slow color wash on the three
|
||||
> non-primary walls — hue from the playing piece's `dominant_color`, brightness
|
||||
> from the dark/light knobs — to make the mood axis felt in peripheral vision.*
|
||||
|
||||
---
|
||||
|
||||
@@ -156,7 +157,10 @@ changes — testable headless by snapshotting rendered frames.
|
||||
Carried from the design spec's open-questions list — none block sub-project 2:
|
||||
|
||||
- **Serial protocol framing** between Arduino and Pi (needed before 3 ⇄ 4).
|
||||
- **Player stack** on the Pi (mpv / ffmpeg / custom).
|
||||
- **Side walls** on the primary Pi vs. a second Pi.
|
||||
- **Player stack** on the Pi (mpv / ffmpeg / custom) and how the single panoramic
|
||||
output is driven.
|
||||
- **`approved`-only enforcement** in the player.
|
||||
- **Media storage layout** on the drive (how `file_path` values are rooted).
|
||||
- ~~**Side walls** on the primary Pi vs. a second Pi~~ — resolved: side walls dropped.
|
||||
- ~~**Media storage layout** on the drive~~ — settled by the sub-project-2 spec
|
||||
§6.3: media under a `media-root`, `file_path` stored relative to it; the player
|
||||
joins it with its drive mount.
|
||||
|
||||
Reference in New Issue
Block a user