@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,602 @@
|
|
|
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) > [Duotone](./filters-and-effects/duotone.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Apply duotone effects to images, mapping tones to two colors for stylized visuals and brand-specific treatments.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
> **Reading time:** 5 minutes
|
|
12
|
+
>
|
|
13
|
+
> **Resources:**
|
|
14
|
+
>
|
|
15
|
+
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
16
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-filters-and-effects-duotone-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-filters-and-effects-duotone-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-filters-and-effects-duotone-browser/)
|
|
19
|
+
|
|
20
|
+
Duotone is a color effect that maps image brightness to two colors: a dark color for shadows and a light color for highlights. The result is a striking two-tone image where all original colors are replaced by gradations between your chosen pair. This technique creates bold, cohesive visuals that are particularly effective for brand consistency, vintage aesthetics, and artistic treatments.
|
|
21
|
+
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-filters-and-effects-duotone-browser/browser.ts reference-only
|
|
23
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
BlurAssetSource,
|
|
27
|
+
ColorPaletteAssetSource,
|
|
28
|
+
CropPresetsAssetSource,
|
|
29
|
+
DemoAssetSources,
|
|
30
|
+
EffectsAssetSource,
|
|
31
|
+
FiltersAssetSource,
|
|
32
|
+
PagePresetsAssetSource,
|
|
33
|
+
StickerAssetSource,
|
|
34
|
+
TextAssetSource,
|
|
35
|
+
TextComponentAssetSource,
|
|
36
|
+
TypefaceAssetSource,
|
|
37
|
+
UploadAssetSources,
|
|
38
|
+
VectorShapeAssetSource
|
|
39
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
40
|
+
import { DesignEditorConfig } from './design-editor/plugin';
|
|
41
|
+
import packageJson from './package.json';
|
|
42
|
+
import { hexToRgba } from './utils';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* CE.SDK Plugin: Duotone Guide
|
|
46
|
+
*
|
|
47
|
+
* Demonstrates applying duotone effects to image blocks:
|
|
48
|
+
* - Querying duotone presets from the asset library
|
|
49
|
+
* - Applying duotone with preset colors
|
|
50
|
+
* - Creating custom duotone color combinations
|
|
51
|
+
* - Managing and removing effects
|
|
52
|
+
*/
|
|
53
|
+
class Example implements EditorPlugin {
|
|
54
|
+
name = packageJson.name;
|
|
55
|
+
|
|
56
|
+
version = packageJson.version;
|
|
57
|
+
|
|
58
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
59
|
+
if (!cesdk) {
|
|
60
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
61
|
+
}
|
|
62
|
+
await cesdk.addPlugin(new DesignEditorConfig());
|
|
63
|
+
|
|
64
|
+
// Add asset source plugins
|
|
65
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
66
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
67
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
68
|
+
await cesdk.addPlugin(
|
|
69
|
+
new UploadAssetSources({ include: ['ly.img.image.upload'] })
|
|
70
|
+
);
|
|
71
|
+
await cesdk.addPlugin(
|
|
72
|
+
new DemoAssetSources({
|
|
73
|
+
include: [
|
|
74
|
+
'ly.img.templates.blank.*',
|
|
75
|
+
'ly.img.templates.presentation.*',
|
|
76
|
+
'ly.img.templates.print.*',
|
|
77
|
+
'ly.img.templates.social.*',
|
|
78
|
+
'ly.img.image.*'
|
|
79
|
+
]
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
83
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
84
|
+
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
85
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
86
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
87
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
88
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
89
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
90
|
+
|
|
91
|
+
await cesdk.actions.run('scene.create', {
|
|
92
|
+
page: { width: 800, height: 600, unit: 'Pixel' }
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const engine = cesdk.engine;
|
|
96
|
+
const page = engine.block.findByType('page')[0];
|
|
97
|
+
|
|
98
|
+
// Enable duotone filters in the inspector panel
|
|
99
|
+
cesdk.feature.enable('ly.img.filter');
|
|
100
|
+
|
|
101
|
+
// Use a sample image URL
|
|
102
|
+
const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
|
|
103
|
+
|
|
104
|
+
// Create image block for preset demonstration
|
|
105
|
+
const presetImageBlock = await engine.block.addImage(imageUri, {
|
|
106
|
+
size: { width: 350, height: 250 }
|
|
107
|
+
});
|
|
108
|
+
engine.block.appendChild(page, presetImageBlock);
|
|
109
|
+
engine.block.setPositionX(presetImageBlock, 25);
|
|
110
|
+
engine.block.setPositionY(presetImageBlock, 25);
|
|
111
|
+
|
|
112
|
+
// Verify a block supports effects before applying them
|
|
113
|
+
const canApplyEffects = engine.block.supportsEffects(presetImageBlock);
|
|
114
|
+
if (!canApplyEffects) {
|
|
115
|
+
console.warn('Block does not support effects');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Query duotone presets from the asset library
|
|
120
|
+
const duotoneResults = await engine.asset.findAssets('ly.img.filter', {
|
|
121
|
+
page: 0,
|
|
122
|
+
perPage: 10
|
|
123
|
+
});
|
|
124
|
+
const duotonePresets = duotoneResults.assets;
|
|
125
|
+
|
|
126
|
+
// Apply a preset to the first image
|
|
127
|
+
if (duotonePresets.length > 0) {
|
|
128
|
+
const preset = duotonePresets[0];
|
|
129
|
+
|
|
130
|
+
// Create a new duotone effect block
|
|
131
|
+
const duotoneEffect = engine.block.createEffect('duotone_filter');
|
|
132
|
+
|
|
133
|
+
// Configure effect with preset colors (convert hex to RGBA)
|
|
134
|
+
if (preset.meta?.darkColor) {
|
|
135
|
+
engine.block.setColor(
|
|
136
|
+
duotoneEffect,
|
|
137
|
+
'effect/duotone_filter/darkColor',
|
|
138
|
+
hexToRgba(preset.meta.darkColor as string)
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
if (preset.meta?.lightColor) {
|
|
142
|
+
engine.block.setColor(
|
|
143
|
+
duotoneEffect,
|
|
144
|
+
'effect/duotone_filter/lightColor',
|
|
145
|
+
hexToRgba(preset.meta.lightColor as string)
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
engine.block.setFloat(
|
|
149
|
+
duotoneEffect,
|
|
150
|
+
'effect/duotone_filter/intensity',
|
|
151
|
+
0.9
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
// Attach the configured effect to the image block
|
|
155
|
+
engine.block.appendEffect(presetImageBlock, duotoneEffect);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Create image block for custom duotone demonstration
|
|
159
|
+
const customImageBlock = await engine.block.addImage(imageUri, {
|
|
160
|
+
size: { width: 350, height: 250 }
|
|
161
|
+
});
|
|
162
|
+
engine.block.appendChild(page, customImageBlock);
|
|
163
|
+
engine.block.setPositionX(customImageBlock, 425);
|
|
164
|
+
engine.block.setPositionY(customImageBlock, 25);
|
|
165
|
+
|
|
166
|
+
// Create duotone with custom brand colors
|
|
167
|
+
const customDuotone = engine.block.createEffect('duotone_filter');
|
|
168
|
+
|
|
169
|
+
// Dark color: deep navy blue (shadows)
|
|
170
|
+
engine.block.setColor(customDuotone, 'effect/duotone_filter/darkColor', {
|
|
171
|
+
r: 0.1,
|
|
172
|
+
g: 0.15,
|
|
173
|
+
b: 0.3,
|
|
174
|
+
a: 1.0
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// Light color: warm cream (highlights)
|
|
178
|
+
engine.block.setColor(customDuotone, 'effect/duotone_filter/lightColor', {
|
|
179
|
+
r: 0.95,
|
|
180
|
+
g: 0.9,
|
|
181
|
+
b: 0.8,
|
|
182
|
+
a: 1.0
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// Control effect strength (0.0 = original, 1.0 = full duotone)
|
|
186
|
+
engine.block.setFloat(
|
|
187
|
+
customDuotone,
|
|
188
|
+
'effect/duotone_filter/intensity',
|
|
189
|
+
0.85
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
engine.block.appendEffect(customImageBlock, customDuotone);
|
|
193
|
+
|
|
194
|
+
// Create image block for combined effects demonstration
|
|
195
|
+
const combinedImageBlock = await engine.block.addImage(imageUri, {
|
|
196
|
+
size: { width: 350, height: 250 }
|
|
197
|
+
});
|
|
198
|
+
engine.block.appendChild(page, combinedImageBlock);
|
|
199
|
+
engine.block.setPositionX(combinedImageBlock, 225);
|
|
200
|
+
engine.block.setPositionY(combinedImageBlock, 325);
|
|
201
|
+
|
|
202
|
+
// Combine duotone with other effects
|
|
203
|
+
// First, add adjustments for brightness and contrast
|
|
204
|
+
const adjustments = engine.block.createEffect('adjustments');
|
|
205
|
+
engine.block.setFloat(adjustments, 'effect/adjustments/brightness', 0.1);
|
|
206
|
+
engine.block.setFloat(adjustments, 'effect/adjustments/contrast', 0.15);
|
|
207
|
+
engine.block.appendEffect(combinedImageBlock, adjustments);
|
|
208
|
+
|
|
209
|
+
// Then add duotone on top
|
|
210
|
+
const combinedDuotone = engine.block.createEffect('duotone_filter');
|
|
211
|
+
engine.block.setColor(
|
|
212
|
+
combinedDuotone,
|
|
213
|
+
'effect/duotone_filter/darkColor',
|
|
214
|
+
{ r: 0.2, g: 0.1, b: 0.3, a: 1.0 } // Deep purple
|
|
215
|
+
);
|
|
216
|
+
engine.block.setColor(
|
|
217
|
+
combinedDuotone,
|
|
218
|
+
'effect/duotone_filter/lightColor',
|
|
219
|
+
{ r: 1.0, g: 0.85, b: 0.7, a: 1.0 } // Warm peach
|
|
220
|
+
);
|
|
221
|
+
engine.block.setFloat(
|
|
222
|
+
combinedDuotone,
|
|
223
|
+
'effect/duotone_filter/intensity',
|
|
224
|
+
0.75
|
|
225
|
+
);
|
|
226
|
+
engine.block.appendEffect(combinedImageBlock, combinedDuotone);
|
|
227
|
+
|
|
228
|
+
// Get all effects currently applied to a block
|
|
229
|
+
const appliedEffects = engine.block.getEffects(presetImageBlock);
|
|
230
|
+
|
|
231
|
+
console.log(`Block has ${appliedEffects.length} effect(s) applied`);
|
|
232
|
+
|
|
233
|
+
// Disable an effect without removing it
|
|
234
|
+
if (appliedEffects.length > 0) {
|
|
235
|
+
engine.block.setEffectEnabled(appliedEffects[0], false);
|
|
236
|
+
|
|
237
|
+
// Check if an effect is currently enabled
|
|
238
|
+
const isEnabled = engine.block.isEffectEnabled(appliedEffects[0]);
|
|
239
|
+
console.log(`Effect enabled: ${isEnabled}`);
|
|
240
|
+
|
|
241
|
+
// Re-enable the effect
|
|
242
|
+
engine.block.setEffectEnabled(appliedEffects[0], true);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Remove an effect at a specific index from a block
|
|
246
|
+
const effectsOnCustom = engine.block.getEffects(customImageBlock);
|
|
247
|
+
if (effectsOnCustom.length > 0) {
|
|
248
|
+
engine.block.removeEffect(customImageBlock, 0);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Destroy removed effect blocks to free memory
|
|
252
|
+
if (effectsOnCustom.length > 0) {
|
|
253
|
+
engine.block.destroy(effectsOnCustom[0]);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Re-apply custom duotone after demonstration
|
|
257
|
+
const newCustomDuotone = engine.block.createEffect('duotone_filter');
|
|
258
|
+
engine.block.setColor(newCustomDuotone, 'effect/duotone_filter/darkColor', {
|
|
259
|
+
r: 0.1,
|
|
260
|
+
g: 0.15,
|
|
261
|
+
b: 0.3,
|
|
262
|
+
a: 1.0
|
|
263
|
+
});
|
|
264
|
+
engine.block.setColor(
|
|
265
|
+
newCustomDuotone,
|
|
266
|
+
'effect/duotone_filter/lightColor',
|
|
267
|
+
{
|
|
268
|
+
r: 0.95,
|
|
269
|
+
g: 0.9,
|
|
270
|
+
b: 0.8,
|
|
271
|
+
a: 1.0
|
|
272
|
+
}
|
|
273
|
+
);
|
|
274
|
+
engine.block.setFloat(
|
|
275
|
+
newCustomDuotone,
|
|
276
|
+
'effect/duotone_filter/intensity',
|
|
277
|
+
0.85
|
|
278
|
+
);
|
|
279
|
+
engine.block.appendEffect(customImageBlock, newCustomDuotone);
|
|
280
|
+
|
|
281
|
+
// Select the first image block to show the effects panel
|
|
282
|
+
engine.block.select(presetImageBlock);
|
|
283
|
+
|
|
284
|
+
console.log(
|
|
285
|
+
'Duotone guide initialized. Select any image to see the filters panel.'
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export default Example;
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Understanding Duotone
|
|
294
|
+
|
|
295
|
+
Unlike filters that simply tint or shift colors, duotone completely remaps the tonal range of an image. The effect analyzes each pixel's luminosity and assigns a color based on where it falls between pure black and pure white:
|
|
296
|
+
|
|
297
|
+
- **Dark tones** (shadows, blacks) adopt the dark color
|
|
298
|
+
- **Light tones** (highlights, whites) adopt the light color
|
|
299
|
+
- **Midtones** blend between the two colors
|
|
300
|
+
|
|
301
|
+
This creates images with a consistent color palette regardless of the original colors, making duotone ideal for:
|
|
302
|
+
|
|
303
|
+
- **Brand consistency** - Apply your brand's color palette across diverse imagery
|
|
304
|
+
- **Visual cohesion** - Unify photos from different sources in a design
|
|
305
|
+
- **Vintage aesthetics** - Recreate classic print techniques like cyanotype or sepia
|
|
306
|
+
- **Bold statements** - Create eye-catching visuals for social media or marketing
|
|
307
|
+
|
|
308
|
+
The intensity property lets you blend between the original image and the full duotone effect, giving you creative control over how strongly the effect is applied.
|
|
309
|
+
|
|
310
|
+
## Using the Built-in Duotone UI
|
|
311
|
+
|
|
312
|
+
CE.SDK provides a filters panel where users can browse and apply duotone presets interactively. To enable this, use the Feature API:
|
|
313
|
+
|
|
314
|
+
```typescript highlight=highlight-enable-filters
|
|
315
|
+
// Enable duotone filters in the inspector panel
|
|
316
|
+
cesdk.feature.enable('ly.img.filter');
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
With filters enabled, users can:
|
|
320
|
+
|
|
321
|
+
1. Select any image block in the canvas
|
|
322
|
+
2. Open the inspector panel
|
|
323
|
+
3. Navigate to the Filters section
|
|
324
|
+
4. Browse available duotone presets and apply with a single click
|
|
325
|
+
5. Adjust the intensity slider to control effect strength
|
|
326
|
+
|
|
327
|
+
## Check Effect Support
|
|
328
|
+
|
|
329
|
+
Before applying effects programmatically, verify the block supports them. Only graphic blocks with image or video fills can have effects applied:
|
|
330
|
+
|
|
331
|
+
```typescript highlight=highlight-check-support
|
|
332
|
+
// Verify a block supports effects before applying them
|
|
333
|
+
const canApplyEffects = engine.block.supportsEffects(presetImageBlock);
|
|
334
|
+
if (!canApplyEffects) {
|
|
335
|
+
console.warn('Block does not support effects');
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
Attempting to apply effects to unsupported blocks (like text or shapes without fills) will result in an error.
|
|
341
|
+
|
|
342
|
+
## Applying Duotone Presets
|
|
343
|
+
|
|
344
|
+
CE.SDK includes a library of professionally designed duotone presets. Each preset defines a dark/light color pair optimized for visual appeal.
|
|
345
|
+
|
|
346
|
+
### Query Built-in Presets
|
|
347
|
+
|
|
348
|
+
Use the Asset API to retrieve available duotone presets from the asset library:
|
|
349
|
+
|
|
350
|
+
```typescript highlight=highlight-query-presets
|
|
351
|
+
// Query duotone presets from the asset library
|
|
352
|
+
const duotoneResults = await engine.asset.findAssets('ly.img.filter', {
|
|
353
|
+
page: 0,
|
|
354
|
+
perPage: 10
|
|
355
|
+
});
|
|
356
|
+
const duotonePresets = duotoneResults.assets;
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Preset metadata contains `darkColor` and `lightColor` as hex strings. Convert these to RGBA format (values 0-1) before passing to the effect API.
|
|
360
|
+
|
|
361
|
+
### Create Effect Block
|
|
362
|
+
|
|
363
|
+
Create a new duotone effect block that can be configured and attached to an image:
|
|
364
|
+
|
|
365
|
+
```typescript highlight=highlight-create-effect
|
|
366
|
+
// Create a new duotone effect block
|
|
367
|
+
const duotoneEffect = engine.block.createEffect('duotone_filter');
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Configure Preset Colors
|
|
371
|
+
|
|
372
|
+
Apply the preset's color values to the effect using `setColor()` for colors and `setFloat()` for intensity:
|
|
373
|
+
|
|
374
|
+
```typescript highlight=highlight-apply-preset
|
|
375
|
+
// Configure effect with preset colors (convert hex to RGBA)
|
|
376
|
+
if (preset.meta?.darkColor) {
|
|
377
|
+
engine.block.setColor(
|
|
378
|
+
duotoneEffect,
|
|
379
|
+
'effect/duotone_filter/darkColor',
|
|
380
|
+
hexToRgba(preset.meta.darkColor as string)
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
if (preset.meta?.lightColor) {
|
|
384
|
+
engine.block.setColor(
|
|
385
|
+
duotoneEffect,
|
|
386
|
+
'effect/duotone_filter/lightColor',
|
|
387
|
+
hexToRgba(preset.meta.lightColor as string)
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
engine.block.setFloat(duotoneEffect, 'effect/duotone_filter/intensity', 0.9);
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Append Effect to Block
|
|
394
|
+
|
|
395
|
+
Attach the fully configured effect to an image block:
|
|
396
|
+
|
|
397
|
+
```typescript highlight=highlight-append-effect
|
|
398
|
+
// Attach the configured effect to the image block
|
|
399
|
+
engine.block.appendEffect(presetImageBlock, duotoneEffect);
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## Creating Custom Colors
|
|
403
|
+
|
|
404
|
+
For brand-specific treatments or unique creative effects, define your own color combinations using `engine.block.setColor()`:
|
|
405
|
+
|
|
406
|
+
```typescript highlight=highlight-custom-colors
|
|
407
|
+
// Create duotone with custom brand colors
|
|
408
|
+
const customDuotone = engine.block.createEffect('duotone_filter');
|
|
409
|
+
|
|
410
|
+
// Dark color: deep navy blue (shadows)
|
|
411
|
+
engine.block.setColor(customDuotone, 'effect/duotone_filter/darkColor', {
|
|
412
|
+
r: 0.1,
|
|
413
|
+
g: 0.15,
|
|
414
|
+
b: 0.3,
|
|
415
|
+
a: 1.0
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
// Light color: warm cream (highlights)
|
|
419
|
+
engine.block.setColor(customDuotone, 'effect/duotone_filter/lightColor', {
|
|
420
|
+
r: 0.95,
|
|
421
|
+
g: 0.9,
|
|
422
|
+
b: 0.8,
|
|
423
|
+
a: 1.0
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// Control effect strength (0.0 = original, 1.0 = full duotone)
|
|
427
|
+
engine.block.setFloat(customDuotone, 'effect/duotone_filter/intensity', 0.85);
|
|
428
|
+
|
|
429
|
+
engine.block.appendEffect(customImageBlock, customDuotone);
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Choosing Effective Color Pairs
|
|
433
|
+
|
|
434
|
+
The relationship between your dark and light colors determines the final aesthetic:
|
|
435
|
+
|
|
436
|
+
| Color Relationship | Visual Effect | Example Use Case |
|
|
437
|
+
| ------------------ | ------------------------- | ------------------------ |
|
|
438
|
+
| **High contrast** | Bold, graphic look | Social media, posters |
|
|
439
|
+
| **Low contrast** | Subtle, sophisticated | Editorial, luxury brands |
|
|
440
|
+
| **Warm to cool** | Dynamic temperature shift | Lifestyle, fashion |
|
|
441
|
+
| **Monochromatic** | Tinted photography style | Vintage, noir aesthetic |
|
|
442
|
+
|
|
443
|
+
**Classic combinations to try:**
|
|
444
|
+
|
|
445
|
+
- **Cyanotype**: Deep blue (`#1a365d`) to light cyan (`#e0f7fa`)
|
|
446
|
+
- **Sepia**: Dark brown (`#3e2723`) to cream (`#fff8e1`)
|
|
447
|
+
- **Neon**: Deep purple (`#1a1a2e`) to hot pink (`#ff1493`)
|
|
448
|
+
- **Corporate**: Navy (`#0d47a1`) to silver (`#eceff1`)
|
|
449
|
+
|
|
450
|
+
> **Tip:** Start with colors from your brand palette. Use your primary brand color as the light color for highlights, paired with a darker complementary shade for shadows.
|
|
451
|
+
|
|
452
|
+
## Combining with Other Effects
|
|
453
|
+
|
|
454
|
+
Duotone can be stacked with other effects like brightness adjustments, contrast, or blur. Effects are applied in stack order, so the sequence affects the final result:
|
|
455
|
+
|
|
456
|
+
```typescript highlight=highlight-combine-effects
|
|
457
|
+
// Combine duotone with other effects
|
|
458
|
+
// First, add adjustments for brightness and contrast
|
|
459
|
+
const adjustments = engine.block.createEffect('adjustments');
|
|
460
|
+
engine.block.setFloat(adjustments, 'effect/adjustments/brightness', 0.1);
|
|
461
|
+
engine.block.setFloat(adjustments, 'effect/adjustments/contrast', 0.15);
|
|
462
|
+
engine.block.appendEffect(combinedImageBlock, adjustments);
|
|
463
|
+
|
|
464
|
+
// Then add duotone on top
|
|
465
|
+
const combinedDuotone = engine.block.createEffect('duotone_filter');
|
|
466
|
+
engine.block.setColor(
|
|
467
|
+
combinedDuotone,
|
|
468
|
+
'effect/duotone_filter/darkColor',
|
|
469
|
+
{ r: 0.2, g: 0.1, b: 0.3, a: 1.0 } // Deep purple
|
|
470
|
+
);
|
|
471
|
+
engine.block.setColor(
|
|
472
|
+
combinedDuotone,
|
|
473
|
+
'effect/duotone_filter/lightColor',
|
|
474
|
+
{ r: 1.0, g: 0.85, b: 0.7, a: 1.0 } // Warm peach
|
|
475
|
+
);
|
|
476
|
+
engine.block.setFloat(combinedDuotone, 'effect/duotone_filter/intensity', 0.75);
|
|
477
|
+
engine.block.appendEffect(combinedImageBlock, combinedDuotone);
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**Effect order matters**: In this example, brightness and contrast are applied first, then duotone maps the adjusted tones. Reversing the order would apply duotone first, then adjust the duotone colors' brightness—producing a different result.
|
|
481
|
+
|
|
482
|
+
Common combinations:
|
|
483
|
+
|
|
484
|
+
- **Adjustments → Duotone**: Optimize image contrast before applying duotone for better tonal separation
|
|
485
|
+
- **Duotone → Vignette**: Add depth with darkened edges after the color treatment
|
|
486
|
+
- **Blur → Duotone**: Create dreamy, soft-focus duotone backgrounds
|
|
487
|
+
|
|
488
|
+
## Managing Duotone Effects
|
|
489
|
+
|
|
490
|
+
Once effects are applied to a block, you can list, toggle, and remove them programmatically.
|
|
491
|
+
|
|
492
|
+
### List Applied Effects
|
|
493
|
+
|
|
494
|
+
Retrieve all effect block IDs currently attached to a block:
|
|
495
|
+
|
|
496
|
+
```typescript highlight=highlight-list-effects
|
|
497
|
+
// Get all effects currently applied to a block
|
|
498
|
+
const appliedEffects = engine.block.getEffects(presetImageBlock);
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Toggle Effect Visibility
|
|
502
|
+
|
|
503
|
+
Disable an effect temporarily without removing it from the block:
|
|
504
|
+
|
|
505
|
+
```typescript highlight=highlight-toggle-effects
|
|
506
|
+
// Disable an effect without removing it
|
|
507
|
+
if (appliedEffects.length > 0) {
|
|
508
|
+
engine.block.setEffectEnabled(appliedEffects[0], false);
|
|
509
|
+
|
|
510
|
+
// Check if an effect is currently enabled
|
|
511
|
+
const isEnabled = engine.block.isEffectEnabled(appliedEffects[0]);
|
|
512
|
+
console.log(`Effect enabled: ${isEnabled}`);
|
|
513
|
+
|
|
514
|
+
// Re-enable the effect
|
|
515
|
+
engine.block.setEffectEnabled(appliedEffects[0], true);
|
|
516
|
+
}
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
### Remove Effects
|
|
520
|
+
|
|
521
|
+
Detach an effect from a block by specifying its index in the effect stack:
|
|
522
|
+
|
|
523
|
+
```typescript highlight=highlight-remove-effect
|
|
524
|
+
// Remove an effect at a specific index from a block
|
|
525
|
+
const effectsOnCustom = engine.block.getEffects(customImageBlock);
|
|
526
|
+
if (effectsOnCustom.length > 0) {
|
|
527
|
+
engine.block.removeEffect(customImageBlock, 0);
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### Clean Up Resources
|
|
532
|
+
|
|
533
|
+
After removing an effect, destroy it to free memory:
|
|
534
|
+
|
|
535
|
+
```typescript highlight=highlight-cleanup-effect
|
|
536
|
+
// Destroy removed effect blocks to free memory
|
|
537
|
+
if (effectsOnCustom.length > 0) {
|
|
538
|
+
engine.block.destroy(effectsOnCustom[0]);
|
|
539
|
+
}
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
> **Caution:** When removing effects, always destroy the effect block afterward to prevent memory leaks. Effects are independent blocks that persist until explicitly destroyed.
|
|
543
|
+
|
|
544
|
+
### Duotone Properties
|
|
545
|
+
|
|
546
|
+
| Property | Type | Range | Description |
|
|
547
|
+
| ---------------------------------- | ----- | ---------- | ------------------------------------------------ |
|
|
548
|
+
| `effect/duotone_filter/darkColor` | Color | RGBA (0-1) | Color applied to shadows and dark tones |
|
|
549
|
+
| `effect/duotone_filter/lightColor` | Color | RGBA (0-1) | Color applied to highlights and light tones |
|
|
550
|
+
| `effect/duotone_filter/intensity` | Float | 0.0 - 1.0 | Effect strength (0 = original, 1 = full duotone) |
|
|
551
|
+
|
|
552
|
+
**Intensity guidelines:**
|
|
553
|
+
|
|
554
|
+
- `0.5 - 0.7`: Subtle tint, original image still recognizable
|
|
555
|
+
- `0.8 - 0.9`: Strong duotone effect, ideal for most use cases
|
|
556
|
+
- `1.0`: Full duotone, no original colors remain
|
|
557
|
+
|
|
558
|
+
## Best Practices
|
|
559
|
+
|
|
560
|
+
### Performance Considerations
|
|
561
|
+
|
|
562
|
+
- **Batch effect creation**: When applying the same duotone to multiple images, create the effect once and clone it rather than creating new effects for each block
|
|
563
|
+
- **Limit effect stacking**: Each additional effect increases render time; keep stacks minimal for real-time editing
|
|
564
|
+
- **Clean up unused effects**: Always destroy effect blocks when they're no longer needed to free GPU resources
|
|
565
|
+
- **Disable rather than remove**: For temporary changes, use `setEffectEnabled(false)` instead of removing and re-creating effects
|
|
566
|
+
|
|
567
|
+
### Common Issues
|
|
568
|
+
|
|
569
|
+
**Duotone not visible**: Verify the block supports effects with `engine.block.supportsEffects(block)`. Only graphic blocks with image or video fills support effects.
|
|
570
|
+
|
|
571
|
+
**Colors look wrong**: Ensure RGBA values are in the 0-1 range, not 0-255. For example, use `{ r: 0.5, g: 0.5, b: 0.5, a: 1.0 }` instead of `{ r: 128, g: 128, b: 128, a: 255 }`.
|
|
572
|
+
|
|
573
|
+
**Effect too subtle or overwhelming**: Adjust the intensity property. Start at 0.85 and tune based on your image content and color choices.
|
|
574
|
+
|
|
575
|
+
**Muddy midtones**: If midtones look flat, increase contrast between your dark and light colors, or add an adjustments effect before duotone to improve tonal separation.
|
|
576
|
+
|
|
577
|
+
## API Reference
|
|
578
|
+
|
|
579
|
+
### Effect Methods
|
|
580
|
+
|
|
581
|
+
| Method | Description |
|
|
582
|
+
| ------------------------------------------------ | ---------------------------------------------------- |
|
|
583
|
+
| `engine.asset.findAssets(sourceId, query)` | Queries assets from an asset source |
|
|
584
|
+
| `engine.block.supportsEffects(block)` | Returns `true` if the block can have effects applied |
|
|
585
|
+
| `engine.block.createEffect(type)` | Creates a new effect block of the specified type |
|
|
586
|
+
| `engine.block.setColor(block, property, color)` | Sets a color property on a block |
|
|
587
|
+
| `engine.block.setFloat(block, property, value)` | Sets a float property on a block |
|
|
588
|
+
| `engine.block.appendEffect(block, effect)` | Appends an effect to a block's effect stack |
|
|
589
|
+
| `engine.block.getEffects(block)` | Returns array of effect block IDs applied to a block |
|
|
590
|
+
| `engine.block.setEffectEnabled(effect, enabled)` | Enables or disables an effect |
|
|
591
|
+
| `engine.block.isEffectEnabled(effect)` | Returns `true` if the effect is enabled |
|
|
592
|
+
| `engine.block.removeEffect(block, index)` | Removes an effect at the given index from a block |
|
|
593
|
+
| `engine.block.destroy(block)` | Destroys a block and frees resources |
|
|
594
|
+
|
|
595
|
+
---
|
|
596
|
+
|
|
597
|
+
## More Resources
|
|
598
|
+
|
|
599
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
600
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
601
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
602
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|