@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.
- package/LICENSE.md +16 -0
- package/README.md +158 -0
- package/assets/docs/api/SKILL.md +49 -0
- package/assets/docs/api/index.d.ts +10518 -0
- package/assets/docs/guide/SKILL.md +142 -0
- package/assets/docs/guide/actions.md +1038 -0
- package/assets/docs/guide/animation/create/base.md +467 -0
- package/assets/docs/guide/animation/create/text.md +453 -0
- package/assets/docs/guide/animation/create.md +558 -0
- package/assets/docs/guide/animation/edit.md +501 -0
- package/assets/docs/guide/animation/overview.md +22 -0
- package/assets/docs/guide/animation/types.md +430 -0
- package/assets/docs/guide/animation.md +23 -0
- package/assets/docs/guide/api/AssetAPI.md +602 -0
- package/assets/docs/guide/api/BlockAPI.md +6152 -0
- package/assets/docs/guide/api/CreativeEngine.md +180 -0
- package/assets/docs/guide/api/EditorAPI.md +1261 -0
- package/assets/docs/guide/api/EventAPI.md +25 -0
- package/assets/docs/guide/api/SceneAPI.md +729 -0
- package/assets/docs/guide/api/VariableAPI.md +59 -0
- package/assets/docs/guide/api/types.md +71 -0
- package/assets/docs/guide/api-reference/overview.md +20 -0
- package/assets/docs/guide/automation/auto-resize.md +412 -0
- package/assets/docs/guide/automation/batch-processing.md +474 -0
- package/assets/docs/guide/automation/data-merge.md +406 -0
- package/assets/docs/guide/automation/design-generation.md +107 -0
- package/assets/docs/guide/automation/overview.md +16 -0
- package/assets/docs/guide/automation.md +24 -0
- package/assets/docs/guide/browser-support.md +38 -0
- package/assets/docs/guide/capabilities.md +18 -0
- package/assets/docs/guide/colors/adjust.md +551 -0
- package/assets/docs/guide/colors/apply.md +349 -0
- package/assets/docs/guide/colors/basics.md +440 -0
- package/assets/docs/guide/colors/conversion.md +504 -0
- package/assets/docs/guide/colors/create-color-palette.md +426 -0
- package/assets/docs/guide/colors/for-print/cmyk.md +577 -0
- package/assets/docs/guide/colors/for-print/spot.md +751 -0
- package/assets/docs/guide/colors/for-print.md +21 -0
- package/assets/docs/guide/colors/for-screen/p3.md +60 -0
- package/assets/docs/guide/colors/for-screen/srgb.md +463 -0
- package/assets/docs/guide/colors/for-screen.md +21 -0
- package/assets/docs/guide/colors/overview.md +20 -0
- package/assets/docs/guide/colors/replace.md +535 -0
- package/assets/docs/guide/colors.md +28 -0
- package/assets/docs/guide/compatibility.md +27 -0
- package/assets/docs/guide/concepts/architecture.md +99 -0
- package/assets/docs/guide/concepts/assets.md +360 -0
- package/assets/docs/guide/concepts/blocks.md +750 -0
- package/assets/docs/guide/concepts/buffers.md +546 -0
- package/assets/docs/guide/concepts/design-units.md +333 -0
- package/assets/docs/guide/concepts/edit-modes.md +431 -0
- package/assets/docs/guide/concepts/editing-workflow.md +303 -0
- package/assets/docs/guide/concepts/events.md +466 -0
- package/assets/docs/guide/concepts/headless-mode/browser.md +291 -0
- package/assets/docs/guide/concepts/pages.md +396 -0
- package/assets/docs/guide/concepts/resources.md +496 -0
- package/assets/docs/guide/concepts/scenes.md +443 -0
- package/assets/docs/guide/concepts/templating.md +194 -0
- package/assets/docs/guide/concepts/terminology.md +296 -0
- package/assets/docs/guide/concepts/undo-and-history.md +461 -0
- package/assets/docs/guide/concepts.md +38 -0
- package/assets/docs/guide/configuration.md +469 -0
- package/assets/docs/guide/conversion/overview.md +22 -0
- package/assets/docs/guide/conversion/to-base64.md +234 -0
- package/assets/docs/guide/conversion/to-pdf.md +616 -0
- package/assets/docs/guide/conversion/to-png.md +290 -0
- package/assets/docs/guide/conversion.md +23 -0
- package/assets/docs/guide/create-audio/audio/add-music.md +430 -0
- package/assets/docs/guide/create-audio/audio/add-sound-effects.md +664 -0
- package/assets/docs/guide/create-audio/audio/loop.md +370 -0
- package/assets/docs/guide/create-audio/audio.md +336 -0
- package/assets/docs/guide/create-composition/add-background.md +395 -0
- package/assets/docs/guide/create-composition/blend-modes.md +372 -0
- package/assets/docs/guide/create-composition/collage.md +432 -0
- package/assets/docs/guide/create-composition/group-and-ungroup.md +388 -0
- package/assets/docs/guide/create-composition/layer-management.md +503 -0
- package/assets/docs/guide/create-composition/layout.md +396 -0
- package/assets/docs/guide/create-composition/lock-design.md +362 -0
- package/assets/docs/guide/create-composition/multi-page.md +204 -0
- package/assets/docs/guide/create-composition/overview.md +18 -0
- package/assets/docs/guide/create-composition/programmatic.md +593 -0
- package/assets/docs/guide/create-composition.md +30 -0
- package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +688 -0
- package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +600 -0
- package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +647 -0
- package/assets/docs/guide/create-templates/add-dynamic-content.md +307 -0
- package/assets/docs/guide/create-templates/add-to-template-library.md +297 -0
- package/assets/docs/guide/create-templates/edit-or-remove.md +441 -0
- package/assets/docs/guide/create-templates/from-scratch.md +558 -0
- package/assets/docs/guide/create-templates/import/from-scene-file.md +440 -0
- package/assets/docs/guide/create-templates/import.md +244 -0
- package/assets/docs/guide/create-templates/lock.md +325 -0
- package/assets/docs/guide/create-templates/overview.md +16 -0
- package/assets/docs/guide/create-templates.md +32 -0
- package/assets/docs/guide/create-video/audio/adjust-speed.md +302 -0
- package/assets/docs/guide/create-video/audio/adjust-volume.md +346 -0
- package/assets/docs/guide/create-video/control.md +285 -0
- package/assets/docs/guide/create-video/limitations.md +396 -0
- package/assets/docs/guide/create-video/overview.md +224 -0
- package/assets/docs/guide/create-video/timeline-editor.md +622 -0
- package/assets/docs/guide/create-video/update-caption-presets.md +676 -0
- package/assets/docs/guide/create-video.md +32 -0
- package/assets/docs/guide/edit-image/add-watermark.md +497 -0
- package/assets/docs/guide/edit-image/overview.md +22 -0
- package/assets/docs/guide/edit-image/remove-bg.md +420 -0
- package/assets/docs/guide/edit-image/replace-colors.md +680 -0
- package/assets/docs/guide/edit-image/transform/crop.md +523 -0
- package/assets/docs/guide/edit-image/transform/move.md +279 -0
- package/assets/docs/guide/edit-image/transform/resize.md +301 -0
- package/assets/docs/guide/edit-image/transform/rotate.md +408 -0
- package/assets/docs/guide/edit-image/transform/scale.md +278 -0
- package/assets/docs/guide/edit-image/transform.md +24 -0
- package/assets/docs/guide/edit-image/vectorize.md +204 -0
- package/assets/docs/guide/edit-image.md +25 -0
- package/assets/docs/guide/edit-video/add-captions.md +589 -0
- package/assets/docs/guide/edit-video/add-watermark.md +429 -0
- package/assets/docs/guide/edit-video/join-and-arrange.md +540 -0
- package/assets/docs/guide/edit-video/redaction.md +544 -0
- package/assets/docs/guide/edit-video/split.md +634 -0
- package/assets/docs/guide/edit-video/transform/crop.md +380 -0
- package/assets/docs/guide/edit-video/transform/flip.md +182 -0
- package/assets/docs/guide/edit-video/transform/move.md +413 -0
- package/assets/docs/guide/edit-video/transform/resize.md +534 -0
- package/assets/docs/guide/edit-video/transform/rotate.md +312 -0
- package/assets/docs/guide/edit-video/transform/scale.md +603 -0
- package/assets/docs/guide/edit-video/transform.md +25 -0
- package/assets/docs/guide/edit-video/trim.md +773 -0
- package/assets/docs/guide/engine-interface.md +108 -0
- package/assets/docs/guide/export-save-publish/create-thumbnail.md +292 -0
- package/assets/docs/guide/export-save-publish/export/compress.md +639 -0
- package/assets/docs/guide/export-save-publish/export/overview.md +576 -0
- package/assets/docs/guide/export-save-publish/export/partial-export.md +694 -0
- package/assets/docs/guide/export-save-publish/export/size-limits.md +401 -0
- package/assets/docs/guide/export-save-publish/export/to-html5.md +474 -0
- package/assets/docs/guide/export-save-publish/export/to-jpeg.md +312 -0
- package/assets/docs/guide/export-save-publish/export/to-mp4.md +364 -0
- package/assets/docs/guide/export-save-publish/export/to-pdf.md +389 -0
- package/assets/docs/guide/export-save-publish/export/to-png.md +255 -0
- package/assets/docs/guide/export-save-publish/export/to-raw-data.md +303 -0
- package/assets/docs/guide/export-save-publish/export/to-webp.md +261 -0
- package/assets/docs/guide/export-save-publish/export/with-color-mask.md +278 -0
- package/assets/docs/guide/export-save-publish/export.md +36 -0
- package/assets/docs/guide/export-save-publish/for-printing.md +423 -0
- package/assets/docs/guide/export-save-publish/for-social-media.md +318 -0
- package/assets/docs/guide/export-save-publish/pre-export-validation.md +698 -0
- package/assets/docs/guide/export-save-publish/save.md +340 -0
- package/assets/docs/guide/export-save-publish/store-custom-metadata.md +367 -0
- package/assets/docs/guide/file-format-support.md +34 -0
- package/assets/docs/guide/fills/color.md +678 -0
- package/assets/docs/guide/fills/image.md +539 -0
- package/assets/docs/guide/fills/overview.md +144 -0
- package/assets/docs/guide/fills/video.md +641 -0
- package/assets/docs/guide/fills.md +24 -0
- package/assets/docs/guide/filters-and-effects/apply.md +1019 -0
- package/assets/docs/guide/filters-and-effects/blur.md +382 -0
- package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +445 -0
- package/assets/docs/guide/filters-and-effects/create-custom-filters.md +614 -0
- package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +426 -0
- package/assets/docs/guide/filters-and-effects/distortion.md +527 -0
- package/assets/docs/guide/filters-and-effects/duotone.md +602 -0
- package/assets/docs/guide/filters-and-effects/gradients.md +1311 -0
- package/assets/docs/guide/filters-and-effects/overview.md +22 -0
- package/assets/docs/guide/filters-and-effects/support.md +623 -0
- package/assets/docs/guide/filters-and-effects.md +28 -0
- package/assets/docs/guide/get-started/agent-skills.md +119 -0
- package/assets/docs/guide/get-started/build-with-ai.md +45 -0
- package/assets/docs/guide/get-started/mcp-server.md +119 -0
- package/assets/docs/guide/get-started/overview.md +28 -0
- package/assets/docs/guide/get-started/vanilla-js/quickstart.md +175 -0
- package/assets/docs/guide/grid-and-rulers.md +222 -0
- package/assets/docs/guide/guides/export-save-publish/export/audio.md +224 -0
- package/assets/docs/guide/guides/text/rendering-internals.md +796 -0
- package/assets/docs/guide/guides.md +49 -0
- package/assets/docs/guide/import-media/asset-library.md +23 -0
- package/assets/docs/guide/import-media/asset-panel/basics.md +324 -0
- package/assets/docs/guide/import-media/asset-panel/customize.md +478 -0
- package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +415 -0
- package/assets/docs/guide/import-media/asset-panel/thumbnails.md +633 -0
- package/assets/docs/guide/import-media/capture-from-camera/record-video.md +137 -0
- package/assets/docs/guide/import-media/capture-from-camera.md +20 -0
- package/assets/docs/guide/import-media/concepts.md +173 -0
- package/assets/docs/guide/import-media/content-json-schema.md +615 -0
- package/assets/docs/guide/import-media/default-assets.md +381 -0
- package/assets/docs/guide/import-media/edit-or-remove-assets.md +489 -0
- package/assets/docs/guide/import-media/file-format-support.md +178 -0
- package/assets/docs/guide/import-media/from-local-source/user-upload.md +438 -0
- package/assets/docs/guide/import-media/from-local-source.md +20 -0
- package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +390 -0
- package/assets/docs/guide/import-media/from-remote-source/getty-images.md +627 -0
- package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +625 -0
- package/assets/docs/guide/import-media/from-remote-source/pexels.md +692 -0
- package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +473 -0
- package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +497 -0
- package/assets/docs/guide/import-media/from-remote-source/third-party.md +51 -0
- package/assets/docs/guide/import-media/from-remote-source/unsplash.md +914 -0
- package/assets/docs/guide/import-media/from-remote-source/your-server.md +764 -0
- package/assets/docs/guide/import-media/from-remote-source.md +28 -0
- package/assets/docs/guide/import-media/overview.md +32 -0
- package/assets/docs/guide/import-media/retrieve-mimetype.md +274 -0
- package/assets/docs/guide/import-media/size-limits.md +20 -0
- package/assets/docs/guide/import-media/source-sets.md +476 -0
- package/assets/docs/guide/import-media.md +32 -0
- package/assets/docs/guide/insert-media/audio.md +291 -0
- package/assets/docs/guide/insert-media/images.md +380 -0
- package/assets/docs/guide/insert-media/position-and-align.md +734 -0
- package/assets/docs/guide/insert-media/shapes-or-stickers.md +799 -0
- package/assets/docs/guide/insert-media/videos.md +308 -0
- package/assets/docs/guide/insert-media.md +24 -0
- package/assets/docs/guide/key-capabilities.md +24 -0
- package/assets/docs/guide/key-concepts.md +83 -0
- package/assets/docs/guide/licensing.md +45 -0
- package/assets/docs/guide/llms-txt.md +53 -0
- package/assets/docs/guide/open-the-editor/blank-canvas.md +124 -0
- package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +228 -0
- package/assets/docs/guide/open-the-editor/from-image.md +205 -0
- package/assets/docs/guide/open-the-editor/from-template.md +189 -0
- package/assets/docs/guide/open-the-editor/from-video.md +274 -0
- package/assets/docs/guide/open-the-editor/import-design/from-archive.md +504 -0
- package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +680 -0
- package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +865 -0
- package/assets/docs/guide/open-the-editor/import-design.md +481 -0
- package/assets/docs/guide/open-the-editor/load-scene.md +178 -0
- package/assets/docs/guide/open-the-editor/overview.md +20 -0
- package/assets/docs/guide/open-the-editor/set-zoom-level.md +303 -0
- package/assets/docs/guide/open-the-editor/uri-resolver.md +347 -0
- package/assets/docs/guide/open-the-editor.md +29 -0
- package/assets/docs/guide/outlines/overview.md +14 -0
- package/assets/docs/guide/outlines/shadows-and-glows.md +515 -0
- package/assets/docs/guide/outlines/strokes.md +292 -0
- package/assets/docs/guide/outlines.md +22 -0
- package/assets/docs/guide/overview.md +22 -0
- package/assets/docs/guide/performance.md +217 -0
- package/assets/docs/guide/plugins/asset-sources.md +553 -0
- package/assets/docs/guide/plugins/print-ready-pdf.md +549 -0
- package/assets/docs/guide/plugins.md +36 -0
- package/assets/docs/guide/rules/asset-handling.md +180 -0
- package/assets/docs/guide/rules/common-pitfalls.md +272 -0
- package/assets/docs/guide/rules/content-fill-mode.md +29 -0
- package/assets/docs/guide/rules/enforce-brand-guidelines.md +672 -0
- package/assets/docs/guide/rules/lock-content.md +478 -0
- package/assets/docs/guide/rules/moderate-content.md +761 -0
- package/assets/docs/guide/rules/overview.md +514 -0
- package/assets/docs/guide/rules/silent-init-errors.md +137 -0
- package/assets/docs/guide/rules/verify-properties-before-use.md +78 -0
- package/assets/docs/guide/rules.md +23 -0
- package/assets/docs/guide/security.md +199 -0
- package/assets/docs/guide/serve-assets.md +332 -0
- package/assets/docs/guide/settings.md +199 -0
- package/assets/docs/guide/shapes.md +23 -0
- package/assets/docs/guide/starterkits/3d-mockup-editor.md +748 -0
- package/assets/docs/guide/starterkits/advanced-editor.md +698 -0
- package/assets/docs/guide/starterkits/advanced-video-editor.md +696 -0
- package/assets/docs/guide/starterkits/ai-editor.md +749 -0
- package/assets/docs/guide/starterkits/airtable-image-editor.md +672 -0
- package/assets/docs/guide/starterkits/apparel-ui.md +188 -0
- package/assets/docs/guide/starterkits/assets.md +27 -0
- package/assets/docs/guide/starterkits/auto-resize.md +586 -0
- package/assets/docs/guide/starterkits/automated-video-generation.md +692 -0
- package/assets/docs/guide/starterkits/background-removal-editor.md +480 -0
- package/assets/docs/guide/starterkits/content-moderation.md +863 -0
- package/assets/docs/guide/starterkits/creative-automation.md +28 -0
- package/assets/docs/guide/starterkits/custom-built-uis.md +26 -0
- package/assets/docs/guide/starterkits/customization.md +29 -0
- package/assets/docs/guide/starterkits/cutout-lines-editor.md +470 -0
- package/assets/docs/guide/starterkits/data-merge.md +850 -0
- package/assets/docs/guide/starterkits/design-editor.md +698 -0
- package/assets/docs/guide/starterkits/design-generation.md +719 -0
- package/assets/docs/guide/starterkits/design-validation.md +808 -0
- package/assets/docs/guide/starterkits/editor-ui-configurations.md +14 -0
- package/assets/docs/guide/starterkits/export-options.md +724 -0
- package/assets/docs/guide/starterkits/export-using-renderer.md +708 -0
- package/assets/docs/guide/starterkits/extensibility.md +28 -0
- package/assets/docs/guide/starterkits/force-crop-editor.md +675 -0
- package/assets/docs/guide/starterkits/form-based-template-adoption.md +522 -0
- package/assets/docs/guide/starterkits/getty-images-editor.md +700 -0
- package/assets/docs/guide/starterkits/html5-ads-exporter.md +719 -0
- package/assets/docs/guide/starterkits/indesign-template-import.md +580 -0
- package/assets/docs/guide/starterkits/layouts-editor.md +724 -0
- package/assets/docs/guide/starterkits/mobile-ui.md +185 -0
- package/assets/docs/guide/starterkits/mockup-editor.md +745 -0
- package/assets/docs/guide/starterkits/multi-image-generation.md +542 -0
- package/assets/docs/guide/starterkits/page-sizes-editor.md +657 -0
- package/assets/docs/guide/starterkits/pexels-image-editor.md +665 -0
- package/assets/docs/guide/starterkits/photo-editor.md +755 -0
- package/assets/docs/guide/starterkits/photo-ui.md +186 -0
- package/assets/docs/guide/starterkits/photobook-ui.md +188 -0
- package/assets/docs/guide/starterkits/placeholders.md +678 -0
- package/assets/docs/guide/starterkits/player.md +405 -0
- package/assets/docs/guide/starterkits/plugins.md +25 -0
- package/assets/docs/guide/starterkits/postcard-editor.md +202 -0
- package/assets/docs/guide/starterkits/pptx-template-import.md +581 -0
- package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +746 -0
- package/assets/docs/guide/starterkits/product-editor.md +773 -0
- package/assets/docs/guide/starterkits/psd-template-import.md +580 -0
- package/assets/docs/guide/starterkits/qr-code-editor.md +470 -0
- package/assets/docs/guide/starterkits/single-page-editor.md +661 -0
- package/assets/docs/guide/starterkits/start-with-image.md +684 -0
- package/assets/docs/guide/starterkits/start-with-video.md +651 -0
- package/assets/docs/guide/starterkits/t-shirt-designer.md +742 -0
- package/assets/docs/guide/starterkits/templating.md +23 -0
- package/assets/docs/guide/starterkits/theming.md +662 -0
- package/assets/docs/guide/starterkits/translation-internationalization.md +662 -0
- package/assets/docs/guide/starterkits/unsplash-editor.md +839 -0
- package/assets/docs/guide/starterkits/vectorizer-editor.md +466 -0
- package/assets/docs/guide/starterkits/version-history.md +745 -0
- package/assets/docs/guide/starterkits/video-animations.md +853 -0
- package/assets/docs/guide/starterkits/video-captions.md +884 -0
- package/assets/docs/guide/starterkits/video-editing.md +25 -0
- package/assets/docs/guide/starterkits/video-editor.md +696 -0
- package/assets/docs/guide/starterkits/video-export-options.md +676 -0
- package/assets/docs/guide/starterkits/viewer.md +400 -0
- package/assets/docs/guide/starterkits.md +41 -0
- package/assets/docs/guide/stickers-and-shapes/combine.md +743 -0
- package/assets/docs/guide/stickers-and-shapes/create-cutout.md +425 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +794 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +290 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +211 -0
- package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +362 -0
- package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +208 -0
- package/assets/docs/guide/stickers.md +21 -0
- package/assets/docs/guide/text/add.md +641 -0
- package/assets/docs/guide/text/adjust-spacing.md +288 -0
- package/assets/docs/guide/text/auto-size.md +404 -0
- package/assets/docs/guide/text/custom-fonts.md +401 -0
- package/assets/docs/guide/text/decorations.md +330 -0
- package/assets/docs/guide/text/edit.md +458 -0
- package/assets/docs/guide/text/effects.md +244 -0
- package/assets/docs/guide/text/emojis.md +310 -0
- package/assets/docs/guide/text/enumerations.md +258 -0
- package/assets/docs/guide/text/language-support.md +604 -0
- package/assets/docs/guide/text/overview.md +14 -0
- package/assets/docs/guide/text/styling.md +390 -0
- package/assets/docs/guide/text/text-designs.md +834 -0
- package/assets/docs/guide/text.md +33 -0
- package/assets/docs/guide/to-v1-10.md +131 -0
- package/assets/docs/guide/to-v1-13.md +165 -0
- package/assets/docs/guide/to-v1-19.md +315 -0
- package/assets/docs/guide/to-v1-32.md +110 -0
- package/assets/docs/guide/to-v1-69.md +468 -0
- package/assets/docs/guide/to-v1-72.md +193 -0
- package/assets/docs/guide/upgrade.md +25 -0
- package/assets/docs/guide/use-templates/apply-template.md +279 -0
- package/assets/docs/guide/use-templates/generate.md +405 -0
- package/assets/docs/guide/use-templates/library.md +450 -0
- package/assets/docs/guide/use-templates/overview.md +20 -0
- package/assets/docs/guide/use-templates/programmatic.md +482 -0
- package/assets/docs/guide/use-templates/replace-content.md +399 -0
- package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +428 -0
- package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +337 -0
- package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +853 -0
- package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +1045 -0
- package/assets/docs/guide/user-interface/ai-integration/image-generation.md +641 -0
- package/assets/docs/guide/user-interface/ai-integration/integrate.md +966 -0
- package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +99 -0
- package/assets/docs/guide/user-interface/ai-integration/text-generation.md +498 -0
- package/assets/docs/guide/user-interface/ai-integration/video-generation.md +493 -0
- package/assets/docs/guide/user-interface/ai-integration.md +30 -0
- package/assets/docs/guide/user-interface/appearance/change-ui-font.md +316 -0
- package/assets/docs/guide/user-interface/appearance/custom-labels.md +509 -0
- package/assets/docs/guide/user-interface/appearance/icons.md +373 -0
- package/assets/docs/guide/user-interface/appearance/theming.md +665 -0
- package/assets/docs/guide/user-interface/appearance.md +23 -0
- package/assets/docs/guide/user-interface/build-your-own-ui.md +620 -0
- package/assets/docs/guide/user-interface/customization/canvas-menu.md +412 -0
- package/assets/docs/guide/user-interface/customization/canvas.md +281 -0
- package/assets/docs/guide/user-interface/customization/color-palette.md +413 -0
- package/assets/docs/guide/user-interface/customization/crop-presets.md +384 -0
- package/assets/docs/guide/user-interface/customization/disable-or-enable.md +676 -0
- package/assets/docs/guide/user-interface/customization/dock.md +399 -0
- package/assets/docs/guide/user-interface/customization/force-crop.md +289 -0
- package/assets/docs/guide/user-interface/customization/inspector-bar.md +371 -0
- package/assets/docs/guide/user-interface/customization/navigation-bar.md +516 -0
- package/assets/docs/guide/user-interface/customization/page-format.md +436 -0
- package/assets/docs/guide/user-interface/customization/panel.md +605 -0
- package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +531 -0
- package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +358 -0
- package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +374 -0
- package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +323 -0
- package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +294 -0
- package/assets/docs/guide/user-interface/customization/quick-start.md +12 -0
- package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +519 -0
- package/assets/docs/guide/user-interface/customization/reference/component-reference.md +333 -0
- package/assets/docs/guide/user-interface/customization/reference.md +12 -0
- package/assets/docs/guide/user-interface/customization.md +39 -0
- package/assets/docs/guide/user-interface/localization.md +633 -0
- package/assets/docs/guide/user-interface/overview.md +167 -0
- package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +411 -0
- package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +721 -0
- package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +331 -0
- package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +553 -0
- package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +672 -0
- package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +415 -0
- package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +521 -0
- package/assets/docs/guide/user-interface/ui-extensions.md +26 -0
- package/assets/docs/guide/user-interface.md +25 -0
- package/assets/docs/guide/what-is-cesdk.md +319 -0
- package/assets/docs/handbook/SKILL.md +521 -0
- package/assets/prompts/evals-assetGenerate.md +12 -0
- package/assets/prompts/evals-brutalistCore.md +34 -0
- package/assets/prompts/evals-danskCatalogue.md +31 -0
- package/assets/prompts/evals-exportRoundTrip.md +12 -0
- package/assets/prompts/evals-inspectPriorCode.md +16 -0
- package/assets/prompts/evals-listProjectFiles.md +6 -0
- package/assets/prompts/evals-readAndExplainScript.md +6 -0
- package/assets/prompts/evals-resumeAcrossRestart.md +15 -0
- package/assets/prompts/evals-rewindRecovery.md +10 -0
- package/assets/prompts/evals-searchAcrossFiles.md +6 -0
- package/assets/prompts/evals-weddingCard.md +20 -0
- package/assets/prompts/explain.md +6 -0
- package/assets/prompts/review.md +6 -0
- package/dist/assets/inline.generated.d.ts +2 -0
- package/dist/assets/inline.generated.d.ts.map +1 -0
- package/dist/assets/inline.generated.js +413 -0
- package/dist/assets/inline.generated.js.map +1 -0
- package/dist/assets/load-browser.d.ts +8 -0
- package/dist/assets/load-browser.d.ts.map +1 -0
- package/dist/assets/load-browser.js +11 -0
- package/dist/assets/load-browser.js.map +1 -0
- package/dist/assets/load-node.d.ts +8 -0
- package/dist/assets/load-node.d.ts.map +1 -0
- package/dist/assets/load-node.js +11 -0
- package/dist/assets/load-node.js.map +1 -0
- package/dist/cli/http.d.ts +2 -0
- package/dist/cli/http.d.ts.map +1 -0
- package/dist/cli/http.js +231 -0
- package/dist/cli/http.js.map +1 -0
- package/dist/cli/redirect-console.d.ts +10 -0
- package/dist/cli/redirect-console.d.ts.map +1 -0
- package/dist/cli/redirect-console.js +18 -0
- package/dist/cli/redirect-console.js.map +1 -0
- package/dist/cli/resolve-license.d.ts +2 -0
- package/dist/cli/resolve-license.d.ts.map +1 -0
- package/dist/cli/resolve-license.js +13 -0
- package/dist/cli/resolve-license.js.map +1 -0
- package/dist/cli/stdio.d.ts +2 -0
- package/dist/cli/stdio.d.ts.map +1 -0
- package/dist/cli/stdio.js +124 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/trial-license.generated.d.ts +2 -0
- package/dist/cli/trial-license.generated.d.ts.map +1 -0
- package/dist/cli/trial-license.generated.js +4 -0
- package/dist/cli/trial-license.generated.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +64 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +61 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +102 -0
- package/dist/config.js.map +1 -0
- package/dist/cross-ref.d.ts +2 -0
- package/dist/cross-ref.d.ts.map +1 -0
- package/dist/cross-ref.js +31 -0
- package/dist/cross-ref.js.map +1 -0
- package/dist/dashboard/router.d.ts +3 -0
- package/dist/dashboard/router.d.ts.map +1 -0
- package/dist/dashboard/router.js +19 -0
- package/dist/dashboard/router.js.map +1 -0
- package/dist/dashboard/spa-assets.generated.d.ts +2 -0
- package/dist/dashboard/spa-assets.generated.d.ts.map +1 -0
- package/dist/dashboard/spa-assets.generated.js +220 -0
- package/dist/dashboard/spa-assets.generated.js.map +1 -0
- package/dist/engine/asset-sources.d.ts +17 -0
- package/dist/engine/asset-sources.d.ts.map +1 -0
- package/dist/engine/asset-sources.js +75 -0
- package/dist/engine/asset-sources.js.map +1 -0
- package/dist/engine/cesdk-adapter.d.ts +10 -0
- package/dist/engine/cesdk-adapter.d.ts.map +1 -0
- package/dist/engine/cesdk-adapter.js +19 -0
- package/dist/engine/cesdk-adapter.js.map +1 -0
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +3 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/mutex.d.ts +5 -0
- package/dist/engine/mutex.d.ts.map +1 -0
- package/dist/engine/mutex.js +42 -0
- package/dist/engine/mutex.js.map +1 -0
- package/dist/engine/session.d.ts +50 -0
- package/dist/engine/session.d.ts.map +1 -0
- package/dist/engine/session.js +95 -0
- package/dist/engine/session.js.map +1 -0
- package/dist/engine/uri-resolver.d.ts +14 -0
- package/dist/engine/uri-resolver.d.ts.map +1 -0
- package/dist/engine/uri-resolver.js +12 -0
- package/dist/engine/uri-resolver.js.map +1 -0
- package/dist/frontmatter.d.ts +15 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +46 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gateway/hosted-stub.d.ts +6 -0
- package/dist/gateway/hosted-stub.d.ts.map +1 -0
- package/dist/gateway/hosted-stub.js +11 -0
- package/dist/gateway/hosted-stub.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +4 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/local.d.ts +14 -0
- package/dist/gateway/local.d.ts.map +1 -0
- package/dist/gateway/local.js +41 -0
- package/dist/gateway/local.js.map +1 -0
- package/dist/gateway/types.d.ts +24 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +7 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/http/server.d.ts +80 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +183 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/session-manager.d.ts +42 -0
- package/dist/http/session-manager.d.ts.map +1 -0
- package/dist/http/session-manager.js +82 -0
- package/dist/http/session-manager.js.map +1 -0
- package/dist/http/workspace-auth.d.ts +9 -0
- package/dist/http/workspace-auth.d.ts.map +1 -0
- package/dist/http/workspace-auth.js +29 -0
- package/dist/http/workspace-auth.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/mount.d.ts +11 -0
- package/dist/metrics/mount.d.ts.map +1 -0
- package/dist/metrics/mount.js +13 -0
- package/dist/metrics/mount.js.map +1 -0
- package/dist/metrics/recorder.d.ts +55 -0
- package/dist/metrics/recorder.d.ts.map +1 -0
- package/dist/metrics/recorder.js +97 -0
- package/dist/metrics/recorder.js.map +1 -0
- package/dist/revisions/hash.d.ts +7 -0
- package/dist/revisions/hash.d.ts.map +1 -0
- package/dist/revisions/hash.js +24 -0
- package/dist/revisions/hash.js.map +1 -0
- package/dist/revisions/index.d.ts +4 -0
- package/dist/revisions/index.d.ts.map +1 -0
- package/dist/revisions/index.js +4 -0
- package/dist/revisions/index.js.map +1 -0
- package/dist/revisions/store.d.ts +69 -0
- package/dist/revisions/store.d.ts.map +1 -0
- package/dist/revisions/store.js +196 -0
- package/dist/revisions/store.js.map +1 -0
- package/dist/revisions/types.d.ts +39 -0
- package/dist/revisions/types.d.ts.map +1 -0
- package/dist/revisions/types.js +2 -0
- package/dist/revisions/types.js.map +1 -0
- package/dist/server.d.ts +51 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +175 -0
- package/dist/server.js.map +1 -0
- package/dist/skill-tools.d.ts +3 -0
- package/dist/skill-tools.d.ts.map +1 -0
- package/dist/skill-tools.js +105 -0
- package/dist/skill-tools.js.map +1 -0
- package/dist/test/test/cli/dispatcher.test.d.ts +2 -0
- package/dist/test/test/cli/dispatcher.test.d.ts.map +1 -0
- package/dist/test/test/cli/dispatcher.test.js +47 -0
- package/dist/test/test/cli/dispatcher.test.js.map +1 -0
- package/dist/test/test/cross-ref.test.d.ts +2 -0
- package/dist/test/test/cross-ref.test.d.ts.map +1 -0
- package/dist/test/test/cross-ref.test.js +39 -0
- package/dist/test/test/cross-ref.test.js.map +1 -0
- package/dist/test/test/engine/session.test.d.ts +2 -0
- package/dist/test/test/engine/session.test.d.ts.map +1 -0
- package/dist/test/test/engine/session.test.js +144 -0
- package/dist/test/test/engine/session.test.js.map +1 -0
- package/dist/test/test/engine/uri-resolver.test.d.ts +2 -0
- package/dist/test/test/engine/uri-resolver.test.d.ts.map +1 -0
- package/dist/test/test/engine/uri-resolver.test.js +38 -0
- package/dist/test/test/engine/uri-resolver.test.js.map +1 -0
- package/dist/test/test/frontmatter.test.d.ts +2 -0
- package/dist/test/test/frontmatter.test.d.ts.map +1 -0
- package/dist/test/test/frontmatter.test.js +55 -0
- package/dist/test/test/frontmatter.test.js.map +1 -0
- package/dist/test/test/gateway/hosted-stub.test.d.ts +2 -0
- package/dist/test/test/gateway/hosted-stub.test.d.ts.map +1 -0
- package/dist/test/test/gateway/hosted-stub.test.js +11 -0
- package/dist/test/test/gateway/hosted-stub.test.js.map +1 -0
- package/dist/test/test/gateway/local.test.d.ts +2 -0
- package/dist/test/test/gateway/local.test.d.ts.map +1 -0
- package/dist/test/test/gateway/local.test.js +29 -0
- package/dist/test/test/gateway/local.test.js.map +1 -0
- package/dist/test/test/handbook-contract.test.d.ts +2 -0
- package/dist/test/test/handbook-contract.test.d.ts.map +1 -0
- package/dist/test/test/handbook-contract.test.js +71 -0
- package/dist/test/test/handbook-contract.test.js.map +1 -0
- package/dist/test/test/http/server.test.d.ts +2 -0
- package/dist/test/test/http/server.test.d.ts.map +1 -0
- package/dist/test/test/http/server.test.js +245 -0
- package/dist/test/test/http/server.test.js.map +1 -0
- package/dist/test/test/http/session-manager.test.d.ts +2 -0
- package/dist/test/test/http/session-manager.test.d.ts.map +1 -0
- package/dist/test/test/http/session-manager.test.js +83 -0
- package/dist/test/test/http/session-manager.test.js.map +1 -0
- package/dist/test/test/revisions/hash.test.d.ts +2 -0
- package/dist/test/test/revisions/hash.test.d.ts.map +1 -0
- package/dist/test/test/revisions/hash.test.js +33 -0
- package/dist/test/test/revisions/hash.test.js.map +1 -0
- package/dist/test/test/revisions/store.test.d.ts +2 -0
- package/dist/test/test/revisions/store.test.d.ts.map +1 -0
- package/dist/test/test/revisions/store.test.js +245 -0
- package/dist/test/test/revisions/store.test.js.map +1 -0
- package/dist/test/test/server.test.d.ts +2 -0
- package/dist/test/test/server.test.d.ts.map +1 -0
- package/dist/test/test/server.test.js +157 -0
- package/dist/test/test/server.test.js.map +1 -0
- package/dist/test/test/skill-tools.test.d.ts +2 -0
- package/dist/test/test/skill-tools.test.d.ts.map +1 -0
- package/dist/test/test/skill-tools.test.js +84 -0
- package/dist/test/test/skill-tools.test.js.map +1 -0
- package/dist/test/test/smoke.test.d.ts +2 -0
- package/dist/test/test/smoke.test.d.ts.map +1 -0
- package/dist/test/test/smoke.test.js +8 -0
- package/dist/test/test/smoke.test.js.map +1 -0
- package/dist/test/test/tools/asset-generate.test.d.ts +2 -0
- package/dist/test/test/tools/asset-generate.test.d.ts.map +1 -0
- package/dist/test/test/tools/asset-generate.test.js +66 -0
- package/dist/test/test/tools/asset-generate.test.js.map +1 -0
- package/dist/test/test/tools/edit.test.d.ts +2 -0
- package/dist/test/test/tools/edit.test.d.ts.map +1 -0
- package/dist/test/test/tools/edit.test.js +205 -0
- package/dist/test/test/tools/edit.test.js.map +1 -0
- package/dist/test/test/tools/export.test.d.ts +2 -0
- package/dist/test/test/tools/export.test.d.ts.map +1 -0
- package/dist/test/test/tools/export.test.js +144 -0
- package/dist/test/test/tools/export.test.js.map +1 -0
- package/dist/test/test/tools/history.test.d.ts +2 -0
- package/dist/test/test/tools/history.test.d.ts.map +1 -0
- package/dist/test/test/tools/history.test.js +29 -0
- package/dist/test/test/tools/history.test.js.map +1 -0
- package/dist/test/test/tools/inspect.test.d.ts +2 -0
- package/dist/test/test/tools/inspect.test.d.ts.map +1 -0
- package/dist/test/test/tools/inspect.test.js +62 -0
- package/dist/test/test/tools/inspect.test.js.map +1 -0
- package/dist/test/test/tools/list.test.d.ts +2 -0
- package/dist/test/test/tools/list.test.d.ts.map +1 -0
- package/dist/test/test/tools/list.test.js +23 -0
- package/dist/test/test/tools/list.test.js.map +1 -0
- package/dist/test/test/tools/open-editor.test.d.ts +2 -0
- package/dist/test/test/tools/open-editor.test.d.ts.map +1 -0
- package/dist/test/test/tools/open-editor.test.js +53 -0
- package/dist/test/test/tools/open-editor.test.js.map +1 -0
- package/dist/test/test/tools/preview.test.d.ts +2 -0
- package/dist/test/test/tools/preview.test.d.ts.map +1 -0
- package/dist/test/test/tools/preview.test.js +73 -0
- package/dist/test/test/tools/preview.test.js.map +1 -0
- package/dist/test/test/tools/rename.test.d.ts +2 -0
- package/dist/test/test/tools/rename.test.d.ts.map +1 -0
- package/dist/test/test/tools/rename.test.js +17 -0
- package/dist/test/test/tools/rename.test.js.map +1 -0
- package/dist/test/test/viewer/broadcaster.test.d.ts +2 -0
- package/dist/test/test/viewer/broadcaster.test.d.ts.map +1 -0
- package/dist/test/test/viewer/broadcaster.test.js +53 -0
- package/dist/test/test/viewer/broadcaster.test.js.map +1 -0
- package/dist/test/test/viewer/resource-route.test.d.ts +2 -0
- package/dist/test/test/viewer/resource-route.test.d.ts.map +1 -0
- package/dist/test/test/viewer/resource-route.test.js +70 -0
- package/dist/test/test/viewer/resource-route.test.js.map +1 -0
- package/dist/test/test/viewer/router.test.d.ts +2 -0
- package/dist/test/test/viewer/router.test.d.ts.map +1 -0
- package/dist/test/test/viewer/router.test.js +171 -0
- package/dist/test/test/viewer/router.test.js.map +1 -0
- package/dist/test/test/viewer/url-builder.test.d.ts +2 -0
- package/dist/test/test/viewer/url-builder.test.d.ts.map +1 -0
- package/dist/test/test/viewer/url-builder.test.js +31 -0
- package/dist/test/test/viewer/url-builder.test.js.map +1 -0
- package/dist/test/test/workspace/hosted-stub.test.d.ts +2 -0
- package/dist/test/test/workspace/hosted-stub.test.d.ts.map +1 -0
- package/dist/test/test/workspace/hosted-stub.test.js +30 -0
- package/dist/test/test/workspace/hosted-stub.test.js.map +1 -0
- package/dist/test/test/workspace/in-memory.test.d.ts +2 -0
- package/dist/test/test/workspace/in-memory.test.d.ts.map +1 -0
- package/dist/test/test/workspace/in-memory.test.js +4 -0
- package/dist/test/test/workspace/in-memory.test.js.map +1 -0
- package/dist/test/test/workspace/node-fs.test.d.ts +2 -0
- package/dist/test/test/workspace/node-fs.test.d.ts.map +1 -0
- package/dist/test/test/workspace/node-fs.test.js +20 -0
- package/dist/test/test/workspace/node-fs.test.js.map +1 -0
- package/dist/test/test/workspace/shared-contract.d.ts +3 -0
- package/dist/test/test/workspace/shared-contract.d.ts.map +1 -0
- package/dist/test/test/workspace/shared-contract.js +92 -0
- package/dist/test/test/workspace/shared-contract.js.map +1 -0
- package/dist/test/tsconfig.test.tsbuildinfo +1 -0
- package/dist/test/vitest.config.d.ts +3 -0
- package/dist/test/vitest.config.d.ts.map +1 -0
- package/dist/test/vitest.config.js +8 -0
- package/dist/test/vitest.config.js.map +1 -0
- package/dist/tools/asset-generate.d.ts +12 -0
- package/dist/tools/asset-generate.d.ts.map +1 -0
- package/dist/tools/asset-generate.js +112 -0
- package/dist/tools/asset-generate.js.map +1 -0
- package/dist/tools/asset-search.d.ts +10 -0
- package/dist/tools/asset-search.d.ts.map +1 -0
- package/dist/tools/asset-search.js +120 -0
- package/dist/tools/asset-search.js.map +1 -0
- package/dist/tools/content-types.d.ts +11 -0
- package/dist/tools/content-types.d.ts.map +1 -0
- package/dist/tools/content-types.js +2 -0
- package/dist/tools/content-types.js.map +1 -0
- package/dist/tools/edit.d.ts +29 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +165 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/engine.d.ts +31 -0
- package/dist/tools/engine.d.ts.map +1 -0
- package/dist/tools/engine.js +59 -0
- package/dist/tools/engine.js.map +1 -0
- package/dist/tools/export.d.ts +19 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +179 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/history.d.ts +7 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +54 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/index.d.ts +35 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +72 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/inspect.d.ts +7 -0
- package/dist/tools/inspect.d.ts.map +1 -0
- package/dist/tools/inspect.js +80 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/list.d.ts +7 -0
- package/dist/tools/list.d.ts.map +1 -0
- package/dist/tools/list.js +18 -0
- package/dist/tools/list.js.map +1 -0
- package/dist/tools/metrics.d.ts +11 -0
- package/dist/tools/metrics.d.ts.map +1 -0
- package/dist/tools/metrics.js +28 -0
- package/dist/tools/metrics.js.map +1 -0
- package/dist/tools/open-editor.d.ts +10 -0
- package/dist/tools/open-editor.d.ts.map +1 -0
- package/dist/tools/open-editor.js +62 -0
- package/dist/tools/open-editor.js.map +1 -0
- package/dist/tools/preview.d.ts +12 -0
- package/dist/tools/preview.d.ts.map +1 -0
- package/dist/tools/preview.js +104 -0
- package/dist/tools/preview.js.map +1 -0
- package/dist/tools/rename.d.ts +7 -0
- package/dist/tools/rename.d.ts.map +1 -0
- package/dist/tools/rename.js +39 -0
- package/dist/tools/rename.js.map +1 -0
- package/dist/tools/result.d.ts +12 -0
- package/dist/tools/result.d.ts.map +1 -0
- package/dist/tools/result.js +55 -0
- package/dist/tools/result.js.map +1 -0
- package/dist/tools/save.d.ts +19 -0
- package/dist/tools/save.d.ts.map +1 -0
- package/dist/tools/save.js +117 -0
- package/dist/tools/save.js.map +1 -0
- package/dist/viewer/broadcaster.d.ts +13 -0
- package/dist/viewer/broadcaster.d.ts.map +1 -0
- package/dist/viewer/broadcaster.js +44 -0
- package/dist/viewer/broadcaster.js.map +1 -0
- package/dist/viewer/index.d.ts +7 -0
- package/dist/viewer/index.d.ts.map +1 -0
- package/dist/viewer/index.js +7 -0
- package/dist/viewer/index.js.map +1 -0
- package/dist/viewer/listener.d.ts +16 -0
- package/dist/viewer/listener.d.ts.map +1 -0
- package/dist/viewer/listener.js +30 -0
- package/dist/viewer/listener.js.map +1 -0
- package/dist/viewer/presigned-r2-url-builder.d.ts +30 -0
- package/dist/viewer/presigned-r2-url-builder.d.ts.map +1 -0
- package/dist/viewer/presigned-r2-url-builder.js +40 -0
- package/dist/viewer/presigned-r2-url-builder.js.map +1 -0
- package/dist/viewer/resource-route.d.ts +9 -0
- package/dist/viewer/resource-route.d.ts.map +1 -0
- package/dist/viewer/resource-route.js +59 -0
- package/dist/viewer/resource-route.js.map +1 -0
- package/dist/viewer/router.d.ts +20 -0
- package/dist/viewer/router.d.ts.map +1 -0
- package/dist/viewer/router.js +142 -0
- package/dist/viewer/router.js.map +1 -0
- package/dist/viewer/session-mount.d.ts +10 -0
- package/dist/viewer/session-mount.d.ts.map +1 -0
- package/dist/viewer/session-mount.js +24 -0
- package/dist/viewer/session-mount.js.map +1 -0
- package/dist/viewer/spa-assets.generated.d.ts +2 -0
- package/dist/viewer/spa-assets.generated.d.ts.map +1 -0
- package/dist/viewer/spa-assets.generated.js +989 -0
- package/dist/viewer/spa-assets.generated.js.map +1 -0
- package/dist/viewer/url-builder.d.ts +48 -0
- package/dist/viewer/url-builder.d.ts.map +1 -0
- package/dist/viewer/url-builder.js +38 -0
- package/dist/viewer/url-builder.js.map +1 -0
- package/dist/workspace/hosted-stub.d.ts +28 -0
- package/dist/workspace/hosted-stub.d.ts.map +1 -0
- package/dist/workspace/hosted-stub.js +44 -0
- package/dist/workspace/hosted-stub.js.map +1 -0
- package/dist/workspace/in-memory.d.ts +23 -0
- package/dist/workspace/in-memory.d.ts.map +1 -0
- package/dist/workspace/in-memory.js +161 -0
- package/dist/workspace/in-memory.js.map +1 -0
- package/dist/workspace/index.d.ts +6 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +6 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/node-fs.d.ts +23 -0
- package/dist/workspace/node-fs.d.ts.map +1 -0
- package/dist/workspace/node-fs.js +90 -0
- package/dist/workspace/node-fs.js.map +1 -0
- package/dist/workspace/s3.d.ts +32 -0
- package/dist/workspace/s3.d.ts.map +1 -0
- package/dist/workspace/s3.js +191 -0
- package/dist/workspace/s3.js.map +1 -0
- package/dist/workspace/scoped.d.ts +32 -0
- package/dist/workspace/scoped.d.ts.map +1 -0
- package/dist/workspace/scoped.js +76 -0
- package/dist/workspace/scoped.js.map +1 -0
- package/dist/workspace/types.d.ts +75 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/dist/workspace/types.js +18 -0
- package/dist/workspace/types.js.map +1 -0
- 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
|
+

|
|
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
|