@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,546 @@
|
|
|
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:** [Concepts](./concepts.md) > [Buffers](./concepts/buffers.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Store and manage temporary binary data directly in memory using CE.SDK's buffer API for dynamically generated content.
|
|
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-concepts-buffers-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-concepts-buffers-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-concepts-buffers-browser/)
|
|
19
|
+
|
|
20
|
+
Buffers are in-memory containers for binary data referenced via `buffer://` URIs. Unlike external files that require network or file I/O, buffers exist only during the current session and are not serialized when saving scenes. This makes them ideal for procedural audio, real-time image data, or streaming content that doesn't need to persist beyond the current editing session.
|
|
21
|
+
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-concepts-buffers-browser/browser.ts reference-only
|
|
23
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
BlurAssetSource,
|
|
27
|
+
CaptionPresetsAssetSource,
|
|
28
|
+
ColorPaletteAssetSource,
|
|
29
|
+
CropPresetsAssetSource,
|
|
30
|
+
DemoAssetSources,
|
|
31
|
+
EffectsAssetSource,
|
|
32
|
+
FiltersAssetSource,
|
|
33
|
+
PagePresetsAssetSource,
|
|
34
|
+
StickerAssetSource,
|
|
35
|
+
TextAssetSource,
|
|
36
|
+
TextComponentAssetSource,
|
|
37
|
+
TypefaceAssetSource,
|
|
38
|
+
UploadAssetSources,
|
|
39
|
+
VectorShapeAssetSource
|
|
40
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
41
|
+
import { VideoEditorConfig } from './video-editor/plugin';
|
|
42
|
+
import packageJson from './package.json';
|
|
43
|
+
|
|
44
|
+
// Helper function to create a WAV file from audio samples
|
|
45
|
+
function createWavFile(
|
|
46
|
+
samples: Float32Array,
|
|
47
|
+
sampleRate: number,
|
|
48
|
+
numChannels: number
|
|
49
|
+
): Uint8Array {
|
|
50
|
+
const bytesPerSample = 2; // 16-bit audio
|
|
51
|
+
const blockAlign = numChannels * bytesPerSample;
|
|
52
|
+
const byteRate = sampleRate * blockAlign;
|
|
53
|
+
const dataSize = samples.length * bytesPerSample;
|
|
54
|
+
const fileSize = 44 + dataSize; // WAV header is 44 bytes
|
|
55
|
+
|
|
56
|
+
const buffer = new ArrayBuffer(fileSize);
|
|
57
|
+
const view = new DataView(buffer);
|
|
58
|
+
|
|
59
|
+
// Write WAV header
|
|
60
|
+
// "RIFF" chunk descriptor
|
|
61
|
+
writeString(view, 0, 'RIFF');
|
|
62
|
+
view.setUint32(4, fileSize - 8, true); // File size minus RIFF header
|
|
63
|
+
writeString(view, 8, 'WAVE');
|
|
64
|
+
|
|
65
|
+
// "fmt " sub-chunk
|
|
66
|
+
writeString(view, 12, 'fmt ');
|
|
67
|
+
view.setUint32(16, 16, true); // Subchunk1Size (16 for PCM)
|
|
68
|
+
view.setUint16(20, 1, true); // AudioFormat (1 = PCM)
|
|
69
|
+
view.setUint16(22, numChannels, true); // NumChannels
|
|
70
|
+
view.setUint32(24, sampleRate, true); // SampleRate
|
|
71
|
+
view.setUint32(28, byteRate, true); // ByteRate
|
|
72
|
+
view.setUint16(32, blockAlign, true); // BlockAlign
|
|
73
|
+
view.setUint16(34, bytesPerSample * 8, true); // BitsPerSample
|
|
74
|
+
|
|
75
|
+
// "data" sub-chunk
|
|
76
|
+
writeString(view, 36, 'data');
|
|
77
|
+
view.setUint32(40, dataSize, true); // Subchunk2Size
|
|
78
|
+
|
|
79
|
+
// Write audio samples as 16-bit PCM
|
|
80
|
+
let offset = 44;
|
|
81
|
+
for (let i = 0; i < samples.length; i++) {
|
|
82
|
+
// Convert float (-1 to 1) to 16-bit integer
|
|
83
|
+
const sample = Math.max(-1, Math.min(1, samples[i]));
|
|
84
|
+
const intSample = sample < 0 ? sample * 0x8000 : sample * 0x7fff;
|
|
85
|
+
view.setInt16(offset, intSample, true);
|
|
86
|
+
offset += 2;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return new Uint8Array(buffer);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function writeString(view: DataView, offset: number, str: string): void {
|
|
93
|
+
for (let i = 0; i < str.length; i++) {
|
|
94
|
+
view.setUint8(offset + i, str.charCodeAt(i));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
class Example implements EditorPlugin {
|
|
99
|
+
name = packageJson.name;
|
|
100
|
+
version = packageJson.version;
|
|
101
|
+
|
|
102
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
103
|
+
if (!cesdk) {
|
|
104
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
105
|
+
}
|
|
106
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
107
|
+
|
|
108
|
+
// Add asset source plugins
|
|
109
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
110
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
111
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
112
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
113
|
+
await cesdk.addPlugin(
|
|
114
|
+
new UploadAssetSources({
|
|
115
|
+
include: [
|
|
116
|
+
'ly.img.image.upload',
|
|
117
|
+
'ly.img.video.upload',
|
|
118
|
+
'ly.img.audio.upload'
|
|
119
|
+
]
|
|
120
|
+
})
|
|
121
|
+
);
|
|
122
|
+
await cesdk.addPlugin(
|
|
123
|
+
new DemoAssetSources({
|
|
124
|
+
include: [
|
|
125
|
+
'ly.img.templates.video.*',
|
|
126
|
+
'ly.img.image.*',
|
|
127
|
+
'ly.img.audio.*',
|
|
128
|
+
'ly.img.video.*'
|
|
129
|
+
]
|
|
130
|
+
})
|
|
131
|
+
);
|
|
132
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
133
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
134
|
+
await cesdk.addPlugin(
|
|
135
|
+
new PagePresetsAssetSource({
|
|
136
|
+
include: [
|
|
137
|
+
'ly.img.page.presets.instagram.*',
|
|
138
|
+
'ly.img.page.presets.facebook.*',
|
|
139
|
+
'ly.img.page.presets.x.*',
|
|
140
|
+
'ly.img.page.presets.linkedin.*',
|
|
141
|
+
'ly.img.page.presets.pinterest.*',
|
|
142
|
+
'ly.img.page.presets.tiktok.*',
|
|
143
|
+
'ly.img.page.presets.youtube.*',
|
|
144
|
+
'ly.img.page.presets.video.*'
|
|
145
|
+
]
|
|
146
|
+
})
|
|
147
|
+
);
|
|
148
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
149
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
150
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
151
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
152
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
153
|
+
|
|
154
|
+
await cesdk.actions.run('scene.create', {
|
|
155
|
+
page: {
|
|
156
|
+
sourceId: 'ly.img.page.presets',
|
|
157
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
158
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
const engine = cesdk.engine;
|
|
163
|
+
|
|
164
|
+
// Get the page (first container in video scenes)
|
|
165
|
+
const pages = engine.block.findByType('page');
|
|
166
|
+
const page = pages[0];
|
|
167
|
+
|
|
168
|
+
// Add a centered text block to explain the example
|
|
169
|
+
const textBlock = engine.block.create('text');
|
|
170
|
+
engine.block.setString(
|
|
171
|
+
textBlock,
|
|
172
|
+
'text/text',
|
|
173
|
+
'The audio track in this scene lives in a buffer.'
|
|
174
|
+
);
|
|
175
|
+
engine.block.setFloat(textBlock, 'text/fontSize', 108);
|
|
176
|
+
engine.block.setEnum(textBlock, 'text/horizontalAlignment', 'Center');
|
|
177
|
+
engine.block.setHeightMode(textBlock, 'Auto');
|
|
178
|
+
|
|
179
|
+
// Set text color to white
|
|
180
|
+
engine.block.setColor(textBlock, 'fill/solid/color', {
|
|
181
|
+
r: 1,
|
|
182
|
+
g: 1,
|
|
183
|
+
b: 1,
|
|
184
|
+
a: 1
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Get page dimensions and position with 10% horizontal margin
|
|
188
|
+
const pageWidth = engine.block.getWidth(page);
|
|
189
|
+
const pageHeight = engine.block.getHeight(page);
|
|
190
|
+
const horizontalMargin = pageWidth * 0.1;
|
|
191
|
+
const textWidth = pageWidth - horizontalMargin * 2;
|
|
192
|
+
engine.block.setWidth(textBlock, textWidth);
|
|
193
|
+
engine.block.setPositionX(textBlock, horizontalMargin);
|
|
194
|
+
|
|
195
|
+
// Append to page first so layout can be computed
|
|
196
|
+
engine.block.appendChild(page, textBlock);
|
|
197
|
+
|
|
198
|
+
// Force layout computation and get the actual frame height
|
|
199
|
+
const textHeight = engine.block.getFrameHeight(textBlock);
|
|
200
|
+
engine.block.setPositionY(textBlock, (pageHeight - textHeight) / 2);
|
|
201
|
+
|
|
202
|
+
// Set duration to match the scene
|
|
203
|
+
engine.block.setDuration(textBlock, 2);
|
|
204
|
+
|
|
205
|
+
// Create a buffer and get its URI
|
|
206
|
+
const bufferUri = engine.editor.createBuffer();
|
|
207
|
+
console.log('Buffer URI:', bufferUri);
|
|
208
|
+
|
|
209
|
+
// Generate sine wave audio samples
|
|
210
|
+
const sampleRate = 44100;
|
|
211
|
+
const duration = 2; // 2 seconds
|
|
212
|
+
const frequency = 440; // A4 note
|
|
213
|
+
const numChannels = 2; // Stereo
|
|
214
|
+
|
|
215
|
+
// Create Float32Array for audio samples (interleaved stereo)
|
|
216
|
+
const numSamples = sampleRate * duration * numChannels;
|
|
217
|
+
const samples = new Float32Array(numSamples);
|
|
218
|
+
|
|
219
|
+
// Generate a 440 Hz sine wave
|
|
220
|
+
for (let i = 0; i < numSamples; i += numChannels) {
|
|
221
|
+
const sampleIndex = i / numChannels;
|
|
222
|
+
const time = sampleIndex / sampleRate;
|
|
223
|
+
const value = Math.sin(2 * Math.PI * frequency * time) * 0.5; // 50% amplitude
|
|
224
|
+
|
|
225
|
+
// Write to both left and right channels
|
|
226
|
+
samples[i] = value; // Left channel
|
|
227
|
+
samples[i + 1] = value; // Right channel
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Convert samples to WAV format and write to buffer
|
|
231
|
+
const wavData = createWavFile(samples, sampleRate, numChannels);
|
|
232
|
+
engine.editor.setBufferData(bufferUri, 0, wavData);
|
|
233
|
+
|
|
234
|
+
// Verify the buffer length
|
|
235
|
+
const bufferLength = engine.editor.getBufferLength(bufferUri);
|
|
236
|
+
console.log('Buffer length:', bufferLength, 'bytes');
|
|
237
|
+
|
|
238
|
+
// Create an audio block
|
|
239
|
+
const audioBlock = engine.block.create('audio');
|
|
240
|
+
|
|
241
|
+
// Assign the buffer URI to the audio block
|
|
242
|
+
engine.block.setString(audioBlock, 'audio/fileURI', bufferUri);
|
|
243
|
+
|
|
244
|
+
// Set audio duration to match the generated samples
|
|
245
|
+
engine.block.setDuration(audioBlock, duration);
|
|
246
|
+
|
|
247
|
+
// Append the audio block to the page
|
|
248
|
+
engine.block.appendChild(page, audioBlock);
|
|
249
|
+
|
|
250
|
+
// Demonstrate reading buffer data back
|
|
251
|
+
const readData = engine.editor.getBufferData(bufferUri, 0, 100);
|
|
252
|
+
console.log('First 100 bytes of buffer data:', readData);
|
|
253
|
+
|
|
254
|
+
// Demonstrate resizing a buffer with a separate demo buffer
|
|
255
|
+
const demoBuffer = engine.editor.createBuffer();
|
|
256
|
+
engine.editor.setBufferData(
|
|
257
|
+
demoBuffer,
|
|
258
|
+
0,
|
|
259
|
+
new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8])
|
|
260
|
+
);
|
|
261
|
+
|
|
262
|
+
const demoLength = engine.editor.getBufferLength(demoBuffer);
|
|
263
|
+
console.log('Demo buffer length before resize:', demoLength);
|
|
264
|
+
|
|
265
|
+
engine.editor.setBufferLength(demoBuffer, demoLength / 2);
|
|
266
|
+
console.log(
|
|
267
|
+
'Demo buffer length after resize:',
|
|
268
|
+
engine.editor.getBufferLength(demoBuffer)
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
engine.editor.destroyBuffer(demoBuffer);
|
|
272
|
+
|
|
273
|
+
// Find all transient resources (including our buffer)
|
|
274
|
+
const transientResources = engine.editor.findAllTransientResources();
|
|
275
|
+
console.log('Transient resources in scene:');
|
|
276
|
+
for (const resource of transientResources) {
|
|
277
|
+
console.log(` URL: ${resource.URL}, Size: ${resource.size} bytes`);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Demonstrate persisting buffer data using a Blob URL
|
|
281
|
+
// In production, you would upload to CDN/cloud storage instead
|
|
282
|
+
const bufferData = engine.editor.getBufferData(bufferUri, 0, bufferLength);
|
|
283
|
+
const blob = new Blob([new Uint8Array(bufferData)], { type: 'audio/wav' });
|
|
284
|
+
const persistentUrl = URL.createObjectURL(blob);
|
|
285
|
+
|
|
286
|
+
// Update all references from buffer:// to the new URL
|
|
287
|
+
engine.editor.relocateResource(bufferUri, persistentUrl);
|
|
288
|
+
console.log('Buffer relocated to:', persistentUrl);
|
|
289
|
+
|
|
290
|
+
console.log('Buffers example loaded successfully');
|
|
291
|
+
console.log(
|
|
292
|
+
'Note: Audio playback requires user interaction in most browsers'
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export default Example;
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
This guide covers how to create and manage buffers, write and read binary data, assign buffers to block properties like audio sources, and handle transient resources when saving scenes.
|
|
301
|
+
|
|
302
|
+
## Setting Up the Scene
|
|
303
|
+
|
|
304
|
+
We first create a scene and set up a page for our audio composition.
|
|
305
|
+
|
|
306
|
+
```typescript highlight-create-video-scene
|
|
307
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
308
|
+
|
|
309
|
+
// Add asset source plugins
|
|
310
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
311
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
312
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
313
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
314
|
+
await cesdk.addPlugin(
|
|
315
|
+
new UploadAssetSources({
|
|
316
|
+
include: [
|
|
317
|
+
'ly.img.image.upload',
|
|
318
|
+
'ly.img.video.upload',
|
|
319
|
+
'ly.img.audio.upload'
|
|
320
|
+
]
|
|
321
|
+
})
|
|
322
|
+
);
|
|
323
|
+
await cesdk.addPlugin(
|
|
324
|
+
new DemoAssetSources({
|
|
325
|
+
include: [
|
|
326
|
+
'ly.img.templates.video.*',
|
|
327
|
+
'ly.img.image.*',
|
|
328
|
+
'ly.img.audio.*',
|
|
329
|
+
'ly.img.video.*'
|
|
330
|
+
]
|
|
331
|
+
})
|
|
332
|
+
);
|
|
333
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
334
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
335
|
+
await cesdk.addPlugin(
|
|
336
|
+
new PagePresetsAssetSource({
|
|
337
|
+
include: [
|
|
338
|
+
'ly.img.page.presets.instagram.*',
|
|
339
|
+
'ly.img.page.presets.facebook.*',
|
|
340
|
+
'ly.img.page.presets.x.*',
|
|
341
|
+
'ly.img.page.presets.linkedin.*',
|
|
342
|
+
'ly.img.page.presets.pinterest.*',
|
|
343
|
+
'ly.img.page.presets.tiktok.*',
|
|
344
|
+
'ly.img.page.presets.youtube.*',
|
|
345
|
+
'ly.img.page.presets.video.*'
|
|
346
|
+
]
|
|
347
|
+
})
|
|
348
|
+
);
|
|
349
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
350
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
351
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
352
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
353
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
354
|
+
|
|
355
|
+
await cesdk.actions.run('scene.create', {
|
|
356
|
+
page: {
|
|
357
|
+
sourceId: 'ly.img.page.presets',
|
|
358
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
359
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Creating and Managing Buffers
|
|
365
|
+
|
|
366
|
+
We use `engine.editor.createBuffer()` to allocate a new buffer and receive its URI. This URI follows the `buffer://` scheme and uniquely identifies the buffer within the engine instance.
|
|
367
|
+
|
|
368
|
+
```typescript highlight-create-buffer
|
|
369
|
+
// Create a buffer and get its URI
|
|
370
|
+
const bufferUri = engine.editor.createBuffer();
|
|
371
|
+
console.log('Buffer URI:', bufferUri);
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
Buffers persist in memory until you explicitly destroy them with `engine.editor.destroyBuffer()` or the engine instance is disposed. For large buffers or long editing sessions, you should destroy buffers when they're no longer needed to free memory.
|
|
375
|
+
|
|
376
|
+
## Writing Data to Buffers
|
|
377
|
+
|
|
378
|
+
To populate a buffer with binary data, we use `engine.editor.setBufferData()`. This method takes the buffer URI, an offset in bytes, and a `Uint8Array` containing the data to write.
|
|
379
|
+
|
|
380
|
+
In this example, we generate a 440 Hz sine wave as stereo PCM audio samples. We create a `Float32Array` for the sample values that will be converted to a valid audio format.
|
|
381
|
+
|
|
382
|
+
```typescript highlight-generate-samples
|
|
383
|
+
// Generate sine wave audio samples
|
|
384
|
+
const sampleRate = 44100;
|
|
385
|
+
const duration = 2; // 2 seconds
|
|
386
|
+
const frequency = 440; // A4 note
|
|
387
|
+
const numChannels = 2; // Stereo
|
|
388
|
+
|
|
389
|
+
// Create Float32Array for audio samples (interleaved stereo)
|
|
390
|
+
const numSamples = sampleRate * duration * numChannels;
|
|
391
|
+
const samples = new Float32Array(numSamples);
|
|
392
|
+
|
|
393
|
+
// Generate a 440 Hz sine wave
|
|
394
|
+
for (let i = 0; i < numSamples; i += numChannels) {
|
|
395
|
+
const sampleIndex = i / numChannels;
|
|
396
|
+
const time = sampleIndex / sampleRate;
|
|
397
|
+
const value = Math.sin(2 * Math.PI * frequency * time) * 0.5; // 50% amplitude
|
|
398
|
+
|
|
399
|
+
// Write to both left and right channels
|
|
400
|
+
samples[i] = value; // Left channel
|
|
401
|
+
samples[i + 1] = value; // Right channel
|
|
402
|
+
}
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
When using buffers for audio, the data must be in a recognized audio format like WAV. We convert the raw samples to a WAV file by adding the appropriate headers, then write the complete file to the buffer.
|
|
406
|
+
|
|
407
|
+
```typescript highlight-write-buffer
|
|
408
|
+
// Convert samples to WAV format and write to buffer
|
|
409
|
+
const wavData = createWavFile(samples, sampleRate, numChannels);
|
|
410
|
+
engine.editor.setBufferData(bufferUri, 0, wavData);
|
|
411
|
+
|
|
412
|
+
// Verify the buffer length
|
|
413
|
+
const bufferLength = engine.editor.getBufferLength(bufferUri);
|
|
414
|
+
console.log('Buffer length:', bufferLength, 'bytes');
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
## Reading Data from Buffers
|
|
418
|
+
|
|
419
|
+
To read data back from a buffer, we use `engine.editor.getBufferData()` with the buffer URI, a starting offset, and the number of bytes to read. We first query the buffer length with `engine.editor.getBufferLength()` to determine how much data is available.
|
|
420
|
+
|
|
421
|
+
```typescript highlight-read-buffer
|
|
422
|
+
// Demonstrate reading buffer data back
|
|
423
|
+
const readData = engine.editor.getBufferData(bufferUri, 0, 100);
|
|
424
|
+
console.log('First 100 bytes of buffer data:', readData);
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
This returns a `Uint8Array` that you can convert back to other typed arrays as needed. Partial reads are supported—you can read any range within the buffer bounds.
|
|
428
|
+
|
|
429
|
+
## Resizing Buffers
|
|
430
|
+
|
|
431
|
+
You can change a buffer's size at any time with `engine.editor.setBufferLength()`. Increasing the size allocates additional space, while decreasing it truncates the data. Here we demonstrate resizing with a separate demo buffer to avoid truncating our audio data.
|
|
432
|
+
|
|
433
|
+
```typescript highlight-resize-buffer
|
|
434
|
+
// Demonstrate resizing a buffer with a separate demo buffer
|
|
435
|
+
const demoBuffer = engine.editor.createBuffer();
|
|
436
|
+
engine.editor.setBufferData(
|
|
437
|
+
demoBuffer,
|
|
438
|
+
0,
|
|
439
|
+
new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8])
|
|
440
|
+
);
|
|
441
|
+
|
|
442
|
+
const demoLength = engine.editor.getBufferLength(demoBuffer);
|
|
443
|
+
console.log('Demo buffer length before resize:', demoLength);
|
|
444
|
+
|
|
445
|
+
engine.editor.setBufferLength(demoBuffer, demoLength / 2);
|
|
446
|
+
console.log(
|
|
447
|
+
'Demo buffer length after resize:',
|
|
448
|
+
engine.editor.getBufferLength(demoBuffer)
|
|
449
|
+
);
|
|
450
|
+
|
|
451
|
+
engine.editor.destroyBuffer(demoBuffer);
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
Keep in mind that truncating a buffer permanently discards data beyond the new length. Always query the current length first if you need to preserve the original size, or create a copy before resizing.
|
|
455
|
+
|
|
456
|
+
## Assigning Buffers to Blocks
|
|
457
|
+
|
|
458
|
+
Buffer URIs work like any other resource URI in CE.SDK. We assign them to block properties using `engine.block.setString()`. For audio blocks, we set the `audio/fileURI` property.
|
|
459
|
+
|
|
460
|
+
```typescript highlight-create-audio-block
|
|
461
|
+
// Create an audio block
|
|
462
|
+
const audioBlock = engine.block.create('audio');
|
|
463
|
+
|
|
464
|
+
// Assign the buffer URI to the audio block
|
|
465
|
+
engine.block.setString(audioBlock, 'audio/fileURI', bufferUri);
|
|
466
|
+
|
|
467
|
+
// Set audio duration to match the generated samples
|
|
468
|
+
engine.block.setDuration(audioBlock, duration);
|
|
469
|
+
|
|
470
|
+
// Append the audio block to the page
|
|
471
|
+
engine.block.appendChild(page, audioBlock);
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
The same approach works for other resource properties:
|
|
475
|
+
|
|
476
|
+
- **Audio blocks**: `audio/fileURI`
|
|
477
|
+
- **Image fills**: `fill/image/imageFileURI`
|
|
478
|
+
- **Video fills**: `fill/video/fileURI`
|
|
479
|
+
|
|
480
|
+
Any property that accepts a URI can reference a buffer.
|
|
481
|
+
|
|
482
|
+
## Transient Resources and Scene Serialization
|
|
483
|
+
|
|
484
|
+
Buffers are transient resources—the URI gets serialized when you save a scene, but the actual binary data does not persist. This means a saved scene will contain references to `buffer://` URIs that won't resolve when the scene is loaded again.
|
|
485
|
+
|
|
486
|
+
We use `engine.editor.findAllTransientResources()` to discover all transient resources in the current scene, including buffers. Each resource includes its URL and size in bytes.
|
|
487
|
+
|
|
488
|
+
```typescript highlight-find-transient
|
|
489
|
+
// Find all transient resources (including our buffer)
|
|
490
|
+
const transientResources = engine.editor.findAllTransientResources();
|
|
491
|
+
console.log('Transient resources in scene:');
|
|
492
|
+
for (const resource of transientResources) {
|
|
493
|
+
console.log(` URL: ${resource.URL}, Size: ${resource.size} bytes`);
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
> **Note:** **Limitations**Buffers are intended for temporary data only.\* Buffer data is not part of scene serialization
|
|
498
|
+
>
|
|
499
|
+
> - Changes to buffers can't be undone using the history system
|
|
500
|
+
|
|
501
|
+
Note that `engine.scene.saveToString()` does NOT include `buffer://` in its default allowed resource schemes, while `engine.block.saveToString()` does include it. You may need to configure the allowed schemes depending on your serialization needs.
|
|
502
|
+
|
|
503
|
+
## Persisting Buffer Data
|
|
504
|
+
|
|
505
|
+
To permanently save buffer content, you must extract the data, upload it to persistent storage, then update the block references to point to the new URL. This example demonstrates the pattern using a Blob URL—in production, you would upload to a CDN or cloud storage instead.
|
|
506
|
+
|
|
507
|
+
```typescript highlight-persist-buffer
|
|
508
|
+
// Demonstrate persisting buffer data using a Blob URL
|
|
509
|
+
// In production, you would upload to CDN/cloud storage instead
|
|
510
|
+
const bufferData = engine.editor.getBufferData(bufferUri, 0, bufferLength);
|
|
511
|
+
const blob = new Blob([new Uint8Array(bufferData)], { type: 'audio/wav' });
|
|
512
|
+
const persistentUrl = URL.createObjectURL(blob);
|
|
513
|
+
|
|
514
|
+
// Update all references from buffer:// to the new URL
|
|
515
|
+
engine.editor.relocateResource(bufferUri, persistentUrl);
|
|
516
|
+
console.log('Buffer relocated to:', persistentUrl);
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
We read the buffer data, create a persistent URL from it, then use `engine.editor.relocateResource()` to update all references to the old buffer URI throughout the scene. After relocation, you can save the scene and the new persistent URLs will be serialized.
|
|
520
|
+
|
|
521
|
+
## Troubleshooting
|
|
522
|
+
|
|
523
|
+
**Buffer data not appearing in exported scene**
|
|
524
|
+
|
|
525
|
+
Buffers are transient and don't persist with scene saves. Use `findAllTransientResources()` to identify buffers, then relocate them to persistent storage before exporting.
|
|
526
|
+
|
|
527
|
+
**Memory usage growing unexpectedly**
|
|
528
|
+
|
|
529
|
+
Call `engine.editor.destroyBuffer()` when buffers are no longer needed. Unlike external resources that can be garbage collected, buffers remain in memory until explicitly destroyed.
|
|
530
|
+
|
|
531
|
+
**Data corruption when writing**
|
|
532
|
+
|
|
533
|
+
Ensure the offset plus data length doesn't exceed the intended buffer bounds. Resize the buffer first with `setBufferLength()` if you need more space.
|
|
534
|
+
|
|
535
|
+
**Buffer URI not recognized by block**
|
|
536
|
+
|
|
537
|
+
Verify the buffer was created in the same engine instance. Buffer URIs are not portable between different engine instances or sessions.
|
|
538
|
+
|
|
539
|
+
---
|
|
540
|
+
|
|
541
|
+
## More Resources
|
|
542
|
+
|
|
543
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
544
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
545
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
546
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|