@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,634 @@
|
|
|
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 Videos](./create-video.md) > [Split](./edit-video/split.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Split video and audio clips at specific time points using CE.SDK's timeline UI
|
|
8
|
+
and programmatic split API to create independent segments.
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
> **Reading time:** 10 minutes
|
|
13
|
+
>
|
|
14
|
+
> **Resources:**
|
|
15
|
+
>
|
|
16
|
+
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
17
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-create-video-split-browser)
|
|
18
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-video-split-browser)
|
|
19
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-video-split-browser/)
|
|
20
|
+
|
|
21
|
+
Clip splitting divides one block into two at a specified time. The original block ends at the split point; a new block starts there. Both blocks reference the same source media with independent timing. This differs from trimming, which adjusts a single block's playback range without creating new blocks.
|
|
22
|
+
|
|
23
|
+
```typescript file=@cesdk_web_examples/guides-create-video-split-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
|
+
import { calculateGridLayout } from './utils';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* CE.SDK Plugin: Split Video Guide
|
|
48
|
+
*
|
|
49
|
+
* Demonstrates splitting video clips in CE.SDK:
|
|
50
|
+
* - Basic splitting at specific time points
|
|
51
|
+
* - Configuring split options (attachToParent, selectNewBlock, createParentTrackIfNeeded)
|
|
52
|
+
* - Splitting at playhead position
|
|
53
|
+
* - Understanding split results (trim properties)
|
|
54
|
+
* - Splitting multiple tracks at timeline position
|
|
55
|
+
* - Split and delete workflow
|
|
56
|
+
*/
|
|
57
|
+
class Example implements EditorPlugin {
|
|
58
|
+
name = packageJson.name;
|
|
59
|
+
|
|
60
|
+
version = packageJson.version;
|
|
61
|
+
|
|
62
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
63
|
+
if (!cesdk) {
|
|
64
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
68
|
+
|
|
69
|
+
// Add asset source plugins
|
|
70
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
71
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
72
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
73
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
74
|
+
await cesdk.addPlugin(
|
|
75
|
+
new UploadAssetSources({
|
|
76
|
+
include: [
|
|
77
|
+
'ly.img.image.upload',
|
|
78
|
+
'ly.img.video.upload',
|
|
79
|
+
'ly.img.audio.upload'
|
|
80
|
+
]
|
|
81
|
+
})
|
|
82
|
+
);
|
|
83
|
+
await cesdk.addPlugin(
|
|
84
|
+
new DemoAssetSources({
|
|
85
|
+
include: [
|
|
86
|
+
'ly.img.templates.video.*',
|
|
87
|
+
'ly.img.image.*',
|
|
88
|
+
'ly.img.audio.*',
|
|
89
|
+
'ly.img.video.*'
|
|
90
|
+
]
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
94
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
95
|
+
await cesdk.addPlugin(
|
|
96
|
+
new PagePresetsAssetSource({
|
|
97
|
+
include: [
|
|
98
|
+
'ly.img.page.presets.instagram.*',
|
|
99
|
+
'ly.img.page.presets.facebook.*',
|
|
100
|
+
'ly.img.page.presets.x.*',
|
|
101
|
+
'ly.img.page.presets.linkedin.*',
|
|
102
|
+
'ly.img.page.presets.pinterest.*',
|
|
103
|
+
'ly.img.page.presets.tiktok.*',
|
|
104
|
+
'ly.img.page.presets.youtube.*',
|
|
105
|
+
'ly.img.page.presets.video.*'
|
|
106
|
+
]
|
|
107
|
+
})
|
|
108
|
+
);
|
|
109
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
110
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
111
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
112
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
113
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
114
|
+
|
|
115
|
+
await cesdk.actions.run('scene.create', {
|
|
116
|
+
layout: 'DepthStack',
|
|
117
|
+
page: {
|
|
118
|
+
sourceId: 'ly.img.page.presets',
|
|
119
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
120
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
const engine = cesdk.engine;
|
|
125
|
+
const scene = engine.scene.get();
|
|
126
|
+
const pages = engine.block.findByType('page');
|
|
127
|
+
const page = pages.length > 0 ? pages[0] : scene;
|
|
128
|
+
|
|
129
|
+
// Calculate responsive grid layout based on page dimensions
|
|
130
|
+
const pageWidth = engine.block.getWidth(page);
|
|
131
|
+
const pageHeight = engine.block.getHeight(page);
|
|
132
|
+
const layout = calculateGridLayout(pageWidth, pageHeight, 6);
|
|
133
|
+
const { blockWidth, blockHeight, getPosition } = layout;
|
|
134
|
+
|
|
135
|
+
// Get a video from demo asset sources
|
|
136
|
+
const videoAssets = await engine.asset.findAssets('ly.img.video', {
|
|
137
|
+
page: 0,
|
|
138
|
+
perPage: 1
|
|
139
|
+
});
|
|
140
|
+
const videoUri =
|
|
141
|
+
videoAssets.assets[0]?.payload?.sourceSet?.[0]?.uri ??
|
|
142
|
+
'https://img.ly/static/ubq_video_samples/bbb.mp4';
|
|
143
|
+
|
|
144
|
+
// Create a video block to demonstrate basic splitting
|
|
145
|
+
const basicSplitVideo = await engine.block.addVideo(
|
|
146
|
+
videoUri,
|
|
147
|
+
blockWidth,
|
|
148
|
+
blockHeight
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// Get the video fill and load resource to access duration
|
|
152
|
+
const basicFill = engine.block.getFill(basicSplitVideo);
|
|
153
|
+
await engine.block.forceLoadAVResource(basicFill);
|
|
154
|
+
|
|
155
|
+
// Set block duration for the timeline
|
|
156
|
+
engine.block.setDuration(basicSplitVideo, 10.0);
|
|
157
|
+
|
|
158
|
+
// Split the video block at 5 seconds
|
|
159
|
+
// Returns the ID of the newly created block (second segment)
|
|
160
|
+
const splitResultBlock = engine.block.split(basicSplitVideo, 5.0);
|
|
161
|
+
|
|
162
|
+
// eslint-disable-next-line no-console
|
|
163
|
+
console.log(
|
|
164
|
+
`Basic split - Original block: ${basicSplitVideo}, New block: ${splitResultBlock}`
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
// Create another video block to demonstrate split options
|
|
168
|
+
const optionsSplitVideo = await engine.block.addVideo(
|
|
169
|
+
videoUri,
|
|
170
|
+
blockWidth,
|
|
171
|
+
blockHeight
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
const optionsFill = engine.block.getFill(optionsSplitVideo);
|
|
175
|
+
await engine.block.forceLoadAVResource(optionsFill);
|
|
176
|
+
engine.block.setDuration(optionsSplitVideo, 10.0);
|
|
177
|
+
|
|
178
|
+
// Split with custom options
|
|
179
|
+
const optionsSplitResult = engine.block.split(optionsSplitVideo, 4.0, {
|
|
180
|
+
attachToParent: true, // Attach new block to same parent (default: true)
|
|
181
|
+
createParentTrackIfNeeded: false, // Don't create track if needed (default: false)
|
|
182
|
+
selectNewBlock: false // Don't select the new block (default: true)
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// eslint-disable-next-line no-console
|
|
186
|
+
console.log(
|
|
187
|
+
`Split with options - New block: ${optionsSplitResult}, selectNewBlock: false`
|
|
188
|
+
);
|
|
189
|
+
|
|
190
|
+
// Create a video block to demonstrate playhead-based splitting
|
|
191
|
+
const playheadSplitVideo = await engine.block.addVideo(
|
|
192
|
+
videoUri,
|
|
193
|
+
blockWidth,
|
|
194
|
+
blockHeight
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
const playheadFill = engine.block.getFill(playheadSplitVideo);
|
|
198
|
+
await engine.block.forceLoadAVResource(playheadFill);
|
|
199
|
+
engine.block.setDuration(playheadSplitVideo, 10.0);
|
|
200
|
+
|
|
201
|
+
// Get the clip's start time on the timeline
|
|
202
|
+
const clipStartTime = engine.block.getTimeOffset(playheadSplitVideo);
|
|
203
|
+
|
|
204
|
+
// Simulate a playhead position (in a real app, use engine.block.getPlaybackTime(page))
|
|
205
|
+
const simulatedPlayheadTime = clipStartTime + 3.0;
|
|
206
|
+
|
|
207
|
+
// Calculate split time relative to the clip
|
|
208
|
+
const splitTime = simulatedPlayheadTime - clipStartTime;
|
|
209
|
+
|
|
210
|
+
// Perform the split at the calculated time
|
|
211
|
+
const playheadSplitResult = engine.block.split(
|
|
212
|
+
playheadSplitVideo,
|
|
213
|
+
splitTime
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
// eslint-disable-next-line no-console
|
|
217
|
+
console.log(
|
|
218
|
+
`Playhead split - Split at ${splitTime}s into clip, New block: ${playheadSplitResult}`
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
// Create a video block to examine split results
|
|
222
|
+
const resultsSplitVideo = await engine.block.addVideo(
|
|
223
|
+
videoUri,
|
|
224
|
+
blockWidth,
|
|
225
|
+
blockHeight
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
const resultsFill = engine.block.getFill(resultsSplitVideo);
|
|
229
|
+
await engine.block.forceLoadAVResource(resultsFill);
|
|
230
|
+
engine.block.setDuration(resultsSplitVideo, 10.0);
|
|
231
|
+
|
|
232
|
+
// Get trim values before split
|
|
233
|
+
const originalTrimOffset = engine.block.getTrimOffset(resultsFill);
|
|
234
|
+
const originalTrimLength = engine.block.getTrimLength(resultsFill);
|
|
235
|
+
|
|
236
|
+
// Split at 6 seconds
|
|
237
|
+
const resultsNewBlock = engine.block.split(resultsSplitVideo, 6.0);
|
|
238
|
+
const newBlockFill = engine.block.getFill(resultsNewBlock);
|
|
239
|
+
|
|
240
|
+
// Examine trim properties after split
|
|
241
|
+
const originalAfterSplitOffset = engine.block.getTrimOffset(resultsFill);
|
|
242
|
+
const originalAfterSplitLength = engine.block.getTrimLength(resultsFill);
|
|
243
|
+
const newBlockTrimOffset = engine.block.getTrimOffset(newBlockFill);
|
|
244
|
+
const newBlockTrimLength = engine.block.getTrimLength(newBlockFill);
|
|
245
|
+
|
|
246
|
+
// eslint-disable-next-line no-console
|
|
247
|
+
console.log('Split results:');
|
|
248
|
+
// eslint-disable-next-line no-console
|
|
249
|
+
console.log(
|
|
250
|
+
` Original before: offset=${originalTrimOffset}, length=${originalTrimLength}`
|
|
251
|
+
);
|
|
252
|
+
// eslint-disable-next-line no-console
|
|
253
|
+
console.log(
|
|
254
|
+
` Original after: offset=${originalAfterSplitOffset}, length=${originalAfterSplitLength}`
|
|
255
|
+
);
|
|
256
|
+
// eslint-disable-next-line no-console
|
|
257
|
+
console.log(
|
|
258
|
+
` New block: offset=${newBlockTrimOffset}, length=${newBlockTrimLength}`
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
// Create a video block to demonstrate split-and-delete workflow
|
|
262
|
+
const deleteWorkflowVideo = await engine.block.addVideo(
|
|
263
|
+
videoUri,
|
|
264
|
+
blockWidth,
|
|
265
|
+
blockHeight
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
const deleteFill = engine.block.getFill(deleteWorkflowVideo);
|
|
269
|
+
await engine.block.forceLoadAVResource(deleteFill);
|
|
270
|
+
engine.block.setDuration(deleteWorkflowVideo, 10.0);
|
|
271
|
+
|
|
272
|
+
// Remove middle section: split at start of section to remove (2s)
|
|
273
|
+
const middleBlock = engine.block.split(deleteWorkflowVideo, 2.0);
|
|
274
|
+
|
|
275
|
+
// Split again at the end of the section to remove (at 3s into middle block = 5s total)
|
|
276
|
+
const endBlock = engine.block.split(middleBlock, 3.0);
|
|
277
|
+
|
|
278
|
+
// Delete the middle segment
|
|
279
|
+
engine.block.destroy(middleBlock);
|
|
280
|
+
|
|
281
|
+
// eslint-disable-next-line no-console
|
|
282
|
+
console.log(
|
|
283
|
+
`Split and delete - Removed middle 3s section, kept blocks: ${deleteWorkflowVideo}, ${endBlock}`
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
// Create a video block to demonstrate split time validation
|
|
287
|
+
const validateVideo = await engine.block.addVideo(
|
|
288
|
+
videoUri,
|
|
289
|
+
blockWidth,
|
|
290
|
+
blockHeight
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
const validateFill = engine.block.getFill(validateVideo);
|
|
294
|
+
await engine.block.forceLoadAVResource(validateFill);
|
|
295
|
+
engine.block.setDuration(validateVideo, 8.0);
|
|
296
|
+
|
|
297
|
+
// Get block duration to validate split time
|
|
298
|
+
const blockDuration = engine.block.getDuration(validateVideo);
|
|
299
|
+
const desiredSplitTime = 4.0;
|
|
300
|
+
|
|
301
|
+
// Validate split time is within bounds (must be > 0 and < duration)
|
|
302
|
+
if (desiredSplitTime > 0 && desiredSplitTime < blockDuration) {
|
|
303
|
+
const validatedSplitResult = engine.block.split(
|
|
304
|
+
validateVideo,
|
|
305
|
+
desiredSplitTime
|
|
306
|
+
);
|
|
307
|
+
// eslint-disable-next-line no-console
|
|
308
|
+
console.log(
|
|
309
|
+
`Validated split - Duration: ${blockDuration}s, Split at: ${desiredSplitTime}s, New block: ${validatedSplitResult}`
|
|
310
|
+
);
|
|
311
|
+
} else {
|
|
312
|
+
// eslint-disable-next-line no-console
|
|
313
|
+
console.log('Split time out of range');
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// ===== Position all blocks in grid layout =====
|
|
317
|
+
// Note: Some original blocks were modified by splits, position remaining visible blocks
|
|
318
|
+
const blocks = [
|
|
319
|
+
basicSplitVideo,
|
|
320
|
+
splitResultBlock,
|
|
321
|
+
optionsSplitVideo,
|
|
322
|
+
optionsSplitResult,
|
|
323
|
+
playheadSplitVideo,
|
|
324
|
+
playheadSplitResult
|
|
325
|
+
];
|
|
326
|
+
|
|
327
|
+
blocks.forEach((block, index) => {
|
|
328
|
+
const pos = getPosition(index);
|
|
329
|
+
engine.block.setPositionX(block, pos.x);
|
|
330
|
+
engine.block.setPositionY(block, pos.y);
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
// Select first block so timeline controls are visible
|
|
334
|
+
engine.block.setSelected(basicSplitVideo, true);
|
|
335
|
+
|
|
336
|
+
// Set playback time to 8 seconds for hero image
|
|
337
|
+
engine.block.setPlaybackTime(page, 8.0);
|
|
338
|
+
|
|
339
|
+
// Start playback automatically when the example loads
|
|
340
|
+
try {
|
|
341
|
+
engine.block.setPlaying(page, true);
|
|
342
|
+
// eslint-disable-next-line no-console
|
|
343
|
+
console.log(
|
|
344
|
+
'Video split guide initialized. Playback started. Use timeline to see split results.'
|
|
345
|
+
);
|
|
346
|
+
} catch (error) {
|
|
347
|
+
// eslint-disable-next-line no-console
|
|
348
|
+
console.log(
|
|
349
|
+
'Video split guide initialized. Click play button to start playback.'
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export default Example;
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
This guide covers how to use the built-in timeline UI for visual splitting and how to split clips programmatically using the Engine API.
|
|
359
|
+
|
|
360
|
+
## Splitting Clips via the UI
|
|
361
|
+
|
|
362
|
+
When you select a video or audio block in the timeline, CE.SDK provides split functionality through the toolbar. Position the playhead at the desired split point by clicking on the timeline ruler or dragging the playhead indicator.
|
|
363
|
+
|
|
364
|
+
With the clip selected and playhead positioned, click the Split button in the timeline toolbar. CE.SDK divides the clip at the playhead position, creating two independent segments. Visual feedback shows the resulting segments as separate blocks on the timeline.
|
|
365
|
+
|
|
366
|
+
The timeline enforces minimum duration constraints that prevent splitting too close to clip edges. If the playhead is positioned within this minimum boundary, the split operation will not be available.
|
|
367
|
+
|
|
368
|
+
## Programmatic Splitting
|
|
369
|
+
|
|
370
|
+
For applications that need to split clips programmatically—whether for automation, batch processing, or dynamic editing—CE.SDK provides the `engine.block.split()` method.
|
|
371
|
+
|
|
372
|
+
### Basic Splitting at a Specific Time
|
|
373
|
+
|
|
374
|
+
Split a block by providing the block ID and the split time in seconds. The time parameter is relative to the block's own time range, accounting for the block's time offset.
|
|
375
|
+
|
|
376
|
+
```typescript highlight-basic-split
|
|
377
|
+
// Create a video block to demonstrate basic splitting
|
|
378
|
+
const basicSplitVideo = await engine.block.addVideo(
|
|
379
|
+
videoUri,
|
|
380
|
+
blockWidth,
|
|
381
|
+
blockHeight
|
|
382
|
+
);
|
|
383
|
+
|
|
384
|
+
// Get the video fill and load resource to access duration
|
|
385
|
+
const basicFill = engine.block.getFill(basicSplitVideo);
|
|
386
|
+
await engine.block.forceLoadAVResource(basicFill);
|
|
387
|
+
|
|
388
|
+
// Set block duration for the timeline
|
|
389
|
+
engine.block.setDuration(basicSplitVideo, 10.0);
|
|
390
|
+
|
|
391
|
+
// Split the video block at 5 seconds
|
|
392
|
+
// Returns the ID of the newly created block (second segment)
|
|
393
|
+
const splitResultBlock = engine.block.split(basicSplitVideo, 5.0);
|
|
394
|
+
|
|
395
|
+
// eslint-disable-next-line no-console
|
|
396
|
+
console.log(
|
|
397
|
+
`Basic split - Original block: ${basicSplitVideo}, New block: ${splitResultBlock}`
|
|
398
|
+
);
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
The `split()` method returns the ID of the newly created block. The original block becomes the first segment (before the split point), and the returned block is the second segment (after the split point).
|
|
402
|
+
|
|
403
|
+
### Configuring Split Options
|
|
404
|
+
|
|
405
|
+
The `SplitOptions` object controls split behavior with three optional properties:
|
|
406
|
+
|
|
407
|
+
- **`attachToParent`** (default: `true`): Whether to attach the new block to the same parent as the original
|
|
408
|
+
- **`createParentTrackIfNeeded`** (default: `false`): Creates a parent track if needed and adds both blocks to it
|
|
409
|
+
- **`selectNewBlock`** (default: `true`): Whether to select the newly created block after splitting
|
|
410
|
+
|
|
411
|
+
```typescript highlight-split-options
|
|
412
|
+
// Create another video block to demonstrate split options
|
|
413
|
+
const optionsSplitVideo = await engine.block.addVideo(
|
|
414
|
+
videoUri,
|
|
415
|
+
blockWidth,
|
|
416
|
+
blockHeight
|
|
417
|
+
);
|
|
418
|
+
|
|
419
|
+
const optionsFill = engine.block.getFill(optionsSplitVideo);
|
|
420
|
+
await engine.block.forceLoadAVResource(optionsFill);
|
|
421
|
+
engine.block.setDuration(optionsSplitVideo, 10.0);
|
|
422
|
+
|
|
423
|
+
// Split with custom options
|
|
424
|
+
const optionsSplitResult = engine.block.split(optionsSplitVideo, 4.0, {
|
|
425
|
+
attachToParent: true, // Attach new block to same parent (default: true)
|
|
426
|
+
createParentTrackIfNeeded: false, // Don't create track if needed (default: false)
|
|
427
|
+
selectNewBlock: false // Don't select the new block (default: true)
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
// eslint-disable-next-line no-console
|
|
431
|
+
console.log(
|
|
432
|
+
`Split with options - New block: ${optionsSplitResult}, selectNewBlock: false`
|
|
433
|
+
);
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
Use `selectNewBlock: false` when splitting multiple clips programmatically to avoid changing selection state between operations.
|
|
437
|
+
|
|
438
|
+
### Splitting at the Current Playhead Position
|
|
439
|
+
|
|
440
|
+
To implement playhead-based splitting like the built-in UI, get the current playback time from the page and convert it to block-relative time.
|
|
441
|
+
|
|
442
|
+
```typescript highlight-split-at-playhead
|
|
443
|
+
// Create a video block to demonstrate playhead-based splitting
|
|
444
|
+
const playheadSplitVideo = await engine.block.addVideo(
|
|
445
|
+
videoUri,
|
|
446
|
+
blockWidth,
|
|
447
|
+
blockHeight
|
|
448
|
+
);
|
|
449
|
+
|
|
450
|
+
const playheadFill = engine.block.getFill(playheadSplitVideo);
|
|
451
|
+
await engine.block.forceLoadAVResource(playheadFill);
|
|
452
|
+
engine.block.setDuration(playheadSplitVideo, 10.0);
|
|
453
|
+
|
|
454
|
+
// Get the clip's start time on the timeline
|
|
455
|
+
const clipStartTime = engine.block.getTimeOffset(playheadSplitVideo);
|
|
456
|
+
|
|
457
|
+
// Simulate a playhead position (in a real app, use engine.block.getPlaybackTime(page))
|
|
458
|
+
const simulatedPlayheadTime = clipStartTime + 3.0;
|
|
459
|
+
|
|
460
|
+
// Calculate split time relative to the clip
|
|
461
|
+
const splitTime = simulatedPlayheadTime - clipStartTime;
|
|
462
|
+
|
|
463
|
+
// Perform the split at the calculated time
|
|
464
|
+
const playheadSplitResult = engine.block.split(playheadSplitVideo, splitTime);
|
|
465
|
+
|
|
466
|
+
// eslint-disable-next-line no-console
|
|
467
|
+
console.log(
|
|
468
|
+
`Playhead split - Split at ${splitTime}s into clip, New block: ${playheadSplitResult}`
|
|
469
|
+
);
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
The playhead position from `getPlaybackTime(page)` is in absolute playback time. Subtract the clip's `getTimeOffset()` to convert to block-relative time before passing to `split()`.
|
|
473
|
+
|
|
474
|
+
## Understanding Split Results
|
|
475
|
+
|
|
476
|
+
After a split operation, both the original and new blocks are configured with updated trim properties.
|
|
477
|
+
|
|
478
|
+
### Trim Properties After Split
|
|
479
|
+
|
|
480
|
+
```typescript highlight-split-results
|
|
481
|
+
// Create a video block to examine split results
|
|
482
|
+
const resultsSplitVideo = await engine.block.addVideo(
|
|
483
|
+
videoUri,
|
|
484
|
+
blockWidth,
|
|
485
|
+
blockHeight
|
|
486
|
+
);
|
|
487
|
+
|
|
488
|
+
const resultsFill = engine.block.getFill(resultsSplitVideo);
|
|
489
|
+
await engine.block.forceLoadAVResource(resultsFill);
|
|
490
|
+
engine.block.setDuration(resultsSplitVideo, 10.0);
|
|
491
|
+
|
|
492
|
+
// Get trim values before split
|
|
493
|
+
const originalTrimOffset = engine.block.getTrimOffset(resultsFill);
|
|
494
|
+
const originalTrimLength = engine.block.getTrimLength(resultsFill);
|
|
495
|
+
|
|
496
|
+
// Split at 6 seconds
|
|
497
|
+
const resultsNewBlock = engine.block.split(resultsSplitVideo, 6.0);
|
|
498
|
+
const newBlockFill = engine.block.getFill(resultsNewBlock);
|
|
499
|
+
|
|
500
|
+
// Examine trim properties after split
|
|
501
|
+
const originalAfterSplitOffset = engine.block.getTrimOffset(resultsFill);
|
|
502
|
+
const originalAfterSplitLength = engine.block.getTrimLength(resultsFill);
|
|
503
|
+
const newBlockTrimOffset = engine.block.getTrimOffset(newBlockFill);
|
|
504
|
+
const newBlockTrimLength = engine.block.getTrimLength(newBlockFill);
|
|
505
|
+
|
|
506
|
+
// eslint-disable-next-line no-console
|
|
507
|
+
console.log('Split results:');
|
|
508
|
+
// eslint-disable-next-line no-console
|
|
509
|
+
console.log(
|
|
510
|
+
` Original before: offset=${originalTrimOffset}, length=${originalTrimLength}`
|
|
511
|
+
);
|
|
512
|
+
// eslint-disable-next-line no-console
|
|
513
|
+
console.log(
|
|
514
|
+
` Original after: offset=${originalAfterSplitOffset}, length=${originalAfterSplitLength}`
|
|
515
|
+
);
|
|
516
|
+
// eslint-disable-next-line no-console
|
|
517
|
+
console.log(
|
|
518
|
+
` New block: offset=${newBlockTrimOffset}, length=${newBlockTrimLength}`
|
|
519
|
+
);
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
The original block keeps its trim offset unchanged, but its trim length is reduced to the split point. The new block has its trim offset advanced by the split time and trim length set to cover the remaining duration. Both blocks reference the same source media—splitting is non-destructive.
|
|
523
|
+
|
|
524
|
+
### Timeline Positioning
|
|
525
|
+
|
|
526
|
+
The original block keeps its `getTimeOffset()`. When `attachToParent` is true, the new block is positioned immediately after the original on the same parent. Both blocks stay on the same track unless `createParentTrackIfNeeded` creates a new track structure.
|
|
527
|
+
|
|
528
|
+
## Split and Delete Workflow
|
|
529
|
+
|
|
530
|
+
Remove a middle section from a clip by splitting at both boundaries and deleting the middle segment.
|
|
531
|
+
|
|
532
|
+
```typescript highlight-split-and-delete
|
|
533
|
+
// Create a video block to demonstrate split-and-delete workflow
|
|
534
|
+
const deleteWorkflowVideo = await engine.block.addVideo(
|
|
535
|
+
videoUri,
|
|
536
|
+
blockWidth,
|
|
537
|
+
blockHeight
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
const deleteFill = engine.block.getFill(deleteWorkflowVideo);
|
|
541
|
+
await engine.block.forceLoadAVResource(deleteFill);
|
|
542
|
+
engine.block.setDuration(deleteWorkflowVideo, 10.0);
|
|
543
|
+
|
|
544
|
+
// Remove middle section: split at start of section to remove (2s)
|
|
545
|
+
const middleBlock = engine.block.split(deleteWorkflowVideo, 2.0);
|
|
546
|
+
|
|
547
|
+
// Split again at the end of the section to remove (at 3s into middle block = 5s total)
|
|
548
|
+
const endBlock = engine.block.split(middleBlock, 3.0);
|
|
549
|
+
|
|
550
|
+
// Delete the middle segment
|
|
551
|
+
engine.block.destroy(middleBlock);
|
|
552
|
+
|
|
553
|
+
// eslint-disable-next-line no-console
|
|
554
|
+
console.log(
|
|
555
|
+
`Split and delete - Removed middle 3s section, kept blocks: ${deleteWorkflowVideo}, ${endBlock}`
|
|
556
|
+
);
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
This workflow is useful for removing unwanted sections, such as cutting out pauses, mistakes, or irrelevant portions from a recording.
|
|
560
|
+
|
|
561
|
+
## Validating Split Time
|
|
562
|
+
|
|
563
|
+
Always validate that the split time is within valid bounds before calling `split()`. The split time must be greater than 0 and less than the block's duration.
|
|
564
|
+
|
|
565
|
+
```typescript highlight-validate-split-time
|
|
566
|
+
// Create a video block to demonstrate split time validation
|
|
567
|
+
const validateVideo = await engine.block.addVideo(
|
|
568
|
+
videoUri,
|
|
569
|
+
blockWidth,
|
|
570
|
+
blockHeight
|
|
571
|
+
);
|
|
572
|
+
|
|
573
|
+
const validateFill = engine.block.getFill(validateVideo);
|
|
574
|
+
await engine.block.forceLoadAVResource(validateFill);
|
|
575
|
+
engine.block.setDuration(validateVideo, 8.0);
|
|
576
|
+
|
|
577
|
+
// Get block duration to validate split time
|
|
578
|
+
const blockDuration = engine.block.getDuration(validateVideo);
|
|
579
|
+
const desiredSplitTime = 4.0;
|
|
580
|
+
|
|
581
|
+
// Validate split time is within bounds (must be > 0 and < duration)
|
|
582
|
+
if (desiredSplitTime > 0 && desiredSplitTime < blockDuration) {
|
|
583
|
+
const validatedSplitResult = engine.block.split(
|
|
584
|
+
validateVideo,
|
|
585
|
+
desiredSplitTime
|
|
586
|
+
);
|
|
587
|
+
// eslint-disable-next-line no-console
|
|
588
|
+
console.log(
|
|
589
|
+
`Validated split - Duration: ${blockDuration}s, Split at: ${desiredSplitTime}s, New block: ${validatedSplitResult}`
|
|
590
|
+
);
|
|
591
|
+
} else {
|
|
592
|
+
// eslint-disable-next-line no-console
|
|
593
|
+
console.log('Split time out of range');
|
|
594
|
+
}
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
Attempting to split at an invalid time (at the beginning, end, or outside the block's duration) will fail or produce unexpected results.
|
|
598
|
+
|
|
599
|
+
## Troubleshooting
|
|
600
|
+
|
|
601
|
+
### Split Returns Unexpected Block
|
|
602
|
+
|
|
603
|
+
If the returned block ID doesn't behave as expected, remember that the original block becomes the first segment (before split point) and the returned block is the second segment (after split point).
|
|
604
|
+
|
|
605
|
+
### Split Time Out of Range
|
|
606
|
+
|
|
607
|
+
If split fails or produces unexpected results, verify the split time is within bounds. Use `getDuration()` to check the valid range before splitting.
|
|
608
|
+
|
|
609
|
+
### Clip Not Splitting
|
|
610
|
+
|
|
611
|
+
If `split()` has no visible effect, check that the block type supports splitting. Verify `supportsTrim()` returns true for the block's fill. For video and audio fills, ensure `forceLoadAVResource()` has been awaited before attempting to split.
|
|
612
|
+
|
|
613
|
+
## API Reference
|
|
614
|
+
|
|
615
|
+
| Method | Description | Parameters | Returns |
|
|
616
|
+
| ----------------------------- | --------------------------------------- | ----------------------------------------------------------- | --------------- |
|
|
617
|
+
| `split(id, atTime, options?)` | Split a block at the specified time | `id: DesignBlockId, atTime: number, options?: SplitOptions` | `DesignBlockId` |
|
|
618
|
+
| `getTimeOffset(id)` | Get time offset relative to parent | `id: DesignBlockId` | `number` |
|
|
619
|
+
| `getDuration(id)` | Get playback duration | `id: DesignBlockId` | `number` |
|
|
620
|
+
| `getPlaybackTime(id)` | Get current playback time | `id: DesignBlockId` | `number` |
|
|
621
|
+
| `getTrimOffset(id)` | Get trim offset of media content | `id: DesignBlockId` | `number` |
|
|
622
|
+
| `getTrimLength(id)` | Get trim length of media content | `id: DesignBlockId` | `number` |
|
|
623
|
+
| `supportsTrim(id)` | Check if block supports trim properties | `id: DesignBlockId` | `boolean` |
|
|
624
|
+
| `forceLoadAVResource(id)` | Force load media resource metadata | `id: DesignBlockId` | `Promise<void>` |
|
|
625
|
+
| `destroy(id)` | Destroy a block | `id: DesignBlockId` | `void` |
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
## More Resources
|
|
630
|
+
|
|
631
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
632
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
633
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
634
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|