@imgly/codesign-mcp 0.1.5 → 0.1.6

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 (973) hide show
  1. package/README.md +51 -1
  2. package/assets/docs/guide/SKILL.md +45 -53
  3. package/assets/docs/guide/animation/create/base.md +234 -243
  4. package/assets/docs/guide/animation/create/text.md +250 -231
  5. package/assets/docs/guide/animation/create.md +197 -231
  6. package/assets/docs/guide/animation/edit.md +196 -271
  7. package/assets/docs/guide/animation/types.md +182 -185
  8. package/assets/docs/guide/animation.md +9 -6
  9. package/assets/docs/guide/api/AssetAPI.md +7 -53
  10. package/assets/docs/guide/api/BlockAPI.md +725 -648
  11. package/assets/docs/guide/api/CreativeEngine.md +7 -16
  12. package/assets/docs/guide/api/EditorAPI.md +32 -93
  13. package/assets/docs/guide/api/EventAPI.md +1 -2
  14. package/assets/docs/guide/api/SceneAPI.md +47 -98
  15. package/assets/docs/guide/api/VariableAPI.md +1 -4
  16. package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
  17. package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
  18. package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
  19. package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
  20. package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
  21. package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
  22. package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
  23. package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
  24. package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
  25. package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
  26. package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
  27. package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
  28. package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
  29. package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
  30. package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
  31. package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
  32. package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
  33. package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
  34. package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
  35. package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
  36. package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
  37. package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
  38. package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
  39. package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
  40. package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
  41. package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
  42. package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
  43. package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
  44. package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
  45. package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
  46. package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
  47. package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
  48. package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
  49. package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
  50. package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
  51. package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
  52. package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
  53. package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
  54. package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
  55. package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
  56. package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
  57. package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
  58. package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
  59. package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
  60. package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
  61. package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
  62. package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
  63. package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
  64. package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
  65. package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
  66. package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
  67. package/assets/docs/guide/api/node/interfaces/font.md +27 -0
  68. package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
  69. package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
  70. package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
  71. package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
  72. package/assets/docs/guide/api/node/interfaces/range.md +23 -0
  73. package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
  74. package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
  75. package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
  76. package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
  77. package/assets/docs/guide/api/node/interfaces/source.md +24 -0
  78. package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
  79. package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
  80. package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
  81. package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
  82. package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
  83. package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
  84. package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
  85. package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
  86. package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
  87. package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
  88. package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
  89. package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
  90. package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
  91. package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
  92. package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
  93. package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
  94. package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
  95. package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
  96. package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
  97. package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
  98. package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
  99. package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
  100. package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
  101. package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
  102. package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
  103. package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
  104. package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
  105. package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
  106. package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
  107. package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
  108. package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
  109. package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
  110. package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
  111. package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
  112. package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
  113. package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
  114. package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
  115. package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
  116. package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
  117. package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
  118. package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
  119. package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
  120. package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
  121. package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
  122. package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
  123. package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
  124. package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
  125. package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
  126. package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
  127. package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
  128. package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
  129. package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
  130. package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
  131. package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
  132. package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
  133. package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
  134. package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
  135. package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
  136. package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
  137. package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
  138. package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
  139. package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
  140. package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
  141. package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
  142. package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
  143. package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
  144. package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
  145. package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
  146. package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
  147. package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
  148. package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
  149. package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
  150. package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
  151. package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
  152. package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
  153. package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
  154. package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
  155. package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
  156. package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
  157. package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
  158. package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
  159. package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
  160. package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
  161. package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
  162. package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
  163. package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
  164. package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
  165. package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
  166. package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
  167. package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
  168. package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
  169. package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
  170. package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
  171. package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
  172. package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
  173. package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
  174. package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
  175. package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
  176. package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
  177. package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
  178. package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
  179. package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
  180. package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
  181. package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
  182. package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
  183. package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
  184. package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
  185. package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
  186. package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
  187. package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
  188. package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
  189. package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
  190. package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
  191. package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
  192. package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
  193. package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
  194. package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
  195. package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
  196. package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
  197. package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
  198. package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
  199. package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
  200. package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
  201. package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
  202. package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
  203. package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
  204. package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
  205. package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
  206. package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
  207. package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
  208. package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
  209. package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
  210. package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
  211. package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
  212. package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
  213. package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
  214. package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
  215. package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
  216. package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
  217. package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
  218. package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
  219. package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
  220. package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
  221. package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
  222. package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
  223. package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
  224. package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
  225. package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
  226. package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
  227. package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
  228. package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
  229. package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
  230. package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
  231. package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
  232. package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
  233. package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
  234. package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
  235. package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
  236. package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
  237. package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
  238. package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
  239. package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
  240. package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
  241. package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
  242. package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
  243. package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
  244. package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
  245. package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
  246. package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
  247. package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
  248. package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
  249. package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
  250. package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
  251. package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
  252. package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
  253. package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
  254. package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
  255. package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
  256. package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
  257. package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
  258. package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
  259. package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
  260. package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
  261. package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
  262. package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
  263. package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
  264. package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
  265. package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
  266. package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
  267. package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
  268. package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
  269. package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
  270. package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
  271. package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
  272. package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
  273. package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
  274. package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
  275. package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
  276. package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
  277. package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
  278. package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
  279. package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
  280. package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
  281. package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
  282. package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
  283. package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
  284. package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
  285. package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
  286. package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
  287. package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
  288. package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
  289. package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
  290. package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
  291. package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
  292. package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
  293. package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
  294. package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
  295. package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
  296. package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
  297. package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
  298. package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
  299. package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
  300. package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
  301. package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
  302. package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
  303. package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
  304. package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
  305. package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
  306. package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
  307. package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
  308. package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
  309. package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
  310. package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
  311. package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
  312. package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
  313. package/assets/docs/guide/api/types.md +5 -9
  314. package/assets/docs/guide/api-reference/overview.md +7 -7
  315. package/assets/docs/guide/automation/auto-resize.md +263 -300
  316. package/assets/docs/guide/automation/data-merge.md +246 -275
  317. package/assets/docs/guide/automation/design-generation.md +102 -31
  318. package/assets/docs/guide/automation/multi-image-generation.md +758 -0
  319. package/assets/docs/guide/automation/overview.md +21 -4
  320. package/assets/docs/guide/automation.md +10 -5
  321. package/assets/docs/guide/capabilities.md +6 -4
  322. package/assets/docs/guide/colors/adjust.md +247 -249
  323. package/assets/docs/guide/colors/apply.md +127 -138
  324. package/assets/docs/guide/colors/basics.md +126 -150
  325. package/assets/docs/guide/colors/conversion.md +171 -177
  326. package/assets/docs/guide/colors/create-color-palette.md +244 -245
  327. package/assets/docs/guide/colors/extract-colors.md +144 -0
  328. package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
  329. package/assets/docs/guide/colors/for-print/spot.md +521 -578
  330. package/assets/docs/guide/colors/for-print.md +9 -4
  331. package/assets/docs/guide/colors/for-screen/p3.md +12 -10
  332. package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
  333. package/assets/docs/guide/colors/for-screen.md +9 -4
  334. package/assets/docs/guide/colors/overview.md +6 -4
  335. package/assets/docs/guide/colors/replace.md +381 -419
  336. package/assets/docs/guide/colors.md +9 -4
  337. package/assets/docs/guide/compatibility.md +7 -5
  338. package/assets/docs/guide/concepts/architecture.md +17 -15
  339. package/assets/docs/guide/concepts/assets.md +152 -140
  340. package/assets/docs/guide/concepts/blocks.md +227 -323
  341. package/assets/docs/guide/concepts/buffers.md +147 -276
  342. package/assets/docs/guide/concepts/design-units.md +95 -145
  343. package/assets/docs/guide/concepts/editing-workflow.md +69 -183
  344. package/assets/docs/guide/concepts/events.md +80 -122
  345. package/assets/docs/guide/concepts/headless-mode.md +237 -0
  346. package/assets/docs/guide/concepts/pages.md +137 -127
  347. package/assets/docs/guide/concepts/resources.md +156 -217
  348. package/assets/docs/guide/concepts/scenes.md +191 -210
  349. package/assets/docs/guide/concepts/templating.md +118 -74
  350. package/assets/docs/guide/concepts/terminology.md +49 -47
  351. package/assets/docs/guide/concepts/undo-and-history.md +229 -303
  352. package/assets/docs/guide/concepts.md +9 -7
  353. package/assets/docs/guide/configuration.md +252 -380
  354. package/assets/docs/guide/conversion/overview.md +33 -4
  355. package/assets/docs/guide/conversion/to-base64.md +127 -167
  356. package/assets/docs/guide/conversion/to-pdf.md +24 -474
  357. package/assets/docs/guide/conversion/to-png.md +168 -211
  358. package/assets/docs/guide/conversion.md +9 -4
  359. package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
  360. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
  361. package/assets/docs/guide/create-audio/audio/loop.md +232 -272
  362. package/assets/docs/guide/create-composition/add-background.md +237 -239
  363. package/assets/docs/guide/create-composition/blend-modes.md +118 -209
  364. package/assets/docs/guide/create-composition/collage.md +538 -320
  365. package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
  366. package/assets/docs/guide/create-composition/layer-management.md +219 -257
  367. package/assets/docs/guide/create-composition/layout.md +513 -315
  368. package/assets/docs/guide/create-composition/lock-design.md +90 -109
  369. package/assets/docs/guide/create-composition/multi-page.md +133 -113
  370. package/assets/docs/guide/create-composition/overview.md +16 -4
  371. package/assets/docs/guide/create-composition/programmatic.md +288 -344
  372. package/assets/docs/guide/create-composition.md +10 -5
  373. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
  374. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
  375. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
  376. package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
  377. package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
  378. package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
  379. package/assets/docs/guide/create-templates/from-scratch.md +207 -268
  380. package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
  381. package/assets/docs/guide/create-templates/import.md +145 -161
  382. package/assets/docs/guide/create-templates/lock.md +42 -295
  383. package/assets/docs/guide/create-templates/overview.md +33 -4
  384. package/assets/docs/guide/create-templates.md +9 -5
  385. package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
  386. package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
  387. package/assets/docs/guide/create-video/control.md +352 -193
  388. package/assets/docs/guide/create-video/limitations.md +175 -280
  389. package/assets/docs/guide/create-video.md +11 -10
  390. package/assets/docs/guide/edit-image/add-watermark.md +283 -330
  391. package/assets/docs/guide/edit-image/overview.md +29 -4
  392. package/assets/docs/guide/edit-image/remove-bg.md +283 -337
  393. package/assets/docs/guide/edit-image/replace-colors.md +424 -502
  394. package/assets/docs/guide/edit-image/transform/crop.md +463 -402
  395. package/assets/docs/guide/edit-image/transform/flip.md +353 -0
  396. package/assets/docs/guide/edit-image/transform/move.md +143 -100
  397. package/assets/docs/guide/edit-image/transform/resize.md +118 -88
  398. package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
  399. package/assets/docs/guide/edit-image/transform/scale.md +230 -228
  400. package/assets/docs/guide/edit-image/transform.md +10 -5
  401. package/assets/docs/guide/edit-image.md +11 -7
  402. package/assets/docs/guide/edit-video/add-captions.md +344 -421
  403. package/assets/docs/guide/edit-video/add-watermark.md +312 -258
  404. package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
  405. package/assets/docs/guide/edit-video/redaction.md +419 -385
  406. package/assets/docs/guide/edit-video/split.md +243 -493
  407. package/assets/docs/guide/edit-video/transform/crop.md +21 -352
  408. package/assets/docs/guide/edit-video/transform/flip.md +102 -76
  409. package/assets/docs/guide/edit-video/transform/move.md +258 -310
  410. package/assets/docs/guide/edit-video/transform/resize.md +264 -428
  411. package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
  412. package/assets/docs/guide/edit-video/transform/scale.md +320 -417
  413. package/assets/docs/guide/edit-video/transform.md +10 -6
  414. package/assets/docs/guide/edit-video/trim.md +448 -494
  415. package/assets/docs/guide/engine-interface.md +51 -62
  416. package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
  417. package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
  418. package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
  419. package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
  420. package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
  421. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
  422. package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
  423. package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
  424. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
  425. package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
  426. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
  427. package/assets/docs/guide/export-save-publish/export.md +14 -11
  428. package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
  429. package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
  430. package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
  431. package/assets/docs/guide/export-save-publish/save.md +167 -226
  432. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
  433. package/assets/docs/guide/file-format-support.md +9 -9
  434. package/assets/docs/guide/fills/color.md +370 -347
  435. package/assets/docs/guide/fills/image.md +167 -196
  436. package/assets/docs/guide/fills/overview.md +6 -4
  437. package/assets/docs/guide/fills/video.md +286 -438
  438. package/assets/docs/guide/fills.md +12 -8
  439. package/assets/docs/guide/filters-and-effects/apply.md +598 -664
  440. package/assets/docs/guide/filters-and-effects/blur.md +261 -159
  441. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
  442. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
  443. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
  444. package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
  445. package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
  446. package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
  447. package/assets/docs/guide/filters-and-effects/overview.md +7 -7
  448. package/assets/docs/guide/filters-and-effects/support.md +97 -132
  449. package/assets/docs/guide/filters-and-effects.md +11 -6
  450. package/assets/docs/guide/get-started/agent-skills.md +20 -18
  451. package/assets/docs/guide/get-started/build-with-ai.md +7 -4
  452. package/assets/docs/guide/get-started/bun.md +219 -0
  453. package/assets/docs/guide/get-started/deno.md +161 -0
  454. package/assets/docs/guide/get-started/mcp-server.md +6 -4
  455. package/assets/docs/guide/get-started/overview.md +11 -6
  456. package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
  457. package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
  458. package/assets/docs/guide/get-started/vanilla.md +235 -0
  459. package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
  460. package/assets/docs/guide/guides.md +10 -9
  461. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
  462. package/assets/docs/guide/import-media/concepts.md +20 -38
  463. package/assets/docs/guide/import-media/content-json-schema.md +145 -125
  464. package/assets/docs/guide/import-media/default-assets.md +113 -161
  465. package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
  466. package/assets/docs/guide/import-media/file-format-support.md +78 -61
  467. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
  468. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
  469. package/assets/docs/guide/import-media/from-remote-source.md +9 -11
  470. package/assets/docs/guide/import-media/overview.md +5 -5
  471. package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
  472. package/assets/docs/guide/import-media/size-limits.md +6 -4
  473. package/assets/docs/guide/import-media/source-sets.md +190 -251
  474. package/assets/docs/guide/import-media.md +10 -8
  475. package/assets/docs/guide/insert-media/audio.md +202 -195
  476. package/assets/docs/guide/insert-media/images.md +190 -188
  477. package/assets/docs/guide/insert-media/position-and-align.md +284 -551
  478. package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
  479. package/assets/docs/guide/insert-media/videos.md +236 -203
  480. package/assets/docs/guide/insert-media.md +10 -5
  481. package/assets/docs/guide/key-capabilities.md +36 -4
  482. package/assets/docs/guide/key-concepts.md +6 -4
  483. package/assets/docs/guide/licensing.md +6 -4
  484. package/assets/docs/guide/llms-txt.md +11 -7
  485. package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
  486. package/assets/docs/guide/open-the-editor/from-image.md +157 -127
  487. package/assets/docs/guide/open-the-editor/from-template.md +131 -92
  488. package/assets/docs/guide/open-the-editor/from-video.md +204 -212
  489. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
  490. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
  491. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
  492. package/assets/docs/guide/open-the-editor/import-design.md +228 -266
  493. package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
  494. package/assets/docs/guide/open-the-editor/overview.md +6 -4
  495. package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
  496. package/assets/docs/guide/open-the-editor.md +11 -9
  497. package/assets/docs/guide/outlines/overview.md +12 -4
  498. package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
  499. package/assets/docs/guide/outlines/strokes.md +218 -166
  500. package/assets/docs/guide/outlines.md +9 -4
  501. package/assets/docs/guide/overview.md +14 -6
  502. package/assets/docs/guide/performance.md +220 -113
  503. package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
  504. package/assets/docs/guide/plugins.md +10 -16
  505. package/assets/docs/guide/rules/asset-handling.md +7 -18
  506. package/assets/docs/guide/rules/common-pitfalls.md +25 -42
  507. package/assets/docs/guide/rules/content-fill-mode.md +4 -4
  508. package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
  509. package/assets/docs/guide/rules/lock-content.md +188 -231
  510. package/assets/docs/guide/rules/moderate-content.md +580 -571
  511. package/assets/docs/guide/rules/overview.md +345 -380
  512. package/assets/docs/guide/rules/silent-init-errors.md +4 -1
  513. package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
  514. package/assets/docs/guide/rules.md +10 -5
  515. package/assets/docs/guide/security.md +7 -5
  516. package/assets/docs/guide/serve-assets.md +57 -284
  517. package/assets/docs/guide/settings.md +96 -74
  518. package/assets/docs/guide/shapes.md +10 -5
  519. package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
  520. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
  521. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
  522. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
  523. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
  524. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
  525. package/assets/docs/guide/stickers.md +9 -4
  526. package/assets/docs/guide/text/add.md +470 -482
  527. package/assets/docs/guide/text/adjust-spacing.md +179 -214
  528. package/assets/docs/guide/text/auto-size.md +210 -271
  529. package/assets/docs/guide/text/edit.md +294 -309
  530. package/assets/docs/guide/text/effects.md +154 -190
  531. package/assets/docs/guide/text/emojis.md +199 -232
  532. package/assets/docs/guide/text/language-support.md +369 -382
  533. package/assets/docs/guide/text/overview.md +41 -4
  534. package/assets/docs/guide/text/styling.md +239 -273
  535. package/assets/docs/guide/text/text-designs.md +405 -544
  536. package/assets/docs/guide/text.md +10 -9
  537. package/assets/docs/guide/to-v1-19.md +12 -10
  538. package/assets/docs/guide/upgrade.md +8 -9
  539. package/assets/docs/guide/use-templates/apply-template.md +174 -163
  540. package/assets/docs/guide/use-templates/generate.md +171 -152
  541. package/assets/docs/guide/use-templates/overview.md +32 -4
  542. package/assets/docs/guide/use-templates/programmatic.md +266 -301
  543. package/assets/docs/guide/use-templates/replace-content.md +181 -171
  544. package/assets/docs/guide/what-is-cesdk.md +71 -282
  545. package/assets/docs/handbook/SKILL.md +24 -0
  546. package/dist/assets/inline.generated.d.ts.map +1 -1
  547. package/dist/assets/inline.generated.js +544 -406
  548. package/dist/assets/inline.generated.js.map +1 -1
  549. package/dist/assets/load-browser.d.ts +1 -1
  550. package/dist/assets/load-browser.js +1 -1
  551. package/dist/assets/load-browser.js.map +1 -1
  552. package/dist/assets/load-node.d.ts +1 -1
  553. package/dist/assets/load-node.js +1 -1
  554. package/dist/assets/load-node.js.map +1 -1
  555. package/dist/cli/http.d.ts.map +1 -1
  556. package/dist/cli/http.js +4 -28
  557. package/dist/cli/http.js.map +1 -1
  558. package/dist/cli/redirect-console.d.ts +1 -1
  559. package/dist/cli/redirect-console.d.ts.map +1 -1
  560. package/dist/cli/redirect-console.js +12 -3
  561. package/dist/cli/redirect-console.js.map +1 -1
  562. package/dist/cli/resolve-license.d.ts.map +1 -1
  563. package/dist/cli/resolve-license.js +8 -6
  564. package/dist/cli/resolve-license.js.map +1 -1
  565. package/dist/cli/stdio.d.ts +9 -0
  566. package/dist/cli/stdio.d.ts.map +1 -1
  567. package/dist/cli/stdio.js +48 -4
  568. package/dist/cli/stdio.js.map +1 -1
  569. package/dist/cli.js +10 -1
  570. package/dist/cli.js.map +1 -1
  571. package/dist/config.d.ts +11 -2
  572. package/dist/config.d.ts.map +1 -1
  573. package/dist/config.js +20 -1
  574. package/dist/config.js.map +1 -1
  575. package/dist/diagnostics/bundle.d.ts +10 -0
  576. package/dist/diagnostics/bundle.d.ts.map +1 -0
  577. package/dist/diagnostics/bundle.js +148 -0
  578. package/dist/diagnostics/bundle.js.map +1 -0
  579. package/dist/diagnostics/compose.d.ts +3 -0
  580. package/dist/diagnostics/compose.d.ts.map +1 -0
  581. package/dist/diagnostics/compose.js +15 -0
  582. package/dist/diagnostics/compose.js.map +1 -0
  583. package/dist/diagnostics/events.d.ts +34 -0
  584. package/dist/diagnostics/events.d.ts.map +1 -0
  585. package/dist/diagnostics/events.js +3 -0
  586. package/dist/diagnostics/events.js.map +1 -0
  587. package/dist/diagnostics/file-sink.d.ts +38 -0
  588. package/dist/diagnostics/file-sink.d.ts.map +1 -0
  589. package/dist/diagnostics/file-sink.js +157 -0
  590. package/dist/diagnostics/file-sink.js.map +1 -0
  591. package/dist/diagnostics/redact.d.ts +7 -0
  592. package/dist/diagnostics/redact.d.ts.map +1 -0
  593. package/dist/diagnostics/redact.js +43 -0
  594. package/dist/diagnostics/redact.js.map +1 -0
  595. package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
  596. package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
  597. package/dist/diagnostics/tool-call-adapter.js +21 -0
  598. package/dist/diagnostics/tool-call-adapter.js.map +1 -0
  599. package/dist/engine/cesdk-adapter.d.ts +5 -1
  600. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  601. package/dist/engine/cesdk-adapter.js +9 -2
  602. package/dist/engine/cesdk-adapter.js.map +1 -1
  603. package/dist/engine/index.d.ts +1 -0
  604. package/dist/engine/index.d.ts.map +1 -1
  605. package/dist/engine/index.js +4 -0
  606. package/dist/engine/index.js.map +1 -1
  607. package/dist/engine/scene-resource-schemes.d.ts +2 -0
  608. package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
  609. package/dist/engine/scene-resource-schemes.js +20 -0
  610. package/dist/engine/scene-resource-schemes.js.map +1 -0
  611. package/dist/http/server.d.ts +0 -6
  612. package/dist/http/server.d.ts.map +1 -1
  613. package/dist/http/server.js +1 -2
  614. package/dist/http/server.js.map +1 -1
  615. package/dist/server.d.ts +0 -4
  616. package/dist/server.d.ts.map +1 -1
  617. package/dist/server.js +4 -60
  618. package/dist/server.js.map +1 -1
  619. package/dist/test/scripts/changelog-add.d.ts +8 -0
  620. package/dist/test/scripts/changelog-add.d.ts.map +1 -0
  621. package/dist/test/scripts/changelog-add.js +50 -0
  622. package/dist/test/scripts/changelog-add.js.map +1 -0
  623. package/dist/test/scripts/changelog-collate.d.ts +38 -0
  624. package/dist/test/scripts/changelog-collate.d.ts.map +1 -0
  625. package/dist/test/scripts/changelog-collate.js +171 -0
  626. package/dist/test/scripts/changelog-collate.js.map +1 -0
  627. package/dist/test/test/changelog.test.d.ts +2 -0
  628. package/dist/test/test/changelog.test.d.ts.map +1 -0
  629. package/dist/test/test/changelog.test.js +293 -0
  630. package/dist/test/test/changelog.test.js.map +1 -0
  631. package/dist/test/test/cli/dispatcher.test.js +10 -3
  632. package/dist/test/test/cli/dispatcher.test.js.map +1 -1
  633. package/dist/test/test/cli/redirect-console.test.js +31 -0
  634. package/dist/test/test/cli/redirect-console.test.js.map +1 -1
  635. package/dist/test/test/cli/resolve-license.test.js +10 -1
  636. package/dist/test/test/cli/resolve-license.test.js.map +1 -1
  637. package/dist/test/test/cli/stdio-diagnostics.test.d.ts +2 -0
  638. package/dist/test/test/cli/stdio-diagnostics.test.d.ts.map +1 -0
  639. package/dist/test/test/cli/stdio-diagnostics.test.js +31 -0
  640. package/dist/test/test/cli/stdio-diagnostics.test.js.map +1 -0
  641. package/dist/test/test/config.test.js +17 -13
  642. package/dist/test/test/config.test.js.map +1 -1
  643. package/dist/test/test/diagnostics/bundle.test.d.ts +2 -0
  644. package/dist/test/test/diagnostics/bundle.test.d.ts.map +1 -0
  645. package/dist/test/test/diagnostics/bundle.test.js +53 -0
  646. package/dist/test/test/diagnostics/bundle.test.js.map +1 -0
  647. package/dist/test/test/diagnostics/compose.test.d.ts +2 -0
  648. package/dist/test/test/diagnostics/compose.test.d.ts.map +1 -0
  649. package/dist/test/test/diagnostics/compose.test.js +31 -0
  650. package/dist/test/test/diagnostics/compose.test.js.map +1 -0
  651. package/dist/test/test/diagnostics/file-sink.test.d.ts +2 -0
  652. package/dist/test/test/diagnostics/file-sink.test.d.ts.map +1 -0
  653. package/dist/test/test/diagnostics/file-sink.test.js +113 -0
  654. package/dist/test/test/diagnostics/file-sink.test.js.map +1 -0
  655. package/dist/test/test/diagnostics/redact.test.d.ts +2 -0
  656. package/dist/test/test/diagnostics/redact.test.d.ts.map +1 -0
  657. package/dist/test/test/diagnostics/redact.test.js +59 -0
  658. package/dist/test/test/diagnostics/redact.test.js.map +1 -0
  659. package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts +2 -0
  660. package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts.map +1 -0
  661. package/dist/test/test/diagnostics/tool-call-adapter.test.js +34 -0
  662. package/dist/test/test/diagnostics/tool-call-adapter.test.js.map +1 -0
  663. package/dist/test/test/engine/cesdk-adapter.test.d.ts +2 -0
  664. package/dist/test/test/engine/cesdk-adapter.test.d.ts.map +1 -0
  665. package/dist/test/test/engine/cesdk-adapter.test.js +32 -0
  666. package/dist/test/test/engine/cesdk-adapter.test.js.map +1 -0
  667. package/dist/test/test/handbook-contract.test.js +6 -2
  668. package/dist/test/test/handbook-contract.test.js.map +1 -1
  669. package/dist/test/test/http/server.test.js +0 -36
  670. package/dist/test/test/http/server.test.js.map +1 -1
  671. package/dist/test/test/http/workspace-auth.test.js +0 -1
  672. package/dist/test/test/http/workspace-auth.test.js.map +1 -1
  673. package/dist/test/test/server.test.js +0 -40
  674. package/dist/test/test/server.test.js.map +1 -1
  675. package/dist/test/test/tools/edit-harness.d.ts +14 -0
  676. package/dist/test/test/tools/edit-harness.d.ts.map +1 -0
  677. package/dist/test/test/tools/edit-harness.js +30 -0
  678. package/dist/test/test/tools/edit-harness.js.map +1 -0
  679. package/dist/test/test/tools/edit.telemetry.test.d.ts +2 -0
  680. package/dist/test/test/tools/edit.telemetry.test.d.ts.map +1 -0
  681. package/dist/test/test/tools/edit.telemetry.test.js +46 -0
  682. package/dist/test/test/tools/edit.telemetry.test.js.map +1 -0
  683. package/dist/test/test/tools/export-harness.d.ts +13 -0
  684. package/dist/test/test/tools/export-harness.d.ts.map +1 -0
  685. package/dist/test/test/tools/export-harness.js +27 -0
  686. package/dist/test/test/tools/export-harness.js.map +1 -0
  687. package/dist/test/test/tools/export.telemetry.test.d.ts +2 -0
  688. package/dist/test/test/tools/export.telemetry.test.d.ts.map +1 -0
  689. package/dist/test/test/tools/export.telemetry.test.js +65 -0
  690. package/dist/test/test/tools/export.telemetry.test.js.map +1 -0
  691. package/dist/test/test/tools/import.test.d.ts +2 -0
  692. package/dist/test/test/tools/import.test.d.ts.map +1 -0
  693. package/dist/test/test/tools/import.test.js +122 -0
  694. package/dist/test/test/tools/import.test.js.map +1 -0
  695. package/dist/test/test/tools/index.test.js +78 -16
  696. package/dist/test/test/tools/index.test.js.map +1 -1
  697. package/dist/test/test/tools/load.integration.test.d.ts +2 -0
  698. package/dist/test/test/tools/load.integration.test.d.ts.map +1 -0
  699. package/dist/test/test/tools/load.integration.test.js +165 -0
  700. package/dist/test/test/tools/load.integration.test.js.map +1 -0
  701. package/dist/test/test/tools/load.test.d.ts +2 -0
  702. package/dist/test/test/tools/load.test.d.ts.map +1 -0
  703. package/dist/test/test/tools/load.test.js +387 -0
  704. package/dist/test/test/tools/load.test.js.map +1 -0
  705. package/dist/test/test/tools/preview-harness.d.ts +9 -0
  706. package/dist/test/test/tools/preview-harness.d.ts.map +1 -0
  707. package/dist/test/test/tools/preview-harness.js +23 -0
  708. package/dist/test/test/tools/preview-harness.js.map +1 -0
  709. package/dist/test/test/tools/preview.telemetry.test.d.ts +2 -0
  710. package/dist/test/test/tools/preview.telemetry.test.d.ts.map +1 -0
  711. package/dist/test/test/tools/preview.telemetry.test.js +36 -0
  712. package/dist/test/test/tools/preview.telemetry.test.js.map +1 -0
  713. package/dist/test/test/tools/schema-best-practices.d.ts +13 -0
  714. package/dist/test/test/tools/schema-best-practices.d.ts.map +1 -0
  715. package/dist/test/test/tools/schema-best-practices.js +169 -0
  716. package/dist/test/test/tools/schema-best-practices.js.map +1 -0
  717. package/dist/test/test/tools/schema-best-practices.test.d.ts +3 -0
  718. package/dist/test/test/tools/schema-best-practices.test.d.ts.map +1 -0
  719. package/dist/test/test/tools/schema-best-practices.test.js +194 -0
  720. package/dist/test/test/tools/schema-best-practices.test.js.map +1 -0
  721. package/dist/test/test/tools/spans.test.d.ts +2 -0
  722. package/dist/test/test/tools/spans.test.d.ts.map +1 -0
  723. package/dist/test/test/tools/spans.test.js +84 -0
  724. package/dist/test/test/tools/spans.test.js.map +1 -0
  725. package/dist/test/test/viewer/cesdk-cdn.test.d.ts +2 -0
  726. package/dist/test/test/viewer/cesdk-cdn.test.d.ts.map +1 -0
  727. package/dist/test/test/viewer/cesdk-cdn.test.js +19 -0
  728. package/dist/test/test/viewer/cesdk-cdn.test.js.map +1 -0
  729. package/dist/test/test/viewer/config-route.test.d.ts +2 -0
  730. package/dist/test/test/viewer/config-route.test.d.ts.map +1 -0
  731. package/dist/test/test/viewer/config-route.test.js +28 -0
  732. package/dist/test/test/viewer/config-route.test.js.map +1 -0
  733. package/dist/test/test/viewer/spa-version.test.d.ts +2 -0
  734. package/dist/test/test/viewer/spa-version.test.d.ts.map +1 -0
  735. package/dist/test/test/viewer/spa-version.test.js +14 -0
  736. package/dist/test/test/viewer/spa-version.test.js.map +1 -0
  737. package/dist/test/test/workspace/content-hash.test.d.ts +2 -0
  738. package/dist/test/test/workspace/content-hash.test.d.ts.map +1 -0
  739. package/dist/test/test/workspace/content-hash.test.js +17 -0
  740. package/dist/test/test/workspace/content-hash.test.js.map +1 -0
  741. package/dist/test/tsconfig.test.tsbuildinfo +1 -1
  742. package/dist/test/vitest.config.js +1 -1
  743. package/dist/test/vitest.config.js.map +1 -1
  744. package/dist/tools/asset-generate.d.ts.map +1 -1
  745. package/dist/tools/asset-generate.js +1 -8
  746. package/dist/tools/asset-generate.js.map +1 -1
  747. package/dist/tools/edit.d.ts +3 -0
  748. package/dist/tools/edit.d.ts.map +1 -1
  749. package/dist/tools/edit.js +145 -96
  750. package/dist/tools/edit.js.map +1 -1
  751. package/dist/tools/export.d.ts +3 -0
  752. package/dist/tools/export.d.ts.map +1 -1
  753. package/dist/tools/export.js +146 -108
  754. package/dist/tools/export.js.map +1 -1
  755. package/dist/tools/import.d.ts +12 -0
  756. package/dist/tools/import.d.ts.map +1 -0
  757. package/dist/tools/import.js +144 -0
  758. package/dist/tools/import.js.map +1 -0
  759. package/dist/tools/index.d.ts +3 -0
  760. package/dist/tools/index.d.ts.map +1 -1
  761. package/dist/tools/index.js +44 -4
  762. package/dist/tools/index.js.map +1 -1
  763. package/dist/tools/load.d.ts +26 -0
  764. package/dist/tools/load.d.ts.map +1 -0
  765. package/dist/tools/load.js +400 -0
  766. package/dist/tools/load.js.map +1 -0
  767. package/dist/tools/preview.d.ts +3 -0
  768. package/dist/tools/preview.d.ts.map +1 -1
  769. package/dist/tools/preview.js +79 -44
  770. package/dist/tools/preview.js.map +1 -1
  771. package/dist/tools/result.d.ts +1 -1
  772. package/dist/tools/result.js +2 -2
  773. package/dist/tools/result.js.map +1 -1
  774. package/dist/tools/spans.d.ts +45 -0
  775. package/dist/tools/spans.d.ts.map +1 -0
  776. package/dist/tools/spans.js +77 -0
  777. package/dist/tools/spans.js.map +1 -0
  778. package/dist/tools/telemetry-wrapper.d.ts +4 -0
  779. package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
  780. package/dist/tools/telemetry-wrapper.js +43 -0
  781. package/dist/tools/telemetry-wrapper.js.map +1 -0
  782. package/dist/viewer/cesdk-cdn.d.ts +16 -0
  783. package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
  784. package/dist/viewer/cesdk-cdn.js +30 -0
  785. package/dist/viewer/cesdk-cdn.js.map +1 -0
  786. package/dist/viewer/router.d.ts +6 -0
  787. package/dist/viewer/router.d.ts.map +1 -1
  788. package/dist/viewer/router.js +4 -1
  789. package/dist/viewer/router.js.map +1 -1
  790. package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
  791. package/dist/viewer/spa-assets.generated.js +2 -3
  792. package/dist/viewer/spa-assets.generated.js.map +1 -1
  793. package/dist/workspace/content-hash.d.ts +2 -0
  794. package/dist/workspace/content-hash.d.ts.map +1 -0
  795. package/dist/workspace/content-hash.js +15 -0
  796. package/dist/workspace/content-hash.js.map +1 -0
  797. package/package.json +18 -9
  798. package/assets/docs/guide/actions.md +0 -1038
  799. package/assets/docs/guide/animation/overview.md +0 -22
  800. package/assets/docs/guide/automation/batch-processing.md +0 -474
  801. package/assets/docs/guide/browser-support.md +0 -38
  802. package/assets/docs/guide/concepts/edit-modes.md +0 -431
  803. package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
  804. package/assets/docs/guide/create-audio/audio.md +0 -336
  805. package/assets/docs/guide/create-video/overview.md +0 -224
  806. package/assets/docs/guide/create-video/timeline-editor.md +0 -622
  807. package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
  808. package/assets/docs/guide/edit-image/vectorize.md +0 -204
  809. package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
  810. package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
  811. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
  812. package/assets/docs/guide/grid-and-rulers.md +0 -222
  813. package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
  814. package/assets/docs/guide/import-media/asset-library.md +0 -23
  815. package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
  816. package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
  817. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
  818. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
  819. package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
  820. package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
  821. package/assets/docs/guide/import-media/from-local-source.md +0 -20
  822. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
  823. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
  824. package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
  825. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
  826. package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
  827. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
  828. package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
  829. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
  830. package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
  831. package/assets/docs/guide/plugins/asset-sources.md +0 -553
  832. package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
  833. package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
  834. package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
  835. package/assets/docs/guide/starterkits/ai-editor.md +0 -749
  836. package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
  837. package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
  838. package/assets/docs/guide/starterkits/assets.md +0 -27
  839. package/assets/docs/guide/starterkits/auto-resize.md +0 -586
  840. package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
  841. package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
  842. package/assets/docs/guide/starterkits/content-moderation.md +0 -863
  843. package/assets/docs/guide/starterkits/creative-automation.md +0 -28
  844. package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
  845. package/assets/docs/guide/starterkits/customization.md +0 -29
  846. package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
  847. package/assets/docs/guide/starterkits/data-merge.md +0 -850
  848. package/assets/docs/guide/starterkits/design-editor.md +0 -698
  849. package/assets/docs/guide/starterkits/design-generation.md +0 -719
  850. package/assets/docs/guide/starterkits/design-validation.md +0 -808
  851. package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
  852. package/assets/docs/guide/starterkits/export-options.md +0 -724
  853. package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
  854. package/assets/docs/guide/starterkits/extensibility.md +0 -28
  855. package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
  856. package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
  857. package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
  858. package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
  859. package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
  860. package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
  861. package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
  862. package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
  863. package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
  864. package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
  865. package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
  866. package/assets/docs/guide/starterkits/photo-editor.md +0 -755
  867. package/assets/docs/guide/starterkits/photo-ui.md +0 -186
  868. package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
  869. package/assets/docs/guide/starterkits/placeholders.md +0 -678
  870. package/assets/docs/guide/starterkits/player.md +0 -405
  871. package/assets/docs/guide/starterkits/plugins.md +0 -25
  872. package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
  873. package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
  874. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
  875. package/assets/docs/guide/starterkits/product-editor.md +0 -773
  876. package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
  877. package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
  878. package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
  879. package/assets/docs/guide/starterkits/start-with-image.md +0 -684
  880. package/assets/docs/guide/starterkits/start-with-video.md +0 -651
  881. package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
  882. package/assets/docs/guide/starterkits/templating.md +0 -23
  883. package/assets/docs/guide/starterkits/theming.md +0 -662
  884. package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
  885. package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
  886. package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
  887. package/assets/docs/guide/starterkits/version-history.md +0 -745
  888. package/assets/docs/guide/starterkits/video-animations.md +0 -853
  889. package/assets/docs/guide/starterkits/video-captions.md +0 -884
  890. package/assets/docs/guide/starterkits/video-editing.md +0 -25
  891. package/assets/docs/guide/starterkits/video-editor.md +0 -696
  892. package/assets/docs/guide/starterkits/video-export-options.md +0 -676
  893. package/assets/docs/guide/starterkits/viewer.md +0 -400
  894. package/assets/docs/guide/starterkits.md +0 -41
  895. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
  896. package/assets/docs/guide/text/custom-fonts.md +0 -401
  897. package/assets/docs/guide/text/decorations.md +0 -330
  898. package/assets/docs/guide/text/enumerations.md +0 -258
  899. package/assets/docs/guide/to-v1-10.md +0 -131
  900. package/assets/docs/guide/to-v1-13.md +0 -165
  901. package/assets/docs/guide/to-v1-32.md +0 -110
  902. package/assets/docs/guide/to-v1-69.md +0 -468
  903. package/assets/docs/guide/to-v1-72.md +0 -193
  904. package/assets/docs/guide/use-templates/library.md +0 -450
  905. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
  906. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
  907. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
  908. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
  909. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
  910. package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
  911. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
  912. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
  913. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
  914. package/assets/docs/guide/user-interface/ai-integration.md +0 -30
  915. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
  916. package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
  917. package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
  918. package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
  919. package/assets/docs/guide/user-interface/appearance.md +0 -23
  920. package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
  921. package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
  922. package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
  923. package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
  924. package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
  925. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
  926. package/assets/docs/guide/user-interface/customization/dock.md +0 -399
  927. package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
  928. package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
  929. package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
  930. package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
  931. package/assets/docs/guide/user-interface/customization/panel.md +0 -605
  932. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
  933. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
  934. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
  935. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
  936. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
  937. package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
  938. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
  939. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
  940. package/assets/docs/guide/user-interface/customization/reference.md +0 -12
  941. package/assets/docs/guide/user-interface/customization.md +0 -39
  942. package/assets/docs/guide/user-interface/localization.md +0 -633
  943. package/assets/docs/guide/user-interface/overview.md +0 -167
  944. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
  945. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
  946. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
  947. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
  948. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
  949. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
  950. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
  951. package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
  952. package/assets/docs/guide/user-interface.md +0 -25
  953. package/assets/prompts/evals-assetGenerate.md +0 -12
  954. package/assets/prompts/evals-brutalistCore.md +0 -34
  955. package/assets/prompts/evals-danskCatalogue.md +0 -31
  956. package/assets/prompts/evals-exportRoundTrip.md +0 -12
  957. package/assets/prompts/evals-inspectPriorCode.md +0 -16
  958. package/assets/prompts/evals-listProjectFiles.md +0 -6
  959. package/assets/prompts/evals-readAndExplainScript.md +0 -6
  960. package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
  961. package/assets/prompts/evals-rewindRecovery.md +0 -10
  962. package/assets/prompts/evals-searchAcrossFiles.md +0 -6
  963. package/assets/prompts/evals-weddingCard.md +0 -20
  964. package/assets/prompts/explain.md +0 -6
  965. package/assets/prompts/review.md +0 -6
  966. package/dist/frontmatter.d.ts +0 -15
  967. package/dist/frontmatter.d.ts.map +0 -1
  968. package/dist/frontmatter.js +0 -46
  969. package/dist/frontmatter.js.map +0 -1
  970. package/dist/test/test/frontmatter.test.d.ts +0 -2
  971. package/dist/test/test/frontmatter.test.d.ts.map +0 -1
  972. package/dist/test/test/frontmatter.test.js +0 -55
  973. package/dist/test/test/frontmatter.test.js.map +0 -1
@@ -1,354 +1,291 @@
1
- > This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
1
+ > This is one page of the CE.SDK Node.js documentation. For a complete overview, see the [Node.js Documentation Index](https://img.ly/docs/cesdk/node.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
2
2
 
3
3
  **Navigation:** [Guides](./guides.md) > [Create and Edit Videos](./create-video.md) > [Trim](./edit-video/trim.md)
4
4
 
5
5
  ---
6
6
 
7
7
  Control video playback timing by trimming clips to specific start points and
8
- durations using CE.SDK's timeline UI and programmatic trim API.
8
+ durations using CE.SDK's programmatic trim API in headless mode.
9
9
 
10
- ![Video Trim example showing timeline with video clips and trim controls](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
11
-
12
- > **Reading time:** 12 minutes
10
+ > **Reading time:** 10 minutes
13
11
  >
14
12
  > **Resources:**
15
13
  >
16
14
  > - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
17
- > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-create-video-trim-browser)
18
- > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-video-trim-browser)
19
- > - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-video-trim-browser/)
20
-
21
- Understanding the difference between **fill-level trimming** and **block-level timing** is essential. Fill-level trimming (`setTrimOffset`, `setTrimLength`) controls which portion of the source media plays, while block-level timing (`setTimeOffset`, `setDuration`) controls when and how long the block appears in the composition. These two systems work together to give you complete control over video playback.
22
-
23
- ```typescript file=@cesdk_web_examples/guides-create-video-trim-browser/browser.ts reference-only
24
- import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
25
-
26
- import {
27
- BlurAssetSource,
28
- CaptionPresetsAssetSource,
29
- ColorPaletteAssetSource,
30
- CropPresetsAssetSource,
31
- DemoAssetSources,
32
- EffectsAssetSource,
33
- FiltersAssetSource,
34
- PagePresetsAssetSource,
35
- StickerAssetSource,
36
- TextAssetSource,
37
- TextComponentAssetSource,
38
- TypefaceAssetSource,
39
- UploadAssetSources,
40
- VectorShapeAssetSource
41
- } from '@cesdk/cesdk-js/plugins';
42
- import { VideoEditorConfig } from './video-editor/plugin';
43
- import packageJson from './package.json';
44
- import { calculateGridLayout } from './utils';
15
+ >
16
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-create-video-trim-server-js)
17
+ >
18
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-video-trim-server-js)
19
+
20
+ <NodejsVideoExportNotice {...props} />
21
+
22
+ Understanding the difference between **fill-level trimming** and **block-level timing** is key. Fill-level trimming (`setTrimOffset`, `setTrimLength`) controls which portion of the source media plays, while block-level timing (`setTimeOffset`, `setDuration`) controls when and how long the block appears in the composition. These two systems work together to give you complete control over video playback.
23
+
24
+ ```typescript file=@cesdk_web_examples/guides-create-video-trim-server-js/server-js.ts reference-only
25
+ import CreativeEngine from '@cesdk/node';
26
+ import { config } from 'dotenv';
27
+ import { writeFileSync, mkdirSync, existsSync } from 'fs';
28
+
29
+ // Load environment variables
30
+ config();
45
31
 
46
32
  /**
47
- * CE.SDK Plugin: Trim Video Guide
33
+ * CE.SDK Server Guide: Trim Video and Audio
48
34
  *
49
- * Demonstrates trimming video clips in CE.SDK:
35
+ * Demonstrates trimming video clips in headless mode:
50
36
  * - Loading video resources with forceLoadAVResource
51
37
  * - Basic video trimming with setTrimOffset/setTrimLength
52
38
  * - Getting current trim values
39
+ * - Getting source media duration
53
40
  * - Coordinating trim with block duration
54
41
  * - Trimming with looping enabled
55
42
  * - Checking trim support
56
43
  * - Frame-accurate trimming
57
44
  * - Batch trimming multiple videos
45
+ * - Saving the scene for later use
58
46
  */
59
- class Example implements EditorPlugin {
60
- name = packageJson.name;
61
-
62
- version = packageJson.version;
63
-
64
- async initialize({ cesdk }: EditorPluginContext): Promise<void> {
65
- if (!cesdk) {
66
- throw new Error('CE.SDK instance is required for this plugin');
67
- }
68
-
69
- await cesdk.addPlugin(new VideoEditorConfig());
70
-
71
- // Add asset source plugins
72
- await cesdk.addPlugin(new BlurAssetSource());
73
- await cesdk.addPlugin(new CaptionPresetsAssetSource());
74
- await cesdk.addPlugin(new ColorPaletteAssetSource());
75
- await cesdk.addPlugin(new CropPresetsAssetSource());
76
- await cesdk.addPlugin(
77
- new UploadAssetSources({
78
- include: [
79
- 'ly.img.image.upload',
80
- 'ly.img.video.upload',
81
- 'ly.img.audio.upload'
82
- ]
83
- })
84
- );
85
- await cesdk.addPlugin(
86
- new DemoAssetSources({
87
- include: [
88
- 'ly.img.templates.video.*',
89
- 'ly.img.image.*',
90
- 'ly.img.audio.*',
91
- 'ly.img.video.*'
92
- ]
93
- })
94
- );
95
- await cesdk.addPlugin(new EffectsAssetSource());
96
- await cesdk.addPlugin(new FiltersAssetSource());
97
- await cesdk.addPlugin(
98
- new PagePresetsAssetSource({
99
- include: [
100
- 'ly.img.page.presets.instagram.*',
101
- 'ly.img.page.presets.facebook.*',
102
- 'ly.img.page.presets.x.*',
103
- 'ly.img.page.presets.linkedin.*',
104
- 'ly.img.page.presets.pinterest.*',
105
- 'ly.img.page.presets.tiktok.*',
106
- 'ly.img.page.presets.youtube.*',
107
- 'ly.img.page.presets.video.*'
108
- ]
109
- })
110
- );
111
- await cesdk.addPlugin(new StickerAssetSource());
112
- await cesdk.addPlugin(new TextAssetSource());
113
- await cesdk.addPlugin(new TextComponentAssetSource());
114
- await cesdk.addPlugin(new TypefaceAssetSource());
115
- await cesdk.addPlugin(new VectorShapeAssetSource());
116
-
117
- await cesdk.actions.run('scene.create', {
118
- layout: 'DepthStack',
119
- page: {
120
- sourceId: 'ly.img.page.presets',
121
- assetId: 'ly.img.page.presets.instagram.story',
122
- color: { r: 0, g: 0, b: 0, a: 1 }
123
- }
124
- });
125
-
126
- const engine = cesdk.engine;
127
- const scene = engine.scene.get();
128
- const pages = engine.block.findByType('page');
129
- const page = pages.length > 0 ? pages[0] : scene;
130
-
131
- // Calculate responsive grid layout based on page dimensions
132
- const pageWidth = engine.block.getWidth(page);
133
- const pageHeight = engine.block.getHeight(page);
134
- const layout = calculateGridLayout(pageWidth, pageHeight, 8);
135
- const { blockWidth, blockHeight, getPosition } = layout;
136
-
137
- // Use a sample video URL from demo assets
138
- const videoUri = 'https://img.ly/static/ubq_video_samples/bbb.mp4';
139
-
140
- // Create a sample video block to demonstrate trim support checking
141
- const sampleVideo = await engine.block.addVideo(
142
- videoUri,
143
- blockWidth,
144
- blockHeight
145
- );
146
47
 
147
- // Get the video fill - trim operations are applied to the fill, not the block
148
- const videoFill = engine.block.getFill(sampleVideo);
48
+ // Initialize CE.SDK engine in headless mode
49
+ const engine = await CreativeEngine.init({
50
+ baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
51
+ // license: process.env.CESDK_LICENSE, // Optional (trial mode available)
52
+ });
53
+
54
+ try {
55
+ // Create a scene with a page
56
+ const scene = engine.scene.create('DepthStack');
57
+ const page = engine.block.create('page');
58
+ engine.block.setWidth(page, 1280);
59
+ engine.block.setHeight(page, 720);
60
+ engine.block.appendChild(scene, page);
61
+
62
+ // Set page duration to accommodate all demonstrations
63
+ engine.block.setDuration(page, 30);
64
+
65
+ // Sample video URL for demonstrations
66
+ const videoUri = 'https://img.ly/static/ubq_video_samples/bbb.mp4';
67
+
68
+ // Block size for layout
69
+ const blockSize = { width: 320, height: 180 };
70
+
71
+ // Create a video block to demonstrate trim support checking
72
+ const sampleVideo = await engine.block.addVideo(
73
+ videoUri,
74
+ blockSize.width,
75
+ blockSize.height
76
+ );
149
77
 
150
- // Check if the fill supports trim operations
151
- const supportsTrim = engine.block.supportsTrim(videoFill);
152
- // eslint-disable-next-line no-console
153
- console.log('Video fill supports trim:', supportsTrim); // true for video fills
78
+ // Get the video fill - trim operations are applied to the fill, not the block
79
+ const videoFill = engine.block.getFill(sampleVideo);
154
80
 
155
- // Select this block so timeline controls are visible
156
- engine.block.setSelected(sampleVideo, true);
81
+ // Check if the fill supports trim operations
82
+ const supportsTrim = engine.block.supportsTrim(videoFill);
83
+ console.log('Video fill supports trim:', supportsTrim); // true for video fills
157
84
 
158
- // Pattern: Always load video resource before accessing trim properties
159
- // This ensures metadata (duration, frame rate, etc.) is available
160
- await engine.block.forceLoadAVResource(videoFill);
85
+ // Load the video resource before accessing trim properties
86
+ // This ensures metadata (duration, frame rate, etc.) is available
87
+ await engine.block.forceLoadAVResource(videoFill);
161
88
 
162
- // Now we can safely access video metadata
163
- const totalDuration = engine.block.getDouble(
164
- videoFill,
165
- 'fill/video/totalDuration'
166
- );
167
- // eslint-disable-next-line no-console
168
- console.log('Total video duration:', totalDuration, 'seconds');
169
-
170
- // Pattern #1: Demonstrate Individual Before Combined
171
- // Create a separate video block for basic trim demonstration
172
- const basicTrimVideo = await engine.block.addVideo(
173
- videoUri,
174
- blockWidth,
175
- blockHeight
176
- );
89
+ // Get the total duration of the source video
90
+ const totalDuration = engine.block.getAVResourceTotalDuration(videoFill);
91
+ console.log('Total video duration:', totalDuration, 'seconds');
177
92
 
178
- // Get the fill to apply trim operations
179
- const basicTrimFill = engine.block.getFill(basicTrimVideo);
93
+ // Create a video block for basic trim demonstration
94
+ const basicTrimVideo = await engine.block.addVideo(
95
+ videoUri,
96
+ blockSize.width,
97
+ blockSize.height
98
+ );
180
99
 
181
- // Load resource before trimming
182
- await engine.block.forceLoadAVResource(basicTrimFill);
183
-
184
- // Trim video to start at 2 seconds and play for 5 seconds
185
- engine.block.setTrimOffset(basicTrimFill, 2.0);
186
- engine.block.setTrimLength(basicTrimFill, 5.0);
187
-
188
- // Get current trim values to verify or modify
189
- const currentOffset = engine.block.getTrimOffset(basicTrimFill);
190
- const currentLength = engine.block.getTrimLength(basicTrimFill);
191
- // eslint-disable-next-line no-console
192
- console.log(
193
- `Basic trim - Offset: ${currentOffset}s, Length: ${currentLength}s`
194
- );
100
+ // Get the fill to apply trim operations
101
+ const basicTrimFill = engine.block.getFill(basicTrimVideo);
195
102
 
196
- // Pattern #5: Progressive Complexity - coordinating trim with block duration
197
- // Create a video block demonstrating trim + duration coordination
198
- const durationTrimVideo = await engine.block.addVideo(
199
- videoUri,
200
- blockWidth,
201
- blockHeight
202
- );
103
+ // Load resource before trimming
104
+ await engine.block.forceLoadAVResource(basicTrimFill);
203
105
 
204
- const durationTrimFill = engine.block.getFill(durationTrimVideo);
205
- await engine.block.forceLoadAVResource(durationTrimFill);
106
+ // Trim video to start at 2 seconds and play for 5 seconds
107
+ engine.block.setTrimOffset(basicTrimFill, 2.0);
108
+ engine.block.setTrimLength(basicTrimFill, 5.0);
206
109
 
207
- // Set trim: play portion from 3s to 8s (5 seconds of content)
208
- engine.block.setTrimOffset(durationTrimFill, 3.0);
209
- engine.block.setTrimLength(durationTrimFill, 5.0);
110
+ console.log('Basic trim applied: offset 2s, length 5s');
210
111
 
211
- // Set block duration: how long this block appears in the timeline
212
- // When duration equals trim length, the entire trimmed portion plays once
213
- engine.block.setDuration(durationTrimVideo, 5.0);
112
+ // Get current trim values to verify or modify
113
+ const currentOffset = engine.block.getTrimOffset(basicTrimFill);
114
+ const currentLength = engine.block.getTrimLength(basicTrimFill);
115
+ console.log(
116
+ `Current trim values - Offset: ${currentOffset}s, Length: ${currentLength}s`
117
+ );
214
118
 
215
- // eslint-disable-next-line no-console
216
- console.log(
217
- 'Trim+Duration - Block will play trimmed 5s exactly once in timeline'
218
- );
119
+ // Get the total duration of source media to validate trim values
120
+ const sourceDuration = engine.block.getAVResourceTotalDuration(basicTrimFill);
121
+ console.log('Source media duration:', sourceDuration, 'seconds');
219
122
 
220
- // Create a video block with trim + looping
221
- const loopingTrimVideo = await engine.block.addVideo(
222
- videoUri,
223
- blockWidth,
224
- blockHeight
225
- );
123
+ // Validate trim doesn't exceed source length
124
+ const maxTrimLength = sourceDuration - currentOffset;
125
+ console.log('Maximum trim length from current offset:', maxTrimLength, 's');
226
126
 
227
- const loopingTrimFill = engine.block.getFill(loopingTrimVideo);
228
- await engine.block.forceLoadAVResource(loopingTrimFill);
127
+ // Create a video block demonstrating trim + duration coordination
128
+ const durationTrimVideo = await engine.block.addVideo(
129
+ videoUri,
130
+ blockSize.width,
131
+ blockSize.height
132
+ );
229
133
 
230
- // Trim to a short 3-second segment
231
- engine.block.setTrimOffset(loopingTrimFill, 1.0);
232
- engine.block.setTrimLength(loopingTrimFill, 3.0);
134
+ const durationTrimFill = engine.block.getFill(durationTrimVideo);
135
+ await engine.block.forceLoadAVResource(durationTrimFill);
233
136
 
234
- // Enable looping so the 3-second segment repeats
235
- engine.block.setLooping(loopingTrimFill, true);
137
+ // Set trim: play portion from 3s to 8s (5 seconds of content)
138
+ engine.block.setTrimOffset(durationTrimFill, 3.0);
139
+ engine.block.setTrimLength(durationTrimFill, 5.0);
236
140
 
237
- // Verify looping is enabled
238
- const isLooping = engine.block.isLooping(loopingTrimFill);
239
- // eslint-disable-next-line no-console
240
- console.log('Looping enabled:', isLooping);
141
+ // Set block duration: how long this block appears in the timeline
142
+ // When duration equals trim length, the entire trimmed portion plays once
143
+ engine.block.setDuration(durationTrimVideo, 5.0);
241
144
 
242
- // Set duration longer than trim length - the trim will loop to fill it
243
- engine.block.setDuration(loopingTrimVideo, 9.0);
145
+ console.log('Trim+Duration: Block will play trimmed 5s exactly once');
244
146
 
245
- // eslint-disable-next-line no-console
246
- console.log(
247
- 'Looping trim - 3s segment will loop 3 times to fill 9s duration'
248
- );
147
+ // Create a video block with trim + looping
148
+ const loopingTrimVideo = await engine.block.addVideo(
149
+ videoUri,
150
+ blockSize.width,
151
+ blockSize.height
152
+ );
249
153
 
250
- // Pattern #6: Descriptive naming - frame-accurate trim demonstration
251
- // Create a video block for frame-accurate trimming
252
- const frameAccurateTrimVideo = await engine.block.addVideo(
253
- videoUri,
254
- blockWidth,
255
- blockHeight
256
- );
154
+ const loopingTrimFill = engine.block.getFill(loopingTrimVideo);
155
+ await engine.block.forceLoadAVResource(loopingTrimFill);
156
+
157
+ // Trim to a short 3-second segment
158
+ engine.block.setTrimOffset(loopingTrimFill, 1.0);
159
+ engine.block.setTrimLength(loopingTrimFill, 3.0);
257
160
 
258
- const frameFill = engine.block.getFill(frameAccurateTrimVideo);
259
- await engine.block.forceLoadAVResource(frameFill);
161
+ // Enable looping so the 3-second segment repeats
162
+ engine.block.setLooping(loopingTrimFill, true);
260
163
 
261
- // Note: Frame rate is not directly accessible via the API
262
- // For this example, we'll assume a common frame rate of 30fps
263
- const frameRate = 30;
164
+ // Verify looping is enabled
165
+ const isLooping = engine.block.isLooping(loopingTrimFill);
166
+ console.log('Looping enabled:', isLooping);
264
167
 
265
- // Calculate trim offset based on specific frame number
266
- // Example: Start at frame 60 for a 30fps video = 2.0 seconds
267
- const startFrame = 60;
268
- const trimOffsetSeconds = startFrame / frameRate;
168
+ // Set duration longer than trim length - the trim will loop to fill it
169
+ engine.block.setDuration(loopingTrimVideo, 9.0);
269
170
 
270
- // Trim for exactly 150 frames = 5.0 seconds at 30fps
271
- const trimFrames = 150;
272
- const trimLengthSeconds = trimFrames / frameRate;
171
+ console.log('Looping trim: 3s segment will loop 3 times to fill 9s duration');
273
172
 
274
- engine.block.setTrimOffset(frameFill, trimOffsetSeconds);
275
- engine.block.setTrimLength(frameFill, trimLengthSeconds);
173
+ // Create a video block for frame-accurate trimming
174
+ const frameAccurateTrimVideo = await engine.block.addVideo(
175
+ videoUri,
176
+ blockSize.width,
177
+ blockSize.height
178
+ );
179
+
180
+ const frameFill = engine.block.getFill(frameAccurateTrimVideo);
181
+ await engine.block.forceLoadAVResource(frameFill);
182
+
183
+ // For frame-accurate trimming, assume a common frame rate (e.g., 30fps)
184
+ // In production, you may know the frame rate from your video metadata
185
+ const frameRate = 30;
186
+
187
+ // Calculate trim offset based on specific frame number
188
+ // Example: Start at frame 60 for a 30fps video = 2.0 seconds
189
+ const startFrame = 60;
190
+ const trimOffsetSeconds = startFrame / frameRate;
191
+
192
+ // Trim for exactly 150 frames = 5.0 seconds at 30fps
193
+ const trimFrames = 150;
194
+ const trimLengthSeconds = trimFrames / frameRate;
195
+
196
+ engine.block.setTrimOffset(frameFill, trimOffsetSeconds);
197
+ engine.block.setTrimLength(frameFill, trimLengthSeconds);
198
+
199
+ console.log(
200
+ `Frame-accurate trim - Frame rate: ${frameRate}fps, Start: ${startFrame}, Duration: ${trimFrames} frames`
201
+ );
276
202
 
277
- // eslint-disable-next-line no-console
278
- console.log(
279
- `Frame-accurate trim - Frame rate: ${frameRate}fps (assumed), Start frame: ${startFrame}, Duration: ${trimFrames} frames`
203
+ // Batch process multiple video clips with consistent trimming
204
+ const batchVideoUris = [
205
+ 'https://img.ly/static/ubq_video_samples/bbb.mp4',
206
+ 'https://img.ly/static/ubq_video_samples/bbb.mp4',
207
+ 'https://img.ly/static/ubq_video_samples/bbb.mp4'
208
+ ];
209
+
210
+ const batchVideos = [];
211
+ for (const uri of batchVideoUris) {
212
+ const batchVideo = await engine.block.addVideo(
213
+ uri,
214
+ blockSize.width,
215
+ blockSize.height
280
216
  );
217
+ batchVideos.push(batchVideo);
218
+
219
+ // Get the fill for trim operations
220
+ const batchFill = engine.block.getFill(batchVideo);
221
+
222
+ // Load resource before trimming
223
+ await engine.block.forceLoadAVResource(batchFill);
281
224
 
282
- // Pattern: Batch processing multiple video clips
283
- // Create multiple video blocks to demonstrate batch trimming
284
- const batchVideoUris = [
285
- 'https://img.ly/static/ubq_video_samples/bbb.mp4',
286
- 'https://img.ly/static/ubq_video_samples/bbb.mp4',
287
- 'https://img.ly/static/ubq_video_samples/bbb.mp4'
288
- ];
289
-
290
- const batchVideos = [];
291
- for (let i = 0; i < batchVideoUris.length; i++) {
292
- const batchVideo = await engine.block.addVideo(
293
- batchVideoUris[i],
294
- blockWidth,
295
- blockHeight
296
- );
297
- batchVideos.push(batchVideo);
298
-
299
- // Get the fill for trim operations
300
- const batchFill = engine.block.getFill(batchVideo);
301
-
302
- // Load resource before trimming
303
- await engine.block.forceLoadAVResource(batchFill);
304
-
305
- // Apply consistent trim: first 4 seconds of each video
306
- engine.block.setTrimOffset(batchFill, 0.0);
307
- engine.block.setTrimLength(batchFill, 4.0);
308
-
309
- // Set consistent duration
310
- engine.block.setDuration(batchVideo, 4.0);
311
- }
312
-
313
- // eslint-disable-next-line no-console
314
- console.log('Batch trim - Applied consistent 4s trim to 3 video blocks');
315
-
316
- // ===== Position all blocks in grid layout =====
317
- const blocks = [
318
- sampleVideo, // Position 0
319
- basicTrimVideo, // Position 1
320
- durationTrimVideo, // Position 2
321
- loopingTrimVideo, // Position 3
322
- frameAccurateTrimVideo, // Position 4
323
- ...batchVideos // Positions 5-7
324
- ];
325
-
326
- blocks.forEach((block, index) => {
327
- const pos = getPosition(index);
328
- engine.block.setPositionX(block, pos.x);
329
- engine.block.setPositionY(block, pos.y);
330
- });
331
-
332
- // Start playback automatically when the example loads
333
- try {
334
- engine.block.setPlaying(page, true);
335
- // eslint-disable-next-line no-console
336
- console.log(
337
- 'Video trim guide initialized. Playback started automatically. Use timeline controls to adjust trim handles.'
338
- );
339
- } catch (error) {
340
- // eslint-disable-next-line no-console
341
- console.log(
342
- 'Video trim guide initialized. Click play button to start playback.'
343
- );
344
- }
225
+ // Apply consistent trim: first 4 seconds of each video
226
+ engine.block.setTrimOffset(batchFill, 0.0);
227
+ engine.block.setTrimLength(batchFill, 4.0);
228
+
229
+ // Set consistent duration
230
+ engine.block.setDuration(batchVideo, 4.0);
345
231
  }
346
- }
347
232
 
348
- export default Example;
233
+ console.log(
234
+ `Batch trim: Applied consistent 4s trim to ${batchVideos.length} videos`
235
+ );
236
+
237
+ // ===== Position all blocks in grid layout =====
238
+ const spacing = 20;
239
+ const margin = 40;
240
+ const cols = 3;
241
+
242
+ const getPosition = (index: number) => ({
243
+ x: margin + (index % cols) * (blockSize.width + spacing),
244
+ y: margin + Math.floor(index / cols) * (blockSize.height + spacing)
245
+ });
246
+
247
+ const blocks = [
248
+ sampleVideo,
249
+ basicTrimVideo,
250
+ durationTrimVideo,
251
+ loopingTrimVideo,
252
+ frameAccurateTrimVideo,
253
+ ...batchVideos
254
+ ];
255
+
256
+ blocks.forEach((block, index) => {
257
+ const pos = getPosition(index);
258
+ engine.block.setPositionX(block, pos.x);
259
+ engine.block.setPositionY(block, pos.y);
260
+ });
261
+
262
+ // Save the scene as a .scene file for later use or rendering
263
+ // This preserves all trim settings and can be loaded in any CE.SDK environment
264
+ console.log('Saving scene...');
265
+
266
+ const sceneString = await engine.scene.saveToString();
267
+
268
+ // Ensure output directory exists
269
+ if (!existsSync('output')) {
270
+ mkdirSync('output');
271
+ }
272
+
273
+ // Save to file
274
+ writeFileSync('output/trimmed-video.scene', sceneString);
275
+ console.log('Exported to output/trimmed-video.scene');
276
+
277
+ console.log('');
278
+ console.log('Video trim guide completed successfully.');
279
+ console.log('Scene saved with:');
280
+ console.log(' - 8 video blocks with various trim configurations');
281
+ console.log(' - Basic trim, duration coordination, looping, and batch trim');
282
+ console.log(' - Ready for rendering with CE.SDK Renderer');
283
+ } finally {
284
+ engine.dispose();
285
+ }
349
286
  ```
350
287
 
351
- This guide covers how to use the built-in timeline UI for visual trimming and how to trim videos programmatically using the Engine API.
288
+ This guide covers how to trim videos programmatically using the Engine API in a headless Node.js environment.
352
289
 
353
290
  ## Understanding Trim Concepts
354
291
 
@@ -369,7 +306,7 @@ This trimming is completely non-destructive—the source video file remains unch
369
306
 
370
307
  Block-level timing is separate from trimming and controls when and how long a block exists in the composition. `setTimeOffset` determines when the block becomes active in the composition (useful for track-based layouts). `setDuration` controls how long the block appears in the composition.
371
308
 
372
- The _trim_ controls what plays from the source media, while the _duration_ controls how long that playback appears in the composition. If the duration exceeds the trim length and if looping is disabled, the trimmed portion will play once and then hold the last frame for the remaining duration.
309
+ The *trim* controls what plays from the source media, while the *duration* controls how long that playback appears in the composition. If the duration exceeds the trim length and if looping is disabled, the trimmed portion will play once and then hold the last frame for the remaining duration.
373
310
 
374
311
  ### Common Use Cases
375
312
 
@@ -381,162 +318,148 @@ Trimming enables many video editing workflows:
381
318
  - **Create loops** - Trim to a specific length and enable loop mode for seamless repeating content
382
319
  - **Uniform compositions** - Batch trim multiple clips to consistent lengths
383
320
 
384
- ## Trimming Video via UI
385
-
386
- ### Accessing Trim Controls
387
-
388
- When you select a video block in the timeline, CE.SDK reveals trim handles at the edges of the clip. These visual controls appear as draggable handles on the left and right sides of the video block in the timeline panel.
389
-
390
- The trimmed portion of your video is visually distinguished from the untrimmed regions on either side that represent portions of the source media that won't play due to trim settings. This visual feedback makes it immediately clear which part of your video will be included in the final composition.
391
-
392
- ### Using Trim Handles
393
-
394
- We adjust trimming by dragging the handles. The left handle controls the trim offset—dragging it right increases the offset, skipping more of the beginning. Dragging left decreases the offset, including more from the start of the video.
395
-
396
- The right handle adjusts the trim length by changing where the video stops playing. Dragging left shortens the trim length, ending playback earlier. Dragging right extends it, playing more of the source media.
397
-
398
- For frame-accurate control, many CE.SDK interfaces provide numeric input fields where you can type exact time values in seconds. This precision is essential when you need to trim to specific frames or match exact durations.
399
-
400
- The icon on the trim handle turns into an outward-pointing arrow.
401
-
402
- ### Preview During Trimming
403
-
404
- Scrubbing the playhead through your trimmed content shows exactly what will play. This immediate feedback loop makes it easy to find the perfect trim points visually.
321
+ ## Programmatic Video Trimming
405
322
 
406
- If your video extends beyond the page duration, out-of-bounds content is indicated with a blue overlay in the timeline and won't be visible in the final output.
323
+ ### Initialize CE.SDK
407
324
 
408
- ### Constraints and Limitations
325
+ For headless video processing, we initialize CE.SDK's Node.js engine. This provides full API access to the trimming system without browser dependencies, making it ideal for server-side automation and batch processing.
409
326
 
410
- CE.SDK enforces a minimum trim duration to prevent creating zero-length or extremely short clips that could cause playback issues. If you try to drag handles closer than this minimum, the handle will resist further movement.
327
+ ```typescript highlight-setup
328
+ // Initialize CE.SDK engine in headless mode
329
+ const engine = await CreativeEngine.init({
330
+ baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
331
+ // license: process.env.CESDK_LICENSE, // Optional (trial mode available)
332
+ });
333
+ ```
411
334
 
412
- When clips extend beyond page duration boundaries, grey visual indicators show which portions fall outside. While the video block may be longer than the page, only content within the page duration will appear in exports or final compositions.
413
-
414
- ## Programmatic Video Trimming
335
+ The headless engine gives you complete control over video trimming operations, perfect for automated workflows, background processing, and server-side video preparation.
415
336
 
416
337
  ### Loading Video Resources
417
338
 
418
- Before accessing trim properties or setting trim values, we must load the video resource metadata using `forceLoadAVResource`. This critical step ensures CE.SDK has downloaded information about the video's duration, frame rate, and other properties needed for accurate trimming.
339
+ Before accessing trim properties or setting trim values, we must load the video resource metadata using `forceLoadAVResource`. This step ensures CE.SDK has information about the video's duration and other properties needed for accurate trimming.
419
340
 
420
341
  ```typescript highlight-load-video-resource
421
- // Pattern: Always load video resource before accessing trim properties
422
- // This ensures metadata (duration, frame rate, etc.) is available
423
- await engine.block.forceLoadAVResource(videoFill);
424
-
425
- // Now we can safely access video metadata
426
- const totalDuration = engine.block.getDouble(
427
- videoFill,
428
- 'fill/video/totalDuration'
429
- );
430
- // eslint-disable-next-line no-console
431
- console.log('Total video duration:', totalDuration, 'seconds');
342
+ // Load the video resource before accessing trim properties
343
+ // This ensures metadata (duration, frame rate, etc.) is available
344
+ await engine.block.forceLoadAVResource(videoFill);
345
+
346
+ // Get the total duration of the source video
347
+ const totalDuration = engine.block.getAVResourceTotalDuration(videoFill);
348
+ console.log('Total video duration:', totalDuration, 'seconds');
432
349
  ```
433
350
 
434
- Skipping this step is a common source of errors. Without loading the resource first, trim operations may fail silently or produce unexpected results. Always await `forceLoadAVResource` before calling any trim methods.
351
+ Skipping this step is a common source of errors. Without loading the resource first, trim operations may fail or produce unexpected results. Always await `forceLoadAVResource` before calling any trim methods.
435
352
 
436
- Once loaded, we can access metadata like `totalDuration` and `frameRate` from the video fill. This information helps us calculate valid trim ranges and ensures we don't try to trim beyond the available media.
353
+ Once loaded, we can access metadata like `totalDuration` from the video fill. This information helps us calculate valid trim ranges and ensures we don't try to trim beyond the available media.
437
354
 
438
355
  ### Checking Trim Support
439
356
 
440
- Before applying trim operations, we verify that a block supports trimming. While video blocks typically support trimming, other block types like pages and scenes do not.
357
+ Before applying trim operations, we verify that a block supports trimming. While video fills typically support trimming, other block types like pages and scenes do not.
441
358
 
442
359
  ```typescript highlight-check-trim-support
443
- // Create a sample video block to demonstrate trim support checking
444
- const sampleVideo = await engine.block.addVideo(
445
- videoUri,
446
- blockWidth,
447
- blockHeight
448
- );
449
-
450
- // Get the video fill - trim operations are applied to the fill, not the block
451
- const videoFill = engine.block.getFill(sampleVideo);
360
+ // Create a video block to demonstrate trim support checking
361
+ const sampleVideo = await engine.block.addVideo(
362
+ videoUri,
363
+ blockSize.width,
364
+ blockSize.height
365
+ );
452
366
 
453
- // Check if the fill supports trim operations
454
- const supportsTrim = engine.block.supportsTrim(videoFill);
455
- // eslint-disable-next-line no-console
456
- console.log('Video fill supports trim:', supportsTrim); // true for video fills
367
+ // Get the video fill - trim operations are applied to the fill, not the block
368
+ const videoFill = engine.block.getFill(sampleVideo);
457
369
 
458
- // Select this block so timeline controls are visible
459
- engine.block.setSelected(sampleVideo, true);
370
+ // Check if the fill supports trim operations
371
+ const supportsTrim = engine.block.supportsTrim(videoFill);
372
+ console.log('Video fill supports trim:', supportsTrim); // true for video fills
460
373
  ```
461
374
 
462
- Checking support prevents runtime errors and allows you to build robust interfaces that only show trim controls for compatible blocks. Graphic blocks with video fills also support trimming, not just top-level video blocks.
375
+ Checking support prevents runtime errors and allows you to build robust applications that only apply trim operations to compatible blocks. Graphic blocks with video fills also support trimming, not just top-level video blocks.
463
376
 
464
377
  ### Trimming Video
465
378
 
466
379
  Once we've confirmed trim support and loaded the resource, we can apply trimming. Here we create a video block and trim it to start 2 seconds into the source media and play for 5 seconds.
467
380
 
468
381
  ```typescript highlight-basic-video-trim
469
- // Pattern #1: Demonstrate Individual Before Combined
470
- // Create a separate video block for basic trim demonstration
471
- const basicTrimVideo = await engine.block.addVideo(
472
- videoUri,
473
- blockWidth,
474
- blockHeight
475
- );
382
+ // Create a video block for basic trim demonstration
383
+ const basicTrimVideo = await engine.block.addVideo(
384
+ videoUri,
385
+ blockSize.width,
386
+ blockSize.height
387
+ );
388
+
389
+ // Get the fill to apply trim operations
390
+ const basicTrimFill = engine.block.getFill(basicTrimVideo);
476
391
 
477
- // Get the fill to apply trim operations
478
- const basicTrimFill = engine.block.getFill(basicTrimVideo);
392
+ // Load resource before trimming
393
+ await engine.block.forceLoadAVResource(basicTrimFill);
479
394
 
480
- // Load resource before trimming
481
- await engine.block.forceLoadAVResource(basicTrimFill);
395
+ // Trim video to start at 2 seconds and play for 5 seconds
396
+ engine.block.setTrimOffset(basicTrimFill, 2.0);
397
+ engine.block.setTrimLength(basicTrimFill, 5.0);
482
398
 
483
- // Trim video to start at 2 seconds and play for 5 seconds
484
- engine.block.setTrimOffset(basicTrimFill, 2.0);
485
- engine.block.setTrimLength(basicTrimFill, 5.0);
399
+ console.log('Basic trim applied: offset 2s, length 5s');
486
400
  ```
487
401
 
488
402
  The trim offset of 2.0 skips the first 2 seconds of the video. The trim length of 5.0 means exactly 5 seconds of video will play, starting from that offset point. So this video plays from the 2-second mark to the 7-second mark of the original file.
489
403
 
490
404
  ### Getting Current Trim Values
491
405
 
492
- We can retrieve the current trim settings to verify values, build UI controls, or make relative adjustments based on existing settings.
406
+ We can retrieve the current trim settings to verify values, make relative adjustments, or log processing information.
493
407
 
494
408
  ```typescript highlight-get-trim-values
495
409
  // Get current trim values to verify or modify
496
410
  const currentOffset = engine.block.getTrimOffset(basicTrimFill);
497
411
  const currentLength = engine.block.getTrimLength(basicTrimFill);
498
- // eslint-disable-next-line no-console
499
412
  console.log(
500
- `Basic trim - Offset: ${currentOffset}s, Length: ${currentLength}s`
413
+ `Current trim values - Offset: ${currentOffset}s, Length: ${currentLength}s`
501
414
  );
502
415
  ```
503
416
 
504
- These getter methods return the current trim offset and length in seconds. Use them to populate UI inputs, calculate remaining media duration, or create undo/redo functionality in your application.
417
+ These getter methods return the current trim offset and length in seconds. Use them to validate settings before export or to calculate remaining media duration.
418
+
419
+ ### Getting Source Media Duration
420
+
421
+ Use `getAVResourceTotalDuration()` to determine the total duration of the source media file. This helps validate that trim values don't exceed available media.
422
+
423
+ ```typescript highlight-get-source-duration
424
+ // Get the total duration of source media to validate trim values
425
+ const sourceDuration = engine.block.getAVResourceTotalDuration(basicTrimFill);
426
+ console.log('Source media duration:', sourceDuration, 'seconds');
427
+
428
+ // Validate trim doesn't exceed source length
429
+ const maxTrimLength = sourceDuration - currentOffset;
430
+ console.log('Maximum trim length from current offset:', maxTrimLength, 's');
431
+ ```
432
+
433
+ Always check the source duration when processing videos of unknown length. This prevents setting trim offsets beyond the video's end and ensures your trim length doesn't exceed available content.
505
434
 
506
435
  ## Additional Trimming Techniques
507
436
 
508
437
  ### Trimming with Block Duration
509
438
 
510
- Take a look at this example to understand how trim length and block duration interact:
439
+ Trim length and block duration interact to determine playback behavior. When block duration equals trim length, the entire trimmed portion plays exactly once.
511
440
 
512
441
  ```typescript highlight-trim-with-duration
513
- // Pattern #5: Progressive Complexity - coordinating trim with block duration
514
- // Create a video block demonstrating trim + duration coordination
515
- const durationTrimVideo = await engine.block.addVideo(
516
- videoUri,
517
- blockWidth,
518
- blockHeight
519
- );
442
+ // Create a video block demonstrating trim + duration coordination
443
+ const durationTrimVideo = await engine.block.addVideo(
444
+ videoUri,
445
+ blockSize.width,
446
+ blockSize.height
447
+ );
520
448
 
521
- const durationTrimFill = engine.block.getFill(durationTrimVideo);
522
- await engine.block.forceLoadAVResource(durationTrimFill);
449
+ const durationTrimFill = engine.block.getFill(durationTrimVideo);
450
+ await engine.block.forceLoadAVResource(durationTrimFill);
523
451
 
524
- // Set trim: play portion from 3s to 8s (5 seconds of content)
525
- engine.block.setTrimOffset(durationTrimFill, 3.0);
526
- engine.block.setTrimLength(durationTrimFill, 5.0);
452
+ // Set trim: play portion from 3s to 8s (5 seconds of content)
453
+ engine.block.setTrimOffset(durationTrimFill, 3.0);
454
+ engine.block.setTrimLength(durationTrimFill, 5.0);
527
455
 
528
- // Set block duration: how long this block appears in the timeline
529
- // When duration equals trim length, the entire trimmed portion plays once
530
- engine.block.setDuration(durationTrimVideo, 5.0);
456
+ // Set block duration: how long this block appears in the timeline
457
+ // When duration equals trim length, the entire trimmed portion plays once
458
+ engine.block.setDuration(durationTrimVideo, 5.0);
531
459
 
532
- // eslint-disable-next-line no-console
533
- console.log(
534
- 'Trim+Duration - Block will play trimmed 5s exactly once in timeline'
535
- );
460
+ console.log('Trim+Duration: Block will play trimmed 5s exactly once');
536
461
  ```
537
462
 
538
- In this example, we trim the video to a 5-second segment (from 3s to 8s of the source) and set the block duration to exactly 5 seconds. This means the entire trimmed portion plays once, then stops. The block duration matches the trim length, so there's no looping or holding on the last frame.
539
-
540
463
  If the block duration is less than the trim length, only part of the trimmed segment will play. If duration exceeds trim length without looping enabled, the video plays the trimmed portion once and holds on the last frame for the remaining time.
541
464
 
542
465
  ### Trimming with Looping
@@ -544,124 +467,143 @@ If the block duration is less than the trim length, only part of the trimmed seg
544
467
  Looping allows a trimmed video segment to repeat seamlessly. We enable looping and set a block duration longer than the trim length to create repeating playback.
545
468
 
546
469
  ```typescript highlight-trim-with-looping
547
- // Create a video block with trim + looping
548
- const loopingTrimVideo = await engine.block.addVideo(
549
- videoUri,
550
- blockWidth,
551
- blockHeight
552
- );
470
+ // Create a video block with trim + looping
471
+ const loopingTrimVideo = await engine.block.addVideo(
472
+ videoUri,
473
+ blockSize.width,
474
+ blockSize.height
475
+ );
553
476
 
554
- const loopingTrimFill = engine.block.getFill(loopingTrimVideo);
555
- await engine.block.forceLoadAVResource(loopingTrimFill);
477
+ const loopingTrimFill = engine.block.getFill(loopingTrimVideo);
478
+ await engine.block.forceLoadAVResource(loopingTrimFill);
556
479
 
557
- // Trim to a short 3-second segment
558
- engine.block.setTrimOffset(loopingTrimFill, 1.0);
559
- engine.block.setTrimLength(loopingTrimFill, 3.0);
480
+ // Trim to a short 3-second segment
481
+ engine.block.setTrimOffset(loopingTrimFill, 1.0);
482
+ engine.block.setTrimLength(loopingTrimFill, 3.0);
560
483
 
561
- // Enable looping so the 3-second segment repeats
562
- engine.block.setLooping(loopingTrimFill, true);
484
+ // Enable looping so the 3-second segment repeats
485
+ engine.block.setLooping(loopingTrimFill, true);
563
486
 
564
- // Verify looping is enabled
565
- const isLooping = engine.block.isLooping(loopingTrimFill);
566
- // eslint-disable-next-line no-console
567
- console.log('Looping enabled:', isLooping);
487
+ // Verify looping is enabled
488
+ const isLooping = engine.block.isLooping(loopingTrimFill);
489
+ console.log('Looping enabled:', isLooping);
568
490
 
569
- // Set duration longer than trim length - the trim will loop to fill it
570
- engine.block.setDuration(loopingTrimVideo, 9.0);
491
+ // Set duration longer than trim length - the trim will loop to fill it
492
+ engine.block.setDuration(loopingTrimVideo, 9.0);
571
493
 
572
- // eslint-disable-next-line no-console
573
- console.log('Looping trim - 3s segment will loop 3 times to fill 9s duration');
494
+ console.log('Looping trim: 3s segment will loop 3 times to fill 9s duration');
574
495
  ```
575
496
 
576
- Here we trim to a 3-second segment and enable looping. The block duration of 9 seconds means this 3-second segment will loop 3 times to fill the entire duration. This technique is perfect for creating background loops, repeated motion graphics, or extending short clips.
497
+ The 3-second trimmed segment loops 3 times to fill the 9-second duration. This technique is useful for creating background loops, repeated motion graphics, or extending short clips.
577
498
 
578
- When looping is enabled, CE.SDK automatically restarts playback from the trim offset when it reaches the end of the trim length.
499
+ When looping is enabled, CE.SDK automatically restarts playback from the trim offset when it reaches the end of the trim length. Use `isLooping()` to check the current looping state.
579
500
 
580
501
  ### Frame-Accurate Trimming
581
502
 
582
- For precise editing, we often need to trim to specific frame boundaries rather than arbitrary time values. Using the video's frame rate metadata, we can calculate exact frame-based trim points.
503
+ For precise editing, we can trim to specific frame boundaries rather than arbitrary time values. Using the video's frame rate, we calculate exact frame-based trim points.
583
504
 
584
505
  ```typescript highlight-frame-accurate-trim
585
- // Pattern #6: Descriptive naming - frame-accurate trim demonstration
586
- // Create a video block for frame-accurate trimming
587
- const frameAccurateTrimVideo = await engine.block.addVideo(
588
- videoUri,
589
- blockWidth,
590
- blockHeight
591
- );
506
+ // Create a video block for frame-accurate trimming
507
+ const frameAccurateTrimVideo = await engine.block.addVideo(
508
+ videoUri,
509
+ blockSize.width,
510
+ blockSize.height
511
+ );
592
512
 
593
- const frameFill = engine.block.getFill(frameAccurateTrimVideo);
594
- await engine.block.forceLoadAVResource(frameFill);
513
+ const frameFill = engine.block.getFill(frameAccurateTrimVideo);
514
+ await engine.block.forceLoadAVResource(frameFill);
595
515
 
596
- // Note: Frame rate is not directly accessible via the API
597
- // For this example, we'll assume a common frame rate of 30fps
598
- const frameRate = 30;
516
+ // For frame-accurate trimming, assume a common frame rate (e.g., 30fps)
517
+ // In production, you may know the frame rate from your video metadata
518
+ const frameRate = 30;
599
519
 
600
- // Calculate trim offset based on specific frame number
601
- // Example: Start at frame 60 for a 30fps video = 2.0 seconds
602
- const startFrame = 60;
603
- const trimOffsetSeconds = startFrame / frameRate;
520
+ // Calculate trim offset based on specific frame number
521
+ // Example: Start at frame 60 for a 30fps video = 2.0 seconds
522
+ const startFrame = 60;
523
+ const trimOffsetSeconds = startFrame / frameRate;
604
524
 
605
- // Trim for exactly 150 frames = 5.0 seconds at 30fps
606
- const trimFrames = 150;
607
- const trimLengthSeconds = trimFrames / frameRate;
525
+ // Trim for exactly 150 frames = 5.0 seconds at 30fps
526
+ const trimFrames = 150;
527
+ const trimLengthSeconds = trimFrames / frameRate;
608
528
 
609
- engine.block.setTrimOffset(frameFill, trimOffsetSeconds);
610
- engine.block.setTrimLength(frameFill, trimLengthSeconds);
529
+ engine.block.setTrimOffset(frameFill, trimOffsetSeconds);
530
+ engine.block.setTrimLength(frameFill, trimLengthSeconds);
611
531
 
612
- // eslint-disable-next-line no-console
613
- console.log(
614
- `Frame-accurate trim - Frame rate: ${frameRate}fps (assumed), Start frame: ${startFrame}, Duration: ${trimFrames} frames`
615
- );
532
+ console.log(
533
+ `Frame-accurate trim - Frame rate: ${frameRate}fps, Start: ${startFrame}, Duration: ${trimFrames} frames`
534
+ );
616
535
  ```
617
536
 
618
- We first retrieve the frame rate from the video fill metadata. Then we convert frame numbers to time offsets by dividing by the frame rate. Starting at frame 60 with a 30fps video gives us exactly 2.0 seconds. Trimming for 150 frames provides exactly 5.0 seconds of playback.
537
+ Convert frame numbers to time offsets by dividing by the frame rate. Starting at frame 60 with a 30fps video gives exactly 2.0 seconds. Trimming for 150 frames provides exactly 5.0 seconds of playback.
619
538
 
620
- This technique ensures frame-accurate edits, which is essential for professional video editing workflows. Remember that codec compression may affect true frame accuracy—for critical applications, test with your target codecs to verify precision.
539
+ This technique ensures frame-accurate edits for professional video processing workflows. Keep in mind that codec compression may affect true frame accuracy—test with your target codecs to verify precision.
621
540
 
622
541
  ### Batch Processing Multiple Videos
623
542
 
624
- When working with multiple video clips that need consistent trimming, we can iterate through collections and apply the same trim settings programmatically.
543
+ When working with multiple video clips that need consistent trimming, iterate through collections and apply the same trim settings programmatically.
625
544
 
626
545
  ```typescript highlight-batch-trim-videos
627
- // Pattern: Batch processing multiple video clips
628
- // Create multiple video blocks to demonstrate batch trimming
629
- const batchVideoUris = [
630
- 'https://img.ly/static/ubq_video_samples/bbb.mp4',
631
- 'https://img.ly/static/ubq_video_samples/bbb.mp4',
632
- 'https://img.ly/static/ubq_video_samples/bbb.mp4'
633
- ];
634
-
635
- const batchVideos = [];
636
- for (let i = 0; i < batchVideoUris.length; i++) {
637
- const batchVideo = await engine.block.addVideo(
638
- batchVideoUris[i],
639
- blockWidth,
640
- blockHeight
641
- );
642
- batchVideos.push(batchVideo);
546
+ // Batch process multiple video clips with consistent trimming
547
+ const batchVideoUris = [
548
+ 'https://img.ly/static/ubq_video_samples/bbb.mp4',
549
+ 'https://img.ly/static/ubq_video_samples/bbb.mp4',
550
+ 'https://img.ly/static/ubq_video_samples/bbb.mp4'
551
+ ];
552
+
553
+ const batchVideos = [];
554
+ for (const uri of batchVideoUris) {
555
+ const batchVideo = await engine.block.addVideo(
556
+ uri,
557
+ blockSize.width,
558
+ blockSize.height
559
+ );
560
+ batchVideos.push(batchVideo);
643
561
 
644
- // Get the fill for trim operations
645
- const batchFill = engine.block.getFill(batchVideo);
562
+ // Get the fill for trim operations
563
+ const batchFill = engine.block.getFill(batchVideo);
646
564
 
647
- // Load resource before trimming
648
- await engine.block.forceLoadAVResource(batchFill);
565
+ // Load resource before trimming
566
+ await engine.block.forceLoadAVResource(batchFill);
649
567
 
650
- // Apply consistent trim: first 4 seconds of each video
651
- engine.block.setTrimOffset(batchFill, 0.0);
652
- engine.block.setTrimLength(batchFill, 4.0);
568
+ // Apply consistent trim: first 4 seconds of each video
569
+ engine.block.setTrimOffset(batchFill, 0.0);
570
+ engine.block.setTrimLength(batchFill, 4.0);
653
571
 
654
- // Set consistent duration
655
- engine.block.setDuration(batchVideo, 4.0);
656
- }
572
+ // Set consistent duration
573
+ engine.block.setDuration(batchVideo, 4.0);
574
+ }
657
575
 
658
- // eslint-disable-next-line no-console
659
- console.log('Batch trim - Applied consistent 4s trim to 3 video blocks');
576
+ console.log(
577
+ `Batch trim: Applied consistent 4s trim to ${batchVideos.length} videos`
578
+ );
660
579
  ```
661
580
 
662
- We create multiple video blocks and apply identical trim settings to each one. This ensures consistency across clips—perfect for creating video montages, multi-angle compositions, or any scenario where uniform clip lengths are required.
581
+ We create multiple video blocks and apply identical trim settings to each one. This ensures consistency across clips—useful for creating video montages, multi-angle compositions, or any scenario where uniform clip lengths are required.
582
+
583
+ When batch processing, always load each video's resources before trimming. Check total duration to ensure your trim values don't exceed available media.
663
584
 
664
- When batch processing, always load each video's resources before trimming. Don't assume all videos have the same duration—check total duration to ensure your trim values don't exceed available media.
585
+ ## Exporting Results
586
+
587
+ After applying trim settings, export the processed content to a file. In headless mode, we export a PNG snapshot to verify the trim configuration.
588
+
589
+ ```typescript highlight-export
590
+ // Save the scene as a .scene file for later use or rendering
591
+ // This preserves all trim settings and can be loaded in any CE.SDK environment
592
+ console.log('Saving scene...');
593
+
594
+ const sceneString = await engine.scene.saveToString();
595
+
596
+ // Ensure output directory exists
597
+ if (!existsSync('output')) {
598
+ mkdirSync('output');
599
+ }
600
+
601
+ // Save to file
602
+ writeFileSync('output/trimmed-video.scene', sceneString);
603
+ console.log('Exported to output/trimmed-video.scene');
604
+ ```
605
+
606
+ The export operation renders all video blocks at their current trim positions and saves the result to the file system. For full video encoding and export, use the browser SDK with video export capabilities. Always dispose of the engine instance when processing is complete to free resources.
665
607
 
666
608
  ## Trim vs Duration Interaction
667
609
 
@@ -675,18 +617,18 @@ With looping enabled, exceeding trim length causes the trimmed segment to repeat
675
617
 
676
618
  For predictable behavior, always consider both trim and duration together. Set trim values first to define the source media segment you want. Then set duration to control playback length. If you want the entire trimmed segment to play once, match duration to trim length. For looping content, enable looping before setting a longer duration.
677
619
 
678
- When building UIs, update both values together when users adjust trim handles. This prevents confusion about why a video isn't playing the full trimmed length (duration too short) or why it's holding on the last frame (duration too long without looping).
620
+ When building automated pipelines, always coordinate trim and duration values. This prevents confusion about why a video isn't playing the full trimmed length (duration too short) or why it's holding on the last frame (duration too long without looping).
679
621
 
680
622
  ## Performance Considerations
681
623
 
682
- CE.SDK's video system is optimized for real-time editing, but understanding these performance factors helps you build responsive applications:
624
+ CE.SDK's headless engine is optimized for server-side processing, but keep these factors in mind:
683
625
 
684
- - **Resource loading**: Use `forceLoadAVResource` judiciously. Loading resources has overhead, so batch loads when possible rather than loading repeatedly.
685
- - **Trim adjustments**: Changing trim values is lightweight—CE.SDK updates the playback range without reprocessing the video. You can adjust trim interactively without performance concerns.
686
- - **Mobile devices**: Video decoding is more expensive on mobile. Limit the number of simultaneous video blocks and consider lower resolution sources for editing (high resolution for export).
687
- - **Long videos**: Very long source videos (30+ minutes) may have slower seeking to trim offsets. Consider pre-cutting extremely long videos into shorter segments.
626
+ - **Resource loading**: `forceLoadAVResource` has network and processing overhead. Load resources once, then apply trim operations as needed.
627
+ - **Trim adjustments**: Changing trim values is lightweight—CE.SDK updates the playback range without reprocessing the video.
628
+ - **Memory usage**: Each loaded video consumes memory. For batch processing many videos, consider processing in smaller batches.
629
+ - **Long videos**: Very long source videos (30+ minutes) may have slower seeking to trim offsets.
688
630
 
689
- Test your trim operations on target devices early in development to ensure acceptable performance for your users.
631
+ Test your trim operations with representative workloads to ensure acceptable performance for your use case.
690
632
 
691
633
  ## Troubleshooting
692
634
 
@@ -694,13 +636,13 @@ Test your trim operations on target devices early in development to ensure accep
694
636
 
695
637
  If setting trim values has no visible effect, the most common cause is forgetting to await `forceLoadAVResource`. The resource must be loaded before trim values take effect. Always load resources first.
696
638
 
697
- Another possibility is confusing time offset with trim offset. `setTimeOffset` controls when the block appears in the composition, while `setTrimOffset` controls where in the source media playback starts. Make sure you're using the correct method.
639
+ Another possibility is confusing time offset with trim offset. `setTimeOffset` controls when the block appears in the composition, while `setTrimOffset` controls where in the source media playback starts.
698
640
 
699
641
  ### Incorrect Trim Calculation
700
642
 
701
- If trim values seem offset or produce unexpected results, verify you're calculating based on the source media duration, not the block duration. Use `getTotalDuration` from the fill metadata to understand the available media length.
643
+ If trim values seem offset or produce unexpected results, verify you're calculating based on the source media duration, not the block duration. Use `getAVResourceTotalDuration` to understand the available media length.
702
644
 
703
- Also check that you're not exceeding the total available duration. Trim offset plus trim length should never exceed total duration. CE.SDK may clamp values automatically, but it's better to validate before setting.
645
+ Also check that trim offset plus trim length doesn't exceed total duration. CE.SDK may clamp values automatically, but validating before setting prevents unexpected behavior.
704
646
 
705
647
  ### Playback Beyond Trim Length
706
648
 
@@ -720,6 +662,15 @@ If frame-accurate trimming doesn't land on exact frames, remember that floating-
720
662
 
721
663
  Also understand codec limitations. Variable frame rate videos don't have perfectly uniform frame timing, so true frame accuracy may not be possible. Use constant frame rate sources for critical frame-accurate applications.
722
664
 
665
+ ### Export Issues
666
+
667
+ If export fails or produces unexpected output:
668
+
669
+ - Verify all video resources loaded successfully before export
670
+ - Check that trim values are within valid ranges
671
+ - Ensure sufficient disk space for output files
672
+ - For large videos, monitor memory usage during export
673
+
723
674
  ## Best Practices
724
675
 
725
676
  ### Workflow Recommendations
@@ -728,8 +679,8 @@ Also understand codec limitations. Variable frame rate videos don't have perfect
728
679
  2. Check `supportsTrim()` before applying trim operations
729
680
  3. Coordinate trim length with block duration for predictable behavior
730
681
  4. Use TypeScript for type safety with CE.SDK API
731
- 5. Preview trimmed content before final export
732
- 6. Validate trim values don't exceed total media duration
682
+ 5. Validate trim values don't exceed total media duration
683
+ 6. Dispose of engine instances when processing is complete
733
684
 
734
685
  ### Code Organization
735
686
 
@@ -741,8 +692,9 @@ Also understand codec limitations. Variable frame rate videos don't have perfect
741
692
  ### Performance Optimization
742
693
 
743
694
  - Avoid redundant `forceLoadAVResource` calls—load once, trim multiple times
744
- - Use appropriate preview quality settings during editing to maintain responsiveness
745
- - Test on target devices early to identify performance bottlenecks
695
+ - Process videos in batches to manage memory usage
696
+ - Consider parallel processing for independent trim operations
697
+ - Test on target environments early to identify performance bottlenecks
746
698
 
747
699
  ## API Reference
748
700
 
@@ -763,11 +715,13 @@ Also understand codec limitations. Variable frame rate videos don't have perfect
763
715
  | `setTimeOffset(id, offset)` | Set when block becomes active | `id: DesignBlockId, offset: number` | `void` |
764
716
  | `getTimeOffset(id)` | Get block time offset | `id: DesignBlockId` | `number` |
765
717
 
718
+
719
+
766
720
  ---
767
721
 
768
722
  ## More Resources
769
723
 
770
- - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
724
+ - **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
771
725
  - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
772
- - **[Web Documentation](./js.md)** - Interactive documentation with examples
773
- - **[Support](mailto:support@img.ly)** - Contact IMG.LY support
726
+ - **[Web Documentation](./node.md)** - Interactive documentation with examples
727
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support