@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,589 @@
|
|
|
1
|
+
> This is one page of the CE.SDK Vanilla JS/TS documentation. For a complete overview, see the [Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
|
|
2
|
+
|
|
3
|
+
**Navigation:** [Guides](./guides.md) > [Create and Edit Videos](./create-video.md) > [Add Captions](./edit-video/add-captions.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Add synchronized captions to video projects using CE.SDK's caption system, with support for importing subtitle files, styling with presets, and burning captions into video exports.
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
> **Reading time:** 15 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-video-add-captions-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-video-add-captions-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-create-video-add-captions-browser/)
|
|
19
|
+
|
|
20
|
+
Captions in CE.SDK follow a hierarchy: **Page → CaptionTrack → Caption blocks**. Each caption has text, timing (time offset and duration), and styling properties. Captions appear and disappear based on their timing, synchronized with video playback.
|
|
21
|
+
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-create-video-add-captions-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
|
+
/**
|
|
45
|
+
* CE.SDK Plugin: Add Captions Guide
|
|
46
|
+
*
|
|
47
|
+
* Demonstrates adding synchronized captions to video projects:
|
|
48
|
+
* - Importing captions from SRT/VTT files
|
|
49
|
+
* - Creating and styling captions programmatically
|
|
50
|
+
* - Applying caption presets
|
|
51
|
+
* - Controlling caption timing and positioning
|
|
52
|
+
* - Adding animations to captions
|
|
53
|
+
*/
|
|
54
|
+
class Example implements EditorPlugin {
|
|
55
|
+
name = packageJson.name;
|
|
56
|
+
|
|
57
|
+
version = packageJson.version;
|
|
58
|
+
|
|
59
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
60
|
+
if (!cesdk) {
|
|
61
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
65
|
+
|
|
66
|
+
// Add asset source plugins
|
|
67
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
68
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
69
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
70
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
71
|
+
await cesdk.addPlugin(
|
|
72
|
+
new UploadAssetSources({
|
|
73
|
+
include: [
|
|
74
|
+
'ly.img.image.upload',
|
|
75
|
+
'ly.img.video.upload',
|
|
76
|
+
'ly.img.audio.upload'
|
|
77
|
+
]
|
|
78
|
+
})
|
|
79
|
+
);
|
|
80
|
+
await cesdk.addPlugin(
|
|
81
|
+
new DemoAssetSources({
|
|
82
|
+
include: [
|
|
83
|
+
'ly.img.templates.video.*',
|
|
84
|
+
'ly.img.image.*',
|
|
85
|
+
'ly.img.audio.*',
|
|
86
|
+
'ly.img.video.*'
|
|
87
|
+
]
|
|
88
|
+
})
|
|
89
|
+
);
|
|
90
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
91
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
92
|
+
await cesdk.addPlugin(
|
|
93
|
+
new PagePresetsAssetSource({
|
|
94
|
+
include: [
|
|
95
|
+
'ly.img.page.presets.instagram.*',
|
|
96
|
+
'ly.img.page.presets.facebook.*',
|
|
97
|
+
'ly.img.page.presets.x.*',
|
|
98
|
+
'ly.img.page.presets.linkedin.*',
|
|
99
|
+
'ly.img.page.presets.pinterest.*',
|
|
100
|
+
'ly.img.page.presets.tiktok.*',
|
|
101
|
+
'ly.img.page.presets.youtube.*',
|
|
102
|
+
'ly.img.page.presets.video.*'
|
|
103
|
+
]
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
107
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
108
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
109
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
110
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
111
|
+
|
|
112
|
+
await cesdk.actions.run('scene.create', {
|
|
113
|
+
layout: 'DepthStack',
|
|
114
|
+
page: { width: 1920, height: 1080, unit: 'Pixel' }
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const engine = cesdk.engine;
|
|
118
|
+
const page = engine.block.findByType('page')[0];
|
|
119
|
+
|
|
120
|
+
engine.block.setDuration(page, 40);
|
|
121
|
+
|
|
122
|
+
// Add a video clip as the base content
|
|
123
|
+
const videoUrl =
|
|
124
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.video/videos/pexels-drone-footage-of-a-surfer-barrelling-a-wave-12715991.mp4';
|
|
125
|
+
|
|
126
|
+
const track = engine.block.create('track');
|
|
127
|
+
engine.block.appendChild(page, track);
|
|
128
|
+
|
|
129
|
+
const videoClip = await engine.block.addVideo(videoUrl, 1920, 1080, {
|
|
130
|
+
timeline: { duration: 40, timeOffset: 0 }
|
|
131
|
+
});
|
|
132
|
+
engine.block.appendChild(track, videoClip);
|
|
133
|
+
engine.block.fillParent(track);
|
|
134
|
+
|
|
135
|
+
// Import captions from SRT file
|
|
136
|
+
// createCaptionsFromURI parses SRT/VTT and creates caption blocks with timing
|
|
137
|
+
const captionSrtUrl = 'https://img.ly/static/examples/captions.srt';
|
|
138
|
+
const captionBlocks =
|
|
139
|
+
await engine.block.createCaptionsFromURI(captionSrtUrl);
|
|
140
|
+
|
|
141
|
+
// eslint-disable-next-line no-console
|
|
142
|
+
console.log(`Imported ${captionBlocks.length} captions from SRT file`);
|
|
143
|
+
|
|
144
|
+
// Adjust caption timing to start at the beginning of the video
|
|
145
|
+
// The SRT file may have different timing, so we reset to start at 0
|
|
146
|
+
let currentOffset = 0;
|
|
147
|
+
for (const captionId of captionBlocks) {
|
|
148
|
+
const duration = engine.block.getDuration(captionId);
|
|
149
|
+
engine.block.setTimeOffset(captionId, currentOffset);
|
|
150
|
+
currentOffset += duration;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Create a caption track and add captions to it
|
|
154
|
+
// Caption tracks organize captions in the timeline
|
|
155
|
+
const captionTrack = engine.block.create('//ly.img.ubq/captionTrack');
|
|
156
|
+
engine.block.appendChild(page, captionTrack);
|
|
157
|
+
|
|
158
|
+
// Add each caption block to the track
|
|
159
|
+
for (const captionId of captionBlocks) {
|
|
160
|
+
engine.block.appendChild(captionTrack, captionId);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// eslint-disable-next-line no-console
|
|
164
|
+
console.log(`Caption track created with ${captionBlocks.length} captions`);
|
|
165
|
+
|
|
166
|
+
// Apply a caption preset for consistent styling
|
|
167
|
+
// Caption presets provide pre-configured styles (fonts, colors, backgrounds)
|
|
168
|
+
const captionPresetsSourceId = 'ly.img.caption.presets';
|
|
169
|
+
const comicPresetId = '//ly.img.caption.presets/comic';
|
|
170
|
+
|
|
171
|
+
// Fetch the preset asset
|
|
172
|
+
const comicPreset = await engine.asset.fetchAsset(
|
|
173
|
+
captionPresetsSourceId,
|
|
174
|
+
comicPresetId
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
// Apply preset to the first caption (styling syncs across all captions)
|
|
178
|
+
if (comicPreset && captionBlocks.length > 0) {
|
|
179
|
+
await engine.asset.applyToBlock(
|
|
180
|
+
captionPresetsSourceId,
|
|
181
|
+
comicPreset,
|
|
182
|
+
captionBlocks[0]
|
|
183
|
+
);
|
|
184
|
+
// eslint-disable-next-line no-console
|
|
185
|
+
console.log('Applied comic preset to captions');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Position captions at the bottom of the video frame
|
|
189
|
+
// Caption position and size sync across all captions, so we only set it once
|
|
190
|
+
if (captionBlocks.length > 0) {
|
|
191
|
+
const firstCaption = captionBlocks[0];
|
|
192
|
+
|
|
193
|
+
// Use percentage-based positioning for responsive layout
|
|
194
|
+
engine.block.setPositionXMode(firstCaption, 'Percent');
|
|
195
|
+
engine.block.setPositionYMode(firstCaption, 'Percent');
|
|
196
|
+
engine.block.setWidthMode(firstCaption, 'Percent');
|
|
197
|
+
engine.block.setHeightMode(firstCaption, 'Percent');
|
|
198
|
+
|
|
199
|
+
// Position at bottom center with padding
|
|
200
|
+
engine.block.setPositionX(firstCaption, 0.05); // 5% from left
|
|
201
|
+
engine.block.setPositionY(firstCaption, 0.8); // 80% from top (near bottom)
|
|
202
|
+
engine.block.setWidth(firstCaption, 0.9); // 90% width
|
|
203
|
+
engine.block.setHeight(firstCaption, 0.15); // 15% height
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Modify a specific caption's text and timing
|
|
207
|
+
if (captionBlocks.length > 0) {
|
|
208
|
+
const firstCaption = captionBlocks[0];
|
|
209
|
+
|
|
210
|
+
// Get current text
|
|
211
|
+
const currentText = engine.block.getString(firstCaption, 'caption/text');
|
|
212
|
+
// eslint-disable-next-line no-console
|
|
213
|
+
console.log('First caption text:', currentText);
|
|
214
|
+
|
|
215
|
+
// Get timing info
|
|
216
|
+
const offset = engine.block.getTimeOffset(firstCaption);
|
|
217
|
+
const duration = engine.block.getDuration(firstCaption);
|
|
218
|
+
// eslint-disable-next-line no-console
|
|
219
|
+
console.log(`First caption: offset=${offset}s, duration=${duration}s`);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Add fade-in animation to the first caption
|
|
223
|
+
if (captionBlocks.length > 0) {
|
|
224
|
+
const firstCaption = captionBlocks[0];
|
|
225
|
+
|
|
226
|
+
// Create and apply entry animation
|
|
227
|
+
const fadeIn = engine.block.createAnimation('fade');
|
|
228
|
+
engine.block.setDuration(fadeIn, 0.3);
|
|
229
|
+
engine.block.setInAnimation(firstCaption, fadeIn);
|
|
230
|
+
|
|
231
|
+
// eslint-disable-next-line no-console
|
|
232
|
+
console.log('Added fade-in animation to first caption');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Select the first caption to show it in the inspector
|
|
236
|
+
if (captionBlocks.length > 0) {
|
|
237
|
+
engine.block.select(captionBlocks[0]);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Seek to show the first caption at 1 second
|
|
241
|
+
engine.block.setPlaybackTime(page, 1);
|
|
242
|
+
|
|
243
|
+
// Open the caption inspector panel
|
|
244
|
+
cesdk.ui.openPanel('//ly.img.panel/inspector/caption');
|
|
245
|
+
|
|
246
|
+
// eslint-disable-next-line no-console
|
|
247
|
+
console.log(
|
|
248
|
+
'Add Captions guide initialized. Captions imported and styled.'
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
export default Example;
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
This guide covers how to import captions from SRT/VTT files, style them using presets and custom properties, create captions programmatically, and export videos with burned-in captions.
|
|
257
|
+
|
|
258
|
+
## Understanding Caption Structure
|
|
259
|
+
|
|
260
|
+
### Caption Hierarchy
|
|
261
|
+
|
|
262
|
+
CE.SDK organizes captions in a parent-child hierarchy. The page contains one or more caption tracks, and each caption track contains individual caption blocks. This structure allows for multiple caption tracks (for different languages or purposes) while keeping captions organized.
|
|
263
|
+
|
|
264
|
+
When you import captions from a subtitle file, CE.SDK automatically creates the caption track and populates it with caption blocks. Each caption block stores its text content, start time, duration, and styling properties.
|
|
265
|
+
|
|
266
|
+
### Caption Timing
|
|
267
|
+
|
|
268
|
+
Each caption has two timing properties: **time offset** (when the caption appears) and **duration** (how long it stays visible). These values are in seconds and synchronize with the video playback. A caption with a time offset of 2.0 and duration of 3.0 appears at the 2-second mark and disappears at the 5-second mark.
|
|
269
|
+
|
|
270
|
+
## Importing Captions from Subtitle Files
|
|
271
|
+
|
|
272
|
+
### Using createCaptionsFromURI
|
|
273
|
+
|
|
274
|
+
The fastest way to add captions is importing from an SRT or VTT subtitle file. CE.SDK parses the file and creates caption blocks with timing already configured.
|
|
275
|
+
|
|
276
|
+
```typescript highlight-import-captions
|
|
277
|
+
// Import captions from SRT file
|
|
278
|
+
// createCaptionsFromURI parses SRT/VTT and creates caption blocks with timing
|
|
279
|
+
const captionSrtUrl = 'https://img.ly/static/examples/captions.srt';
|
|
280
|
+
const captionBlocks = await engine.block.createCaptionsFromURI(captionSrtUrl);
|
|
281
|
+
|
|
282
|
+
// eslint-disable-next-line no-console
|
|
283
|
+
console.log(`Imported ${captionBlocks.length} captions from SRT file`);
|
|
284
|
+
|
|
285
|
+
// Adjust caption timing to start at the beginning of the video
|
|
286
|
+
// The SRT file may have different timing, so we reset to start at 0
|
|
287
|
+
let currentOffset = 0;
|
|
288
|
+
for (const captionId of captionBlocks) {
|
|
289
|
+
const duration = engine.block.getDuration(captionId);
|
|
290
|
+
engine.block.setTimeOffset(captionId, currentOffset);
|
|
291
|
+
currentOffset += duration;
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
The `createCaptionsFromURI` method downloads the subtitle file, parses the timing and text, and creates a caption track with all captions positioned correctly. It returns an array of caption block IDs for the imported captions.
|
|
296
|
+
|
|
297
|
+
### Creating the Caption Track
|
|
298
|
+
|
|
299
|
+
After importing captions, create a caption track to organize them in the composition. The caption track manages caption positioning and display.
|
|
300
|
+
|
|
301
|
+
```typescript highlight-create-caption-track
|
|
302
|
+
// Create a caption track and add captions to it
|
|
303
|
+
// Caption tracks organize captions in the timeline
|
|
304
|
+
const captionTrack = engine.block.create('//ly.img.ubq/captionTrack');
|
|
305
|
+
engine.block.appendChild(page, captionTrack);
|
|
306
|
+
|
|
307
|
+
// Add each caption block to the track
|
|
308
|
+
for (const captionId of captionBlocks) {
|
|
309
|
+
engine.block.appendChild(captionTrack, captionId);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// eslint-disable-next-line no-console
|
|
313
|
+
console.log(`Caption track created with ${captionBlocks.length} captions`);
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Create a caption track with `engine.block.create('//ly.img.ubq/captionTrack')` and append it to the page. Then add each caption block to the track using `appendChild`.
|
|
317
|
+
|
|
318
|
+
## Using the Built-in Caption UI
|
|
319
|
+
|
|
320
|
+
### Caption Panel
|
|
321
|
+
|
|
322
|
+
CE.SDK provides a caption panel in the inspector for visual caption management. When you select a caption, the panel shows timing controls, text editing, and styling options. Users can drag caption edges in the timeline to adjust timing or double-click to edit text.
|
|
323
|
+
|
|
324
|
+
### Importing via UI
|
|
325
|
+
|
|
326
|
+
The caption panel includes an import button for uploading SRT or VTT files. The interface guides users through file selection and automatically extracts timing information.
|
|
327
|
+
|
|
328
|
+
### Styling with Presets
|
|
329
|
+
|
|
330
|
+
Caption presets provide pre-configured styling combinations including font, color, background, and animations. Select a caption and choose from available presets to apply consistent styling. Presets are especially useful for maintaining brand consistency across videos.
|
|
331
|
+
|
|
332
|
+
### Editing Text and Timing
|
|
333
|
+
|
|
334
|
+
Double-click a caption in the timeline or panel to edit its text. Drag the edges of caption blocks in the timeline to adjust start time and duration. The timeline provides visual feedback showing caption positions relative to video content.
|
|
335
|
+
|
|
336
|
+
## Creating Captions Programmatically
|
|
337
|
+
|
|
338
|
+
### Caption Track Setup
|
|
339
|
+
|
|
340
|
+
For full control over captions, create them programmatically. First, create a caption track and append it to the page.
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
const captionTrack = engine.block.create('//ly.img.ubq/captionTrack');
|
|
344
|
+
engine.block.appendChild(page, captionTrack);
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Creating Caption Blocks
|
|
348
|
+
|
|
349
|
+
Create individual captions with text and timing.
|
|
350
|
+
|
|
351
|
+
```typescript
|
|
352
|
+
const caption = engine.block.create('//ly.img.ubq/caption');
|
|
353
|
+
engine.block.appendChild(captionTrack, caption);
|
|
354
|
+
|
|
355
|
+
// Set caption text
|
|
356
|
+
engine.block.setString(caption, 'caption/text', 'Hello, world!');
|
|
357
|
+
|
|
358
|
+
// Set timing - appears at 2 seconds for 3 seconds
|
|
359
|
+
engine.block.setTimeOffset(caption, 2);
|
|
360
|
+
engine.block.setDuration(caption, 3);
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Set the caption text using `setString` with the `caption/text` property. Position the caption in time using `setTimeOffset` (when it appears) and `setDuration` (how long it shows).
|
|
364
|
+
|
|
365
|
+
## Styling Captions
|
|
366
|
+
|
|
367
|
+
### Applying Presets
|
|
368
|
+
|
|
369
|
+
The fastest way to style captions is using presets. Presets provide pre-configured styling including fonts, colors, backgrounds, and effects.
|
|
370
|
+
|
|
371
|
+
```typescript highlight-apply-preset
|
|
372
|
+
// Apply a caption preset for consistent styling
|
|
373
|
+
// Caption presets provide pre-configured styles (fonts, colors, backgrounds)
|
|
374
|
+
const captionPresetsSourceId = 'ly.img.caption.presets';
|
|
375
|
+
const comicPresetId = '//ly.img.caption.presets/comic';
|
|
376
|
+
|
|
377
|
+
// Fetch the preset asset
|
|
378
|
+
const comicPreset = await engine.asset.fetchAsset(
|
|
379
|
+
captionPresetsSourceId,
|
|
380
|
+
comicPresetId
|
|
381
|
+
);
|
|
382
|
+
|
|
383
|
+
// Apply preset to the first caption (styling syncs across all captions)
|
|
384
|
+
if (comicPreset && captionBlocks.length > 0) {
|
|
385
|
+
await engine.asset.applyToBlock(
|
|
386
|
+
captionPresetsSourceId,
|
|
387
|
+
comicPreset,
|
|
388
|
+
captionBlocks[0]
|
|
389
|
+
);
|
|
390
|
+
// eslint-disable-next-line no-console
|
|
391
|
+
console.log('Applied comic preset to captions');
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
Fetch a preset using `engine.asset.fetchAsset` and apply it with `engine.asset.applyToBlock`. Caption styling automatically syncs across all captions, so applying a preset to one caption styles them all.
|
|
396
|
+
|
|
397
|
+
### Positioning Captions
|
|
398
|
+
|
|
399
|
+
Position captions at the bottom of the video frame using percentage-based positioning for responsive layout.
|
|
400
|
+
|
|
401
|
+
```typescript highlight-position-captions
|
|
402
|
+
// Position captions at the bottom of the video frame
|
|
403
|
+
// Caption position and size sync across all captions, so we only set it once
|
|
404
|
+
if (captionBlocks.length > 0) {
|
|
405
|
+
const firstCaption = captionBlocks[0];
|
|
406
|
+
|
|
407
|
+
// Use percentage-based positioning for responsive layout
|
|
408
|
+
engine.block.setPositionXMode(firstCaption, 'Percent');
|
|
409
|
+
engine.block.setPositionYMode(firstCaption, 'Percent');
|
|
410
|
+
engine.block.setWidthMode(firstCaption, 'Percent');
|
|
411
|
+
engine.block.setHeightMode(firstCaption, 'Percent');
|
|
412
|
+
|
|
413
|
+
// Position at bottom center with padding
|
|
414
|
+
engine.block.setPositionX(firstCaption, 0.05); // 5% from left
|
|
415
|
+
engine.block.setPositionY(firstCaption, 0.8); // 80% from top (near bottom)
|
|
416
|
+
engine.block.setWidth(firstCaption, 0.9); // 90% width
|
|
417
|
+
engine.block.setHeight(firstCaption, 0.15); // 15% height
|
|
418
|
+
}
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
Use percentage mode (`setPositionXMode`, `setPositionYMode`) for positions that adapt to different video resolutions. Caption position and size sync across all captions automatically.
|
|
422
|
+
|
|
423
|
+
### Background
|
|
424
|
+
|
|
425
|
+
Enable a background behind caption text for better readability over video content. Use `setBool` to enable `backgroundColor/enabled` and `setColor` to set `backgroundColor/color` with RGBA values. A semi-transparent black background (alpha 0.7) is common for video captions.
|
|
426
|
+
|
|
427
|
+
### Automatic Font Sizing
|
|
428
|
+
|
|
429
|
+
CE.SDK can automatically adjust font size to fit caption text within bounds. Enable automatic sizing and set minimum and maximum size limits.
|
|
430
|
+
|
|
431
|
+
```typescript
|
|
432
|
+
engine.block.setBool(captionId, 'caption/automaticFontSizeEnabled', true);
|
|
433
|
+
engine.block.setFloat(captionId, 'caption/minAutomaticFontSize', 24);
|
|
434
|
+
engine.block.setFloat(captionId, 'caption/maxAutomaticFontSize', 72);
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
This prevents text from overflowing while maintaining readability.
|
|
438
|
+
|
|
439
|
+
## Applying Presets Programmatically
|
|
440
|
+
|
|
441
|
+
### Finding Available Presets
|
|
442
|
+
|
|
443
|
+
Query available caption presets from the asset library.
|
|
444
|
+
|
|
445
|
+
```typescript
|
|
446
|
+
const presetsResult = await engine.asset.findAssets('ly.img.caption.presets', {
|
|
447
|
+
page: 0,
|
|
448
|
+
perPage: 100
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
const presets = presetsResult.assets;
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
The `findAssets` method returns preset metadata including IDs and preview thumbnails.
|
|
455
|
+
|
|
456
|
+
### Applying a Preset
|
|
457
|
+
|
|
458
|
+
Apply a preset to a caption using `applyToBlock`.
|
|
459
|
+
|
|
460
|
+
```typescript
|
|
461
|
+
const preset = presets[0];
|
|
462
|
+
await engine.asset.applyToBlock('ly.img.caption.presets', preset, captionId);
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
The preset applies all styling properties at once—font, colors, background, and any animations defined in the preset.
|
|
466
|
+
|
|
467
|
+
## Caption Animations
|
|
468
|
+
|
|
469
|
+
### Adding Entry Animations
|
|
470
|
+
|
|
471
|
+
Make captions more engaging by adding entry animations.
|
|
472
|
+
|
|
473
|
+
```typescript highlight-add-animation
|
|
474
|
+
// Add fade-in animation to the first caption
|
|
475
|
+
if (captionBlocks.length > 0) {
|
|
476
|
+
const firstCaption = captionBlocks[0];
|
|
477
|
+
|
|
478
|
+
// Create and apply entry animation
|
|
479
|
+
const fadeIn = engine.block.createAnimation('fade');
|
|
480
|
+
engine.block.setDuration(fadeIn, 0.3);
|
|
481
|
+
engine.block.setInAnimation(firstCaption, fadeIn);
|
|
482
|
+
|
|
483
|
+
// eslint-disable-next-line no-console
|
|
484
|
+
console.log('Added fade-in animation to first caption');
|
|
485
|
+
}
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
Create an animation using `createAnimation` with types like 'fade', 'slide', or 'scale'. Set the animation duration and apply it with `setInAnimation`.
|
|
489
|
+
|
|
490
|
+
### Animation Types
|
|
491
|
+
|
|
492
|
+
CE.SDK supports several animation types for captions:
|
|
493
|
+
|
|
494
|
+
- **fade** - Opacity transition
|
|
495
|
+
- **slide** - Position movement
|
|
496
|
+
- **scale** - Size change
|
|
497
|
+
- **blur** - Focus effect
|
|
498
|
+
|
|
499
|
+
Set loop animations with `setLoopAnimation` for continuous effects, or exit animations with `setOutAnimation` for departure transitions.
|
|
500
|
+
|
|
501
|
+
## Reading Caption Properties
|
|
502
|
+
|
|
503
|
+
### Getting Text and Timing
|
|
504
|
+
|
|
505
|
+
Retrieve caption properties to display in custom UI or for processing.
|
|
506
|
+
|
|
507
|
+
```typescript highlight-modify-caption
|
|
508
|
+
// Modify a specific caption's text and timing
|
|
509
|
+
if (captionBlocks.length > 0) {
|
|
510
|
+
const firstCaption = captionBlocks[0];
|
|
511
|
+
|
|
512
|
+
// Get current text
|
|
513
|
+
const currentText = engine.block.getString(firstCaption, 'caption/text');
|
|
514
|
+
// eslint-disable-next-line no-console
|
|
515
|
+
console.log('First caption text:', currentText);
|
|
516
|
+
|
|
517
|
+
// Get timing info
|
|
518
|
+
const offset = engine.block.getTimeOffset(firstCaption);
|
|
519
|
+
const duration = engine.block.getDuration(firstCaption);
|
|
520
|
+
// eslint-disable-next-line no-console
|
|
521
|
+
console.log(`First caption: offset=${offset}s, duration=${duration}s`);
|
|
522
|
+
}
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
Use `getString` for text, `getTimeOffset` for start time, and `getDuration` for display length. These values are useful for building custom caption editors or synchronization tools.
|
|
526
|
+
|
|
527
|
+
## Exporting Videos with Captions
|
|
528
|
+
|
|
529
|
+
### Burned-In Captions
|
|
530
|
+
|
|
531
|
+
When you export a video, captions are burned into the video as pixels. They become part of the video image and cannot be turned off by viewers. This ensures captions display correctly on any platform.
|
|
532
|
+
|
|
533
|
+
```typescript
|
|
534
|
+
const videoBlob = await engine.block.exportVideo(page, {
|
|
535
|
+
mimeType: 'video/mp4'
|
|
536
|
+
});
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
The export process renders each frame with captions overlaid at the correct timing. Export time depends on video length and resolution.
|
|
540
|
+
|
|
541
|
+
> **Note:** For accessibility, consider also providing separate subtitle files (SRT/VTT) alongside burned-in captions. This allows viewers to customize caption appearance in their video player.
|
|
542
|
+
|
|
543
|
+
## Troubleshooting
|
|
544
|
+
|
|
545
|
+
| Issue | Cause | Solution |
|
|
546
|
+
| -------------------- | ------------------------------ | -------------------------------------------------- |
|
|
547
|
+
| Captions not visible | Not in caption track hierarchy | Check `getParent()`: page → captionTrack → caption |
|
|
548
|
+
| Wrong timing | Time offset/duration incorrect | Verify `getTimeOffset()` and `getDuration()` |
|
|
549
|
+
| Import fails | Unsupported format | Use valid SRT or VTT file |
|
|
550
|
+
| Styling not applying | Property path wrong | Use `caption/` prefix for caption properties |
|
|
551
|
+
|
|
552
|
+
### Captions Not Appearing
|
|
553
|
+
|
|
554
|
+
If captions don't show in the preview, verify the caption hierarchy. Each caption must be a child of a caption track, which must be a child of the page. Use `getParent()` to trace the hierarchy.
|
|
555
|
+
|
|
556
|
+
Also check that the playhead position matches caption timing. Captions only appear during their time offset and duration window.
|
|
557
|
+
|
|
558
|
+
### Import Errors
|
|
559
|
+
|
|
560
|
+
If `createCaptionsFromURI` fails, verify the URL is accessible and returns valid SRT or VTT content. Common issues include CORS restrictions and malformed subtitle files. Test the URL in a browser to confirm accessibility.
|
|
561
|
+
|
|
562
|
+
## API Reference
|
|
563
|
+
|
|
564
|
+
| Method | Purpose |
|
|
565
|
+
| --------------------------------------------------- | --------------------------------- |
|
|
566
|
+
| `engine.block.createCaptionsFromURI(uri)` | Import captions from SRT/VTT file |
|
|
567
|
+
| `engine.block.create('//ly.img.ubq/captionTrack')` | Create caption track container |
|
|
568
|
+
| `engine.block.create('//ly.img.ubq/caption')` | Create caption block |
|
|
569
|
+
| `engine.block.setString(id, property, value)` | Set caption text |
|
|
570
|
+
| `engine.block.setTimeOffset(id, offset)` | Set caption start time |
|
|
571
|
+
| `engine.block.setDuration(id, duration)` | Set caption display duration |
|
|
572
|
+
| `engine.block.setFloat(id, property, value)` | Set font size, spacing |
|
|
573
|
+
| `engine.block.setEnum(id, property, value)` | Set alignment |
|
|
574
|
+
| `engine.block.setBool(id, property, value)` | Enable background |
|
|
575
|
+
| `engine.block.setColor(id, property, value)` | Set colors |
|
|
576
|
+
| `engine.block.createAnimation(type)` | Create animation |
|
|
577
|
+
| `engine.block.setInAnimation(id, animation)` | Set entry animation |
|
|
578
|
+
| `engine.block.exportVideo(id, options)` | Export video with captions |
|
|
579
|
+
| `engine.asset.findAssets(sourceId, params)` | Find presets |
|
|
580
|
+
| `engine.asset.applyToBlock(sourceId, asset, block)` | Apply preset |
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
## More Resources
|
|
585
|
+
|
|
586
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
587
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
588
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
589
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|