Skip to content

httsai1979/Interactive_Lighting_Design

Repository files navigation

ACOfusion Interactive Lighting Lab

Photo-to-App Spec – Desktop v2.2(Single-File, Text-Assisted)


0. 目標重申

  1. 每次使用時,我會提供:
    • 一張室內照片(用來當參考或背景)
    • 一段「PHOTO_DESCRIPTION」文字(描述這張照片的空間與需求)
  2. 你(Codex)必須依照本規格:
    • 產生 一個獨立、完整、可直接打開的單一 HTML 檔
    • 保證以下功能 100% 正常可用:
      • 3 種燈具(track / downlight / strip),總數 ≤ 16
      • 四種場景(S1 Normal / S2 Hero / S3 Soft / S4 Night)
      • Minimap / Snapshots / Data Sheet / False Color / CAD / Undo / Redo
  3. 每次產出的 HTML 檔都 彼此獨立,不相依前一個版本。

1. 新增輸入格式:PHOTO_DESCRIPTION

因為你(Codex)很難直接理解圖片內容,所以我會用下列格式先幫你整理照片資訊,你要把這段文字當成「照片分析結果」,而不是自己亂猜。

1.1 PHOTO_DESCRIPTION 範本

每次我會貼給你一段像這樣的文字(可以中文):

PHOTO_DESCRIPTION:
- 空間類型: Retail / Bar / Office / Restaurant / Gallery / Mixed
- 主要視角: 從入口往內看 / 從吧台看向座位區 / 從長桌一端往另一端看...
- 平面結構: 長型空間 / 方形 / L 型 / 有一個中島 / 左側是吧台右側是座位...
- 重要物件與區域:
  - 中央有一張 3m 長的餐桌
  - 右側整面是展示牆,掛了三幅畫
  - 左側是吧台,後方是酒瓶牆
- 照片給人的亮度感覺: 偏暗 / 中等 / 很亮
- 照片給人的色溫感覺: 很暖 (約 2700K) / 中性 (3000–3500K) / 偏冷 (4000K+)
- Hero 物件: 例如 中央餐桌 + 右側畫作牆
- 我希望的燈光重點: 例如
  - 桌面要很明顯,背景不要太亮
  - Logo 牆要很亮,走道一般即可
你(Codex)要把這段文字解析成一個 photoAnalysis 物件(可以 JS 物件或註解),用來驅動幾何與燈光配置。

2. 三種燈具 & 16 盞限制(不變)
2.1 燈具種類
只允許:

track(軌道燈)

downlight(崁燈)

strip(LED 燈帶 / 間接光)

2.2 數量限制
STATE.fixtures.length <= 16

若需要更多光源,只能透過 baked light 不進入 UI 控制。

2.3 光學 / 機械規格(不變)
track

beam:6–55°

shape:'spot' | 'oval'

ovalSpin:0–180°

pan:-180–180°

tilt:0–90°

lumens:0–6000

cct:2000–6500K

downlight

beam:6–55°(UI 同,內部可 clamp)

shape:'spot' | 'oval'

tilt:-20–+20°

spin:0–360°

lumens:0–4000

cct:2000–6500K

strip

intensity:0–100%

cct:2000–6500K

3. 三層燈光與四場景(不變)
3.1 Layer
Layer A:Ambient / strip

Layer B:Task / downlight

Layer C:Accent / track

3.2 四場景 Archetypes
同 v2.1:

S1:Normal / Operation

S2:Hero / Focus / Event

S3:Soft / Intimate

S4:Night / Clean / Security

你要依 PHOTO_DESCRIPTION 判斷具體名稱,但邏輯不變。

4. Desktop UI 骨架(不變)
所有 HTML 必須包含:

#canvas-container

Top bar(品牌 + Lux + Undo/Redo)

Top-center Scenario bar(四顆按鈕)

#minimap-container

右側 #control-panel(含 Scenes / Fixtures / Light Engine / Environment / Data)

下方 #dock 工具列(Camera / CAD / False Color / Data / Snapshot / Reset)

風格維持 Apple / Glassmorphism,一樣可以沿用你最穩定那一版的 CSS。

5. 資料結構 & 函式(不變)
使用前一版 v2.1 的 STATE 結構與必須函式清單:

STATE.fixtures[] with type/zone/params

STATE.coveInt, STATE.coveCCT

init(), applyScenario(), saveSnapshot(), restoreSnapshot(),
selLight(), selGroup(), updParam(), updEnv(), drawMinimap(),
toggleCAD(), toggleFalseColor(), toggleDataView(), undo(), redo()

這些 一律不得刪除,只能在「安全區域(Safe Zones)」修改場景數值與燈具配置。

6. Photo → App 流程(改為「文字輔助」版)
6.1 Step 0 – 解析 PHOTO_DESCRIPTION → photoAnalysis
你必須讀取我給的 PHOTO_DESCRIPTION 文字,生成一個結構類似:

js
複製程式碼
const photoAnalysis = {
  spaceType: 'retail' | 'bar' | 'office' | 'restaurant' | 'gallery' | 'mixed' | 'generic',
  layout: 'long' | 'square' | 'L' | 'with_island' | 'with_bar_left' | 'with_wall_right' | ...,
  zones: [
    { id: 'center', type: 'table', importance: 'hero' },
    { id: 'right-wall', type: 'display_wall', importance: 'high' },
    { id: 'left-side', type: 'secondary', importance: 'medium' },
    { id: 'corridor', type: 'circulation', importance: 'low' }
  ],
  brightness: 'dark' | 'medium' | 'bright',
  cctFeeling: 'warm' | 'neutral' | 'cool',
  heroTargets: ['center', 'right-wall'],
  userIntent: '桌面很亮、背景柔和' // 可存在註解中
};
你可以在 JS 裡以註解方式寫出這段分析,方便閱讀。

6.2 Step 1 – 選擇模板 & 幾何
根據 photoAnalysis.spaceType 選擇模板:

retail / gallery → Retail/Gallery 模板

bar → Bar 模板

restaurant → Restaurant 模板

office / hq → Office/HQ 模板

其他 → Generic Production 模板

buildRoomGeometryFromTemplate(photoAnalysis) 要:

根據 layout 做簡單幾何(房間、牆、桌、吧台…)

為每個 zones[i] 給 3D 座標(中心點)。

6.3 Step 2 – 建立 fixtures(≤16 盞)
buildInitialFixturesFromTemplate(photoAnalysis) 要:

根據 spaceType 決定大致配比(track vs downlight vs strip)。

依 zones 的 importance 決定哪裡放 track / downlight:

importance: 'hero' → 至少 1–2 盞 track

display_wall → 連續的 track 沿牆

table → downlight + 少量 track

強制檢查:fixtures.length <= 16。

每盞燈自動 aim 到某個 zone 的 center(或 zone 內的特定點)。

6.4 Step 3 – 從 brightness / cctFeeling 推出 S1
根據:

brightness:

dark → S1 lumens 整體提高

bright → S1 lumens 稍降

cctFeeling:

warm → S1 CCT ~ 2700–3000K

neutral → 3000–3500K

cool → 4000–5000K

S1 = 照片給人的「現在」感覺。
S2 / S3 / S4 在此基礎上做對比與層次變化。

6.5 Step 4 – 定義四個場景與按鈕文字
建立:

js
複製程式碼
const SCENES = { s1: {...}, s2: {...}, s3: {...}, s4: {...} };
S1 = Normal / Operation(貼近照片)

S2 = Hero / Focus(Hero zones 增亮、收窄 beam、可能色溫略冷)

S3 = Soft / Intimate(全場變暗、strip 增加、色溫變暖)

S4 = Night / Clean / Security(依 spaceType 決定是打掃模式還是 security)

Top-center 按鈕文字要依 spaceType 對應,例如:

Retail: Welcome / Focus / Soft / Night

Bar: Lounge / Party / Intimate / Clean

Restaurant: Lunch / Chef's Table / Dinner / After Hours

Office: Workday / Event / Evening / Night

7. Self-Test(自我檢查 – 確保功能沒壞)
在 startApp() 執行完 UI 綁定後,要跑一個 selfTest():

檢查:

DOM:

#canvas-container, #top-bar, #scenario-bar, #minimap-container, #control-panel, #dock 是否存在。

函式:

applyScenario, saveSnapshot, restoreSnapshot, selLight, selGroup, drawMinimap, toggleCAD, toggleFalseColor, toggleDataView, undo, redo 是否存在且為 function。

fixtures:

STATE.fixtures 為 array,長度 ≤ 16。

每個 fixture 具備必需欄位(type / params.lumens / params.cct / params.beam / params.shape)。

若失敗:

在畫面右上顯示紅色 badge:「Self-Test Failed」。

在 console.log 清楚指出失敗項目。

這樣至少可以在你打開 HTML 的第一秒就知道「功能是不是完整」。

8. 給 Codex 的最終指令範本
使用時,你可以這樣對 Codex 說(這整段當成 prompt):

text
複製程式碼
你是一個專門替 ACOfusion 建置「互動室內燈光模擬 APP」的程式碼引擎。

以下是 ACOfusion Interactive Lighting Lab – Photo-to-App Spec – Desktop v2.2。
(此處貼上整份 v2.2 規格)

我現在給你一段 PHOTO_DESCRIPTION,請你依照這份 v2.2 規格:
1. 解析 PHOTO_DESCRIPTION → photoAnalysis。
2. 選擇適合的空間模板與幾何。
3. 配置最多 16 盞燈(只用 track / downlight / strip)。
4. 建立三層燈光與四個場景(S1–S4)。
5. 複製你最穩定的一版核心 engine,保留所有功能:Minimap / Snapshots / Data Sheet / False Color / CAD / Undo / Redo。
6. 產出一個完整的單一 HTML 檔案(包含 <html>、<head>、<style>、<body>、<script>),我可以直接存成 .html 並在瀏覽器打開使用。
7. 啟動時執行 selfTest(),若有錯誤請在畫面顯示紅色警示並在 console.log 出詳細訊息。

PHOTO_DESCRIPTION:
(這裡換成你實際這張照片的描述)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages