@vibecuting/video-project-core 0.1.26 → 0.1.28

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 (266) hide show
  1. package/package.json +4 -4
  2. package/src/base/BaseRemotionScene.tsx +4 -3
  3. package/src/core/index.test.ts +40 -0
  4. package/src/core/intro/_shared/intro-layout.test.ts +18 -0
  5. package/src/core/intro/_shared/intro-layout.ts +50 -0
  6. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper-Horizontal.tsx +25 -0
  7. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper-Landscape.tsx +25 -0
  8. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper.stories.tsx +31 -0
  9. package/src/core/intro/cyberpunk-intro-holo/default-cyberpunk-intro-bumper.tsx +118 -0
  10. package/src/core/intro/cyberpunk-intro-holo/index.ts +11 -0
  11. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper-Horizontal.tsx +24 -0
  12. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper-Landscape.tsx +24 -0
  13. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper.stories.tsx +30 -0
  14. package/src/core/intro/cyberpunk-intro-neon/default-cyberpunk-intro-bumper.tsx +108 -0
  15. package/src/core/intro/cyberpunk-intro-neon/index.ts +10 -0
  16. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper-Horizontal.tsx +24 -0
  17. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper-Landscape.tsx +24 -0
  18. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper.stories.tsx +29 -0
  19. package/src/core/intro/default-cinematic-intro-bumper/default-cinematic-intro-bumper.tsx +234 -0
  20. package/src/core/intro/default-cinematic-intro-bumper/index.ts +11 -0
  21. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper-Horizontal.tsx +24 -0
  22. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper-Landscape.tsx +24 -0
  23. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper.stories.tsx +29 -0
  24. package/src/core/intro/default-festival-intro-bumper/default-festival-intro-bumper.tsx +187 -0
  25. package/src/core/intro/default-festival-intro-bumper/index.ts +11 -0
  26. package/src/core/intro/default-intro-bumper/default-intro-bumper-Horizontal.tsx +24 -0
  27. package/src/core/intro/default-intro-bumper/default-intro-bumper-Landscape.tsx +24 -0
  28. package/src/core/intro/default-intro-bumper/default-intro-bumper.stories.tsx +41 -0
  29. package/src/core/intro/default-intro-bumper/default-intro-bumper.tsx +256 -0
  30. package/src/core/intro/default-intro-bumper/index.ts +11 -0
  31. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper-Horizontal.tsx +24 -0
  32. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper-Landscape.tsx +24 -0
  33. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper.stories.tsx +29 -0
  34. package/src/core/intro/default-noir-intro-bumper/default-noir-intro-bumper.tsx +122 -0
  35. package/src/core/intro/default-noir-intro-bumper/index.ts +11 -0
  36. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper-Horizontal.tsx +24 -0
  37. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper-Landscape.tsx +24 -0
  38. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper.stories.tsx +29 -0
  39. package/src/core/intro/default-trailer-intro-bumper/default-trailer-intro-bumper.tsx +181 -0
  40. package/src/core/intro/default-trailer-intro-bumper/index.ts +11 -0
  41. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper-Horizontal.tsx +18 -0
  42. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper-Landscape.tsx +18 -0
  43. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper.stories.tsx +31 -0
  44. package/src/core/intro/documentary-intro-observation/default-documentary-intro-bumper.tsx +158 -0
  45. package/src/core/intro/documentary-intro-observation/index.ts +10 -0
  46. package/src/core/intro/family-intro-reunion/default-family-intro-bumper-Horizontal.tsx +18 -0
  47. package/src/core/intro/family-intro-reunion/default-family-intro-bumper-Landscape.tsx +18 -0
  48. package/src/core/intro/family-intro-reunion/default-family-intro-bumper.stories.tsx +43 -0
  49. package/src/core/intro/family-intro-reunion/default-family-intro-bumper.tsx +165 -0
  50. package/src/core/intro/family-intro-reunion/index.ts +10 -0
  51. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper-Horizontal.tsx +1 -0
  52. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper-Landscape.tsx +1 -0
  53. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper.stories.tsx +30 -0
  54. package/src/core/intro/festival-intro-spotlight/default-festival-intro-bumper.tsx +105 -0
  55. package/src/core/intro/festival-intro-spotlight/index.ts +10 -0
  56. package/src/core/intro/index.test.ts +45 -0
  57. package/src/core/intro/index.ts +17 -0
  58. package/src/core/intro/noir-intro-city/default-noir-intro-bumper-Horizontal.tsx +24 -0
  59. package/src/core/intro/noir-intro-city/default-noir-intro-bumper-Landscape.tsx +24 -0
  60. package/src/core/intro/noir-intro-city/default-noir-intro-bumper.stories.tsx +31 -0
  61. package/src/core/intro/noir-intro-city/default-noir-intro-bumper.tsx +96 -0
  62. package/src/core/intro/noir-intro-city/index.ts +10 -0
  63. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper-Horizontal.tsx +1 -0
  64. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper-Landscape.tsx +1 -0
  65. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.stories.tsx +31 -0
  66. package/src/core/intro/noir-intro-deluxe/default-noir-intro-bumper.tsx +117 -0
  67. package/src/core/intro/noir-intro-deluxe/index.ts +10 -0
  68. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper-Horizontal.tsx +1 -0
  69. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper-Landscape.tsx +1 -0
  70. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.stories.tsx +48 -0
  71. package/src/core/intro/sci-fi-intro/default-sci-fi-intro-bumper.tsx +105 -0
  72. package/src/core/intro/sci-fi-intro/index.ts +10 -0
  73. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Horizontal.tsx +18 -0
  74. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper-Landscape.tsx +18 -0
  75. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.stories.tsx +31 -0
  76. package/src/core/intro/thriller-intro-suspense/default-thriller-intro-bumper.tsx +155 -0
  77. package/src/core/intro/thriller-intro-suspense/index.ts +10 -0
  78. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper-Horizontal.tsx +1 -0
  79. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper-Landscape.tsx +1 -0
  80. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper.stories.tsx +30 -0
  81. package/src/core/intro/trailer-intro-premiere/default-trailer-intro-bumper.tsx +104 -0
  82. package/src/core/intro/trailer-intro-premiere/index.ts +10 -0
  83. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper-Horizontal.tsx +18 -0
  84. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper-Landscape.tsx +18 -0
  85. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper.stories.tsx +43 -0
  86. package/src/core/intro/travel-intro-journey/default-travel-intro-bumper.tsx +158 -0
  87. package/src/core/intro/travel-intro-journey/index.ts +10 -0
  88. package/src/core/intro/western-intro/default-western-intro-bumper-Horizontal.tsx +24 -0
  89. package/src/core/intro/western-intro/default-western-intro-bumper-Landscape.tsx +24 -0
  90. package/src/core/intro/western-intro/default-western-intro-bumper.stories.tsx +29 -0
  91. package/src/core/intro/western-intro/default-western-intro-bumper.tsx +146 -0
  92. package/src/core/intro/western-intro/index.ts +4 -0
  93. package/src/core/intro/western-intro-gangster/default-western-intro-bumper-Horizontal.tsx +25 -0
  94. package/src/core/intro/western-intro-gangster/default-western-intro-bumper-Landscape.tsx +25 -0
  95. package/src/core/intro/western-intro-gangster/default-western-intro-bumper.stories.tsx +31 -0
  96. package/src/core/intro/western-intro-gangster/default-western-intro-bumper.tsx +105 -0
  97. package/src/core/intro/western-intro-gangster/index.ts +11 -0
  98. package/src/core/outro/_shared/outro-layout.test.ts +32 -0
  99. package/src/core/outro/_shared/outro-layout.ts +72 -0
  100. package/src/core/outro/award-outro-celebration/default-award-outro-bumper-Horizontal.tsx +18 -0
  101. package/src/core/outro/award-outro-celebration/default-award-outro-bumper-Landscape.tsx +18 -0
  102. package/src/core/outro/award-outro-celebration/default-award-outro-bumper.stories.tsx +42 -0
  103. package/src/core/outro/award-outro-celebration/default-award-outro-bumper.tsx +152 -0
  104. package/src/core/outro/award-outro-celebration/index.ts +10 -0
  105. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper-Horizontal.tsx +1 -0
  106. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper-Landscape.tsx +1 -0
  107. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper.stories.tsx +28 -0
  108. package/src/core/outro/blackout-outro-finale/default-blackout-outro-bumper.tsx +71 -0
  109. package/src/core/outro/blackout-outro-finale/index.ts +10 -0
  110. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Horizontal.tsx +24 -0
  111. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro-Landscape.tsx +24 -0
  112. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.stories.tsx +31 -0
  113. package/src/core/outro/credits-roll-outro-epic/default-credits-roll-outro.tsx +106 -0
  114. package/src/core/outro/credits-roll-outro-epic/index.ts +10 -0
  115. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro-Horizontal.tsx +1 -0
  116. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro-Landscape.tsx +1 -0
  117. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.stories.tsx +30 -0
  118. package/src/core/outro/credits-roll-outro-premium/default-credits-roll-outro.tsx +88 -0
  119. package/src/core/outro/credits-roll-outro-premium/index.ts +10 -0
  120. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Horizontal.tsx +25 -0
  121. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro-Landscape.tsx +25 -0
  122. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.stories.tsx +32 -0
  123. package/src/core/outro/credits-roll-outro-royal/default-credits-roll-outro.tsx +110 -0
  124. package/src/core/outro/credits-roll-outro-royal/index.ts +11 -0
  125. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Horizontal.tsx +22 -0
  126. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper-Landscape.tsx +22 -0
  127. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.stories.tsx +48 -0
  128. package/src/core/outro/default-blackout-outro-bumper/default-blackout-outro-bumper.tsx +124 -0
  129. package/src/core/outro/default-blackout-outro-bumper/index.ts +11 -0
  130. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro-Horizontal.tsx +22 -0
  131. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro-Landscape.tsx +22 -0
  132. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro.stories.tsx +48 -0
  133. package/src/core/outro/default-credits-roll-outro/default-credits-roll-outro.tsx +208 -0
  134. package/src/core/outro/default-credits-roll-outro/index.ts +11 -0
  135. package/src/core/outro/default-epilogue-outro/default-epilogue-outro-Horizontal.tsx +22 -0
  136. package/src/core/outro/default-epilogue-outro/default-epilogue-outro-Landscape.tsx +22 -0
  137. package/src/core/outro/default-epilogue-outro/default-epilogue-outro.stories.tsx +48 -0
  138. package/src/core/outro/default-epilogue-outro/default-epilogue-outro.tsx +115 -0
  139. package/src/core/outro/default-epilogue-outro/index.ts +11 -0
  140. package/src/core/outro/default-outro-bumper/default-outro-bumper-Horizontal.tsx +22 -0
  141. package/src/core/outro/default-outro-bumper/default-outro-bumper-Landscape.tsx +22 -0
  142. package/src/core/outro/default-outro-bumper/default-outro-bumper.stories.tsx +48 -0
  143. package/src/core/outro/default-outro-bumper/default-outro-bumper.tsx +159 -0
  144. package/src/core/outro/default-outro-bumper/index.ts +11 -0
  145. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper-Horizontal.tsx +22 -0
  146. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper-Landscape.tsx +22 -0
  147. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper.stories.tsx +48 -0
  148. package/src/core/outro/default-sunset-outro-bumper/default-sunset-outro-bumper.tsx +183 -0
  149. package/src/core/outro/default-sunset-outro-bumper/index.ts +11 -0
  150. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper-Horizontal.tsx +18 -0
  151. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper-Landscape.tsx +18 -0
  152. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper.stories.tsx +31 -0
  153. package/src/core/outro/festival-outro-encore/default-festival-outro-bumper.tsx +130 -0
  154. package/src/core/outro/festival-outro-encore/index.ts +10 -0
  155. package/src/core/outro/heist-outro/default-heist-outro-bumper-Horizontal.tsx +24 -0
  156. package/src/core/outro/heist-outro/default-heist-outro-bumper-Landscape.tsx +24 -0
  157. package/src/core/outro/heist-outro/default-heist-outro-bumper.stories.tsx +29 -0
  158. package/src/core/outro/heist-outro/default-heist-outro-bumper.tsx +160 -0
  159. package/src/core/outro/heist-outro/index.ts +4 -0
  160. package/src/core/outro/index.test.ts +88 -0
  161. package/src/core/outro/index.ts +73 -0
  162. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper-Horizontal.tsx +18 -0
  163. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper-Landscape.tsx +18 -0
  164. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.stories.tsx +42 -0
  165. package/src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.tsx +158 -0
  166. package/src/core/outro/memoir-outro-reflection/index.ts +10 -0
  167. package/src/core/outro/romance-outro/default-romance-outro-bumper-Horizontal.tsx +1 -0
  168. package/src/core/outro/romance-outro/default-romance-outro-bumper-Landscape.tsx +1 -0
  169. package/src/core/outro/romance-outro/default-romance-outro-bumper.stories.tsx +48 -0
  170. package/src/core/outro/romance-outro/default-romance-outro-bumper.tsx +123 -0
  171. package/src/core/outro/romance-outro/index.ts +10 -0
  172. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper-Horizontal.tsx +1 -0
  173. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper-Landscape.tsx +1 -0
  174. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.stories.tsx +30 -0
  175. package/src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.tsx +75 -0
  176. package/src/core/outro/sunset-outro-coda/index.ts +10 -0
  177. package/src/core/scene/2dscene/default-2d-scene-Horizontal.stories.tsx +1 -1
  178. package/src/core/scene/2dscene/default-2d-scene.stories.tsx +1 -1
  179. package/src/core/scene/3dscene/default-3d-scene-Horizontal.stories.tsx +1 -1
  180. package/src/core/scene/3dscene/default-3d-scene.stories.tsx +1 -1
  181. package/src/core/scene/index.ts +3 -0
  182. package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Horizontal.stories.tsx +46 -0
  183. package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Horizontal.tsx +20 -0
  184. package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Landscape.tsx +20 -0
  185. package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene.stories.tsx +46 -0
  186. package/src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene.tsx +255 -0
  187. package/src/core/scene/photo/3dvr-photo/index.ts +3 -0
  188. package/src/core/scene/photo/default-live-photo-scene-Horizontal.stories.tsx +33 -0
  189. package/src/core/scene/photo/default-live-photo-scene-Horizontal.tsx +20 -0
  190. package/src/core/scene/photo/default-live-photo-scene-Landscape.tsx +20 -0
  191. package/src/core/scene/photo/default-live-photo-scene.stories.tsx +33 -0
  192. package/src/core/scene/photo/default-live-photo-scene.tsx +432 -0
  193. package/src/core/scene/photo/default-photo-strip-scene-Horizontal.tsx +20 -0
  194. package/src/core/scene/photo/default-photo-strip-scene-Landscape.tsx +20 -0
  195. package/src/core/scene/photo/default-photo-strip-scene.stories.tsx +38 -0
  196. package/src/core/scene/photo/default-photo-strip-scene.tsx +19 -0
  197. package/src/core/scene/photo/default-photo-wall-scene-Horizontal.tsx +20 -0
  198. package/src/core/scene/photo/default-photo-wall-scene-Landscape.tsx +20 -0
  199. package/src/core/scene/photo/default-photo-wall-scene.stories.tsx +38 -0
  200. package/src/core/scene/photo/default-photo-wall-scene.tsx +19 -0
  201. package/src/core/scene/photo/effects-photo/default-effects-photo-scene-Horizontal.stories.tsx +44 -0
  202. package/src/core/scene/photo/effects-photo/default-effects-photo-scene-Horizontal.tsx +20 -0
  203. package/src/core/scene/photo/effects-photo/default-effects-photo-scene-Landscape.tsx +20 -0
  204. package/src/core/scene/photo/effects-photo/default-effects-photo-scene.stories.tsx +44 -0
  205. package/src/core/scene/photo/effects-photo/default-effects-photo-scene.tsx +352 -0
  206. package/src/core/scene/photo/effects-photo/index.ts +3 -0
  207. package/src/core/scene/photo/index.ts +25 -0
  208. package/src/core/scene/photo/photo-storybook.test.tsx +112 -0
  209. package/src/core/scene/slide/_shared/index.ts +27 -0
  210. package/src/core/scene/slide/_shared/media-templates.test.ts +47 -0
  211. package/src/core/scene/slide/_shared/media-templates.tsx +324 -0
  212. package/src/core/scene/slide/default-slide-scene-Horizontal.animated.stories.tsx +1 -1
  213. package/src/core/scene/slide/default-slide-scene-Horizontal.stories.tsx +1 -1
  214. package/src/core/scene/slide/default-slide-scene.animated.stories.tsx +1 -1
  215. package/src/core/scene/slide/default-slide-scene.stories.tsx +1 -1
  216. package/src/core/scene/slide/index.test.ts +28 -0
  217. package/src/core/scene/slide/index.ts +14 -0
  218. package/src/core/scene/slide/person-intro/default-person-intro-duo-slide.tsx +19 -0
  219. package/src/core/scene/slide/person-intro/default-person-intro-group-slide.tsx +168 -0
  220. package/src/core/scene/slide/person-intro/default-person-intro-quad-slide.tsx +19 -0
  221. package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.animated.stories.tsx +47 -0
  222. package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.stories.tsx +46 -0
  223. package/src/core/scene/slide/person-intro/default-person-intro-slide-Horizontal.tsx +302 -0
  224. package/src/core/scene/slide/person-intro/default-person-intro-slide-Landscape.tsx +20 -0
  225. package/src/core/scene/slide/person-intro/default-person-intro-slide.animated.stories.tsx +126 -0
  226. package/src/core/scene/slide/person-intro/default-person-intro-slide.stories.tsx +119 -0
  227. package/src/core/scene/slide/person-intro/default-person-intro-slide.tsx +363 -0
  228. package/src/core/scene/slide/person-intro/default-person-intro-trio-slide.tsx +19 -0
  229. package/src/core/scene/slide/person-intro/index.ts +8 -0
  230. package/src/core/scene/slide/photo-album/default-photo-album-multi-slide.tsx +19 -0
  231. package/src/core/scene/slide/photo-album/default-photo-album-pair-slide.tsx +19 -0
  232. package/src/core/scene/slide/photo-album/default-photo-album-single-slide.tsx +19 -0
  233. package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.animated.stories.tsx +26 -0
  234. package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.stories.tsx +25 -0
  235. package/src/core/scene/slide/photo-album/default-photo-album-slide-Horizontal.tsx +20 -0
  236. package/src/core/scene/slide/photo-album/default-photo-album-slide-Landscape.tsx +20 -0
  237. package/src/core/scene/slide/photo-album/default-photo-album-slide.animated.stories.tsx +94 -0
  238. package/src/core/scene/slide/photo-album/default-photo-album-slide.stories.tsx +87 -0
  239. package/src/core/scene/slide/photo-album/default-photo-album-slide.tsx +414 -0
  240. package/src/core/scene/slide/photo-album/index.ts +7 -0
  241. package/src/core/scene/slide/video-showcase/default-video-showcase-multi-slide.tsx +195 -0
  242. package/src/core/scene/slide/video-showcase/default-video-showcase-slide-Horizontal.tsx +212 -0
  243. package/src/core/scene/slide/video-showcase/default-video-showcase-slide-Landscape.tsx +20 -0
  244. package/src/core/scene/slide/video-showcase/default-video-showcase-slide.animated.stories.tsx +78 -0
  245. package/src/core/scene/slide/video-showcase/default-video-showcase-slide.stories.tsx +74 -0
  246. package/src/core/scene/slide/video-showcase/default-video-showcase-slide.tsx +365 -0
  247. package/src/core/scene/slide/video-showcase/index.ts +5 -0
  248. package/src/core/scene/video/default-video-scene-Horizontal.stories.tsx +26 -0
  249. package/src/core/scene/video/default-video-scene-Horizontal.tsx +20 -0
  250. package/src/core/scene/video/default-video-scene-Landscape.tsx +20 -0
  251. package/src/core/scene/video/default-video-scene.stories.tsx +26 -0
  252. package/src/core/scene/video/default-video-scene.tsx +283 -0
  253. package/src/core/scene/video/default-video-split-scene-Horizontal.tsx +20 -0
  254. package/src/core/scene/video/default-video-split-scene-Landscape.tsx +20 -0
  255. package/src/core/scene/video/default-video-split-scene.stories.tsx +41 -0
  256. package/src/core/scene/video/default-video-split-scene.tsx +19 -0
  257. package/src/core/scene/video/default-video-wall-scene-Horizontal.tsx +20 -0
  258. package/src/core/scene/video/default-video-wall-scene-Landscape.tsx +20 -0
  259. package/src/core/scene/video/default-video-wall-scene.stories.tsx +40 -0
  260. package/src/core/scene/video/default-video-wall-scene.tsx +19 -0
  261. package/src/core/scene/video/index.ts +9 -0
  262. package/src/storybook/remotion-preview.tsx +112 -6
  263. package/src/core/intro/default-intro-bumper.stories.tsx +0 -19
  264. package/src/core/intro/default-intro-bumper.tsx +0 -218
  265. package/src/core/outro/default-outro-bumper.stories.tsx +0 -19
  266. package/src/core/outro/default-outro-bumper.tsx +0 -218
@@ -0,0 +1,158 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
6
+ import { useSceneMotion } from '../../../base'
7
+ import { getOutroTypographyScale, resolveOutroLayout, type OutroLayout } from '../_shared/outro-layout'
8
+ import { getOutroBodyMaxWidth, getOutroLineClamp } from '../_shared/outro-layout'
9
+
10
+ export interface DefaultMemoirOutroBumperProps extends BaseRemotionSceneProps {
11
+ title: string
12
+ note?: string
13
+ kicker?: string
14
+ creditLine?: string
15
+ footer?: string
16
+ accent?: string
17
+ secondaryAccent?: string
18
+ textColor?: string
19
+ layout?: OutroLayout
20
+ posterImageSrc?: string
21
+ posterImageAlt?: string
22
+ children?: ReactNode
23
+ }
24
+
25
+ export const componentMetadata = defineComponentProjectComponentMetadata({
26
+ name: 'DefaultMemoirOutroBumper',
27
+ description: 'Memoir outro with scrapbook panels and reflective chapter notes',
28
+ sourceFile: 'src/core/outro/memoir-outro-reflection/default-memoir-outro-bumper.tsx',
29
+ aspectRatio: '16:9',
30
+ sceneType: 'outro',
31
+ tags: ['outro', 'bumper', 'memoir', 'reflection'],
32
+ propsTypeName: 'DefaultMemoirOutroBumperProps',
33
+ })
34
+
35
+ export function DefaultMemoirOutroBumper({
36
+ id,
37
+ name,
38
+ title,
39
+ note,
40
+ kicker,
41
+ creditLine,
42
+ footer,
43
+ accent,
44
+ secondaryAccent,
45
+ textColor,
46
+ layout,
47
+ posterImageSrc,
48
+ posterImageAlt,
49
+ children,
50
+ }: DefaultMemoirOutroBumperProps) {
51
+ const runtime = useRemotionSceneRuntime()
52
+ const motion = useSceneMotion()
53
+ const resolvedLayout = resolveOutroLayout(layout, runtime.width, runtime.height)
54
+ const isHorizontal = resolvedLayout === 'horizontal'
55
+ const { titleFontSize, noteFontSize, kickerFontSize, footerFontSize } = getOutroTypographyScale(runtime.height, resolvedLayout)
56
+
57
+ return (
58
+ <BaseRemotionScene
59
+ id={id}
60
+ name={name}
61
+ style={{
62
+ background: isHorizontal
63
+ ? `linear-gradient(180deg, ${accent ?? '#111827'} 0%, #0f172a 40%, #020617 100%)`
64
+ : `radial-gradient(circle at 50% 78%, ${secondaryAccent ?? 'rgba(148,163,184,0.18)'} 0%, ${accent ?? '#0f172a'} 44%, #020617 100%)`,
65
+ color: textColor ?? '#f8fafc',
66
+ display: 'grid',
67
+ placeItems: 'center',
68
+ padding: Math.round(runtime.height * (isHorizontal ? 0.055 : 0.07)),
69
+ }}
70
+ >
71
+ <section
72
+ style={{
73
+ position: 'relative',
74
+ zIndex: 1,
75
+ width: '100%',
76
+ height: '100%',
77
+ display: 'grid',
78
+ gridTemplateColumns: isHorizontal ? 'minmax(220px, 0.36fr) minmax(0, 1.64fr)' : '1fr',
79
+ gap: isHorizontal ? 24 : 16,
80
+ alignItems: 'stretch',
81
+ minWidth: 0,
82
+ minHeight: 0,
83
+ }}
84
+ >
85
+ <aside style={{ display: 'grid', gap: 10, alignContent: 'center', border: '1px solid rgba(248,250,252,0.1)', padding: 16, background: 'rgba(255,255,255,0.03)', textAlign: isHorizontal ? 'left' : 'center' }}>
86
+ <p style={{ margin: 0, fontSize: kickerFontSize, letterSpacing: '0.3em', textTransform: 'uppercase', opacity: 0.58 }}>
87
+ {kicker ?? 'Reflection'}
88
+ </p>
89
+ <div style={{ width: '100%', height: 1, background: 'rgba(248,250,252,0.12)' }} />
90
+ <p style={{ margin: 0, fontSize: footerFontSize, letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.5 }}>
91
+ {footer ?? 'End Credits'}
92
+ </p>
93
+ </aside>
94
+ <div style={{ display: 'grid', gap: 14, alignContent: 'center', minWidth: 0 }}>
95
+ <h1
96
+ style={{
97
+ margin: 0,
98
+ fontSize: titleFontSize,
99
+ lineHeight: 0.92,
100
+ letterSpacing: '-0.07em',
101
+ textTransform: 'uppercase',
102
+ transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 10}px, 0)` : 'none',
103
+ }}
104
+ >
105
+ {title}
106
+ </h1>
107
+ {note ? <p style={{ margin: 0, maxWidth: getOutroBodyMaxWidth(runtime.width, resolvedLayout, 0.72, 0.58, { min: 240, max: 720 }), fontSize: noteFontSize, lineHeight: 1.55, opacity: 0.8, ...getOutroLineClamp(isHorizontal ? 3 : 4) }}>{note}</p> : null}
108
+ <div
109
+ style={{
110
+ display: 'grid',
111
+ gridTemplateColumns: isHorizontal ? 'minmax(0, 1fr) minmax(180px, 0.68fr)' : '1fr',
112
+ gap: 12,
113
+ }}
114
+ >
115
+ <div style={{ border: '1px solid rgba(248,250,252,0.1)', background: 'rgba(0,0,0,0.14)', padding: 14, display: 'grid', gap: 8 }}>
116
+ <span style={{ fontSize: footerFontSize, letterSpacing: '0.24em', textTransform: 'uppercase', opacity: 0.56 }}>Closing Notes</span>
117
+ <span style={{ fontSize: Math.round(runtime.height * 0.02), lineHeight: 1.5, opacity: 0.82 }}>
118
+ A scrapbook-style outro for memoirs, reflective stories, and slow closing beats.
119
+ </span>
120
+ </div>
121
+ {posterImageSrc ? (
122
+ <div style={{ border: '1px solid rgba(248,250,252,0.1)', overflow: 'hidden', background: 'rgba(2,6,23,0.18)', minHeight: isHorizontal ? 170 : 220 }}>
123
+ <img src={posterImageSrc} alt={posterImageAlt ?? title} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />
124
+ </div>
125
+ ) : null}
126
+ </div>
127
+ <div style={{ display: 'grid', gap: 8, gridTemplateColumns: isHorizontal ? 'repeat(3, minmax(0, 1fr))' : '1fr' }}>
128
+ {[
129
+ ['Chapter One', 'Remembered'],
130
+ ['Chapter Two', 'Carried forward'],
131
+ ['Chapter Three', 'Still here'],
132
+ ].map(([label, value], index) => (
133
+ <div
134
+ key={label}
135
+ style={{
136
+ border: '1px solid rgba(248,250,252,0.1)',
137
+ padding: '10px 12px',
138
+ background: index === 1 ? 'rgba(148,163,184,0.14)' : 'rgba(0,0,0,0.12)',
139
+ display: 'grid',
140
+ gap: 6,
141
+ }}
142
+ >
143
+ <span style={{ fontSize: footerFontSize, letterSpacing: '0.18em', textTransform: 'uppercase', opacity: 0.56 }}>{label}</span>
144
+ <span style={{ fontSize: Math.round(runtime.height * 0.019) }}>{value}</span>
145
+ </div>
146
+ ))}
147
+ </div>
148
+ <div style={{ display: 'flex', flexWrap: 'wrap', gap: 10, opacity: 0.72 }}>
149
+ {creditLine ? <span style={{ fontSize: footerFontSize, letterSpacing: '0.2em', textTransform: 'uppercase' }}>{creditLine}</span> : null}
150
+ </div>
151
+ {children ? <div>{children}</div> : null}
152
+ </div>
153
+ </section>
154
+ </BaseRemotionScene>
155
+ )
156
+ }
157
+
158
+ VideoComponent(componentMetadata)(DefaultMemoirOutroBumper)
@@ -0,0 +1,10 @@
1
+ export { DefaultMemoirOutroBumper } from './default-memoir-outro-bumper'
2
+ export { componentMetadata } from './default-memoir-outro-bumper'
3
+ export {
4
+ DefaultMemoirOutroBumperLandscape,
5
+ componentMetadata as DefaultMemoirOutroBumperLandscapeMetadata,
6
+ } from './default-memoir-outro-bumper-Landscape'
7
+ export {
8
+ DefaultMemoirOutroBumperHorizontal,
9
+ componentMetadata as DefaultMemoirOutroBumperHorizontalMetadata,
10
+ } from './default-memoir-outro-bumper-Horizontal'
@@ -0,0 +1 @@
1
+ export { DefaultRomanceOutroBumper as DefaultRomanceOutroBumperHorizontal, componentMetadata } from './default-romance-outro-bumper'
@@ -0,0 +1 @@
1
+ export { DefaultRomanceOutroBumper as DefaultRomanceOutroBumperLandscape, componentMetadata } from './default-romance-outro-bumper'
@@ -0,0 +1,48 @@
1
+ import { DefaultRomanceOutroBumperHorizontal } from './default-romance-outro-bumper-Horizontal'
2
+ import { DefaultRomanceOutroBumperLandscape } from './default-romance-outro-bumper-Landscape'
3
+
4
+ const args = {
5
+ kicker: 'The Final Note',
6
+ title: 'Love, After the Credits',
7
+ note: 'A tender closing frame built around a split-heart layout, handwritten notes, and quiet memory cues.',
8
+ creditLine: 'A Vibecuting Original',
9
+ footer: 'End Credits',
10
+ accent: '#be123c',
11
+ secondaryAccent: '#fb7185',
12
+ }
13
+
14
+ const meta = {
15
+ title: 'core/outro/romance-outro/DefaultRomanceOutroBumper',
16
+ component: DefaultRomanceOutroBumperLandscape,
17
+ args,
18
+ }
19
+
20
+ export default meta
21
+
22
+ export const Landscape = {
23
+ parameters: {
24
+ scenePreviewAspectRatio: '16:9',
25
+ },
26
+ }
27
+
28
+ export const LandscapeAnimated = {
29
+ parameters: {
30
+ scenePreviewAspectRatio: '16:9',
31
+ scenePreviewMode: 'animation',
32
+ },
33
+ }
34
+
35
+ export const Horizontal = {
36
+ render: (storyArgs: typeof args) => <DefaultRomanceOutroBumperHorizontal {...storyArgs} />,
37
+ parameters: {
38
+ scenePreviewAspectRatio: '9:16',
39
+ },
40
+ }
41
+
42
+ export const HorizontalAnimated = {
43
+ render: (storyArgs: typeof args) => <DefaultRomanceOutroBumperHorizontal {...storyArgs} />,
44
+ parameters: {
45
+ scenePreviewAspectRatio: '9:16',
46
+ scenePreviewMode: 'animation',
47
+ },
48
+ }
@@ -0,0 +1,123 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
6
+ import { useSceneMotion } from '../../../base'
7
+ import { getOutroBodyMaxWidth, getOutroLineClamp } from '../_shared/outro-layout'
8
+
9
+ export interface DefaultRomanceOutroBumperProps extends BaseRemotionSceneProps {
10
+ title: string
11
+ note?: string
12
+ kicker?: string
13
+ creditLine?: string
14
+ footer?: string
15
+ accent?: string
16
+ secondaryAccent?: string
17
+ textColor?: string
18
+ children?: ReactNode
19
+ }
20
+
21
+ export const componentMetadata = defineComponentProjectComponentMetadata({
22
+ name: 'DefaultRomanceOutroBumper',
23
+ description: 'Romance outro with a split-heart frame and tender closing notes',
24
+ sourceFile: 'src/core/outro/romance-outro/default-romance-outro-bumper.tsx',
25
+ aspectRatio: '16:9',
26
+ sceneType: 'outro',
27
+ tags: ['outro', 'bumper', 'romance', 'drama', 'soft'],
28
+ propsTypeName: 'DefaultRomanceOutroBumperProps',
29
+ })
30
+
31
+ export function DefaultRomanceOutroBumper({
32
+ id,
33
+ name,
34
+ title,
35
+ note,
36
+ kicker,
37
+ creditLine,
38
+ footer,
39
+ accent,
40
+ secondaryAccent,
41
+ textColor,
42
+ children,
43
+ }: DefaultRomanceOutroBumperProps) {
44
+ const runtime = useRemotionSceneRuntime()
45
+ const motion = useSceneMotion()
46
+ const portrait = runtime.height > runtime.width
47
+
48
+ return (
49
+ <BaseRemotionScene
50
+ id={id}
51
+ name={name}
52
+ style={{
53
+ background: portrait
54
+ ? `linear-gradient(180deg, ${accent ?? '#be123c'} 0%, #3f1d38 34%, #020617 100%)`
55
+ : `radial-gradient(circle at 50% 26%, ${secondaryAccent ?? '#fb7185'} 0%, ${accent ?? '#4c1d95'} 42%, #020617 100%)`,
56
+ color: textColor ?? '#fff1f2',
57
+ display: 'grid',
58
+ placeItems: 'center',
59
+ padding: Math.round(runtime.height * 0.068),
60
+ }}
61
+ >
62
+ <section
63
+ style={{
64
+ width: '100%',
65
+ height: '100%',
66
+ display: 'grid',
67
+ gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 0.9fr) minmax(300px, 1.1fr)',
68
+ gap: portrait ? 18 : 24,
69
+ alignItems: 'stretch',
70
+ minWidth: 0,
71
+ minHeight: 0,
72
+ }}
73
+ >
74
+ <div style={{ display: 'grid', gap: 12, alignContent: 'center', textAlign: portrait ? 'center' : 'left', minWidth: 0 }}>
75
+ <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.34em', textTransform: 'uppercase', opacity: 0.66 }}>
76
+ {kicker ?? 'The Final Note'}
77
+ </p>
78
+ <h1
79
+ style={{
80
+ margin: 0,
81
+ fontSize: portrait ? Math.round(runtime.height * 0.078) : Math.round(runtime.height * 0.072),
82
+ lineHeight: 0.9,
83
+ letterSpacing: '-0.08em',
84
+ textTransform: 'uppercase',
85
+ transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 8}px, 0)` : 'none',
86
+ }}
87
+ >
88
+ {title}
89
+ </h1>
90
+ {note ? (
91
+ <p style={{ margin: 0, maxWidth: getOutroBodyMaxWidth(runtime.width, portrait ? 'horizontal' : 'landscape', 0.56, 0.42, { min: 240, max: 680 }), fontSize: Math.round(runtime.height * 0.023), lineHeight: 1.56, opacity: 0.82, ...getOutroLineClamp(portrait ? 4 : 3) }}>
92
+ {note}
93
+ </p>
94
+ ) : null}
95
+ <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: portrait ? 'center' : 'flex-start', gap: 10 }}>
96
+ {creditLine ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</span> : null}
97
+ {footer ? <span style={{ fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</span> : null}
98
+ </div>
99
+ </div>
100
+
101
+ <div style={{ display: 'grid', gap: 12, alignContent: 'center', minWidth: 0 }}>
102
+ <div style={{ border: '1px solid rgba(255,241,242,0.14)', background: 'linear-gradient(145deg, rgba(251,113,133,0.18) 0%, rgba(76,29,149,0.22) 38%, rgba(2,6,23,0.96) 100%)', padding: 16, display: 'grid', gap: 12, overflow: 'hidden' }}>
103
+ <div style={{ display: 'grid', gridTemplateColumns: portrait ? '1fr' : 'minmax(0, 0.82fr) minmax(0, 1.18fr)', gap: 12 }}>
104
+ <div style={{ border: '1px solid rgba(255,241,242,0.1)', background: 'rgba(0,0,0,0.18)', padding: 14, display: 'grid', gap: 8 }}>
105
+ <div style={{ fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.24em', textTransform: 'uppercase', opacity: 0.58 }}>Love Story Ending</div>
106
+ <div style={{ fontSize: Math.round(runtime.height * 0.029), fontWeight: 800, letterSpacing: '-0.06em' }}>Hold on to the last light</div>
107
+ <div style={{ fontSize: Math.round(runtime.height * 0.018), lineHeight: 1.5, opacity: 0.82 }}>A tender, split-frame outro for emotional endings and romance dramas.</div>
108
+ </div>
109
+ <div style={{ border: '1px solid rgba(255,241,242,0.12)', background: 'rgba(0,0,0,0.18)', display: 'grid', placeItems: 'center', minHeight: portrait ? 150 : 220 }}>
110
+ <div style={{ position: 'relative', width: '72%', aspectRatio: '1 / 1', border: '1px solid rgba(255,241,242,0.12)', borderRadius: '50%', overflow: 'hidden', background: 'radial-gradient(circle at 50% 50%, rgba(251,113,133,0.34), rgba(76,29,149,0.18) 52%, rgba(0,0,0,0.1) 100%)' }}>
111
+ <div style={{ position: 'absolute', inset: '18%', border: '1px solid rgba(255,241,242,0.14)', borderRadius: '50%' }} />
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ {children ? <div>{children}</div> : null}
117
+ </div>
118
+ </section>
119
+ </BaseRemotionScene>
120
+ )
121
+ }
122
+
123
+ VideoComponent(componentMetadata)(DefaultRomanceOutroBumper)
@@ -0,0 +1,10 @@
1
+ export { DefaultRomanceOutroBumper } from './default-romance-outro-bumper'
2
+ export { componentMetadata } from './default-romance-outro-bumper'
3
+ export {
4
+ DefaultRomanceOutroBumperLandscape,
5
+ componentMetadata as DefaultRomanceOutroBumperLandscapeMetadata,
6
+ } from './default-romance-outro-bumper-Landscape'
7
+ export {
8
+ DefaultRomanceOutroBumperHorizontal,
9
+ componentMetadata as DefaultRomanceOutroBumperHorizontalMetadata,
10
+ } from './default-romance-outro-bumper-Horizontal'
@@ -0,0 +1 @@
1
+ export { DefaultSunsetOutroBumperCoda as DefaultSunsetOutroBumperCodaHorizontal, componentMetadata } from './default-sunset-outro-bumper'
@@ -0,0 +1 @@
1
+ export { DefaultSunsetOutroBumperCoda as DefaultSunsetOutroBumperCodaLandscape, componentMetadata } from './default-sunset-outro-bumper'
@@ -0,0 +1,30 @@
1
+ import { DefaultSunsetOutroBumperCodaHorizontal } from './default-sunset-outro-bumper-Horizontal'
2
+ import { DefaultSunsetOutroBumperCodaLandscape } from './default-sunset-outro-bumper-Landscape'
3
+
4
+ const args = {
5
+ kicker: 'Coda',
6
+ title: 'One Last Glow',
7
+ note: 'A warm sunset ending with a softer cinematic goodbye.',
8
+ creditLine: 'A Vibecuting Original',
9
+ footer: 'End Credits',
10
+ accent: '#fb7185',
11
+ secondaryAccent: '#f59e0b',
12
+ }
13
+
14
+ const meta = {
15
+ title: 'core/outro/sunset-outro-coda/DefaultSunsetOutroBumperCoda',
16
+ component: DefaultSunsetOutroBumperCodaLandscape,
17
+ args,
18
+ }
19
+
20
+ export default meta
21
+ export const Landscape = { parameters: { scenePreviewAspectRatio: '16:9' } }
22
+ export const LandscapeAnimated = { parameters: { scenePreviewAspectRatio: '16:9', scenePreviewMode: 'animation' } }
23
+ export const Horizontal = {
24
+ render: (storyArgs: typeof args) => <DefaultSunsetOutroBumperCodaHorizontal {...storyArgs} />,
25
+ parameters: { scenePreviewAspectRatio: '9:16' },
26
+ }
27
+ export const HorizontalAnimated = {
28
+ render: (storyArgs: typeof args) => <DefaultSunsetOutroBumperCodaHorizontal {...storyArgs} />,
29
+ parameters: { scenePreviewAspectRatio: '9:16', scenePreviewMode: 'animation' },
30
+ }
@@ -0,0 +1,75 @@
1
+ import type { ReactNode } from 'react'
2
+
3
+ import { VideoComponent, defineComponentProjectComponentMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { BaseRemotionScene, type BaseRemotionSceneProps, useRemotionSceneRuntime } from '../../../base'
6
+ import { useSceneMotion } from '../../../base'
7
+
8
+ export interface DefaultSunsetOutroBumperCodaProps extends BaseRemotionSceneProps {
9
+ title: string
10
+ note?: string
11
+ kicker?: string
12
+ creditLine?: string
13
+ footer?: string
14
+ accent?: string
15
+ secondaryAccent?: string
16
+ textColor?: string
17
+ children?: ReactNode
18
+ }
19
+
20
+ export const componentMetadata = defineComponentProjectComponentMetadata({
21
+ name: 'DefaultSunsetOutroBumperCoda',
22
+ description: 'Sunset coda outro bumper',
23
+ sourceFile: 'src/core/outro/sunset-outro-coda/default-sunset-outro-bumper.tsx',
24
+ aspectRatio: '16:9',
25
+ sceneType: 'outro',
26
+ tags: ['outro', 'bumper', 'sunset', 'warm', 'coda'],
27
+ propsTypeName: 'DefaultSunsetOutroBumperCodaProps',
28
+ })
29
+
30
+ export function DefaultSunsetOutroBumperCoda({
31
+ id,
32
+ name,
33
+ title,
34
+ note,
35
+ kicker,
36
+ creditLine,
37
+ footer,
38
+ accent,
39
+ secondaryAccent,
40
+ textColor,
41
+ }: DefaultSunsetOutroBumperCodaProps) {
42
+ const runtime = useRemotionSceneRuntime()
43
+ const motion = useSceneMotion()
44
+ const portrait = runtime.height > runtime.width
45
+
46
+ return (
47
+ <BaseRemotionScene
48
+ id={id}
49
+ name={name}
50
+ style={{
51
+ background: portrait
52
+ ? `linear-gradient(180deg, ${accent ?? '#fb7185'} 0%, #3f1d38 34%, #020617 100%)`
53
+ : `radial-gradient(circle at 50% 24%, ${accent ?? '#fb7185'} 0%, ${secondaryAccent ?? '#f59e0b'} 38%, #020617 100%)`,
54
+ color: textColor ?? '#fff7ed',
55
+ display: 'grid',
56
+ placeItems: 'center',
57
+ padding: Math.round(runtime.height * 0.07),
58
+ }}
59
+ >
60
+ <section style={{ width: '100%', height: '100%', display: 'grid', alignContent: 'center', justifyItems: 'center', gap: 14, textAlign: 'center', minWidth: 0, minHeight: 0 }}>
61
+ <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.017), letterSpacing: '0.34em', textTransform: 'uppercase', opacity: 0.58 }}>
62
+ {kicker ?? 'Sunset Coda'}
63
+ </p>
64
+ <h1 style={{ margin: 0, fontSize: portrait ? Math.round(runtime.height * 0.078) : Math.round(runtime.height * 0.072), lineHeight: 0.92, letterSpacing: '-0.08em', textTransform: 'uppercase', transform: motion.isAnimation ? `translate3d(0, ${(1 - motion.progress) * 8}px, 0)` : 'none' }}>
65
+ {title}
66
+ </h1>
67
+ {note ? <p style={{ margin: 0, maxWidth: Math.round(runtime.width * 0.54), fontSize: Math.round(runtime.height * 0.023), lineHeight: 1.56, opacity: 0.8 }}>{note}</p> : null}
68
+ {creditLine ? <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.22em', textTransform: 'uppercase', opacity: 0.72 }}>{creditLine}</p> : null}
69
+ {footer ? <p style={{ margin: 0, fontSize: Math.round(runtime.height * 0.015), letterSpacing: '0.2em', textTransform: 'uppercase', opacity: 0.52 }}>{footer}</p> : null}
70
+ </section>
71
+ </BaseRemotionScene>
72
+ )
73
+ }
74
+
75
+ VideoComponent(componentMetadata)(DefaultSunsetOutroBumperCoda)
@@ -0,0 +1,10 @@
1
+ export { DefaultSunsetOutroBumperCoda } from './default-sunset-outro-bumper'
2
+ export { componentMetadata } from './default-sunset-outro-bumper'
3
+ export {
4
+ DefaultSunsetOutroBumperCodaLandscape,
5
+ componentMetadata as DefaultSunsetOutroBumperCodaLandscapeMetadata,
6
+ } from './default-sunset-outro-bumper-Landscape'
7
+ export {
8
+ DefaultSunsetOutroBumperCodaHorizontal,
9
+ componentMetadata as DefaultSunsetOutroBumperCodaHorizontalMetadata,
10
+ } from './default-sunset-outro-bumper-Horizontal'
@@ -1,7 +1,7 @@
1
1
  import { Default2DSceneHorizontal } from './default-2d-scene-Horizontal'
2
2
 
3
3
  const meta = {
4
- title: 'core/scene/Default2DSceneHorizontal',
4
+ title: 'core/scene/2dscene/Default2DSceneHorizontal',
5
5
  component: Default2DSceneHorizontal,
6
6
  args: {
7
7
  title: '2D Scene',
@@ -1,7 +1,7 @@
1
1
  import { Default2DSceneLandscape } from './default-2d-scene-Landscape'
2
2
 
3
3
  const meta = {
4
- title: 'core/scene/Default2DSceneLandscape',
4
+ title: 'core/scene/2dscene/Default2DSceneLandscape',
5
5
  component: Default2DSceneLandscape,
6
6
  args: {
7
7
  title: '2D Scene',
@@ -1,7 +1,7 @@
1
1
  import { Default3DSceneHorizontal } from './default-3d-scene-Horizontal'
2
2
 
3
3
  const meta = {
4
- title: 'core/scene/Default3DSceneHorizontal',
4
+ title: 'core/scene/3dscene/Default3DSceneHorizontal',
5
5
  component: Default3DSceneHorizontal,
6
6
  args: {
7
7
  title: '3D Scene',
@@ -1,7 +1,7 @@
1
1
  import { Default3DSceneLandscape } from './default-3d-scene-Landscape'
2
2
 
3
3
  const meta = {
4
- title: 'core/scene/Default3DSceneLandscape',
4
+ title: 'core/scene/3dscene/Default3DSceneLandscape',
5
5
  component: Default3DSceneLandscape,
6
6
  args: {
7
7
  title: '3D Scene',
@@ -1,4 +1,7 @@
1
1
  export * from './2dscene'
2
2
  export * from './3dscene'
3
+ export * from './photo'
4
+ export * from './video'
3
5
  export * from './slide'
4
6
  export * from './utils'
7
+ export { DefaultLivePhotoSceneMetadata, DefaultLivePhotoSceneLandscapeMetadata, DefaultLivePhotoSceneHorizontalMetadata } from './photo'
@@ -0,0 +1,46 @@
1
+ import { Default3DVRPhotoSceneHorizontal } from './default-3dvr-photo-scene-Horizontal'
2
+
3
+ const photoUrl = 'https://heyaai-statics-1342239856.cos.ap-guangzhou.myqcloud.com/tmp/premium_photo-1779404552087-0f905162376f-121.jpeg'
4
+
5
+ const meta = {
6
+ title: 'core/scene/photo/3dvr-photo/Default3DVRPhotoSceneHorizontal',
7
+ component: Default3DVRPhotoSceneHorizontal,
8
+ args: {
9
+ title: 'Stereo Window',
10
+ subtitle: '3D camera controls over a still frame with subtle orbit, pitch and depth.',
11
+ badge: '3D VR Photo',
12
+ imageSrc: photoUrl,
13
+ yaw: 12,
14
+ pitch: 4,
15
+ roll: 0,
16
+ perspective: 980,
17
+ zoom: 1,
18
+ depth: 26,
19
+ focusX: 0.5,
20
+ focusY: 0.45,
21
+ accent: '#020617',
22
+ secondaryAccent: '#7c3aed',
23
+ },
24
+ }
25
+
26
+ export default meta
27
+
28
+ export const Default = {
29
+ parameters: {
30
+ scenePreviewAspectRatio: '9:16',
31
+ },
32
+ }
33
+
34
+ export const Animated = {
35
+ parameters: {
36
+ scenePreviewAspectRatio: '9:16',
37
+ scenePreviewMode: 'animation',
38
+ },
39
+ }
40
+
41
+ export const Both = {
42
+ parameters: {
43
+ scenePreviewAspectRatio: '9:16',
44
+ scenePreviewMode: 'both',
45
+ },
46
+ }
@@ -0,0 +1,20 @@
1
+ import type { ComponentProps } from 'react'
2
+
3
+ import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { Default3DVRPhotoScene, componentMetadata as baseComponentMetadata } from './default-3dvr-photo-scene'
6
+
7
+ export const componentMetadata: ScenePluginMetadata = {
8
+ ...baseComponentMetadata,
9
+ name: 'Default3DVRPhotoSceneHorizontal',
10
+ description: '3D VR photo scene for 9:16 portrait previews with a vertical layout',
11
+ sourceFile: 'src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Horizontal.tsx',
12
+ aspectRatio: '9:16',
13
+ tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'horizontal'])),
14
+ }
15
+
16
+ export const Default3DVRPhotoSceneHorizontal = VideoComponent(componentMetadata)(function Default3DVRPhotoSceneHorizontal(
17
+ props: ComponentProps<typeof Default3DVRPhotoScene>,
18
+ ) {
19
+ return <Default3DVRPhotoScene {...props} />
20
+ })
@@ -0,0 +1,20 @@
1
+ import type { ComponentProps } from 'react'
2
+
3
+ import { VideoComponent, type ScenePluginMetadata } from '@vibecuting/component-project-helper'
4
+
5
+ import { Default3DVRPhotoScene, componentMetadata as baseComponentMetadata } from './default-3dvr-photo-scene'
6
+
7
+ export const componentMetadata: ScenePluginMetadata = {
8
+ ...baseComponentMetadata,
9
+ name: 'Default3DVRPhotoSceneLandscape',
10
+ description: '3D VR photo scene for 16:9 landscape previews with a wide cinematic layout',
11
+ sourceFile: 'src/core/scene/photo/3dvr-photo/default-3dvr-photo-scene-Landscape.tsx',
12
+ aspectRatio: '16:9',
13
+ tags: Array.from(new Set([...(baseComponentMetadata.tags ?? []), 'landscape'])),
14
+ }
15
+
16
+ export const Default3DVRPhotoSceneLandscape = VideoComponent(componentMetadata)(function Default3DVRPhotoSceneLandscape(
17
+ props: ComponentProps<typeof Default3DVRPhotoScene>,
18
+ ) {
19
+ return <Default3DVRPhotoScene {...props} />
20
+ })