@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,453 +1,351 @@
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) > [Open the Editor](./open-the-editor.md) > [Import a Design](./open-the-editor/import-design.md) > [From InDesign](./open-the-editor/import-design/from-indesign.md)
4
4
 
5
5
  ---
6
6
 
7
- Import Adobe InDesign (IDML) files into CE.SDK, converting them into editable scenes while preserving text, shapes, images, and positioning.
7
+ Import Adobe InDesign (IDML) files into CE.SDK using Node.js, converting them into scene archives for distribution or further processing.
8
8
 
9
9
  > **Reading time:** 10 minutes
10
10
  >
11
11
  > **Resources:**
12
12
  >
13
13
  > - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
14
- > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-open-the-editor-import-design-from-indesign-browser)
15
- > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-open-the-editor-import-design-from-indesign-browser)
16
- > - [Live demo](https://img.ly/docs/cesdk/examples/guides-open-the-editor-import-design-from-indesign-browser/)
17
-
18
- ![Import from InDesign](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
19
-
20
- The `@imgly/idml-importer` package converts InDesign IDML files into CE.SDK scene format, preserving design structure for editing or export. This guide focuses on enabling end-users to upload their own IDML files directly in the browser and load them into the CE.SDK editor. For batch conversion of template libraries at build-time, see the [server guide](./open-the-editor/import-design/from-indesign.md).
14
+ >
15
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-open-the-editor-import-design-from-indesign-server-js)
16
+ >
17
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-open-the-editor-import-design-from-indesign-server-js)
21
18
 
22
- ```typescript file=@cesdk_web_examples/guides-open-the-editor-import-design-from-indesign-browser/browser.ts reference-only
23
- import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
19
+ The `@imgly/idml-importer` package converts InDesign IDML files into CE.SDK scene format, preserving design structure for distribution or further processing. This guide focuses on batch converting IDML template files at build-time using Node.js—ideal for migrating existing template libraries or integrating with CI/CD pipelines. For enabling end-user uploads in the browser, see the [browser guide](./open-the-editor/import-design/from-indesign.md).
24
20
 
25
- import {
26
- BlurAssetSource,
27
- ColorPaletteAssetSource,
28
- CropPresetsAssetSource,
29
- DemoAssetSources,
30
- EffectsAssetSource,
31
- FiltersAssetSource,
32
- PagePresetsAssetSource,
33
- StickerAssetSource,
34
- TextAssetSource,
35
- TextComponentAssetSource,
36
- TypefaceAssetSource,
37
- UploadAssetSources,
38
- VectorShapeAssetSource
39
- } from '@cesdk/cesdk-js/plugins';
40
- import { DesignEditorConfig } from './design-editor/plugin';
41
- import type {
42
- AssetQueryData,
43
- AssetResult,
44
- AssetsQueryResult
45
- } from '@cesdk/engine';
21
+ ```typescript file=@cesdk_web_examples/guides-open-the-editor-import-design-from-indesign-server-js/server-js.ts reference-only
22
+ import CreativeEngine from '@cesdk/node';
46
23
  import type { TypefaceResolver } from '@imgly/idml-importer';
47
- import { IDMLParser, addGfontsAssetLibrary } from '@imgly/idml-importer';
48
- import packageJson from './package.json';
24
+ import {
25
+ IDMLParser,
26
+ addGfontsAssetLibrary,
27
+ createPdfEmbeddedImporter
28
+ } from '@imgly/idml-importer';
29
+ import { PDFParser } from '@imgly/pdf-importer';
30
+ import { JSDOM } from 'jsdom';
31
+ import { config } from 'dotenv';
32
+ import { promises as fs } from 'fs';
33
+ import { join, basename } from 'path';
34
+
35
+ // Load environment variables
36
+ config();
37
+
38
+ // Optional: Create a custom font resolver for advanced font mapping
39
+ // Use this when you need to map InDesign fonts to specific alternatives,
40
+ // use enterprise fonts, or implement custom fallback logic
41
+ const customFontResolver: TypefaceResolver = async (fontParams, engine) => {
42
+ const { family, style, weight } = fontParams;
43
+
44
+ // Define font mappings from InDesign fonts to available alternatives
45
+ const fontMappings: Record<string, string> = {
46
+ Arial: 'Open Sans',
47
+ Helvetica: 'Inter',
48
+ 'Helvetica Neue': 'Inter',
49
+ 'Times New Roman': 'Lora',
50
+ Georgia: 'Merriweather'
51
+ };
52
+
53
+ // Use mapped font or original family name
54
+ const targetFamily = fontMappings[family] || family;
55
+
56
+ // Search for the font in available typefaces
57
+ const result = await engine.asset.findAssets('ly.img.typeface', {
58
+ query: targetFamily,
59
+ page: 0,
60
+ perPage: 10
61
+ });
62
+
63
+ if (result.assets.length === 0) {
64
+ console.warn(`Font "${family}" not found, using default fallback`);
65
+ return null; // Let the parser use its default fallback
66
+ }
67
+
68
+ // Get the typeface from the asset payload
69
+ const asset = result.assets[0];
70
+ const typeface = asset.payload?.typeface;
71
+ if (!typeface) return null;
72
+
73
+ // Find the best matching font variant (weight and style)
74
+ const matchingFont =
75
+ typeface.fonts.find(
76
+ (f: { weight?: string; style?: string }) =>
77
+ f.weight === weight && f.style === style
78
+ ) ||
79
+ typeface.fonts.find((f: { weight?: string }) => f.weight === weight) ||
80
+ typeface.fonts[0];
81
+
82
+ return { typeface, font: matchingFont };
83
+ };
49
84
 
50
85
  /**
51
- * CE.SDK Plugin: Import from InDesign Guide
52
- *
53
- * Demonstrates how to import Adobe InDesign IDML files into CE.SDK:
54
- * - Creating a custom asset source for IDML templates
55
- * - Adding a custom nav bar button to upload IDML files
56
- * - Parsing IDML files with the IDML importer
57
- * - Displaying import warnings to users
58
- *
59
- * Note: In-library file uploads for custom asset sources will be supported
60
- * in a future CE.SDK release. This guide demonstrates using a custom nav bar
61
- * button as an alternative approach for user file uploads.
86
+ * Convert a single IDML file to CE.SDK scene formats
87
+ * Outputs both an archive file and a scene string with stable URLs
62
88
  */
63
-
64
- // Asset source ID for IDML library
65
- const IDML_SOURCE_ID = 'idml-files';
66
-
67
- // Base URL for IDML template files
68
- const IDML_BASE_URL =
69
- 'https://staticimgly.com/imgly/docs-reference-files-temp/indesign-template-import';
70
-
71
- // Sample IDML files for the asset library
72
- // These files are hosted on the IMG.LY CDN from the showcases-app public folder
73
- const SAMPLE_IDML_FILES: AssetResult[] = [
74
- {
75
- id: 'idml-socialmedia',
76
- label: 'Social Media',
77
- tags: ['sample', 'idml', 'social', 'marketing'],
78
- meta: {
79
- uri: `${IDML_BASE_URL}/socialmedia.idml`,
80
- thumbUri: `${IDML_BASE_URL}/socialmedia-thumb@2x.png`,
81
- mimeType: 'application/vnd.adobe.indesign-idml-package',
82
- width: 1080,
83
- height: 1080
84
- }
85
- },
86
- {
87
- id: 'idml-poster',
88
- label: 'Poster',
89
- tags: ['sample', 'idml', 'poster', 'print'],
90
- meta: {
91
- uri: `${IDML_BASE_URL}/poster.idml`,
92
- thumbUri: `${IDML_BASE_URL}/poster-thumb@2x.png`,
93
- mimeType: 'application/vnd.adobe.indesign-idml-package',
94
- width: 1240,
95
- height: 1754
96
- }
97
- },
98
- {
99
- id: 'idml-postcard',
100
- label: 'Postcard',
101
- tags: ['sample', 'idml', 'postcard', 'print'],
102
- meta: {
103
- uri: `${IDML_BASE_URL}/postcard.idml`,
104
- thumbUri: `${IDML_BASE_URL}/postcard-thumb@2x.png`,
105
- mimeType: 'application/vnd.adobe.indesign-idml-package',
106
- width: 1050,
107
- height: 600
89
+ async function convertIdml(
90
+ engine: InstanceType<typeof CreativeEngine>,
91
+ idmlPath: string,
92
+ outputDir: string
93
+ ): Promise<{
94
+ archivePath: string;
95
+ sceneStringPath: string;
96
+ pageCount: number;
97
+ }> {
98
+ // Read the IDML file
99
+ const idmlBuffer = await fs.readFile(idmlPath);
100
+
101
+ // Parse the IDML file using JSDOM for XML parsing.
102
+ // Server-side import requires JSDOM since DOMParser is browser-only.
103
+ // The addGfontsAssetLibrary() call enables automatic font matching.
104
+ // Register the PDF embedded-importer adapter explicitly so any
105
+ // <PDF>/.ai content inside the IDML imports as editable CE.SDK blocks
106
+ // via @imgly/pdf-importer (rather than a placeholder image).
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ const parser = await IDMLParser.fromFile(
109
+ engine as any,
110
+ idmlBuffer.buffer,
111
+ (content: string) =>
112
+ new JSDOM(content, {
113
+ contentType: 'text/xml',
114
+ storageQuota: 10000000,
115
+ url: 'http://localhost'
116
+ }).window.document,
117
+ {
118
+ fontResolver: customFontResolver,
119
+ embeddedImporters: [createPdfEmbeddedImporter(PDFParser)]
108
120
  }
121
+ );
122
+ await parser.parse();
123
+
124
+ // Verify pages were imported successfully
125
+ const pages = engine.scene.getPages();
126
+ if (pages.length === 0) {
127
+ throw new Error(`No pages imported from IDML file: ${idmlPath}`);
128
+ }
129
+ console.log(` Imported ${pages.length} page(s)`);
130
+
131
+ // Generate output filename from input filename
132
+ const inputName = basename(idmlPath, '.idml');
133
+ const archivePath = join(outputDir, `${inputName}.cesdk`);
134
+
135
+ // Save as scene archive
136
+ const archive = await engine.scene.saveToArchive();
137
+ const archiveBuffer = Buffer.from(await archive.arrayBuffer());
138
+ await fs.writeFile(archivePath, archiveBuffer);
139
+
140
+ // Optional: Save scene as JSON string with stable URLs instead of archive
141
+ // This is useful when storing scenes in a database or referencing CDN-hosted assets
142
+ // By default, IDML images use transient buffer:// URLs that only work with saveToArchive()
143
+ // To use saveToString(), relocate transient resources to permanent URLs first:
144
+
145
+ // Mock upload function - replace with your actual backend upload logic
146
+ const uploadToBackend = async (data: Uint8Array): Promise<string> => {
147
+ // In production, upload the data to your CDN/storage and return the permanent URL
148
+ // For this example, we write to a temp file and return a file:// URL
149
+ const hash = data.reduce((acc, byte) => (acc + byte) % 1000000, 0);
150
+ const tempPath = join(outputDir, `asset-${hash}.png`);
151
+ await fs.writeFile(tempPath, data);
152
+ return `file://${tempPath}`;
153
+ };
154
+
155
+ const transientResources = engine.editor.findAllTransientResources();
156
+ for (const resource of transientResources) {
157
+ const { URL: bufferUri, size } = resource;
158
+ const data = engine.editor.getBufferData(bufferUri, 0, size);
159
+ const permanentUrl = await uploadToBackend(data);
160
+ engine.editor.relocateResource(bufferUri, permanentUrl);
109
161
  }
110
- ];
111
162
 
112
- class Example implements EditorPlugin {
113
- name = packageJson.name;
163
+ // Now save as scene string - all URLs are permanent
164
+ const sceneString = await engine.scene.saveToString();
165
+ const sceneStringPath = join(outputDir, `${inputName}.scene`);
166
+ await fs.writeFile(sceneStringPath, sceneString);
114
167
 
115
- version = packageJson.version;
168
+ return { archivePath, sceneStringPath, pageCount: pages.length };
169
+ }
116
170
 
117
- async initialize({ cesdk }: EditorPluginContext): Promise<void> {
118
- if (!cesdk) {
119
- throw new Error('CE.SDK instance is required for this plugin');
171
+ /**
172
+ * Batch convert multiple IDML files to CE.SDK scene formats
173
+ * Processes files sequentially, continuing even if individual files fail
174
+ */
175
+ async function batchConvertIdmls(
176
+ idmlPaths: string[],
177
+ outputDir: string
178
+ ): Promise<void> {
179
+ console.log(`Starting batch conversion of ${idmlPaths.length} IDML files...`);
180
+
181
+ // Ensure output directory exists
182
+ await fs.mkdir(outputDir, { recursive: true });
183
+
184
+ // Initialize engine once for all conversions
185
+ const engine = await CreativeEngine.init({
186
+ baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
187
+ // license: process.env.CESDK_LICENSE,
188
+ });
189
+
190
+ try {
191
+ // Configure Google Fonts for text element support
192
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
193
+ await addGfontsAssetLibrary(engine as any);
194
+
195
+ let successCount = 0;
196
+ let failCount = 0;
197
+
198
+ // Process each IDML file
199
+ for (const idmlPath of idmlPaths) {
200
+ const fileName = basename(idmlPath);
201
+ console.log(`\nProcessing: ${fileName}`);
202
+
203
+ try {
204
+ const { archivePath, sceneStringPath } = await convertIdml(
205
+ engine,
206
+ idmlPath,
207
+ outputDir
208
+ );
209
+
210
+ console.log(` Archive: ${archivePath}`);
211
+ console.log(` Scene: ${sceneStringPath}`);
212
+ successCount++;
213
+ } catch (error) {
214
+ console.error(` Failed: ${(error as Error).message}`);
215
+ failCount++;
216
+ }
120
217
  }
121
218
 
122
- const engine = cesdk.engine;
123
-
124
- // Initialize CE.SDK with Google Fonts support for IDML text matching
125
- await cesdk.addPlugin(new DesignEditorConfig());
126
-
127
- // Add asset source plugins
128
- await cesdk.addPlugin(new BlurAssetSource());
129
- await cesdk.addPlugin(new ColorPaletteAssetSource());
130
- await cesdk.addPlugin(new CropPresetsAssetSource());
131
- await cesdk.addPlugin(
132
- new UploadAssetSources({ include: ['ly.img.image.upload'] })
133
- );
134
- await cesdk.addPlugin(
135
- new DemoAssetSources({
136
- include: [
137
- 'ly.img.templates.blank.*',
138
- 'ly.img.templates.presentation.*',
139
- 'ly.img.templates.print.*',
140
- 'ly.img.templates.social.*',
141
- 'ly.img.image.*'
142
- ]
143
- })
144
- );
145
- await cesdk.addPlugin(new EffectsAssetSource());
146
- await cesdk.addPlugin(new FiltersAssetSource());
147
- await cesdk.addPlugin(new PagePresetsAssetSource());
148
- await cesdk.addPlugin(new StickerAssetSource());
149
- await cesdk.addPlugin(new TextAssetSource());
150
- await cesdk.addPlugin(new TextComponentAssetSource());
151
- await cesdk.addPlugin(new TypefaceAssetSource());
152
- await cesdk.addPlugin(new VectorShapeAssetSource());
153
-
154
- // Register Google Fonts before parsing IDML files for best font matching
155
- await addGfontsAssetLibrary(engine);
156
-
157
- // Optional: Create a custom font resolver for advanced font mapping
158
- // Use this when you need to map InDesign fonts to specific alternatives,
159
- // use enterprise fonts, or implement custom fallback logic
160
- const customFontResolver: TypefaceResolver = async (fontParams, eng) => {
161
- const { family, style, weight } = fontParams;
162
-
163
- // Define font mappings from InDesign fonts to available alternatives
164
- const fontMappings: Record<string, string> = {
165
- Arial: 'Open Sans',
166
- Helvetica: 'Inter',
167
- 'Helvetica Neue': 'Inter',
168
- 'Times New Roman': 'Lora',
169
- Georgia: 'Merriweather'
170
- };
171
-
172
- // Use mapped font or original family name
173
- const targetFamily = fontMappings[family] || family;
174
-
175
- // Search for the font in available typefaces
176
- const result = await eng.asset.findAssets('ly.img.typeface', {
177
- query: targetFamily,
178
- page: 0,
179
- perPage: 10
180
- });
181
-
182
- if (result.assets.length === 0) {
183
- console.warn(`Font "${family}" not found, using default fallback`);
184
- return null; // Let the parser use its default fallback
185
- }
219
+ console.log(`\nBatch conversion complete:`);
220
+ console.log(` Success: ${successCount}/${idmlPaths.length}`);
221
+ console.log(` Failed: ${failCount}/${idmlPaths.length}`);
222
+ } finally {
223
+ // Always dispose engine to free resources
224
+ engine.dispose();
225
+ }
226
+ }
186
227
 
187
- // Get the typeface from the asset payload
188
- const asset = result.assets[0];
189
- const typeface = asset.payload?.typeface;
190
- if (!typeface) return null;
191
-
192
- // Find the best matching font variant (weight and style)
193
- const matchingFont =
194
- typeface.fonts.find(
195
- (f: { weight?: string; style?: string }) =>
196
- f.weight === weight && f.style === style
197
- ) ||
198
- typeface.fonts.find((f: { weight?: string }) => f.weight === weight) ||
199
- typeface.fonts[0];
200
-
201
- return { typeface, font: matchingFont };
228
+ /**
229
+ * Validate conversion results by loading the archive and checking scene structure
230
+ */
231
+ export async function validateArchive(archivePath: string): Promise<{
232
+ valid: boolean;
233
+ pageCount: number;
234
+ blockCount: number;
235
+ }> {
236
+ const engine = await CreativeEngine.init({
237
+ // license: process.env.CESDK_LICENSE,
238
+ });
239
+
240
+ try {
241
+ // Load the archive
242
+ const archiveBuffer = await fs.readFile(archivePath);
243
+ const archiveBlob = new Blob([archiveBuffer]);
244
+ const archiveUrl = URL.createObjectURL(archiveBlob);
245
+
246
+ await engine.scene.loadFromArchiveURL(archiveUrl);
247
+
248
+ // Get scene information
249
+ const pages = engine.block.findByType('page');
250
+ const allBlocks = engine.block.findAll();
251
+
252
+ return {
253
+ valid: pages.length > 0,
254
+ pageCount: pages.length,
255
+ blockCount: allBlocks.length
202
256
  };
257
+ } finally {
258
+ engine.dispose();
259
+ }
260
+ }
203
261
 
204
- // Create an initial design scene
205
- await cesdk.actions.run('scene.create', {
206
- page: {
207
- sourceId: 'ly.img.page.presets',
208
- assetId: 'ly.img.page.presets.print.iso.a6.landscape'
209
- }
210
- });
211
-
212
- // Helper function to import IDML from URL or buffer
213
- const importIdml = async (
214
- source: string | ArrayBuffer,
215
- sourceName: string
216
- ) => {
217
- console.log(`Processing IDML: ${sourceName}`);
218
-
219
- // Get buffer from URL or use directly
220
- let buffer: ArrayBuffer;
221
- if (typeof source === 'string') {
222
- const response = await fetch(source);
223
- buffer = await response.arrayBuffer();
224
- } else {
225
- buffer = source;
226
- }
227
-
228
- // Parse the IDML file using the IDML importer
229
- // The addGfontsAssetLibrary() call above enables automatic font matching
230
- // For custom font mapping, pass fontResolver as 4th parameter (see customFontResolver example)
231
- const parser = await IDMLParser.fromFile(
232
- engine,
233
- buffer,
234
- (content: string) =>
235
- new DOMParser().parseFromString(content, 'text/xml'),
236
- customFontResolver
237
- );
238
- await parser.parse();
239
-
240
- // Verify pages were imported successfully
241
- const pages = engine.scene.getPages();
242
- if (pages.length === 0) {
243
- console.error('No pages imported from IDML');
244
- throw new Error('No pages could be imported from the IDML file');
245
- }
246
- console.log(`Successfully imported ${pages.length} page(s)`);
247
-
248
- // Save the imported scene as an archive for editor loading
249
- const sceneArchive = await engine.scene.saveToArchive();
250
- const archiveUrl = URL.createObjectURL(sceneArchive);
251
-
252
- // Optional: Save scene as JSON string with stable URLs instead of archive
253
- // This is useful when storing scenes in a database or referencing CDN-hosted assets
254
- // By default, IDML images use transient buffer:// URLs that only work with saveToArchive()
255
- // To use saveToString(), relocate transient resources to permanent URLs first:
256
-
257
- // Mock upload function - replace with your actual backend upload logic
258
- const uploadToBackend = async (data: Uint8Array): Promise<string> => {
259
- // In production, upload the data to your CDN/storage and return the permanent URL
260
- // For this example, we create a blob URL to demonstrate the workflow
261
- const blob = new Blob([new Uint8Array(data)], { type: 'image/png' });
262
- return URL.createObjectURL(blob);
263
- };
264
-
265
- const transientResources = engine.editor.findAllTransientResources();
266
- for (const resource of transientResources) {
267
- const { URL: bufferUri, size } = resource;
268
- const data = engine.editor.getBufferData(bufferUri, 0, size);
269
- const permanentUrl = await uploadToBackend(data);
270
- engine.editor.relocateResource(bufferUri, permanentUrl);
271
- }
272
- const sceneString = await engine.scene.saveToString();
273
- console.log(
274
- `Scene persisted with stable URLs (${sceneString.length} bytes)`
275
- );
262
+ /**
263
+ * Find all IDML files in a directory and convert them
264
+ */
265
+ export async function processDirectory(
266
+ inputDir: string,
267
+ outputDir: string
268
+ ): Promise<void> {
269
+ // Find all IDML files in directory
270
+ const files = await fs.readdir(inputDir);
271
+ const idmlFiles = files
272
+ .filter((f) => f.toLowerCase().endsWith('.idml'))
273
+ .map((f) => join(inputDir, f));
274
+
275
+ if (idmlFiles.length === 0) {
276
+ console.log(`No IDML files found in ${inputDir}`);
277
+ return;
278
+ }
276
279
 
277
- // Load the archived scene into the editor
278
- await cesdk.engine.scene.loadFromArchiveURL(archiveUrl);
280
+ await batchConvertIdmls(idmlFiles, outputDir);
281
+ }
279
282
 
280
- // Verify scene loaded correctly
281
- const loadedPages = engine.scene.getPages();
282
- console.log(
283
- `IDML imported successfully with ${loadedPages.length} page(s)`
284
- );
283
+ /**
284
+ * Main entry point - demonstrates batch IDML conversion workflow
285
+ */
286
+ async function main(): Promise<void> {
287
+ console.log('IDML to CE.SDK Batch Converter');
288
+ console.log('==============================\n');
289
+
290
+ // Example: Convert a single IDML file
291
+ // In production, you would provide actual IDML files
292
+ const engine = await CreativeEngine.init({
293
+ // license: process.env.CESDK_LICENSE,
294
+ });
295
+
296
+ try {
297
+ // Configure Google Fonts for text element support
298
+ await addGfontsAssetLibrary(engine as any);
299
+
300
+ // Create a sample scene to demonstrate the export format
301
+ // In production, this would be replaced by actual IDML conversion
302
+ await engine.scene.create();
303
+ const page = engine.block.create('page');
304
+ engine.block.setWidth(page, 800);
305
+ engine.block.setHeight(page, 600);
306
+ engine.block.appendChild(engine.scene.get()!, page);
307
+
308
+ // Save as archive
309
+ await fs.mkdir('./output', { recursive: true });
310
+ const archive = await engine.scene.saveToArchive();
311
+ const archiveBuffer = Buffer.from(await archive.arrayBuffer());
312
+ await fs.writeFile('./output/sample.cesdk', archiveBuffer);
313
+
314
+ console.log('Sample archive created: ./output/sample.cesdk');
315
+ console.log('\nTo convert actual IDML files:');
316
+ console.log('1. Place IDML files in an input directory');
317
+ console.log('2. Call: await processDirectory("./input", "./output")');
318
+ } finally {
319
+ engine.dispose();
320
+ }
321
+ }
285
322
 
286
- // Zoom to fit the imported page
287
- await cesdk.actions.run('zoom.toPage', { page: 'first', autoFit: true });
323
+ // Run the example
324
+ main().catch(console.error);
325
+ ```
288
326
 
289
- // Clean up object URL
290
- URL.revokeObjectURL(archiveUrl);
291
- };
327
+ This guide covers installation, setting up a conversion script, parsing IDML files, saving scene archives, batch processing multiple files, and understanding the current limitations.
292
328
 
293
- // Add custom asset source for IDML templates
294
- engine.asset.addSource({
295
- id: IDML_SOURCE_ID,
296
-
297
- async findAssets(
298
- queryData: AssetQueryData
299
- ): Promise<AssetsQueryResult<AssetResult>> {
300
- let assets = SAMPLE_IDML_FILES;
301
-
302
- // Filter by query if provided
303
- if (queryData.query) {
304
- const query = queryData.query.toLowerCase();
305
- assets = assets.filter(
306
- (a) =>
307
- a.label?.toLowerCase().includes(query) ||
308
- a.tags?.some((t) => t.toLowerCase().includes(query))
309
- );
310
- }
311
-
312
- return {
313
- assets,
314
- total: assets.length,
315
- currentPage: queryData.page,
316
- nextPage: undefined
317
- };
318
- },
319
-
320
- async applyAsset(asset: AssetResult): Promise<number | undefined> {
321
- if (!asset.meta?.uri) {
322
- console.error('Asset has no URI');
323
- return undefined;
324
- }
325
-
326
- await importIdml(asset.meta.uri as string, asset.label || asset.id);
327
- return undefined; // Scene replaced, no new block created
328
- }
329
- });
329
+ ## Installation
330
330
 
331
- // Set labels for the asset source and library entry
332
- cesdk.i18n.setTranslations({
333
- en: {
334
- [`libraries.${IDML_SOURCE_ID}.label`]: 'IDML Files',
335
- 'libraries.idml-library-entry.label': 'InDesign Templates'
336
- }
337
- });
338
-
339
- // Configure the asset library UI to show the IDML source
340
- cesdk.ui.addAssetLibraryEntry({
341
- id: 'idml-library-entry',
342
- sourceIds: [IDML_SOURCE_ID],
343
- previewLength: 3,
344
- previewBackgroundType: 'contain',
345
- gridBackgroundType: 'contain',
346
- gridColumns: 2
347
- });
348
-
349
- // Add IDML library to the dock and remove the default Templates entry
350
- const existingDockOrder = cesdk.ui.getComponentOrder({ in: 'ly.img.dock' });
351
- const filteredDockOrder = existingDockOrder.filter(
352
- (entry) => entry.key !== 'ly.img.templates'
353
- );
354
- cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
355
- {
356
- id: 'ly.img.assetLibrary.dock',
357
- key: 'idml-library-dock',
358
- label: 'InDesign Templates',
359
- icon: '@imgly/Template',
360
- entries: ['idml-library-entry']
361
- },
362
- ...filteredDockOrder
363
- ]);
364
-
365
- // Add a custom nav bar button for uploading and importing IDML files
366
- // Uses cesdk.utils.loadFile() to open the browser's file picker
367
- cesdk.ui.registerComponent('idml.uploadButton', ({ builder }) => {
368
- builder.Button('idml.uploadButton', {
369
- label: 'Load IDML File',
370
- icon: '@imgly/Upload',
371
- variant: 'regular',
372
- color: 'accent',
373
- onClick: async () => {
374
- const buffer = await cesdk.utils.loadFile({
375
- accept: '.idml,application/vnd.adobe.indesign-idml-package',
376
- returnType: 'arrayBuffer'
377
- });
378
- await importIdml(buffer, 'uploaded.idml');
379
- }
380
- });
381
- });
382
-
383
- // Add the upload button to the right side of the navigation bar
384
- cesdk.ui.setComponentOrder({ in: 'ly.img.navigation.bar' }, [
385
- ...cesdk.ui.getComponentOrder({ in: 'ly.img.navigation.bar' }),
386
- 'idml.uploadButton'
387
- ]);
388
-
389
- // Open the IDML Templates library by default
390
- cesdk.ui.openPanel('//ly.img.panel/assetLibrary', {
391
- payload: {
392
- entries: ['idml-library-entry'],
393
- title: 'InDesign Templates'
394
- }
395
- });
396
-
397
- // Override the importScene action to support IDML files alongside standard formats
398
- // This integrates IDML import with the default import workflow
399
- cesdk.actions.register(
400
- 'importScene',
401
- async ({
402
- format = 'scene'
403
- }: {
404
- format?: 'scene' | 'archive' | 'idml';
405
- }) => {
406
- if (format === 'idml') {
407
- // Handle IDML import using cesdk.utils.loadFile
408
- const buffer = await cesdk.utils.loadFile({
409
- accept: '.idml,application/vnd.adobe.indesign-idml-package',
410
- returnType: 'arrayBuffer'
411
- });
412
- await importIdml(buffer, 'imported.idml');
413
- } else if (format === 'scene') {
414
- // Handle standard .scene files
415
- const scene = await cesdk.utils.loadFile({
416
- accept: '.scene',
417
- returnType: 'text'
418
- });
419
- await cesdk.engine.scene.loadFromString(scene);
420
- await cesdk.actions.run('zoom.toPage', { page: 'first' });
421
- } else {
422
- // Handle archive files (.zip)
423
- const blobURL = await cesdk.utils.loadFile({
424
- accept: '.zip',
425
- returnType: 'objectURL'
426
- });
427
- try {
428
- await cesdk.engine.scene.loadFromArchiveURL(blobURL);
429
- } finally {
430
- URL.revokeObjectURL(blobURL);
431
- }
432
- await cesdk.actions.run('zoom.toPage', { page: 'first' });
433
- }
434
- }
435
- );
436
- }
437
- }
331
+ Install the `@imgly/idml-importer` package alongside the Node.js SDK. Server-side conversion requires `jsdom` for XML parsing:
438
332
 
439
- export default Example;
333
+ ```bash
334
+ npm install @imgly/idml-importer @cesdk/node@$UBQ_VERSION$ jsdom
335
+ npm install --save-dev @types/jsdom
440
336
  ```
441
337
 
442
- ## Installation
338
+ The `jsdom` package provides the XML parsing functionality that `DOMParser` provides in browsers.
443
339
 
444
- Install the `@imgly/idml-importer` package alongside CE.SDK:
340
+ ### Optional: Embedded PDF / Adobe Illustrator support
341
+
342
+ IDML files exported from InDesign can carry embedded PDF or Adobe Illustrator (`.ai`) content. To import these as editable CE.SDK blocks rather than placeholder images, also install `@imgly/pdf-importer` and register its adapter via the `embeddedImporters` option on `IDMLParser.fromFile`:
445
343
 
446
344
  ```bash
447
- npm install @imgly/idml-importer @cesdk/cesdk-js@$UBQ_VERSION$
345
+ npm install @imgly/pdf-importer
448
346
  ```
449
347
 
450
- The browser environment uses the native `DOMParser` API for XML parsing, which requires no additional dependencies.
348
+ The IDML importer does not import `@imgly/pdf-importer` itself registering the adapter is opt-in, so consumers who don't need embedded-PDF support pay no install cost.
451
349
 
452
350
  ## Supported Elements
453
351
 
@@ -463,72 +361,62 @@ The IDML importer preserves the following InDesign elements:
463
361
 
464
362
  ## Setting Up Font Matching
465
363
 
466
- Text elements in IDML files reference fonts that may not be available in CE.SDK. Use `addGfontsAssetLibrary()` to register Google Fonts as a font source before parsing:
364
+ Text elements in IDML files reference fonts that may not be available in CE.SDK. Use `addGfontsAssetLibrary()` from the `@imgly/idml-importer` package to register Google Fonts as a font source before parsing:
467
365
 
468
366
  ```typescript highlight=highlight-setup
469
- // Initialize CE.SDK with Google Fonts support for IDML text matching
470
- await cesdk.addPlugin(new DesignEditorConfig());
471
-
472
- // Add asset source plugins
473
- await cesdk.addPlugin(new BlurAssetSource());
474
- await cesdk.addPlugin(new ColorPaletteAssetSource());
475
- await cesdk.addPlugin(new CropPresetsAssetSource());
476
- await cesdk.addPlugin(
477
- new UploadAssetSources({ include: ['ly.img.image.upload'] })
478
- );
479
- await cesdk.addPlugin(
480
- new DemoAssetSources({
481
- include: [
482
- 'ly.img.templates.blank.*',
483
- 'ly.img.templates.presentation.*',
484
- 'ly.img.templates.print.*',
485
- 'ly.img.templates.social.*',
486
- 'ly.img.image.*'
487
- ]
488
- })
489
- );
490
- await cesdk.addPlugin(new EffectsAssetSource());
491
- await cesdk.addPlugin(new FiltersAssetSource());
492
- await cesdk.addPlugin(new PagePresetsAssetSource());
493
- await cesdk.addPlugin(new StickerAssetSource());
494
- await cesdk.addPlugin(new TextAssetSource());
495
- await cesdk.addPlugin(new TextComponentAssetSource());
496
- await cesdk.addPlugin(new TypefaceAssetSource());
497
- await cesdk.addPlugin(new VectorShapeAssetSource());
498
-
499
- // Register Google Fonts before parsing IDML files for best font matching
500
- await addGfontsAssetLibrary(engine);
367
+ import CreativeEngine from '@cesdk/node';
368
+ import type { TypefaceResolver } from '@imgly/idml-importer';
369
+ import {
370
+ IDMLParser,
371
+ addGfontsAssetLibrary,
372
+ createPdfEmbeddedImporter
373
+ } from '@imgly/idml-importer';
374
+ import { PDFParser } from '@imgly/pdf-importer';
375
+ import { JSDOM } from 'jsdom';
376
+ import { config } from 'dotenv';
377
+ import { promises as fs } from 'fs';
378
+ import { join, basename } from 'path';
379
+
380
+ // Load environment variables
381
+ config();
501
382
  ```
502
383
 
503
384
  Call this function on the engine before parsing IDML files. The importer attempts to match fonts from the IDML with available Google Fonts. For fonts not found, the importer uses a fallback font.
504
385
 
505
386
  ## Parsing the IDML File
506
387
 
507
- Use `IDMLParser.fromFile()` with the browser's native `DOMParser` for XML parsing. After parsing, the scene is immediately available in the engine:
388
+ Use `IDMLParser.fromFile()` with `jsdom` for XML parsing. Unlike the browser's native `DOMParser`, server-side parsing requires explicit JSDOM configuration:
508
389
 
509
390
  ```typescript highlight=highlight-parse-idml
510
- // Get buffer from URL or use directly
511
- let buffer: ArrayBuffer;
512
- if (typeof source === 'string') {
513
- const response = await fetch(source);
514
- buffer = await response.arrayBuffer();
515
- } else {
516
- buffer = source;
517
- }
518
-
519
- // Parse the IDML file using the IDML importer
520
- // The addGfontsAssetLibrary() call above enables automatic font matching
521
- // For custom font mapping, pass fontResolver as 4th parameter (see customFontResolver example)
391
+ // Parse the IDML file using JSDOM for XML parsing.
392
+ // Server-side import requires JSDOM since DOMParser is browser-only.
393
+ // The addGfontsAssetLibrary() call enables automatic font matching.
394
+ // Register the PDF embedded-importer adapter explicitly so any
395
+ // <PDF>/.ai content inside the IDML imports as editable CE.SDK blocks
396
+ // via @imgly/pdf-importer (rather than a placeholder image).
397
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
522
398
  const parser = await IDMLParser.fromFile(
523
- engine,
524
- buffer,
525
- (content: string) => new DOMParser().parseFromString(content, 'text/xml'),
526
- customFontResolver
399
+ engine as any,
400
+ idmlBuffer.buffer,
401
+ (content: string) =>
402
+ new JSDOM(content, {
403
+ contentType: 'text/xml',
404
+ storageQuota: 10000000,
405
+ url: 'http://localhost'
406
+ }).window.document,
407
+ {
408
+ fontResolver: customFontResolver,
409
+ embeddedImporters: [createPdfEmbeddedImporter(PDFParser)]
410
+ }
527
411
  );
528
412
  await parser.parse();
529
413
  ```
530
414
 
531
- The parser creates a new scene in the engine with all supported IDML elements converted to CE.SDK blocks.
415
+ The JSDOM options ensure proper XML handling:
416
+
417
+ - `contentType: 'text/xml'` - Parses as XML rather than HTML
418
+ - `storageQuota` - Prevents quota errors with larger documents
419
+ - `url` - Required by JSDOM for relative resource resolution
532
420
 
533
421
  ## Checking Import Results
534
422
 
@@ -538,25 +426,125 @@ Verify the import succeeded by checking the page count. If no pages were importe
538
426
  // Verify pages were imported successfully
539
427
  const pages = engine.scene.getPages();
540
428
  if (pages.length === 0) {
541
- console.error('No pages imported from IDML');
542
- throw new Error('No pages could be imported from the IDML file');
429
+ throw new Error(`No pages imported from IDML file: ${idmlPath}`);
543
430
  }
544
- console.log(`Successfully imported ${pages.length} page(s)`);
431
+ console.log(` Imported ${pages.length} page(s)`);
545
432
  ```
546
433
 
547
- Log warnings about any unsupported features to help users understand what couldn't be converted.
434
+ Log any warnings to identify IDML features that didn't convert correctly.
435
+
436
+ ## Converting a Single IDML File
437
+
438
+ Read an IDML file, parse it using the IDML importer, and save the resulting scene as an archive:
439
+
440
+ ```typescript highlight=highlight-convert-single
441
+ /**
442
+ * Convert a single IDML file to CE.SDK scene formats
443
+ * Outputs both an archive file and a scene string with stable URLs
444
+ */
445
+ async function convertIdml(
446
+ engine: InstanceType<typeof CreativeEngine>,
447
+ idmlPath: string,
448
+ outputDir: string
449
+ ): Promise<{
450
+ archivePath: string;
451
+ sceneStringPath: string;
452
+ pageCount: number;
453
+ }> {
454
+ // Read the IDML file
455
+ const idmlBuffer = await fs.readFile(idmlPath);
456
+
457
+ // Parse the IDML file using JSDOM for XML parsing.
458
+ // Server-side import requires JSDOM since DOMParser is browser-only.
459
+ // The addGfontsAssetLibrary() call enables automatic font matching.
460
+ // Register the PDF embedded-importer adapter explicitly so any
461
+ // <PDF>/.ai content inside the IDML imports as editable CE.SDK blocks
462
+ // via @imgly/pdf-importer (rather than a placeholder image).
463
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
464
+ const parser = await IDMLParser.fromFile(
465
+ engine as any,
466
+ idmlBuffer.buffer,
467
+ (content: string) =>
468
+ new JSDOM(content, {
469
+ contentType: 'text/xml',
470
+ storageQuota: 10000000,
471
+ url: 'http://localhost'
472
+ }).window.document,
473
+ {
474
+ fontResolver: customFontResolver,
475
+ embeddedImporters: [createPdfEmbeddedImporter(PDFParser)]
476
+ }
477
+ );
478
+ await parser.parse();
479
+
480
+ // Verify pages were imported successfully
481
+ const pages = engine.scene.getPages();
482
+ if (pages.length === 0) {
483
+ throw new Error(`No pages imported from IDML file: ${idmlPath}`);
484
+ }
485
+ console.log(` Imported ${pages.length} page(s)`);
486
+
487
+ // Generate output filename from input filename
488
+ const inputName = basename(idmlPath, '.idml');
489
+ const archivePath = join(outputDir, `${inputName}.cesdk`);
490
+
491
+ // Save as scene archive
492
+ const archive = await engine.scene.saveToArchive();
493
+ const archiveBuffer = Buffer.from(await archive.arrayBuffer());
494
+ await fs.writeFile(archivePath, archiveBuffer);
495
+
496
+ // Optional: Save scene as JSON string with stable URLs instead of archive
497
+ // This is useful when storing scenes in a database or referencing CDN-hosted assets
498
+ // By default, IDML images use transient buffer:// URLs that only work with saveToArchive()
499
+ // To use saveToString(), relocate transient resources to permanent URLs first:
500
+
501
+ // Mock upload function - replace with your actual backend upload logic
502
+ const uploadToBackend = async (data: Uint8Array): Promise<string> => {
503
+ // In production, upload the data to your CDN/storage and return the permanent URL
504
+ // For this example, we write to a temp file and return a file:// URL
505
+ const hash = data.reduce((acc, byte) => (acc + byte) % 1000000, 0);
506
+ const tempPath = join(outputDir, `asset-${hash}.png`);
507
+ await fs.writeFile(tempPath, data);
508
+ return `file://${tempPath}`;
509
+ };
510
+
511
+ const transientResources = engine.editor.findAllTransientResources();
512
+ for (const resource of transientResources) {
513
+ const { URL: bufferUri, size } = resource;
514
+ const data = engine.editor.getBufferData(bufferUri, 0, size);
515
+ const permanentUrl = await uploadToBackend(data);
516
+ engine.editor.relocateResource(bufferUri, permanentUrl);
517
+ }
518
+
519
+ // Now save as scene string - all URLs are permanent
520
+ const sceneString = await engine.scene.saveToString();
521
+ const sceneStringPath = join(outputDir, `${inputName}.scene`);
522
+ await fs.writeFile(sceneStringPath, sceneString);
523
+
524
+ return { archivePath, sceneStringPath, pageCount: pages.length };
525
+ }
526
+ ```
527
+
528
+ The `convertIdmlToArchive` function:
529
+
530
+ 1. Reads the IDML buffer
531
+ 2. Creates a parser instance with JSDOM for XML parsing
532
+ 3. Parses the IDML, creating a scene in the engine
533
+ 4. Verifies pages were imported successfully
534
+ 5. Saves the scene as a `.cesdk` archive file
548
535
 
549
536
  ## Saving as Archive
550
537
 
551
- After parsing, save the imported scene as an archive. This creates a portable bundle containing the scene and all its assets:
538
+ After parsing, save the imported scene as an archive. Archives bundle the scene with all referenced assets, creating a portable file that can be distributed or loaded later:
552
539
 
553
540
  ```typescript highlight=highlight-save-archive
554
- // Save the imported scene as an archive for editor loading
555
- const sceneArchive = await engine.scene.saveToArchive();
556
- const archiveUrl = URL.createObjectURL(sceneArchive);
541
+ // Save as scene archive
542
+ const archive = await engine.scene.saveToArchive();
543
+ const archiveBuffer = Buffer.from(await archive.arrayBuffer());
544
+ await fs.writeFile(archivePath, archiveBuffer);
557
545
  ```
558
546
 
559
- Archives can be stored, shared, or loaded later using `loadFromArchiveURL()`.
547
+ Write the archive to the filesystem as a `.cesdk` file for later use with `loadFromArchiveURL()`.
560
548
 
561
549
  ## Saving Scenes with Stable URLs
562
550
 
@@ -574,35 +562,40 @@ However, if you want to save scenes as JSON strings (`engine.scene.saveToString(
574
562
  After parsing the IDML file, use CE.SDK's native APIs to find and relocate all transient resources:
575
563
 
576
564
  ```typescript highlight=highlight-stable-urls
577
- // Optional: Save scene as JSON string with stable URLs instead of archive
578
- // This is useful when storing scenes in a database or referencing CDN-hosted assets
579
- // By default, IDML images use transient buffer:// URLs that only work with saveToArchive()
580
- // To use saveToString(), relocate transient resources to permanent URLs first:
581
-
582
- // Mock upload function - replace with your actual backend upload logic
583
- const uploadToBackend = async (data: Uint8Array): Promise<string> => {
584
- // In production, upload the data to your CDN/storage and return the permanent URL
585
- // For this example, we create a blob URL to demonstrate the workflow
586
- const blob = new Blob([new Uint8Array(data)], { type: 'image/png' });
587
- return URL.createObjectURL(blob);
588
- };
565
+ // Optional: Save scene as JSON string with stable URLs instead of archive
566
+ // This is useful when storing scenes in a database or referencing CDN-hosted assets
567
+ // By default, IDML images use transient buffer:// URLs that only work with saveToArchive()
568
+ // To use saveToString(), relocate transient resources to permanent URLs first:
569
+
570
+ // Mock upload function - replace with your actual backend upload logic
571
+ const uploadToBackend = async (data: Uint8Array): Promise<string> => {
572
+ // In production, upload the data to your CDN/storage and return the permanent URL
573
+ // For this example, we write to a temp file and return a file:// URL
574
+ const hash = data.reduce((acc, byte) => (acc + byte) % 1000000, 0);
575
+ const tempPath = join(outputDir, `asset-${hash}.png`);
576
+ await fs.writeFile(tempPath, data);
577
+ return `file://${tempPath}`;
578
+ };
579
+
580
+ const transientResources = engine.editor.findAllTransientResources();
581
+ for (const resource of transientResources) {
582
+ const { URL: bufferUri, size } = resource;
583
+ const data = engine.editor.getBufferData(bufferUri, 0, size);
584
+ const permanentUrl = await uploadToBackend(data);
585
+ engine.editor.relocateResource(bufferUri, permanentUrl);
586
+ }
589
587
 
590
- const transientResources = engine.editor.findAllTransientResources();
591
- for (const resource of transientResources) {
592
- const { URL: bufferUri, size } = resource;
593
- const data = engine.editor.getBufferData(bufferUri, 0, size);
594
- const permanentUrl = await uploadToBackend(data);
595
- engine.editor.relocateResource(bufferUri, permanentUrl);
596
- }
597
- const sceneString = await engine.scene.saveToString();
598
- console.log(`Scene persisted with stable URLs (${sceneString.length} bytes)`);
588
+ // Now save as scene string - all URLs are permanent
589
+ const sceneString = await engine.scene.saveToString();
590
+ const sceneStringPath = join(outputDir, `${inputName}.scene`);
591
+ await fs.writeFile(sceneStringPath, sceneString);
599
592
  ```
600
593
 
601
594
  The relocation workflow:
602
595
 
603
596
  1. Find all transient resources using `engine.editor.findAllTransientResources()`
604
597
  2. Extract binary data for each resource using `engine.editor.getBufferData()`
605
- 3. Upload the data to your backend or CDN
598
+ 3. Upload the data to your storage service (S3, GCS, CDN, etc.)
606
599
  4. Relocate the resource URL using `engine.editor.relocateResource()`
607
600
  5. Save to string with `engine.scene.saveToString()` - all URLs will now be permanent
608
601
 
@@ -610,33 +603,242 @@ The relocation workflow:
610
603
 
611
604
  When using the default font resolver with Google Fonts, the resulting scene string will contain Google CDN URLs for fonts. If you need fonts hosted on your own infrastructure, configure a custom font resolver instead of using the default Google Fonts integration.
612
605
 
613
- ## Loading into the Editor
606
+ ## Batch Converting Multiple IDML Files
607
+
608
+ Process multiple IDML files sequentially, continuing even if individual files fail:
609
+
610
+ ```typescript highlight=highlight-batch-convert
611
+ /**
612
+ * Batch convert multiple IDML files to CE.SDK scene formats
613
+ * Processes files sequentially, continuing even if individual files fail
614
+ */
615
+ async function batchConvertIdmls(
616
+ idmlPaths: string[],
617
+ outputDir: string
618
+ ): Promise<void> {
619
+ console.log(`Starting batch conversion of ${idmlPaths.length} IDML files...`);
620
+
621
+ // Ensure output directory exists
622
+ await fs.mkdir(outputDir, { recursive: true });
623
+
624
+ // Initialize engine once for all conversions
625
+ const engine = await CreativeEngine.init({
626
+ baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
627
+ // license: process.env.CESDK_LICENSE,
628
+ });
629
+
630
+ try {
631
+ // Configure Google Fonts for text element support
632
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
633
+ await addGfontsAssetLibrary(engine as any);
634
+
635
+ let successCount = 0;
636
+ let failCount = 0;
637
+
638
+ // Process each IDML file
639
+ for (const idmlPath of idmlPaths) {
640
+ const fileName = basename(idmlPath);
641
+ console.log(`\nProcessing: ${fileName}`);
642
+
643
+ try {
644
+ const { archivePath, sceneStringPath } = await convertIdml(
645
+ engine,
646
+ idmlPath,
647
+ outputDir
648
+ );
649
+
650
+ console.log(` Archive: ${archivePath}`);
651
+ console.log(` Scene: ${sceneStringPath}`);
652
+ successCount++;
653
+ } catch (error) {
654
+ console.error(` Failed: ${(error as Error).message}`);
655
+ failCount++;
656
+ }
657
+ }
658
+
659
+ console.log(`\nBatch conversion complete:`);
660
+ console.log(` Success: ${successCount}/${idmlPaths.length}`);
661
+ console.log(` Failed: ${failCount}/${idmlPaths.length}`);
662
+ } finally {
663
+ // Always dispose engine to free resources
664
+ engine.dispose();
665
+ }
666
+ }
667
+ ```
614
668
 
615
- Load the archived scene into the CE.SDK editor for user editing:
669
+ Key aspects of batch conversion:
616
670
 
617
- ```typescript highlight=highlight-load-editor
618
- // Load the archived scene into the editor
619
- await cesdk.engine.scene.loadFromArchiveURL(archiveUrl);
671
+ - **Single engine instance** - Initialize once and reuse for all conversions to improve performance
672
+ - **Error isolation** - Each file is processed in a try-catch block so one failure doesn't stop the batch
673
+ - **Progress logging** - Track success and failure counts for reporting
674
+ - **Resource cleanup** - Always dispose the engine in a finally block
620
675
 
621
- // Verify scene loaded correctly
622
- const loadedPages = engine.scene.getPages();
623
- console.log(`IDML imported successfully with ${loadedPages.length} page(s)`);
676
+ ## Processing a Directory
624
677
 
625
- // Zoom to fit the imported page
626
- await cesdk.actions.run('zoom.toPage', { page: 'first', autoFit: true });
678
+ Scan a directory for IDML files and convert all of them:
679
+
680
+ ```typescript highlight=highlight-process-directory
681
+ /**
682
+ * Find all IDML files in a directory and convert them
683
+ */
684
+ export async function processDirectory(
685
+ inputDir: string,
686
+ outputDir: string
687
+ ): Promise<void> {
688
+ // Find all IDML files in directory
689
+ const files = await fs.readdir(inputDir);
690
+ const idmlFiles = files
691
+ .filter((f) => f.toLowerCase().endsWith('.idml'))
692
+ .map((f) => join(inputDir, f));
693
+
694
+ if (idmlFiles.length === 0) {
695
+ console.log(`No IDML files found in ${inputDir}`);
696
+ return;
697
+ }
698
+
699
+ await batchConvertIdmls(idmlFiles, outputDir);
700
+ }
627
701
  ```
628
702
 
629
- After loading, verify the scene contains at least one page. The imported design is now ready for editing in the CE.SDK editor.
703
+ This function finds all `.idml` files in the input directory and processes them as a batch.
704
+
705
+ ## Validating Conversion Results
706
+
707
+ Load a converted archive and verify its structure:
708
+
709
+ ```typescript highlight=highlight-validate-results
710
+ /**
711
+ * Validate conversion results by loading the archive and checking scene structure
712
+ */
713
+ export async function validateArchive(archivePath: string): Promise<{
714
+ valid: boolean;
715
+ pageCount: number;
716
+ blockCount: number;
717
+ }> {
718
+ const engine = await CreativeEngine.init({
719
+ // license: process.env.CESDK_LICENSE,
720
+ });
721
+
722
+ try {
723
+ // Load the archive
724
+ const archiveBuffer = await fs.readFile(archivePath);
725
+ const archiveBlob = new Blob([archiveBuffer]);
726
+ const archiveUrl = URL.createObjectURL(archiveBlob);
727
+
728
+ await engine.scene.loadFromArchiveURL(archiveUrl);
729
+
730
+ // Get scene information
731
+ const pages = engine.block.findByType('page');
732
+ const allBlocks = engine.block.findAll();
733
+
734
+ return {
735
+ valid: pages.length > 0,
736
+ pageCount: pages.length,
737
+ blockCount: allBlocks.length
738
+ };
739
+ } finally {
740
+ engine.dispose();
741
+ }
742
+ }
743
+ ```
744
+
745
+ Validation checks:
746
+
747
+ - The archive can be loaded without errors
748
+ - At least one page exists in the scene
749
+ - Block count indicates content was imported
750
+
751
+ ## Running the Conversion
752
+
753
+ The main entry point demonstrates the complete batch conversion workflow:
754
+
755
+ ```typescript highlight=highlight-main
756
+ /**
757
+ * Main entry point - demonstrates batch IDML conversion workflow
758
+ */
759
+ async function main(): Promise<void> {
760
+ console.log('IDML to CE.SDK Batch Converter');
761
+ console.log('==============================\n');
762
+
763
+ // Example: Convert a single IDML file
764
+ // In production, you would provide actual IDML files
765
+ const engine = await CreativeEngine.init({
766
+ // license: process.env.CESDK_LICENSE,
767
+ });
768
+
769
+ try {
770
+ // Configure Google Fonts for text element support
771
+ await addGfontsAssetLibrary(engine as any);
772
+
773
+ // Create a sample scene to demonstrate the export format
774
+ // In production, this would be replaced by actual IDML conversion
775
+ await engine.scene.create();
776
+ const page = engine.block.create('page');
777
+ engine.block.setWidth(page, 800);
778
+ engine.block.setHeight(page, 600);
779
+ engine.block.appendChild(engine.scene.get()!, page);
780
+
781
+ // Save as archive
782
+ await fs.mkdir('./output', { recursive: true });
783
+ const archive = await engine.scene.saveToArchive();
784
+ const archiveBuffer = Buffer.from(await archive.arrayBuffer());
785
+ await fs.writeFile('./output/sample.cesdk', archiveBuffer);
786
+
787
+ console.log('Sample archive created: ./output/sample.cesdk');
788
+ console.log('\nTo convert actual IDML files:');
789
+ console.log('1. Place IDML files in an input directory');
790
+ console.log('2. Call: await processDirectory("./input", "./output")');
791
+ } finally {
792
+ engine.dispose();
793
+ }
794
+ }
795
+ ```
796
+
797
+ Run the script with `vite-node` or `tsx`:
798
+
799
+ ```bash
800
+ npx vite-node server-js.ts
801
+ ```
802
+
803
+ For production use, modify the script to accept input/output directories as arguments.
804
+
805
+ ## Saving and Loading Archives
806
+
807
+ Scene archives (`.cesdk` files) contain the complete scene with all embedded assets:
808
+
809
+ ```typescript
810
+ // Save scene as archive
811
+ const archive = await engine.scene.saveToArchive();
812
+ const archiveBuffer = Buffer.from(await archive.arrayBuffer());
813
+ await fs.writeFile('output.cesdk', archiveBuffer);
814
+
815
+ // Load archive in browser or server
816
+ await engine.scene.loadFromArchiveURL(archiveUrl);
817
+ ```
818
+
819
+ Archives are portable - convert on server, load in browser or another server instance.
820
+
821
+ ## Engine Cleanup
822
+
823
+ Always dispose of the engine when processing is complete to free system resources:
824
+
825
+ ```typescript highlight=highlight-cleanup
826
+ // Always dispose engine to free resources
827
+ engine.dispose();
828
+ ```
829
+
830
+ Using a `try/finally` block ensures cleanup happens even if an error occurs during processing.
630
831
 
631
832
  ## API Reference
632
833
 
633
834
  The `@imgly/idml-importer` package exports the following key APIs:
634
835
 
635
- | API | Description |
636
- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- |
637
- | `IDMLParser.fromFile(engine, buffer, xmlParser)` | Creates a parser instance from an IDML file buffer. The `xmlParser` function converts XML strings to DOM documents. |
638
- | `parser.parse()` | Parses the IDML file and creates a CE.SDK scene. Returns when parsing is complete. |
639
- | `addGfontsAssetLibrary(engine)` | Registers Google Fonts as a font source for text element matching. Call before parsing. |
836
+ | API | Description |
837
+ |-----|-------------|
838
+ | `IDMLParser.fromFile(engine, buffer, xmlParser, options?)` | Creates a parser instance from an IDML file buffer. The `xmlParser` function converts XML strings to DOM documents. `options` accepts `fontResolver` and `embeddedImporters`. |
839
+ | `parser.parse()` | Parses the IDML file and creates a CE.SDK scene. Returns when parsing is complete. |
840
+ | `addGfontsAssetLibrary(engine)` | Registers Google Fonts as a font source for text element matching. Call before parsing. |
841
+ | `createPdfEmbeddedImporter(PDFParser)` | Adapter for the `embeddedImporters` array. Imports embedded PDF / `.ai` content as editable CE.SDK blocks via `@imgly/pdf-importer`. Requires the package to be installed; pass its `PDFParser` class as the only argument. |
640
842
 
641
843
  ## Limitations
642
844
 
@@ -645,8 +847,7 @@ The IDML importer has the following limitations:
645
847
  - **Linked images** - Only embedded images are supported. Linked images become placeholders. Embed all images in InDesign before exporting to IDML.
646
848
  - **Text flow** - Text that flows between multiple text frames is not supported and may appear duplicated.
647
849
  - **Image fitting** - Images shrunk inside their frames may not render as expected.
648
- - **PDF content** - Embedded PDF content is replaced with placeholders.
649
- - **Page sizes** - Different page sizes within the same document are not supported. All pages use the first page's dimensions.
850
+ - **Embedded PDF / `.ai`** - Imports as editable blocks when `@imgly/pdf-importer` is installed and `createPdfEmbeddedImporter(PDFParser)` is registered in `embeddedImporters`. Without the adapter, embeds fall through to a placeholder image. Non-rectangular frame clipping and per-embed PDF crop attributes are not yet applied.
650
851
  - **Advanced text** - Complex text formatting beyond bold/italic may not be preserved.
651
852
 
652
853
  ## Pre-Import Checklist
@@ -668,13 +869,15 @@ Before exporting from InDesign:
668
869
 
669
870
  **Text is duplicated:** This can happen when text flows between multiple frames. The IDML importer doesn't support linked text frames.
670
871
 
671
- **Pages have wrong size:** All pages use the first page's dimensions. Ensure consistent page sizes in the InDesign document.
872
+ **Embedded PDFs show as placeholders:** Install `@imgly/pdf-importer` and pass `createPdfEmbeddedImporter(PDFParser)` in the `embeddedImporters` option to `IDMLParser.fromFile`. Without the adapter, `<PDF>` and `.ai` embeds fall through to a placeholder image.
873
+
874
+
672
875
 
673
876
  ---
674
877
 
675
878
  ## More Resources
676
879
 
677
- - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
880
+ - **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
678
881
  - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
679
- - **[Web Documentation](./js.md)** - Interactive documentation with examples
680
- - **[Support](mailto:support@img.ly)** - Contact IMG.LY support
882
+ - **[Web Documentation](./node.md)** - Interactive documentation with examples
883
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support