@vib3code/sdk 2.0.1 → 2.0.3-canary.0a63e71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +245 -0
  3. package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
  4. package/DOCS/ARCHITECTURE.md +1 -0
  5. package/DOCS/CI_TESTING.md +2 -0
  6. package/DOCS/CLI_ONBOARDING.md +3 -1
  7. package/DOCS/CONTROL_REFERENCE.md +2 -0
  8. package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +119 -0
  9. package/DOCS/ENV_SETUP.md +2 -0
  10. package/DOCS/EPIC_SCROLL_EVENTS.md +775 -0
  11. package/DOCS/EXPANSION_DESIGN.md +979 -0
  12. package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
  13. package/DOCS/EXPORT_FORMATS.md +2 -0
  14. package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
  15. package/DOCS/HANDOFF_LANDING_PAGE.md +156 -0
  16. package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +495 -0
  17. package/DOCS/LICENSING_TIERS.md +2 -0
  18. package/DOCS/MASTER_PLAN_2026-01-31.md +4 -2
  19. package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +939 -0
  20. package/DOCS/OBS_SETUP_GUIDE.md +2 -0
  21. package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
  22. package/DOCS/PRODUCT_STRATEGY.md +65 -0
  23. package/DOCS/PROJECT_SETUP.md +2 -0
  24. package/DOCS/README.md +105 -0
  25. package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +99 -0
  26. package/DOCS/RENDERER_LIFECYCLE.md +2 -0
  27. package/DOCS/REPO_MANIFEST.md +2 -0
  28. package/DOCS/ROADMAP.md +113 -0
  29. package/DOCS/SCROLL_TIMELINE_v3.md +271 -0
  30. package/DOCS/SITE_REFACTOR_PLAN.md +102 -0
  31. package/DOCS/STATUS.md +26 -0
  32. package/DOCS/SYSTEM_INVENTORY.md +37 -32
  33. package/DOCS/TELEMETRY_EXPORTS.md +2 -0
  34. package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +87 -0
  35. package/DOCS/VISUAL_ANALYSIS_FACETAD.md +135 -0
  36. package/DOCS/VISUAL_ANALYSIS_SIMONE.md +97 -0
  37. package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +88 -0
  38. package/DOCS/WEBGPU_STATUS.md +121 -38
  39. package/DOCS/XR_BENCHMARKS.md +2 -0
  40. package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -0
  41. package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -0
  42. package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -0
  43. package/DOCS/archive/SESSION_014_PLAN.md +1 -0
  44. package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -0
  45. package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -0
  46. package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -0
  47. package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -0
  48. package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +3 -1
  49. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +233 -0
  50. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +129 -0
  51. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +144 -0
  52. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +110 -0
  53. package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +310 -0
  54. package/DOCS/dev-tracks/README.md +12 -0
  55. package/README.md +26 -13
  56. package/cpp/CMakeLists.txt +236 -0
  57. package/cpp/bindings/embind.cpp +269 -0
  58. package/cpp/build.sh +129 -0
  59. package/cpp/geometry/Crystal.cpp +103 -0
  60. package/cpp/geometry/Fractal.cpp +136 -0
  61. package/cpp/geometry/GeometryGenerator.cpp +262 -0
  62. package/cpp/geometry/KleinBottle.cpp +71 -0
  63. package/cpp/geometry/Sphere.cpp +134 -0
  64. package/cpp/geometry/Tesseract.cpp +94 -0
  65. package/cpp/geometry/Tetrahedron.cpp +83 -0
  66. package/cpp/geometry/Torus.cpp +65 -0
  67. package/cpp/geometry/WarpFunctions.cpp +238 -0
  68. package/cpp/geometry/Wave.cpp +85 -0
  69. package/cpp/include/vib3_ffi.h +238 -0
  70. package/cpp/math/Mat4x4.cpp +409 -0
  71. package/cpp/math/Mat4x4.hpp +209 -0
  72. package/cpp/math/Projection.cpp +142 -0
  73. package/cpp/math/Projection.hpp +148 -0
  74. package/cpp/math/Rotor4D.cpp +322 -0
  75. package/cpp/math/Rotor4D.hpp +204 -0
  76. package/cpp/math/Vec4.cpp +303 -0
  77. package/cpp/math/Vec4.hpp +225 -0
  78. package/cpp/src/vib3_ffi.cpp +607 -0
  79. package/cpp/tests/Geometry_test.cpp +213 -0
  80. package/cpp/tests/Mat4x4_test.cpp +494 -0
  81. package/cpp/tests/Projection_test.cpp +298 -0
  82. package/cpp/tests/Rotor4D_test.cpp +423 -0
  83. package/cpp/tests/Vec4_test.cpp +489 -0
  84. package/docs/webgpu-live.html +1 -1
  85. package/package.json +41 -30
  86. package/src/agent/index.js +1 -3
  87. package/src/agent/mcp/MCPServer.js +1220 -144
  88. package/src/agent/mcp/index.js +1 -1
  89. package/src/agent/mcp/stdio-server.js +264 -0
  90. package/src/agent/mcp/tools.js +498 -31
  91. package/src/cli/index.js +431 -47
  92. package/src/core/CanvasManager.js +97 -204
  93. package/src/core/ErrorReporter.js +1 -1
  94. package/src/core/Parameters.js +1 -1
  95. package/src/core/VIB3Engine.js +93 -4
  96. package/src/core/VitalitySystem.js +53 -0
  97. package/src/core/index.js +18 -0
  98. package/src/core/renderers/FacetedRendererAdapter.js +10 -9
  99. package/src/core/renderers/HolographicRendererAdapter.js +13 -9
  100. package/src/core/renderers/QuantumRendererAdapter.js +11 -7
  101. package/src/creative/AestheticMapper.js +628 -0
  102. package/src/creative/ChoreographyPlayer.js +481 -0
  103. package/src/creative/index.js +11 -0
  104. package/src/experimental/GameLoop.js +72 -0
  105. package/src/experimental/LatticePhysics.js +100 -0
  106. package/src/experimental/LiveDirector.js +143 -0
  107. package/src/experimental/PlayerController4D.js +154 -0
  108. package/src/experimental/VIB3Actor.js +138 -0
  109. package/src/experimental/VIB3Compositor.js +117 -0
  110. package/src/experimental/VIB3Link.js +122 -0
  111. package/src/experimental/VIB3Orchestrator.js +146 -0
  112. package/src/experimental/VIB3Universe.js +109 -0
  113. package/src/experimental/demos/CrystalLabyrinth.js +202 -0
  114. package/src/export/TradingCardManager.js +3 -4
  115. package/src/export/index.js +11 -1
  116. package/src/faceted/FacetedSystem.js +260 -394
  117. package/src/games/glyph-war/GlyphWarVisualizer.js +641 -0
  118. package/src/geometry/generators/Crystal.js +2 -2
  119. package/src/geometry/warp/HypersphereCore.js +53 -24
  120. package/src/holograms/HolographicVisualizer.js +84 -98
  121. package/src/holograms/RealHolographicSystem.js +194 -43
  122. package/src/math/Mat4x4.js +308 -105
  123. package/src/math/Rotor4D.js +124 -40
  124. package/src/math/Vec4.js +200 -103
  125. package/src/math/index.js +7 -7
  126. package/src/polychora/PolychoraSystem.js +77 -0
  127. package/src/quantum/QuantumEngine.js +103 -66
  128. package/src/quantum/QuantumVisualizer.js +31 -22
  129. package/src/reactivity/index.js +3 -5
  130. package/src/render/LayerPresetManager.js +372 -0
  131. package/src/render/LayerReactivityBridge.js +344 -0
  132. package/src/render/LayerRelationshipGraph.js +610 -0
  133. package/src/render/MultiCanvasBridge.js +148 -25
  134. package/src/render/ShaderLoader.js +38 -0
  135. package/src/render/ShaderProgram.js +4 -4
  136. package/src/render/UnifiedRenderBridge.js +4 -1
  137. package/src/render/backends/WebGPUBackend.js +8 -4
  138. package/src/render/index.js +27 -2
  139. package/src/scene/Node4D.js +74 -24
  140. package/src/scene/index.js +4 -4
  141. package/src/shaders/common/geometry24.glsl +65 -0
  142. package/src/shaders/common/geometry24.wgsl +54 -0
  143. package/src/shaders/common/rotation4d.glsl +4 -4
  144. package/src/shaders/common/rotation4d.wgsl +2 -2
  145. package/src/shaders/common/uniforms.wgsl +15 -8
  146. package/src/shaders/faceted/faceted.frag.glsl +220 -80
  147. package/src/shaders/faceted/faceted.frag.wgsl +144 -90
  148. package/src/shaders/holographic/holographic.frag.glsl +28 -9
  149. package/src/shaders/holographic/holographic.frag.wgsl +112 -41
  150. package/src/shaders/quantum/quantum.frag.glsl +1 -0
  151. package/src/shaders/quantum/quantum.frag.wgsl +6 -4
  152. package/src/testing/ParallelTestFramework.js +2 -2
  153. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +2 -2
  154. package/src/viewer/GalleryUI.js +17 -0
  155. package/src/viewer/ViewerPortal.js +2 -2
  156. package/src/viewer/index.js +1 -1
  157. package/tools/headless-renderer.js +258 -0
  158. package/tools/shader-sync-verify.js +14 -8
  159. package/tools/site-analysis/all-reports.json +32 -0
  160. package/tools/site-analysis/combined-analysis.md +50 -0
  161. package/tools/site-analyzer.mjs +779 -0
  162. package/tools/visual-catalog/capture.js +276 -0
  163. package/tools/visual-catalog/composite.js +138 -0
  164. package/types/adaptive-sdk.d.ts +204 -5
  165. package/types/agent/cli.d.ts +78 -0
  166. package/types/agent/index.d.ts +18 -0
  167. package/types/agent/mcp.d.ts +87 -0
  168. package/types/agent/telemetry.d.ts +190 -0
  169. package/types/core/VIB3Engine.d.ts +26 -0
  170. package/types/core/index.d.ts +261 -0
  171. package/types/creative/AestheticMapper.d.ts +72 -0
  172. package/types/creative/ChoreographyPlayer.d.ts +96 -0
  173. package/types/creative/index.d.ts +17 -0
  174. package/types/export/index.d.ts +243 -0
  175. package/types/geometry/index.d.ts +164 -0
  176. package/types/math/index.d.ts +214 -0
  177. package/types/render/LayerPresetManager.d.ts +78 -0
  178. package/types/render/LayerReactivityBridge.d.ts +85 -0
  179. package/types/render/LayerRelationshipGraph.d.ts +174 -0
  180. package/types/render/index.d.ts +3 -0
  181. package/types/scene/index.d.ts +204 -0
  182. package/types/systems/index.d.ts +244 -0
  183. package/types/variations/index.d.ts +62 -0
  184. package/types/viewer/index.d.ts +225 -0
  185. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +0 -34
  186. package/DOCS/DEV_TRACK_ANALYSIS.md +0 -77
  187. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +0 -42
  188. package/DOCS/SESSION_014_PLAN.md +0 -195
  189. package/DOCS/SESSION_LOG_2026-01-07.md +0 -56
  190. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +0 -72
  191. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +0 -738
  192. /package/src/viewer/{ReactivityManager.js → ViewerInputHandler.js} +0 -0
@@ -7,16 +7,20 @@ export class QuantumRendererAdapter extends RendererContract {
7
7
  this.system = system;
8
8
  }
9
9
 
10
- init() {
11
- return true;
10
+ init(context = {}) {
11
+ return this.system.init ? this.system.init(context) : true;
12
12
  }
13
13
 
14
- resize() {
15
- // Canvas sizing is handled by visualizers.
14
+ resize(width, height, pixelRatio = 1) {
15
+ if (this.system.resize) {
16
+ this.system.resize(width, height, pixelRatio);
17
+ }
16
18
  }
17
19
 
18
- render() {
19
- this.system.renderFrame();
20
+ render(frameState) {
21
+ if (this.system.render) {
22
+ this.system.render(frameState);
23
+ }
20
24
  }
21
25
 
22
26
  setActive(active) {
@@ -24,6 +28,6 @@ export class QuantumRendererAdapter extends RendererContract {
24
28
  }
25
29
 
26
30
  dispose() {
27
- this.system.setActive(false);
31
+ this.system.dispose();
28
32
  }
29
33
  }
@@ -0,0 +1,628 @@
1
+ /**
2
+ * AestheticMapper.js - Text-Description to VIB3+ Parameter Mapping
3
+ *
4
+ * Maps natural language aesthetic/emotional descriptions to VIB3+ parameter
5
+ * ranges. Enables the `design_from_description` MCP tool and text-to-visual
6
+ * agent workflows.
7
+ *
8
+ * Vocabulary is organized into categories: emotions, visual styles, color
9
+ * themes, motion qualities, depth effects, and geometric characters. Multiple
10
+ * descriptors can be combined (e.g., "serene organic ocean deep").
11
+ *
12
+ * @module creative/AestheticMapper
13
+ * @version 1.0.0
14
+ */
15
+
16
+ /**
17
+ * @typedef {Object} ParameterRange
18
+ * @property {number} min - Minimum value
19
+ * @property {number} max - Maximum value
20
+ */
21
+
22
+ /**
23
+ * @typedef {Object} AestheticMapping
24
+ * @property {Object<string, ParameterRange>} params - Parameter ranges
25
+ * @property {string[]} [suggested_geometries] - Recommended geometry indices
26
+ * @property {string} [suggested_system] - Recommended system
27
+ * @property {string} [color_preset] - Recommended color preset
28
+ * @property {string[]} [post_processing] - Recommended effects
29
+ */
30
+
31
+ /**
32
+ * Maps text descriptions to VIB3+ parameter configurations.
33
+ *
34
+ * @example
35
+ * const mapper = new AestheticMapper();
36
+ * const result = mapper.mapDescription('serene ocean deep minimal');
37
+ * // result.params = { speed: 0.2, chaos: 0.02, hue: 200, ... }
38
+ * // result.system = 'quantum'
39
+ * // result.geometry = 11
40
+ *
41
+ * @example
42
+ * // Get concrete parameter values (picks midpoint of ranges)
43
+ * const concrete = mapper.resolveToValues('energetic neon geometric');
44
+ */
45
+ export class AestheticMapper {
46
+ constructor() {
47
+ this._vocabulary = AestheticMapper.VOCABULARY;
48
+ }
49
+
50
+ /**
51
+ * Map a text description to parameter ranges.
52
+ * Accepts space-separated descriptor words.
53
+ *
54
+ * @param {string} description - Natural language description
55
+ * @returns {Object} Mapped result with params, system, geometry, effects
56
+ */
57
+ mapDescription(description) {
58
+ if (!description || typeof description !== 'string') {
59
+ return this._defaultResult();
60
+ }
61
+
62
+ const words = description.toLowerCase()
63
+ .replace(/[^a-z0-9\s-]/g, '')
64
+ .split(/\s+/)
65
+ .filter(w => w.length > 0);
66
+
67
+ // Accumulate parameter ranges from all matching descriptors
68
+ const ranges = {};
69
+ const systems = [];
70
+ const geometries = [];
71
+ const colorPresets = [];
72
+ const effects = [];
73
+ let matchCount = 0;
74
+
75
+ for (const word of words) {
76
+ const mapping = this._findMapping(word);
77
+ if (!mapping) continue;
78
+ matchCount++;
79
+
80
+ // Merge parameter ranges (intersection — narrow toward overlap)
81
+ if (mapping.params) {
82
+ for (const [param, range] of Object.entries(mapping.params)) {
83
+ if (!ranges[param]) {
84
+ ranges[param] = { min: range.min, max: range.max };
85
+ } else {
86
+ // Narrow the range toward the intersection
87
+ ranges[param].min = Math.max(ranges[param].min, range.min);
88
+ ranges[param].max = Math.min(ranges[param].max, range.max);
89
+ // If ranges don't overlap, use the new range's midpoint
90
+ if (ranges[param].min > ranges[param].max) {
91
+ const mid = (range.min + range.max) / 2;
92
+ ranges[param].min = mid;
93
+ ranges[param].max = mid;
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ if (mapping.suggested_system) systems.push(mapping.suggested_system);
100
+ if (mapping.suggested_geometries) geometries.push(...mapping.suggested_geometries);
101
+ if (mapping.color_preset) colorPresets.push(mapping.color_preset);
102
+ if (mapping.post_processing) effects.push(...mapping.post_processing);
103
+ }
104
+
105
+ // Pick the most voted system, geometry, preset
106
+ const system = this._mostCommon(systems) || 'quantum';
107
+ const geometry = this._mostCommon(geometries) ?? 0;
108
+ const colorPreset = this._mostCommon(colorPresets) || null;
109
+ const uniqueEffects = [...new Set(effects)];
110
+
111
+ return {
112
+ matched_words: matchCount,
113
+ total_words: words.length,
114
+ params: ranges,
115
+ system,
116
+ geometry: typeof geometry === 'number' ? geometry : parseInt(geometry, 10),
117
+ color_preset: colorPreset,
118
+ post_processing: uniqueEffects,
119
+ description_echo: description
120
+ };
121
+ }
122
+
123
+ /**
124
+ * Resolve a description to concrete parameter values (midpoint of ranges).
125
+ *
126
+ * @param {string} description - Natural language description
127
+ * @returns {Object} Concrete parameter values ready for engine.setParameter()
128
+ */
129
+ resolveToValues(description) {
130
+ const mapped = this.mapDescription(description);
131
+ const values = {};
132
+
133
+ for (const [param, range] of Object.entries(mapped.params)) {
134
+ values[param] = (range.min + range.max) / 2;
135
+ }
136
+
137
+ return {
138
+ system: mapped.system,
139
+ geometry: mapped.geometry,
140
+ params: values,
141
+ color_preset: mapped.color_preset,
142
+ post_processing: mapped.post_processing
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Get all known descriptor words.
148
+ * @returns {string[]}
149
+ */
150
+ getVocabulary() {
151
+ const words = new Set();
152
+ for (const category of Object.values(this._vocabulary)) {
153
+ for (const word of Object.keys(category)) {
154
+ words.add(word);
155
+ }
156
+ }
157
+ return [...words].sort();
158
+ }
159
+
160
+ /**
161
+ * Get vocabulary organized by category.
162
+ * @returns {Object<string, string[]>}
163
+ */
164
+ getVocabularyByCategory() {
165
+ const result = {};
166
+ for (const [category, mappings] of Object.entries(this._vocabulary)) {
167
+ result[category] = Object.keys(mappings);
168
+ }
169
+ return result;
170
+ }
171
+
172
+ // ─────────────────────────────────────────────────────────────────────────
173
+ // Internal
174
+ // ─────────────────────────────────────────────────────────────────────────
175
+
176
+ _findMapping(word) {
177
+ for (const category of Object.values(this._vocabulary)) {
178
+ if (category[word]) return category[word];
179
+ }
180
+ // Try partial matching for compound descriptors
181
+ for (const category of Object.values(this._vocabulary)) {
182
+ for (const [key, mapping] of Object.entries(category)) {
183
+ if (word.includes(key) || key.includes(word)) return mapping;
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+
189
+ _mostCommon(arr) {
190
+ if (arr.length === 0) return null;
191
+ const counts = {};
192
+ for (const item of arr) {
193
+ counts[item] = (counts[item] || 0) + 1;
194
+ }
195
+ return Object.entries(counts).sort((a, b) => b[1] - a[1])[0][0];
196
+ }
197
+
198
+ _defaultResult() {
199
+ return {
200
+ matched_words: 0,
201
+ total_words: 0,
202
+ params: {},
203
+ system: 'quantum',
204
+ geometry: 0,
205
+ color_preset: null,
206
+ post_processing: [],
207
+ description_echo: ''
208
+ };
209
+ }
210
+
211
+ // ─────────────────────────────────────────────────────────────────────────
212
+ // Vocabulary
213
+ // ─────────────────────────────────────────────────────────────────────────
214
+
215
+ static VOCABULARY = {
216
+ // ── Emotions ──
217
+ emotions: {
218
+ serene: {
219
+ params: {
220
+ speed: { min: 0.1, max: 0.3 },
221
+ chaos: { min: 0, max: 0.05 },
222
+ intensity: { min: 0.3, max: 0.5 },
223
+ morphFactor: { min: 0, max: 0.2 }
224
+ },
225
+ suggested_system: 'faceted',
226
+ color_preset: 'Ethereal'
227
+ },
228
+ calm: {
229
+ params: {
230
+ speed: { min: 0.1, max: 0.4 },
231
+ chaos: { min: 0, max: 0.08 },
232
+ intensity: { min: 0.3, max: 0.6 },
233
+ gridDensity: { min: 8, max: 20 }
234
+ },
235
+ suggested_system: 'faceted',
236
+ color_preset: 'Ice'
237
+ },
238
+ peaceful: {
239
+ params: {
240
+ speed: { min: 0.15, max: 0.35 },
241
+ chaos: { min: 0, max: 0.03 },
242
+ intensity: { min: 0.4, max: 0.6 }
243
+ },
244
+ suggested_system: 'holographic',
245
+ color_preset: 'Pastel'
246
+ },
247
+ energetic: {
248
+ params: {
249
+ speed: { min: 2.0, max: 3.0 },
250
+ chaos: { min: 0.5, max: 1.0 },
251
+ intensity: { min: 0.7, max: 1.0 },
252
+ morphFactor: { min: 0.8, max: 2.0 }
253
+ },
254
+ suggested_system: 'quantum',
255
+ color_preset: 'Neon',
256
+ post_processing: ['bloom', 'chromaticAberration']
257
+ },
258
+ chaotic: {
259
+ params: {
260
+ speed: { min: 1.5, max: 3.0 },
261
+ chaos: { min: 0.7, max: 1.0 },
262
+ intensity: { min: 0.6, max: 1.0 },
263
+ morphFactor: { min: 1.0, max: 2.0 },
264
+ gridDensity: { min: 30, max: 80 }
265
+ },
266
+ suggested_system: 'quantum',
267
+ post_processing: ['glitch', 'rgbShift', 'noise']
268
+ },
269
+ mysterious: {
270
+ params: {
271
+ speed: { min: 0.3, max: 0.6 },
272
+ chaos: { min: 0.1, max: 0.3 },
273
+ hue: { min: 220, max: 280 },
274
+ intensity: { min: 0.2, max: 0.4 },
275
+ dimension: { min: 3.0, max: 3.4 }
276
+ },
277
+ suggested_system: 'quantum',
278
+ color_preset: 'Midnight',
279
+ post_processing: ['vignette']
280
+ },
281
+ joyful: {
282
+ params: {
283
+ speed: { min: 1.0, max: 1.5 },
284
+ chaos: { min: 0.2, max: 0.4 },
285
+ hue: { min: 30, max: 60 },
286
+ intensity: { min: 0.7, max: 0.9 },
287
+ saturation: { min: 0.7, max: 1.0 }
288
+ },
289
+ suggested_system: 'holographic',
290
+ color_preset: 'Tropical'
291
+ },
292
+ melancholic: {
293
+ params: {
294
+ speed: { min: 0.2, max: 0.5 },
295
+ chaos: { min: 0.05, max: 0.15 },
296
+ hue: { min: 200, max: 260 },
297
+ intensity: { min: 0.2, max: 0.4 },
298
+ saturation: { min: 0.3, max: 0.5 }
299
+ },
300
+ suggested_system: 'quantum',
301
+ color_preset: 'Galaxy',
302
+ post_processing: ['vignette', 'filmGrain']
303
+ },
304
+ angry: {
305
+ params: {
306
+ speed: { min: 2.0, max: 3.0 },
307
+ chaos: { min: 0.6, max: 1.0 },
308
+ hue: { min: 0, max: 20 },
309
+ intensity: { min: 0.8, max: 1.0 }
310
+ },
311
+ suggested_system: 'quantum',
312
+ color_preset: 'Fire',
313
+ post_processing: ['chromaticAberration', 'distort']
314
+ },
315
+ dreamy: {
316
+ params: {
317
+ speed: { min: 0.3, max: 0.7 },
318
+ chaos: { min: 0.1, max: 0.25 },
319
+ intensity: { min: 0.5, max: 0.7 },
320
+ saturation: { min: 0.4, max: 0.7 },
321
+ dimension: { min: 3.3, max: 3.8 }
322
+ },
323
+ suggested_system: 'holographic',
324
+ color_preset: 'Vaporwave',
325
+ post_processing: ['bloom', 'blur']
326
+ }
327
+ },
328
+
329
+ // ── Visual Styles ──
330
+ styles: {
331
+ minimal: {
332
+ params: {
333
+ gridDensity: { min: 4, max: 10 },
334
+ chaos: { min: 0, max: 0.02 },
335
+ morphFactor: { min: 0, max: 0.1 }
336
+ },
337
+ suggested_system: 'faceted'
338
+ },
339
+ intricate: {
340
+ params: {
341
+ gridDensity: { min: 40, max: 80 },
342
+ chaos: { min: 0.1, max: 0.3 },
343
+ morphFactor: { min: 0.3, max: 1.0 }
344
+ },
345
+ suggested_system: 'quantum',
346
+ suggested_geometries: [5, 13, 21] // fractal variants
347
+ },
348
+ organic: {
349
+ params: {
350
+ chaos: { min: 0.3, max: 0.7 },
351
+ morphFactor: { min: 0.5, max: 1.5 },
352
+ speed: { min: 0.5, max: 1.0 },
353
+ gridDensity: { min: 15, max: 35 }
354
+ },
355
+ suggested_geometries: [3, 11, 2, 10] // torus, hypersphere-torus, sphere variants
356
+ },
357
+ geometric: {
358
+ params: {
359
+ chaos: { min: 0, max: 0.05 },
360
+ gridDensity: { min: 15, max: 30 },
361
+ morphFactor: { min: 0, max: 0.2 }
362
+ },
363
+ suggested_system: 'faceted',
364
+ suggested_geometries: [0, 1, 7, 8, 9, 16] // tetra, cube, crystal
365
+ },
366
+ abstract: {
367
+ params: {
368
+ chaos: { min: 0.2, max: 0.6 },
369
+ morphFactor: { min: 0.5, max: 1.5 },
370
+ dimension: { min: 3.0, max: 3.5 }
371
+ },
372
+ suggested_system: 'quantum',
373
+ suggested_geometries: [4, 12, 20, 5, 13] // klein, fractal variants
374
+ },
375
+ crystalline: {
376
+ params: {
377
+ chaos: { min: 0, max: 0.1 },
378
+ gridDensity: { min: 20, max: 50 },
379
+ intensity: { min: 0.6, max: 0.9 },
380
+ saturation: { min: 0.5, max: 0.8 }
381
+ },
382
+ suggested_system: 'faceted',
383
+ suggested_geometries: [7, 15, 23], // crystal variants
384
+ color_preset: 'Ice'
385
+ },
386
+ glitchy: {
387
+ params: {
388
+ chaos: { min: 0.5, max: 1.0 },
389
+ speed: { min: 1.5, max: 3.0 },
390
+ morphFactor: { min: 1.0, max: 2.0 }
391
+ },
392
+ suggested_system: 'quantum',
393
+ post_processing: ['glitch', 'rgbShift', 'scanlines', 'noise']
394
+ },
395
+ cinematic: {
396
+ params: {
397
+ speed: { min: 0.3, max: 0.6 },
398
+ chaos: { min: 0.1, max: 0.25 },
399
+ intensity: { min: 0.5, max: 0.7 }
400
+ },
401
+ suggested_system: 'holographic',
402
+ post_processing: ['vignette', 'filmGrain', 'colorGrade']
403
+ }
404
+ },
405
+
406
+ // ── Color Themes ──
407
+ colors: {
408
+ ocean: {
409
+ params: {
410
+ hue: { min: 180, max: 220 },
411
+ saturation: { min: 0.6, max: 0.9 }
412
+ },
413
+ color_preset: 'Ocean',
414
+ suggested_geometries: [6, 14, 3, 11] // wave, torus variants
415
+ },
416
+ fire: {
417
+ params: {
418
+ hue: { min: 0, max: 30 },
419
+ saturation: { min: 0.8, max: 1.0 },
420
+ intensity: { min: 0.7, max: 1.0 }
421
+ },
422
+ color_preset: 'Fire'
423
+ },
424
+ ice: {
425
+ params: {
426
+ hue: { min: 180, max: 210 },
427
+ saturation: { min: 0.3, max: 0.6 },
428
+ intensity: { min: 0.6, max: 0.9 }
429
+ },
430
+ color_preset: 'Ice',
431
+ suggested_geometries: [7, 15, 23] // crystal variants
432
+ },
433
+ neon: {
434
+ params: {
435
+ hue: { min: 270, max: 330 },
436
+ saturation: { min: 0.9, max: 1.0 },
437
+ intensity: { min: 0.8, max: 1.0 }
438
+ },
439
+ color_preset: 'Neon',
440
+ post_processing: ['bloom']
441
+ },
442
+ sunset: {
443
+ params: {
444
+ hue: { min: 15, max: 45 },
445
+ saturation: { min: 0.7, max: 0.9 },
446
+ intensity: { min: 0.6, max: 0.8 }
447
+ },
448
+ color_preset: 'Sunset'
449
+ },
450
+ forest: {
451
+ params: {
452
+ hue: { min: 100, max: 140 },
453
+ saturation: { min: 0.5, max: 0.7 }
454
+ },
455
+ color_preset: 'Forest'
456
+ },
457
+ galaxy: {
458
+ params: {
459
+ hue: { min: 240, max: 280 },
460
+ saturation: { min: 0.6, max: 0.9 },
461
+ intensity: { min: 0.3, max: 0.5 }
462
+ },
463
+ color_preset: 'Galaxy',
464
+ suggested_geometries: [2, 10, 18] // sphere variants
465
+ },
466
+ cyberpunk: {
467
+ params: {
468
+ hue: { min: 260, max: 300 },
469
+ saturation: { min: 0.8, max: 1.0 },
470
+ intensity: { min: 0.7, max: 0.9 }
471
+ },
472
+ color_preset: 'Cyberpunk',
473
+ post_processing: ['bloom', 'scanlines', 'chromaticAberration']
474
+ },
475
+ monochrome: {
476
+ params: {
477
+ saturation: { min: 0, max: 0.1 },
478
+ intensity: { min: 0.4, max: 0.7 }
479
+ },
480
+ color_preset: 'Monochrome'
481
+ },
482
+ warm: {
483
+ params: {
484
+ hue: { min: 10, max: 50 },
485
+ saturation: { min: 0.6, max: 0.9 },
486
+ intensity: { min: 0.6, max: 0.8 }
487
+ },
488
+ color_preset: 'Lava'
489
+ },
490
+ cool: {
491
+ params: {
492
+ hue: { min: 180, max: 240 },
493
+ saturation: { min: 0.5, max: 0.8 }
494
+ },
495
+ color_preset: 'Ocean'
496
+ }
497
+ },
498
+
499
+ // ── Motion Qualities ──
500
+ motion: {
501
+ slow: {
502
+ params: { speed: { min: 0.1, max: 0.4 } }
503
+ },
504
+ fast: {
505
+ params: { speed: { min: 2.0, max: 3.0 } }
506
+ },
507
+ flowing: {
508
+ params: {
509
+ speed: { min: 0.5, max: 1.0 },
510
+ chaos: { min: 0.1, max: 0.3 },
511
+ morphFactor: { min: 0.3, max: 0.8 }
512
+ },
513
+ suggested_geometries: [6, 14, 3, 11] // wave, torus variants
514
+ },
515
+ pulsing: {
516
+ params: {
517
+ speed: { min: 0.8, max: 1.5 },
518
+ morphFactor: { min: 0.5, max: 1.5 }
519
+ }
520
+ },
521
+ breathing: {
522
+ params: {
523
+ speed: { min: 0.2, max: 0.5 },
524
+ morphFactor: { min: 0.2, max: 0.6 },
525
+ chaos: { min: 0.02, max: 0.1 }
526
+ }
527
+ },
528
+ spinning: {
529
+ params: {
530
+ speed: { min: 1.0, max: 2.0 }
531
+ },
532
+ // Implies 4D rotation
533
+ suggested_geometries: [1, 9, 17] // hypercube variants (best spinning)
534
+ },
535
+ hypnotic: {
536
+ params: {
537
+ speed: { min: 0.5, max: 0.8 },
538
+ chaos: { min: 0.05, max: 0.15 },
539
+ dimension: { min: 3.0, max: 3.4 }
540
+ },
541
+ suggested_system: 'quantum'
542
+ },
543
+ turbulent: {
544
+ params: {
545
+ chaos: { min: 0.6, max: 1.0 },
546
+ speed: { min: 1.0, max: 2.5 }
547
+ }
548
+ },
549
+ frozen: {
550
+ params: {
551
+ speed: { min: 0.1, max: 0.1 },
552
+ chaos: { min: 0, max: 0 }
553
+ }
554
+ }
555
+ },
556
+
557
+ // ── Depth Effects ──
558
+ depth: {
559
+ deep: {
560
+ params: {
561
+ dimension: { min: 3.0, max: 3.3 },
562
+ gridDensity: { min: 30, max: 60 }
563
+ }
564
+ },
565
+ flat: {
566
+ params: {
567
+ dimension: { min: 4.0, max: 4.5 },
568
+ gridDensity: { min: 8, max: 15 }
569
+ }
570
+ },
571
+ immersive: {
572
+ params: {
573
+ dimension: { min: 3.0, max: 3.5 }
574
+ }
575
+ },
576
+ distant: {
577
+ params: {
578
+ dimension: { min: 4.0, max: 4.5 },
579
+ intensity: { min: 0.2, max: 0.4 },
580
+ gridDensity: { min: 40, max: 80 }
581
+ }
582
+ },
583
+ close: {
584
+ params: {
585
+ dimension: { min: 3.0, max: 3.3 },
586
+ intensity: { min: 0.7, max: 1.0 },
587
+ gridDensity: { min: 4, max: 12 }
588
+ }
589
+ }
590
+ },
591
+
592
+ // ── Geometry Descriptors ──
593
+ geometry: {
594
+ spherical: {
595
+ suggested_geometries: [2, 10, 18],
596
+ params: {}
597
+ },
598
+ cubic: {
599
+ suggested_geometries: [1, 9, 17],
600
+ params: {}
601
+ },
602
+ toroidal: {
603
+ suggested_geometries: [3, 11, 19],
604
+ params: {}
605
+ },
606
+ fractal: {
607
+ suggested_geometries: [5, 13, 21],
608
+ params: { gridDensity: { min: 20, max: 60 } }
609
+ },
610
+ wavy: {
611
+ suggested_geometries: [6, 14, 22],
612
+ params: { chaos: { min: 0.1, max: 0.3 } }
613
+ },
614
+ crystal: {
615
+ suggested_geometries: [7, 15, 23],
616
+ params: {}
617
+ },
618
+ simplex: {
619
+ suggested_geometries: [0, 8, 16],
620
+ params: {}
621
+ },
622
+ twisted: {
623
+ suggested_geometries: [4, 12, 20], // klein bottle
624
+ params: { morphFactor: { min: 0.3, max: 1.0 } }
625
+ }
626
+ }
627
+ };
628
+ }