@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,664 @@
|
|
|
1
|
+
> This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
|
|
2
|
+
|
|
3
|
+
**Navigation:** [Guides](./guides.md) > [Create and Edit Audio](./create-audio/audio.md) > [Add Sound Effects](./create-audio/audio/add-sound-effects.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Generate sound effects programmatically using buffers with arbitrary audio data. Create notification chimes, alert tones, and melodies without external files.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
> **Reading time:** 10 minutes
|
|
12
|
+
>
|
|
13
|
+
> **Resources:**
|
|
14
|
+
>
|
|
15
|
+
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
16
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-create-audio-add-sound-effects-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-audio-add-sound-effects-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-audio-add-sound-effects-browser/)
|
|
19
|
+
|
|
20
|
+
CE.SDK lets you create audio from code using buffers. This approach generates sound effects dynamically without external files—useful for notification tones, procedural audio, or any scenario where you need to synthesize audio at runtime.
|
|
21
|
+
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-create-audio-add-sound-effects-browser/browser.ts reference-only
|
|
23
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
24
|
+
import {
|
|
25
|
+
BlurAssetSource,
|
|
26
|
+
CaptionPresetsAssetSource,
|
|
27
|
+
ColorPaletteAssetSource,
|
|
28
|
+
CropPresetsAssetSource,
|
|
29
|
+
DemoAssetSources,
|
|
30
|
+
EffectsAssetSource,
|
|
31
|
+
FiltersAssetSource,
|
|
32
|
+
PagePresetsAssetSource,
|
|
33
|
+
StickerAssetSource,
|
|
34
|
+
TextAssetSource,
|
|
35
|
+
TextComponentAssetSource,
|
|
36
|
+
TypefaceAssetSource,
|
|
37
|
+
UploadAssetSources,
|
|
38
|
+
VectorShapeAssetSource
|
|
39
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
40
|
+
import { VideoEditorConfig } from './video-editor/plugin';
|
|
41
|
+
import packageJson from './package.json';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Creates a WAV file buffer from audio parameters and a sample generator function.
|
|
45
|
+
*
|
|
46
|
+
* @param sampleRate - Sample rate in Hz (e.g., 48000)
|
|
47
|
+
* @param durationSeconds - Duration of the audio in seconds
|
|
48
|
+
* @param generator - Function that generates sample values (-1.0 to 1.0) for each time point
|
|
49
|
+
* @returns Uint8Array containing a stereo WAV file
|
|
50
|
+
*/
|
|
51
|
+
function createWavBuffer(
|
|
52
|
+
sampleRate: number,
|
|
53
|
+
durationSeconds: number,
|
|
54
|
+
/* eslint-disable-next-line no-unused-vars -- Parameter name documents callback signature */
|
|
55
|
+
generator: (time: number) => number
|
|
56
|
+
): Uint8Array {
|
|
57
|
+
const bitsPerSample = 16;
|
|
58
|
+
const channels = 2; // Stereo output
|
|
59
|
+
const numSamples = Math.floor(durationSeconds * sampleRate);
|
|
60
|
+
const dataSize = numSamples * channels * (bitsPerSample / 8);
|
|
61
|
+
|
|
62
|
+
// Create WAV file buffer (44-byte header + audio data)
|
|
63
|
+
const wavBuffer = new ArrayBuffer(44 + dataSize);
|
|
64
|
+
const view = new DataView(wavBuffer);
|
|
65
|
+
|
|
66
|
+
// RIFF chunk descriptor
|
|
67
|
+
view.setUint32(0, 0x52494646, false); // "RIFF"
|
|
68
|
+
view.setUint32(4, 36 + dataSize, true); // File size - 8
|
|
69
|
+
view.setUint32(8, 0x57415645, false); // "WAVE"
|
|
70
|
+
|
|
71
|
+
// fmt sub-chunk
|
|
72
|
+
view.setUint32(12, 0x666d7420, false); // "fmt "
|
|
73
|
+
view.setUint32(16, 16, true); // Sub-chunk size (16 for PCM)
|
|
74
|
+
view.setUint16(20, 1, true); // Audio format (1 = PCM)
|
|
75
|
+
view.setUint16(22, channels, true); // Number of channels
|
|
76
|
+
view.setUint32(24, sampleRate, true); // Sample rate
|
|
77
|
+
view.setUint32(28, sampleRate * channels * (bitsPerSample / 8), true);
|
|
78
|
+
view.setUint16(32, channels * (bitsPerSample / 8), true); // Block align
|
|
79
|
+
view.setUint16(34, bitsPerSample, true); // Bits per sample
|
|
80
|
+
|
|
81
|
+
// data sub-chunk
|
|
82
|
+
view.setUint32(36, 0x64617461, false); // "data"
|
|
83
|
+
view.setUint32(40, dataSize, true); // Data size
|
|
84
|
+
|
|
85
|
+
// Generate audio samples
|
|
86
|
+
let offset = 44;
|
|
87
|
+
for (let i = 0; i < numSamples; i++) {
|
|
88
|
+
const time = i / sampleRate;
|
|
89
|
+
// Generate mono sample and duplicate to both channels
|
|
90
|
+
const value = generator(time);
|
|
91
|
+
const sample = Math.max(-32768, Math.min(32767, Math.round(value * 32767)));
|
|
92
|
+
view.setInt16(offset, sample, true); // Left channel
|
|
93
|
+
view.setInt16(offset + 2, sample, true); // Right channel
|
|
94
|
+
offset += 4;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return new Uint8Array(wavBuffer);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Calculates an ADSR (Attack-Decay-Sustain-Release) envelope value for a note.
|
|
102
|
+
* The envelope shapes the volume over time, creating natural-sounding tones.
|
|
103
|
+
*
|
|
104
|
+
* @param time - Current time in seconds
|
|
105
|
+
* @param noteStart - When the note starts (seconds)
|
|
106
|
+
* @param noteDuration - Total note duration including release (seconds)
|
|
107
|
+
* @param attack - Time to reach peak volume (seconds)
|
|
108
|
+
* @param decay - Time to fall from peak to sustain level (seconds)
|
|
109
|
+
* @param sustain - Held volume level (0.0 to 1.0)
|
|
110
|
+
* @param release - Time to fade to silence (seconds)
|
|
111
|
+
* @returns Envelope amplitude (0.0 to 1.0)
|
|
112
|
+
*/
|
|
113
|
+
function adsr(
|
|
114
|
+
time: number,
|
|
115
|
+
noteStart: number,
|
|
116
|
+
noteDuration: number,
|
|
117
|
+
attack: number,
|
|
118
|
+
decay: number,
|
|
119
|
+
sustain: number,
|
|
120
|
+
release: number
|
|
121
|
+
): number {
|
|
122
|
+
const t = time - noteStart;
|
|
123
|
+
if (t < 0) return 0;
|
|
124
|
+
|
|
125
|
+
const noteEnd = noteDuration - release;
|
|
126
|
+
|
|
127
|
+
if (t < attack) {
|
|
128
|
+
// Attack phase: ramp up from 0 to 1
|
|
129
|
+
return t / attack;
|
|
130
|
+
} else if (t < attack + decay) {
|
|
131
|
+
// Decay phase: ramp down from 1 to sustain level
|
|
132
|
+
return 1 - ((t - attack) / decay) * (1 - sustain);
|
|
133
|
+
} else if (t < noteEnd) {
|
|
134
|
+
// Sustain phase: hold at sustain level
|
|
135
|
+
return sustain;
|
|
136
|
+
} else if (t < noteDuration) {
|
|
137
|
+
// Release phase: ramp down from sustain to 0
|
|
138
|
+
return sustain * (1 - (t - noteEnd) / release);
|
|
139
|
+
}
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Musical note frequencies (Hz) for the 4th and 5th octaves
|
|
144
|
+
const NOTE_FREQUENCIES = {
|
|
145
|
+
C4: 261.63,
|
|
146
|
+
D4: 293.66,
|
|
147
|
+
E4: 329.63,
|
|
148
|
+
F4: 349.23,
|
|
149
|
+
G4: 392.0,
|
|
150
|
+
A4: 440.0,
|
|
151
|
+
B4: 493.88,
|
|
152
|
+
C5: 523.25,
|
|
153
|
+
D5: 587.33,
|
|
154
|
+
E5: 659.25,
|
|
155
|
+
F5: 698.46,
|
|
156
|
+
G5: 783.99,
|
|
157
|
+
A5: 880.0,
|
|
158
|
+
B5: 987.77,
|
|
159
|
+
C6: 1046.5
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
// Sound effect 1: Ascending "success" fanfare (2 seconds)
|
|
163
|
+
// Creates a triumphant feeling with overlapping notes building to a chord
|
|
164
|
+
const SUCCESS_CHIME = {
|
|
165
|
+
notes: [
|
|
166
|
+
// Quick ascending arpeggio
|
|
167
|
+
{ freq: NOTE_FREQUENCIES.C4, start: 0.0, duration: 0.3 },
|
|
168
|
+
{ freq: NOTE_FREQUENCIES.E4, start: 0.1, duration: 0.4 },
|
|
169
|
+
{ freq: NOTE_FREQUENCIES.G4, start: 0.2, duration: 0.5 },
|
|
170
|
+
// Sustained major chord
|
|
171
|
+
{ freq: NOTE_FREQUENCIES.C5, start: 0.35, duration: 1.65 },
|
|
172
|
+
{ freq: NOTE_FREQUENCIES.E5, start: 0.4, duration: 1.6 },
|
|
173
|
+
{ freq: NOTE_FREQUENCIES.G5, start: 0.45, duration: 1.55 }
|
|
174
|
+
],
|
|
175
|
+
totalDuration: 2.0
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// Sound effect 2: Gentle notification melody (2 seconds)
|
|
179
|
+
// A musical phrase that resolves pleasantly
|
|
180
|
+
const NOTIFICATION_MELODY = {
|
|
181
|
+
notes: [
|
|
182
|
+
{ freq: NOTE_FREQUENCIES.E5, start: 0.0, duration: 0.4 },
|
|
183
|
+
{ freq: NOTE_FREQUENCIES.G5, start: 0.25, duration: 0.5 },
|
|
184
|
+
{ freq: NOTE_FREQUENCIES.A5, start: 0.6, duration: 0.3 },
|
|
185
|
+
{ freq: NOTE_FREQUENCIES.G5, start: 0.85, duration: 0.4 },
|
|
186
|
+
{ freq: NOTE_FREQUENCIES.E5, start: 1.15, duration: 0.85 }
|
|
187
|
+
],
|
|
188
|
+
totalDuration: 2.0
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
// Sound effect 3: Alert/warning tone (2 seconds)
|
|
192
|
+
// Descending pattern that grabs attention
|
|
193
|
+
const ALERT_TONE = {
|
|
194
|
+
notes: [
|
|
195
|
+
// Attention-grabbing high notes
|
|
196
|
+
{ freq: NOTE_FREQUENCIES.A5, start: 0.0, duration: 0.25 },
|
|
197
|
+
{ freq: NOTE_FREQUENCIES.A5, start: 0.3, duration: 0.25 },
|
|
198
|
+
// Descending resolution
|
|
199
|
+
{ freq: NOTE_FREQUENCIES.F5, start: 0.6, duration: 0.4 },
|
|
200
|
+
{ freq: NOTE_FREQUENCIES.D5, start: 0.9, duration: 0.5 },
|
|
201
|
+
{ freq: NOTE_FREQUENCIES.A4, start: 1.3, duration: 0.7 }
|
|
202
|
+
],
|
|
203
|
+
totalDuration: 2.0
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* CE.SDK Plugin: Add Sound Effects Guide
|
|
208
|
+
*
|
|
209
|
+
* This example demonstrates:
|
|
210
|
+
* - Creating audio buffers with arbitrary data
|
|
211
|
+
* - Generating sound effects programmatically (chimes, notifications)
|
|
212
|
+
* - Using WAV format for in-memory audio
|
|
213
|
+
* - Positioning sound effects on the timeline
|
|
214
|
+
*/
|
|
215
|
+
class Example implements EditorPlugin {
|
|
216
|
+
name = packageJson.name;
|
|
217
|
+
|
|
218
|
+
version = packageJson.version;
|
|
219
|
+
|
|
220
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
221
|
+
if (!cesdk) {
|
|
222
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
226
|
+
// Add asset source plugins
|
|
227
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
228
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
229
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
230
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
231
|
+
await cesdk.addPlugin(
|
|
232
|
+
new UploadAssetSources({
|
|
233
|
+
include: [
|
|
234
|
+
'ly.img.image.upload',
|
|
235
|
+
'ly.img.video.upload',
|
|
236
|
+
'ly.img.audio.upload'
|
|
237
|
+
]
|
|
238
|
+
})
|
|
239
|
+
);
|
|
240
|
+
await cesdk.addPlugin(
|
|
241
|
+
new DemoAssetSources({
|
|
242
|
+
include: [
|
|
243
|
+
'ly.img.templates.video.*',
|
|
244
|
+
'ly.img.image.*',
|
|
245
|
+
'ly.img.audio.*',
|
|
246
|
+
'ly.img.video.*'
|
|
247
|
+
]
|
|
248
|
+
})
|
|
249
|
+
);
|
|
250
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
251
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
252
|
+
await cesdk.addPlugin(
|
|
253
|
+
new PagePresetsAssetSource({
|
|
254
|
+
include: [
|
|
255
|
+
'ly.img.page.presets.instagram.*',
|
|
256
|
+
'ly.img.page.presets.facebook.*',
|
|
257
|
+
'ly.img.page.presets.x.*',
|
|
258
|
+
'ly.img.page.presets.linkedin.*',
|
|
259
|
+
'ly.img.page.presets.pinterest.*',
|
|
260
|
+
'ly.img.page.presets.tiktok.*',
|
|
261
|
+
'ly.img.page.presets.youtube.*',
|
|
262
|
+
'ly.img.page.presets.video.*'
|
|
263
|
+
]
|
|
264
|
+
})
|
|
265
|
+
);
|
|
266
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
267
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
268
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
269
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
270
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
271
|
+
|
|
272
|
+
// Create a video scene (audio blocks require timeline support)
|
|
273
|
+
await cesdk.actions.run('scene.create', {
|
|
274
|
+
layout: 'DepthStack',
|
|
275
|
+
page: {
|
|
276
|
+
sourceId: 'ly.img.page.presets',
|
|
277
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
278
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
const engine = cesdk.engine;
|
|
283
|
+
|
|
284
|
+
// Get the page (timeline)
|
|
285
|
+
const pages = engine.block.findByType('page');
|
|
286
|
+
const page = pages[0];
|
|
287
|
+
if (!page) {
|
|
288
|
+
throw new Error('No page found');
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Calculate total duration: 3 effects × 2s + 2 gaps × 0.5s = 7s
|
|
292
|
+
const effectDuration = 2.0;
|
|
293
|
+
const gapDuration = 0.5;
|
|
294
|
+
const totalDuration = 3 * effectDuration + 2 * gapDuration; // 7 seconds
|
|
295
|
+
|
|
296
|
+
// Set page duration to match total effects length
|
|
297
|
+
engine.block.setDuration(page, totalDuration);
|
|
298
|
+
|
|
299
|
+
// Add a centered title text to the canvas
|
|
300
|
+
const text = engine.block.create('text');
|
|
301
|
+
engine.block.appendChild(page, text);
|
|
302
|
+
engine.block.replaceText(text, 'Sound Effects Demo');
|
|
303
|
+
engine.block.setTextColor(text, { r: 1, g: 1, b: 1, a: 1 });
|
|
304
|
+
engine.block.setFloat(text, 'text/fontSize', 48);
|
|
305
|
+
|
|
306
|
+
// Center the text on the canvas
|
|
307
|
+
const pageWidth = engine.block.getWidth(page);
|
|
308
|
+
const pageHeight = engine.block.getHeight(page);
|
|
309
|
+
engine.block.setWidth(text, pageWidth);
|
|
310
|
+
engine.block.setHeight(text, 70);
|
|
311
|
+
engine.block.setPositionX(text, 0);
|
|
312
|
+
engine.block.setPositionY(text, pageHeight / 2 - 35);
|
|
313
|
+
engine.block.setEnum(text, 'text/horizontalAlignment', 'Center');
|
|
314
|
+
|
|
315
|
+
// Make text visible for the entire duration
|
|
316
|
+
engine.block.setTimeOffset(text, 0);
|
|
317
|
+
engine.block.setDuration(text, totalDuration);
|
|
318
|
+
|
|
319
|
+
const sampleRate = 48000;
|
|
320
|
+
|
|
321
|
+
// Create the "success chime" sound effect
|
|
322
|
+
const chimeBuffer = engine.editor.createBuffer();
|
|
323
|
+
|
|
324
|
+
// Generate the chime using our helper function
|
|
325
|
+
const chimeWav = createWavBuffer(
|
|
326
|
+
sampleRate,
|
|
327
|
+
SUCCESS_CHIME.totalDuration,
|
|
328
|
+
(time) => {
|
|
329
|
+
let sample = 0;
|
|
330
|
+
|
|
331
|
+
// Mix all notes together
|
|
332
|
+
for (const note of SUCCESS_CHIME.notes) {
|
|
333
|
+
// Calculate envelope for this note
|
|
334
|
+
const envelope = adsr(
|
|
335
|
+
time,
|
|
336
|
+
note.start,
|
|
337
|
+
note.duration,
|
|
338
|
+
0.02, // Soft attack (20ms)
|
|
339
|
+
0.08, // Gentle decay (80ms)
|
|
340
|
+
0.7, // Sustain at 70%
|
|
341
|
+
0.25 // Smooth release (250ms)
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
if (envelope > 0) {
|
|
345
|
+
// Generate sine wave with slight harmonics for richness
|
|
346
|
+
const fundamental = Math.sin(2 * Math.PI * note.freq * time);
|
|
347
|
+
const harmonic2 = Math.sin(4 * Math.PI * note.freq * time) * 0.25;
|
|
348
|
+
const harmonic3 = Math.sin(6 * Math.PI * note.freq * time) * 0.1;
|
|
349
|
+
|
|
350
|
+
sample += (fundamental + harmonic2 + harmonic3) * envelope * 0.3;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
return sample;
|
|
355
|
+
}
|
|
356
|
+
);
|
|
357
|
+
|
|
358
|
+
// Write WAV data to the buffer
|
|
359
|
+
engine.editor.setBufferData(chimeBuffer, 0, chimeWav);
|
|
360
|
+
|
|
361
|
+
// Create audio block for the chime (starts at 0s)
|
|
362
|
+
const chimeBlock = engine.block.create('audio');
|
|
363
|
+
engine.block.appendChild(page, chimeBlock);
|
|
364
|
+
engine.block.setString(chimeBlock, 'audio/fileURI', chimeBuffer);
|
|
365
|
+
engine.block.setTimeOffset(chimeBlock, 0);
|
|
366
|
+
engine.block.setDuration(chimeBlock, SUCCESS_CHIME.totalDuration);
|
|
367
|
+
engine.block.setVolume(chimeBlock, 0.8);
|
|
368
|
+
|
|
369
|
+
// Create the "notification melody" sound effect
|
|
370
|
+
const melodyBuffer = engine.editor.createBuffer();
|
|
371
|
+
|
|
372
|
+
const melodyWav = createWavBuffer(
|
|
373
|
+
sampleRate,
|
|
374
|
+
NOTIFICATION_MELODY.totalDuration,
|
|
375
|
+
(time) => {
|
|
376
|
+
let sample = 0;
|
|
377
|
+
|
|
378
|
+
for (const note of NOTIFICATION_MELODY.notes) {
|
|
379
|
+
const envelope = adsr(
|
|
380
|
+
time,
|
|
381
|
+
note.start,
|
|
382
|
+
note.duration,
|
|
383
|
+
0.01, // Soft attack (10ms)
|
|
384
|
+
0.06, // Gentle decay (60ms)
|
|
385
|
+
0.6, // Sustain at 60%
|
|
386
|
+
0.2 // Smooth release (200ms)
|
|
387
|
+
);
|
|
388
|
+
|
|
389
|
+
if (envelope > 0) {
|
|
390
|
+
// Pure sine wave with light 2nd harmonic for gentle tone
|
|
391
|
+
const fundamental = Math.sin(2 * Math.PI * note.freq * time);
|
|
392
|
+
const harmonic2 = Math.sin(4 * Math.PI * note.freq * time) * 0.15;
|
|
393
|
+
|
|
394
|
+
sample += (fundamental + harmonic2) * envelope * 0.4;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
return sample;
|
|
399
|
+
}
|
|
400
|
+
);
|
|
401
|
+
|
|
402
|
+
engine.editor.setBufferData(melodyBuffer, 0, melodyWav);
|
|
403
|
+
|
|
404
|
+
// Starts at 2.5s (after 2s effect + 0.5s gap)
|
|
405
|
+
const melodyBlock = engine.block.create('audio');
|
|
406
|
+
engine.block.appendChild(page, melodyBlock);
|
|
407
|
+
engine.block.setString(melodyBlock, 'audio/fileURI', melodyBuffer);
|
|
408
|
+
engine.block.setTimeOffset(melodyBlock, effectDuration + gapDuration); // 2.5s
|
|
409
|
+
engine.block.setDuration(melodyBlock, NOTIFICATION_MELODY.totalDuration);
|
|
410
|
+
engine.block.setVolume(melodyBlock, 0.8);
|
|
411
|
+
|
|
412
|
+
// Create the "alert" sound effect
|
|
413
|
+
const alertBuffer = engine.editor.createBuffer();
|
|
414
|
+
|
|
415
|
+
const alertWav = createWavBuffer(
|
|
416
|
+
sampleRate,
|
|
417
|
+
ALERT_TONE.totalDuration,
|
|
418
|
+
(time) => {
|
|
419
|
+
let sample = 0;
|
|
420
|
+
|
|
421
|
+
for (const note of ALERT_TONE.notes) {
|
|
422
|
+
const envelope = adsr(
|
|
423
|
+
time,
|
|
424
|
+
note.start,
|
|
425
|
+
note.duration,
|
|
426
|
+
0.005, // Sharp attack (5ms)
|
|
427
|
+
0.05, // Quick decay (50ms)
|
|
428
|
+
0.5, // Sustain at 50%
|
|
429
|
+
0.15 // Medium release (150ms)
|
|
430
|
+
);
|
|
431
|
+
|
|
432
|
+
if (envelope > 0) {
|
|
433
|
+
// Slightly brighter tone for alert
|
|
434
|
+
const fundamental = Math.sin(2 * Math.PI * note.freq * time);
|
|
435
|
+
const harmonic2 = Math.sin(4 * Math.PI * note.freq * time) * 0.2;
|
|
436
|
+
const harmonic3 = Math.sin(6 * Math.PI * note.freq * time) * 0.15;
|
|
437
|
+
|
|
438
|
+
sample += (fundamental + harmonic2 + harmonic3) * envelope * 0.35;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
return sample;
|
|
443
|
+
}
|
|
444
|
+
);
|
|
445
|
+
|
|
446
|
+
engine.editor.setBufferData(alertBuffer, 0, alertWav);
|
|
447
|
+
|
|
448
|
+
// Starts at 5s (after 2 effects + 2 gaps)
|
|
449
|
+
const alertBlock = engine.block.create('audio');
|
|
450
|
+
engine.block.appendChild(page, alertBlock);
|
|
451
|
+
engine.block.setString(alertBlock, 'audio/fileURI', alertBuffer);
|
|
452
|
+
engine.block.setTimeOffset(alertBlock, 2 * (effectDuration + gapDuration)); // 5s
|
|
453
|
+
engine.block.setDuration(alertBlock, ALERT_TONE.totalDuration);
|
|
454
|
+
engine.block.setVolume(alertBlock, 0.75);
|
|
455
|
+
|
|
456
|
+
// Select the chime block to show it in the UI
|
|
457
|
+
engine.block.select(chimeBlock);
|
|
458
|
+
|
|
459
|
+
// Zoom to fit the timeline
|
|
460
|
+
await cesdk.actions.run('zoom.toPage', { autoFit: true });
|
|
461
|
+
|
|
462
|
+
// eslint-disable-next-line no-console
|
|
463
|
+
console.log(
|
|
464
|
+
`Sound effects: Success (0s), Melody (2.5s), Alert (5s) - each 2s, total ${totalDuration}s`
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
export default Example;
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
This guide covers working with buffers to create audio data and position it in the composition.
|
|
473
|
+
|
|
474
|
+
## Working with Buffers
|
|
475
|
+
|
|
476
|
+
CE.SDK provides a buffer API for creating and managing arbitrary binary data in memory. Use buffers when you need to generate content programmatically rather than loading from files.
|
|
477
|
+
|
|
478
|
+
### Creating a Buffer
|
|
479
|
+
|
|
480
|
+
Create a buffer with `createBuffer()`, which returns a URI you can use to reference the buffer:
|
|
481
|
+
|
|
482
|
+
```typescript highlight-buffer-create
|
|
483
|
+
// Create the "notification melody" sound effect
|
|
484
|
+
const melodyBuffer = engine.editor.createBuffer();
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### Writing Data
|
|
488
|
+
|
|
489
|
+
Write data to a buffer using `setBufferData()`. The offset parameter specifies where to start writing:
|
|
490
|
+
|
|
491
|
+
```typescript highlight-buffer-write
|
|
492
|
+
engine.editor.setBufferData(melodyBuffer, 0, melodyWav);
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
### Reading Data
|
|
496
|
+
|
|
497
|
+
Read data back from a buffer:
|
|
498
|
+
|
|
499
|
+
```typescript
|
|
500
|
+
const length = engine.editor.getBufferLength(buffer);
|
|
501
|
+
const data = engine.editor.getBufferData(buffer, 0, length);
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### Adding an Audio Track
|
|
505
|
+
|
|
506
|
+
Create an audio block and assign the buffer URI to its `audio/fileURI` property. Append it to the page to add it to the composition:
|
|
507
|
+
|
|
508
|
+
```typescript highlight-audio-track
|
|
509
|
+
// Starts at 2.5s (after 2s effect + 0.5s gap)
|
|
510
|
+
const melodyBlock = engine.block.create('audio');
|
|
511
|
+
engine.block.appendChild(page, melodyBlock);
|
|
512
|
+
engine.block.setString(melodyBlock, 'audio/fileURI', melodyBuffer);
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### Cleanup
|
|
516
|
+
|
|
517
|
+
Destroy buffers when no longer needed (buffers are also cleaned up automatically with the scene):
|
|
518
|
+
|
|
519
|
+
```typescript
|
|
520
|
+
engine.editor.destroyBuffer(buffer);
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
## Generating Audio Data
|
|
524
|
+
|
|
525
|
+
To use buffers for audio, you need valid audio data. The WAV format is straightforward to generate: a 44-byte header followed by raw PCM samples.
|
|
526
|
+
|
|
527
|
+
```typescript highlight-wav-body
|
|
528
|
+
const bitsPerSample = 16;
|
|
529
|
+
const channels = 2; // Stereo output
|
|
530
|
+
const numSamples = Math.floor(durationSeconds * sampleRate);
|
|
531
|
+
const dataSize = numSamples * channels * (bitsPerSample / 8);
|
|
532
|
+
|
|
533
|
+
// Create WAV file buffer (44-byte header + audio data)
|
|
534
|
+
const wavBuffer = new ArrayBuffer(44 + dataSize);
|
|
535
|
+
const view = new DataView(wavBuffer);
|
|
536
|
+
|
|
537
|
+
// RIFF chunk descriptor
|
|
538
|
+
view.setUint32(0, 0x52494646, false); // "RIFF"
|
|
539
|
+
view.setUint32(4, 36 + dataSize, true); // File size - 8
|
|
540
|
+
view.setUint32(8, 0x57415645, false); // "WAVE"
|
|
541
|
+
|
|
542
|
+
// fmt sub-chunk
|
|
543
|
+
view.setUint32(12, 0x666d7420, false); // "fmt "
|
|
544
|
+
view.setUint32(16, 16, true); // Sub-chunk size (16 for PCM)
|
|
545
|
+
view.setUint16(20, 1, true); // Audio format (1 = PCM)
|
|
546
|
+
view.setUint16(22, channels, true); // Number of channels
|
|
547
|
+
view.setUint32(24, sampleRate, true); // Sample rate
|
|
548
|
+
view.setUint32(28, sampleRate * channels * (bitsPerSample / 8), true);
|
|
549
|
+
view.setUint16(32, channels * (bitsPerSample / 8), true); // Block align
|
|
550
|
+
view.setUint16(34, bitsPerSample, true); // Bits per sample
|
|
551
|
+
|
|
552
|
+
// data sub-chunk
|
|
553
|
+
view.setUint32(36, 0x64617461, false); // "data"
|
|
554
|
+
view.setUint32(40, dataSize, true); // Data size
|
|
555
|
+
|
|
556
|
+
// Generate audio samples
|
|
557
|
+
let offset = 44;
|
|
558
|
+
for (let i = 0; i < numSamples; i++) {
|
|
559
|
+
const time = i / sampleRate;
|
|
560
|
+
// Generate mono sample and duplicate to both channels
|
|
561
|
+
const value = generator(time);
|
|
562
|
+
const sample = Math.max(-32768, Math.min(32767, Math.round(value * 32767)));
|
|
563
|
+
view.setInt16(offset, sample, true); // Left channel
|
|
564
|
+
view.setInt16(offset + 2, sample, true); // Right channel
|
|
565
|
+
offset += 4;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
return new Uint8Array(wavBuffer);
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
This code builds a stereo WAV file by writing the RIFF header, format chunk, and data chunk, then iterating through time to generate samples from a generator function that returns values between -1.0 and 1.0.
|
|
572
|
+
|
|
573
|
+
## Creating a Sound Effect
|
|
574
|
+
|
|
575
|
+
Combine the buffer API with the WAV helper to create a complete sound effect. This example generates a notification melody by mixing multiple notes with harmonics:
|
|
576
|
+
|
|
577
|
+
```typescript highlight-generate-melody
|
|
578
|
+
const melodyWav = createWavBuffer(
|
|
579
|
+
sampleRate,
|
|
580
|
+
NOTIFICATION_MELODY.totalDuration,
|
|
581
|
+
(time) => {
|
|
582
|
+
let sample = 0;
|
|
583
|
+
|
|
584
|
+
for (const note of NOTIFICATION_MELODY.notes) {
|
|
585
|
+
const envelope = adsr(
|
|
586
|
+
time,
|
|
587
|
+
note.start,
|
|
588
|
+
note.duration,
|
|
589
|
+
0.01, // Soft attack (10ms)
|
|
590
|
+
0.06, // Gentle decay (60ms)
|
|
591
|
+
0.6, // Sustain at 60%
|
|
592
|
+
0.2 // Smooth release (200ms)
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
if (envelope > 0) {
|
|
596
|
+
// Pure sine wave with light 2nd harmonic for gentle tone
|
|
597
|
+
const fundamental = Math.sin(2 * Math.PI * note.freq * time);
|
|
598
|
+
const harmonic2 = Math.sin(4 * Math.PI * note.freq * time) * 0.15;
|
|
599
|
+
|
|
600
|
+
sample += (fundamental + harmonic2) * envelope * 0.4;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
return sample;
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
The generator function mixes overlapping notes, each with its own start time and duration. The `adsr()` function shapes each note's volume over time (attack, decay, sustain, release), preventing harsh clicks. Adding a second harmonic at 15% creates a warmer tone than a pure sine wave.
|
|
610
|
+
|
|
611
|
+
## Positioning in Time
|
|
612
|
+
|
|
613
|
+
Position audio blocks using time offset (when it starts) and duration (how long it plays):
|
|
614
|
+
|
|
615
|
+
```typescript highlight-timeline-position
|
|
616
|
+
engine.block.setTimeOffset(melodyBlock, effectDuration + gapDuration); // 2.5s
|
|
617
|
+
engine.block.setDuration(melodyBlock, NOTIFICATION_MELODY.totalDuration);
|
|
618
|
+
```
|
|
619
|
+
|
|
620
|
+
This example spaces three sound effects with 0.5-second gaps:
|
|
621
|
+
|
|
622
|
+
```
|
|
623
|
+
Timeline: |----|----|----|----|----|----|----|
|
|
624
|
+
0s 1s 2s 3s 4s 5s 6s 7s
|
|
625
|
+
|
|
626
|
+
Success: |====|
|
|
627
|
+
^ 0s (2s)
|
|
628
|
+
|
|
629
|
+
Melody: |====|
|
|
630
|
+
^ 2.5s (2s)
|
|
631
|
+
|
|
632
|
+
Alert: |====|
|
|
633
|
+
^ 5s (2s)
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
Each effect is 2 seconds with 0.5-second gaps between them, for a total duration of 7 seconds.
|
|
637
|
+
|
|
638
|
+
## Troubleshooting
|
|
639
|
+
|
|
640
|
+
### No Sound
|
|
641
|
+
|
|
642
|
+
- **Check scene setup** - Ensure the audio block is attached to a page in the scene
|
|
643
|
+
- **Verify duration** - Ensure the audio block's duration is greater than 0
|
|
644
|
+
- **Check buffer data** - The buffer must contain valid WAV data
|
|
645
|
+
|
|
646
|
+
### Audio Sounds Wrong
|
|
647
|
+
|
|
648
|
+
- **Clipping** - Reduce sample values if they exceed -1.0 to 1.0
|
|
649
|
+
- **Clicking** - Add attack/release envelope to avoid pops
|
|
650
|
+
- **Wrong pitch** - Verify frequency calculations and sample rate (48 kHz)
|
|
651
|
+
|
|
652
|
+
### Buffer Errors
|
|
653
|
+
|
|
654
|
+
- **Invalid WAV** - Ensure header size fields match actual data size
|
|
655
|
+
- **Format mismatch** - Use 16-bit PCM, stereo, 48 kHz for best compatibility
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## More Resources
|
|
660
|
+
|
|
661
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
662
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
663
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
664
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|