@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,853 @@
|
|
|
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) > [Custom AI Provider](./user-interface/ai-integration/custom-provider.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Build a custom AI-powered image generation provider for CE.SDK using the `@imgly/plugin-ai-generation-web` package. You'll implement an AI provider from scratch using the schema-based approach and integrate it seamlessly with the editor.
|
|
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)
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples)
|
|
18
|
+
> - [Live demo](https://img.ly/docs/cesdk/examples/guides-user-interface-ai-integration-custom-provider-browser/)
|
|
19
|
+
|
|
20
|
+
This guide walks you through creating an image generation provider that connects to your own AI service. You'll learn about the provider interface, OpenAPI schema-based input configuration, quick actions, middleware patterns, and CE.SDK integration.
|
|
21
|
+
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-user-interface-ai-integration-custom-provider-browser/browser.ts reference-only
|
|
23
|
+
import type { EditorPlugin, EditorPluginContext } from '@cesdk/cesdk-js';
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
BlurAssetSource,
|
|
27
|
+
ColorPaletteAssetSource,
|
|
28
|
+
CropPresetsAssetSource,
|
|
29
|
+
DemoAssetSources,
|
|
30
|
+
EffectsAssetSource,
|
|
31
|
+
FiltersAssetSource,
|
|
32
|
+
PagePresetsAssetSource,
|
|
33
|
+
StickerAssetSource,
|
|
34
|
+
TextAssetSource,
|
|
35
|
+
TextComponentAssetSource,
|
|
36
|
+
TypefaceAssetSource,
|
|
37
|
+
UploadAssetSources,
|
|
38
|
+
VectorShapeAssetSource
|
|
39
|
+
} from '@cesdk/cesdk-js/plugins';
|
|
40
|
+
import { DesignEditorConfig } from './design-editor/plugin';
|
|
41
|
+
import {
|
|
42
|
+
CommonProviderConfiguration,
|
|
43
|
+
ImageOutput,
|
|
44
|
+
Provider,
|
|
45
|
+
loggingMiddleware,
|
|
46
|
+
uploadMiddleware
|
|
47
|
+
} from '@imgly/plugin-ai-generation-web';
|
|
48
|
+
import ImageGeneration from '@imgly/plugin-ai-image-generation-web';
|
|
49
|
+
import type CreativeEditorSDK from '@cesdk/cesdk-js';
|
|
50
|
+
import packageJson from './package.json';
|
|
51
|
+
import apiSchema from './myApiSchema.json';
|
|
52
|
+
|
|
53
|
+
// Define your input type based on your schema
|
|
54
|
+
interface MyProviderInput {
|
|
55
|
+
prompt: string;
|
|
56
|
+
width: number;
|
|
57
|
+
height: number;
|
|
58
|
+
style: string;
|
|
59
|
+
image_url?: string; // For image-to-image operations
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Define provider configuration interface extending CommonProviderConfiguration
|
|
63
|
+
interface MyProviderConfiguration extends CommonProviderConfiguration<
|
|
64
|
+
MyProviderInput,
|
|
65
|
+
ImageOutput
|
|
66
|
+
> {
|
|
67
|
+
// Add any provider-specific configuration here
|
|
68
|
+
customApiKey?: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Mock API function that simulates image generation
|
|
72
|
+
// In production, this would be replaced with actual API calls
|
|
73
|
+
async function mockGenerateImage(
|
|
74
|
+
input: MyProviderInput,
|
|
75
|
+
_abortSignal?: AbortSignal
|
|
76
|
+
): Promise<{ imageUrl: string }> {
|
|
77
|
+
// Simulate network delay
|
|
78
|
+
await new Promise((resolve) => setTimeout(resolve, 1500));
|
|
79
|
+
|
|
80
|
+
// Return real demo image URLs based on the style
|
|
81
|
+
const sampleImages: Record<string, string> = {
|
|
82
|
+
photorealistic:
|
|
83
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.image/images/sample_1.jpg',
|
|
84
|
+
cartoon:
|
|
85
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.image/images/sample_2.jpg',
|
|
86
|
+
sketch:
|
|
87
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.image/images/sample_3.jpg',
|
|
88
|
+
painting:
|
|
89
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.image/images/sample_4.jpg'
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
imageUrl: sampleImages[input.style] || sampleImages.photorealistic
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Create a function that returns your provider
|
|
98
|
+
export function MyImageProvider(
|
|
99
|
+
_config: MyProviderConfiguration
|
|
100
|
+
): (context: {
|
|
101
|
+
cesdk: CreativeEditorSDK;
|
|
102
|
+
}) => Promise<Provider<'image', MyProviderInput, ImageOutput>> {
|
|
103
|
+
// Return a function that returns the provider
|
|
104
|
+
return async ({ cesdk: _cesdk }) => {
|
|
105
|
+
// Create and return the provider
|
|
106
|
+
const provider: Provider<'image', MyProviderInput, ImageOutput> = {
|
|
107
|
+
// Unique identifier for your provider
|
|
108
|
+
id: 'my-image-provider',
|
|
109
|
+
|
|
110
|
+
// Define output type as 'image'
|
|
111
|
+
kind: 'image',
|
|
112
|
+
|
|
113
|
+
// Initialize your provider
|
|
114
|
+
initialize: async () => {
|
|
115
|
+
console.log('Initializing my image provider');
|
|
116
|
+
// Any setup needed (e.g., API client initialization)
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
// Define input panel and UI using schema
|
|
120
|
+
input: {
|
|
121
|
+
panel: {
|
|
122
|
+
type: 'schema',
|
|
123
|
+
document: apiSchema, // Your OpenAPI schema
|
|
124
|
+
inputReference: '#/components/schemas/GenerationInput', // Reference to your input schema
|
|
125
|
+
userFlow: 'placeholder', // Creates a block first, then updates it with the generated content
|
|
126
|
+
orderExtensionKeyword: 'x-order-properties', // Used to control property display order
|
|
127
|
+
|
|
128
|
+
// Convert API input to block parameters
|
|
129
|
+
getBlockInput: async (input) => ({
|
|
130
|
+
image: {
|
|
131
|
+
width: input.width || 512,
|
|
132
|
+
height: input.height || 512,
|
|
133
|
+
label: `AI: ${input.prompt?.substring(0, 20)}...`
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
// Add quick actions for canvas menu
|
|
139
|
+
quickActions: {
|
|
140
|
+
supported: {
|
|
141
|
+
// Map quick action IDs to provider input transformations
|
|
142
|
+
'ly.img.editImage': {
|
|
143
|
+
mapInput: (quickActionInput) => ({
|
|
144
|
+
prompt: quickActionInput.prompt,
|
|
145
|
+
image_url: quickActionInput.uri,
|
|
146
|
+
width: 512,
|
|
147
|
+
height: 512,
|
|
148
|
+
style: 'photorealistic'
|
|
149
|
+
})
|
|
150
|
+
},
|
|
151
|
+
'ly.img.swapBackground': {
|
|
152
|
+
mapInput: (quickActionInput) => ({
|
|
153
|
+
prompt: quickActionInput.prompt,
|
|
154
|
+
image_url: quickActionInput.uri,
|
|
155
|
+
width: 512,
|
|
156
|
+
height: 512,
|
|
157
|
+
style: 'photorealistic'
|
|
158
|
+
})
|
|
159
|
+
},
|
|
160
|
+
'ly.img.createVariant': {
|
|
161
|
+
mapInput: (quickActionInput) => ({
|
|
162
|
+
prompt: quickActionInput.prompt,
|
|
163
|
+
image_url: quickActionInput.uri,
|
|
164
|
+
width: 512,
|
|
165
|
+
height: 512,
|
|
166
|
+
style: 'photorealistic'
|
|
167
|
+
})
|
|
168
|
+
},
|
|
169
|
+
'ly.img.styleTransfer': {
|
|
170
|
+
mapInput: (quickActionInput) => ({
|
|
171
|
+
prompt: quickActionInput.style,
|
|
172
|
+
image_url: quickActionInput.uri,
|
|
173
|
+
width: 512,
|
|
174
|
+
height: 512,
|
|
175
|
+
style: 'photorealistic'
|
|
176
|
+
})
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
// Define output generation behavior
|
|
183
|
+
output: {
|
|
184
|
+
// Allow cancellation of generation
|
|
185
|
+
abortable: true,
|
|
186
|
+
|
|
187
|
+
// Store generated assets in browser's IndexedDB
|
|
188
|
+
history: '@imgly/indexedDB',
|
|
189
|
+
|
|
190
|
+
// Add middleware for logging and uploading
|
|
191
|
+
middleware: [
|
|
192
|
+
loggingMiddleware({ enable: true }),
|
|
193
|
+
// Example of upload middleware that stores generated images on your server
|
|
194
|
+
uploadMiddleware(async (output: ImageOutput) => {
|
|
195
|
+
// In production, upload the image to your server
|
|
196
|
+
// For this example, we just return the output as-is
|
|
197
|
+
console.log('Upload middleware: Processing output', output.url);
|
|
198
|
+
return output;
|
|
199
|
+
}),
|
|
200
|
+
// Custom error handling middleware
|
|
201
|
+
async (input, options, next) => {
|
|
202
|
+
try {
|
|
203
|
+
return await next(input, options);
|
|
204
|
+
} catch (error: any) {
|
|
205
|
+
// Prevent default error notification
|
|
206
|
+
options.preventDefault();
|
|
207
|
+
|
|
208
|
+
// Show custom error notification
|
|
209
|
+
options.cesdk?.ui.showNotification({
|
|
210
|
+
type: 'error',
|
|
211
|
+
message: `Image generation failed: ${error.message}`
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
throw error;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
|
|
219
|
+
// Configure success/error notifications
|
|
220
|
+
notification: {
|
|
221
|
+
success: {
|
|
222
|
+
show: true,
|
|
223
|
+
message: 'Image generated successfully!'
|
|
224
|
+
},
|
|
225
|
+
error: {
|
|
226
|
+
show: true,
|
|
227
|
+
message: (context) => `Generation failed: ${context.error}`
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
// The core generation function
|
|
232
|
+
generate: async (input, { abortSignal }) => {
|
|
233
|
+
try {
|
|
234
|
+
// Use mock API for demonstration
|
|
235
|
+
// In production, replace with actual API call:
|
|
236
|
+
// const response = await fetch(config.proxyUrl, { ... });
|
|
237
|
+
const data = await mockGenerateImage(input, abortSignal);
|
|
238
|
+
|
|
239
|
+
// Return the image URL
|
|
240
|
+
return {
|
|
241
|
+
kind: 'image',
|
|
242
|
+
url: data.imageUrl
|
|
243
|
+
};
|
|
244
|
+
} catch (error) {
|
|
245
|
+
console.error('Image generation failed:', error);
|
|
246
|
+
throw error;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
return provider;
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
class Example implements EditorPlugin {
|
|
257
|
+
name = packageJson.name;
|
|
258
|
+
version = packageJson.version;
|
|
259
|
+
|
|
260
|
+
async initialize({ cesdk }: EditorPluginContext): Promise<void> {
|
|
261
|
+
if (!cesdk) {
|
|
262
|
+
throw new Error('CE.SDK instance is required for this plugin');
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
await cesdk.addPlugin(new DesignEditorConfig());
|
|
266
|
+
|
|
267
|
+
// Add asset source plugins
|
|
268
|
+
await cesdk.addPlugin(new BlurAssetSource());
|
|
269
|
+
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
270
|
+
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
271
|
+
await cesdk.addPlugin(
|
|
272
|
+
new UploadAssetSources({ include: ['ly.img.image.upload'] })
|
|
273
|
+
);
|
|
274
|
+
await cesdk.addPlugin(
|
|
275
|
+
new DemoAssetSources({
|
|
276
|
+
include: [
|
|
277
|
+
'ly.img.templates.blank.*',
|
|
278
|
+
'ly.img.templates.presentation.*',
|
|
279
|
+
'ly.img.templates.print.*',
|
|
280
|
+
'ly.img.templates.social.*',
|
|
281
|
+
'ly.img.image.*'
|
|
282
|
+
]
|
|
283
|
+
})
|
|
284
|
+
);
|
|
285
|
+
await cesdk.addPlugin(new EffectsAssetSource());
|
|
286
|
+
await cesdk.addPlugin(new FiltersAssetSource());
|
|
287
|
+
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
288
|
+
await cesdk.addPlugin(new StickerAssetSource());
|
|
289
|
+
await cesdk.addPlugin(new TextAssetSource());
|
|
290
|
+
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
291
|
+
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
292
|
+
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
293
|
+
|
|
294
|
+
await cesdk.actions.run('scene.create', {
|
|
295
|
+
page: {
|
|
296
|
+
sourceId: 'ly.img.page.presets',
|
|
297
|
+
assetId: 'ly.img.page.presets.print.iso.a6.landscape'
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
// Add translations for the custom provider
|
|
302
|
+
cesdk.i18n.setTranslations({
|
|
303
|
+
en: {
|
|
304
|
+
'panel.my-image-provider.generate': 'Generate Image'
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Add your image generation provider
|
|
309
|
+
await cesdk.addPlugin(
|
|
310
|
+
ImageGeneration({
|
|
311
|
+
providers: {
|
|
312
|
+
text2image: MyImageProvider({
|
|
313
|
+
proxyUrl: 'https://your-proxy-server.com/api/proxy',
|
|
314
|
+
headers: {
|
|
315
|
+
'x-client-version': '1.0.0',
|
|
316
|
+
'x-request-source': 'cesdk-tutorial'
|
|
317
|
+
}
|
|
318
|
+
})
|
|
319
|
+
},
|
|
320
|
+
debug: true
|
|
321
|
+
})
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
// Add the dock component to open the AI image generation panel
|
|
325
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
|
|
326
|
+
'ly.img.ai.image-generation.dock',
|
|
327
|
+
...cesdk.ui.getComponentOrder({ in: 'ly.img.dock' })
|
|
328
|
+
]);
|
|
329
|
+
|
|
330
|
+
// Open the AI Image Generation panel
|
|
331
|
+
cesdk.ui.openPanel('ly.img.ai.image-generation');
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Example: Control which features are visible in the UI
|
|
336
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- Reference implementation exported as example snippet in docs.
|
|
337
|
+
function configureFeatures(cesdk: CreativeEditorSDK) {
|
|
338
|
+
// Hide the provider dropdown if you only have one provider
|
|
339
|
+
cesdk.feature.set(
|
|
340
|
+
'ly.img.plugin-ai-image-generation-web.providerSelect',
|
|
341
|
+
() => false
|
|
342
|
+
);
|
|
343
|
+
// Enable text-to-image generation
|
|
344
|
+
cesdk.feature.set(
|
|
345
|
+
'ly.img.plugin-ai-image-generation-web.fromText',
|
|
346
|
+
() => true
|
|
347
|
+
);
|
|
348
|
+
// Disable image-to-image generation
|
|
349
|
+
cesdk.feature.set(
|
|
350
|
+
'ly.img.plugin-ai-image-generation-web.fromImage',
|
|
351
|
+
() => false
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export default Example;
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
This guide covers:
|
|
359
|
+
|
|
360
|
+
- Understanding the Provider interface for image generation
|
|
361
|
+
- Creating an OpenAPI schema for input configuration
|
|
362
|
+
- Implementing a custom image provider with quick actions
|
|
363
|
+
- Adding middleware for logging, uploads, and error handling
|
|
364
|
+
- Integrating the provider with CE.SDK
|
|
365
|
+
|
|
366
|
+
## Prerequisites
|
|
367
|
+
|
|
368
|
+
- Basic knowledge of TypeScript and React
|
|
369
|
+
- Familiarity with CreativeEditor SDK
|
|
370
|
+
- An image generation API to integrate with
|
|
371
|
+
|
|
372
|
+
## Project Setup
|
|
373
|
+
|
|
374
|
+
First, set up your project and install the necessary packages:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
# Create a new project or use an existing one
|
|
378
|
+
mkdir my-image-provider
|
|
379
|
+
cd my-image-provider
|
|
380
|
+
|
|
381
|
+
# Initialize package.json
|
|
382
|
+
npm init -y
|
|
383
|
+
|
|
384
|
+
# Install required dependencies
|
|
385
|
+
npm install @imgly/plugin-ai-generation-web@$UBQ_VERSION$ @imgly/plugin-ai-image-generation-web@$UBQ_VERSION$ @cesdk/cesdk-js@$UBQ_VERSION$ typescript
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Then import the packages in your TypeScript file:
|
|
389
|
+
|
|
390
|
+
```typescript highlight-install
|
|
391
|
+
import {
|
|
392
|
+
CommonProviderConfiguration,
|
|
393
|
+
ImageOutput,
|
|
394
|
+
Provider,
|
|
395
|
+
loggingMiddleware,
|
|
396
|
+
uploadMiddleware
|
|
397
|
+
} from '@imgly/plugin-ai-generation-web';
|
|
398
|
+
import ImageGeneration from '@imgly/plugin-ai-image-generation-web';
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
## Understanding the Provider Interface
|
|
402
|
+
|
|
403
|
+
The core of the AI generation system is the `Provider` interface. For image generation, we implement this interface with `kind: 'image'`.
|
|
404
|
+
|
|
405
|
+
Key components of an image provider:
|
|
406
|
+
|
|
407
|
+
- **id**: Unique identifier for your provider
|
|
408
|
+
- **kind**: Always 'image' for image generation
|
|
409
|
+
- **initialize**: Setup function for any necessary configuration
|
|
410
|
+
- **input**: Configuration for the input UI panel and parameters
|
|
411
|
+
- **output**: Configuration for generation behavior and result handling
|
|
412
|
+
|
|
413
|
+
## Creating an OpenAPI Schema
|
|
414
|
+
|
|
415
|
+
For schema-based input, you need an OpenAPI schema that defines your input parameters. The schema controls what UI components appear in the generation panel:
|
|
416
|
+
|
|
417
|
+
```json file=@cesdk_web_examples/guides-user-interface-ai-integration-custom-provider-browser/myApiSchema.json
|
|
418
|
+
{
|
|
419
|
+
"openapi": "3.0.0",
|
|
420
|
+
"info": {
|
|
421
|
+
"title": "My Image Generator API",
|
|
422
|
+
"version": "1.0.0"
|
|
423
|
+
},
|
|
424
|
+
"components": {
|
|
425
|
+
"schemas": {
|
|
426
|
+
"GenerationInput": {
|
|
427
|
+
"type": "object",
|
|
428
|
+
"required": ["prompt"],
|
|
429
|
+
"properties": {
|
|
430
|
+
"prompt": {
|
|
431
|
+
"type": "string",
|
|
432
|
+
"title": "Description",
|
|
433
|
+
"description": "Describe the image you want to generate",
|
|
434
|
+
"x-imgly-builder": {
|
|
435
|
+
"component": "TextArea"
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
"width": {
|
|
439
|
+
"type": "integer",
|
|
440
|
+
"title": "Width",
|
|
441
|
+
"default": 512,
|
|
442
|
+
"enum": [256, 512, 768, 1024],
|
|
443
|
+
"x-imgly-builder": {
|
|
444
|
+
"component": "Select"
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
"height": {
|
|
448
|
+
"type": "integer",
|
|
449
|
+
"title": "Height",
|
|
450
|
+
"default": 512,
|
|
451
|
+
"enum": [256, 512, 768, 1024],
|
|
452
|
+
"x-imgly-builder": {
|
|
453
|
+
"component": "Select"
|
|
454
|
+
}
|
|
455
|
+
},
|
|
456
|
+
"style": {
|
|
457
|
+
"type": "string",
|
|
458
|
+
"title": "Style",
|
|
459
|
+
"default": "photorealistic",
|
|
460
|
+
"enum": ["photorealistic", "cartoon", "sketch", "painting"],
|
|
461
|
+
"x-imgly-builder": {
|
|
462
|
+
"component": "Select"
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
"x-order-properties": ["prompt", "width", "height", "style"]
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
Key concepts in the schema:
|
|
474
|
+
|
|
475
|
+
- **Required vs optional properties**: Use the `required` array to specify which fields must be filled
|
|
476
|
+
- **x-imgly-builder extension**: Specifies the UI component type (TextArea, Select, etc.)
|
|
477
|
+
- **x-order-properties**: Controls the display order of fields in the UI
|
|
478
|
+
- **enum values**: Provides predefined options for Select components
|
|
479
|
+
|
|
480
|
+
Import the schema in your provider:
|
|
481
|
+
|
|
482
|
+
```typescript highlight-schema
|
|
483
|
+
import apiSchema from './myApiSchema.json';
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
## Understanding CommonProviderConfiguration
|
|
487
|
+
|
|
488
|
+
Before creating your provider, understand the `CommonProviderConfiguration` interface. This interface provides standardized configuration options that all providers should extend:
|
|
489
|
+
|
|
490
|
+
```typescript highlight-configuration
|
|
491
|
+
// Define provider configuration interface extending CommonProviderConfiguration
|
|
492
|
+
interface MyProviderConfiguration extends CommonProviderConfiguration<
|
|
493
|
+
MyProviderInput,
|
|
494
|
+
ImageOutput
|
|
495
|
+
> {
|
|
496
|
+
// Add any provider-specific configuration here
|
|
497
|
+
customApiKey?: string;
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Configuration Options
|
|
502
|
+
|
|
503
|
+
**proxyUrl**: The URL of your proxy server that forwards requests to your AI API. This is essential for keeping API keys secure on the server side.
|
|
504
|
+
|
|
505
|
+
**headers**: Custom headers to include in all API requests. Useful for:
|
|
506
|
+
|
|
507
|
+
- Adding client identification headers
|
|
508
|
+
- Including version information
|
|
509
|
+
- Passing through metadata required by your API
|
|
510
|
+
- Adding correlation IDs for request tracing
|
|
511
|
+
|
|
512
|
+
**history**: Override the provider's default history storage behavior:
|
|
513
|
+
|
|
514
|
+
- `false`: Disable history storage entirely
|
|
515
|
+
- `'@imgly/local'`: Use temporary local storage (not persistent across sessions)
|
|
516
|
+
- `'@imgly/indexedDB'`: Use browser IndexedDB storage (persistent across sessions)
|
|
517
|
+
- `string`: Use your own custom asset source ID
|
|
518
|
+
|
|
519
|
+
**supportedQuickActions**: Configure which quick actions are supported:
|
|
520
|
+
|
|
521
|
+
- `false` or `null`: Remove the quick action entirely
|
|
522
|
+
- Object with `mapInput`: Override with custom input mapping
|
|
523
|
+
|
|
524
|
+
**properties**: Define default values for any provider property (static values or dynamic functions based on context).
|
|
525
|
+
|
|
526
|
+
## Defining Input Types
|
|
527
|
+
|
|
528
|
+
Define TypeScript interfaces for your provider's input and configuration:
|
|
529
|
+
|
|
530
|
+
```typescript highlight-input-types
|
|
531
|
+
// Define your input type based on your schema
|
|
532
|
+
interface MyProviderInput {
|
|
533
|
+
prompt: string;
|
|
534
|
+
width: number;
|
|
535
|
+
height: number;
|
|
536
|
+
style: string;
|
|
537
|
+
image_url?: string; // For image-to-image operations
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
## Creating the Provider Factory
|
|
542
|
+
|
|
543
|
+
The provider factory function returns a provider instance configured with your settings:
|
|
544
|
+
|
|
545
|
+
```typescript highlight-provider-factory
|
|
546
|
+
// Create a function that returns your provider
|
|
547
|
+
export function MyImageProvider(
|
|
548
|
+
_config: MyProviderConfiguration
|
|
549
|
+
): (context: {
|
|
550
|
+
cesdk: CreativeEditorSDK;
|
|
551
|
+
}) => Promise<Provider<'image', MyProviderInput, ImageOutput>> {
|
|
552
|
+
// Return a function that returns the provider
|
|
553
|
+
return async ({ cesdk: _cesdk }) => {
|
|
554
|
+
// Create and return the provider
|
|
555
|
+
const provider: Provider<'image', MyProviderInput, ImageOutput> = {
|
|
556
|
+
// Unique identifier for your provider
|
|
557
|
+
id: 'my-image-provider',
|
|
558
|
+
|
|
559
|
+
// Define output type as 'image'
|
|
560
|
+
kind: 'image',
|
|
561
|
+
|
|
562
|
+
// Initialize your provider
|
|
563
|
+
initialize: async () => {
|
|
564
|
+
console.log('Initializing my image provider');
|
|
565
|
+
// Any setup needed (e.g., API client initialization)
|
|
566
|
+
},
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
## Configuring the Input Panel
|
|
570
|
+
|
|
571
|
+
The input panel configuration uses your OpenAPI schema to automatically generate the UI:
|
|
572
|
+
|
|
573
|
+
```typescript highlight-input-panel
|
|
574
|
+
// Define input panel and UI using schema
|
|
575
|
+
input: {
|
|
576
|
+
panel: {
|
|
577
|
+
type: 'schema',
|
|
578
|
+
document: apiSchema, // Your OpenAPI schema
|
|
579
|
+
inputReference: '#/components/schemas/GenerationInput', // Reference to your input schema
|
|
580
|
+
userFlow: 'placeholder', // Creates a block first, then updates it with the generated content
|
|
581
|
+
orderExtensionKeyword: 'x-order-properties', // Used to control property display order
|
|
582
|
+
|
|
583
|
+
// Convert API input to block parameters
|
|
584
|
+
getBlockInput: async (input) => ({
|
|
585
|
+
image: {
|
|
586
|
+
width: input.width || 512,
|
|
587
|
+
height: input.height || 512,
|
|
588
|
+
label: `AI: ${input.prompt?.substring(0, 20)}...`
|
|
589
|
+
}
|
|
590
|
+
})
|
|
591
|
+
},
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
Configuration properties:
|
|
595
|
+
|
|
596
|
+
- **type**: Set to `'schema'` for OpenAPI-driven UI
|
|
597
|
+
- **document**: Your OpenAPI schema object
|
|
598
|
+
- **inputReference**: JSON pointer to the input schema definition
|
|
599
|
+
- **userFlow**: Either `'placeholder'` (creates a block first) or `'direct'`
|
|
600
|
+
- **getBlockInput**: Transforms API input to block parameters (dimensions, label)
|
|
601
|
+
|
|
602
|
+
## Adding Quick Actions
|
|
603
|
+
|
|
604
|
+
Quick actions appear in the canvas context menu for supported block types. Map quick action IDs to your provider's input format:
|
|
605
|
+
|
|
606
|
+
```typescript highlight-quick-actions
|
|
607
|
+
// Add quick actions for canvas menu
|
|
608
|
+
quickActions: {
|
|
609
|
+
supported: {
|
|
610
|
+
// Map quick action IDs to provider input transformations
|
|
611
|
+
'ly.img.editImage': {
|
|
612
|
+
mapInput: (quickActionInput) => ({
|
|
613
|
+
prompt: quickActionInput.prompt,
|
|
614
|
+
image_url: quickActionInput.uri,
|
|
615
|
+
width: 512,
|
|
616
|
+
height: 512,
|
|
617
|
+
style: 'photorealistic'
|
|
618
|
+
})
|
|
619
|
+
},
|
|
620
|
+
'ly.img.swapBackground': {
|
|
621
|
+
mapInput: (quickActionInput) => ({
|
|
622
|
+
prompt: quickActionInput.prompt,
|
|
623
|
+
image_url: quickActionInput.uri,
|
|
624
|
+
width: 512,
|
|
625
|
+
height: 512,
|
|
626
|
+
style: 'photorealistic'
|
|
627
|
+
})
|
|
628
|
+
},
|
|
629
|
+
'ly.img.createVariant': {
|
|
630
|
+
mapInput: (quickActionInput) => ({
|
|
631
|
+
prompt: quickActionInput.prompt,
|
|
632
|
+
image_url: quickActionInput.uri,
|
|
633
|
+
width: 512,
|
|
634
|
+
height: 512,
|
|
635
|
+
style: 'photorealistic'
|
|
636
|
+
})
|
|
637
|
+
},
|
|
638
|
+
'ly.img.styleTransfer': {
|
|
639
|
+
mapInput: (quickActionInput) => ({
|
|
640
|
+
prompt: quickActionInput.style,
|
|
641
|
+
image_url: quickActionInput.uri,
|
|
642
|
+
width: 512,
|
|
643
|
+
height: 512,
|
|
644
|
+
style: 'photorealistic'
|
|
645
|
+
})
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
Available quick action IDs:
|
|
652
|
+
|
|
653
|
+
- `'ly.img.editImage'`: Edit selected image with AI
|
|
654
|
+
- `'ly.img.swapBackground'`: Replace image background
|
|
655
|
+
- `'ly.img.createVariant'`: Generate variation of image
|
|
656
|
+
- `'ly.img.styleTransfer'`: Apply style to image
|
|
657
|
+
|
|
658
|
+
## Configuring Output Behavior
|
|
659
|
+
|
|
660
|
+
The output configuration defines how generation works and handles results:
|
|
661
|
+
|
|
662
|
+
```typescript highlight-output-config
|
|
663
|
+
// Define output generation behavior
|
|
664
|
+
output: {
|
|
665
|
+
// Allow cancellation of generation
|
|
666
|
+
abortable: true,
|
|
667
|
+
|
|
668
|
+
// Store generated assets in browser's IndexedDB
|
|
669
|
+
history: '@imgly/indexedDB',
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
## Adding Middleware
|
|
673
|
+
|
|
674
|
+
Middleware functions process requests and responses in the generation pipeline:
|
|
675
|
+
|
|
676
|
+
```typescript highlight-middleware
|
|
677
|
+
// Add middleware for logging and uploading
|
|
678
|
+
middleware: [
|
|
679
|
+
loggingMiddleware({ enable: true }),
|
|
680
|
+
// Example of upload middleware that stores generated images on your server
|
|
681
|
+
uploadMiddleware(async (output: ImageOutput) => {
|
|
682
|
+
// In production, upload the image to your server
|
|
683
|
+
// For this example, we just return the output as-is
|
|
684
|
+
console.log('Upload middleware: Processing output', output.url);
|
|
685
|
+
return output;
|
|
686
|
+
}),
|
|
687
|
+
// Custom error handling middleware
|
|
688
|
+
async (input, options, next) => {
|
|
689
|
+
try {
|
|
690
|
+
return await next(input, options);
|
|
691
|
+
} catch (error: any) {
|
|
692
|
+
// Prevent default error notification
|
|
693
|
+
options.preventDefault();
|
|
694
|
+
|
|
695
|
+
// Show custom error notification
|
|
696
|
+
options.cesdk?.ui.showNotification({
|
|
697
|
+
type: 'error',
|
|
698
|
+
message: `Image generation failed: ${error.message}`
|
|
699
|
+
});
|
|
700
|
+
|
|
701
|
+
throw error;
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
],
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
### Available Middleware
|
|
708
|
+
|
|
709
|
+
**loggingMiddleware()**: Debug logging for development.
|
|
710
|
+
|
|
711
|
+
**uploadMiddleware()**: Store generated images on your server before adding to design.
|
|
712
|
+
|
|
713
|
+
**Custom middleware**: Create your own for error handling, rate limiting, or request transformation.
|
|
714
|
+
|
|
715
|
+
### Custom Error Handling with preventDefault()
|
|
716
|
+
|
|
717
|
+
Middleware can suppress default UI feedback using `options.preventDefault()`. This is useful when you want complete control over how errors are presented:
|
|
718
|
+
|
|
719
|
+
**What gets prevented:**
|
|
720
|
+
|
|
721
|
+
- Error/success notifications (toast messages)
|
|
722
|
+
- Block error state (error icon)
|
|
723
|
+
- Console error logging
|
|
724
|
+
|
|
725
|
+
**What is NOT prevented:**
|
|
726
|
+
|
|
727
|
+
- Pending → Ready transition (loading spinner always stops)
|
|
728
|
+
|
|
729
|
+
## Configuring Notifications
|
|
730
|
+
|
|
731
|
+
Configure success and error notifications shown to users:
|
|
732
|
+
|
|
733
|
+
```typescript highlight-notification
|
|
734
|
+
// Configure success/error notifications
|
|
735
|
+
notification: {
|
|
736
|
+
success: {
|
|
737
|
+
show: true,
|
|
738
|
+
message: 'Image generated successfully!'
|
|
739
|
+
},
|
|
740
|
+
error: {
|
|
741
|
+
show: true,
|
|
742
|
+
message: (context) => `Generation failed: ${context.error}`
|
|
743
|
+
}
|
|
744
|
+
},
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
## Implementing the Generate Function
|
|
748
|
+
|
|
749
|
+
The generate function is the core of your provider—it calls your AI API and returns the result:
|
|
750
|
+
|
|
751
|
+
```typescript highlight-generate
|
|
752
|
+
// The core generation function
|
|
753
|
+
generate: async (input, { abortSignal }) => {
|
|
754
|
+
try {
|
|
755
|
+
// Use mock API for demonstration
|
|
756
|
+
// In production, replace with actual API call:
|
|
757
|
+
// const response = await fetch(config.proxyUrl, { ... });
|
|
758
|
+
const data = await mockGenerateImage(input, abortSignal);
|
|
759
|
+
|
|
760
|
+
// Return the image URL
|
|
761
|
+
return {
|
|
762
|
+
kind: 'image',
|
|
763
|
+
url: data.imageUrl
|
|
764
|
+
};
|
|
765
|
+
} catch (error) {
|
|
766
|
+
console.error('Image generation failed:', error);
|
|
767
|
+
throw error;
|
|
768
|
+
}
|
|
769
|
+
};
|
|
770
|
+
```
|
|
771
|
+
|
|
772
|
+
In production, replace the mock API call with actual requests to your image generation service.
|
|
773
|
+
|
|
774
|
+
## Integrating with CE.SDK
|
|
775
|
+
|
|
776
|
+
Register your provider with CE.SDK using the image generation plugin:
|
|
777
|
+
|
|
778
|
+
```typescript highlight-integration
|
|
779
|
+
// Add your image generation provider
|
|
780
|
+
await cesdk.addPlugin(
|
|
781
|
+
ImageGeneration({
|
|
782
|
+
providers: {
|
|
783
|
+
text2image: MyImageProvider({
|
|
784
|
+
proxyUrl: 'https://your-proxy-server.com/api/proxy',
|
|
785
|
+
headers: {
|
|
786
|
+
'x-client-version': '1.0.0',
|
|
787
|
+
'x-request-source': 'cesdk-tutorial'
|
|
788
|
+
}
|
|
789
|
+
})
|
|
790
|
+
},
|
|
791
|
+
debug: true
|
|
792
|
+
})
|
|
793
|
+
);
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
Add the dock component to make the panel accessible:
|
|
797
|
+
|
|
798
|
+
```typescript highlight-dock
|
|
799
|
+
// Add the dock component to open the AI image generation panel
|
|
800
|
+
cesdk.ui.setComponentOrder({ in: 'ly.img.dock' }, [
|
|
801
|
+
'ly.img.ai.image-generation.dock',
|
|
802
|
+
...cesdk.ui.getComponentOrder({ in: 'ly.img.dock' })
|
|
803
|
+
]);
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
## Controlling Features with Feature API
|
|
807
|
+
|
|
808
|
+
Control which UI elements and features are available to users:
|
|
809
|
+
|
|
810
|
+
```typescript highlight-feature-api
|
|
811
|
+
// Hide the provider dropdown if you only have one provider
|
|
812
|
+
cesdk.feature.set(
|
|
813
|
+
'ly.img.plugin-ai-image-generation-web.providerSelect',
|
|
814
|
+
() => false
|
|
815
|
+
);
|
|
816
|
+
// Enable text-to-image generation
|
|
817
|
+
cesdk.feature.set('ly.img.plugin-ai-image-generation-web.fromText', () => true);
|
|
818
|
+
// Disable image-to-image generation
|
|
819
|
+
cesdk.feature.set(
|
|
820
|
+
'ly.img.plugin-ai-image-generation-web.fromImage',
|
|
821
|
+
() => false
|
|
822
|
+
);
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
Available feature flags:
|
|
826
|
+
|
|
827
|
+
- `ly.img.plugin-ai-image-generation-web.providerSelect`: Show/hide provider dropdown
|
|
828
|
+
- `ly.img.plugin-ai-image-generation-web.fromText`: Enable text-to-image input
|
|
829
|
+
- `ly.img.plugin-ai-image-generation-web.fromImage`: Enable image-to-image input
|
|
830
|
+
|
|
831
|
+
## Troubleshooting
|
|
832
|
+
|
|
833
|
+
Common issues and solutions:
|
|
834
|
+
|
|
835
|
+
- **API errors**: Check proxy URL configuration and headers. Ensure your proxy server is correctly forwarding requests to your AI API.
|
|
836
|
+
- **Generation not starting**: Verify the license key is valid. Check browser console for initialization errors.
|
|
837
|
+
- **Quick actions not appearing**: Ensure quick action IDs are mapped correctly in the `supported` object. Verify the block type supports quick actions.
|
|
838
|
+
- **UI not updating**: Check that `generate()` returns the correct output format with `kind: 'image'` and a valid `url`.
|
|
839
|
+
|
|
840
|
+
## Next Steps
|
|
841
|
+
|
|
842
|
+
- Explore the [AI Image Generation Overview](./user-interface/ai-integration/image-generation.md) for built-in provider options
|
|
843
|
+
- Learn about [AI Text Generation](./user-interface/ai-integration/text-generation.md) for text-based AI providers
|
|
844
|
+
- Understand the [Plugin System](./plugins.md) for extending CE.SDK
|
|
845
|
+
|
|
846
|
+
---
|
|
847
|
+
|
|
848
|
+
## More Resources
|
|
849
|
+
|
|
850
|
+
- **[Vanilla JS/TS Documentation Index](https://img.ly/docs/cesdk/js.md)** - Browse all Vanilla JS/TS documentation
|
|
851
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
852
|
+
- **[Web Documentation](./js.md)** - Interactive documentation with examples
|
|
853
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|