@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,966 @@
|
|
|
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) > [AI Integration](./user-interface/ai-integration.md) > [Integrate AI Into CE.SDK](./user-interface/ai-integration/integrate.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Add AI-powered generation capabilities to your CE.SDK application for generating images, videos, audio, and text using the `@imgly/plugin-ai-apps-web` package.
|
|
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-user-interface-ai-integration-browser)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-user-interface-ai-integration-browser)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-user-interface-ai-integration-browser/)
|
|
19
|
+
|
|
20
|
+
> **Looking for the easy path?:** The [IMG.LY AI Gateway](./user-interface/ai-integration/gateway-provider.md) is the fastest way to add AI generation to CE.SDK. We handle proxying, authentication, model routing, and billing — you only need a JWT-minting endpoint and a single gateway URL. The rest of this guide covers configuring upstream providers directly, which is useful when you need full control or already run your own proxy.
|
|
21
|
+
|
|
22
|
+
This tutorial will guide you through integrating AI-powered generation capabilities into your CreativeEditor SDK application using the `@imgly/plugin-ai-apps-web` package. You'll learn how to set up various AI providers for generating images, videos, audio, and text.
|
|
23
|
+
|
|
24
|
+
```typescript file=@cesdk_web_examples/guides-user-interface-ai-integration-browser/browser.ts reference-only
|
|
25
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
26
|
+
|
|
27
|
+
import {
|
|
28
|
+
BlurAssetSource,
|
|
29
|
+
CaptionPresetsAssetSource,
|
|
30
|
+
ColorPaletteAssetSource,
|
|
31
|
+
CropPresetsAssetSource,
|
|
32
|
+
DemoAssetSources,
|
|
33
|
+
EffectsAssetSource,
|
|
34
|
+
FiltersAssetSource,
|
|
35
|
+
PagePresetsAssetSource,
|
|
36
|
+
StickerAssetSource,
|
|
37
|
+
TextAssetSource,
|
|
38
|
+
TextComponentAssetSource,
|
|
39
|
+
TypefaceAssetSource,
|
|
40
|
+
UploadAssetSources,
|
|
41
|
+
VectorShapeAssetSource
|
|
42
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
43
|
+
import { VideoEditorConfig } from './video-editor/plugin';
|
|
44
|
+
import AiApps from '@imgly/plugin-ai-apps-web';
|
|
45
|
+
|
|
46
|
+
// Import providers from individual AI generation packages
|
|
47
|
+
import Elevenlabs from '@imgly/plugin-ai-audio-generation-web/elevenlabs';
|
|
48
|
+
import FalAiImage from '@imgly/plugin-ai-image-generation-web/fal-ai';
|
|
49
|
+
import OpenAiImage from '@imgly/plugin-ai-image-generation-web/open-ai';
|
|
50
|
+
import Anthropic from '@imgly/plugin-ai-text-generation-web/anthropic';
|
|
51
|
+
import FalAiVideo from '@imgly/plugin-ai-video-generation-web/fal-ai';
|
|
52
|
+
|
|
53
|
+
// Import middleware utilities
|
|
54
|
+
import { uploadMiddleware } from '@imgly/plugin-ai-generation-web';
|
|
55
|
+
|
|
56
|
+
import packageJson from './package.json';
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Upload to your image storage server.
|
|
60
|
+
* Replace this mock with your actual storage API call.
|
|
61
|
+
*/
|
|
62
|
+
async function uploadToYourStorageServer(imageUrl: string) {
|
|
63
|
+
// In production, upload the image to your server:
|
|
64
|
+
// const response = await fetch('https://your-server.com/api/store-image', {
|
|
65
|
+
// method: 'POST',
|
|
66
|
+
// headers: { 'Content-Type': 'application/json' },
|
|
67
|
+
// body: JSON.stringify({
|
|
68
|
+
// imageUrl,
|
|
69
|
+
// metadata: { source: 'ai-generation' }
|
|
70
|
+
// })
|
|
71
|
+
// });
|
|
72
|
+
// return await response.json();
|
|
73
|
+
|
|
74
|
+
// Mock: Return a fake response
|
|
75
|
+
return { permanentUrl: imageUrl };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* CE.SDK Plugin: AI Integration Guide
|
|
80
|
+
*
|
|
81
|
+
* Demonstrates how to integrate AI-powered generation capabilities:
|
|
82
|
+
* - Text generation and transformation (Anthropic)
|
|
83
|
+
* - Image generation (fal.ai, OpenAI)
|
|
84
|
+
* - Video generation (fal.ai)
|
|
85
|
+
* - Audio generation (ElevenLabs)
|
|
86
|
+
* - Using middleware for custom processing
|
|
87
|
+
* - Configuring UI integration
|
|
88
|
+
*/
|
|
89
|
+
class Example implements EditorPlugin {
|
|
90
|
+
name = packageJson.name;
|
|
91
|
+
|
|
92
|
+
version = packageJson.version;
|
|
93
|
+
|
|
94
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
95
|
+
if (!cesdk) {
|
|
96
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
100
|
+
|
|
101
|
+
// Add asset source plugins
|
|
102
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
103
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
104
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
105
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
106
|
+
await cesdk.addPlugin(
|
|
107
|
+
new UploadAssetSources({
|
|
108
|
+
include: [
|
|
109
|
+
'ly.img.image.upload',
|
|
110
|
+
'ly.img.video.upload',
|
|
111
|
+
'ly.img.audio.upload'
|
|
112
|
+
]
|
|
113
|
+
})
|
|
114
|
+
);
|
|
115
|
+
await cesdk.addPlugin(
|
|
116
|
+
new DemoAssetSources({
|
|
117
|
+
include: [
|
|
118
|
+
'ly.img.templates.video.*',
|
|
119
|
+
'ly.img.image.*',
|
|
120
|
+
'ly.img.audio.*',
|
|
121
|
+
'ly.img.video.*'
|
|
122
|
+
]
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
126
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
127
|
+
await cesdk.addPlugin(
|
|
128
|
+
new PagePresetsAssetSource({
|
|
129
|
+
include: [
|
|
130
|
+
'ly.img.page.presets.instagram.*',
|
|
131
|
+
'ly.img.page.presets.facebook.*',
|
|
132
|
+
'ly.img.page.presets.x.*',
|
|
133
|
+
'ly.img.page.presets.linkedin.*',
|
|
134
|
+
'ly.img.page.presets.pinterest.*',
|
|
135
|
+
'ly.img.page.presets.tiktok.*',
|
|
136
|
+
'ly.img.page.presets.youtube.*',
|
|
137
|
+
'ly.img.page.presets.video.*'
|
|
138
|
+
]
|
|
139
|
+
})
|
|
140
|
+
);
|
|
141
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
142
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
143
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
144
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
145
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
146
|
+
|
|
147
|
+
await cesdk.actions.run('scene.create', {
|
|
148
|
+
page: {
|
|
149
|
+
sourceId: 'ly.img.page.presets',
|
|
150
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
151
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Configure AI Apps dock position
|
|
155
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
|
|
156
|
+
'ly.img.ai.apps.dock',
|
|
157
|
+
...cesdk.ui.getComponentOrder({ in: 'ly.img.dock' })
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
// Add AI options to canvas menu
|
|
161
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.canvas.menu' }, [
|
|
162
|
+
'ly.img.ai.text.canvasMenu',
|
|
163
|
+
'ly.img.ai.image.canvasMenu',
|
|
164
|
+
...cesdk.ui.getComponentOrder({ in: 'ly.img.canvas.menu' })
|
|
165
|
+
]);
|
|
166
|
+
|
|
167
|
+
// Add the AI Apps plugin with all providers
|
|
168
|
+
cesdk.addPlugin(
|
|
169
|
+
AiApps({
|
|
170
|
+
// IMPORTANT: dryRun mode simulates generation without API calls
|
|
171
|
+
// Perfect for testing and development - remove for production use
|
|
172
|
+
dryRun: true,
|
|
173
|
+
providers: {
|
|
174
|
+
// Text generation and transformation
|
|
175
|
+
text2text: Anthropic.AnthropicProvider({
|
|
176
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
177
|
+
headers: {
|
|
178
|
+
'x-client-version': '1.0.0',
|
|
179
|
+
'x-request-source': 'cesdk-tutorial'
|
|
180
|
+
},
|
|
181
|
+
// Optional: Configure default property values
|
|
182
|
+
properties: {
|
|
183
|
+
temperature: { default: 0.7 },
|
|
184
|
+
maxTokens: { default: 500 }
|
|
185
|
+
}
|
|
186
|
+
}),
|
|
187
|
+
|
|
188
|
+
// Image generation - Multiple providers with selection UI
|
|
189
|
+
text2image: [
|
|
190
|
+
FalAiImage.RecraftV3({
|
|
191
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
192
|
+
headers: {
|
|
193
|
+
'x-client-version': '1.0.0',
|
|
194
|
+
'x-request-source': 'cesdk-tutorial'
|
|
195
|
+
},
|
|
196
|
+
// Add upload middleware to store generated images on your server
|
|
197
|
+
middleware: [
|
|
198
|
+
uploadMiddleware(async (output) => {
|
|
199
|
+
// Upload the generated image to your server
|
|
200
|
+
const result = await uploadToYourStorageServer(output.url);
|
|
201
|
+
|
|
202
|
+
// Return the output with your server's URL
|
|
203
|
+
return {
|
|
204
|
+
...output,
|
|
205
|
+
url: result.permanentUrl
|
|
206
|
+
};
|
|
207
|
+
})
|
|
208
|
+
]
|
|
209
|
+
}),
|
|
210
|
+
// Alternative with icon style support
|
|
211
|
+
FalAiImage.Recraft20b({
|
|
212
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
213
|
+
headers: {
|
|
214
|
+
'x-client-version': '1.0.0',
|
|
215
|
+
'x-request-source': 'cesdk-tutorial'
|
|
216
|
+
},
|
|
217
|
+
// Configure dynamic defaults based on style type
|
|
218
|
+
properties: {
|
|
219
|
+
style: { default: 'broken_line' },
|
|
220
|
+
image_size: { default: 'square_hd' }
|
|
221
|
+
}
|
|
222
|
+
}),
|
|
223
|
+
// Additional image provider for user selection
|
|
224
|
+
OpenAiImage.GptImage1.Text2Image({
|
|
225
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
226
|
+
headers: {
|
|
227
|
+
'x-api-key': 'your-key',
|
|
228
|
+
'x-request-source': 'cesdk-tutorial'
|
|
229
|
+
}
|
|
230
|
+
})
|
|
231
|
+
],
|
|
232
|
+
|
|
233
|
+
// Image-to-image transformation
|
|
234
|
+
image2image: FalAiImage.GeminiFlashEdit({
|
|
235
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
236
|
+
headers: {
|
|
237
|
+
'x-client-version': '1.0.0',
|
|
238
|
+
'x-request-source': 'cesdk-tutorial'
|
|
239
|
+
}
|
|
240
|
+
}),
|
|
241
|
+
|
|
242
|
+
// Video generation - Multiple providers
|
|
243
|
+
text2video: [
|
|
244
|
+
FalAiVideo.MinimaxVideo01Live({
|
|
245
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
246
|
+
headers: {
|
|
247
|
+
'x-client-version': '1.0.0',
|
|
248
|
+
'x-request-source': 'cesdk-tutorial'
|
|
249
|
+
}
|
|
250
|
+
}),
|
|
251
|
+
FalAiVideo.PixverseV35TextToVideo({
|
|
252
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
253
|
+
headers: {
|
|
254
|
+
'x-client-version': '1.0.0',
|
|
255
|
+
'x-request-source': 'cesdk-tutorial'
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
],
|
|
259
|
+
image2video: FalAiVideo.MinimaxVideo01LiveImageToVideo({
|
|
260
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
261
|
+
headers: {
|
|
262
|
+
'x-client-version': '1.0.0',
|
|
263
|
+
'x-request-source': 'cesdk-tutorial'
|
|
264
|
+
}
|
|
265
|
+
}),
|
|
266
|
+
|
|
267
|
+
// Audio generation
|
|
268
|
+
text2speech: Elevenlabs.ElevenMultilingualV2({
|
|
269
|
+
proxyUrl: 'https://your-server.com/api/elevenlabs-proxy',
|
|
270
|
+
headers: {
|
|
271
|
+
'x-client-version': '1.0.0',
|
|
272
|
+
'x-request-source': 'cesdk-tutorial'
|
|
273
|
+
}
|
|
274
|
+
}),
|
|
275
|
+
text2sound: Elevenlabs.ElevenSoundEffects({
|
|
276
|
+
proxyUrl: 'https://your-server.com/api/elevenlabs-proxy',
|
|
277
|
+
headers: {
|
|
278
|
+
'x-client-version': '1.0.0',
|
|
279
|
+
'x-request-source': 'cesdk-tutorial'
|
|
280
|
+
}
|
|
281
|
+
})
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
// Control AI features with Feature API
|
|
287
|
+
// Disable specific quick actions
|
|
288
|
+
cesdk.feature.set(
|
|
289
|
+
'ly.img.plugin-ai-image-generation-web.quickAction.editImage',
|
|
290
|
+
() => false
|
|
291
|
+
);
|
|
292
|
+
cesdk.feature.set(
|
|
293
|
+
'ly.img.plugin-ai-text-generation-web.quickAction.translate',
|
|
294
|
+
() => false
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
// Control input types for image/video generation
|
|
298
|
+
cesdk.feature.set(
|
|
299
|
+
'ly.img.plugin-ai-image-generation-web.fromText',
|
|
300
|
+
() => true
|
|
301
|
+
);
|
|
302
|
+
cesdk.feature.set(
|
|
303
|
+
'ly.img.plugin-ai-image-generation-web.fromImage',
|
|
304
|
+
() => false
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
// Hide provider selection dropdowns
|
|
308
|
+
cesdk.feature.set(
|
|
309
|
+
'ly.img.plugin-ai-image-generation-web.providerSelect',
|
|
310
|
+
() => false
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
// Control style groups for specific providers
|
|
314
|
+
cesdk.feature.set(
|
|
315
|
+
'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.style.vector',
|
|
316
|
+
() => false
|
|
317
|
+
);
|
|
318
|
+
|
|
319
|
+
console.log('AI integration guide initialized.');
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
export default Example;
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
This guide covers installing AI generation packages, initializing CE.SDK, configuring the AI dock and canvas menu, setting up text, image, video, and audio providers, implementing middleware for custom processing, controlling features with the Feature API, and setting up proxy servers for secure API communication.
|
|
327
|
+
|
|
328
|
+
## Prerequisites
|
|
329
|
+
|
|
330
|
+
- Basic knowledge of JavaScript/TypeScript and React
|
|
331
|
+
- Familiarity with CreativeEditor SDK
|
|
332
|
+
- API keys for AI services (Anthropic, fal.ai, ElevenLabs, etc.)
|
|
333
|
+
|
|
334
|
+
## 1. Project Setup
|
|
335
|
+
|
|
336
|
+
First, set up your project and install the necessary packages:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# Initialize a new project or use an existing one
|
|
340
|
+
npm install @cesdk/cesdk-js@$UBQ_VERSION$
|
|
341
|
+
npm install @imgly/plugin-ai-apps-web@$UBQ_VERSION$
|
|
342
|
+
|
|
343
|
+
# Install individual AI generation packages as needed
|
|
344
|
+
npm install @imgly/plugin-ai-image-generation-web@$UBQ_VERSION$
|
|
345
|
+
npm install @imgly/plugin-ai-video-generation-web@$UBQ_VERSION$
|
|
346
|
+
npm install @imgly/plugin-ai-audio-generation-web@$UBQ_VERSION$
|
|
347
|
+
npm install @imgly/plugin-ai-text-generation-web@$UBQ_VERSION$
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Import the providers from their respective packages:
|
|
351
|
+
|
|
352
|
+
```typescript highlight=highlight-imports
|
|
353
|
+
// Import providers from individual AI generation packages
|
|
354
|
+
import Elevenlabs from '@imgly/plugin-ai-audio-generation-web/elevenlabs';
|
|
355
|
+
import FalAiImage from '@imgly/plugin-ai-image-generation-web/fal-ai';
|
|
356
|
+
import OpenAiImage from '@imgly/plugin-ai-image-generation-web/open-ai';
|
|
357
|
+
import Anthropic from '@imgly/plugin-ai-text-generation-web/anthropic';
|
|
358
|
+
import FalAiVideo from '@imgly/plugin-ai-video-generation-web/fal-ai';
|
|
359
|
+
|
|
360
|
+
// Import middleware utilities
|
|
361
|
+
import { uploadMiddleware } from '@imgly/plugin-ai-generation-web';
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## 2. Initialize CE.SDK
|
|
365
|
+
|
|
366
|
+
Initialize CE.SDK to utilize all AI capabilities:
|
|
367
|
+
|
|
368
|
+
```typescript highlight=highlight-setup
|
|
369
|
+
await cesdk.addPlugin(new VideoEditorConfig());
|
|
370
|
+
|
|
371
|
+
// Add asset source plugins
|
|
372
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
373
|
+
await cesdk.addPlugin(new CaptionPresetsAssetSource());
|
|
374
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
375
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
376
|
+
await cesdk.addPlugin(
|
|
377
|
+
new UploadAssetSources({
|
|
378
|
+
include: [
|
|
379
|
+
'ly.img.image.upload',
|
|
380
|
+
'ly.img.video.upload',
|
|
381
|
+
'ly.img.audio.upload'
|
|
382
|
+
]
|
|
383
|
+
})
|
|
384
|
+
);
|
|
385
|
+
await cesdk.addPlugin(
|
|
386
|
+
new DemoAssetSources({
|
|
387
|
+
include: [
|
|
388
|
+
'ly.img.templates.video.*',
|
|
389
|
+
'ly.img.image.*',
|
|
390
|
+
'ly.img.audio.*',
|
|
391
|
+
'ly.img.video.*'
|
|
392
|
+
]
|
|
393
|
+
})
|
|
394
|
+
);
|
|
395
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
396
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
397
|
+
await cesdk.addPlugin(
|
|
398
|
+
new PagePresetsAssetSource({
|
|
399
|
+
include: [
|
|
400
|
+
'ly.img.page.presets.instagram.*',
|
|
401
|
+
'ly.img.page.presets.facebook.*',
|
|
402
|
+
'ly.img.page.presets.x.*',
|
|
403
|
+
'ly.img.page.presets.linkedin.*',
|
|
404
|
+
'ly.img.page.presets.pinterest.*',
|
|
405
|
+
'ly.img.page.presets.tiktok.*',
|
|
406
|
+
'ly.img.page.presets.youtube.*',
|
|
407
|
+
'ly.img.page.presets.video.*'
|
|
408
|
+
]
|
|
409
|
+
})
|
|
410
|
+
);
|
|
411
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
412
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
413
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
414
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
415
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
416
|
+
|
|
417
|
+
await cesdk.actions.run('scene.create', {
|
|
418
|
+
page: {
|
|
419
|
+
sourceId: 'ly.img.page.presets',
|
|
420
|
+
assetId: 'ly.img.page.presets.instagram.story',
|
|
421
|
+
color: { r: 0, g: 0, b: 0, a: 1 }
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
## 3. Configure UI Components
|
|
426
|
+
|
|
427
|
+
### AI Dock Button
|
|
428
|
+
|
|
429
|
+
The main entry point for AI features is the AI dock button. Position it at the beginning of the dock:
|
|
430
|
+
|
|
431
|
+
```typescript highlight=highlight-dock-position
|
|
432
|
+
// Configure AI Apps dock position
|
|
433
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
|
|
434
|
+
'ly.img.ai.apps.dock',
|
|
435
|
+
...cesdk.ui.getComponentOrder({ in: 'ly.img.dock' })
|
|
436
|
+
]);
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Canvas Menu Options
|
|
440
|
+
|
|
441
|
+
AI text and image transformations are available in the canvas context menu:
|
|
442
|
+
|
|
443
|
+
```typescript highlight=highlight-canvas-menu
|
|
444
|
+
// Add AI options to canvas menu
|
|
445
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.canvas.menu' }, [
|
|
446
|
+
'ly.img.ai.text.canvasMenu',
|
|
447
|
+
'ly.img.ai.image.canvasMenu',
|
|
448
|
+
...cesdk.ui.getComponentOrder({ in: 'ly.img.canvas.menu' })
|
|
449
|
+
]);
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
## 4. Add the AI Apps Plugin
|
|
453
|
+
|
|
454
|
+
Configure the AI Apps plugin with all providers:
|
|
455
|
+
|
|
456
|
+
```typescript highlight=highlight-add-plugin
|
|
457
|
+
// Add the AI Apps plugin with all providers
|
|
458
|
+
cesdk.addPlugin(
|
|
459
|
+
AiApps({
|
|
460
|
+
// IMPORTANT: dryRun mode simulates generation without API calls
|
|
461
|
+
// Perfect for testing and development - remove for production use
|
|
462
|
+
dryRun: true,
|
|
463
|
+
providers: {
|
|
464
|
+
// Text generation and transformation
|
|
465
|
+
text2text: Anthropic.AnthropicProvider({
|
|
466
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
467
|
+
headers: {
|
|
468
|
+
'x-client-version': '1.0.0',
|
|
469
|
+
'x-request-source': 'cesdk-tutorial'
|
|
470
|
+
},
|
|
471
|
+
// Optional: Configure default property values
|
|
472
|
+
properties: {
|
|
473
|
+
temperature: { default: 0.7 },
|
|
474
|
+
maxTokens: { default: 500 }
|
|
475
|
+
}
|
|
476
|
+
}),
|
|
477
|
+
|
|
478
|
+
// Image generation - Multiple providers with selection UI
|
|
479
|
+
text2image: [
|
|
480
|
+
FalAiImage.RecraftV3({
|
|
481
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
482
|
+
headers: {
|
|
483
|
+
'x-client-version': '1.0.0',
|
|
484
|
+
'x-request-source': 'cesdk-tutorial'
|
|
485
|
+
},
|
|
486
|
+
// Add upload middleware to store generated images on your server
|
|
487
|
+
middleware: [
|
|
488
|
+
uploadMiddleware(async (output) => {
|
|
489
|
+
// Upload the generated image to your server
|
|
490
|
+
const result = await uploadToYourStorageServer(output.url);
|
|
491
|
+
|
|
492
|
+
// Return the output with your server's URL
|
|
493
|
+
return {
|
|
494
|
+
...output,
|
|
495
|
+
url: result.permanentUrl
|
|
496
|
+
};
|
|
497
|
+
})
|
|
498
|
+
]
|
|
499
|
+
}),
|
|
500
|
+
// Alternative with icon style support
|
|
501
|
+
FalAiImage.Recraft20b({
|
|
502
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
503
|
+
headers: {
|
|
504
|
+
'x-client-version': '1.0.0',
|
|
505
|
+
'x-request-source': 'cesdk-tutorial'
|
|
506
|
+
},
|
|
507
|
+
// Configure dynamic defaults based on style type
|
|
508
|
+
properties: {
|
|
509
|
+
style: { default: 'broken_line' },
|
|
510
|
+
image_size: { default: 'square_hd' }
|
|
511
|
+
}
|
|
512
|
+
}),
|
|
513
|
+
// Additional image provider for user selection
|
|
514
|
+
OpenAiImage.GptImage1.Text2Image({
|
|
515
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
516
|
+
headers: {
|
|
517
|
+
'x-api-key': 'your-key',
|
|
518
|
+
'x-request-source': 'cesdk-tutorial'
|
|
519
|
+
}
|
|
520
|
+
})
|
|
521
|
+
],
|
|
522
|
+
|
|
523
|
+
// Image-to-image transformation
|
|
524
|
+
image2image: FalAiImage.GeminiFlashEdit({
|
|
525
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
526
|
+
headers: {
|
|
527
|
+
'x-client-version': '1.0.0',
|
|
528
|
+
'x-request-source': 'cesdk-tutorial'
|
|
529
|
+
}
|
|
530
|
+
}),
|
|
531
|
+
|
|
532
|
+
// Video generation - Multiple providers
|
|
533
|
+
text2video: [
|
|
534
|
+
FalAiVideo.MinimaxVideo01Live({
|
|
535
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
536
|
+
headers: {
|
|
537
|
+
'x-client-version': '1.0.0',
|
|
538
|
+
'x-request-source': 'cesdk-tutorial'
|
|
539
|
+
}
|
|
540
|
+
}),
|
|
541
|
+
FalAiVideo.PixverseV35TextToVideo({
|
|
542
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
543
|
+
headers: {
|
|
544
|
+
'x-client-version': '1.0.0',
|
|
545
|
+
'x-request-source': 'cesdk-tutorial'
|
|
546
|
+
}
|
|
547
|
+
})
|
|
548
|
+
],
|
|
549
|
+
image2video: FalAiVideo.MinimaxVideo01LiveImageToVideo({
|
|
550
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
551
|
+
headers: {
|
|
552
|
+
'x-client-version': '1.0.0',
|
|
553
|
+
'x-request-source': 'cesdk-tutorial'
|
|
554
|
+
}
|
|
555
|
+
}),
|
|
556
|
+
|
|
557
|
+
// Audio generation
|
|
558
|
+
text2speech: Elevenlabs.ElevenMultilingualV2({
|
|
559
|
+
proxyUrl: 'https://your-server.com/api/elevenlabs-proxy',
|
|
560
|
+
headers: {
|
|
561
|
+
'x-client-version': '1.0.0',
|
|
562
|
+
'x-request-source': 'cesdk-tutorial'
|
|
563
|
+
}
|
|
564
|
+
}),
|
|
565
|
+
text2sound: Elevenlabs.ElevenSoundEffects({
|
|
566
|
+
proxyUrl: 'https://your-server.com/api/elevenlabs-proxy',
|
|
567
|
+
headers: {
|
|
568
|
+
'x-client-version': '1.0.0',
|
|
569
|
+
'x-request-source': 'cesdk-tutorial'
|
|
570
|
+
}
|
|
571
|
+
})
|
|
572
|
+
}
|
|
573
|
+
})
|
|
574
|
+
);
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
### Testing with Dry-Run Mode
|
|
578
|
+
|
|
579
|
+
During development, use `dryRun: true` to simulate AI generation without making actual API calls:
|
|
580
|
+
|
|
581
|
+
```typescript highlight=highlight-dry-run
|
|
582
|
+
// IMPORTANT: dryRun mode simulates generation without API calls
|
|
583
|
+
// Perfect for testing and development - remove for production use
|
|
584
|
+
dryRun: true,
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
This helps verify your integration and UI flows without incurring API costs or requiring valid API keys.
|
|
588
|
+
|
|
589
|
+
## 5. AI Provider Configuration
|
|
590
|
+
|
|
591
|
+
Each AI provider type serves a specific purpose and creates different types of content:
|
|
592
|
+
|
|
593
|
+
### Text Generation (Anthropic)
|
|
594
|
+
|
|
595
|
+
```typescript highlight=highlight-text-provider
|
|
596
|
+
// Text generation and transformation
|
|
597
|
+
text2text: Anthropic.AnthropicProvider({
|
|
598
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
599
|
+
headers: {
|
|
600
|
+
'x-client-version': '1.0.0',
|
|
601
|
+
'x-request-source': 'cesdk-tutorial'
|
|
602
|
+
},
|
|
603
|
+
// Optional: Configure default property values
|
|
604
|
+
properties: {
|
|
605
|
+
temperature: { default: 0.7 },
|
|
606
|
+
maxTokens: { default: 500 }
|
|
607
|
+
}
|
|
608
|
+
}),
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
The text provider enables capabilities like:
|
|
612
|
+
|
|
613
|
+
- Improving writing quality
|
|
614
|
+
- Fixing spelling and grammar
|
|
615
|
+
- Making text shorter or longer
|
|
616
|
+
- Changing tone (professional, casual, friendly)
|
|
617
|
+
- Translating to different languages
|
|
618
|
+
- Custom text transformations
|
|
619
|
+
|
|
620
|
+
### Image Generation
|
|
621
|
+
|
|
622
|
+
Configure multiple image providers with selection UI:
|
|
623
|
+
|
|
624
|
+
```typescript highlight=highlight-image-providers
|
|
625
|
+
// Image generation - Multiple providers with selection UI
|
|
626
|
+
text2image: [
|
|
627
|
+
FalAiImage.RecraftV3({
|
|
628
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
629
|
+
headers: {
|
|
630
|
+
'x-client-version': '1.0.0',
|
|
631
|
+
'x-request-source': 'cesdk-tutorial'
|
|
632
|
+
},
|
|
633
|
+
// Add upload middleware to store generated images on your server
|
|
634
|
+
middleware: [
|
|
635
|
+
uploadMiddleware(async (output) => {
|
|
636
|
+
// Upload the generated image to your server
|
|
637
|
+
const result = await uploadToYourStorageServer(output.url);
|
|
638
|
+
|
|
639
|
+
// Return the output with your server's URL
|
|
640
|
+
return {
|
|
641
|
+
...output,
|
|
642
|
+
url: result.permanentUrl
|
|
643
|
+
};
|
|
644
|
+
})
|
|
645
|
+
]
|
|
646
|
+
}),
|
|
647
|
+
// Alternative with icon style support
|
|
648
|
+
FalAiImage.Recraft20b({
|
|
649
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
650
|
+
headers: {
|
|
651
|
+
'x-client-version': '1.0.0',
|
|
652
|
+
'x-request-source': 'cesdk-tutorial'
|
|
653
|
+
},
|
|
654
|
+
// Configure dynamic defaults based on style type
|
|
655
|
+
properties: {
|
|
656
|
+
style: { default: 'broken_line' },
|
|
657
|
+
image_size: { default: 'square_hd' }
|
|
658
|
+
}
|
|
659
|
+
}),
|
|
660
|
+
// Additional image provider for user selection
|
|
661
|
+
OpenAiImage.GptImage1.Text2Image({
|
|
662
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy',
|
|
663
|
+
headers: {
|
|
664
|
+
'x-api-key': 'your-key',
|
|
665
|
+
'x-request-source': 'cesdk-tutorial'
|
|
666
|
+
}
|
|
667
|
+
})
|
|
668
|
+
],
|
|
669
|
+
|
|
670
|
+
// Image-to-image transformation
|
|
671
|
+
image2image: FalAiImage.GeminiFlashEdit({
|
|
672
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
673
|
+
headers: {
|
|
674
|
+
'x-client-version': '1.0.0',
|
|
675
|
+
'x-request-source': 'cesdk-tutorial'
|
|
676
|
+
}
|
|
677
|
+
}),
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
When multiple providers are configured, users will see a selection box to choose between them.
|
|
681
|
+
|
|
682
|
+
Image generation features include:
|
|
683
|
+
|
|
684
|
+
- Creating images from text descriptions
|
|
685
|
+
- Multiple style options (realistic, illustration, vector)
|
|
686
|
+
- Various size presets and custom dimensions
|
|
687
|
+
- Transforming existing images based on text prompts
|
|
688
|
+
|
|
689
|
+
### Video Generation
|
|
690
|
+
|
|
691
|
+
```typescript highlight=highlight-video-providers
|
|
692
|
+
// Video generation - Multiple providers
|
|
693
|
+
text2video: [
|
|
694
|
+
FalAiVideo.MinimaxVideo01Live({
|
|
695
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
696
|
+
headers: {
|
|
697
|
+
'x-client-version': '1.0.0',
|
|
698
|
+
'x-request-source': 'cesdk-tutorial'
|
|
699
|
+
}
|
|
700
|
+
}),
|
|
701
|
+
FalAiVideo.PixverseV35TextToVideo({
|
|
702
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
703
|
+
headers: {
|
|
704
|
+
'x-client-version': '1.0.0',
|
|
705
|
+
'x-request-source': 'cesdk-tutorial'
|
|
706
|
+
}
|
|
707
|
+
})
|
|
708
|
+
],
|
|
709
|
+
image2video: FalAiVideo.MinimaxVideo01LiveImageToVideo({
|
|
710
|
+
proxyUrl: 'https://your-server.com/api/fal-ai-proxy',
|
|
711
|
+
headers: {
|
|
712
|
+
'x-client-version': '1.0.0',
|
|
713
|
+
'x-request-source': 'cesdk-tutorial'
|
|
714
|
+
}
|
|
715
|
+
}),
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
Video generation capabilities include:
|
|
719
|
+
|
|
720
|
+
- Creating videos from text descriptions
|
|
721
|
+
- Transforming still images into videos
|
|
722
|
+
- Fixed output dimensions (typically 1280×720)
|
|
723
|
+
- 5-second video duration
|
|
724
|
+
|
|
725
|
+
### Audio Generation (ElevenLabs)
|
|
726
|
+
|
|
727
|
+
```typescript highlight=highlight-audio-providers
|
|
728
|
+
// Audio generation
|
|
729
|
+
text2speech: Elevenlabs.ElevenMultilingualV2({
|
|
730
|
+
proxyUrl: 'https://your-server.com/api/elevenlabs-proxy',
|
|
731
|
+
headers: {
|
|
732
|
+
'x-client-version': '1.0.0',
|
|
733
|
+
'x-request-source': 'cesdk-tutorial'
|
|
734
|
+
}
|
|
735
|
+
}),
|
|
736
|
+
text2sound: Elevenlabs.ElevenSoundEffects({
|
|
737
|
+
proxyUrl: 'https://your-server.com/api/elevenlabs-proxy',
|
|
738
|
+
headers: {
|
|
739
|
+
'x-client-version': '1.0.0',
|
|
740
|
+
'x-request-source': 'cesdk-tutorial'
|
|
741
|
+
}
|
|
742
|
+
})
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
Audio generation features include:
|
|
746
|
+
|
|
747
|
+
- Text-to-speech with multiple voices
|
|
748
|
+
- Multilingual support
|
|
749
|
+
- Adjustable speaking speed
|
|
750
|
+
- Sound effect generation from text descriptions
|
|
751
|
+
- Creating ambient sounds and effects
|
|
752
|
+
|
|
753
|
+
## 6. Using Middleware
|
|
754
|
+
|
|
755
|
+
The AI generation framework supports middleware that can enhance or modify the generation process. Middleware functions are executed in sequence and can perform operations before generation, after generation, or both.
|
|
756
|
+
|
|
757
|
+
### Upload Middleware
|
|
758
|
+
|
|
759
|
+
The `uploadMiddleware` is useful when you need to store generated content on your server before it's used. First, create a helper function for your storage server:
|
|
760
|
+
|
|
761
|
+
```typescript highlight=highlight-upload-function
|
|
762
|
+
/**
|
|
763
|
+
* Upload to your image storage server.
|
|
764
|
+
* Replace this mock with your actual storage API call.
|
|
765
|
+
*/
|
|
766
|
+
async function uploadToYourStorageServer(imageUrl: string) {
|
|
767
|
+
// In production, upload the image to your server:
|
|
768
|
+
// const response = await fetch('https://your-server.com/api/store-image', {
|
|
769
|
+
// method: 'POST',
|
|
770
|
+
// headers: { 'Content-Type': 'application/json' },
|
|
771
|
+
// body: JSON.stringify({
|
|
772
|
+
// imageUrl,
|
|
773
|
+
// metadata: { source: 'ai-generation' }
|
|
774
|
+
// })
|
|
775
|
+
// });
|
|
776
|
+
// return await response.json();
|
|
777
|
+
|
|
778
|
+
// Mock: Return a fake response
|
|
779
|
+
return { permanentUrl: imageUrl };
|
|
780
|
+
}
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
Then use `uploadMiddleware` to process generated outputs before they're added to the scene:
|
|
784
|
+
|
|
785
|
+
```typescript highlight=highlight-upload-middleware
|
|
786
|
+
// Add upload middleware to store generated images on your server
|
|
787
|
+
middleware: [
|
|
788
|
+
uploadMiddleware(async (output) => {
|
|
789
|
+
// Upload the generated image to your server
|
|
790
|
+
const result = await uploadToYourStorageServer(output.url);
|
|
791
|
+
|
|
792
|
+
// Return the output with your server's URL
|
|
793
|
+
return {
|
|
794
|
+
...output,
|
|
795
|
+
url: result.permanentUrl
|
|
796
|
+
};
|
|
797
|
+
})
|
|
798
|
+
];
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
Use cases for upload middleware:
|
|
802
|
+
|
|
803
|
+
- Storing generated assets in your own cloud storage
|
|
804
|
+
- Adding watermarks or processing assets before use
|
|
805
|
+
- Tracking/logging generated content
|
|
806
|
+
- Implementing licensing or rights management
|
|
807
|
+
|
|
808
|
+
### Rate Limiting Middleware
|
|
809
|
+
|
|
810
|
+
To prevent abuse of AI services, you can implement rate limiting:
|
|
811
|
+
|
|
812
|
+
```typescript
|
|
813
|
+
import { rateLimitMiddleware } from '@imgly/plugin-ai-generation-web';
|
|
814
|
+
|
|
815
|
+
// In your provider configuration
|
|
816
|
+
middleware: [
|
|
817
|
+
rateLimitMiddleware({
|
|
818
|
+
maxRequests: 10,
|
|
819
|
+
timeWindowMs: 60 * 60 * 1000, // 1 hour
|
|
820
|
+
onRateLimitExceeded: (input, options, info) => {
|
|
821
|
+
// Show a notice to the user
|
|
822
|
+
console.log(
|
|
823
|
+
`Rate limit reached: ${info.currentCount}/${info.maxRequests}`
|
|
824
|
+
);
|
|
825
|
+
return false; // Reject the request
|
|
826
|
+
}
|
|
827
|
+
})
|
|
828
|
+
];
|
|
829
|
+
```
|
|
830
|
+
|
|
831
|
+
### Custom Error Handling Middleware
|
|
832
|
+
|
|
833
|
+
You can create custom middleware for error handling:
|
|
834
|
+
|
|
835
|
+
```typescript
|
|
836
|
+
const errorMiddleware = async (input, options, next) => {
|
|
837
|
+
try {
|
|
838
|
+
return await next(input, options);
|
|
839
|
+
} catch (error) {
|
|
840
|
+
// Handle error (show UI notification, log, etc.)
|
|
841
|
+
console.error('Generation failed:', error);
|
|
842
|
+
// You can rethrow or return a fallback
|
|
843
|
+
throw error;
|
|
844
|
+
}
|
|
845
|
+
};
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
### Middleware Order
|
|
849
|
+
|
|
850
|
+
The order of middleware is important - they're executed in the sequence provided:
|
|
851
|
+
|
|
852
|
+
```typescript
|
|
853
|
+
middleware: [
|
|
854
|
+
// Executes first
|
|
855
|
+
rateLimitMiddleware({ maxRequests: 10, timeWindowMs: 3600000 }),
|
|
856
|
+
|
|
857
|
+
// Executes second (only if rate limit wasn't exceeded)
|
|
858
|
+
loggingMiddleware(),
|
|
859
|
+
|
|
860
|
+
// Executes third (after generation completes)
|
|
861
|
+
uploadMiddleware(async (output) => {
|
|
862
|
+
/* ... */
|
|
863
|
+
})
|
|
864
|
+
];
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
## 7. Controlling Features with Feature API
|
|
868
|
+
|
|
869
|
+
You can control which AI features are available to users using CE.SDK's Feature API:
|
|
870
|
+
|
|
871
|
+
```typescript highlight=highlight-feature-control
|
|
872
|
+
// Control AI features with Feature API
|
|
873
|
+
// Disable specific quick actions
|
|
874
|
+
cesdk.feature.set(
|
|
875
|
+
'ly.img.plugin-ai-image-generation-web.quickAction.editImage',
|
|
876
|
+
() => false
|
|
877
|
+
);
|
|
878
|
+
cesdk.feature.set(
|
|
879
|
+
'ly.img.plugin-ai-text-generation-web.quickAction.translate',
|
|
880
|
+
() => false
|
|
881
|
+
);
|
|
882
|
+
|
|
883
|
+
// Control input types for image/video generation
|
|
884
|
+
cesdk.feature.set('ly.img.plugin-ai-image-generation-web.fromText', () => true);
|
|
885
|
+
cesdk.feature.set(
|
|
886
|
+
'ly.img.plugin-ai-image-generation-web.fromImage',
|
|
887
|
+
() => false
|
|
888
|
+
);
|
|
889
|
+
|
|
890
|
+
// Hide provider selection dropdowns
|
|
891
|
+
cesdk.feature.set(
|
|
892
|
+
'ly.img.plugin-ai-image-generation-web.providerSelect',
|
|
893
|
+
() => false
|
|
894
|
+
);
|
|
895
|
+
|
|
896
|
+
// Control style groups for specific providers
|
|
897
|
+
cesdk.feature.set(
|
|
898
|
+
'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.style.vector',
|
|
899
|
+
() => false
|
|
900
|
+
);
|
|
901
|
+
```
|
|
902
|
+
|
|
903
|
+
This is useful for:
|
|
904
|
+
|
|
905
|
+
- Creating different feature tiers for different user groups
|
|
906
|
+
- Simplifying the UI by hiding unused features
|
|
907
|
+
- Temporarily disabling features during maintenance
|
|
908
|
+
|
|
909
|
+
For more details on available feature flags, see the [@imgly/plugin-ai-generation-web documentation](https://github.com/imgly/plugins/tree/release-$UBQ_VERSION$/packages/plugin-ai-generation-web#available-feature-flags).
|
|
910
|
+
|
|
911
|
+
## 8. Proxy Server Configuration
|
|
912
|
+
|
|
913
|
+
For security reasons, you should never include your AI service API keys directly in client-side code. Instead, you should set up proxy services that securely forward requests to AI providers while keeping your API keys secure on the server side.
|
|
914
|
+
|
|
915
|
+
Each AI provider configuration requires a `proxyUrl` parameter, which should point to your server-side endpoint that handles authentication and forwards requests to the AI service:
|
|
916
|
+
|
|
917
|
+
```typescript
|
|
918
|
+
text2image: FalAiImage.RecraftV3({
|
|
919
|
+
proxyUrl: 'http://your-proxy-server.com/api/proxy'
|
|
920
|
+
});
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
Your proxy server should handle authentication, forward requests to the appropriate AI service providers, and manage response streaming for optimal performance.
|
|
924
|
+
|
|
925
|
+
## API Reference
|
|
926
|
+
|
|
927
|
+
| Method | Category | Purpose |
|
|
928
|
+
| ----------------------------------------------------------------- | ---------- | ------------------------------------------------------------ |
|
|
929
|
+
| `cesdk.addPlugin()` | Plugin | Register and initialize the AI Apps plugin with CE.SDK |
|
|
930
|
+
| `AiApps()` | Plugin | Create unified plugin instance with all AI provider types |
|
|
931
|
+
| `Anthropic.AnthropicProvider()` | Text | Configure Claude for text generation and transformation |
|
|
932
|
+
| `FalAiImage.RecraftV3()` | Image | Configure RecraftV3 text-to-image with vector/raster support |
|
|
933
|
+
| `FalAiImage.Recraft20b()` | Image | Configure Recraft20b text-to-image with icon styles |
|
|
934
|
+
| `FalAiImage.GeminiFlashEdit()` | Image | Configure Gemini Flash for image-to-image transformation |
|
|
935
|
+
| `OpenAiImage.GptImage1.Text2Image()` | Image | Configure GPT Image for text-to-image generation |
|
|
936
|
+
| `FalAiVideo.MinimaxVideo01Live()` | Video | Configure Minimax Video for text-to-video generation |
|
|
937
|
+
| `FalAiVideo.MinimaxVideo01LiveImageToVideo()` | Video | Configure Minimax Video for image-to-video transformation |
|
|
938
|
+
| `FalAiVideo.PixverseV35TextToVideo()` | Video | Configure Pixverse for text-to-video generation |
|
|
939
|
+
| `Elevenlabs.ElevenMultilingualV2()` | Audio | Configure ElevenLabs for multilingual text-to-speech |
|
|
940
|
+
| `Elevenlabs.ElevenSoundEffects()` | Audio | Configure ElevenLabs for sound effect generation |
|
|
941
|
+
| `uploadMiddleware()` | Middleware | Process and store generated outputs before use |
|
|
942
|
+
| `rateLimitMiddleware()` | Middleware | Limit generation requests per time window |
|
|
943
|
+
| `cesdk.feature.enable()` | Feature | Control visibility of AI features and providers |
|
|
944
|
+
| `cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, order)` | UI | Position AI Apps button in the dock |
|
|
945
|
+
| `cesdk.ui.setComponentOrder({ in: 'ly.img.canvas.menu' }, order)` | UI | Add AI options to canvas context menu |
|
|
946
|
+
| `engine.asset.findAssets()` | Asset | Query generated assets from provider history sources |
|
|
947
|
+
|
|
948
|
+
## Next Steps
|
|
949
|
+
|
|
950
|
+
- [IMG.LY AI Gateway](./user-interface/ai-integration/gateway-provider.md) — The easiest integration path: managed proxy, auth, and billing
|
|
951
|
+
- [Proxy Server](./user-interface/ai-integration/proxy-server.md) — Set up secure API communication for production
|
|
952
|
+
- [Text Generation](./user-interface/ai-integration/text-generation.md) — Deep dive into text generation and transformation
|
|
953
|
+
- [Image Generation](./user-interface/ai-integration/image-generation.md) — Advanced image generation configuration
|
|
954
|
+
- [Video Generation](./user-interface/ai-integration/video-generation.md) — Video generation with multiple providers
|
|
955
|
+
- [Audio Generation](./user-interface/ai-integration/audio-generation.md) — Text-to-speech and sound effects
|
|
956
|
+
- [Custom Provider](./user-interface/ai-integration/custom-provider.md) — Create custom AI providers
|
|
957
|
+
- [Asset Library Basics](./import-media/asset-panel/basics.md) — Work with generated assets
|
|
958
|
+
|
|
959
|
+
---
|
|
960
|
+
|
|
961
|
+
## More Resources
|
|
962
|
+
|
|
963
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
964
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
965
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
966
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|