@imgly/codesign-mcp 0.1.5 → 0.1.7

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 (1085) hide show
  1. package/README.md +56 -11
  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 +16 -30
  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 +136 -24
  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 +22 -4
  572. package/dist/config.d.ts.map +1 -1
  573. package/dist/config.js +32 -2
  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 +40 -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 +10 -2
  600. package/dist/engine/cesdk-adapter.d.ts.map +1 -1
  601. package/dist/engine/cesdk-adapter.js +17 -3
  602. package/dist/engine/cesdk-adapter.js.map +1 -1
  603. package/dist/engine/engine-capacity.d.ts +16 -0
  604. package/dist/engine/engine-capacity.d.ts.map +1 -0
  605. package/dist/engine/engine-capacity.js +48 -0
  606. package/dist/engine/engine-capacity.js.map +1 -0
  607. package/dist/engine/engine-slots.d.ts +48 -0
  608. package/dist/engine/engine-slots.d.ts.map +1 -0
  609. package/dist/engine/engine-slots.js +182 -0
  610. package/dist/engine/engine-slots.js.map +1 -0
  611. package/dist/engine/index.d.ts +1 -0
  612. package/dist/engine/index.d.ts.map +1 -1
  613. package/dist/engine/index.js +4 -0
  614. package/dist/engine/index.js.map +1 -1
  615. package/dist/engine/scene-resource-schemes.d.ts +2 -0
  616. package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
  617. package/dist/engine/scene-resource-schemes.js +20 -0
  618. package/dist/engine/scene-resource-schemes.js.map +1 -0
  619. package/dist/http/server.d.ts +0 -6
  620. package/dist/http/server.d.ts.map +1 -1
  621. package/dist/http/server.js +1 -2
  622. package/dist/http/server.js.map +1 -1
  623. package/dist/server.d.ts +0 -4
  624. package/dist/server.d.ts.map +1 -1
  625. package/dist/server.js +4 -60
  626. package/dist/server.js.map +1 -1
  627. package/dist/tools/asset-generate.d.ts.map +1 -1
  628. package/dist/tools/asset-generate.js +1 -8
  629. package/dist/tools/asset-generate.js.map +1 -1
  630. package/dist/tools/edit.d.ts +3 -0
  631. package/dist/tools/edit.d.ts.map +1 -1
  632. package/dist/tools/edit.js +145 -96
  633. package/dist/tools/edit.js.map +1 -1
  634. package/dist/tools/engine.d.ts +13 -0
  635. package/dist/tools/engine.d.ts.map +1 -1
  636. package/dist/tools/engine.js +28 -0
  637. package/dist/tools/engine.js.map +1 -1
  638. package/dist/tools/export.d.ts +3 -0
  639. package/dist/tools/export.d.ts.map +1 -1
  640. package/dist/tools/export.js +146 -108
  641. package/dist/tools/export.js.map +1 -1
  642. package/dist/tools/import.d.ts +12 -0
  643. package/dist/tools/import.d.ts.map +1 -0
  644. package/dist/tools/import.js +144 -0
  645. package/dist/tools/import.js.map +1 -0
  646. package/dist/tools/index.d.ts +3 -0
  647. package/dist/tools/index.d.ts.map +1 -1
  648. package/dist/tools/index.js +44 -4
  649. package/dist/tools/index.js.map +1 -1
  650. package/dist/tools/load.d.ts +26 -0
  651. package/dist/tools/load.d.ts.map +1 -0
  652. package/dist/tools/load.js +400 -0
  653. package/dist/tools/load.js.map +1 -0
  654. package/dist/tools/preview.d.ts +3 -0
  655. package/dist/tools/preview.d.ts.map +1 -1
  656. package/dist/tools/preview.js +79 -44
  657. package/dist/tools/preview.js.map +1 -1
  658. package/dist/tools/result.d.ts +1 -1
  659. package/dist/tools/result.js +2 -2
  660. package/dist/tools/result.js.map +1 -1
  661. package/dist/tools/spans.d.ts +45 -0
  662. package/dist/tools/spans.d.ts.map +1 -0
  663. package/dist/tools/spans.js +77 -0
  664. package/dist/tools/spans.js.map +1 -0
  665. package/dist/tools/telemetry-wrapper.d.ts +4 -0
  666. package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
  667. package/dist/tools/telemetry-wrapper.js +43 -0
  668. package/dist/tools/telemetry-wrapper.js.map +1 -0
  669. package/dist/viewer/cesdk-cdn.d.ts +16 -0
  670. package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
  671. package/dist/viewer/cesdk-cdn.js +30 -0
  672. package/dist/viewer/cesdk-cdn.js.map +1 -0
  673. package/dist/viewer/router.d.ts +6 -0
  674. package/dist/viewer/router.d.ts.map +1 -1
  675. package/dist/viewer/router.js +4 -1
  676. package/dist/viewer/router.js.map +1 -1
  677. package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
  678. package/dist/viewer/spa-assets.generated.js +2 -3
  679. package/dist/viewer/spa-assets.generated.js.map +1 -1
  680. package/dist/workspace/content-hash.d.ts +2 -0
  681. package/dist/workspace/content-hash.d.ts.map +1 -0
  682. package/dist/workspace/content-hash.js +15 -0
  683. package/dist/workspace/content-hash.js.map +1 -0
  684. package/package.json +19 -10
  685. package/assets/docs/guide/actions.md +0 -1038
  686. package/assets/docs/guide/animation/overview.md +0 -22
  687. package/assets/docs/guide/automation/batch-processing.md +0 -474
  688. package/assets/docs/guide/browser-support.md +0 -38
  689. package/assets/docs/guide/concepts/edit-modes.md +0 -431
  690. package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
  691. package/assets/docs/guide/create-audio/audio.md +0 -336
  692. package/assets/docs/guide/create-video/overview.md +0 -224
  693. package/assets/docs/guide/create-video/timeline-editor.md +0 -622
  694. package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
  695. package/assets/docs/guide/edit-image/vectorize.md +0 -204
  696. package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
  697. package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
  698. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
  699. package/assets/docs/guide/grid-and-rulers.md +0 -222
  700. package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
  701. package/assets/docs/guide/import-media/asset-library.md +0 -23
  702. package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
  703. package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
  704. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
  705. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
  706. package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
  707. package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
  708. package/assets/docs/guide/import-media/from-local-source.md +0 -20
  709. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
  710. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
  711. package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
  712. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
  713. package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
  714. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
  715. package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
  716. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
  717. package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
  718. package/assets/docs/guide/plugins/asset-sources.md +0 -553
  719. package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
  720. package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
  721. package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
  722. package/assets/docs/guide/starterkits/ai-editor.md +0 -749
  723. package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
  724. package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
  725. package/assets/docs/guide/starterkits/assets.md +0 -27
  726. package/assets/docs/guide/starterkits/auto-resize.md +0 -586
  727. package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
  728. package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
  729. package/assets/docs/guide/starterkits/content-moderation.md +0 -863
  730. package/assets/docs/guide/starterkits/creative-automation.md +0 -28
  731. package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
  732. package/assets/docs/guide/starterkits/customization.md +0 -29
  733. package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
  734. package/assets/docs/guide/starterkits/data-merge.md +0 -850
  735. package/assets/docs/guide/starterkits/design-editor.md +0 -698
  736. package/assets/docs/guide/starterkits/design-generation.md +0 -719
  737. package/assets/docs/guide/starterkits/design-validation.md +0 -808
  738. package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
  739. package/assets/docs/guide/starterkits/export-options.md +0 -724
  740. package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
  741. package/assets/docs/guide/starterkits/extensibility.md +0 -28
  742. package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
  743. package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
  744. package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
  745. package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
  746. package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
  747. package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
  748. package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
  749. package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
  750. package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
  751. package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
  752. package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
  753. package/assets/docs/guide/starterkits/photo-editor.md +0 -755
  754. package/assets/docs/guide/starterkits/photo-ui.md +0 -186
  755. package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
  756. package/assets/docs/guide/starterkits/placeholders.md +0 -678
  757. package/assets/docs/guide/starterkits/player.md +0 -405
  758. package/assets/docs/guide/starterkits/plugins.md +0 -25
  759. package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
  760. package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
  761. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
  762. package/assets/docs/guide/starterkits/product-editor.md +0 -773
  763. package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
  764. package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
  765. package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
  766. package/assets/docs/guide/starterkits/start-with-image.md +0 -684
  767. package/assets/docs/guide/starterkits/start-with-video.md +0 -651
  768. package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
  769. package/assets/docs/guide/starterkits/templating.md +0 -23
  770. package/assets/docs/guide/starterkits/theming.md +0 -662
  771. package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
  772. package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
  773. package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
  774. package/assets/docs/guide/starterkits/version-history.md +0 -745
  775. package/assets/docs/guide/starterkits/video-animations.md +0 -853
  776. package/assets/docs/guide/starterkits/video-captions.md +0 -884
  777. package/assets/docs/guide/starterkits/video-editing.md +0 -25
  778. package/assets/docs/guide/starterkits/video-editor.md +0 -696
  779. package/assets/docs/guide/starterkits/video-export-options.md +0 -676
  780. package/assets/docs/guide/starterkits/viewer.md +0 -400
  781. package/assets/docs/guide/starterkits.md +0 -41
  782. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
  783. package/assets/docs/guide/text/custom-fonts.md +0 -401
  784. package/assets/docs/guide/text/decorations.md +0 -330
  785. package/assets/docs/guide/text/enumerations.md +0 -258
  786. package/assets/docs/guide/to-v1-10.md +0 -131
  787. package/assets/docs/guide/to-v1-13.md +0 -165
  788. package/assets/docs/guide/to-v1-32.md +0 -110
  789. package/assets/docs/guide/to-v1-69.md +0 -468
  790. package/assets/docs/guide/to-v1-72.md +0 -193
  791. package/assets/docs/guide/use-templates/library.md +0 -450
  792. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
  793. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
  794. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
  795. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
  796. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
  797. package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
  798. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
  799. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
  800. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
  801. package/assets/docs/guide/user-interface/ai-integration.md +0 -30
  802. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
  803. package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
  804. package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
  805. package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
  806. package/assets/docs/guide/user-interface/appearance.md +0 -23
  807. package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
  808. package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
  809. package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
  810. package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
  811. package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
  812. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
  813. package/assets/docs/guide/user-interface/customization/dock.md +0 -399
  814. package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
  815. package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
  816. package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
  817. package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
  818. package/assets/docs/guide/user-interface/customization/panel.md +0 -605
  819. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
  820. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
  821. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
  822. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
  823. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
  824. package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
  825. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
  826. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
  827. package/assets/docs/guide/user-interface/customization/reference.md +0 -12
  828. package/assets/docs/guide/user-interface/customization.md +0 -39
  829. package/assets/docs/guide/user-interface/localization.md +0 -633
  830. package/assets/docs/guide/user-interface/overview.md +0 -167
  831. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
  832. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
  833. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
  834. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
  835. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
  836. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
  837. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
  838. package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
  839. package/assets/docs/guide/user-interface.md +0 -25
  840. package/assets/prompts/evals-assetGenerate.md +0 -12
  841. package/assets/prompts/evals-brutalistCore.md +0 -34
  842. package/assets/prompts/evals-danskCatalogue.md +0 -31
  843. package/assets/prompts/evals-exportRoundTrip.md +0 -12
  844. package/assets/prompts/evals-inspectPriorCode.md +0 -16
  845. package/assets/prompts/evals-listProjectFiles.md +0 -6
  846. package/assets/prompts/evals-readAndExplainScript.md +0 -6
  847. package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
  848. package/assets/prompts/evals-rewindRecovery.md +0 -10
  849. package/assets/prompts/evals-searchAcrossFiles.md +0 -6
  850. package/assets/prompts/evals-weddingCard.md +0 -20
  851. package/assets/prompts/explain.md +0 -6
  852. package/assets/prompts/review.md +0 -6
  853. package/dist/dashboard/router.d.ts +0 -3
  854. package/dist/dashboard/router.d.ts.map +0 -1
  855. package/dist/dashboard/router.js +0 -19
  856. package/dist/dashboard/router.js.map +0 -1
  857. package/dist/dashboard/spa-assets.generated.d.ts +0 -2
  858. package/dist/dashboard/spa-assets.generated.d.ts.map +0 -1
  859. package/dist/dashboard/spa-assets.generated.js +0 -220
  860. package/dist/dashboard/spa-assets.generated.js.map +0 -1
  861. package/dist/frontmatter.d.ts +0 -15
  862. package/dist/frontmatter.d.ts.map +0 -1
  863. package/dist/frontmatter.js +0 -46
  864. package/dist/frontmatter.js.map +0 -1
  865. package/dist/metrics/mount.d.ts +0 -11
  866. package/dist/metrics/mount.d.ts.map +0 -1
  867. package/dist/metrics/mount.js +0 -13
  868. package/dist/metrics/mount.js.map +0 -1
  869. package/dist/metrics/recorder.d.ts +0 -55
  870. package/dist/metrics/recorder.d.ts.map +0 -1
  871. package/dist/metrics/recorder.js +0 -97
  872. package/dist/metrics/recorder.js.map +0 -1
  873. package/dist/test/test/cli/dispatcher.test.d.ts +0 -2
  874. package/dist/test/test/cli/dispatcher.test.d.ts.map +0 -1
  875. package/dist/test/test/cli/dispatcher.test.js +0 -47
  876. package/dist/test/test/cli/dispatcher.test.js.map +0 -1
  877. package/dist/test/test/cli/redirect-console.test.d.ts +0 -2
  878. package/dist/test/test/cli/redirect-console.test.d.ts.map +0 -1
  879. package/dist/test/test/cli/redirect-console.test.js +0 -47
  880. package/dist/test/test/cli/redirect-console.test.js.map +0 -1
  881. package/dist/test/test/cli/resolve-license.test.d.ts +0 -2
  882. package/dist/test/test/cli/resolve-license.test.d.ts.map +0 -1
  883. package/dist/test/test/cli/resolve-license.test.js +0 -20
  884. package/dist/test/test/cli/resolve-license.test.js.map +0 -1
  885. package/dist/test/test/cli/stdio-license.test.d.ts +0 -2
  886. package/dist/test/test/cli/stdio-license.test.d.ts.map +0 -1
  887. package/dist/test/test/cli/stdio-license.test.js +0 -19
  888. package/dist/test/test/cli/stdio-license.test.js.map +0 -1
  889. package/dist/test/test/config.test.d.ts +0 -2
  890. package/dist/test/test/config.test.d.ts.map +0 -1
  891. package/dist/test/test/config.test.js +0 -91
  892. package/dist/test/test/config.test.js.map +0 -1
  893. package/dist/test/test/cross-ref.test.d.ts +0 -2
  894. package/dist/test/test/cross-ref.test.d.ts.map +0 -1
  895. package/dist/test/test/cross-ref.test.js +0 -39
  896. package/dist/test/test/cross-ref.test.js.map +0 -1
  897. package/dist/test/test/engine/asset-sources.test.d.ts +0 -2
  898. package/dist/test/test/engine/asset-sources.test.d.ts.map +0 -1
  899. package/dist/test/test/engine/asset-sources.test.js +0 -100
  900. package/dist/test/test/engine/asset-sources.test.js.map +0 -1
  901. package/dist/test/test/engine/mutex.test.d.ts +0 -2
  902. package/dist/test/test/engine/mutex.test.d.ts.map +0 -1
  903. package/dist/test/test/engine/mutex.test.js +0 -63
  904. package/dist/test/test/engine/mutex.test.js.map +0 -1
  905. package/dist/test/test/engine/session.test.d.ts +0 -2
  906. package/dist/test/test/engine/session.test.d.ts.map +0 -1
  907. package/dist/test/test/engine/session.test.js +0 -159
  908. package/dist/test/test/engine/session.test.js.map +0 -1
  909. package/dist/test/test/engine/unsplash-source.test.d.ts +0 -2
  910. package/dist/test/test/engine/unsplash-source.test.d.ts.map +0 -1
  911. package/dist/test/test/engine/unsplash-source.test.js +0 -129
  912. package/dist/test/test/engine/unsplash-source.test.js.map +0 -1
  913. package/dist/test/test/engine/uri-resolver.test.d.ts +0 -2
  914. package/dist/test/test/engine/uri-resolver.test.d.ts.map +0 -1
  915. package/dist/test/test/engine/uri-resolver.test.js +0 -38
  916. package/dist/test/test/engine/uri-resolver.test.js.map +0 -1
  917. package/dist/test/test/frontmatter.test.d.ts +0 -2
  918. package/dist/test/test/frontmatter.test.d.ts.map +0 -1
  919. package/dist/test/test/frontmatter.test.js +0 -55
  920. package/dist/test/test/frontmatter.test.js.map +0 -1
  921. package/dist/test/test/gateway/hosted-stub.test.d.ts +0 -2
  922. package/dist/test/test/gateway/hosted-stub.test.d.ts.map +0 -1
  923. package/dist/test/test/gateway/hosted-stub.test.js +0 -11
  924. package/dist/test/test/gateway/hosted-stub.test.js.map +0 -1
  925. package/dist/test/test/gateway/local.test.d.ts +0 -2
  926. package/dist/test/test/gateway/local.test.d.ts.map +0 -1
  927. package/dist/test/test/gateway/local.test.js +0 -29
  928. package/dist/test/test/gateway/local.test.js.map +0 -1
  929. package/dist/test/test/handbook-contract.test.d.ts +0 -2
  930. package/dist/test/test/handbook-contract.test.d.ts.map +0 -1
  931. package/dist/test/test/handbook-contract.test.js +0 -75
  932. package/dist/test/test/handbook-contract.test.js.map +0 -1
  933. package/dist/test/test/http/server.test.d.ts +0 -2
  934. package/dist/test/test/http/server.test.d.ts.map +0 -1
  935. package/dist/test/test/http/server.test.js +0 -374
  936. package/dist/test/test/http/server.test.js.map +0 -1
  937. package/dist/test/test/http/session-id-header.test.d.ts +0 -2
  938. package/dist/test/test/http/session-id-header.test.d.ts.map +0 -1
  939. package/dist/test/test/http/session-id-header.test.js +0 -76
  940. package/dist/test/test/http/session-id-header.test.js.map +0 -1
  941. package/dist/test/test/http/session-manager.test.d.ts +0 -2
  942. package/dist/test/test/http/session-manager.test.d.ts.map +0 -1
  943. package/dist/test/test/http/session-manager.test.js +0 -97
  944. package/dist/test/test/http/session-manager.test.js.map +0 -1
  945. package/dist/test/test/http/workspace-auth.test.d.ts +0 -2
  946. package/dist/test/test/http/workspace-auth.test.d.ts.map +0 -1
  947. package/dist/test/test/http/workspace-auth.test.js +0 -41
  948. package/dist/test/test/http/workspace-auth.test.js.map +0 -1
  949. package/dist/test/test/metrics/mount.test.d.ts +0 -2
  950. package/dist/test/test/metrics/mount.test.d.ts.map +0 -1
  951. package/dist/test/test/metrics/mount.test.js +0 -59
  952. package/dist/test/test/metrics/mount.test.js.map +0 -1
  953. package/dist/test/test/metrics/recorder.test.d.ts +0 -2
  954. package/dist/test/test/metrics/recorder.test.d.ts.map +0 -1
  955. package/dist/test/test/metrics/recorder.test.js +0 -118
  956. package/dist/test/test/metrics/recorder.test.js.map +0 -1
  957. package/dist/test/test/revisions/hash.test.d.ts +0 -2
  958. package/dist/test/test/revisions/hash.test.d.ts.map +0 -1
  959. package/dist/test/test/revisions/hash.test.js +0 -33
  960. package/dist/test/test/revisions/hash.test.js.map +0 -1
  961. package/dist/test/test/revisions/store.test.d.ts +0 -2
  962. package/dist/test/test/revisions/store.test.d.ts.map +0 -1
  963. package/dist/test/test/revisions/store.test.js +0 -315
  964. package/dist/test/test/revisions/store.test.js.map +0 -1
  965. package/dist/test/test/server.metrics.test.d.ts +0 -2
  966. package/dist/test/test/server.metrics.test.d.ts.map +0 -1
  967. package/dist/test/test/server.metrics.test.js +0 -87
  968. package/dist/test/test/server.metrics.test.js.map +0 -1
  969. package/dist/test/test/server.test.d.ts +0 -2
  970. package/dist/test/test/server.test.d.ts.map +0 -1
  971. package/dist/test/test/server.test.js +0 -186
  972. package/dist/test/test/server.test.js.map +0 -1
  973. package/dist/test/test/skill-tools.test.d.ts +0 -2
  974. package/dist/test/test/skill-tools.test.d.ts.map +0 -1
  975. package/dist/test/test/skill-tools.test.js +0 -84
  976. package/dist/test/test/skill-tools.test.js.map +0 -1
  977. package/dist/test/test/smoke.test.d.ts +0 -2
  978. package/dist/test/test/smoke.test.d.ts.map +0 -1
  979. package/dist/test/test/smoke.test.js +0 -8
  980. package/dist/test/test/smoke.test.js.map +0 -1
  981. package/dist/test/test/tools/asset-generate.test.d.ts +0 -2
  982. package/dist/test/test/tools/asset-generate.test.d.ts.map +0 -1
  983. package/dist/test/test/tools/asset-generate.test.js +0 -66
  984. package/dist/test/test/tools/asset-generate.test.js.map +0 -1
  985. package/dist/test/test/tools/asset-search.test.d.ts +0 -2
  986. package/dist/test/test/tools/asset-search.test.d.ts.map +0 -1
  987. package/dist/test/test/tools/asset-search.test.js +0 -121
  988. package/dist/test/test/tools/asset-search.test.js.map +0 -1
  989. package/dist/test/test/tools/edit.test.d.ts +0 -2
  990. package/dist/test/test/tools/edit.test.d.ts.map +0 -1
  991. package/dist/test/test/tools/edit.test.js +0 -267
  992. package/dist/test/test/tools/edit.test.js.map +0 -1
  993. package/dist/test/test/tools/export.test.d.ts +0 -2
  994. package/dist/test/test/tools/export.test.d.ts.map +0 -1
  995. package/dist/test/test/tools/export.test.js +0 -174
  996. package/dist/test/test/tools/export.test.js.map +0 -1
  997. package/dist/test/test/tools/history.test.d.ts +0 -2
  998. package/dist/test/test/tools/history.test.d.ts.map +0 -1
  999. package/dist/test/test/tools/history.test.js +0 -29
  1000. package/dist/test/test/tools/history.test.js.map +0 -1
  1001. package/dist/test/test/tools/index.test.d.ts +0 -2
  1002. package/dist/test/test/tools/index.test.d.ts.map +0 -1
  1003. package/dist/test/test/tools/index.test.js +0 -55
  1004. package/dist/test/test/tools/index.test.js.map +0 -1
  1005. package/dist/test/test/tools/inspect.test.d.ts +0 -2
  1006. package/dist/test/test/tools/inspect.test.d.ts.map +0 -1
  1007. package/dist/test/test/tools/inspect.test.js +0 -62
  1008. package/dist/test/test/tools/inspect.test.js.map +0 -1
  1009. package/dist/test/test/tools/list.test.d.ts +0 -2
  1010. package/dist/test/test/tools/list.test.d.ts.map +0 -1
  1011. package/dist/test/test/tools/list.test.js +0 -23
  1012. package/dist/test/test/tools/list.test.js.map +0 -1
  1013. package/dist/test/test/tools/metrics.test.d.ts +0 -2
  1014. package/dist/test/test/tools/metrics.test.d.ts.map +0 -1
  1015. package/dist/test/test/tools/metrics.test.js +0 -29
  1016. package/dist/test/test/tools/metrics.test.js.map +0 -1
  1017. package/dist/test/test/tools/open-editor.test.d.ts +0 -2
  1018. package/dist/test/test/tools/open-editor.test.d.ts.map +0 -1
  1019. package/dist/test/test/tools/open-editor.test.js +0 -53
  1020. package/dist/test/test/tools/open-editor.test.js.map +0 -1
  1021. package/dist/test/test/tools/preview.test.d.ts +0 -2
  1022. package/dist/test/test/tools/preview.test.d.ts.map +0 -1
  1023. package/dist/test/test/tools/preview.test.js +0 -75
  1024. package/dist/test/test/tools/preview.test.js.map +0 -1
  1025. package/dist/test/test/tools/rename.test.d.ts +0 -2
  1026. package/dist/test/test/tools/rename.test.d.ts.map +0 -1
  1027. package/dist/test/test/tools/rename.test.js +0 -16
  1028. package/dist/test/test/tools/rename.test.js.map +0 -1
  1029. package/dist/test/test/tools/save.test.d.ts +0 -2
  1030. package/dist/test/test/tools/save.test.d.ts.map +0 -1
  1031. package/dist/test/test/tools/save.test.js +0 -137
  1032. package/dist/test/test/tools/save.test.js.map +0 -1
  1033. package/dist/test/test/viewer/broadcaster.test.d.ts +0 -2
  1034. package/dist/test/test/viewer/broadcaster.test.d.ts.map +0 -1
  1035. package/dist/test/test/viewer/broadcaster.test.js +0 -53
  1036. package/dist/test/test/viewer/broadcaster.test.js.map +0 -1
  1037. package/dist/test/test/viewer/resource-route.test.d.ts +0 -2
  1038. package/dist/test/test/viewer/resource-route.test.d.ts.map +0 -1
  1039. package/dist/test/test/viewer/resource-route.test.js +0 -70
  1040. package/dist/test/test/viewer/resource-route.test.js.map +0 -1
  1041. package/dist/test/test/viewer/router.test.d.ts +0 -2
  1042. package/dist/test/test/viewer/router.test.d.ts.map +0 -1
  1043. package/dist/test/test/viewer/router.test.js +0 -227
  1044. package/dist/test/test/viewer/router.test.js.map +0 -1
  1045. package/dist/test/test/viewer/session-mount.test.d.ts +0 -2
  1046. package/dist/test/test/viewer/session-mount.test.d.ts.map +0 -1
  1047. package/dist/test/test/viewer/session-mount.test.js +0 -52
  1048. package/dist/test/test/viewer/session-mount.test.js.map +0 -1
  1049. package/dist/test/test/viewer/url-builder.test.d.ts +0 -2
  1050. package/dist/test/test/viewer/url-builder.test.d.ts.map +0 -1
  1051. package/dist/test/test/viewer/url-builder.test.js +0 -98
  1052. package/dist/test/test/viewer/url-builder.test.js.map +0 -1
  1053. package/dist/test/test/workspace/hosted-stub.test.d.ts +0 -2
  1054. package/dist/test/test/workspace/hosted-stub.test.d.ts.map +0 -1
  1055. package/dist/test/test/workspace/hosted-stub.test.js +0 -30
  1056. package/dist/test/test/workspace/hosted-stub.test.js.map +0 -1
  1057. package/dist/test/test/workspace/in-memory.test.d.ts +0 -2
  1058. package/dist/test/test/workspace/in-memory.test.d.ts.map +0 -1
  1059. package/dist/test/test/workspace/in-memory.test.js +0 -4
  1060. package/dist/test/test/workspace/in-memory.test.js.map +0 -1
  1061. package/dist/test/test/workspace/node-fs.test.d.ts +0 -2
  1062. package/dist/test/test/workspace/node-fs.test.d.ts.map +0 -1
  1063. package/dist/test/test/workspace/node-fs.test.js +0 -20
  1064. package/dist/test/test/workspace/node-fs.test.js.map +0 -1
  1065. package/dist/test/test/workspace/s3.test.d.ts +0 -2
  1066. package/dist/test/test/workspace/s3.test.d.ts.map +0 -1
  1067. package/dist/test/test/workspace/s3.test.js +0 -153
  1068. package/dist/test/test/workspace/s3.test.js.map +0 -1
  1069. package/dist/test/test/workspace/scoped.test.d.ts +0 -2
  1070. package/dist/test/test/workspace/scoped.test.d.ts.map +0 -1
  1071. package/dist/test/test/workspace/scoped.test.js +0 -59
  1072. package/dist/test/test/workspace/scoped.test.js.map +0 -1
  1073. package/dist/test/test/workspace/shared-contract.d.ts +0 -3
  1074. package/dist/test/test/workspace/shared-contract.d.ts.map +0 -1
  1075. package/dist/test/test/workspace/shared-contract.js +0 -92
  1076. package/dist/test/test/workspace/shared-contract.js.map +0 -1
  1077. package/dist/test/tsconfig.test.tsbuildinfo +0 -1
  1078. package/dist/test/vitest.config.d.ts +0 -3
  1079. package/dist/test/vitest.config.d.ts.map +0 -1
  1080. package/dist/test/vitest.config.js +0 -8
  1081. package/dist/test/vitest.config.js.map +0 -1
  1082. package/dist/tools/metrics.d.ts +0 -11
  1083. package/dist/tools/metrics.d.ts.map +0 -1
  1084. package/dist/tools/metrics.js +0 -28
  1085. package/dist/tools/metrics.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