@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,413 +1,346 @@
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) > [Rules](./rules.md) > [Moderate Content](./rules/moderate-content.md)
4
4
 
5
5
  ---
6
6
 
7
- Use CE.SDK's engine APIs to extract images and text from designs, then integrate with third-party moderation services to detect inappropriate content.
7
+ Use CE.SDK's engine APIs to extract images and text from designs in Node.js, then integrate with third-party moderation services to detect inappropriate content.
8
8
 
9
9
  > **Reading time:** 8 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-rules-moderate-content-browser)
15
- > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-rules-moderate-content-browser)
16
- > - [Live demo](https://img.ly/docs/cesdk/examples/guides-rules-moderate-content-browser/)
17
-
18
- ![Content moderation example showing a design with validation results panel displaying moderation checks for images and text](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
14
+ >
15
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-rules-moderate-content-server-js)
16
+ >
17
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-rules-moderate-content-server-js)
19
18
 
20
19
  CE.SDK does not provide prebuilt content moderation workflows. Instead, it provides powerful engine APIs that make it straightforward to extract images and text from designs for moderation by third-party services of your choice. This approach is intentional: content moderation requirements are highly specific to each business, including which categories to check, what thresholds to apply, and which services to use. Similarly, when and where to check content (during editing, before export, on upload) varies based on your workflow and user experience goals.
21
20
 
22
21
  Content moderation helps maintain quality standards and comply with content policies. Unlike built-in validation rules that check technical aspects like resolution or layout, content moderation requires integration with external AI-powered services (Sightengine, AWS Rekognition, OpenAI Moderation API) to analyze visual content (images for weapons, drugs, nudity) and textual content (profanity, hate speech, threats).
23
22
 
24
- ```typescript file=@cesdk_web_examples/guides-rules-moderate-content-browser/browser.ts reference-only
25
- import type {
26
- CreativeEngine,
27
- EditorPlugin,
28
- EditorPluginContext
29
- } from '@cesdk/cesdk-js';
30
- import packageJson from './package.json';
31
-
32
- import {
33
- BlurAssetSource,
34
- ColorPaletteAssetSource,
35
- CropPresetsAssetSource,
36
- DemoAssetSources,
37
- EffectsAssetSource,
38
- FiltersAssetSource,
39
- PagePresetsAssetSource,
40
- StickerAssetSource,
41
- TextAssetSource,
42
- TextComponentAssetSource,
43
- TypefaceAssetSource,
44
- UploadAssetSources,
45
- VectorShapeAssetSource
46
- } from '@cesdk/cesdk-js/plugins';
47
- import { DesignEditorConfig } from './design-editor/plugin';
48
-
49
- // Type definitions for content moderation
50
- interface ImageBlockData {
51
- blockId: number;
52
- url: string;
53
- blockType: string;
54
- blockName: string;
55
- }
23
+ ```javascript file=@cesdk_web_examples/guides-rules-moderate-content-server-js/index.js reference-only
24
+ import CreativeEngine from '@cesdk/node';
56
25
 
57
- interface TextBlockData {
58
- blockId: number;
59
- text: string;
60
- blockType: string;
61
- blockName: string;
62
- }
63
-
64
- interface ContentCategory {
65
- name: string;
66
- description: string;
67
- state: 'success' | 'warning' | 'failed';
68
- }
69
-
70
- interface ValidationResult extends ContentCategory {
71
- blockId: number;
72
- blockType: string;
73
- blockName: string;
74
- id: string;
75
- url?: string; // For image blocks
76
- text?: string; // For text blocks
77
- }
78
-
79
- // Mock moderation caches
80
- const imageCache: Record<string, ContentCategory[]> = {};
81
- const textCache: Record<string, ContentCategory[]> = {};
26
+ // Mock moderation caches for demonstration
27
+ const imageCache = new Map();
28
+ const textCache = new Map();
82
29
 
83
30
  /**
84
- * CE.SDK Plugin: Content Moderation Guide
85
- *
86
- * Demonstrates implementing automated content moderation for both images and text
31
+ * Extracts the image URL from a block's fill property
87
32
  */
88
- class Example implements EditorPlugin {
89
- name = packageJson.name;
90
- version = packageJson.version;
33
+ function getImageUrl(engine, blockId) {
34
+ try {
35
+ const imageFill = engine.block.getFill(blockId);
91
36
 
92
- async initialize({ cesdk }: EditorPluginContext): Promise<void> {
93
- if (!cesdk) {
94
- throw new Error('CE.SDK instance is required for this plugin');
95
- }
96
- await cesdk.addPlugin(new DesignEditorConfig());
97
-
98
- // Add asset source plugins
99
- await cesdk.addPlugin(new BlurAssetSource());
100
- await cesdk.addPlugin(new ColorPaletteAssetSource());
101
- await cesdk.addPlugin(new CropPresetsAssetSource());
102
- await cesdk.addPlugin(
103
- new UploadAssetSources({ include: ['ly.img.image.upload'] })
104
- );
105
- await cesdk.addPlugin(
106
- new DemoAssetSources({
107
- include: [
108
- 'ly.img.templates.blank.*',
109
- 'ly.img.templates.presentation.*',
110
- 'ly.img.templates.print.*',
111
- 'ly.img.templates.social.*',
112
- 'ly.img.image.*'
113
- ]
114
- })
37
+ const fillImageURI = engine.block.getString(
38
+ imageFill,
39
+ 'fill/image/imageFileURI'
115
40
  );
116
- await cesdk.addPlugin(new EffectsAssetSource());
117
- await cesdk.addPlugin(new FiltersAssetSource());
118
- await cesdk.addPlugin(new PagePresetsAssetSource());
119
- await cesdk.addPlugin(new StickerAssetSource());
120
- await cesdk.addPlugin(new TextAssetSource());
121
- await cesdk.addPlugin(new TextComponentAssetSource());
122
- await cesdk.addPlugin(new TypefaceAssetSource());
123
- await cesdk.addPlugin(new VectorShapeAssetSource());
124
-
125
- await cesdk.actions.run('scene.create', {
126
- page: { width: 1200, height: 800, unit: 'Pixel' }
127
- });
41
+ if (fillImageURI) {
42
+ return fillImageURI;
43
+ }
128
44
 
129
- const engine = cesdk.engine;
130
- const page = engine.block.findByType('page')[0];
45
+ const sourceSet = engine.block.getSourceSet(
46
+ imageFill,
47
+ 'fill/image/sourceSet'
48
+ );
49
+ if (sourceSet && sourceSet.length > 0) {
50
+ return sourceSet[0].uri;
51
+ }
131
52
 
132
- const pageHeight = engine.block.getHeight(page);
53
+ return null;
54
+ } catch (error) {
55
+ return null;
56
+ }
57
+ }
133
58
 
134
- // Create a single sample image
135
- const imageWidth = 500;
136
- const imageHeight = 400;
137
- const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
59
+ /**
60
+ * Extracts text content from a text block
61
+ */
62
+ function getTextContent(engine, blockId) {
63
+ try {
64
+ return engine.block.getString(blockId, 'text/text');
65
+ } catch (error) {
66
+ return '';
67
+ }
68
+ }
138
69
 
139
- const imageBlock = await engine.block.addImage(imageUri, {
140
- size: { width: imageWidth, height: imageHeight }
141
- });
70
+ /**
71
+ * Simulates an image content moderation API call
72
+ * In production, replace this with your actual moderation service
73
+ */
74
+ async function checkImageContentAPI(url) {
75
+ if (imageCache.has(url)) {
76
+ return imageCache.get(url);
77
+ }
142
78
 
143
- // Position image in center-left
144
- engine.block.setPositionX(imageBlock, 100);
145
- engine.block.setPositionY(imageBlock, (pageHeight - imageHeight) / 2);
79
+ // Simulate API delay
80
+ await new Promise((resolve) => setTimeout(resolve, 100));
81
+
82
+ const results = [
83
+ {
84
+ name: 'Weapons',
85
+ description: 'Handguns, rifles, machine guns, threatening knives',
86
+ state: percentageToState(Math.random() * 0.3)
87
+ },
88
+ {
89
+ name: 'Alcohol',
90
+ description: 'Wine, beer, cocktails, champagne',
91
+ state: percentageToState(Math.random() * 0.4)
92
+ },
93
+ {
94
+ name: 'Drugs',
95
+ description: 'Cannabis, syringes, glass pipes, bongs, pills',
96
+ state: percentageToState(Math.random() * 0.2)
97
+ },
98
+ {
99
+ name: 'Nudity',
100
+ description: 'Raw or partial nudity',
101
+ state: percentageToState(Math.random() * 0.3)
102
+ }
103
+ ];
146
104
 
147
- engine.block.appendChild(page, imageBlock);
105
+ imageCache.set(url, results);
106
+ return results;
107
+ }
148
108
 
149
- const textBlock = engine.block.create('text');
150
- engine.block.setString(
151
- textBlock,
152
- 'text/text',
153
- 'Sample text content for moderation testing'
154
- );
109
+ /**
110
+ * Simulates a text content moderation API call
111
+ * In production, replace this with your actual moderation service
112
+ */
113
+ async function checkTextContentAPI(text) {
114
+ if (textCache.has(text)) {
115
+ return textCache.get(text);
116
+ }
155
117
 
156
- // Position text on the right side of the image
157
- engine.block.setPositionX(textBlock, 650);
158
- engine.block.setPositionY(textBlock, (pageHeight - 120) / 2);
159
- engine.block.setWidth(textBlock, 450);
160
- engine.block.setHeight(textBlock, 120);
118
+ // Simulate API delay
119
+ await new Promise((resolve) => setTimeout(resolve, 100));
120
+
121
+ const results = [
122
+ {
123
+ name: 'Profanity',
124
+ description: 'Offensive or vulgar language',
125
+ state: percentageToState(Math.random() * 0.3)
126
+ },
127
+ {
128
+ name: 'Hate Speech',
129
+ description: 'Content promoting hatred or discrimination',
130
+ state: percentageToState(Math.random() * 0.2)
131
+ },
132
+ {
133
+ name: 'Threats',
134
+ description: 'Threatening or violent language',
135
+ state: percentageToState(Math.random() * 0.1)
136
+ }
137
+ ];
161
138
 
162
- // Make text larger and more readable
163
- engine.block.setFloat(textBlock, 'text/fontSize', 48);
164
- engine.block.setEnum(textBlock, 'text/horizontalAlignment', 'Left');
139
+ textCache.set(text, results);
140
+ return results;
141
+ }
165
142
 
166
- engine.block.appendChild(page, textBlock);
143
+ /**
144
+ * Maps confidence scores to validation states
145
+ */
146
+ function percentageToState(percentage) {
147
+ if (percentage > 0.8) {
148
+ return 'failed';
149
+ } else if (percentage > 0.4) {
150
+ return 'warning';
151
+ } else {
152
+ return 'success';
153
+ }
154
+ }
167
155
 
168
- await this.demonstrateContentModeration(engine);
156
+ /**
157
+ * Checks all images in the design for inappropriate content
158
+ */
159
+ async function checkImageContent(engine) {
160
+ const imageBlockIds = engine.block.findByKind('image');
161
+ const imageBlocksData = imageBlockIds
162
+ .map((blockId) => ({
163
+ blockId,
164
+ url: getImageUrl(engine, blockId),
165
+ blockType: engine.block.getType(blockId),
166
+ blockName: engine.block.getName(blockId)
167
+ }))
168
+ .filter((data) => data.url !== null);
169
+
170
+ const imagesWithValidity = await Promise.all(
171
+ imageBlocksData.map(async (imageBlockData) => {
172
+ const categories = await checkImageContentAPI(imageBlockData.url);
173
+
174
+ return categories.map((checkResult) => ({
175
+ ...checkResult,
176
+ blockId: imageBlockData.blockId,
177
+ blockType: imageBlockData.blockType,
178
+ blockName: imageBlockData.blockName,
179
+ url: imageBlockData.url,
180
+ id: `${imageBlockData.blockId}-${checkResult.name}`
181
+ }));
182
+ })
183
+ );
169
184
 
170
- // Zoom to fit the entire page in the viewport
171
- await engine.scene.zoomToBlock(page, {
172
- padding: {
173
- left: 40,
174
- top: 40,
175
- right: 40,
176
- bottom: 40
177
- }
178
- });
179
- }
185
+ return imagesWithValidity.flat();
186
+ }
180
187
 
181
- private async demonstrateContentModeration(
182
- engine: CreativeEngine
183
- ): Promise<void> {
184
- // Check both images and text
185
- const imageResults = await this.checkImageContent(engine);
186
- const textResults = await this.checkTextContent(engine);
187
- const allResults = [...imageResults, ...textResults];
188
-
189
- // eslint-disable-next-line no-console
190
- console.log(`Total moderation checks: ${allResults.length}`);
191
-
192
- const failed = allResults.filter((r) => r.state === 'failed');
193
- const warnings = allResults.filter((r) => r.state === 'warning');
194
- const passed = allResults.filter((r) => r.state === 'success');
195
-
196
- // eslint-disable-next-line no-console
197
- console.log('Validation Summary:');
198
- // eslint-disable-next-line no-console
199
- console.log(` Violations: ${failed.length}`);
200
- // eslint-disable-next-line no-console
201
- console.log(` Warnings: ${warnings.length}`);
202
- // eslint-disable-next-line no-console
203
- console.log(` Passed: ${passed.length}`);
204
-
205
- if (failed.length > 0) {
206
- const blockToSelect = failed[0].blockId;
207
- engine.block
208
- .findAllSelected()
209
- .forEach((id) => engine.block.setSelected(id, false));
210
- engine.block.setSelected(blockToSelect, true);
211
- }
212
- }
188
+ /**
189
+ * Checks all text blocks in the design for inappropriate content
190
+ */
191
+ async function checkTextContent(engine) {
192
+ const textBlockIds = engine.block.findByType('//ly.img.ubq/text');
193
+ const textBlocksData = textBlockIds
194
+ .map((blockId) => ({
195
+ blockId,
196
+ text: getTextContent(engine, blockId),
197
+ blockType: engine.block.getType(blockId),
198
+ blockName: engine.block.getName(blockId)
199
+ }))
200
+ .filter((data) => data.text.trim().length > 0);
201
+
202
+ const textsWithValidity = await Promise.all(
203
+ textBlocksData.map(async (textBlockData) => {
204
+ const categories = await checkTextContentAPI(textBlockData.text);
205
+
206
+ return categories.map((checkResult) => ({
207
+ ...checkResult,
208
+ blockId: textBlockData.blockId,
209
+ blockType: textBlockData.blockType,
210
+ blockName: textBlockData.blockName,
211
+ text: textBlockData.text,
212
+ id: `${textBlockData.blockId}-${checkResult.name}`
213
+ }));
214
+ })
215
+ );
213
216
 
214
- /**
215
- * Extracts the image URL from a block's fill property
216
- */
217
- private getImageUrl(engine: CreativeEngine, blockId: number): string | null {
218
- try {
219
- const imageFill = engine.block.getFill(blockId);
217
+ return textsWithValidity.flat();
218
+ }
220
219
 
221
- const fillImageURI = engine.block.getString(
222
- imageFill,
223
- 'fill/image/imageFileURI'
220
+ /**
221
+ * Displays validation results grouped by severity
222
+ */
223
+ function displayResults(results) {
224
+ const failed = results.filter((r) => r.state === 'failed');
225
+ const warnings = results.filter((r) => r.state === 'warning');
226
+ const passed = results.filter((r) => r.state === 'success');
227
+
228
+ console.log('\n=== Content Moderation Results ===\n');
229
+ console.log(`Total checks: ${results.length}`);
230
+ console.log(` Violations: ${failed.length}`);
231
+ console.log(` Warnings: ${warnings.length}`);
232
+ console.log(` Passed: ${passed.length}\n`);
233
+
234
+ if (failed.length > 0) {
235
+ console.log('❌ VIOLATIONS:');
236
+ failed.forEach((result) => {
237
+ const content = result.url || result.text?.substring(0, 50) + '...';
238
+ console.log(
239
+ ` - ${result.name}: Block ${result.blockId} (${result.blockType})`
224
240
  );
225
- if (fillImageURI) {
226
- return fillImageURI;
227
- }
241
+ console.log(` ${result.description}`);
242
+ console.log(` Content: ${content}\n`);
243
+ });
244
+ }
228
245
 
229
- const sourceSet = engine.block.getSourceSet(
230
- imageFill,
231
- 'fill/image/sourceSet'
246
+ if (warnings.length > 0) {
247
+ console.log('⚠️ WARNINGS:');
248
+ warnings.forEach((result) => {
249
+ const content = result.url || result.text?.substring(0, 50) + '...';
250
+ console.log(
251
+ ` - ${result.name}: Block ${result.blockId} (${result.blockType})`
232
252
  );
233
- if (sourceSet && sourceSet.length > 0) {
234
- return sourceSet[0].uri;
235
- }
236
-
237
- return null;
238
- } catch (error) {
239
- return null;
240
- }
253
+ console.log(` ${result.description}`);
254
+ console.log(` Content: ${content}\n`);
255
+ });
241
256
  }
242
257
 
243
- /**
244
- * Extracts text content from a text block
245
- */
246
- private getTextContent(engine: CreativeEngine, blockId: number): string {
247
- try {
248
- return engine.block.getString(blockId, 'text/text');
249
- } catch (error) {
250
- return '';
251
- }
252
- }
258
+ return { failed, warnings, passed };
259
+ }
253
260
 
254
- /**
255
- * Checks all images in the design for inappropriate content
256
- */
257
- private async checkImageContent(
258
- engine: CreativeEngine
259
- ): Promise<ValidationResult[]> {
260
- const imageBlockIds = engine.block.findByKind('image');
261
- const imageBlocksData: ImageBlockData[] = imageBlockIds
262
- .map((blockId) => ({
263
- blockId,
264
- url: this.getImageUrl(engine, blockId),
265
- blockType: engine.block.getType(blockId),
266
- blockName: engine.block.getName(blockId)
267
- }))
268
- .filter((data) => data.url !== null) as ImageBlockData[];
269
-
270
- const imagesWithValidity = await Promise.all(
271
- imageBlocksData.map(async (imageBlockData) => {
272
- const categories = await this.checkImageContentAPI(imageBlockData.url);
273
-
274
- return categories.map((checkResult) => ({
275
- ...checkResult,
276
- blockId: imageBlockData.blockId,
277
- blockType: imageBlockData.blockType,
278
- blockName: imageBlockData.blockName,
279
- url: imageBlockData.url,
280
- id: `${imageBlockData.blockId}-${checkResult.name}`
281
- }));
282
- })
283
- );
261
+ /**
262
+ * Validates content before allowing export
263
+ */
264
+ async function validateForExport(engine) {
265
+ console.log('Validating design before export...');
284
266
 
285
- return imagesWithValidity.flat();
286
- }
267
+ const imageResults = await checkImageContent(engine);
268
+ const textResults = await checkTextContent(engine);
269
+ const allResults = [...imageResults, ...textResults];
287
270
 
288
- /**
289
- * Checks all text blocks in the design for inappropriate content
290
- */
291
- private async checkTextContent(
292
- engine: CreativeEngine
293
- ): Promise<ValidationResult[]> {
294
- const textBlockIds = engine.block.findByType('//ly.img.ubq/text');
295
- const textBlocksData: TextBlockData[] = textBlockIds
296
- .map((blockId) => ({
297
- blockId,
298
- text: this.getTextContent(engine, blockId),
299
- blockType: engine.block.getType(blockId),
300
- blockName: engine.block.getName(blockId)
301
- }))
302
- .filter((data) => data.text.trim().length > 0);
303
-
304
- const textsWithValidity = await Promise.all(
305
- textBlocksData.map(async (textBlockData) => {
306
- const categories = await this.checkTextContentAPI(textBlockData.text);
307
-
308
- return categories.map((checkResult) => ({
309
- ...checkResult,
310
- blockId: textBlockData.blockId,
311
- blockType: textBlockData.blockType,
312
- blockName: textBlockData.blockName,
313
- text: textBlockData.text,
314
- id: `${textBlockData.blockId}-${checkResult.name}`
315
- }));
316
- })
317
- );
271
+ const { failed } = displayResults(allResults);
318
272
 
319
- return textsWithValidity.flat();
273
+ if (failed.length > 0) {
274
+ console.error(
275
+ `\n❌ Export blocked: ${failed.length} policy violation(s) detected.\n`
276
+ );
277
+ return false;
320
278
  }
321
279
 
322
- /**
323
- * Simulates an image content moderation API call
324
- */
325
- private async checkImageContentAPI(url: string): Promise<ContentCategory[]> {
326
- if (imageCache[url]) {
327
- return imageCache[url];
328
- }
280
+ console.log('\n✅ Content validation passed. Export allowed.\n');
281
+ return true;
282
+ }
329
283
 
330
- await new Promise((resolve) => setTimeout(resolve, 100));
331
-
332
- const results: ContentCategory[] = [
333
- {
334
- name: 'Weapons',
335
- description: 'Handguns, rifles, machine guns, threatening knives',
336
- state: this.percentageToState(Math.random() * 0.3)
337
- },
338
- {
339
- name: 'Alcohol',
340
- description: 'Wine, beer, cocktails, champagne',
341
- state: this.percentageToState(Math.random() * 0.4)
342
- },
343
- {
344
- name: 'Drugs',
345
- description: 'Cannabis, syringes, glass pipes, bongs, pills',
346
- state: this.percentageToState(Math.random() * 0.2)
347
- },
348
- {
349
- name: 'Nudity',
350
- description: 'Raw or partial nudity',
351
- state: this.percentageToState(Math.random() * 0.3)
284
+ /**
285
+ * Main demonstration function
286
+ */
287
+ async function main() {
288
+ console.log('🚀 Starting CE.SDK Content Moderation Demo...\n');
289
+
290
+ // Initialize the engine
291
+ const config = {
292
+ baseURL: process.env.IMGLY_LOCAL_ASSETS_URL,
293
+ license: process.env.CESDK_LICENSE || '',
294
+ logger: (level, ...args) => {
295
+ if (level === 'error' || level === 'warn') {
296
+ console.log(`[${level}]`, ...args);
352
297
  }
353
- ];
354
-
355
- imageCache[url] = results;
356
- return results;
357
- }
358
-
359
- /**
360
- * Simulates a text content moderation API call
361
- */
362
- private async checkTextContentAPI(text: string): Promise<ContentCategory[]> {
363
- if (textCache[text]) {
364
- return textCache[text];
365
298
  }
366
-
367
- await new Promise((resolve) => setTimeout(resolve, 100));
368
-
369
- const results: ContentCategory[] = [
370
- {
371
- name: 'Profanity',
372
- description: 'Offensive or vulgar language',
373
- state: this.percentageToState(Math.random() * 0.3)
374
- },
375
- {
376
- name: 'Hate Speech',
377
- description: 'Content promoting hatred or discrimination',
378
- state: this.percentageToState(Math.random() * 0.2)
379
- },
380
- {
381
- name: 'Threats',
382
- description: 'Threatening or violent language',
383
- state: this.percentageToState(Math.random() * 0.1)
384
- }
385
- ];
386
-
387
- textCache[text] = results;
388
- return results;
299
+ };
300
+
301
+ const engine = await CreativeEngine.init(config);
302
+ console.log('✓ Engine initialized\n');
303
+
304
+ // Load a sample scene/template
305
+ // In production, use your actual scene URL or template
306
+ const templateURL =
307
+ 'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/templates/cesdk_postcard_1.scene';
308
+ await engine.scene.loadFromURL(templateURL);
309
+ const page = engine.block.findByType('page')[0];
310
+ console.log(' Scene loaded\n');
311
+
312
+ // The loaded scene already contains images and text
313
+ // In production, you would modify the scene content as needed
314
+ console.log('✓ Scene contains sample content for moderation\n');
315
+
316
+ // Validate content before export
317
+ const canExport = await validateForExport(engine);
318
+
319
+ if (canExport) {
320
+ // Export the design
321
+ const blob = await engine.block.export(page, 'image/png');
322
+ const buffer = Buffer.from(await blob.arrayBuffer());
323
+
324
+ // Save to file (optional)
325
+ const fs = await import('fs/promises');
326
+ await fs.writeFile('output.png', buffer);
327
+ console.log('✓ Design exported to output.png\n');
389
328
  }
390
329
 
391
- /**
392
- * Maps confidence scores to validation states
393
- */
394
- private percentageToState(
395
- percentage: number
396
- ): 'success' | 'warning' | 'failed' {
397
- if (percentage > 0.8) {
398
- return 'failed';
399
- } else if (percentage > 0.4) {
400
- return 'warning';
401
- } else {
402
- return 'success';
403
- }
404
- }
330
+ // Clean up
331
+ engine.dispose();
332
+ console.log('✓ Engine disposed\n');
333
+ console.log('Demo complete! 🎉');
405
334
  }
406
335
 
407
- export default Example;
336
+ // Run the demo
337
+ main().catch((error) => {
338
+ console.error('Error:', error);
339
+ process.exit(1);
340
+ });
408
341
  ```
409
342
 
410
- This guide demonstrates how to use CE.SDK's engine APIs to find and extract content from designs, send it to moderation APIs, and display validation results.
343
+ This guide demonstrates how to use CE.SDK's engine APIs to find and extract content from designs in Node.js, send it to moderation APIs, and validate before export in server environments.
411
344
 
412
345
  ## Finding Content in Designs
413
346
 
@@ -415,82 +348,80 @@ Locate all images and text blocks, then extract the data needed for moderation.
415
348
 
416
349
  **Images**: Use `findByKind('image')` to find image blocks, then extract URLs from fill properties:
417
350
 
418
- ```typescript highlight-get-image-url
419
- /**
420
- * Extracts the image URL from a block's fill property
421
- */
422
- private getImageUrl(engine: CreativeEngine, blockId: number): string | null {
423
- try {
424
- const imageFill = engine.block.getFill(blockId);
425
-
426
- const fillImageURI = engine.block.getString(
427
- imageFill,
428
- 'fill/image/imageFileURI'
429
- );
430
- if (fillImageURI) {
431
- return fillImageURI;
432
- }
351
+ ```javascript highlight-get-image-url
352
+ /**
353
+ * Extracts the image URL from a block's fill property
354
+ */
355
+ function getImageUrl(engine, blockId) {
356
+ try {
357
+ const imageFill = engine.block.getFill(blockId);
433
358
 
434
- const sourceSet = engine.block.getSourceSet(
435
- imageFill,
436
- 'fill/image/sourceSet'
437
- );
438
- if (sourceSet && sourceSet.length > 0) {
439
- return sourceSet[0].uri;
440
- }
359
+ const fillImageURI = engine.block.getString(
360
+ imageFill,
361
+ 'fill/image/imageFileURI'
362
+ );
363
+ if (fillImageURI) {
364
+ return fillImageURI;
365
+ }
441
366
 
442
- return null;
443
- } catch (error) {
444
- return null;
367
+ const sourceSet = engine.block.getSourceSet(
368
+ imageFill,
369
+ 'fill/image/sourceSet'
370
+ );
371
+ if (sourceSet && sourceSet.length > 0) {
372
+ return sourceSet[0].uri;
445
373
  }
374
+
375
+ return null;
376
+ } catch (error) {
377
+ return null;
446
378
  }
379
+ }
447
380
  ```
448
381
 
449
382
  Process all images by checking each URL against the moderation API:
450
383
 
451
- ```typescript highlight-check-all-images
452
- /**
453
- * Checks all images in the design for inappropriate content
454
- */
455
- private async checkImageContent(
456
- engine: CreativeEngine
457
- ): Promise<ValidationResult[]> {
458
- const imageBlockIds = engine.block.findByKind('image');
459
- const imageBlocksData: ImageBlockData[] = imageBlockIds
460
- .map((blockId) => ({
461
- blockId,
462
- url: this.getImageUrl(engine, blockId),
463
- blockType: engine.block.getType(blockId),
464
- blockName: engine.block.getName(blockId)
465
- }))
466
- .filter((data) => data.url !== null) as ImageBlockData[];
467
-
468
- const imagesWithValidity = await Promise.all(
469
- imageBlocksData.map(async (imageBlockData) => {
470
- const categories = await this.checkImageContentAPI(imageBlockData.url);
471
-
472
- return categories.map((checkResult) => ({
473
- ...checkResult,
474
- blockId: imageBlockData.blockId,
475
- blockType: imageBlockData.blockType,
476
- blockName: imageBlockData.blockName,
477
- url: imageBlockData.url,
478
- id: `${imageBlockData.blockId}-${checkResult.name}`
479
- }));
480
- })
481
- );
384
+ ```javascript highlight-check-all-images
385
+ /**
386
+ * Checks all images in the design for inappropriate content
387
+ */
388
+ async function checkImageContent(engine) {
389
+ const imageBlockIds = engine.block.findByKind('image');
390
+ const imageBlocksData = imageBlockIds
391
+ .map((blockId) => ({
392
+ blockId,
393
+ url: getImageUrl(engine, blockId),
394
+ blockType: engine.block.getType(blockId),
395
+ blockName: engine.block.getName(blockId)
396
+ }))
397
+ .filter((data) => data.url !== null);
398
+
399
+ const imagesWithValidity = await Promise.all(
400
+ imageBlocksData.map(async (imageBlockData) => {
401
+ const categories = await checkImageContentAPI(imageBlockData.url);
402
+
403
+ return categories.map((checkResult) => ({
404
+ ...checkResult,
405
+ blockId: imageBlockData.blockId,
406
+ blockType: imageBlockData.blockType,
407
+ blockName: imageBlockData.blockName,
408
+ url: imageBlockData.url,
409
+ id: `${imageBlockData.blockId}-${checkResult.name}`
410
+ }));
411
+ })
412
+ );
482
413
 
483
- return imagesWithValidity.flat();
484
- }
414
+ return imagesWithValidity.flat();
415
+ }
485
416
  ```
486
417
 
487
418
  **Text**: Use `findByType('//ly.img.ubq/text')` to find text blocks, then extract content using `getString()`:
488
419
 
489
- ```typescript highlight-get-text-content
420
+ ```javascript highlight-get-text-content
490
421
  /**
491
422
  * Extracts text content from a text block
492
423
  */
493
- private getTextContent(engine: CreativeEngine, blockId: number): string {
424
+ function getTextContent(engine, blockId) {
494
425
  try {
495
426
  return engine.block.getString(blockId, 'text/text');
496
427
  } catch (error) {
@@ -501,138 +432,138 @@ private getTextContent(engine: CreativeEngine, blockId: number): string {
501
432
 
502
433
  Process all text blocks by checking each text string against the moderation API:
503
434
 
504
- ```typescript highlight-check-all-text
505
- /**
506
- * Checks all text blocks in the design for inappropriate content
507
- */
508
- private async checkTextContent(
509
- engine: CreativeEngine
510
- ): Promise<ValidationResult[]> {
511
- const textBlockIds = engine.block.findByType('//ly.img.ubq/text');
512
- const textBlocksData: TextBlockData[] = textBlockIds
513
- .map((blockId) => ({
514
- blockId,
515
- text: this.getTextContent(engine, blockId),
516
- blockType: engine.block.getType(blockId),
517
- blockName: engine.block.getName(blockId)
518
- }))
519
- .filter((data) => data.text.trim().length > 0);
520
-
521
- const textsWithValidity = await Promise.all(
522
- textBlocksData.map(async (textBlockData) => {
523
- const categories = await this.checkTextContentAPI(textBlockData.text);
524
-
525
- return categories.map((checkResult) => ({
526
- ...checkResult,
527
- blockId: textBlockData.blockId,
528
- blockType: textBlockData.blockType,
529
- blockName: textBlockData.blockName,
530
- text: textBlockData.text,
531
- id: `${textBlockData.blockId}-${checkResult.name}`
532
- }));
533
- })
534
- );
435
+ ```javascript highlight-check-all-text
436
+ /**
437
+ * Checks all text blocks in the design for inappropriate content
438
+ */
439
+ async function checkTextContent(engine) {
440
+ const textBlockIds = engine.block.findByType('//ly.img.ubq/text');
441
+ const textBlocksData = textBlockIds
442
+ .map((blockId) => ({
443
+ blockId,
444
+ text: getTextContent(engine, blockId),
445
+ blockType: engine.block.getType(blockId),
446
+ blockName: engine.block.getName(blockId)
447
+ }))
448
+ .filter((data) => data.text.trim().length > 0);
449
+
450
+ const textsWithValidity = await Promise.all(
451
+ textBlocksData.map(async (textBlockData) => {
452
+ const categories = await checkTextContentAPI(textBlockData.text);
453
+
454
+ return categories.map((checkResult) => ({
455
+ ...checkResult,
456
+ blockId: textBlockData.blockId,
457
+ blockType: textBlockData.blockType,
458
+ blockName: textBlockData.blockName,
459
+ text: textBlockData.text,
460
+ id: `${textBlockData.blockId}-${checkResult.name}`
461
+ }));
462
+ })
463
+ );
535
464
 
536
- return textsWithValidity.flat();
537
- }
465
+ return textsWithValidity.flat();
466
+ }
538
467
  ```
539
468
 
540
469
  Both processes use `Promise.all()` to handle multiple items concurrently.
541
470
 
542
471
  ## Integrating Moderation APIs
543
472
 
544
- Integrate external AI services (Sightengine, AWS Rekognition, OpenAI Moderation API) to analyze content. Always proxy API requests through your backend to protect credentials.
473
+ Integrate external AI services (Sightengine, AWS Rekognition, OpenAI Moderation API) to analyze content. In server environments, you can call moderation APIs directly or proxy through your backend for better security.
545
474
 
546
475
  **Image Moderation** — This example shows a simulated API call that you'll replace with your actual moderation service. The function returns content categories with confidence scores:
547
476
 
548
- ```typescript highlight-image-moderation-api
549
- /**
550
- * Simulates an image content moderation API call
551
- */
552
- private async checkImageContentAPI(url: string): Promise<ContentCategory[]> {
553
- if (imageCache[url]) {
554
- return imageCache[url];
555
- }
477
+ ```javascript highlight-image-moderation-api
478
+ /**
479
+ * Simulates an image content moderation API call
480
+ * In production, replace this with your actual moderation service
481
+ */
482
+ async function checkImageContentAPI(url) {
483
+ if (imageCache.has(url)) {
484
+ return imageCache.get(url);
485
+ }
556
486
 
557
- await new Promise((resolve) => setTimeout(resolve, 100));
558
-
559
- const results: ContentCategory[] = [
560
- {
561
- name: 'Weapons',
562
- description: 'Handguns, rifles, machine guns, threatening knives',
563
- state: this.percentageToState(Math.random() * 0.3)
564
- },
565
- {
566
- name: 'Alcohol',
567
- description: 'Wine, beer, cocktails, champagne',
568
- state: this.percentageToState(Math.random() * 0.4)
569
- },
570
- {
571
- name: 'Drugs',
572
- description: 'Cannabis, syringes, glass pipes, bongs, pills',
573
- state: this.percentageToState(Math.random() * 0.2)
574
- },
575
- {
576
- name: 'Nudity',
577
- description: 'Raw or partial nudity',
578
- state: this.percentageToState(Math.random() * 0.3)
579
- }
580
- ];
487
+ // Simulate API delay
488
+ await new Promise((resolve) => setTimeout(resolve, 100));
489
+
490
+ const results = [
491
+ {
492
+ name: 'Weapons',
493
+ description: 'Handguns, rifles, machine guns, threatening knives',
494
+ state: percentageToState(Math.random() * 0.3)
495
+ },
496
+ {
497
+ name: 'Alcohol',
498
+ description: 'Wine, beer, cocktails, champagne',
499
+ state: percentageToState(Math.random() * 0.4)
500
+ },
501
+ {
502
+ name: 'Drugs',
503
+ description: 'Cannabis, syringes, glass pipes, bongs, pills',
504
+ state: percentageToState(Math.random() * 0.2)
505
+ },
506
+ {
507
+ name: 'Nudity',
508
+ description: 'Raw or partial nudity',
509
+ state: percentageToState(Math.random() * 0.3)
510
+ }
511
+ ];
581
512
 
582
- imageCache[url] = results;
583
- return results;
584
- }
513
+ imageCache.set(url, results);
514
+ return results;
515
+ }
585
516
  ```
586
517
 
587
- In production, replace the simulated logic with a real API call to your backend endpoint that proxies requests to services like Sightengine or AWS Rekognition.
518
+ In production, replace the simulated logic with a real API call to services like Sightengine or AWS Rekognition. Store API keys securely using environment variables.
588
519
 
589
520
  **Text Moderation** — Similar to image moderation, this simulates an API call that checks text content. Replace this with your actual text moderation service:
590
521
 
591
- ```typescript highlight-text-moderation-api
592
- /**
593
- * Simulates a text content moderation API call
594
- */
595
- private async checkTextContentAPI(text: string): Promise<ContentCategory[]> {
596
- if (textCache[text]) {
597
- return textCache[text];
598
- }
522
+ ```javascript highlight-text-moderation-api
523
+ /**
524
+ * Simulates a text content moderation API call
525
+ * In production, replace this with your actual moderation service
526
+ */
527
+ async function checkTextContentAPI(text) {
528
+ if (textCache.has(text)) {
529
+ return textCache.get(text);
530
+ }
599
531
 
600
- await new Promise((resolve) => setTimeout(resolve, 100));
601
-
602
- const results: ContentCategory[] = [
603
- {
604
- name: 'Profanity',
605
- description: 'Offensive or vulgar language',
606
- state: this.percentageToState(Math.random() * 0.3)
607
- },
608
- {
609
- name: 'Hate Speech',
610
- description: 'Content promoting hatred or discrimination',
611
- state: this.percentageToState(Math.random() * 0.2)
612
- },
613
- {
614
- name: 'Threats',
615
- description: 'Threatening or violent language',
616
- state: this.percentageToState(Math.random() * 0.1)
617
- }
618
- ];
532
+ // Simulate API delay
533
+ await new Promise((resolve) => setTimeout(resolve, 100));
534
+
535
+ const results = [
536
+ {
537
+ name: 'Profanity',
538
+ description: 'Offensive or vulgar language',
539
+ state: percentageToState(Math.random() * 0.3)
540
+ },
541
+ {
542
+ name: 'Hate Speech',
543
+ description: 'Content promoting hatred or discrimination',
544
+ state: percentageToState(Math.random() * 0.2)
545
+ },
546
+ {
547
+ name: 'Threats',
548
+ description: 'Threatening or violent language',
549
+ state: percentageToState(Math.random() * 0.1)
550
+ }
551
+ ];
619
552
 
620
- textCache[text] = results;
621
- return results;
622
- }
553
+ textCache.set(text, results);
554
+ return results;
555
+ }
623
556
  ```
624
557
 
625
- In production, replace the simulation with calls to services like OpenAI Moderation API or Perspective API through your backend.
558
+ In production, replace the simulation with calls to services like OpenAI Moderation API or Perspective API.
626
559
 
627
560
  **Processing Results**: Map confidence scores to severity levels (failed > 0.8, warning > 0.4, success ≤ 0.4):
628
561
 
629
- ```typescript highlight-threshold-mapping
562
+ ```javascript highlight-threshold-mapping
630
563
  /**
631
564
  * Maps confidence scores to validation states
632
565
  */
633
- private percentageToState(
634
- percentage: number
635
- ): 'success' | 'warning' | 'failed' {
566
+ function percentageToState(percentage) {
636
567
  if (percentage > 0.8) {
637
568
  return 'failed';
638
569
  } else if (percentage > 0.4) {
@@ -643,76 +574,153 @@ private percentageToState(
643
574
  }
644
575
  ```
645
576
 
646
- Implement caching to avoid redundant API calls for the same content.
577
+ Implement caching using Map or Redis to avoid redundant API calls for the same content.
647
578
 
648
579
  ## Displaying Validation Results
649
580
 
650
- Group results by severity (failed, warning, success) and display them in the UI:
651
-
652
- ```typescript highlight-display-results
653
- const failed = allResults.filter((r) => r.state === 'failed');
654
- const warnings = allResults.filter((r) => r.state === 'warning');
655
- const passed = allResults.filter((r) => r.state === 'success');
656
-
657
- // eslint-disable-next-line no-console
658
- console.log('Validation Summary:');
659
- // eslint-disable-next-line no-console
660
- console.log(` Violations: ${failed.length}`);
661
- // eslint-disable-next-line no-console
662
- console.log(` Warnings: ${warnings.length}`);
663
- // eslint-disable-next-line no-console
664
- console.log(` Passed: ${passed.length}`);
665
- ```
581
+ Group results by severity (failed, warning, success) and display them in the console:
582
+
583
+ ```javascript highlight-display-results
584
+ /**
585
+ * Displays validation results grouped by severity
586
+ */
587
+ function displayResults(results) {
588
+ const failed = results.filter((r) => r.state === 'failed');
589
+ const warnings = results.filter((r) => r.state === 'warning');
590
+ const passed = results.filter((r) => r.state === 'success');
591
+
592
+ console.log('\n=== Content Moderation Results ===\n');
593
+ console.log(`Total checks: ${results.length}`);
594
+ console.log(` Violations: ${failed.length}`);
595
+ console.log(` Warnings: ${warnings.length}`);
596
+ console.log(` Passed: ${passed.length}\n`);
597
+
598
+ if (failed.length > 0) {
599
+ console.log('❌ VIOLATIONS:');
600
+ failed.forEach((result) => {
601
+ const content = result.url || result.text?.substring(0, 50) + '...';
602
+ console.log(
603
+ ` - ${result.name}: Block ${result.blockId} (${result.blockType})`
604
+ );
605
+ console.log(` ${result.description}`);
606
+ console.log(` Content: ${content}\n`);
607
+ });
608
+ }
666
609
 
667
- Make results interactive by selecting the corresponding block when users click on a validation result:
610
+ if (warnings.length > 0) {
611
+ console.log('⚠️ WARNINGS:');
612
+ warnings.forEach((result) => {
613
+ const content = result.url || result.text?.substring(0, 50) + '...';
614
+ console.log(
615
+ ` - ${result.name}: Block ${result.blockId} (${result.blockType})`
616
+ );
617
+ console.log(` ${result.description}`);
618
+ console.log(` Content: ${content}\n`);
619
+ });
620
+ }
668
621
 
669
- ```typescript highlight-interactive-results
670
- if (failed.length > 0) {
671
- const blockToSelect = failed[0].blockId;
672
- engine.block
673
- .findAllSelected()
674
- .forEach((id) => engine.block.setSelected(id, false));
675
- engine.block.setSelected(blockToSelect, true);
622
+ return { failed, warnings, passed };
676
623
  }
677
624
  ```
678
625
 
679
- ## Integration Points
626
+ ## Export Validation
680
627
 
681
- Choose when to run validation based on your workflow:
628
+ Validate content before allowing export in server workflows:
682
629
 
683
- **Export Validation** — Validate when users export designs using `registerAction`:
630
+ ```javascript highlight-export-validation
631
+ /**
632
+ * Validates content before allowing export
633
+ */
634
+ async function validateForExport(engine) {
635
+ console.log('Validating design before export...');
684
636
 
685
- ```typescript
686
- cesdk.ui.registerAction('ly.img.export', async (engine) => {
687
637
  const imageResults = await checkImageContent(engine);
688
638
  const textResults = await checkTextContent(engine);
689
- const violations = [...imageResults, ...textResults].filter(
690
- (r) => r.state === 'failed'
691
- );
639
+ const allResults = [...imageResults, ...textResults];
640
+
641
+ const { failed } = displayResults(allResults);
692
642
 
693
- if (violations.length > 0) {
694
- alert(`Cannot export: ${violations.length} policy violation(s) detected.`);
695
- return;
643
+ if (failed.length > 0) {
644
+ console.error(
645
+ `\n❌ Export blocked: ${failed.length} policy violation(s) detected.\n`
646
+ );
647
+ return false;
696
648
  }
697
649
 
698
- const blob = await engine.block.export(engine.scene.get(), 'image/png');
699
- downloadBlob(blob, 'design.png');
700
- });
650
+ console.log('\n✅ Content validation passed. Export allowed.\n');
651
+ return true;
652
+ }
701
653
  ```
702
654
 
703
- **Other Integration Points**:
655
+ This pattern ensures content is checked at the critical point before generating final outputs.
656
+
657
+ ## Server Environment Setup
658
+
659
+ **Configuration**: Use environment variables to store API credentials and load scenes from templates:
660
+
661
+ ```javascript highlight-setup
662
+ /**
663
+ * Main demonstration function
664
+ */
665
+ async function main() {
666
+ console.log('🚀 Starting CE.SDK Content Moderation Demo...\n');
667
+
668
+ // Initialize the engine
669
+ const config = {
670
+ baseURL: process.env.IMGLY_LOCAL_ASSETS_URL,
671
+ license: process.env.CESDK_LICENSE || '',
672
+ logger: (level, ...args) => {
673
+ if (level === 'error' || level === 'warn') {
674
+ console.log(`[${level}]`, ...args);
675
+ }
676
+ }
677
+ };
678
+
679
+ const engine = await CreativeEngine.init(config);
680
+ console.log('✓ Engine initialized\n');
681
+
682
+ // Load a sample scene/template
683
+ // In production, use your actual scene URL or template
684
+ const templateURL =
685
+ 'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/templates/cesdk_postcard_1.scene';
686
+ await engine.scene.loadFromURL(templateURL);
687
+ const page = engine.block.findByType('page')[0];
688
+ console.log('✓ Scene loaded\n');
689
+ ```
704
690
 
705
- - Pre-upload validation: Check before allowing uploads to your platform
706
- - Review queue: Flag designs with warnings for manual review
707
- - Batch validation: Check all content on-demand when users click a button
691
+ **Headless Execution**: The server example loads a template scene that already contains content to moderate:
692
+
693
+ ```javascript highlight-create-sample-content
694
+ // The loaded scene already contains images and text
695
+ // In production, you would modify the scene content as needed
696
+ console.log('✓ Scene contains sample content for moderation\n');
697
+ ```
698
+
699
+ **Command-Line Interface**: Run validation checks from the command line:
700
+
701
+ ```javascript highlight-run-validation
702
+ // Validate content before export
703
+ const canExport = await validateForExport(engine);
704
+
705
+ if (canExport) {
706
+ // Export the design
707
+ const blob = await engine.block.export(page, 'image/png');
708
+ const buffer = Buffer.from(await blob.arrayBuffer());
709
+
710
+ // Save to file (optional)
711
+ const fs = await import('fs/promises');
712
+ await fs.writeFile('output.png', buffer);
713
+ console.log('✓ Design exported to output.png\n');
714
+ }
715
+ ```
708
716
 
709
717
  ## Best Practices
710
718
 
711
- **Security**: Always proxy API requests through your backend to protect credentials. Implement rate limiting and authentication.
719
+ **Security**: Store API keys in environment variables, never in code. Use `.env` files for local development and secret managers in production.
712
720
 
713
- **Performance**: Cache results by URL/text to avoid redundant calls. Process items in parallel with `Promise.all()`.
721
+ **Performance**: Cache results using Redis or similar for production workloads. Process items in parallel with `Promise.all()`.
714
722
 
715
- **User Experience**: Run checks asynchronously without blocking the UI. Provide clear error messages and interactive results.
723
+ **Error Handling**: Implement proper error handling with retries for API calls. Log all checks for compliance and auditing.
716
724
 
717
725
  **Timing**: Validate at export time for the best balance between policy enforcement and creative freedom.
718
726
 
@@ -740,22 +748,23 @@ cesdk.ui.registerAction('ly.img.export', async (engine) => {
740
748
  - `engine.block.getString(fill, 'fill/image/imageFileURI')` — Get image URL
741
749
  - `engine.block.getSourceSet(fill, 'fill/image/sourceSet')` — Get image source set
742
750
 
743
- **Selection**:
751
+ **Export**:
744
752
 
745
- - `engine.block.setSelected(id, bool)` — Select or deselect a block
746
- - `engine.block.findAllSelected()` — Get currently selected blocks
753
+ - `engine.block.export(blockId, mimeType)` — Export block as blob
747
754
 
748
755
  ## Next Steps
749
756
 
750
- Now that you understand content moderation, explore related validation features:
757
+ Now that you understand content moderation in Node.js, explore related features:
751
758
 
752
759
  - [Rules Overview](./rules/overview.md) — Learn about CE.SDK's comprehensive validation system
753
760
 
761
+
762
+
754
763
  ---
755
764
 
756
765
  ## More Resources
757
766
 
758
- - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
767
+ - **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
759
768
  - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
760
- - **[Web Documentation](./js.md)** - Interactive documentation with examples
761
- - **[Support](mailto:support@img.ly)** - Contact IMG.LY support
769
+ - **[Web Documentation](./node.md)** - Interactive documentation with examples
770
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support