@imgly/codesign-mcp 0.1.0

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 (816) hide show
  1. package/LICENSE.md +16 -0
  2. package/README.md +158 -0
  3. package/assets/docs/api/SKILL.md +49 -0
  4. package/assets/docs/api/index.d.ts +10518 -0
  5. package/assets/docs/guide/SKILL.md +142 -0
  6. package/assets/docs/guide/actions.md +1038 -0
  7. package/assets/docs/guide/animation/create/base.md +467 -0
  8. package/assets/docs/guide/animation/create/text.md +453 -0
  9. package/assets/docs/guide/animation/create.md +558 -0
  10. package/assets/docs/guide/animation/edit.md +501 -0
  11. package/assets/docs/guide/animation/overview.md +22 -0
  12. package/assets/docs/guide/animation/types.md +430 -0
  13. package/assets/docs/guide/animation.md +23 -0
  14. package/assets/docs/guide/api/AssetAPI.md +602 -0
  15. package/assets/docs/guide/api/BlockAPI.md +6152 -0
  16. package/assets/docs/guide/api/CreativeEngine.md +180 -0
  17. package/assets/docs/guide/api/EditorAPI.md +1261 -0
  18. package/assets/docs/guide/api/EventAPI.md +25 -0
  19. package/assets/docs/guide/api/SceneAPI.md +729 -0
  20. package/assets/docs/guide/api/VariableAPI.md +59 -0
  21. package/assets/docs/guide/api/types.md +71 -0
  22. package/assets/docs/guide/api-reference/overview.md +20 -0
  23. package/assets/docs/guide/automation/auto-resize.md +412 -0
  24. package/assets/docs/guide/automation/batch-processing.md +474 -0
  25. package/assets/docs/guide/automation/data-merge.md +406 -0
  26. package/assets/docs/guide/automation/design-generation.md +107 -0
  27. package/assets/docs/guide/automation/overview.md +16 -0
  28. package/assets/docs/guide/automation.md +24 -0
  29. package/assets/docs/guide/browser-support.md +38 -0
  30. package/assets/docs/guide/capabilities.md +18 -0
  31. package/assets/docs/guide/colors/adjust.md +551 -0
  32. package/assets/docs/guide/colors/apply.md +349 -0
  33. package/assets/docs/guide/colors/basics.md +440 -0
  34. package/assets/docs/guide/colors/conversion.md +504 -0
  35. package/assets/docs/guide/colors/create-color-palette.md +426 -0
  36. package/assets/docs/guide/colors/for-print/cmyk.md +577 -0
  37. package/assets/docs/guide/colors/for-print/spot.md +751 -0
  38. package/assets/docs/guide/colors/for-print.md +21 -0
  39. package/assets/docs/guide/colors/for-screen/p3.md +60 -0
  40. package/assets/docs/guide/colors/for-screen/srgb.md +463 -0
  41. package/assets/docs/guide/colors/for-screen.md +21 -0
  42. package/assets/docs/guide/colors/overview.md +20 -0
  43. package/assets/docs/guide/colors/replace.md +535 -0
  44. package/assets/docs/guide/colors.md +28 -0
  45. package/assets/docs/guide/compatibility.md +27 -0
  46. package/assets/docs/guide/concepts/architecture.md +99 -0
  47. package/assets/docs/guide/concepts/assets.md +360 -0
  48. package/assets/docs/guide/concepts/blocks.md +750 -0
  49. package/assets/docs/guide/concepts/buffers.md +546 -0
  50. package/assets/docs/guide/concepts/design-units.md +333 -0
  51. package/assets/docs/guide/concepts/edit-modes.md +431 -0
  52. package/assets/docs/guide/concepts/editing-workflow.md +303 -0
  53. package/assets/docs/guide/concepts/events.md +466 -0
  54. package/assets/docs/guide/concepts/headless-mode/browser.md +291 -0
  55. package/assets/docs/guide/concepts/pages.md +396 -0
  56. package/assets/docs/guide/concepts/resources.md +496 -0
  57. package/assets/docs/guide/concepts/scenes.md +443 -0
  58. package/assets/docs/guide/concepts/templating.md +194 -0
  59. package/assets/docs/guide/concepts/terminology.md +296 -0
  60. package/assets/docs/guide/concepts/undo-and-history.md +461 -0
  61. package/assets/docs/guide/concepts.md +38 -0
  62. package/assets/docs/guide/configuration.md +469 -0
  63. package/assets/docs/guide/conversion/overview.md +22 -0
  64. package/assets/docs/guide/conversion/to-base64.md +234 -0
  65. package/assets/docs/guide/conversion/to-pdf.md +616 -0
  66. package/assets/docs/guide/conversion/to-png.md +290 -0
  67. package/assets/docs/guide/conversion.md +23 -0
  68. package/assets/docs/guide/create-audio/audio/add-music.md +430 -0
  69. package/assets/docs/guide/create-audio/audio/add-sound-effects.md +664 -0
  70. package/assets/docs/guide/create-audio/audio/loop.md +370 -0
  71. package/assets/docs/guide/create-audio/audio.md +336 -0
  72. package/assets/docs/guide/create-composition/add-background.md +395 -0
  73. package/assets/docs/guide/create-composition/blend-modes.md +372 -0
  74. package/assets/docs/guide/create-composition/collage.md +432 -0
  75. package/assets/docs/guide/create-composition/group-and-ungroup.md +388 -0
  76. package/assets/docs/guide/create-composition/layer-management.md +503 -0
  77. package/assets/docs/guide/create-composition/layout.md +396 -0
  78. package/assets/docs/guide/create-composition/lock-design.md +362 -0
  79. package/assets/docs/guide/create-composition/multi-page.md +204 -0
  80. package/assets/docs/guide/create-composition/overview.md +18 -0
  81. package/assets/docs/guide/create-composition/programmatic.md +593 -0
  82. package/assets/docs/guide/create-composition.md +30 -0
  83. package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +688 -0
  84. package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +600 -0
  85. package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +647 -0
  86. package/assets/docs/guide/create-templates/add-dynamic-content.md +307 -0
  87. package/assets/docs/guide/create-templates/add-to-template-library.md +297 -0
  88. package/assets/docs/guide/create-templates/edit-or-remove.md +441 -0
  89. package/assets/docs/guide/create-templates/from-scratch.md +558 -0
  90. package/assets/docs/guide/create-templates/import/from-scene-file.md +440 -0
  91. package/assets/docs/guide/create-templates/import.md +244 -0
  92. package/assets/docs/guide/create-templates/lock.md +325 -0
  93. package/assets/docs/guide/create-templates/overview.md +16 -0
  94. package/assets/docs/guide/create-templates.md +32 -0
  95. package/assets/docs/guide/create-video/audio/adjust-speed.md +302 -0
  96. package/assets/docs/guide/create-video/audio/adjust-volume.md +346 -0
  97. package/assets/docs/guide/create-video/control.md +285 -0
  98. package/assets/docs/guide/create-video/limitations.md +396 -0
  99. package/assets/docs/guide/create-video/overview.md +224 -0
  100. package/assets/docs/guide/create-video/timeline-editor.md +622 -0
  101. package/assets/docs/guide/create-video/update-caption-presets.md +676 -0
  102. package/assets/docs/guide/create-video.md +32 -0
  103. package/assets/docs/guide/edit-image/add-watermark.md +497 -0
  104. package/assets/docs/guide/edit-image/overview.md +22 -0
  105. package/assets/docs/guide/edit-image/remove-bg.md +420 -0
  106. package/assets/docs/guide/edit-image/replace-colors.md +680 -0
  107. package/assets/docs/guide/edit-image/transform/crop.md +523 -0
  108. package/assets/docs/guide/edit-image/transform/move.md +279 -0
  109. package/assets/docs/guide/edit-image/transform/resize.md +301 -0
  110. package/assets/docs/guide/edit-image/transform/rotate.md +408 -0
  111. package/assets/docs/guide/edit-image/transform/scale.md +278 -0
  112. package/assets/docs/guide/edit-image/transform.md +24 -0
  113. package/assets/docs/guide/edit-image/vectorize.md +204 -0
  114. package/assets/docs/guide/edit-image.md +25 -0
  115. package/assets/docs/guide/edit-video/add-captions.md +589 -0
  116. package/assets/docs/guide/edit-video/add-watermark.md +429 -0
  117. package/assets/docs/guide/edit-video/join-and-arrange.md +540 -0
  118. package/assets/docs/guide/edit-video/redaction.md +544 -0
  119. package/assets/docs/guide/edit-video/split.md +634 -0
  120. package/assets/docs/guide/edit-video/transform/crop.md +380 -0
  121. package/assets/docs/guide/edit-video/transform/flip.md +182 -0
  122. package/assets/docs/guide/edit-video/transform/move.md +413 -0
  123. package/assets/docs/guide/edit-video/transform/resize.md +534 -0
  124. package/assets/docs/guide/edit-video/transform/rotate.md +312 -0
  125. package/assets/docs/guide/edit-video/transform/scale.md +603 -0
  126. package/assets/docs/guide/edit-video/transform.md +25 -0
  127. package/assets/docs/guide/edit-video/trim.md +773 -0
  128. package/assets/docs/guide/engine-interface.md +108 -0
  129. package/assets/docs/guide/export-save-publish/create-thumbnail.md +292 -0
  130. package/assets/docs/guide/export-save-publish/export/compress.md +639 -0
  131. package/assets/docs/guide/export-save-publish/export/overview.md +576 -0
  132. package/assets/docs/guide/export-save-publish/export/partial-export.md +694 -0
  133. package/assets/docs/guide/export-save-publish/export/size-limits.md +401 -0
  134. package/assets/docs/guide/export-save-publish/export/to-html5.md +474 -0
  135. package/assets/docs/guide/export-save-publish/export/to-jpeg.md +312 -0
  136. package/assets/docs/guide/export-save-publish/export/to-mp4.md +364 -0
  137. package/assets/docs/guide/export-save-publish/export/to-pdf.md +389 -0
  138. package/assets/docs/guide/export-save-publish/export/to-png.md +255 -0
  139. package/assets/docs/guide/export-save-publish/export/to-raw-data.md +303 -0
  140. package/assets/docs/guide/export-save-publish/export/to-webp.md +261 -0
  141. package/assets/docs/guide/export-save-publish/export/with-color-mask.md +278 -0
  142. package/assets/docs/guide/export-save-publish/export.md +36 -0
  143. package/assets/docs/guide/export-save-publish/for-printing.md +423 -0
  144. package/assets/docs/guide/export-save-publish/for-social-media.md +318 -0
  145. package/assets/docs/guide/export-save-publish/pre-export-validation.md +698 -0
  146. package/assets/docs/guide/export-save-publish/save.md +340 -0
  147. package/assets/docs/guide/export-save-publish/store-custom-metadata.md +367 -0
  148. package/assets/docs/guide/file-format-support.md +34 -0
  149. package/assets/docs/guide/fills/color.md +678 -0
  150. package/assets/docs/guide/fills/image.md +539 -0
  151. package/assets/docs/guide/fills/overview.md +144 -0
  152. package/assets/docs/guide/fills/video.md +641 -0
  153. package/assets/docs/guide/fills.md +24 -0
  154. package/assets/docs/guide/filters-and-effects/apply.md +1019 -0
  155. package/assets/docs/guide/filters-and-effects/blur.md +382 -0
  156. package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +445 -0
  157. package/assets/docs/guide/filters-and-effects/create-custom-filters.md +614 -0
  158. package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +426 -0
  159. package/assets/docs/guide/filters-and-effects/distortion.md +527 -0
  160. package/assets/docs/guide/filters-and-effects/duotone.md +602 -0
  161. package/assets/docs/guide/filters-and-effects/gradients.md +1311 -0
  162. package/assets/docs/guide/filters-and-effects/overview.md +22 -0
  163. package/assets/docs/guide/filters-and-effects/support.md +623 -0
  164. package/assets/docs/guide/filters-and-effects.md +28 -0
  165. package/assets/docs/guide/get-started/agent-skills.md +119 -0
  166. package/assets/docs/guide/get-started/build-with-ai.md +45 -0
  167. package/assets/docs/guide/get-started/mcp-server.md +119 -0
  168. package/assets/docs/guide/get-started/overview.md +28 -0
  169. package/assets/docs/guide/get-started/vanilla-js/quickstart.md +175 -0
  170. package/assets/docs/guide/grid-and-rulers.md +222 -0
  171. package/assets/docs/guide/guides/export-save-publish/export/audio.md +224 -0
  172. package/assets/docs/guide/guides/text/rendering-internals.md +796 -0
  173. package/assets/docs/guide/guides.md +49 -0
  174. package/assets/docs/guide/import-media/asset-library.md +23 -0
  175. package/assets/docs/guide/import-media/asset-panel/basics.md +324 -0
  176. package/assets/docs/guide/import-media/asset-panel/customize.md +478 -0
  177. package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +415 -0
  178. package/assets/docs/guide/import-media/asset-panel/thumbnails.md +633 -0
  179. package/assets/docs/guide/import-media/capture-from-camera/record-video.md +137 -0
  180. package/assets/docs/guide/import-media/capture-from-camera.md +20 -0
  181. package/assets/docs/guide/import-media/concepts.md +173 -0
  182. package/assets/docs/guide/import-media/content-json-schema.md +615 -0
  183. package/assets/docs/guide/import-media/default-assets.md +381 -0
  184. package/assets/docs/guide/import-media/edit-or-remove-assets.md +489 -0
  185. package/assets/docs/guide/import-media/file-format-support.md +178 -0
  186. package/assets/docs/guide/import-media/from-local-source/user-upload.md +438 -0
  187. package/assets/docs/guide/import-media/from-local-source.md +20 -0
  188. package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +390 -0
  189. package/assets/docs/guide/import-media/from-remote-source/getty-images.md +627 -0
  190. package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +625 -0
  191. package/assets/docs/guide/import-media/from-remote-source/pexels.md +692 -0
  192. package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +473 -0
  193. package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +497 -0
  194. package/assets/docs/guide/import-media/from-remote-source/third-party.md +51 -0
  195. package/assets/docs/guide/import-media/from-remote-source/unsplash.md +914 -0
  196. package/assets/docs/guide/import-media/from-remote-source/your-server.md +764 -0
  197. package/assets/docs/guide/import-media/from-remote-source.md +28 -0
  198. package/assets/docs/guide/import-media/overview.md +32 -0
  199. package/assets/docs/guide/import-media/retrieve-mimetype.md +274 -0
  200. package/assets/docs/guide/import-media/size-limits.md +20 -0
  201. package/assets/docs/guide/import-media/source-sets.md +476 -0
  202. package/assets/docs/guide/import-media.md +32 -0
  203. package/assets/docs/guide/insert-media/audio.md +291 -0
  204. package/assets/docs/guide/insert-media/images.md +380 -0
  205. package/assets/docs/guide/insert-media/position-and-align.md +734 -0
  206. package/assets/docs/guide/insert-media/shapes-or-stickers.md +799 -0
  207. package/assets/docs/guide/insert-media/videos.md +308 -0
  208. package/assets/docs/guide/insert-media.md +24 -0
  209. package/assets/docs/guide/key-capabilities.md +24 -0
  210. package/assets/docs/guide/key-concepts.md +83 -0
  211. package/assets/docs/guide/licensing.md +45 -0
  212. package/assets/docs/guide/llms-txt.md +53 -0
  213. package/assets/docs/guide/open-the-editor/blank-canvas.md +124 -0
  214. package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +228 -0
  215. package/assets/docs/guide/open-the-editor/from-image.md +205 -0
  216. package/assets/docs/guide/open-the-editor/from-template.md +189 -0
  217. package/assets/docs/guide/open-the-editor/from-video.md +274 -0
  218. package/assets/docs/guide/open-the-editor/import-design/from-archive.md +504 -0
  219. package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +680 -0
  220. package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +865 -0
  221. package/assets/docs/guide/open-the-editor/import-design.md +481 -0
  222. package/assets/docs/guide/open-the-editor/load-scene.md +178 -0
  223. package/assets/docs/guide/open-the-editor/overview.md +20 -0
  224. package/assets/docs/guide/open-the-editor/set-zoom-level.md +303 -0
  225. package/assets/docs/guide/open-the-editor/uri-resolver.md +347 -0
  226. package/assets/docs/guide/open-the-editor.md +29 -0
  227. package/assets/docs/guide/outlines/overview.md +14 -0
  228. package/assets/docs/guide/outlines/shadows-and-glows.md +515 -0
  229. package/assets/docs/guide/outlines/strokes.md +292 -0
  230. package/assets/docs/guide/outlines.md +22 -0
  231. package/assets/docs/guide/overview.md +22 -0
  232. package/assets/docs/guide/performance.md +217 -0
  233. package/assets/docs/guide/plugins/asset-sources.md +553 -0
  234. package/assets/docs/guide/plugins/print-ready-pdf.md +549 -0
  235. package/assets/docs/guide/plugins.md +36 -0
  236. package/assets/docs/guide/rules/asset-handling.md +180 -0
  237. package/assets/docs/guide/rules/common-pitfalls.md +272 -0
  238. package/assets/docs/guide/rules/content-fill-mode.md +29 -0
  239. package/assets/docs/guide/rules/enforce-brand-guidelines.md +672 -0
  240. package/assets/docs/guide/rules/lock-content.md +478 -0
  241. package/assets/docs/guide/rules/moderate-content.md +761 -0
  242. package/assets/docs/guide/rules/overview.md +514 -0
  243. package/assets/docs/guide/rules/silent-init-errors.md +137 -0
  244. package/assets/docs/guide/rules/verify-properties-before-use.md +78 -0
  245. package/assets/docs/guide/rules.md +23 -0
  246. package/assets/docs/guide/security.md +199 -0
  247. package/assets/docs/guide/serve-assets.md +332 -0
  248. package/assets/docs/guide/settings.md +199 -0
  249. package/assets/docs/guide/shapes.md +23 -0
  250. package/assets/docs/guide/starterkits/3d-mockup-editor.md +748 -0
  251. package/assets/docs/guide/starterkits/advanced-editor.md +698 -0
  252. package/assets/docs/guide/starterkits/advanced-video-editor.md +696 -0
  253. package/assets/docs/guide/starterkits/ai-editor.md +749 -0
  254. package/assets/docs/guide/starterkits/airtable-image-editor.md +672 -0
  255. package/assets/docs/guide/starterkits/apparel-ui.md +188 -0
  256. package/assets/docs/guide/starterkits/assets.md +27 -0
  257. package/assets/docs/guide/starterkits/auto-resize.md +586 -0
  258. package/assets/docs/guide/starterkits/automated-video-generation.md +692 -0
  259. package/assets/docs/guide/starterkits/background-removal-editor.md +480 -0
  260. package/assets/docs/guide/starterkits/content-moderation.md +863 -0
  261. package/assets/docs/guide/starterkits/creative-automation.md +28 -0
  262. package/assets/docs/guide/starterkits/custom-built-uis.md +26 -0
  263. package/assets/docs/guide/starterkits/customization.md +29 -0
  264. package/assets/docs/guide/starterkits/cutout-lines-editor.md +470 -0
  265. package/assets/docs/guide/starterkits/data-merge.md +850 -0
  266. package/assets/docs/guide/starterkits/design-editor.md +698 -0
  267. package/assets/docs/guide/starterkits/design-generation.md +719 -0
  268. package/assets/docs/guide/starterkits/design-validation.md +808 -0
  269. package/assets/docs/guide/starterkits/editor-ui-configurations.md +14 -0
  270. package/assets/docs/guide/starterkits/export-options.md +724 -0
  271. package/assets/docs/guide/starterkits/export-using-renderer.md +708 -0
  272. package/assets/docs/guide/starterkits/extensibility.md +28 -0
  273. package/assets/docs/guide/starterkits/force-crop-editor.md +675 -0
  274. package/assets/docs/guide/starterkits/form-based-template-adoption.md +522 -0
  275. package/assets/docs/guide/starterkits/getty-images-editor.md +700 -0
  276. package/assets/docs/guide/starterkits/html5-ads-exporter.md +719 -0
  277. package/assets/docs/guide/starterkits/indesign-template-import.md +580 -0
  278. package/assets/docs/guide/starterkits/layouts-editor.md +724 -0
  279. package/assets/docs/guide/starterkits/mobile-ui.md +185 -0
  280. package/assets/docs/guide/starterkits/mockup-editor.md +745 -0
  281. package/assets/docs/guide/starterkits/multi-image-generation.md +542 -0
  282. package/assets/docs/guide/starterkits/page-sizes-editor.md +657 -0
  283. package/assets/docs/guide/starterkits/pexels-image-editor.md +665 -0
  284. package/assets/docs/guide/starterkits/photo-editor.md +755 -0
  285. package/assets/docs/guide/starterkits/photo-ui.md +186 -0
  286. package/assets/docs/guide/starterkits/photobook-ui.md +188 -0
  287. package/assets/docs/guide/starterkits/placeholders.md +678 -0
  288. package/assets/docs/guide/starterkits/player.md +405 -0
  289. package/assets/docs/guide/starterkits/plugins.md +25 -0
  290. package/assets/docs/guide/starterkits/postcard-editor.md +202 -0
  291. package/assets/docs/guide/starterkits/pptx-template-import.md +581 -0
  292. package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +746 -0
  293. package/assets/docs/guide/starterkits/product-editor.md +773 -0
  294. package/assets/docs/guide/starterkits/psd-template-import.md +580 -0
  295. package/assets/docs/guide/starterkits/qr-code-editor.md +470 -0
  296. package/assets/docs/guide/starterkits/single-page-editor.md +661 -0
  297. package/assets/docs/guide/starterkits/start-with-image.md +684 -0
  298. package/assets/docs/guide/starterkits/start-with-video.md +651 -0
  299. package/assets/docs/guide/starterkits/t-shirt-designer.md +742 -0
  300. package/assets/docs/guide/starterkits/templating.md +23 -0
  301. package/assets/docs/guide/starterkits/theming.md +662 -0
  302. package/assets/docs/guide/starterkits/translation-internationalization.md +662 -0
  303. package/assets/docs/guide/starterkits/unsplash-editor.md +839 -0
  304. package/assets/docs/guide/starterkits/vectorizer-editor.md +466 -0
  305. package/assets/docs/guide/starterkits/version-history.md +745 -0
  306. package/assets/docs/guide/starterkits/video-animations.md +853 -0
  307. package/assets/docs/guide/starterkits/video-captions.md +884 -0
  308. package/assets/docs/guide/starterkits/video-editing.md +25 -0
  309. package/assets/docs/guide/starterkits/video-editor.md +696 -0
  310. package/assets/docs/guide/starterkits/video-export-options.md +676 -0
  311. package/assets/docs/guide/starterkits/viewer.md +400 -0
  312. package/assets/docs/guide/starterkits.md +41 -0
  313. package/assets/docs/guide/stickers-and-shapes/combine.md +743 -0
  314. package/assets/docs/guide/stickers-and-shapes/create-cutout.md +425 -0
  315. package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +794 -0
  316. package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +290 -0
  317. package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +211 -0
  318. package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +362 -0
  319. package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +208 -0
  320. package/assets/docs/guide/stickers.md +21 -0
  321. package/assets/docs/guide/text/add.md +641 -0
  322. package/assets/docs/guide/text/adjust-spacing.md +288 -0
  323. package/assets/docs/guide/text/auto-size.md +404 -0
  324. package/assets/docs/guide/text/custom-fonts.md +401 -0
  325. package/assets/docs/guide/text/decorations.md +330 -0
  326. package/assets/docs/guide/text/edit.md +458 -0
  327. package/assets/docs/guide/text/effects.md +244 -0
  328. package/assets/docs/guide/text/emojis.md +310 -0
  329. package/assets/docs/guide/text/enumerations.md +258 -0
  330. package/assets/docs/guide/text/language-support.md +604 -0
  331. package/assets/docs/guide/text/overview.md +14 -0
  332. package/assets/docs/guide/text/styling.md +390 -0
  333. package/assets/docs/guide/text/text-designs.md +834 -0
  334. package/assets/docs/guide/text.md +33 -0
  335. package/assets/docs/guide/to-v1-10.md +131 -0
  336. package/assets/docs/guide/to-v1-13.md +165 -0
  337. package/assets/docs/guide/to-v1-19.md +315 -0
  338. package/assets/docs/guide/to-v1-32.md +110 -0
  339. package/assets/docs/guide/to-v1-69.md +468 -0
  340. package/assets/docs/guide/to-v1-72.md +193 -0
  341. package/assets/docs/guide/upgrade.md +25 -0
  342. package/assets/docs/guide/use-templates/apply-template.md +279 -0
  343. package/assets/docs/guide/use-templates/generate.md +405 -0
  344. package/assets/docs/guide/use-templates/library.md +450 -0
  345. package/assets/docs/guide/use-templates/overview.md +20 -0
  346. package/assets/docs/guide/use-templates/programmatic.md +482 -0
  347. package/assets/docs/guide/use-templates/replace-content.md +399 -0
  348. package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +428 -0
  349. package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +337 -0
  350. package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +853 -0
  351. package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +1045 -0
  352. package/assets/docs/guide/user-interface/ai-integration/image-generation.md +641 -0
  353. package/assets/docs/guide/user-interface/ai-integration/integrate.md +966 -0
  354. package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +99 -0
  355. package/assets/docs/guide/user-interface/ai-integration/text-generation.md +498 -0
  356. package/assets/docs/guide/user-interface/ai-integration/video-generation.md +493 -0
  357. package/assets/docs/guide/user-interface/ai-integration.md +30 -0
  358. package/assets/docs/guide/user-interface/appearance/change-ui-font.md +316 -0
  359. package/assets/docs/guide/user-interface/appearance/custom-labels.md +509 -0
  360. package/assets/docs/guide/user-interface/appearance/icons.md +373 -0
  361. package/assets/docs/guide/user-interface/appearance/theming.md +665 -0
  362. package/assets/docs/guide/user-interface/appearance.md +23 -0
  363. package/assets/docs/guide/user-interface/build-your-own-ui.md +620 -0
  364. package/assets/docs/guide/user-interface/customization/canvas-menu.md +412 -0
  365. package/assets/docs/guide/user-interface/customization/canvas.md +281 -0
  366. package/assets/docs/guide/user-interface/customization/color-palette.md +413 -0
  367. package/assets/docs/guide/user-interface/customization/crop-presets.md +384 -0
  368. package/assets/docs/guide/user-interface/customization/disable-or-enable.md +676 -0
  369. package/assets/docs/guide/user-interface/customization/dock.md +399 -0
  370. package/assets/docs/guide/user-interface/customization/force-crop.md +289 -0
  371. package/assets/docs/guide/user-interface/customization/inspector-bar.md +371 -0
  372. package/assets/docs/guide/user-interface/customization/navigation-bar.md +516 -0
  373. package/assets/docs/guide/user-interface/customization/page-format.md +436 -0
  374. package/assets/docs/guide/user-interface/customization/panel.md +605 -0
  375. package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +531 -0
  376. package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +358 -0
  377. package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +374 -0
  378. package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +323 -0
  379. package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +294 -0
  380. package/assets/docs/guide/user-interface/customization/quick-start.md +12 -0
  381. package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +519 -0
  382. package/assets/docs/guide/user-interface/customization/reference/component-reference.md +333 -0
  383. package/assets/docs/guide/user-interface/customization/reference.md +12 -0
  384. package/assets/docs/guide/user-interface/customization.md +39 -0
  385. package/assets/docs/guide/user-interface/localization.md +633 -0
  386. package/assets/docs/guide/user-interface/overview.md +167 -0
  387. package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +411 -0
  388. package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +721 -0
  389. package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +331 -0
  390. package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +553 -0
  391. package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +672 -0
  392. package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +415 -0
  393. package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +521 -0
  394. package/assets/docs/guide/user-interface/ui-extensions.md +26 -0
  395. package/assets/docs/guide/user-interface.md +25 -0
  396. package/assets/docs/guide/what-is-cesdk.md +319 -0
  397. package/assets/docs/handbook/SKILL.md +521 -0
  398. package/assets/prompts/evals-assetGenerate.md +12 -0
  399. package/assets/prompts/evals-brutalistCore.md +34 -0
  400. package/assets/prompts/evals-danskCatalogue.md +31 -0
  401. package/assets/prompts/evals-exportRoundTrip.md +12 -0
  402. package/assets/prompts/evals-inspectPriorCode.md +16 -0
  403. package/assets/prompts/evals-listProjectFiles.md +6 -0
  404. package/assets/prompts/evals-readAndExplainScript.md +6 -0
  405. package/assets/prompts/evals-resumeAcrossRestart.md +15 -0
  406. package/assets/prompts/evals-rewindRecovery.md +10 -0
  407. package/assets/prompts/evals-searchAcrossFiles.md +6 -0
  408. package/assets/prompts/evals-weddingCard.md +20 -0
  409. package/assets/prompts/explain.md +6 -0
  410. package/assets/prompts/review.md +6 -0
  411. package/dist/assets/inline.generated.d.ts +2 -0
  412. package/dist/assets/inline.generated.d.ts.map +1 -0
  413. package/dist/assets/inline.generated.js +413 -0
  414. package/dist/assets/inline.generated.js.map +1 -0
  415. package/dist/assets/load-browser.d.ts +8 -0
  416. package/dist/assets/load-browser.d.ts.map +1 -0
  417. package/dist/assets/load-browser.js +11 -0
  418. package/dist/assets/load-browser.js.map +1 -0
  419. package/dist/assets/load-node.d.ts +8 -0
  420. package/dist/assets/load-node.d.ts.map +1 -0
  421. package/dist/assets/load-node.js +11 -0
  422. package/dist/assets/load-node.js.map +1 -0
  423. package/dist/cli/http.d.ts +2 -0
  424. package/dist/cli/http.d.ts.map +1 -0
  425. package/dist/cli/http.js +231 -0
  426. package/dist/cli/http.js.map +1 -0
  427. package/dist/cli/redirect-console.d.ts +10 -0
  428. package/dist/cli/redirect-console.d.ts.map +1 -0
  429. package/dist/cli/redirect-console.js +18 -0
  430. package/dist/cli/redirect-console.js.map +1 -0
  431. package/dist/cli/resolve-license.d.ts +2 -0
  432. package/dist/cli/resolve-license.d.ts.map +1 -0
  433. package/dist/cli/resolve-license.js +13 -0
  434. package/dist/cli/resolve-license.js.map +1 -0
  435. package/dist/cli/stdio.d.ts +2 -0
  436. package/dist/cli/stdio.d.ts.map +1 -0
  437. package/dist/cli/stdio.js +124 -0
  438. package/dist/cli/stdio.js.map +1 -0
  439. package/dist/cli/trial-license.generated.d.ts +2 -0
  440. package/dist/cli/trial-license.generated.d.ts.map +1 -0
  441. package/dist/cli/trial-license.generated.js +4 -0
  442. package/dist/cli/trial-license.generated.js.map +1 -0
  443. package/dist/cli.d.ts +3 -0
  444. package/dist/cli.d.ts.map +1 -0
  445. package/dist/cli.js +64 -0
  446. package/dist/cli.js.map +1 -0
  447. package/dist/config.d.ts +61 -0
  448. package/dist/config.d.ts.map +1 -0
  449. package/dist/config.js +102 -0
  450. package/dist/config.js.map +1 -0
  451. package/dist/cross-ref.d.ts +2 -0
  452. package/dist/cross-ref.d.ts.map +1 -0
  453. package/dist/cross-ref.js +31 -0
  454. package/dist/cross-ref.js.map +1 -0
  455. package/dist/dashboard/router.d.ts +3 -0
  456. package/dist/dashboard/router.d.ts.map +1 -0
  457. package/dist/dashboard/router.js +19 -0
  458. package/dist/dashboard/router.js.map +1 -0
  459. package/dist/dashboard/spa-assets.generated.d.ts +2 -0
  460. package/dist/dashboard/spa-assets.generated.d.ts.map +1 -0
  461. package/dist/dashboard/spa-assets.generated.js +220 -0
  462. package/dist/dashboard/spa-assets.generated.js.map +1 -0
  463. package/dist/engine/asset-sources.d.ts +17 -0
  464. package/dist/engine/asset-sources.d.ts.map +1 -0
  465. package/dist/engine/asset-sources.js +75 -0
  466. package/dist/engine/asset-sources.js.map +1 -0
  467. package/dist/engine/cesdk-adapter.d.ts +10 -0
  468. package/dist/engine/cesdk-adapter.d.ts.map +1 -0
  469. package/dist/engine/cesdk-adapter.js +19 -0
  470. package/dist/engine/cesdk-adapter.js.map +1 -0
  471. package/dist/engine/index.d.ts +3 -0
  472. package/dist/engine/index.d.ts.map +1 -0
  473. package/dist/engine/index.js +3 -0
  474. package/dist/engine/index.js.map +1 -0
  475. package/dist/engine/mutex.d.ts +5 -0
  476. package/dist/engine/mutex.d.ts.map +1 -0
  477. package/dist/engine/mutex.js +42 -0
  478. package/dist/engine/mutex.js.map +1 -0
  479. package/dist/engine/session.d.ts +50 -0
  480. package/dist/engine/session.d.ts.map +1 -0
  481. package/dist/engine/session.js +95 -0
  482. package/dist/engine/session.js.map +1 -0
  483. package/dist/engine/uri-resolver.d.ts +14 -0
  484. package/dist/engine/uri-resolver.d.ts.map +1 -0
  485. package/dist/engine/uri-resolver.js +12 -0
  486. package/dist/engine/uri-resolver.js.map +1 -0
  487. package/dist/frontmatter.d.ts +15 -0
  488. package/dist/frontmatter.d.ts.map +1 -0
  489. package/dist/frontmatter.js +46 -0
  490. package/dist/frontmatter.js.map +1 -0
  491. package/dist/gateway/hosted-stub.d.ts +6 -0
  492. package/dist/gateway/hosted-stub.d.ts.map +1 -0
  493. package/dist/gateway/hosted-stub.js +11 -0
  494. package/dist/gateway/hosted-stub.js.map +1 -0
  495. package/dist/gateway/index.d.ts +4 -0
  496. package/dist/gateway/index.d.ts.map +1 -0
  497. package/dist/gateway/index.js +4 -0
  498. package/dist/gateway/index.js.map +1 -0
  499. package/dist/gateway/local.d.ts +14 -0
  500. package/dist/gateway/local.d.ts.map +1 -0
  501. package/dist/gateway/local.js +41 -0
  502. package/dist/gateway/local.js.map +1 -0
  503. package/dist/gateway/types.d.ts +24 -0
  504. package/dist/gateway/types.d.ts.map +1 -0
  505. package/dist/gateway/types.js +7 -0
  506. package/dist/gateway/types.js.map +1 -0
  507. package/dist/http/server.d.ts +80 -0
  508. package/dist/http/server.d.ts.map +1 -0
  509. package/dist/http/server.js +183 -0
  510. package/dist/http/server.js.map +1 -0
  511. package/dist/http/session-manager.d.ts +42 -0
  512. package/dist/http/session-manager.d.ts.map +1 -0
  513. package/dist/http/session-manager.js +82 -0
  514. package/dist/http/session-manager.js.map +1 -0
  515. package/dist/http/workspace-auth.d.ts +9 -0
  516. package/dist/http/workspace-auth.d.ts.map +1 -0
  517. package/dist/http/workspace-auth.js +29 -0
  518. package/dist/http/workspace-auth.js.map +1 -0
  519. package/dist/index.d.ts +10 -0
  520. package/dist/index.d.ts.map +1 -0
  521. package/dist/index.js +10 -0
  522. package/dist/index.js.map +1 -0
  523. package/dist/metrics/mount.d.ts +11 -0
  524. package/dist/metrics/mount.d.ts.map +1 -0
  525. package/dist/metrics/mount.js +13 -0
  526. package/dist/metrics/mount.js.map +1 -0
  527. package/dist/metrics/recorder.d.ts +55 -0
  528. package/dist/metrics/recorder.d.ts.map +1 -0
  529. package/dist/metrics/recorder.js +97 -0
  530. package/dist/metrics/recorder.js.map +1 -0
  531. package/dist/revisions/hash.d.ts +7 -0
  532. package/dist/revisions/hash.d.ts.map +1 -0
  533. package/dist/revisions/hash.js +24 -0
  534. package/dist/revisions/hash.js.map +1 -0
  535. package/dist/revisions/index.d.ts +4 -0
  536. package/dist/revisions/index.d.ts.map +1 -0
  537. package/dist/revisions/index.js +4 -0
  538. package/dist/revisions/index.js.map +1 -0
  539. package/dist/revisions/store.d.ts +69 -0
  540. package/dist/revisions/store.d.ts.map +1 -0
  541. package/dist/revisions/store.js +196 -0
  542. package/dist/revisions/store.js.map +1 -0
  543. package/dist/revisions/types.d.ts +39 -0
  544. package/dist/revisions/types.d.ts.map +1 -0
  545. package/dist/revisions/types.js +2 -0
  546. package/dist/revisions/types.js.map +1 -0
  547. package/dist/server.d.ts +51 -0
  548. package/dist/server.d.ts.map +1 -0
  549. package/dist/server.js +175 -0
  550. package/dist/server.js.map +1 -0
  551. package/dist/skill-tools.d.ts +3 -0
  552. package/dist/skill-tools.d.ts.map +1 -0
  553. package/dist/skill-tools.js +105 -0
  554. package/dist/skill-tools.js.map +1 -0
  555. package/dist/test/test/cli/dispatcher.test.d.ts +2 -0
  556. package/dist/test/test/cli/dispatcher.test.d.ts.map +1 -0
  557. package/dist/test/test/cli/dispatcher.test.js +47 -0
  558. package/dist/test/test/cli/dispatcher.test.js.map +1 -0
  559. package/dist/test/test/cross-ref.test.d.ts +2 -0
  560. package/dist/test/test/cross-ref.test.d.ts.map +1 -0
  561. package/dist/test/test/cross-ref.test.js +39 -0
  562. package/dist/test/test/cross-ref.test.js.map +1 -0
  563. package/dist/test/test/engine/session.test.d.ts +2 -0
  564. package/dist/test/test/engine/session.test.d.ts.map +1 -0
  565. package/dist/test/test/engine/session.test.js +144 -0
  566. package/dist/test/test/engine/session.test.js.map +1 -0
  567. package/dist/test/test/engine/uri-resolver.test.d.ts +2 -0
  568. package/dist/test/test/engine/uri-resolver.test.d.ts.map +1 -0
  569. package/dist/test/test/engine/uri-resolver.test.js +38 -0
  570. package/dist/test/test/engine/uri-resolver.test.js.map +1 -0
  571. package/dist/test/test/frontmatter.test.d.ts +2 -0
  572. package/dist/test/test/frontmatter.test.d.ts.map +1 -0
  573. package/dist/test/test/frontmatter.test.js +55 -0
  574. package/dist/test/test/frontmatter.test.js.map +1 -0
  575. package/dist/test/test/gateway/hosted-stub.test.d.ts +2 -0
  576. package/dist/test/test/gateway/hosted-stub.test.d.ts.map +1 -0
  577. package/dist/test/test/gateway/hosted-stub.test.js +11 -0
  578. package/dist/test/test/gateway/hosted-stub.test.js.map +1 -0
  579. package/dist/test/test/gateway/local.test.d.ts +2 -0
  580. package/dist/test/test/gateway/local.test.d.ts.map +1 -0
  581. package/dist/test/test/gateway/local.test.js +29 -0
  582. package/dist/test/test/gateway/local.test.js.map +1 -0
  583. package/dist/test/test/handbook-contract.test.d.ts +2 -0
  584. package/dist/test/test/handbook-contract.test.d.ts.map +1 -0
  585. package/dist/test/test/handbook-contract.test.js +71 -0
  586. package/dist/test/test/handbook-contract.test.js.map +1 -0
  587. package/dist/test/test/http/server.test.d.ts +2 -0
  588. package/dist/test/test/http/server.test.d.ts.map +1 -0
  589. package/dist/test/test/http/server.test.js +245 -0
  590. package/dist/test/test/http/server.test.js.map +1 -0
  591. package/dist/test/test/http/session-manager.test.d.ts +2 -0
  592. package/dist/test/test/http/session-manager.test.d.ts.map +1 -0
  593. package/dist/test/test/http/session-manager.test.js +83 -0
  594. package/dist/test/test/http/session-manager.test.js.map +1 -0
  595. package/dist/test/test/revisions/hash.test.d.ts +2 -0
  596. package/dist/test/test/revisions/hash.test.d.ts.map +1 -0
  597. package/dist/test/test/revisions/hash.test.js +33 -0
  598. package/dist/test/test/revisions/hash.test.js.map +1 -0
  599. package/dist/test/test/revisions/store.test.d.ts +2 -0
  600. package/dist/test/test/revisions/store.test.d.ts.map +1 -0
  601. package/dist/test/test/revisions/store.test.js +245 -0
  602. package/dist/test/test/revisions/store.test.js.map +1 -0
  603. package/dist/test/test/server.test.d.ts +2 -0
  604. package/dist/test/test/server.test.d.ts.map +1 -0
  605. package/dist/test/test/server.test.js +157 -0
  606. package/dist/test/test/server.test.js.map +1 -0
  607. package/dist/test/test/skill-tools.test.d.ts +2 -0
  608. package/dist/test/test/skill-tools.test.d.ts.map +1 -0
  609. package/dist/test/test/skill-tools.test.js +84 -0
  610. package/dist/test/test/skill-tools.test.js.map +1 -0
  611. package/dist/test/test/smoke.test.d.ts +2 -0
  612. package/dist/test/test/smoke.test.d.ts.map +1 -0
  613. package/dist/test/test/smoke.test.js +8 -0
  614. package/dist/test/test/smoke.test.js.map +1 -0
  615. package/dist/test/test/tools/asset-generate.test.d.ts +2 -0
  616. package/dist/test/test/tools/asset-generate.test.d.ts.map +1 -0
  617. package/dist/test/test/tools/asset-generate.test.js +66 -0
  618. package/dist/test/test/tools/asset-generate.test.js.map +1 -0
  619. package/dist/test/test/tools/edit.test.d.ts +2 -0
  620. package/dist/test/test/tools/edit.test.d.ts.map +1 -0
  621. package/dist/test/test/tools/edit.test.js +205 -0
  622. package/dist/test/test/tools/edit.test.js.map +1 -0
  623. package/dist/test/test/tools/export.test.d.ts +2 -0
  624. package/dist/test/test/tools/export.test.d.ts.map +1 -0
  625. package/dist/test/test/tools/export.test.js +144 -0
  626. package/dist/test/test/tools/export.test.js.map +1 -0
  627. package/dist/test/test/tools/history.test.d.ts +2 -0
  628. package/dist/test/test/tools/history.test.d.ts.map +1 -0
  629. package/dist/test/test/tools/history.test.js +29 -0
  630. package/dist/test/test/tools/history.test.js.map +1 -0
  631. package/dist/test/test/tools/inspect.test.d.ts +2 -0
  632. package/dist/test/test/tools/inspect.test.d.ts.map +1 -0
  633. package/dist/test/test/tools/inspect.test.js +62 -0
  634. package/dist/test/test/tools/inspect.test.js.map +1 -0
  635. package/dist/test/test/tools/list.test.d.ts +2 -0
  636. package/dist/test/test/tools/list.test.d.ts.map +1 -0
  637. package/dist/test/test/tools/list.test.js +23 -0
  638. package/dist/test/test/tools/list.test.js.map +1 -0
  639. package/dist/test/test/tools/open-editor.test.d.ts +2 -0
  640. package/dist/test/test/tools/open-editor.test.d.ts.map +1 -0
  641. package/dist/test/test/tools/open-editor.test.js +53 -0
  642. package/dist/test/test/tools/open-editor.test.js.map +1 -0
  643. package/dist/test/test/tools/preview.test.d.ts +2 -0
  644. package/dist/test/test/tools/preview.test.d.ts.map +1 -0
  645. package/dist/test/test/tools/preview.test.js +73 -0
  646. package/dist/test/test/tools/preview.test.js.map +1 -0
  647. package/dist/test/test/tools/rename.test.d.ts +2 -0
  648. package/dist/test/test/tools/rename.test.d.ts.map +1 -0
  649. package/dist/test/test/tools/rename.test.js +17 -0
  650. package/dist/test/test/tools/rename.test.js.map +1 -0
  651. package/dist/test/test/viewer/broadcaster.test.d.ts +2 -0
  652. package/dist/test/test/viewer/broadcaster.test.d.ts.map +1 -0
  653. package/dist/test/test/viewer/broadcaster.test.js +53 -0
  654. package/dist/test/test/viewer/broadcaster.test.js.map +1 -0
  655. package/dist/test/test/viewer/resource-route.test.d.ts +2 -0
  656. package/dist/test/test/viewer/resource-route.test.d.ts.map +1 -0
  657. package/dist/test/test/viewer/resource-route.test.js +70 -0
  658. package/dist/test/test/viewer/resource-route.test.js.map +1 -0
  659. package/dist/test/test/viewer/router.test.d.ts +2 -0
  660. package/dist/test/test/viewer/router.test.d.ts.map +1 -0
  661. package/dist/test/test/viewer/router.test.js +171 -0
  662. package/dist/test/test/viewer/router.test.js.map +1 -0
  663. package/dist/test/test/viewer/url-builder.test.d.ts +2 -0
  664. package/dist/test/test/viewer/url-builder.test.d.ts.map +1 -0
  665. package/dist/test/test/viewer/url-builder.test.js +31 -0
  666. package/dist/test/test/viewer/url-builder.test.js.map +1 -0
  667. package/dist/test/test/workspace/hosted-stub.test.d.ts +2 -0
  668. package/dist/test/test/workspace/hosted-stub.test.d.ts.map +1 -0
  669. package/dist/test/test/workspace/hosted-stub.test.js +30 -0
  670. package/dist/test/test/workspace/hosted-stub.test.js.map +1 -0
  671. package/dist/test/test/workspace/in-memory.test.d.ts +2 -0
  672. package/dist/test/test/workspace/in-memory.test.d.ts.map +1 -0
  673. package/dist/test/test/workspace/in-memory.test.js +4 -0
  674. package/dist/test/test/workspace/in-memory.test.js.map +1 -0
  675. package/dist/test/test/workspace/node-fs.test.d.ts +2 -0
  676. package/dist/test/test/workspace/node-fs.test.d.ts.map +1 -0
  677. package/dist/test/test/workspace/node-fs.test.js +20 -0
  678. package/dist/test/test/workspace/node-fs.test.js.map +1 -0
  679. package/dist/test/test/workspace/shared-contract.d.ts +3 -0
  680. package/dist/test/test/workspace/shared-contract.d.ts.map +1 -0
  681. package/dist/test/test/workspace/shared-contract.js +92 -0
  682. package/dist/test/test/workspace/shared-contract.js.map +1 -0
  683. package/dist/test/tsconfig.test.tsbuildinfo +1 -0
  684. package/dist/test/vitest.config.d.ts +3 -0
  685. package/dist/test/vitest.config.d.ts.map +1 -0
  686. package/dist/test/vitest.config.js +8 -0
  687. package/dist/test/vitest.config.js.map +1 -0
  688. package/dist/tools/asset-generate.d.ts +12 -0
  689. package/dist/tools/asset-generate.d.ts.map +1 -0
  690. package/dist/tools/asset-generate.js +112 -0
  691. package/dist/tools/asset-generate.js.map +1 -0
  692. package/dist/tools/asset-search.d.ts +10 -0
  693. package/dist/tools/asset-search.d.ts.map +1 -0
  694. package/dist/tools/asset-search.js +120 -0
  695. package/dist/tools/asset-search.js.map +1 -0
  696. package/dist/tools/content-types.d.ts +11 -0
  697. package/dist/tools/content-types.d.ts.map +1 -0
  698. package/dist/tools/content-types.js +2 -0
  699. package/dist/tools/content-types.js.map +1 -0
  700. package/dist/tools/edit.d.ts +29 -0
  701. package/dist/tools/edit.d.ts.map +1 -0
  702. package/dist/tools/edit.js +165 -0
  703. package/dist/tools/edit.js.map +1 -0
  704. package/dist/tools/engine.d.ts +31 -0
  705. package/dist/tools/engine.d.ts.map +1 -0
  706. package/dist/tools/engine.js +59 -0
  707. package/dist/tools/engine.js.map +1 -0
  708. package/dist/tools/export.d.ts +19 -0
  709. package/dist/tools/export.d.ts.map +1 -0
  710. package/dist/tools/export.js +179 -0
  711. package/dist/tools/export.js.map +1 -0
  712. package/dist/tools/history.d.ts +7 -0
  713. package/dist/tools/history.d.ts.map +1 -0
  714. package/dist/tools/history.js +54 -0
  715. package/dist/tools/history.js.map +1 -0
  716. package/dist/tools/index.d.ts +35 -0
  717. package/dist/tools/index.d.ts.map +1 -0
  718. package/dist/tools/index.js +72 -0
  719. package/dist/tools/index.js.map +1 -0
  720. package/dist/tools/inspect.d.ts +7 -0
  721. package/dist/tools/inspect.d.ts.map +1 -0
  722. package/dist/tools/inspect.js +80 -0
  723. package/dist/tools/inspect.js.map +1 -0
  724. package/dist/tools/list.d.ts +7 -0
  725. package/dist/tools/list.d.ts.map +1 -0
  726. package/dist/tools/list.js +18 -0
  727. package/dist/tools/list.js.map +1 -0
  728. package/dist/tools/metrics.d.ts +11 -0
  729. package/dist/tools/metrics.d.ts.map +1 -0
  730. package/dist/tools/metrics.js +28 -0
  731. package/dist/tools/metrics.js.map +1 -0
  732. package/dist/tools/open-editor.d.ts +10 -0
  733. package/dist/tools/open-editor.d.ts.map +1 -0
  734. package/dist/tools/open-editor.js +62 -0
  735. package/dist/tools/open-editor.js.map +1 -0
  736. package/dist/tools/preview.d.ts +12 -0
  737. package/dist/tools/preview.d.ts.map +1 -0
  738. package/dist/tools/preview.js +104 -0
  739. package/dist/tools/preview.js.map +1 -0
  740. package/dist/tools/rename.d.ts +7 -0
  741. package/dist/tools/rename.d.ts.map +1 -0
  742. package/dist/tools/rename.js +39 -0
  743. package/dist/tools/rename.js.map +1 -0
  744. package/dist/tools/result.d.ts +12 -0
  745. package/dist/tools/result.d.ts.map +1 -0
  746. package/dist/tools/result.js +55 -0
  747. package/dist/tools/result.js.map +1 -0
  748. package/dist/tools/save.d.ts +19 -0
  749. package/dist/tools/save.d.ts.map +1 -0
  750. package/dist/tools/save.js +117 -0
  751. package/dist/tools/save.js.map +1 -0
  752. package/dist/viewer/broadcaster.d.ts +13 -0
  753. package/dist/viewer/broadcaster.d.ts.map +1 -0
  754. package/dist/viewer/broadcaster.js +44 -0
  755. package/dist/viewer/broadcaster.js.map +1 -0
  756. package/dist/viewer/index.d.ts +7 -0
  757. package/dist/viewer/index.d.ts.map +1 -0
  758. package/dist/viewer/index.js +7 -0
  759. package/dist/viewer/index.js.map +1 -0
  760. package/dist/viewer/listener.d.ts +16 -0
  761. package/dist/viewer/listener.d.ts.map +1 -0
  762. package/dist/viewer/listener.js +30 -0
  763. package/dist/viewer/listener.js.map +1 -0
  764. package/dist/viewer/presigned-r2-url-builder.d.ts +30 -0
  765. package/dist/viewer/presigned-r2-url-builder.d.ts.map +1 -0
  766. package/dist/viewer/presigned-r2-url-builder.js +40 -0
  767. package/dist/viewer/presigned-r2-url-builder.js.map +1 -0
  768. package/dist/viewer/resource-route.d.ts +9 -0
  769. package/dist/viewer/resource-route.d.ts.map +1 -0
  770. package/dist/viewer/resource-route.js +59 -0
  771. package/dist/viewer/resource-route.js.map +1 -0
  772. package/dist/viewer/router.d.ts +20 -0
  773. package/dist/viewer/router.d.ts.map +1 -0
  774. package/dist/viewer/router.js +142 -0
  775. package/dist/viewer/router.js.map +1 -0
  776. package/dist/viewer/session-mount.d.ts +10 -0
  777. package/dist/viewer/session-mount.d.ts.map +1 -0
  778. package/dist/viewer/session-mount.js +24 -0
  779. package/dist/viewer/session-mount.js.map +1 -0
  780. package/dist/viewer/spa-assets.generated.d.ts +2 -0
  781. package/dist/viewer/spa-assets.generated.d.ts.map +1 -0
  782. package/dist/viewer/spa-assets.generated.js +989 -0
  783. package/dist/viewer/spa-assets.generated.js.map +1 -0
  784. package/dist/viewer/url-builder.d.ts +48 -0
  785. package/dist/viewer/url-builder.d.ts.map +1 -0
  786. package/dist/viewer/url-builder.js +38 -0
  787. package/dist/viewer/url-builder.js.map +1 -0
  788. package/dist/workspace/hosted-stub.d.ts +28 -0
  789. package/dist/workspace/hosted-stub.d.ts.map +1 -0
  790. package/dist/workspace/hosted-stub.js +44 -0
  791. package/dist/workspace/hosted-stub.js.map +1 -0
  792. package/dist/workspace/in-memory.d.ts +23 -0
  793. package/dist/workspace/in-memory.d.ts.map +1 -0
  794. package/dist/workspace/in-memory.js +161 -0
  795. package/dist/workspace/in-memory.js.map +1 -0
  796. package/dist/workspace/index.d.ts +6 -0
  797. package/dist/workspace/index.d.ts.map +1 -0
  798. package/dist/workspace/index.js +6 -0
  799. package/dist/workspace/index.js.map +1 -0
  800. package/dist/workspace/node-fs.d.ts +23 -0
  801. package/dist/workspace/node-fs.d.ts.map +1 -0
  802. package/dist/workspace/node-fs.js +90 -0
  803. package/dist/workspace/node-fs.js.map +1 -0
  804. package/dist/workspace/s3.d.ts +32 -0
  805. package/dist/workspace/s3.d.ts.map +1 -0
  806. package/dist/workspace/s3.js +191 -0
  807. package/dist/workspace/s3.js.map +1 -0
  808. package/dist/workspace/scoped.d.ts +32 -0
  809. package/dist/workspace/scoped.d.ts.map +1 -0
  810. package/dist/workspace/scoped.js +76 -0
  811. package/dist/workspace/scoped.js.map +1 -0
  812. package/dist/workspace/types.d.ts +75 -0
  813. package/dist/workspace/types.d.ts.map +1 -0
  814. package/dist/workspace/types.js +18 -0
  815. package/dist/workspace/types.js.map +1 -0
  816. package/package.json +80 -0
@@ -0,0 +1,1019 @@
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).
2
+
3
+ **Navigation:** [Guides](./guides.md) > [Filters and Effects](./filters-and-effects.md) > [Apply Filter or Effect](./filters-and-effects/apply.md)
4
+
5
+ ---
6
+
7
+ Apply professional color grading, blur effects, and artistic treatments to
8
+ design elements using CE.SDK's visual effects system.
9
+
10
+ ![Apply Filters and Effects example showing images with various effects applied](https://img.ly/docs/cesdk/./assets/browser.hero.webp)
11
+
12
+ > **Reading time:** 10 minutes
13
+ >
14
+ > **Resources:**
15
+ >
16
+ > - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
17
+ > - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-filters-and-effects-apply-browser)
18
+ > - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-filters-and-effects-apply-browser)
19
+ > - [Live demo](https://img.ly/docs/cesdk/examples/guides-filters-and-effects-apply-browser/)
20
+
21
+ While CE.SDK uses a unified effect API for both filters and effects, they serve different purposes. **Filters** typically apply color transformations like LUT filters and duotone, while **effects** apply visual modifications such as blur, pixelize, vignette, and image adjustments. You can combine multiple effects on a single element, creating complex visual treatments by stacking them in a customizable order.
22
+
23
+ ```typescript file=@cesdk_web_examples/guides-filters-and-effects-apply-browser/browser.ts reference-only
24
+ import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
25
+
26
+ import {
27
+ BlurAssetSource,
28
+ ColorPaletteAssetSource,
29
+ CropPresetsAssetSource,
30
+ DemoAssetSources,
31
+ EffectsAssetSource,
32
+ FiltersAssetSource,
33
+ PagePresetsAssetSource,
34
+ StickerAssetSource,
35
+ TextAssetSource,
36
+ TextComponentAssetSource,
37
+ TypefaceAssetSource,
38
+ UploadAssetSources,
39
+ VectorShapeAssetSource
40
+ } from '@cesdk/cesdk-js/plugins';
41
+ import { DesignEditorConfig } from './design-editor/plugin';
42
+ import packageJson from './package.json';
43
+ import { calculateGridLayout, hexToRgba } from './utils';
44
+
45
+ /**
46
+ * CE.SDK Plugin: Filters and Effects Guide
47
+ *
48
+ * Demonstrates applying various filters and effects to image blocks:
49
+ * - Checking effect support
50
+ * - Applying basic effects (blur)
51
+ * - Configuring effect parameters (adjustments)
52
+ * - Applying LUT filters
53
+ * - Combining multiple effects
54
+ * - Managing effect stacks
55
+ */
56
+ class Example implements EditorPlugin {
57
+ name = packageJson.name;
58
+
59
+ version = packageJson.version;
60
+
61
+ async initialize({ cesdk }: EditorPluginContext): Promise<void> {
62
+ if (!cesdk) {
63
+ throw new Error('CE.SDK instance is required for this plugin');
64
+ }
65
+
66
+ await cesdk.addPlugin(new DesignEditorConfig());
67
+
68
+ // Add asset source plugins
69
+ await cesdk.addPlugin(new BlurAssetSource());
70
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
71
+ await cesdk.addPlugin(new CropPresetsAssetSource());
72
+ await cesdk.addPlugin(
73
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
74
+ );
75
+ await cesdk.addPlugin(
76
+ new DemoAssetSources({
77
+ include: [
78
+ 'ly.img.templates.blank.*',
79
+ 'ly.img.templates.presentation.*',
80
+ 'ly.img.templates.print.*',
81
+ 'ly.img.templates.social.*',
82
+ 'ly.img.image.*'
83
+ ]
84
+ })
85
+ );
86
+ await cesdk.addPlugin(new EffectsAssetSource());
87
+ await cesdk.addPlugin(new FiltersAssetSource());
88
+ await cesdk.addPlugin(new PagePresetsAssetSource());
89
+ await cesdk.addPlugin(new StickerAssetSource());
90
+ await cesdk.addPlugin(new TextAssetSource());
91
+ await cesdk.addPlugin(new TextComponentAssetSource());
92
+ await cesdk.addPlugin(new TypefaceAssetSource());
93
+ await cesdk.addPlugin(new VectorShapeAssetSource());
94
+
95
+ await cesdk.actions.run('scene.create', {
96
+ page: { width: 800, height: 600, unit: 'Pixel' }
97
+ });
98
+
99
+ const engine = cesdk.engine;
100
+ const page = engine.block.findByType('page')[0];
101
+
102
+ const pageWidth = engine.block.getWidth(page);
103
+ const pageHeight = engine.block.getHeight(page);
104
+
105
+ // Enable effects and filters in the inspector panel using the Feature API
106
+ cesdk.feature.enable('ly.img.effect'); // Enable all effects
107
+ cesdk.feature.enable('ly.img.filter'); // Enable all filters
108
+ cesdk.feature.enable('ly.img.blur'); // Enable blur effect
109
+ cesdk.feature.enable('ly.img.adjustment'); // Enable adjustments
110
+
111
+ // Calculate responsive grid layout based on page dimensions
112
+ const layout = calculateGridLayout(pageWidth, pageHeight, 9);
113
+ const { blockWidth, blockHeight, getPosition } = layout;
114
+
115
+ // Use a sample image URL (this will load from demo assets)
116
+ const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
117
+
118
+ // Query available LUT and Duotone filters from asset sources
119
+ // These filters are provided by the demo asset sources loaded above
120
+ const lutResults = await engine.asset.findAssets('ly.img.filter', {
121
+ page: 0,
122
+ perPage: 10
123
+ });
124
+ const duotoneResults = await engine.asset.findAssets('ly.img.filter', {
125
+ page: 0,
126
+ perPage: 10
127
+ });
128
+
129
+ const lutAssets = lutResults.assets;
130
+ const duotoneAssets = duotoneResults.assets;
131
+
132
+ // Pattern #2: Use Convenience APIs - addImage() simplifies block creation
133
+ // Create a sample block to demonstrate effect support checking
134
+ const blockSize = { width: blockWidth, height: blockHeight };
135
+ const sampleBlock = await engine.block.addImage(imageUri, {
136
+ size: blockSize
137
+ });
138
+ engine.block.appendChild(page, sampleBlock);
139
+
140
+ // Check if a block supports effects
141
+ const supportsEffects = engine.block.supportsEffects(sampleBlock);
142
+ // eslint-disable-next-line no-console
143
+ console.log('Block supports effects:', supportsEffects); // true for graphics
144
+
145
+ // Page blocks don't support effects
146
+ const pageSupportsEffects = engine.block.supportsEffects(page);
147
+ // eslint-disable-next-line no-console
148
+ console.log('Page supports effects:', pageSupportsEffects); // false
149
+
150
+ // Select this block so effects panel is visible
151
+ engine.block.setSelected(sampleBlock, true);
152
+
153
+ // Pattern #1: Demonstrate Individual Before Combined
154
+ // Create a separate image block for blur demonstration
155
+ const blurImageBlock = await engine.block.addImage(imageUri, {
156
+ size: blockSize
157
+ });
158
+ engine.block.appendChild(page, blurImageBlock);
159
+
160
+ // Create and apply a blur effect
161
+ const blurEffect = engine.block.createEffect('extrude_blur');
162
+ engine.block.appendEffect(blurImageBlock, blurEffect);
163
+
164
+ // Adjust blur intensity
165
+ engine.block.setFloat(blurEffect, 'effect/extrude_blur/amount', 0.5);
166
+
167
+ // Create a separate image block for adjustments demonstration
168
+ const adjustmentsImageBlock = await engine.block.addImage(imageUri, {
169
+ size: blockSize
170
+ });
171
+ engine.block.appendChild(page, adjustmentsImageBlock);
172
+
173
+ // Create adjustments effect for brightness and contrast
174
+ const adjustmentsEffect = engine.block.createEffect('adjustments');
175
+ engine.block.appendEffect(adjustmentsImageBlock, adjustmentsEffect);
176
+
177
+ // Find all available properties for this effect
178
+ const adjustmentProperties =
179
+ engine.block.findAllProperties(adjustmentsEffect);
180
+ // eslint-disable-next-line no-console
181
+ console.log('Available adjustment properties:', adjustmentProperties);
182
+
183
+ // Set brightness, contrast, and saturation
184
+ engine.block.setFloat(
185
+ adjustmentsEffect,
186
+ 'effect/adjustments/brightness',
187
+ 0.2
188
+ );
189
+ engine.block.setFloat(
190
+ adjustmentsEffect,
191
+ 'effect/adjustments/contrast',
192
+ 0.15
193
+ );
194
+ engine.block.setFloat(
195
+ adjustmentsEffect,
196
+ 'effect/adjustments/saturation',
197
+ 0.1
198
+ );
199
+
200
+ // Demonstrate LUT filters by applying the first 2 from asset library
201
+ // These filters are fetched from the demo asset sources (Grid positions 3-4)
202
+ const lutImageBlocks = [];
203
+ for (let i = 0; i < Math.min(2, lutAssets.length); i++) {
204
+ const lutAsset = lutAssets[i];
205
+
206
+ const lutImageBlock = await engine.block.addImage(imageUri, {
207
+ size: blockSize
208
+ });
209
+ engine.block.appendChild(page, lutImageBlock);
210
+ lutImageBlocks.push(lutImageBlock);
211
+
212
+ // Create LUT filter effect using the full effect type URI
213
+ const lutEffect = engine.block.createEffect(
214
+ '//ly.img.ubq/effect/lut_filter'
215
+ );
216
+
217
+ // Use asset metadata for LUT configuration
218
+ // The asset provides the LUT file URI and grid dimensions
219
+ engine.block.setString(
220
+ lutEffect,
221
+ 'effect/lut_filter/lutFileURI',
222
+ lutAsset.meta?.uri as string
223
+ );
224
+ engine.block.setInt(
225
+ lutEffect,
226
+ 'effect/lut_filter/horizontalTileCount',
227
+ parseInt(lutAsset.meta?.horizontalTileCount as string, 10)
228
+ );
229
+ engine.block.setInt(
230
+ lutEffect,
231
+ 'effect/lut_filter/verticalTileCount',
232
+ parseInt(lutAsset.meta?.verticalTileCount as string, 10)
233
+ );
234
+ engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
235
+
236
+ engine.block.appendEffect(lutImageBlock, lutEffect);
237
+ }
238
+
239
+ // Demonstrate Duotone filters by applying the first 2 from asset library
240
+ // Duotone filters create artistic two-color treatments (Grid positions 5-6)
241
+ const duotoneImageBlocks = [];
242
+ for (let i = 0; i < Math.min(2, duotoneAssets.length); i++) {
243
+ const duotoneAsset = duotoneAssets[i];
244
+
245
+ const duotoneImageBlock = await engine.block.addImage(imageUri, {
246
+ size: blockSize
247
+ });
248
+ engine.block.appendChild(page, duotoneImageBlock);
249
+ duotoneImageBlocks.push(duotoneImageBlock);
250
+
251
+ // Create Duotone filter effect using the full effect type URI
252
+ const duotoneEffect = engine.block.createEffect(
253
+ '//ly.img.ubq/effect/duotone_filter'
254
+ );
255
+
256
+ // Convert hex colors from asset metadata to RGBA (0-1 range)
257
+ const darkColor = hexToRgba(duotoneAsset.meta?.darkColor as string);
258
+ engine.block.setColor(
259
+ duotoneEffect,
260
+ 'effect/duotone_filter/darkColor',
261
+ darkColor
262
+ );
263
+
264
+ const lightColor = hexToRgba(duotoneAsset.meta?.lightColor as string);
265
+ engine.block.setColor(
266
+ duotoneEffect,
267
+ 'effect/duotone_filter/lightColor',
268
+ lightColor
269
+ );
270
+
271
+ engine.block.setFloat(
272
+ duotoneEffect,
273
+ 'effect/duotone_filter/intensity',
274
+ 0.8
275
+ );
276
+
277
+ engine.block.appendEffect(duotoneImageBlock, duotoneEffect);
278
+ }
279
+
280
+ // Pattern #5: Progressive Complexity - now combining multiple effects
281
+ // Create a separate image block to demonstrate combining multiple effects (Grid position 7)
282
+ const combinedImageBlock = await engine.block.addImage(imageUri, {
283
+ size: blockSize
284
+ });
285
+ engine.block.appendChild(page, combinedImageBlock);
286
+
287
+ // Apply effects in order - the stack will contain:
288
+ // 1. adjustments (brightness/contrast) - applied first
289
+ // 2. blur - applied second
290
+ // 3. duotone (color tinting) - applied third
291
+ // 4. pixelize - applied last
292
+
293
+ const combinedAdjustments = engine.block.createEffect('adjustments');
294
+ engine.block.appendEffect(combinedImageBlock, combinedAdjustments);
295
+ engine.block.setFloat(
296
+ combinedAdjustments,
297
+ 'effect/adjustments/brightness',
298
+ 0.2
299
+ );
300
+ engine.block.setFloat(
301
+ combinedAdjustments,
302
+ 'effect/adjustments/contrast',
303
+ 0.15
304
+ );
305
+
306
+ const combinedBlur = engine.block.createEffect('extrude_blur');
307
+ engine.block.appendEffect(combinedImageBlock, combinedBlur);
308
+ engine.block.setFloat(combinedBlur, 'effect/extrude_blur/amount', 0.3);
309
+
310
+ const combinedDuotone = engine.block.createEffect('duotone_filter');
311
+ engine.block.appendEffect(combinedImageBlock, combinedDuotone);
312
+ engine.block.setColor(combinedDuotone, 'duotone_filter/darkColor', {
313
+ r: 0.1,
314
+ g: 0.2,
315
+ b: 0.4,
316
+ a: 1.0
317
+ });
318
+ engine.block.setColor(combinedDuotone, 'duotone_filter/lightColor', {
319
+ r: 0.9,
320
+ g: 0.8,
321
+ b: 0.6,
322
+ a: 1.0
323
+ });
324
+ engine.block.setFloat(combinedDuotone, 'duotone_filter/intensity', 0.6);
325
+
326
+ const pixelizeEffect = engine.block.createEffect('pixelize');
327
+ engine.block.appendEffect(combinedImageBlock, pixelizeEffect);
328
+ engine.block.setInt(pixelizeEffect, 'pixelize/horizontalPixelSize', 8);
329
+ engine.block.setInt(pixelizeEffect, 'pixelize/verticalPixelSize', 8);
330
+
331
+ // Get all effects applied to the combined block
332
+ const effects = engine.block.getEffects(combinedImageBlock);
333
+ // eslint-disable-next-line no-console
334
+ console.log('Applied effects:', effects);
335
+
336
+ // Access properties of specific effects
337
+ effects.forEach((effect, index) => {
338
+ const effectType = engine.block.getType(effect);
339
+ const isEnabled = engine.block.isEffectEnabled(effect);
340
+ // eslint-disable-next-line no-console
341
+ console.log(`Effect ${index}: ${effectType}, enabled: ${isEnabled}`);
342
+ });
343
+
344
+ // Check if effect is enabled
345
+ const isBlurEnabled = engine.block.isEffectEnabled(combinedBlur);
346
+ // eslint-disable-next-line no-console
347
+ console.log('Blur effect is enabled:', isBlurEnabled);
348
+
349
+ // Create a temporary block to demonstrate effect removal
350
+ const tempBlock = await engine.block.addImage(imageUri, {
351
+ size: blockSize
352
+ });
353
+ engine.block.appendChild(page, tempBlock);
354
+
355
+ const tempEffect = engine.block.createEffect('pixelize');
356
+ engine.block.appendEffect(tempBlock, tempEffect);
357
+ engine.block.setInt(tempEffect, 'pixelize/horizontalPixelSize', 12);
358
+
359
+ // Remove the effect
360
+ const tempEffects = engine.block.getEffects(tempBlock);
361
+ const effectIndex = tempEffects.indexOf(tempEffect);
362
+ if (effectIndex !== -1) {
363
+ engine.block.removeEffect(tempBlock, effectIndex);
364
+ }
365
+
366
+ // Destroy the removed effect to free memory
367
+ engine.block.destroy(tempEffect);
368
+
369
+ // ===== Position all blocks in grid layout =====
370
+ const blocks = [
371
+ sampleBlock, // Position 0
372
+ blurImageBlock, // Position 1
373
+ adjustmentsImageBlock, // Position 2
374
+ ...lutImageBlocks, // Positions 3-4
375
+ ...duotoneImageBlocks, // Positions 5-6
376
+ combinedImageBlock, // Position 7
377
+ tempBlock // Position 8
378
+ ];
379
+
380
+ blocks.forEach((block, index) => {
381
+ const pos = getPosition(index);
382
+ engine.block.setPositionX(block, pos.x);
383
+ engine.block.setPositionY(block, pos.y);
384
+ });
385
+
386
+ // Apply same effects to multiple blocks
387
+ const allGraphics = engine.block.findByType('graphic');
388
+
389
+ allGraphics.forEach((graphic) => {
390
+ if (engine.block.supportsEffects(graphic)) {
391
+ // Only apply to blocks that don't already have effects
392
+ const existingEffects = engine.block.getEffects(graphic);
393
+ if (existingEffects.length === 0) {
394
+ const effect = engine.block.createEffect('adjustments');
395
+ engine.block.appendEffect(graphic, effect);
396
+ engine.block.setFloat(effect, 'effect/adjustments/brightness', 0.1);
397
+ }
398
+ }
399
+ });
400
+
401
+ // eslint-disable-next-line no-console
402
+ console.log(
403
+ 'Effects guide initialized. Select any image to see effects panel.'
404
+ );
405
+ }
406
+ }
407
+
408
+ export default Example;
409
+ ```
410
+
411
+ This guide covers how to enable the built-in effects panel for interactive editing and how to apply and manage effects programmatically using the block API.
412
+
413
+ ## Using the Built-in Effects UI
414
+
415
+ ### Enable Effects Features
416
+
417
+ To give users access to effects in the inspector panel, we enable the effects features using CE.SDK's Feature API. Effects and filters appear in the **inspector bar** and **advanced inspector** when a user selects a supported element.
418
+
419
+ ```typescript highlight-enable-effects-features
420
+ // Enable effects and filters in the inspector panel using the Feature API
421
+ cesdk.feature.enable('ly.img.effect'); // Enable all effects
422
+ cesdk.feature.enable('ly.img.filter'); // Enable all filters
423
+ cesdk.feature.enable('ly.img.blur'); // Enable blur effect
424
+ cesdk.feature.enable('ly.img.adjustment'); // Enable adjustments
425
+ ```
426
+
427
+ The Feature API controls which capabilities are available to users. By enabling `ly.img.effect` and `ly.img.filter`, the inspector panel displays effect and filter options when users select compatible blocks. You can also enable specific effects individually like `ly.img.blur` or `ly.img.adjustment` for more granular control.
428
+
429
+ Effects are enabled by default for graphic blocks with image or video fills. The Feature API shown above allows you to control which specific effects appear in the inspector panel UI.
430
+
431
+ ### User Workflow
432
+
433
+ With effects features enabled, users can enhance their designs through a visual workflow in the inspector panel:
434
+
435
+ 1. **Select an element** - Click on any image or supported graphic block in the canvas
436
+ 2. **Access inspector** - The inspector panel shows available options for the selected element
437
+ 3. **Find effects section** - Scroll to the effects and filters sections within the inspector
438
+ 4. **Browse and apply** - Click through available effects to apply them
439
+ 5. **Adjust parameters** - Use sliders and controls to fine-tune intensity and other effect properties
440
+ 6. **Manage effects** - Toggle effects on/off, switch between effects, or reset effect parameters
441
+
442
+ > **Note:** Effects are applied immediately when selected. CE.SDK does not currently
443
+ > support live preview mode when browsing effects before application. Effect
444
+ > reordering is not supported—use toggle on/off, switch, or reset operations to
445
+ > manage applied effects.
446
+
447
+ This interactive approach is perfect for creative exploration and allows users to see results immediately without any coding knowledge.
448
+
449
+ ## Programmatic Effect Application
450
+
451
+ ### Initialize CE.SDK
452
+
453
+ For applications that need to apply effects programmatically—whether for automation, batch processing, or dynamic user experiences—we start by setting up CE.SDK with the proper configuration.
454
+
455
+ ```typescript highlight-setup
456
+ await cesdk.addPlugin(new DesignEditorConfig());
457
+
458
+ // Add asset source plugins
459
+ await cesdk.addPlugin(new BlurAssetSource());
460
+ await cesdk.addPlugin(new ColorPaletteAssetSource());
461
+ await cesdk.addPlugin(new CropPresetsAssetSource());
462
+ await cesdk.addPlugin(
463
+ new UploadAssetSources({ include: ['ly.img.image.upload'] })
464
+ );
465
+ await cesdk.addPlugin(
466
+ new DemoAssetSources({
467
+ include: [
468
+ 'ly.img.templates.blank.*',
469
+ 'ly.img.templates.presentation.*',
470
+ 'ly.img.templates.print.*',
471
+ 'ly.img.templates.social.*',
472
+ 'ly.img.image.*'
473
+ ]
474
+ })
475
+ );
476
+ await cesdk.addPlugin(new EffectsAssetSource());
477
+ await cesdk.addPlugin(new FiltersAssetSource());
478
+ await cesdk.addPlugin(new PagePresetsAssetSource());
479
+ await cesdk.addPlugin(new StickerAssetSource());
480
+ await cesdk.addPlugin(new TextAssetSource());
481
+ await cesdk.addPlugin(new TextComponentAssetSource());
482
+ await cesdk.addPlugin(new TypefaceAssetSource());
483
+ await cesdk.addPlugin(new VectorShapeAssetSource());
484
+
485
+ await cesdk.actions.run('scene.create', {
486
+ page: { width: 800, height: 600, unit: 'Pixel' }
487
+ });
488
+
489
+ const engine = cesdk.engine;
490
+ const page = engine.block.findByType('page')[0];
491
+
492
+ const pageWidth = engine.block.getWidth(page);
493
+ const pageHeight = engine.block.getHeight(page);
494
+ ```
495
+
496
+ This initializes the full CE.SDK interface with the effects panel enabled, giving you both UI and API access to the effects system.
497
+
498
+ ### Check Effect Support
499
+
500
+ Before applying effects to a block, we check whether it supports them. Not all block types can have effects applied—for example, page blocks and scene blocks do not support effects.
501
+
502
+ ```typescript highlight-check-effect-support
503
+ // Pattern #2: Use Convenience APIs - addImage() simplifies block creation
504
+ // Create a sample block to demonstrate effect support checking
505
+ const blockSize = { width: blockWidth, height: blockHeight };
506
+ const sampleBlock = await engine.block.addImage(imageUri, {
507
+ size: blockSize
508
+ });
509
+ engine.block.appendChild(page, sampleBlock);
510
+
511
+ // Check if a block supports effects
512
+ const supportsEffects = engine.block.supportsEffects(sampleBlock);
513
+ // eslint-disable-next-line no-console
514
+ console.log('Block supports effects:', supportsEffects); // true for graphics
515
+
516
+ // Page blocks don't support effects
517
+ const pageSupportsEffects = engine.block.supportsEffects(page);
518
+ // eslint-disable-next-line no-console
519
+ console.log('Page supports effects:', pageSupportsEffects); // false
520
+
521
+ // Select this block so effects panel is visible
522
+ engine.block.setSelected(sampleBlock, true);
523
+ ```
524
+
525
+ Effect support is available for:
526
+
527
+ - **Graphic blocks** with image fills
528
+ - **Graphic blocks** with video fills (with performance considerations)
529
+ - **Shape blocks** with fills
530
+ - **Text blocks** (with limited effect types)
531
+ - **Page blocks** (particularly when they have fills applied, such as background fills)
532
+
533
+ Always verify support before creating and applying effects to avoid errors and ensure a smooth user experience.
534
+
535
+ ### Apply Basic Effects
536
+
537
+ Once we've confirmed a block supports effects, we can create and apply effects using the effect API. Here we create a separate image block using the convenience `addImage()` API and apply a blur effect to it.
538
+
539
+ > **Tip:** The example code uses the `engine.block.addImage()` convenience API throughout
540
+ > this guide. This built-in helper simplifies image block creation compared to
541
+ > manually constructing graphic blocks with image fills, and provides additional
542
+ > configuration options like positioning, sizing, corner radius, shadows, and
543
+ > time-based properties.
544
+
545
+ ```typescript highlight-apply-basic-effects
546
+ // Pattern #1: Demonstrate Individual Before Combined
547
+ // Create a separate image block for blur demonstration
548
+ const blurImageBlock = await engine.block.addImage(imageUri, {
549
+ size: blockSize
550
+ });
551
+ engine.block.appendChild(page, blurImageBlock);
552
+
553
+ // Create and apply a blur effect
554
+ const blurEffect = engine.block.createEffect('extrude_blur');
555
+ engine.block.appendEffect(blurImageBlock, blurEffect);
556
+
557
+ // Adjust blur intensity
558
+ engine.block.setFloat(blurEffect, 'effect/extrude_blur/amount', 0.5);
559
+ ```
560
+
561
+ CE.SDK provides several built-in effect types:
562
+
563
+ - `extrude_blur` - Gaussian blur with configurable intensity
564
+ - `adjustments` - Brightness, contrast, saturation, exposure
565
+ - `pixelize` - Pixelation effect
566
+ - `vignette` - Darkened corners
567
+ - `half_tone` - Halftone pattern
568
+ - `lut_filter` - Color grading with LUT files
569
+ - `duotone` - Two-color tinting
570
+
571
+ > **Note:** `extrude_blur` is the only blur available as an effect. CE.SDK also provides
572
+ > additional blur types in a separate blur category.
573
+
574
+ Each effect type has its own set of configurable properties that control its visual appearance.
575
+
576
+ ### Configure Effect Parameters
577
+
578
+ After creating an effect, we can customize its appearance by setting properties. Each effect exposes different parameters depending on its type and capabilities.
579
+
580
+ ```typescript highlight-configure-effect-parameters
581
+ // Create a separate image block for adjustments demonstration
582
+ const adjustmentsImageBlock = await engine.block.addImage(imageUri, {
583
+ size: blockSize
584
+ });
585
+ engine.block.appendChild(page, adjustmentsImageBlock);
586
+
587
+ // Create adjustments effect for brightness and contrast
588
+ const adjustmentsEffect = engine.block.createEffect('adjustments');
589
+ engine.block.appendEffect(adjustmentsImageBlock, adjustmentsEffect);
590
+
591
+ // Find all available properties for this effect
592
+ const adjustmentProperties = engine.block.findAllProperties(adjustmentsEffect);
593
+ // eslint-disable-next-line no-console
594
+ console.log('Available adjustment properties:', adjustmentProperties);
595
+
596
+ // Set brightness, contrast, and saturation
597
+ engine.block.setFloat(adjustmentsEffect, 'effect/adjustments/brightness', 0.2);
598
+ engine.block.setFloat(adjustmentsEffect, 'effect/adjustments/contrast', 0.15);
599
+ engine.block.setFloat(adjustmentsEffect, 'effect/adjustments/saturation', 0.1);
600
+ ```
601
+
602
+ CE.SDK provides typed setter methods for different parameter types:
603
+
604
+ - **`setFloat()`** - For intensity, amount, and radius values (typically 0.0 to 1.0)
605
+ - **`setInt()`** - For discrete values like pixel sizes
606
+ - **`setString()`** - For file URIs (LUT files, image references)
607
+ - **`setBool()`** - For enabling or disabling specific features
608
+
609
+ Using the correct setter method ensures type safety and proper value validation.
610
+
611
+ ### Apply LUT Filters
612
+
613
+ LUT (Look-Up Table) filters apply professional color grading by transforming colors through a predefined mapping. These are particularly useful for creating consistent brand aesthetics or applying cinematic color treatments.
614
+
615
+ The example demonstrates querying LUT filters from the asset library using `engine.asset.findAssets('ly.img.filter')`, then applying them using metadata from the asset results. This approach matches how CE.SDK's built-in filter panel works.
616
+
617
+ ```typescript highlight-apply-lut-filter
618
+ // Demonstrate LUT filters by applying the first 2 from asset library
619
+ // These filters are fetched from the demo asset sources (Grid positions 3-4)
620
+ const lutImageBlocks = [];
621
+ for (let i = 0; i < Math.min(2, lutAssets.length); i++) {
622
+ const lutAsset = lutAssets[i];
623
+
624
+ const lutImageBlock = await engine.block.addImage(imageUri, {
625
+ size: blockSize
626
+ });
627
+ engine.block.appendChild(page, lutImageBlock);
628
+ lutImageBlocks.push(lutImageBlock);
629
+
630
+ // Create LUT filter effect using the full effect type URI
631
+ const lutEffect = engine.block.createEffect('//ly.img.ubq/effect/lut_filter');
632
+
633
+ // Use asset metadata for LUT configuration
634
+ // The asset provides the LUT file URI and grid dimensions
635
+ engine.block.setString(
636
+ lutEffect,
637
+ 'effect/lut_filter/lutFileURI',
638
+ lutAsset.meta?.uri as string
639
+ );
640
+ engine.block.setInt(
641
+ lutEffect,
642
+ 'effect/lut_filter/horizontalTileCount',
643
+ parseInt(lutAsset.meta?.horizontalTileCount as string, 10)
644
+ );
645
+ engine.block.setInt(
646
+ lutEffect,
647
+ 'effect/lut_filter/verticalTileCount',
648
+ parseInt(lutAsset.meta?.verticalTileCount as string, 10)
649
+ );
650
+ engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
651
+
652
+ engine.block.appendEffect(lutImageBlock, lutEffect);
653
+ }
654
+ ```
655
+
656
+ LUT filters are ideal for:
657
+
658
+ - Creating consistent brand aesthetics across all designs
659
+ - Applying cinematic or film-style color grading
660
+ - Matching reference images or maintaining color continuity
661
+ - Building curated filter collections for users
662
+
663
+ **Asset metadata structure**: Each LUT asset provides `uri` (the LUT file URL), `horizontalTileCount`, and `verticalTileCount` describing the grid layout of color transformation cubes.
664
+
665
+ ### Apply Duotone Filters
666
+
667
+ Duotone filters create artistic two-color effects by mapping image tones to two colors (dark and light). This effect is popular for creating stylized visuals, vintage aesthetics, or brand-specific color treatments.
668
+
669
+ The example queries duotone filters from the asset library, then applies them using color metadata. The `hexToRgba` utility converts hex color values from asset metadata to RGBA format required by the `setColorRGBA` API.
670
+
671
+ ```typescript highlight-apply-duotone-filter
672
+ // Demonstrate Duotone filters by applying the first 2 from asset library
673
+ // Duotone filters create artistic two-color treatments (Grid positions 5-6)
674
+ const duotoneImageBlocks = [];
675
+ for (let i = 0; i < Math.min(2, duotoneAssets.length); i++) {
676
+ const duotoneAsset = duotoneAssets[i];
677
+
678
+ const duotoneImageBlock = await engine.block.addImage(imageUri, {
679
+ size: blockSize
680
+ });
681
+ engine.block.appendChild(page, duotoneImageBlock);
682
+ duotoneImageBlocks.push(duotoneImageBlock);
683
+
684
+ // Create Duotone filter effect using the full effect type URI
685
+ const duotoneEffect = engine.block.createEffect(
686
+ '//ly.img.ubq/effect/duotone_filter'
687
+ );
688
+
689
+ // Convert hex colors from asset metadata to RGBA (0-1 range)
690
+ const darkColor = hexToRgba(duotoneAsset.meta?.darkColor as string);
691
+ engine.block.setColor(
692
+ duotoneEffect,
693
+ 'effect/duotone_filter/darkColor',
694
+ darkColor
695
+ );
696
+
697
+ const lightColor = hexToRgba(duotoneAsset.meta?.lightColor as string);
698
+ engine.block.setColor(
699
+ duotoneEffect,
700
+ 'effect/duotone_filter/lightColor',
701
+ lightColor
702
+ );
703
+
704
+ engine.block.setFloat(duotoneEffect, 'effect/duotone_filter/intensity', 0.8);
705
+
706
+ engine.block.appendEffect(duotoneImageBlock, duotoneEffect);
707
+ }
708
+ ```
709
+
710
+ Duotone filters work by:
711
+
712
+ - Mapping darker image tones to the **dark color**
713
+ - Mapping lighter image tones to the **light color**
714
+ - Blending between the two colors based on pixel brightness
715
+ - Adjusting intensity to control the effect strength (0.0 to 1.0)
716
+
717
+ **Asset metadata structure**: Each duotone asset provides `darkColor` and `lightColor` as hex strings (e.g., `"#1a2b3c"`) which must be converted to RGBA values for the effect API.
718
+
719
+ ### Combine Multiple Effects
720
+
721
+ One of the most powerful features of CE.SDK's effect system is the ability to stack multiple effects on a single block. Each effect is applied sequentially, allowing you to build complex visual treatments.
722
+
723
+ > **Note:** The example code demonstrates each effect type individually on separate image
724
+ > blocks before showing them combined. This educational approach helps you
725
+ > understand what each effect does before seeing them work together. In your
726
+ > production code, you can apply multiple effects directly to the same block
727
+ > without this separation.
728
+
729
+ ```typescript highlight-combine-multiple-effects
730
+ // Pattern #5: Progressive Complexity - now combining multiple effects
731
+ // Create a separate image block to demonstrate combining multiple effects (Grid position 7)
732
+ const combinedImageBlock = await engine.block.addImage(imageUri, {
733
+ size: blockSize
734
+ });
735
+ engine.block.appendChild(page, combinedImageBlock);
736
+
737
+ // Apply effects in order - the stack will contain:
738
+ // 1. adjustments (brightness/contrast) - applied first
739
+ // 2. blur - applied second
740
+ // 3. duotone (color tinting) - applied third
741
+ // 4. pixelize - applied last
742
+
743
+ const combinedAdjustments = engine.block.createEffect('adjustments');
744
+ engine.block.appendEffect(combinedImageBlock, combinedAdjustments);
745
+ engine.block.setFloat(
746
+ combinedAdjustments,
747
+ 'effect/adjustments/brightness',
748
+ 0.2
749
+ );
750
+ engine.block.setFloat(combinedAdjustments, 'effect/adjustments/contrast', 0.15);
751
+
752
+ const combinedBlur = engine.block.createEffect('extrude_blur');
753
+ engine.block.appendEffect(combinedImageBlock, combinedBlur);
754
+ engine.block.setFloat(combinedBlur, 'effect/extrude_blur/amount', 0.3);
755
+
756
+ const combinedDuotone = engine.block.createEffect('duotone_filter');
757
+ engine.block.appendEffect(combinedImageBlock, combinedDuotone);
758
+ engine.block.setColor(combinedDuotone, 'duotone_filter/darkColor', {
759
+ r: 0.1,
760
+ g: 0.2,
761
+ b: 0.4,
762
+ a: 1.0
763
+ });
764
+ engine.block.setColor(combinedDuotone, 'duotone_filter/lightColor', {
765
+ r: 0.9,
766
+ g: 0.8,
767
+ b: 0.6,
768
+ a: 1.0
769
+ });
770
+ engine.block.setFloat(combinedDuotone, 'duotone_filter/intensity', 0.6);
771
+
772
+ const pixelizeEffect = engine.block.createEffect('pixelize');
773
+ engine.block.appendEffect(combinedImageBlock, pixelizeEffect);
774
+ engine.block.setInt(pixelizeEffect, 'pixelize/horizontalPixelSize', 8);
775
+ engine.block.setInt(pixelizeEffect, 'pixelize/verticalPixelSize', 8);
776
+ ```
777
+
778
+ **Effect ordering matters**: Effects are applied from the bottom of the stack to the top. In this example:
779
+
780
+ 1. First, we adjust brightness and contrast
781
+ 2. Then, we apply blur
782
+ 3. Then, we apply color grading with a LUT filter
783
+ 4. Finally, we add stylization with pixelization
784
+
785
+ Experiment with different orderings to achieve the desired visual result—changing the order can significantly impact the final appearance.
786
+
787
+ ## Managing Applied Effects
788
+
789
+ ### List and Access Effects
790
+
791
+ We can retrieve all effects applied to a block and inspect their properties. This is useful for building effect management interfaces or debugging effect configurations.
792
+
793
+ ```typescript highlight-list-effects
794
+ // Get all effects applied to the combined block
795
+ const effects = engine.block.getEffects(combinedImageBlock);
796
+ // eslint-disable-next-line no-console
797
+ console.log('Applied effects:', effects);
798
+
799
+ // Access properties of specific effects
800
+ effects.forEach((effect, index) => {
801
+ const effectType = engine.block.getType(effect);
802
+ const isEnabled = engine.block.isEffectEnabled(effect);
803
+ // eslint-disable-next-line no-console
804
+ console.log(`Effect ${index}: ${effectType}, enabled: ${isEnabled}`);
805
+ });
806
+ ```
807
+
808
+ This allows you to iterate through all applied effects, read their properties, and make modifications as needed.
809
+
810
+ ### Enable/Disable Effects
811
+
812
+ CE.SDK allows you to temporarily toggle effects on and off without removing them from the block. This is particularly useful for before/after comparisons or when you need to optimize rendering performance during interactive editing sessions.
813
+
814
+ ```typescript highlight-enable-disable-effects
815
+ // Check if effect is enabled
816
+ const isBlurEnabled = engine.block.isEffectEnabled(combinedBlur);
817
+ // eslint-disable-next-line no-console
818
+ console.log('Blur effect is enabled:', isBlurEnabled);
819
+ ```
820
+
821
+ When you disable an effect, it remains attached to the block but won't be rendered until you enable it again. This preserves all effect parameters while giving you full control over when the effect is applied.
822
+
823
+ You can use this feature to create interactive preview modes, implement undo-like functionality, or conditionally apply effects based on user preferences or device capabilities.
824
+
825
+ ### Remove Effects
826
+
827
+ When you no longer need an effect, you can remove it from the effect stack and free its resources. Always destroy effects that are no longer in use to prevent memory leaks.
828
+
829
+ ```typescript highlight-remove-effects
830
+ // Create a temporary block to demonstrate effect removal
831
+ const tempBlock = await engine.block.addImage(imageUri, {
832
+ size: blockSize
833
+ });
834
+ engine.block.appendChild(page, tempBlock);
835
+
836
+ const tempEffect = engine.block.createEffect('pixelize');
837
+ engine.block.appendEffect(tempBlock, tempEffect);
838
+ engine.block.setInt(tempEffect, 'pixelize/horizontalPixelSize', 12);
839
+
840
+ // Remove the effect
841
+ const tempEffects = engine.block.getEffects(tempBlock);
842
+ const effectIndex = tempEffects.indexOf(tempEffect);
843
+ if (effectIndex !== -1) {
844
+ engine.block.removeEffect(tempBlock, effectIndex);
845
+ }
846
+
847
+ // Destroy the removed effect to free memory
848
+ engine.block.destroy(tempEffect);
849
+ ```
850
+
851
+ The `removeEffect()` method takes an index position, so you can remove effects selectively from any position in the stack. After removal, destroy the effect instance to ensure proper cleanup.
852
+
853
+ ## Additional Techniques
854
+
855
+ ### Batch Processing
856
+
857
+ For applications that need to apply the same effects to multiple elements, we can iterate through a collection of blocks and apply effects efficiently.
858
+
859
+ ```typescript highlight-batch-processing
860
+ // Apply same effects to multiple blocks
861
+ const allGraphics = engine.block.findByType('graphic');
862
+
863
+ allGraphics.forEach((graphic) => {
864
+ if (engine.block.supportsEffects(graphic)) {
865
+ // Only apply to blocks that don't already have effects
866
+ const existingEffects = engine.block.getEffects(graphic);
867
+ if (existingEffects.length === 0) {
868
+ const effect = engine.block.createEffect('adjustments');
869
+ engine.block.appendEffect(graphic, effect);
870
+ engine.block.setFloat(effect, 'effect/adjustments/brightness', 0.1);
871
+ }
872
+ }
873
+ });
874
+ ```
875
+
876
+ When batch processing, check effect support before creating effects to avoid unnecessary work. You can also reuse effect instances when applying the same configuration to multiple blocks, though be careful to destroy them properly when done.
877
+
878
+ ### Dynamic Effects with Animations
879
+
880
+ You can combine effects with CE.SDK's built-in animation system to create dynamic visual treatments that change over time.
881
+
882
+ > **Caution:** Effect parameters are static properties and cannot be animated using
883
+ > JavaScript timers like `setInterval` or `requestAnimationFrame`. For animated
884
+ > content, use CE.SDK's built-in animation blocks (`createAnimation()`,
885
+ > `setInAnimation()`, etc.) or refer to the animation guides.
886
+
887
+ For dynamic visual effects in video projects, explore CE.SDK's animation system which provides professionally designed transitions and effects that integrate seamlessly with the rendering pipeline.
888
+
889
+ ### Custom Effect Combinations
890
+
891
+ Creating reusable effect presets allows you to maintain consistent styling across your application and speed up common effect applications. Here's a pattern for building reusable effect configurations:
892
+
893
+ ```typescript
894
+ // Create a reusable preset function
895
+ async function applyVintagePreset(engine: CreativeEngine, imageBlock: number) {
896
+ // Apply LUT filter
897
+ const lutEffect = engine.block.createEffect('lut_filter');
898
+ engine.block.setString(
899
+ lutEffect,
900
+ 'lut_filter/lutFileURI',
901
+ 'https://img.ly/static/ubq_luts/vintage.png'
902
+ );
903
+ engine.block.appendEffect(imageBlock, lutEffect);
904
+
905
+ // Add vignette
906
+ const vignetteEffect = engine.block.createEffect('vignette');
907
+ engine.block.setFloat(vignetteEffect, 'vignette/intensity', 0.5);
908
+ engine.block.appendEffect(imageBlock, vignetteEffect);
909
+
910
+ return { lutEffect, vignetteEffect };
911
+ }
912
+
913
+ // Use the preset
914
+ const effects = await applyVintagePreset(engine, myImageBlock);
915
+ ```
916
+
917
+ Preset strategies include:
918
+
919
+ - **Brand filters** - Maintain a consistent look across campaigns
920
+ - **Style templates** - Provide quick application of complex multi-effect treatments
921
+ - **User favorites** - Allow users to save and recall their preferred settings
922
+
923
+ ## Performance Considerations
924
+
925
+ CE.SDK's effect system is optimized for real-time performance, but understanding these considerations helps you build responsive applications:
926
+
927
+ - **GPU acceleration**: Effects leverage GPU rendering for smooth performance on modern devices
928
+ - **Mobile optimization**: Limit effects to 2-3 per element on mobile devices to maintain responsiveness
929
+ - **Effect complexity**: Blur and LUT filters are computationally expensive compared to simple adjustments
930
+ - **Video effects**: Apply effects sparingly to video blocks to maintain smooth playback
931
+ - **Real-time editing**: Temporarily disable effects during intensive editing operations for better interactivity
932
+
933
+ Test your effect combinations on target devices early in development to ensure acceptable performance.
934
+
935
+ ## Troubleshooting
936
+
937
+ ### Effect Not Visible
938
+
939
+ If an effect doesn't appear after applying it, check these common issues:
940
+
941
+ - Verify the block type supports effects using `supportsEffects()`
942
+ - Check that the effect is enabled with `isEffectEnabled()`
943
+ - Ensure effect parameters are in valid ranges (e.g., intensity values between 0.0 and 1.0)
944
+ - Confirm the effect is in the effect stack with `getEffects()`
945
+
946
+ ### Performance Degradation
947
+
948
+ If you experience slow rendering or laggy interactions:
949
+
950
+ - Reduce the number of effects per element (aim for 2-3 maximum on mobile)
951
+ - Lower blur radius values or use smaller LUT files
952
+ - Temporarily disable effects during editing with `setEffectEnabled()`
953
+ - Test on target devices early to identify performance bottlenecks
954
+
955
+ ### Effects Not Persisting
956
+
957
+ Effects should save automatically with the scene, but verify:
958
+
959
+ - You're not destroying effects prematurely before saving
960
+ - Save/load operations complete successfully
961
+ - Effect URIs (LUT files, images) remain accessible after loading
962
+
963
+ ### Incompatible Block Types
964
+
965
+ If you can't apply an effect:
966
+
967
+ - Remember that graphic blocks (with image or video fills), shape blocks, and text blocks support effects
968
+ - Page blocks themselves don't support effects directly, but page fills (such as background fills) do support effects
969
+ - Scene blocks cannot have effects applied
970
+ - Check the block type with `block.getType()` and use `block.supportsEffects()` before attempting to apply effects
971
+
972
+ ## API Reference
973
+
974
+ | Method | Description |
975
+ | ------------------------------------------ | ------------------------------------------ |
976
+ | `block.supportsEffects(block)` | Check if a block supports effects |
977
+ | `block.createEffect(type)` | Create a new effect instance |
978
+ | `block.appendEffect(block, effect)` | Add effect to the end of the effect stack |
979
+ | `block.insertEffect(block, effect, index)` | Insert effect at a specific position |
980
+ | `block.removeEffect(block, index)` | Remove effect at the specified index |
981
+ | `block.getEffects(block)` | Get all effects applied to a block |
982
+ | `block.setEffectEnabled(effect, enabled)` | Enable or disable an effect |
983
+ | `block.isEffectEnabled(effect)` | Check if an effect is currently enabled |
984
+ | `block.findAllProperties(effect)` | Get all available properties for an effect |
985
+ | `block.setFloat(effect, property, value)` | Set a floating-point property value |
986
+ | `block.setInt(effect, property, value)` | Set an integer property value |
987
+ | `block.setString(effect, property, value)` | Set a string property value |
988
+ | `block.setBool(effect, property, value)` | Set a boolean property value |
989
+ | `block.destroy(effect)` | Destroy an unused effect instance |
990
+
991
+ ## About the Example Code
992
+
993
+ The example code accompanying this guide follows educational design patterns to help you learn effectively:
994
+
995
+ - **Individual demonstrations**: Each effect type is demonstrated on its own image block before showing combinations, making it easier to understand what each effect does
996
+ - **Convenience API usage**: The code uses `engine.block.addImage()` instead of manual block construction—this is the recommended approach for simplicity and maintainability
997
+ - **Spatial layout**: Image blocks are positioned in a grid layout (x/y coordinates) so you can visually see the results of each effect when running the example
998
+ - **Progressive complexity**: The example starts with simple single effects and gradually builds to complex multi-effect combinations
999
+
1000
+ In your production code, you can apply multiple effects directly to the same block without creating separate demonstration blocks. The example structure is optimized for learning, not production usage.
1001
+
1002
+ ## Next Steps
1003
+
1004
+ Now that you understand how to apply and manage filters and effects, explore specific effect types and advanced techniques:
1005
+
1006
+ - **LUT Filters** - Create custom color grading filters for cinematic looks
1007
+ - **Blur Effects** - Apply depth of field and motion blur techniques
1008
+ - **Duotone Effects** - Create striking two-color artistic treatments
1009
+ - **Adjustments** - Fine-tune brightness, contrast, and saturation
1010
+ - **Effect Combinations** - Build sophisticated multi-effect visual treatments
1011
+
1012
+ ---
1013
+
1014
+ ## More Resources
1015
+
1016
+ - **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
1017
+ - **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
1018
+ - **[Web Documentation](./js.md)** - Interactive documentation with examples
1019
+ - **[Support](mailto:support@img.ly)** - Contact IMG.LY support