@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,325 @@
|
|
|
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) > [Create and Use Templates](./create-templates.md) > [Lock the Template](./create-templates/lock.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Set up a two-surface integration where template creators have full editing access while template adopters can only modify designated areas.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
> **Reading time:** 10 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-create-templates-lock-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-templates-lock-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-templates-lock-browser/)
|
|
19
|
+
|
|
20
|
+
Many integrations need two different editing experiences: one for designers who build templates, and one for end users who customize them. The Creator and Adopter roles make this possible—same CE.SDK, different permissions based on who's using it. For detailed scope configuration patterns, see [Lock Content](./rules/lock-content.md).
|
|
21
|
+
|
|
22
|
+
In the live example, the headline text is pre-selected and the Placeholder panel is open, showing the scope settings that control what Adopters can edit. Toggle the role to Adopter and try selecting the logo to see the restrictions in action.
|
|
23
|
+
|
|
24
|
+
```typescript file=@cesdk_web_examples/guides-create-templates-lock-browser/browser.ts reference-only
|
|
25
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
26
|
+
|
|
27
|
+
import {
|
|
28
|
+
BlurAssetSource,
|
|
29
|
+
ColorPaletteAssetSource,
|
|
30
|
+
CropPresetsAssetSource,
|
|
31
|
+
DemoAssetSources,
|
|
32
|
+
EffectsAssetSource,
|
|
33
|
+
FiltersAssetSource,
|
|
34
|
+
PagePresetsAssetSource,
|
|
35
|
+
StickerAssetSource,
|
|
36
|
+
TextAssetSource,
|
|
37
|
+
TextComponentAssetSource,
|
|
38
|
+
TypefaceAssetSource,
|
|
39
|
+
UploadAssetSources,
|
|
40
|
+
VectorShapeAssetSource
|
|
41
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
42
|
+
import { DesignEditorConfig } from './design-editor/plugin';
|
|
43
|
+
import packageJson from './package.json';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* CE.SDK Plugin: Lock the Template
|
|
47
|
+
*
|
|
48
|
+
* This example demonstrates the two-surface pattern for template workflows:
|
|
49
|
+
* - Creator role: Full editing access for designers building templates
|
|
50
|
+
* - Adopter role: Restricted access for users customizing templates
|
|
51
|
+
*/
|
|
52
|
+
class Example implements EditorPlugin {
|
|
53
|
+
name = packageJson.name;
|
|
54
|
+
|
|
55
|
+
version = packageJson.version;
|
|
56
|
+
|
|
57
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
58
|
+
if (!cesdk) {
|
|
59
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
60
|
+
}
|
|
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: 500, unit: 'Pixel' }
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const engine = cesdk.engine;
|
|
96
|
+
|
|
97
|
+
// Get the page and set dimensions
|
|
98
|
+
const page = engine.block.findByType('page')[0];
|
|
99
|
+
|
|
100
|
+
// Create a brand template with a logo and headline
|
|
101
|
+
const logoBlock = await engine.block.addImage(
|
|
102
|
+
'https://img.ly/static/ubq_samples/imgly_logo.jpg',
|
|
103
|
+
{ size: { width: 120, height: 30 } }
|
|
104
|
+
);
|
|
105
|
+
engine.block.appendChild(page, logoBlock);
|
|
106
|
+
engine.block.setPositionX(logoBlock, 40);
|
|
107
|
+
engine.block.setPositionY(logoBlock, 40);
|
|
108
|
+
engine.block.setName(logoBlock, 'Logo');
|
|
109
|
+
|
|
110
|
+
const headlineBlock = engine.block.create('text');
|
|
111
|
+
engine.block.replaceText(headlineBlock, 'Edit this headline');
|
|
112
|
+
engine.block.setWidth(headlineBlock, 720);
|
|
113
|
+
engine.block.setHeightMode(headlineBlock, 'Auto');
|
|
114
|
+
engine.block.setFloat(headlineBlock, 'text/fontSize', 48);
|
|
115
|
+
engine.block.setEnum(headlineBlock, 'text/horizontalAlignment', 'Center');
|
|
116
|
+
engine.block.appendChild(page, headlineBlock);
|
|
117
|
+
engine.block.setPositionX(headlineBlock, 40);
|
|
118
|
+
engine.block.setPositionY(headlineBlock, 200);
|
|
119
|
+
engine.block.setName(headlineBlock, 'Headline');
|
|
120
|
+
|
|
121
|
+
// Configure which elements Adopters can edit
|
|
122
|
+
// Enable selection and text editing on the headline
|
|
123
|
+
engine.block.setScopeEnabled(headlineBlock, 'editor/select', true);
|
|
124
|
+
engine.block.setScopeEnabled(headlineBlock, 'text/edit', true);
|
|
125
|
+
|
|
126
|
+
// Leave all scopes disabled on the logo (default state)
|
|
127
|
+
// This prevents Adopters from selecting or modifying the logo
|
|
128
|
+
|
|
129
|
+
// The Creator role ignores all scope restrictions
|
|
130
|
+
engine.editor.setRole('Creator');
|
|
131
|
+
|
|
132
|
+
// Add a role toggle to the navigation bar (engine calls are reactive)
|
|
133
|
+
cesdk.ui.registerComponent(
|
|
134
|
+
'ly.img.roleToggle.navigationBar',
|
|
135
|
+
({ builder }) => {
|
|
136
|
+
const role = engine.editor.getRole();
|
|
137
|
+
builder.ButtonGroup('role-toggle', {
|
|
138
|
+
children: () => {
|
|
139
|
+
builder.Button('creator', {
|
|
140
|
+
label: 'Creator',
|
|
141
|
+
isActive: role === 'Creator',
|
|
142
|
+
onClick: () => engine.editor.setRole('Creator')
|
|
143
|
+
});
|
|
144
|
+
builder.Button('adopter', {
|
|
145
|
+
label: 'Adopter',
|
|
146
|
+
isActive: role === 'Adopter',
|
|
147
|
+
onClick: () => {
|
|
148
|
+
// Close the placeholder panel since Adopters can't configure scopes
|
|
149
|
+
cesdk.ui.closePanel(
|
|
150
|
+
'//ly.img.panel/inspector/placeholderSettings'
|
|
151
|
+
);
|
|
152
|
+
engine.editor.setRole('Adopter');
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.navigation.bar' }, [
|
|
161
|
+
'ly.img.undoRedo.navigationBar',
|
|
162
|
+
'ly.img.spacer',
|
|
163
|
+
'ly.img.roleToggle.navigationBar',
|
|
164
|
+
'ly.img.spacer'
|
|
165
|
+
]);
|
|
166
|
+
|
|
167
|
+
await engine.scene.zoomToBlock(page, { padding: 40 });
|
|
168
|
+
|
|
169
|
+
// Select the headline and open the placeholder panel so users see the scope settings
|
|
170
|
+
engine.block.select(headlineBlock);
|
|
171
|
+
setTimeout(() => {
|
|
172
|
+
cesdk.ui.openPanel('//ly.img.panel/inspector/placeholderSettings');
|
|
173
|
+
}, 300);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export default Example;
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
This guide covers how to understand the two-surface pattern, configure roles for different user groups, and set up scope restrictions that control what Adopters can edit.
|
|
181
|
+
|
|
182
|
+
## Understanding the Two-Surface Pattern
|
|
183
|
+
|
|
184
|
+
Template-based workflows typically involve two distinct user groups with different needs:
|
|
185
|
+
|
|
186
|
+
| Surface | Users | Role | What they can do |
|
|
187
|
+
| --------------- | -------------------- | --------- | --------------------------------------------- |
|
|
188
|
+
| Creator Surface | Designers, admins | `Creator` | Full editing—build templates, set locks |
|
|
189
|
+
| Adopter Surface | End users, marketers | `Adopter` | Restricted editing—only modify unlocked areas |
|
|
190
|
+
|
|
191
|
+
This separation protects design intent while enabling customization. The Creator role ignores all locks, giving full access. The Adopter role respects locks, restricting users to what's explicitly allowed.
|
|
192
|
+
|
|
193
|
+
## Setting Up the Creator Surface
|
|
194
|
+
|
|
195
|
+
The Creator surface is where templates are built. We use `engine.editor.setRole('Creator')` to give designers unrestricted access.
|
|
196
|
+
|
|
197
|
+
```typescript highlight=highlight-creator-surface
|
|
198
|
+
// The Creator role ignores all scope restrictions
|
|
199
|
+
engine.editor.setRole('Creator');
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
In Creator mode, all operations are permitted regardless of scope settings. This is where designers build the template layout, configure which elements should be editable, set scope restrictions using `engine.block.setScopeEnabled()`, and save the template for distribution.
|
|
203
|
+
|
|
204
|
+
## Setting Up the Adopter Surface
|
|
205
|
+
|
|
206
|
+
The Adopter surface is where templates are used. Call `engine.editor.setRole('Adopter')` to enforce the restrictions configured by creators. In Adopter mode, users can only interact with blocks that have the appropriate scopes enabled. The Adopter role respects all lock configurations, ensuring brand consistency and design intent are maintained.
|
|
207
|
+
|
|
208
|
+
## When to Use This Pattern
|
|
209
|
+
|
|
210
|
+
This two-surface approach works well for:
|
|
211
|
+
|
|
212
|
+
- **Brand template systems**: Marketing teams customize approved templates
|
|
213
|
+
- **Design approval workflows**: Creators build, reviewers can't accidentally modify
|
|
214
|
+
- **Self-service customization**: End users personalize within guardrails
|
|
215
|
+
- **White-label products**: Customers can only edit designated areas
|
|
216
|
+
|
|
217
|
+
For simpler use cases where all users have the same permissions, you may not need separate surfaces.
|
|
218
|
+
|
|
219
|
+
## Configuring What Users Can Edit
|
|
220
|
+
|
|
221
|
+
The scope system controls what Adopters can modify. In Creator mode, we enable specific scopes on blocks that should be editable.
|
|
222
|
+
|
|
223
|
+
```typescript highlight=highlight-configure-scopes
|
|
224
|
+
// Configure which elements Adopters can edit
|
|
225
|
+
// Enable selection and text editing on the headline
|
|
226
|
+
engine.block.setScopeEnabled(headlineBlock, 'editor/select', true);
|
|
227
|
+
engine.block.setScopeEnabled(headlineBlock, 'text/edit', true);
|
|
228
|
+
|
|
229
|
+
// Leave all scopes disabled on the logo (default state)
|
|
230
|
+
// This prevents Adopters from selecting or modifying the logo
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
When Adopters load this template, they can edit the headline text but nothing else. The `editor/select` scope must be enabled for users to interact with a block at all. For comprehensive scope configuration patterns, see [Lock Content](./rules/lock-content.md).
|
|
234
|
+
|
|
235
|
+
## Configuring Scopes in the Editor UI
|
|
236
|
+
|
|
237
|
+
Designers can also configure scopes visually without writing code. In Creator mode, select any block and open the Placeholder panel in the inspector. This panel provides toggles for each scope:
|
|
238
|
+
|
|
239
|
+
- **Allow selecting** (`editor/select`): Users can click to select the block
|
|
240
|
+
- **Allow editing text** (`text/edit`): Users can modify text content
|
|
241
|
+
- **Allow changing fill** (`fill/change`): Users can swap images or change colors
|
|
242
|
+
- **Allow moving** (`layer/move`): Users can reposition the block
|
|
243
|
+
- **Allow deleting** (`lifecycle/destroy`): Users can remove the block
|
|
244
|
+
|
|
245
|
+
Changes made in the Placeholder panel are equivalent to calling `engine.block.setScopeEnabled()` programmatically. When the template is saved, these settings persist and apply when Adopters load the template.
|
|
246
|
+
|
|
247
|
+
## Adding a Role Toggle
|
|
248
|
+
|
|
249
|
+
Add a segmented control to the navigation bar that switches between Creator and Adopter modes. Engine calls inside the builder are automatically reactive—the component re-renders when the role changes.
|
|
250
|
+
|
|
251
|
+
```typescript highlight=highlight-toggle-role
|
|
252
|
+
// Add a role toggle to the navigation bar (engine calls are reactive)
|
|
253
|
+
cesdk.ui.registerComponent('ly.img.roleToggle.navigationBar', ({ builder }) => {
|
|
254
|
+
const role = engine.editor.getRole();
|
|
255
|
+
builder.ButtonGroup('role-toggle', {
|
|
256
|
+
children: () => {
|
|
257
|
+
builder.Button('creator', {
|
|
258
|
+
label: 'Creator',
|
|
259
|
+
isActive: role === 'Creator',
|
|
260
|
+
onClick: () => engine.editor.setRole('Creator')
|
|
261
|
+
});
|
|
262
|
+
builder.Button('adopter', {
|
|
263
|
+
label: 'Adopter',
|
|
264
|
+
isActive: role === 'Adopter',
|
|
265
|
+
onClick: () => {
|
|
266
|
+
// Close the placeholder panel since Adopters can't configure scopes
|
|
267
|
+
cesdk.ui.closePanel('//ly.img.panel/inspector/placeholderSettings');
|
|
268
|
+
engine.editor.setRole('Adopter');
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.navigation.bar' }, [
|
|
276
|
+
'ly.img.undoRedo.navigationBar',
|
|
277
|
+
'ly.img.spacer',
|
|
278
|
+
'ly.img.roleToggle.navigationBar',
|
|
279
|
+
'ly.img.spacer'
|
|
280
|
+
]);
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Troubleshooting
|
|
284
|
+
|
|
285
|
+
| Issue | Cause | Solution |
|
|
286
|
+
| --------------------------- | -------------------------------------- | ----------------------------------------------------------- |
|
|
287
|
+
| Adopter can edit everything | Wrong role or scopes not configured | Verify role is `Adopter` and scopes are set in Creator mode |
|
|
288
|
+
| Adopter can't edit anything | `editor/select` scope not enabled | Enable `editor/select` on blocks users should interact with |
|
|
289
|
+
| Creator can't set locks | Wrong role | Switch to Creator role before configuring scopes |
|
|
290
|
+
| Changes not persisting | Template not saved after scope changes | Save template after configuring scopes in Creator mode |
|
|
291
|
+
|
|
292
|
+
## API Reference
|
|
293
|
+
|
|
294
|
+
| Method | Description |
|
|
295
|
+
| ----------------------------------------------------- | -------------------------------------------------------------- |
|
|
296
|
+
| `engine.editor.setRole(role)` | Set the editing role (`'Creator'`, `'Adopter'`, or `'Viewer'`) |
|
|
297
|
+
| `engine.editor.getRole()` | Get the current editing role |
|
|
298
|
+
| `engine.block.setScopeEnabled(block, scope, enabled)` | Enable or disable a scope on a block |
|
|
299
|
+
| `engine.block.isScopeEnabled(block, scope)` | Check if a scope is enabled on a block |
|
|
300
|
+
| `cesdk.ui.registerComponent(id, renderFn)` | Register a custom UI component |
|
|
301
|
+
| `builder.ButtonGroup(id, { children })` | Create a segmented control |
|
|
302
|
+
| `builder.Button(id, { label, isActive, onClick })` | Create a button |
|
|
303
|
+
|
|
304
|
+
### Common Scopes
|
|
305
|
+
|
|
306
|
+
| Scope | Description |
|
|
307
|
+
| --------------------- | -------------------------------------------------------- |
|
|
308
|
+
| `'editor/select'` | Allow selecting the block (required for any interaction) |
|
|
309
|
+
| `'fill/change'` | Allow changing the block's fill (images, colors) |
|
|
310
|
+
| `'text/edit'` | Allow editing text content |
|
|
311
|
+
| `'text/character'` | Allow changing text formatting (font, size, color) |
|
|
312
|
+
| `'layer/move'` | Allow moving the block |
|
|
313
|
+
| `'layer/resize'` | Allow resizing the block |
|
|
314
|
+
| `'layer/rotate'` | Allow rotating the block |
|
|
315
|
+
| `'layer/crop'` | Allow cropping the block |
|
|
316
|
+
| `'lifecycle/destroy'` | Allow deleting the block |
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## More Resources
|
|
321
|
+
|
|
322
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
323
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
324
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
325
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
@@ -0,0 +1,16 @@
|
|
|
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) > [Create and Use Templates](./create-templates.md) > [Overview](./create-templates/overview.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
These imported designs can then be adapted into editable, structured templates inside CE.SDK.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## More Resources
|
|
12
|
+
|
|
13
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
14
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
15
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
16
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
@@ -0,0 +1,32 @@
|
|
|
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) > [Create and Use Templates](./create-templates.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Related Pages
|
|
10
|
+
|
|
11
|
+
- [Overview](./create-templates/overview.md) - Learn how to create, import, and manage reusable templates to streamline design creation in CE.SDK.
|
|
12
|
+
- [Create From Scratch](./create-templates/from-scratch.md) - Build reusable design templates programmatically using CE.SDK's APIs. Create scenes, add text and graphic blocks, configure placeholders and variables, apply editing constraints, and save templates for reuse.
|
|
13
|
+
- [Import Templates](./create-templates/import.md) - Load and import design templates into CE.SDK from URLs, archives, and serialized strings.
|
|
14
|
+
- [Dynamic Content](./create-templates/add-dynamic-content.md) - Use variables and placeholders to inject dynamic data into templates at design or runtime.
|
|
15
|
+
- [Lock the Template](./create-templates/lock.md) - Restrict editing access to specific elements or properties in a template to enforce design rules.
|
|
16
|
+
- [Edit or Remove Templates](./create-templates/edit-or-remove.md) - Modify existing templates and manage template lifecycle by loading, editing, saving, and removing templates from asset sources.
|
|
17
|
+
- [Add to Template Library](./create-templates/add-to-template-library.md) - Save and organize templates in an asset source for users to browse and apply from the template library.
|
|
18
|
+
- [Overview](./use-templates/overview.md) - Learn how to browse, apply, and dynamically populate templates in CE.SDK to streamline design workflows.
|
|
19
|
+
- [Template Library](./use-templates/library.md) - Learn how to provide a set of predefined templates in the CreativeEditor SDK.
|
|
20
|
+
- [Apply a Template](./use-templates/apply-template.md) - Learn how to apply template scenes via API in the CreativeEditor SDK.
|
|
21
|
+
- [Generate From Template](./use-templates/generate.md) - Learn how to generate finished designs from templates by loading, populating variables, and exporting to images, PDFs, or videos.
|
|
22
|
+
- [Replace Content](./use-templates/replace-content.md) - Learn how to dynamically replace content within templates using CE.SDK's placeholder and variable systems.
|
|
23
|
+
- [Use Templates Programmatically](./use-templates/programmatic.md) - Work with templates programmatically through CE.SDK's engine APIs to load existing templates, build new templates from scratch, modify template structures, and populate templates with dynamic data for batch processing and automation.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## More Resources
|
|
28
|
+
|
|
29
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
30
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
31
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
32
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
@@ -0,0 +1,302 @@
|
|
|
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) > [Create and Edit Audio](./create-audio/audio.md) > [Adjust Speed](./create-video/audio/adjust-speed.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Control audio playback speed by adjusting the speed multiplier using CE.SDK's
|
|
8
|
+
timeline UI and programmatic speed adjustment API.
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
> **Reading time:** 8 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-create-audio-audio-adjust-speed-browser)
|
|
18
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-audio-audio-adjust-speed-browser)
|
|
19
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-audio-audio-adjust-speed-browser/)
|
|
20
|
+
|
|
21
|
+
Playback speed adjustment changes how fast or slow audio plays without changing its pitch (though pitch shifting may occur depending on the audio processing implementation). A speed multiplier of 1.0 represents normal speed, values below 1.0 slow down playback, and values above 1.0 speed it up. This technique is commonly used for podcast speed controls, time-compressed narration, slow-motion audio effects, and accessibility features.
|
|
22
|
+
|
|
23
|
+
```typescript file=@cesdk_web_examples/guides-create-audio-audio-adjust-speed-browser/browser.ts reference-only
|
|
24
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
25
|
+
|
|
26
|
+
import {
|
|
27
|
+
BlurAssetSource,
|
|
28
|
+
CaptionPresetsAssetSource,
|
|
29
|
+
ColorPaletteAssetSource,
|
|
30
|
+
CropPresetsAssetSource,
|
|
31
|
+
DemoAssetSources,
|
|
32
|
+
EffectsAssetSource,
|
|
33
|
+
FiltersAssetSource,
|
|
34
|
+
PagePresetsAssetSource,
|
|
35
|
+
StickerAssetSource,
|
|
36
|
+
TextAssetSource,
|
|
37
|
+
TextComponentAssetSource,
|
|
38
|
+
TypefaceAssetSource,
|
|
39
|
+
UploadAssetSources,
|
|
40
|
+
VectorShapeAssetSource
|
|
41
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
42
|
+
import { VideoEditorConfig } from './video-editor/plugin';
|
|
43
|
+
import packageJson from './package.json';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* CE.SDK Plugin: Adjust Audio Speed Guide
|
|
47
|
+
*
|
|
48
|
+
* Demonstrates audio playback speed adjustment in CE.SDK:
|
|
49
|
+
* - Loading audio files
|
|
50
|
+
* - Adjusting playback speed with setPlaybackSpeed
|
|
51
|
+
* - Three speed presets: slow-motion (0.5x), normal (1.0x), and maximum (3.0x)
|
|
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
|
+
|
|
63
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
64
|
+
|
|
65
|
+
// Add asset source plugins
|
|
66
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
67
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
68
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
69
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
70
|
+
await cesdk.addPlugin(
|
|
71
|
+
new UploadAssetSources({
|
|
72
|
+
include: [
|
|
73
|
+
'ly.img.image.upload',
|
|
74
|
+
'ly.img.video.upload',
|
|
75
|
+
'ly.img.audio.upload'
|
|
76
|
+
]
|
|
77
|
+
})
|
|
78
|
+
);
|
|
79
|
+
await cesdk.addPlugin(
|
|
80
|
+
new DemoAssetSources({
|
|
81
|
+
include: [
|
|
82
|
+
'ly.img.templates.video.*',
|
|
83
|
+
'ly.img.image.*',
|
|
84
|
+
'ly.img.audio.*',
|
|
85
|
+
'ly.img.video.*'
|
|
86
|
+
]
|
|
87
|
+
})
|
|
88
|
+
);
|
|
89
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
90
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
91
|
+
await cesdk.addPlugin(
|
|
92
|
+
new PagePresetsAssetSource({
|
|
93
|
+
include: [
|
|
94
|
+
'ly.img.page.presets.instagram.*',
|
|
95
|
+
'ly.img.page.presets.facebook.*',
|
|
96
|
+
'ly.img.page.presets.x.*',
|
|
97
|
+
'ly.img.page.presets.linkedin.*',
|
|
98
|
+
'ly.img.page.presets.pinterest.*',
|
|
99
|
+
'ly.img.page.presets.tiktok.*',
|
|
100
|
+
'ly.img.page.presets.youtube.*',
|
|
101
|
+
'ly.img.page.presets.video.*'
|
|
102
|
+
]
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
106
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
107
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
108
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
109
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
110
|
+
|
|
111
|
+
await cesdk.actions.run('scene.create', {
|
|
112
|
+
layout: 'DepthStack',
|
|
113
|
+
page: {
|
|
114
|
+
sourceId: 'ly.img.page.presets',
|
|
115
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
116
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const engine = cesdk.engine;
|
|
121
|
+
const scene = engine.scene.get();
|
|
122
|
+
const pages = engine.block.findByType('page');
|
|
123
|
+
const page = pages.length > 0 ? pages[0] : scene;
|
|
124
|
+
|
|
125
|
+
// Use a sample audio file
|
|
126
|
+
const audioUri =
|
|
127
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.audio/audios/dance_harder.m4a';
|
|
128
|
+
|
|
129
|
+
// Create an audio block and load the audio file
|
|
130
|
+
const audioBlock = engine.block.create('audio');
|
|
131
|
+
engine.block.setString(audioBlock, 'audio/fileURI', audioUri);
|
|
132
|
+
|
|
133
|
+
// Wait for audio resource to load
|
|
134
|
+
await engine.block.forceLoadAVResource(audioBlock);
|
|
135
|
+
|
|
136
|
+
// Slow Motion Audio (0.5x - half speed)
|
|
137
|
+
const slowAudioBlock = engine.block.duplicate(audioBlock);
|
|
138
|
+
engine.block.appendChild(page, slowAudioBlock);
|
|
139
|
+
engine.block.setPositionX(slowAudioBlock, 100);
|
|
140
|
+
engine.block.setPositionY(slowAudioBlock, 200);
|
|
141
|
+
engine.block.setPlaybackSpeed(slowAudioBlock, 0.5);
|
|
142
|
+
|
|
143
|
+
// Normal Speed Audio (1.0x)
|
|
144
|
+
const normalAudioBlock = engine.block.duplicate(audioBlock);
|
|
145
|
+
engine.block.appendChild(page, normalAudioBlock);
|
|
146
|
+
engine.block.setPositionX(normalAudioBlock, 100);
|
|
147
|
+
engine.block.setPositionY(normalAudioBlock, 400);
|
|
148
|
+
engine.block.setPlaybackSpeed(normalAudioBlock, 1.0);
|
|
149
|
+
|
|
150
|
+
// Maximum Speed Audio (3.0x - triple speed)
|
|
151
|
+
const maxSpeedAudioBlock = engine.block.duplicate(audioBlock);
|
|
152
|
+
engine.block.appendChild(page, maxSpeedAudioBlock);
|
|
153
|
+
engine.block.setPositionX(maxSpeedAudioBlock, 100);
|
|
154
|
+
engine.block.setPositionY(maxSpeedAudioBlock, 600);
|
|
155
|
+
engine.block.setPlaybackSpeed(maxSpeedAudioBlock, 3.0);
|
|
156
|
+
|
|
157
|
+
// Log duration changes for demonstration
|
|
158
|
+
const slowDuration = engine.block.getDuration(slowAudioBlock);
|
|
159
|
+
const normalDuration = engine.block.getDuration(normalAudioBlock);
|
|
160
|
+
const maxDuration = engine.block.getDuration(maxSpeedAudioBlock);
|
|
161
|
+
|
|
162
|
+
// eslint-disable-next-line no-console
|
|
163
|
+
console.log(`Slow motion (0.5x) duration: ${slowDuration.toFixed(2)}s`);
|
|
164
|
+
// eslint-disable-next-line no-console
|
|
165
|
+
console.log(`Normal speed (1.0x) duration: ${normalDuration.toFixed(2)}s`);
|
|
166
|
+
// eslint-disable-next-line no-console
|
|
167
|
+
console.log(`Maximum speed (3.0x) duration: ${maxDuration.toFixed(2)}s`);
|
|
168
|
+
|
|
169
|
+
// Remove the original audio block (we only need the duplicates)
|
|
170
|
+
engine.block.destroy(audioBlock);
|
|
171
|
+
|
|
172
|
+
// Zoom to fit all audio blocks and labels
|
|
173
|
+
engine.scene.zoomToBlock(page, 40, 40, 40, 40);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export default Example;
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
This guide covers how to adjust audio playback speed programmatically using the Engine API, understand speed constraints, and manage how speed changes affect block duration.
|
|
181
|
+
|
|
182
|
+
## Understanding Speed Concepts
|
|
183
|
+
|
|
184
|
+
CE.SDK supports playback speeds from **0.25x** (quarter speed) to **3.0x** (triple speed), with **1.0x** as the default normal speed. Values below 1.0 slow down playback, values above 1.0 speed it up.
|
|
185
|
+
|
|
186
|
+
**Speed and Duration**: Adjusting speed automatically changes the block's duration following an inverse relationship: `perceived_duration = original_duration / speed_multiplier`. A 10-second clip at 2.0x speed plays in 5 seconds; at 0.5x speed it takes 20 seconds. This automatic adjustment maintains synchronization when coordinating audio with other elements.
|
|
187
|
+
|
|
188
|
+
**Common use cases**: Podcast playback controls (1.5x-2.0x), accessibility features (0.75x for easier comprehension), time-compressed narration, dramatic slow-motion effects (0.25x-0.5x), transcription work, and music tempo adjustments.
|
|
189
|
+
|
|
190
|
+
## Setting Up Audio for Speed Adjustment
|
|
191
|
+
|
|
192
|
+
### Loading Audio Files
|
|
193
|
+
|
|
194
|
+
We create an audio block and load an audio file by setting its `fileURI` property.
|
|
195
|
+
|
|
196
|
+
```typescript highlight-create-audio
|
|
197
|
+
// Create an audio block and load the audio file
|
|
198
|
+
const audioBlock = engine.block.create('audio');
|
|
199
|
+
engine.block.setString(audioBlock, 'audio/fileURI', audioUri);
|
|
200
|
+
|
|
201
|
+
// Wait for audio resource to load
|
|
202
|
+
await engine.block.forceLoadAVResource(audioBlock);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Unlike video or image blocks which use fills, audio blocks store the file URI directly on the block itself using the `audio/fileURI` property. The `forceLoadAVResource` call ensures CE.SDK has downloaded the audio file and loaded its metadata, which is essential for accurate duration information and playback speed control.
|
|
206
|
+
|
|
207
|
+
## Adjusting Playback Speed
|
|
208
|
+
|
|
209
|
+
### Setting Normal Speed
|
|
210
|
+
|
|
211
|
+
By default, audio plays at normal speed (1.0x). We can explicitly set this to ensure consistent baseline behavior.
|
|
212
|
+
|
|
213
|
+
```typescript highlight-set-normal-speed
|
|
214
|
+
// Normal Speed Audio (1.0x)
|
|
215
|
+
const normalAudioBlock = engine.block.duplicate(audioBlock);
|
|
216
|
+
engine.block.appendChild(page, normalAudioBlock);
|
|
217
|
+
engine.block.setPositionX(normalAudioBlock, 100);
|
|
218
|
+
engine.block.setPositionY(normalAudioBlock, 400);
|
|
219
|
+
engine.block.setPlaybackSpeed(normalAudioBlock, 1.0);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Setting speed to 1.0 ensures the audio plays at its original recorded rate. This is useful after experimenting with different speeds and wanting to return to normal, or when initializing audio blocks programmatically to ensure consistent starting states.
|
|
223
|
+
|
|
224
|
+
### Querying Current Speed
|
|
225
|
+
|
|
226
|
+
We can check the current playback speed at any time using `getPlaybackSpeed`.
|
|
227
|
+
|
|
228
|
+
```typescript highlight-set-normal-speed
|
|
229
|
+
// Normal Speed Audio (1.0x)
|
|
230
|
+
const normalAudioBlock = engine.block.duplicate(audioBlock);
|
|
231
|
+
engine.block.appendChild(page, normalAudioBlock);
|
|
232
|
+
engine.block.setPositionX(normalAudioBlock, 100);
|
|
233
|
+
engine.block.setPositionY(normalAudioBlock, 400);
|
|
234
|
+
engine.block.setPlaybackSpeed(normalAudioBlock, 1.0);
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
This returns the current speed multiplier as a number. Use this to populate UI controls, validate that speed changes were applied, or make relative adjustments based on existing speeds.
|
|
238
|
+
|
|
239
|
+
## Common Speed Presets
|
|
240
|
+
|
|
241
|
+
### Slow Motion Audio (0.5x)
|
|
242
|
+
|
|
243
|
+
Slowing audio to half speed creates a slow-motion effect that's useful for careful listening or transcription.
|
|
244
|
+
|
|
245
|
+
```typescript highlight-set-slow-motion
|
|
246
|
+
// Slow Motion Audio (0.5x - half speed)
|
|
247
|
+
const slowAudioBlock = engine.block.duplicate(audioBlock);
|
|
248
|
+
engine.block.appendChild(page, slowAudioBlock);
|
|
249
|
+
engine.block.setPositionX(slowAudioBlock, 100);
|
|
250
|
+
engine.block.setPositionY(slowAudioBlock, 200);
|
|
251
|
+
engine.block.setPlaybackSpeed(slowAudioBlock, 0.5);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
At 0.5x speed, a 10-second audio clip will take 20 seconds to play. This slower pace makes it easier to catch details, transcribe speech accurately, or create dramatic slow-motion audio effects in creative projects.
|
|
255
|
+
|
|
256
|
+
### Maximum Speed (3.0x)
|
|
257
|
+
|
|
258
|
+
The maximum supported speed is 3.0x, three times normal playback rate.
|
|
259
|
+
|
|
260
|
+
```typescript highlight-set-maximum-speed
|
|
261
|
+
// Maximum Speed Audio (3.0x - triple speed)
|
|
262
|
+
const maxSpeedAudioBlock = engine.block.duplicate(audioBlock);
|
|
263
|
+
engine.block.appendChild(page, maxSpeedAudioBlock);
|
|
264
|
+
engine.block.setPositionX(maxSpeedAudioBlock, 100);
|
|
265
|
+
engine.block.setPositionY(maxSpeedAudioBlock, 600);
|
|
266
|
+
engine.block.setPlaybackSpeed(maxSpeedAudioBlock, 3.0);
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
At maximum speed, audio plays very quickly—a 10-second clip finishes in just 3.33 seconds. This extreme speed is useful for rapidly skimming through content to find specific moments, though comprehension becomes challenging at this rate.
|
|
270
|
+
|
|
271
|
+
## Speed and Block Duration
|
|
272
|
+
|
|
273
|
+
### Understanding Duration Changes
|
|
274
|
+
|
|
275
|
+
When we change playback speed, CE.SDK automatically adjusts the block's duration to reflect the new playback time.
|
|
276
|
+
|
|
277
|
+
```typescript highlight-speed-and-duration
|
|
278
|
+
// Log duration changes for demonstration
|
|
279
|
+
const slowDuration = engine.block.getDuration(slowAudioBlock);
|
|
280
|
+
const normalDuration = engine.block.getDuration(normalAudioBlock);
|
|
281
|
+
const maxDuration = engine.block.getDuration(maxSpeedAudioBlock);
|
|
282
|
+
|
|
283
|
+
// eslint-disable-next-line no-console
|
|
284
|
+
console.log(`Slow motion (0.5x) duration: ${slowDuration.toFixed(2)}s`);
|
|
285
|
+
// eslint-disable-next-line no-console
|
|
286
|
+
console.log(`Normal speed (1.0x) duration: ${normalDuration.toFixed(2)}s`);
|
|
287
|
+
// eslint-disable-next-line no-console
|
|
288
|
+
console.log(`Maximum speed (3.0x) duration: ${maxDuration.toFixed(2)}s`);
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
The original duration represents how long the audio takes to play at normal speed. When we double the speed to 2.0x, the duration is automatically halved. The audio content is the same, but it plays through in half the time, so the block duration shrinks accordingly.
|
|
292
|
+
|
|
293
|
+
This automatic adjustment keeps your composition synchronized. If you have multiple audio tracks or need to coordinate audio with video, the block durations will accurately reflect the new playback duration after speed changes.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## More Resources
|
|
298
|
+
|
|
299
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
300
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
301
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
302
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|