@vib3code/sdk 2.0.1

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 (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. package/types/render/index.d.ts +141 -0
@@ -0,0 +1,240 @@
1
+ /**
2
+ * LLM Parameter Interface for VIB34D
3
+ * Converts natural language descriptions to VIB34D parameters using Gemini Flash 1.5
4
+ */
5
+
6
+ export class LLMParameterInterface {
7
+ constructor() {
8
+ // Try Firebase Function first, fallback to direct API
9
+ this.useFirebase = true;
10
+ this.firebaseUrl = 'https://us-central1-vib34d-llm-engine.cloudfunctions.net/generateVIB34DParameters';
11
+
12
+ // Fallback to direct API if Firebase not available
13
+ this.apiKey = localStorage.getItem('vib34d-gemini-api-key') || null;
14
+ this.baseApiUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent';
15
+ this.parameterCallback = null;
16
+
17
+ // Comprehensive system prompt with emotional/visual understanding
18
+ this.systemPrompt = `You are a synesthetic AI that translates human experience into 4-dimensional holographic mathematics.
19
+
20
+ You control a VIB34D system with these parameters:
21
+ - geometry (0-7): Tetrahedron, Hypercube, Sphere, Torus, Klein Bottle, Fractal, Wave, Crystal
22
+ - hue (0-360), intensity (0-1), saturation (0-1)
23
+ - speed (0.1-3), chaos (0-1), morphFactor (0-2), gridDensity (5-100)
24
+ - rot4dXW, rot4dYW, rot4dZW (-6.28 to 6.28)
25
+
26
+ When given a description, use your understanding of:
27
+ - Visual aesthetics and emotional resonance
28
+ - Color theory and psychological associations
29
+ - Movement, rhythm, and temporal dynamics
30
+ - Mathematical beauty and complexity
31
+ - Human perception and synesthesia
32
+
33
+ Create a holographic experience that captures the essence of what they're describing.
34
+
35
+ Think beyond literal interpretation. If someone says "the sound of silence," you might create subtle, barely-there patterns with minimal chaos and low intensity. If they say "cosmic loneliness," you might use vast empty spaces with occasional fractal details.
36
+
37
+ Your goal is to create something that makes them say "YES, that's exactly what I meant, even though I couldn't have described it mathematically."
38
+
39
+ Return only JSON with the parameter names above.`;
40
+ }
41
+
42
+ /**
43
+ * Initialize with API key from localStorage or prompt user
44
+ */
45
+ async initialize() {
46
+ // Check localStorage for existing API key
47
+ const storedKey = localStorage.getItem('vib34d-gemini-api-key');
48
+ if (storedKey) {
49
+ this.apiKey = storedKey;
50
+ console.log('🔑 Gemini API key loaded from storage');
51
+ return true;
52
+ }
53
+
54
+ // If no key, will be prompted when first used
55
+ console.log('📝 Gemini API key will be requested on first use');
56
+ return false;
57
+ }
58
+
59
+ /**
60
+ * Set API key and store it
61
+ */
62
+ setApiKey(apiKey) {
63
+ this.apiKey = apiKey;
64
+ localStorage.setItem('vib34d-gemini-api-key', apiKey);
65
+ console.log('🔑 Gemini API key saved');
66
+ }
67
+
68
+ /**
69
+ * Set callback for parameter updates
70
+ */
71
+ setParameterCallback(callback) {
72
+ this.parameterCallback = callback;
73
+ }
74
+
75
+ /**
76
+ * Generate parameters from natural language description
77
+ */
78
+ async generateParameters(description) {
79
+ // Try Firebase Function first
80
+ if (this.useFirebase) {
81
+ try {
82
+ console.log('🔥 Trying Firebase Function first...');
83
+ return await this.generateViaFirebase(description);
84
+ } catch (error) {
85
+ console.warn('🔥 Firebase Function failed, falling back to direct API:', error.message);
86
+ this.useFirebase = false; // Disable for this session
87
+ }
88
+ }
89
+
90
+ // Fallback to direct API
91
+ console.log('🔍 Using direct API approach...');
92
+ console.log('🔍 Checking API key:', this.apiKey ? `${this.apiKey.substring(0, 10)}...` : 'NOT SET');
93
+ const hasValidKey = this.apiKey && this.apiKey.startsWith('AIza') && this.apiKey.length > 30;
94
+ console.log('🔍 API key valid:', hasValidKey);
95
+
96
+ if (hasValidKey) {
97
+ // Try real API first
98
+ try {
99
+ // Try both authentication methods to see which works
100
+ const apiUrl = `${this.baseApiUrl}?key=${this.apiKey}`;
101
+ console.log('🤖 Making API request to:', apiUrl);
102
+
103
+ const response = await fetch(apiUrl, {
104
+ method: 'POST',
105
+ headers: {
106
+ 'Content-Type': 'application/json'
107
+ },
108
+ body: JSON.stringify({
109
+ contents: [{
110
+ parts: [{
111
+ text: `${this.systemPrompt}\n\nUser description: "${description}"\n\nGenerate JSON parameters:`
112
+ }]
113
+ }],
114
+ generationConfig: {
115
+ temperature: 0.7,
116
+ maxOutputTokens: 500,
117
+ topP: 0.8,
118
+ topK: 40
119
+ }
120
+ })
121
+ });
122
+
123
+ console.log('🤖 API response status:', response.status);
124
+ console.log('🤖 API response ok:', response.ok);
125
+
126
+ if (response.ok) {
127
+ const data = await response.json();
128
+ console.log('🤖 API response data:', data);
129
+ const generatedText = data.candidates[0].content.parts[0].text;
130
+
131
+ // Extract JSON from response
132
+ const jsonMatch = generatedText.match(/\{[\s\S]*\}/);
133
+ if (jsonMatch) {
134
+ const parameters = JSON.parse(jsonMatch[0]);
135
+ const validated = this.validateParameters(parameters);
136
+
137
+ console.log('🤖 Generated parameters via Gemini API:', validated);
138
+
139
+ if (this.parameterCallback) {
140
+ this.parameterCallback(validated);
141
+ }
142
+
143
+ return validated;
144
+ }
145
+ } else {
146
+ const errorText = await response.text();
147
+ console.error('🤖 API request failed:', response.status, errorText);
148
+ throw new Error(`API request failed: ${response.status} - ${errorText}`);
149
+ }
150
+ } catch (error) {
151
+ console.error('🤖 API request error:', error);
152
+ throw error;
153
+ }
154
+ }
155
+
156
+ // No API key or API failed - just fail properly
157
+ if (!this.apiKey) {
158
+ throw new Error('No API key set. Please enter your Gemini API key to use AI generation.');
159
+ } else {
160
+ throw new Error('API request failed. Please check your API key or network connection.');
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Generate parameters via Firebase Function
166
+ */
167
+ async generateViaFirebase(description) {
168
+ const response = await fetch(this.firebaseUrl, {
169
+ method: 'POST',
170
+ headers: {
171
+ 'Content-Type': 'application/json'
172
+ },
173
+ body: JSON.stringify({
174
+ description: description.trim()
175
+ })
176
+ });
177
+
178
+ if (!response.ok) {
179
+ const errorData = await response.json().catch(() => ({}));
180
+ throw new Error(errorData.error || `Firebase Function error: ${response.status}`);
181
+ }
182
+
183
+ const data = await response.json();
184
+
185
+ if (!data.success || !data.parameters) {
186
+ throw new Error('Invalid response from Firebase Function');
187
+ }
188
+
189
+ const parameters = data.parameters;
190
+
191
+ console.log('🔥 Generated parameters via Firebase:', parameters);
192
+
193
+ if (this.parameterCallback) {
194
+ this.parameterCallback(parameters);
195
+ }
196
+
197
+ return parameters;
198
+ }
199
+
200
+ /**
201
+ * Validate and clamp parameters to valid ranges
202
+ */
203
+ validateParameters(params) {
204
+ const validated = {};
205
+
206
+ // Define parameter ranges
207
+ const ranges = {
208
+ geometry: { min: 0, max: 7, type: 'int' },
209
+ hue: { min: 0, max: 360, type: 'int' },
210
+ intensity: { min: 0, max: 1, type: 'float' },
211
+ saturation: { min: 0, max: 1, type: 'float' },
212
+ speed: { min: 0.1, max: 3, type: 'float' },
213
+ chaos: { min: 0, max: 1, type: 'float' },
214
+ morphFactor: { min: 0, max: 2, type: 'float' },
215
+ gridDensity: { min: 5, max: 100, type: 'int' },
216
+ rot4dXW: { min: -6.28, max: 6.28, type: 'float' },
217
+ rot4dYW: { min: -6.28, max: 6.28, type: 'float' },
218
+ rot4dZW: { min: -6.28, max: 6.28, type: 'float' }
219
+ };
220
+
221
+ // Validate each parameter
222
+ Object.entries(ranges).forEach(([param, range]) => {
223
+ if (params.hasOwnProperty(param)) {
224
+ let value = parseFloat(params[param]);
225
+
226
+ // Clamp to range
227
+ value = Math.max(range.min, Math.min(range.max, value));
228
+
229
+ // Convert to int if needed
230
+ if (range.type === 'int') {
231
+ value = Math.round(value);
232
+ }
233
+
234
+ validated[param] = value;
235
+ }
236
+ });
237
+
238
+ return validated;
239
+ }
240
+ }