@make-pictures/kits 0.0.0-stage → 2.0.0

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -2
  3. package/dist/chunk-3SUIELJV.mjs +601 -0
  4. package/dist/chunk-4Z3G6FPZ.mjs +485 -0
  5. package/dist/chunk-AHA23PHC.mjs +678 -0
  6. package/dist/chunk-CW623YVB.mjs +1124 -0
  7. package/dist/chunk-NNA7XXQB.mjs +1059 -0
  8. package/dist/chunk-S4CHTWOS.mjs +1237 -0
  9. package/dist/chunk-WAA7P5FT.mjs +912 -0
  10. package/dist/data-storytelling/AnimatedBarRace.d.ts +37 -0
  11. package/dist/data-storytelling/MetricComparisonCard.d.ts +29 -0
  12. package/dist/data-storytelling/TimelineTrack.d.ts +29 -0
  13. package/dist/data-storytelling/index.cjs +1224 -0
  14. package/dist/data-storytelling/index.d.ts +3 -0
  15. package/dist/data-storytelling/index.mjs +10 -0
  16. package/dist/index.cjs +6010 -0
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.mjs +108 -0
  19. package/dist/isometric-3d/IsometricStudioEnvironment.d.ts +8 -0
  20. package/dist/isometric-3d/Stylized3DCharacter.d.ts +29 -0
  21. package/dist/isometric-3d/index.cjs +611 -0
  22. package/dist/isometric-3d/index.d.ts +2 -0
  23. package/dist/isometric-3d/index.mjs +8 -0
  24. package/dist/kinetic-typography/AnimatedMetricCounter.d.ts +36 -0
  25. package/dist/kinetic-typography/ImpactKeywordCard.d.ts +31 -0
  26. package/dist/kinetic-typography/WordByWordStage.d.ts +47 -0
  27. package/dist/kinetic-typography/index.cjs +665 -0
  28. package/dist/kinetic-typography/index.d.ts +3 -0
  29. package/dist/kinetic-typography/index.mjs +14 -0
  30. package/dist/motion-diagrams-2d/CameraRig.d.ts +34 -0
  31. package/dist/motion-diagrams-2d/CodePayloadToast.d.ts +14 -0
  32. package/dist/motion-diagrams-2d/DataFlowEdge.d.ts +24 -0
  33. package/dist/motion-diagrams-2d/NodeBox.d.ts +65 -0
  34. package/dist/motion-diagrams-2d/SystemNode.d.ts +21 -0
  35. package/dist/motion-diagrams-2d/index.cjs +1137 -0
  36. package/dist/motion-diagrams-2d/index.d.ts +5 -0
  37. package/dist/motion-diagrams-2d/index.mjs +28 -0
  38. package/dist/paper-diorama-3d/ImageCutout3D.d.ts +47 -0
  39. package/dist/paper-diorama-3d/PaperCutout3D.d.ts +62 -0
  40. package/dist/paper-diorama-3d/PaperPopUpBook3D.d.ts +51 -0
  41. package/dist/paper-diorama-3d/PaperStageLighting3D.d.ts +12 -0
  42. package/dist/paper-diorama-3d/index.cjs +1087 -0
  43. package/dist/paper-diorama-3d/index.d.ts +4 -0
  44. package/dist/paper-diorama-3d/index.mjs +34 -0
  45. package/dist/product-frames/BrowserFrame.d.ts +28 -0
  46. package/dist/product-frames/PhoneFrame.d.ts +23 -0
  47. package/dist/product-frames/ScreenSpotlightOverlay.d.ts +34 -0
  48. package/dist/product-frames/frameMedia.d.ts +24 -0
  49. package/dist/product-frames/index.cjs +507 -0
  50. package/dist/product-frames/index.d.ts +8 -0
  51. package/dist/product-frames/index.mjs +12 -0
  52. package/dist/vfx/CinematicLensOverlay.d.ts +29 -0
  53. package/dist/vfx/ParticleField.d.ts +18 -0
  54. package/dist/vfx/SceneTransition.d.ts +24 -0
  55. package/dist/vfx/StagePostProcessing3D.d.ts +44 -0
  56. package/dist/vfx/index.cjs +933 -0
  57. package/dist/vfx/index.d.ts +4 -0
  58. package/dist/vfx/index.mjs +14 -0
  59. package/package.json +95 -4
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 make.pictures (https://make.pictures)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,50 @@
1
- # Temporary Holding Version
1
+ <p align="center">
2
+ <a href="https://make.pictures"><img src="https://make.pictures/brand/make-pictures-logo.svg" alt="make.pictures — Open-source 60 FPS Video-as-Code Studio" width="420" /></a>
3
+ </p>
2
4
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
5
+ <p align="center">
6
+ <a href="https://www.npmjs.com/package/@make-pictures/kits"><img src="https://img.shields.io/npm/v/@make-pictures/kits?style=for-the-badge&labelColor=0F172A&color=FF2A85&label=%40make-pictures%2Fkits" alt="@make-pictures/kits on npm" /></a>
7
+ <img src="https://img.shields.io/badge/7_Visual_Kits_%2B_VFX-FF2A85?style=for-the-badge&labelColor=0F172A" alt="7 Visual Kits %2B VFX" />
8
+ <a href="https://make.pictures"><img src="https://img.shields.io/badge/make.pictures-Studio-2563EB?style=for-the-badge&labelColor=0F172A" alt="make.pictures Studio" /></a>
9
+ </p>
10
+
11
+ # `@make-pictures/kits`
12
+
13
+ Composable **60 FPS Visual Kits** for [`make.pictures`](https://make.pictures):
14
+
15
+ - `@make-pictures/kits/paper-diorama-3d` — 2.5D Pop-Up Book theater (`PaperCutout3D`, `ImageCutout3D`, `PopUpHinge3D`, `PopUpBookBase3D`, `PaperStageLighting3D`).
16
+ - `@make-pictures/kits/isometric-3d` — Multi-character 3D isometric dialogue stage (`Stylized3DCharacter`, `IsometricStudioEnvironment`).
17
+ - `@make-pictures/kits/motion-diagrams-2d` — Infinite-canvas architecture & telemetry diagrams (`NodeBox`, `FlowCurve`, `CameraRig`, `SystemNode`, `DataFlowEdge`).
18
+ - `@make-pictures/kits/kinetic-typography` — Rhythmic phrase beats & tickers (`WordByWordStage`, `ImpactKeywordCard`, `AnimatedMetricCounter`).
19
+ - `@make-pictures/kits/data-storytelling` — Animated charts & benchmarks (`AnimatedBarRace`, `TimelineTrack`, `MetricComparisonCard`).
20
+ - `@make-pictures/kits/vfx` — Velocity-coupled optical overlays & 3D volumetric atmosphere (`CinematicLensOverlay`, `ParticleField`, `StagePostProcessing3D`, `SceneTransition`).
21
+ - `@make-pictures/kits/product-frames` — Product Frames for SaaS `.mp4` screen recordings (`BrowserFrame`, `PhoneFrame`, `ScreenSpotlightOverlay`) rendered via Remotion `<OffthreadVideo />`.
22
+
23
+ ## Install
24
+
25
+ ```bash
26
+ npm install @make-pictures/core @make-pictures/kits
27
+ ```
28
+
29
+ ## Usage
30
+
31
+ ```tsx
32
+ import { FlowCurve, portRight, portLeft, type NodeBox } from '@make-pictures/kits/motion-diagrams-2d';
33
+
34
+ const NODES = {
35
+ api: { cx: 520, cy: 540, w: 340, h: 150 },
36
+ db: { cx: 1180, cy: 540, w: 340, h: 150 },
37
+ } satisfies Record<string, NodeBox>;
38
+
39
+ <FlowCurve from={portRight(NODES.api)} to={portLeft(NODES.db)} activeFromFrame={24} packetSpeedFrames={104} />;
40
+ ```
41
+
42
+ ## Links
43
+
44
+ - Website: [make.pictures](https://make.pictures)
45
+ - Source & docs: [github.com/make-pictures/make-pictures-studio](https://github.com/make-pictures/make-pictures-studio)
46
+ - YouTube: [@makepicturestv](https://www.youtube.com/@makepicturestv) (EN) · [@makepicturespl](https://www.youtube.com/@makepicturespl) (PL)
47
+
48
+ ## License
49
+
50
+ MIT © [make.pictures](https://make.pictures)
@@ -0,0 +1,601 @@
1
+ // packages/kits/src/isometric-3d/Stylized3DCharacter.tsx
2
+ import {
3
+ interpolate,
4
+ interpolateColors,
5
+ spring,
6
+ useCurrentFrame,
7
+ useVideoConfig
8
+ } from "remotion";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ var Stylized3DCharacter = ({
11
+ position,
12
+ rotationY,
13
+ primaryColor,
14
+ accentColor,
15
+ speechEnergy,
16
+ speakingWeight,
17
+ gestureWeights,
18
+ enterFrame = 2,
19
+ headYawOffset = 0
20
+ }) => {
21
+ const frame = useCurrentFrame();
22
+ const { fps } = useVideoConfig();
23
+ const enterProgress = spring({
24
+ frame: frame - enterFrame,
25
+ fps,
26
+ config: { damping: 200, stiffness: 55, mass: 1.2 }
27
+ });
28
+ const isShrug = gestureWeights.shrug ?? 0;
29
+ const isPresentR = gestureWeights.presentRight ?? 0;
30
+ const isPresentL = gestureWeights.presentLeft ?? 0;
31
+ const isCelebrate = gestureWeights.celebrate ?? 0;
32
+ const isNod = gestureWeights.listenNod ?? 0;
33
+ const breath = Math.sin(frame * 0.038) * 0.012;
34
+ const talkCadenceA = Math.sin(frame * 0.048) * speakingWeight;
35
+ const talkCadenceB = Math.cos(frame * 0.038) * speakingWeight;
36
+ const headPitch = -0.04 * speakingWeight + Math.sin(frame * 0.052) * 0.035 * speakingWeight + isNod * Math.sin(frame * 0.055) * 0.045 + isShrug * -0.06;
37
+ const headRoll = isShrug * 0.1 + Math.sin(frame * 0.042) * 0.03 * speakingWeight;
38
+ const headYaw = headYawOffset + Math.cos(frame * 0.036) * 0.035 * speakingWeight;
39
+ const leftShoulderX = -0.12 + isShrug * -0.58 + isPresentL * -0.82 + isPresentR * -0.25 + isCelebrate * -0.92 + speakingWeight * -0.18 + talkCadenceA * 0.08;
40
+ const leftShoulderZ = -0.12 + isShrug * -0.42 + isPresentL * -0.3 + isCelebrate * -0.35 + speakingWeight * -0.08;
41
+ const leftElbowX = -0.24 + isShrug * -0.72 + isPresentL * -0.45 + isCelebrate * -0.55 + speakingWeight * -0.26 + talkCadenceB * 0.07;
42
+ const rightShoulderX = -0.12 + isShrug * -0.58 + isPresentR * -0.82 + isPresentL * -0.25 + isCelebrate * -0.92 + speakingWeight * -0.18 - talkCadenceA * 0.08;
43
+ const rightShoulderZ = 0.12 + isShrug * 0.42 + isPresentR * 0.3 + isCelebrate * 0.35 + speakingWeight * 0.08;
44
+ const rightElbowX = -0.24 + isShrug * -0.72 + isPresentR * -0.45 + isCelebrate * -0.55 + speakingWeight * -0.26 - talkCadenceB * 0.07;
45
+ const torsoPitch = speakingWeight * 0.035 - isShrug * 0.03;
46
+ const torsoYaw = isPresentL * 0.12 - isPresentR * 0.12;
47
+ const scale = interpolate(enterProgress, [0, 1], [1e-3, 1]);
48
+ const auraScale = 1 + speakingWeight * 0.08;
49
+ const clampedSpeak = Math.max(0, Math.min(1, speakingWeight));
50
+ const floorRingColor = interpolateColors(
51
+ clampedSpeak,
52
+ [0, 1],
53
+ [primaryColor, accentColor]
54
+ );
55
+ const activeWhiteMix = interpolateColors(
56
+ clampedSpeak,
57
+ [0, 1],
58
+ [accentColor, "#FFFFFF"]
59
+ );
60
+ return /* @__PURE__ */ jsxs(
61
+ "group",
62
+ {
63
+ position,
64
+ rotation: [0, rotationY, 0],
65
+ scale: [scale, scale, scale],
66
+ children: [
67
+ /* @__PURE__ */ jsxs(
68
+ "mesh",
69
+ {
70
+ position: [0, 0.02, 0],
71
+ rotation: [-Math.PI / 2, 0, 0],
72
+ scale: [auraScale, auraScale, 1],
73
+ children: [
74
+ /* @__PURE__ */ jsx("ringGeometry", { args: [0.42, 0.56, 48] }),
75
+ /* @__PURE__ */ jsx(
76
+ "meshBasicMaterial",
77
+ {
78
+ color: floorRingColor,
79
+ transparent: true,
80
+ opacity: 0.26 + speakingWeight * 0.46
81
+ }
82
+ )
83
+ ]
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.015, 0], rotation: [-Math.PI / 2, 0, 0], children: [
87
+ /* @__PURE__ */ jsx("circleGeometry", { args: [0.42, 48] }),
88
+ /* @__PURE__ */ jsx(
89
+ "meshBasicMaterial",
90
+ {
91
+ color: primaryColor,
92
+ transparent: true,
93
+ opacity: 0.08 + speakingWeight * 0.14
94
+ }
95
+ )
96
+ ] }),
97
+ /* @__PURE__ */ jsxs("group", { position: [-0.16, 0.9, 0], children: [
98
+ /* @__PURE__ */ jsxs("mesh", { children: [
99
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.085, 24, 24] }),
100
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#1E293B", roughness: 0.35, metalness: 0.4 })
101
+ ] }),
102
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.22, 0], children: [
103
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.075, 0.28, 16, 24] }),
104
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#334155", roughness: 0.3, metalness: 0.2 })
105
+ ] }),
106
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.44, 0], children: [
107
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.08, 24, 24] }),
108
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: accentColor, roughness: 0.25, metalness: 0.3 })
109
+ ] }),
110
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.66, 0], children: [
111
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.068, 0.28, 16, 24] }),
112
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#334155", roughness: 0.3, metalness: 0.2 })
113
+ ] }),
114
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.84, 0.06], rotation: [Math.PI / 2, 0, 0], children: [
115
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.075, 0.12, 16, 24] }),
116
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.2, metalness: 0.1 })
117
+ ] })
118
+ ] }),
119
+ /* @__PURE__ */ jsxs("group", { position: [0.16, 0.9, 0], children: [
120
+ /* @__PURE__ */ jsxs("mesh", { children: [
121
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.085, 24, 24] }),
122
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#1E293B", roughness: 0.35, metalness: 0.4 })
123
+ ] }),
124
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.22, 0], children: [
125
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.075, 0.28, 16, 24] }),
126
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#334155", roughness: 0.3, metalness: 0.2 })
127
+ ] }),
128
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.44, 0], children: [
129
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.08, 24, 24] }),
130
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: accentColor, roughness: 0.25, metalness: 0.3 })
131
+ ] }),
132
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.66, 0], children: [
133
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.068, 0.28, 16, 24] }),
134
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#334155", roughness: 0.3, metalness: 0.2 })
135
+ ] }),
136
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.84, 0.06], rotation: [Math.PI / 2, 0, 0], children: [
137
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.075, 0.12, 16, 24] }),
138
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.2, metalness: 0.1 })
139
+ ] })
140
+ ] }),
141
+ /* @__PURE__ */ jsxs(
142
+ "group",
143
+ {
144
+ position: [0, 0.94 + breath, 0],
145
+ rotation: [torsoPitch, torsoYaw, 0],
146
+ children: [
147
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.06, 0], children: [
148
+ /* @__PURE__ */ jsx("cylinderGeometry", { args: [0.21, 0.19, 0.12, 32] }),
149
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#1E293B", roughness: 0.35, metalness: 0.45 })
150
+ ] }),
151
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.44, 0], children: [
152
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.25, 0.42, 24, 32] }),
153
+ /* @__PURE__ */ jsx(
154
+ "meshStandardMaterial",
155
+ {
156
+ color: primaryColor,
157
+ roughness: 0.24,
158
+ metalness: 0.18
159
+ }
160
+ )
161
+ ] }),
162
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.48, 0.245], children: [
163
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.068, 24, 24] }),
164
+ /* @__PURE__ */ jsx("meshBasicMaterial", { color: activeWhiteMix })
165
+ ] }),
166
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.48, 0.235], children: [
167
+ /* @__PURE__ */ jsx("ringGeometry", { args: [0.075, 0.105, 32] }),
168
+ /* @__PURE__ */ jsx("meshBasicMaterial", { color: accentColor })
169
+ ] }),
170
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.84, 0], children: [
171
+ /* @__PURE__ */ jsx("cylinderGeometry", { args: [0.16, 0.2, 0.08, 32] }),
172
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#E2E8F0", roughness: 0.2, metalness: 0.6 })
173
+ ] }),
174
+ /* @__PURE__ */ jsxs(
175
+ "group",
176
+ {
177
+ position: [-0.34, 0.72, 0],
178
+ rotation: [leftShoulderX, 0, leftShoulderZ],
179
+ children: [
180
+ /* @__PURE__ */ jsxs("mesh", { children: [
181
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.095, 24, 24] }),
182
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.2, metalness: 0.3 })
183
+ ] }),
184
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.19, 0], children: [
185
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.068, 0.24, 16, 24] }),
186
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: primaryColor, roughness: 0.25, metalness: 0.15 })
187
+ ] }),
188
+ /* @__PURE__ */ jsxs("group", { position: [0, -0.38, 0], rotation: [leftElbowX, 0, 0], children: [
189
+ /* @__PURE__ */ jsxs("mesh", { children: [
190
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.078, 24, 24] }),
191
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: accentColor, roughness: 0.25, metalness: 0.3 })
192
+ ] }),
193
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.18, 0], children: [
194
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.062, 0.22, 16, 24] }),
195
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.22, metalness: 0.1 })
196
+ ] }),
197
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.36, 0], children: [
198
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.092, 24, 24] }),
199
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#FFFFFF", roughness: 0.18, metalness: 0.1 })
200
+ ] })
201
+ ] })
202
+ ]
203
+ }
204
+ ),
205
+ /* @__PURE__ */ jsxs(
206
+ "group",
207
+ {
208
+ position: [0.34, 0.72, 0],
209
+ rotation: [rightShoulderX, 0, rightShoulderZ],
210
+ children: [
211
+ /* @__PURE__ */ jsxs("mesh", { children: [
212
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.095, 24, 24] }),
213
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.2, metalness: 0.3 })
214
+ ] }),
215
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.19, 0], children: [
216
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.068, 0.24, 16, 24] }),
217
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: primaryColor, roughness: 0.25, metalness: 0.15 })
218
+ ] }),
219
+ /* @__PURE__ */ jsxs("group", { position: [0, -0.38, 0], rotation: [rightElbowX, 0, 0], children: [
220
+ /* @__PURE__ */ jsxs("mesh", { children: [
221
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.078, 24, 24] }),
222
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: accentColor, roughness: 0.25, metalness: 0.3 })
223
+ ] }),
224
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.18, 0], children: [
225
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.062, 0.22, 16, 24] }),
226
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.22, metalness: 0.1 })
227
+ ] }),
228
+ /* @__PURE__ */ jsxs("mesh", { position: [0, -0.36, 0], children: [
229
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.092, 24, 24] }),
230
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: "#FFFFFF", roughness: 0.18, metalness: 0.1 })
231
+ ] })
232
+ ] })
233
+ ]
234
+ }
235
+ ),
236
+ /* @__PURE__ */ jsxs(
237
+ "group",
238
+ {
239
+ position: [0, 1.24 + Math.sin(frame * 0.038 - 0.4) * 8e-3, 0],
240
+ rotation: [headPitch, headYaw, headRoll],
241
+ children: [
242
+ /* @__PURE__ */ jsxs("mesh", { children: [
243
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.31, 36, 36] }),
244
+ /* @__PURE__ */ jsx(
245
+ "meshStandardMaterial",
246
+ {
247
+ color: "#FFFFFF",
248
+ roughness: 0.18,
249
+ metalness: 0.08
250
+ }
251
+ )
252
+ ] }),
253
+ /* @__PURE__ */ jsxs("mesh", { position: [-0.3, 0, 0], rotation: [0, 0, Math.PI / 2], children: [
254
+ /* @__PURE__ */ jsx("cylinderGeometry", { args: [0.09, 0.09, 0.05, 24] }),
255
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: primaryColor, roughness: 0.25, metalness: 0.3 })
256
+ ] }),
257
+ /* @__PURE__ */ jsxs("mesh", { position: [0.3, 0, 0], rotation: [0, 0, Math.PI / 2], children: [
258
+ /* @__PURE__ */ jsx("cylinderGeometry", { args: [0.09, 0.09, 0.05, 24] }),
259
+ /* @__PURE__ */ jsx("meshStandardMaterial", { color: primaryColor, roughness: 0.25, metalness: 0.3 })
260
+ ] }),
261
+ /* @__PURE__ */ jsxs("mesh", { position: [0, 0.02, 0.165], scale: [0.86, 0.62, 0.68], children: [
262
+ /* @__PURE__ */ jsx("sphereGeometry", { args: [0.295, 32, 32] }),
263
+ /* @__PURE__ */ jsx(
264
+ "meshStandardMaterial",
265
+ {
266
+ color: "#090D16",
267
+ roughness: 0.1,
268
+ metalness: 0.35
269
+ }
270
+ )
271
+ ] }),
272
+ /* @__PURE__ */ jsxs("mesh", { position: [-0.095, 0.055, 0.355], children: [
273
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.028, 0.032, 12, 16] }),
274
+ /* @__PURE__ */ jsx("meshBasicMaterial", { color: accentColor })
275
+ ] }),
276
+ /* @__PURE__ */ jsxs("mesh", { position: [0.095, 0.055, 0.355], children: [
277
+ /* @__PURE__ */ jsx("capsuleGeometry", { args: [0.028, 0.032, 12, 16] }),
278
+ /* @__PURE__ */ jsx("meshBasicMaterial", { color: accentColor })
279
+ ] }),
280
+ [-0.055, 0, 0.055].map((xOff, idx) => {
281
+ const barHeight = 0.012 + speechEnergy * (idx === 1 ? 0.046 : 0.028);
282
+ return /* @__PURE__ */ jsxs(
283
+ "mesh",
284
+ {
285
+ position: [xOff, -0.032, 0.358],
286
+ scale: [1, barHeight / 0.012, 1],
287
+ children: [
288
+ /* @__PURE__ */ jsx("boxGeometry", { args: [0.026, 0.012, 0.016] }),
289
+ /* @__PURE__ */ jsx("meshBasicMaterial", { color: activeWhiteMix })
290
+ ]
291
+ },
292
+ idx
293
+ );
294
+ })
295
+ ]
296
+ }
297
+ )
298
+ ]
299
+ }
300
+ )
301
+ ]
302
+ }
303
+ );
304
+ };
305
+
306
+ // packages/kits/src/isometric-3d/IsometricStudioEnvironment.tsx
307
+ import {
308
+ interpolate as interpolate2,
309
+ interpolateColors as interpolateColors2,
310
+ spring as spring2,
311
+ useCurrentFrame as useCurrentFrame2,
312
+ useVideoConfig as useVideoConfig2
313
+ } from "remotion";
314
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
315
+ var IsometricStudioEnvironment = ({ codeMorphFrame, finaleActivateFrame }) => {
316
+ const frame = useCurrentFrame2();
317
+ const { fps } = useVideoConfig2();
318
+ const stageEnter = spring2({
319
+ frame: frame - 2,
320
+ fps,
321
+ config: { damping: 200, stiffness: 48, mass: 1.3 }
322
+ });
323
+ const codeMorph = spring2({
324
+ frame: frame - codeMorphFrame,
325
+ fps,
326
+ config: { damping: 200, stiffness: 32, mass: 1.4 }
327
+ });
328
+ const finaleBoost = spring2({
329
+ frame: frame - finaleActivateFrame,
330
+ fps,
331
+ config: { damping: 200, stiffness: 34, mass: 1.3 }
332
+ });
333
+ const stageScale = interpolate2(stageEnter, [0, 1], [1e-3, 1]);
334
+ const phaseProgress = Math.min(2, codeMorph + finaleBoost);
335
+ const holoColor = interpolateColors2(
336
+ phaseProgress,
337
+ [0, 1, 2],
338
+ ["#F59E0B", "#6366F1", "#10B981"]
339
+ );
340
+ const crystalCoreColor = interpolateColors2(
341
+ finaleBoost,
342
+ [0, 1],
343
+ ["#2563EB", "#10B981"]
344
+ );
345
+ const crystalEmissiveColor = interpolateColors2(
346
+ finaleBoost,
347
+ [0, 1],
348
+ ["#1D4ED8", "#059669"]
349
+ );
350
+ return /* @__PURE__ */ jsxs2("group", { scale: [stageScale, stageScale, stageScale], children: [
351
+ /* @__PURE__ */ jsx2("ambientLight", { intensity: 1.15, color: "#F8FAFC" }),
352
+ /* @__PURE__ */ jsx2(
353
+ "directionalLight",
354
+ {
355
+ position: [7, 12, 8],
356
+ intensity: 1.75,
357
+ color: "#FFFFFF"
358
+ }
359
+ ),
360
+ /* @__PURE__ */ jsx2(
361
+ "directionalLight",
362
+ {
363
+ position: [-8, 6, -4],
364
+ intensity: 0.75,
365
+ color: "#C7D2FE"
366
+ }
367
+ ),
368
+ /* @__PURE__ */ jsx2(
369
+ "pointLight",
370
+ {
371
+ position: [0, 2.2, 0.2],
372
+ intensity: 1.6 + codeMorph * 1.2 + finaleBoost * 1.2,
373
+ distance: 6,
374
+ color: holoColor
375
+ }
376
+ ),
377
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, -0.2, 0], children: [
378
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [8.4, 0.4, 6.4] }),
379
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#FFFFFF", roughness: 0.25, metalness: 0.05 })
380
+ ] }),
381
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, -0.43, 0], children: [
382
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [8.48, 0.07, 6.48] }),
383
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#2563EB" })
384
+ ] }),
385
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, -0.62, 0], children: [
386
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [8.1, 0.32, 6.1] }),
387
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#1E1B4B", roughness: 0.4, metalness: 0.3 })
388
+ ] }),
389
+ [-3, -2, -1, 0, 1, 2, 3].map((x) => /* @__PURE__ */ jsxs2("mesh", { position: [x, 4e-3, 0], children: [
390
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [0.018, 4e-3, 5.8] }),
391
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#E2E8F0" })
392
+ ] }, `gx-${x}`)),
393
+ [-2, -1, 0, 1, 2].map((z) => /* @__PURE__ */ jsxs2("mesh", { position: [0, 4e-3, z], children: [
394
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [7.8, 4e-3, 0.018] }),
395
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#E2E8F0" })
396
+ ] }, `gz-${z}`)),
397
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 1.45, -3.05], children: [
398
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [8.4, 2.9, 0.28] }),
399
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#F1F5F9", roughness: 0.3, metalness: 0.05 })
400
+ ] }),
401
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 2.92, -3.05], children: [
402
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [8.4, 0.08, 0.3] }),
403
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#7209B7" })
404
+ ] }),
405
+ /* @__PURE__ */ jsxs2("mesh", { position: [-4.06, 1.45, 0], children: [
406
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [0.28, 2.9, 6.4] }),
407
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#E2E8F0", roughness: 0.3, metalness: 0.05 })
408
+ ] }),
409
+ /* @__PURE__ */ jsxs2("mesh", { position: [-4.06, 2.92, 0], children: [
410
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [0.3, 0.08, 6.4] }),
411
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#2563EB" })
412
+ ] }),
413
+ /* @__PURE__ */ jsxs2("group", { position: [0, 1.65, -2.86], children: [
414
+ /* @__PURE__ */ jsxs2("mesh", { children: [
415
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [4.2, 1.55, 0.08] }),
416
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#0F172A", roughness: 0.2, metalness: 0.4 })
417
+ ] }),
418
+ [-0.42, -0.14, 0.14, 0.42].map((yOff, idx) => {
419
+ const baseW = 1.25 + idx * 0.55 % 1.3;
420
+ const barWidth = baseW + codeMorph * 0.45 + finaleBoost * 0.25;
421
+ const barColor = interpolateColors2(
422
+ codeMorph,
423
+ [0, 1],
424
+ idx % 2 === 0 ? ["#F59E0B", "#10B981"] : ["#F43F5E", "#818CF8"]
425
+ );
426
+ return /* @__PURE__ */ jsxs2(
427
+ "mesh",
428
+ {
429
+ position: [-1.5 + barWidth / 2, yOff, 0.05],
430
+ scale: [barWidth, 1, 1],
431
+ children: [
432
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [1, 0.13, 0.03] }),
433
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: barColor })
434
+ ]
435
+ },
436
+ idx
437
+ );
438
+ })
439
+ ] }),
440
+ [-1.6, 0, 1.6].map((zPos, i) => /* @__PURE__ */ jsxs2("mesh", { position: [-3.88, 1.45, zPos], children: [
441
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [0.08, 2.1, 0.18] }),
442
+ /* @__PURE__ */ jsx2(
443
+ "meshBasicMaterial",
444
+ {
445
+ color: i === 1 ? "#10B981" : "#6366F1"
446
+ }
447
+ )
448
+ ] }, i)),
449
+ /* @__PURE__ */ jsxs2("group", { position: [0, 0, 0.35], children: [
450
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 0.04, 0], children: [
451
+ /* @__PURE__ */ jsx2("cylinderGeometry", { args: [0.92, 1.02, 0.08, 48] }),
452
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#1E293B", roughness: 0.3, metalness: 0.5 })
453
+ ] }),
454
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 0.46, 0], children: [
455
+ /* @__PURE__ */ jsx2("cylinderGeometry", { args: [0.38, 0.52, 0.84, 48] }),
456
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#F8FAFC", roughness: 0.22, metalness: 0.15 })
457
+ ] }),
458
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 0.9, 0], children: [
459
+ /* @__PURE__ */ jsx2("cylinderGeometry", { args: [1.05, 0.95, 0.1, 48] }),
460
+ /* @__PURE__ */ jsx2("meshStandardMaterial", { color: "#0F172A", roughness: 0.15, metalness: 0.45 })
461
+ ] }),
462
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 0.96, 0], rotation: [-Math.PI / 2, 0, 0], children: [
463
+ /* @__PURE__ */ jsx2("ringGeometry", { args: [0.68, 0.82, 48] }),
464
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: holoColor })
465
+ ] }),
466
+ /* @__PURE__ */ jsxs2("mesh", { position: [0, 0.958, 0], rotation: [-Math.PI / 2, 0, 0], children: [
467
+ /* @__PURE__ */ jsx2("circleGeometry", { args: [0.65, 48] }),
468
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: holoColor, transparent: true, opacity: 0.22 })
469
+ ] }),
470
+ codeMorph < 0.98 && /* @__PURE__ */ jsx2(
471
+ "group",
472
+ {
473
+ position: [0, 1.62, 0],
474
+ scale: [1 - codeMorph, 1 - codeMorph, 1 - codeMorph],
475
+ children: [-0.45, 0, 0.45].map((xOff, idx) => /* @__PURE__ */ jsxs2(
476
+ "mesh",
477
+ {
478
+ position: [
479
+ xOff,
480
+ Math.sin(frame * 0.032 + idx * 1.8) * 0.06,
481
+ (idx - 1) * 0.14
482
+ ],
483
+ rotation: [
484
+ 0.12 * Math.sin(frame * 0.025 + idx),
485
+ frame * 6e-3 + idx * 0.5,
486
+ 0.14 * Math.cos(frame * 0.028 + idx)
487
+ ],
488
+ children: [
489
+ /* @__PURE__ */ jsx2("boxGeometry", { args: [0.42, 0.22, 0.28] }),
490
+ /* @__PURE__ */ jsx2(
491
+ "meshStandardMaterial",
492
+ {
493
+ color: idx === 1 ? "#F43F5E" : "#F59E0B",
494
+ roughness: 0.2,
495
+ metalness: 0.2
496
+ }
497
+ )
498
+ ]
499
+ },
500
+ idx
501
+ ))
502
+ }
503
+ ),
504
+ codeMorph > 0.02 && /* @__PURE__ */ jsxs2(
505
+ "group",
506
+ {
507
+ position: [0, 1.76 + Math.sin(frame * 0.03) * 0.03, 0],
508
+ scale: [codeMorph, codeMorph, codeMorph],
509
+ children: [
510
+ /* @__PURE__ */ jsxs2(
511
+ "mesh",
512
+ {
513
+ rotation: [
514
+ frame * 7e-3,
515
+ frame * 0.011,
516
+ frame * 5e-3
517
+ ],
518
+ scale: [
519
+ 1 + finaleBoost * 0.16,
520
+ 1 + finaleBoost * 0.16,
521
+ 1 + finaleBoost * 0.16
522
+ ],
523
+ children: [
524
+ /* @__PURE__ */ jsx2("octahedronGeometry", { args: [0.42, 0] }),
525
+ /* @__PURE__ */ jsx2(
526
+ "meshStandardMaterial",
527
+ {
528
+ color: crystalCoreColor,
529
+ emissive: crystalEmissiveColor,
530
+ emissiveIntensity: 0.65,
531
+ roughness: 0.15,
532
+ metalness: 0.4
533
+ }
534
+ )
535
+ ]
536
+ }
537
+ ),
538
+ /* @__PURE__ */ jsxs2(
539
+ "mesh",
540
+ {
541
+ rotation: [
542
+ Math.PI / 3 + frame * 8e-3,
543
+ frame * 0.01,
544
+ 0
545
+ ],
546
+ children: [
547
+ /* @__PURE__ */ jsx2("torusGeometry", { args: [0.68, 0.022, 16, 64] }),
548
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#818CF8" })
549
+ ]
550
+ }
551
+ ),
552
+ /* @__PURE__ */ jsxs2(
553
+ "mesh",
554
+ {
555
+ rotation: [
556
+ -Math.PI / 3 - frame * 7e-3,
557
+ -frame * 9e-3,
558
+ Math.PI / 4
559
+ ],
560
+ children: [
561
+ /* @__PURE__ */ jsx2("torusGeometry", { args: [0.82, 0.022, 16, 64] }),
562
+ /* @__PURE__ */ jsx2("meshBasicMaterial", { color: "#10B981" })
563
+ ]
564
+ }
565
+ ),
566
+ finaleBoost > 0.02 && [0, 1, 2, 3].map((satIdx) => {
567
+ const angle = frame * 0.014 + satIdx * Math.PI / 2;
568
+ const radius = 0.95 * finaleBoost;
569
+ return /* @__PURE__ */ jsxs2(
570
+ "mesh",
571
+ {
572
+ position: [
573
+ Math.cos(angle) * radius,
574
+ Math.sin(angle * 2) * 0.08,
575
+ Math.sin(angle) * radius
576
+ ],
577
+ scale: [finaleBoost, finaleBoost, finaleBoost],
578
+ children: [
579
+ /* @__PURE__ */ jsx2("sphereGeometry", { args: [0.085, 20, 20] }),
580
+ /* @__PURE__ */ jsx2(
581
+ "meshBasicMaterial",
582
+ {
583
+ color: satIdx % 2 === 0 ? "#10B981" : "#FFFFFF"
584
+ }
585
+ )
586
+ ]
587
+ },
588
+ satIdx
589
+ );
590
+ })
591
+ ]
592
+ }
593
+ )
594
+ ] })
595
+ ] });
596
+ };
597
+
598
+ export {
599
+ Stylized3DCharacter,
600
+ IsometricStudioEnvironment
601
+ };