@imgly/codesign-mcp 0.1.5 → 0.1.6
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/README.md +51 -1
- package/assets/docs/guide/SKILL.md +45 -53
- package/assets/docs/guide/animation/create/base.md +234 -243
- package/assets/docs/guide/animation/create/text.md +250 -231
- package/assets/docs/guide/animation/create.md +197 -231
- package/assets/docs/guide/animation/edit.md +196 -271
- package/assets/docs/guide/animation/types.md +182 -185
- package/assets/docs/guide/animation.md +9 -6
- package/assets/docs/guide/api/AssetAPI.md +7 -53
- package/assets/docs/guide/api/BlockAPI.md +725 -648
- package/assets/docs/guide/api/CreativeEngine.md +7 -16
- package/assets/docs/guide/api/EditorAPI.md +32 -93
- package/assets/docs/guide/api/EventAPI.md +1 -2
- package/assets/docs/guide/api/SceneAPI.md +47 -98
- package/assets/docs/guide/api/VariableAPI.md +1 -4
- package/assets/docs/guide/api/node/classes/assetapi.md +1090 -0
- package/assets/docs/guide/api/node/classes/blockapi.md +12965 -0
- package/assets/docs/guide/api/node/classes/creativeengine.md +319 -0
- package/assets/docs/guide/api/node/classes/editorapi.md +3417 -0
- package/assets/docs/guide/api/node/classes/engineactions.md +319 -0
- package/assets/docs/guide/api/node/classes/eventapi.md +56 -0
- package/assets/docs/guide/api/node/classes/sceneapi.md +1370 -0
- package/assets/docs/guide/api/node/classes/variableapi.md +143 -0
- package/assets/docs/guide/api/node/enumerations/compressionformat.md +23 -0
- package/assets/docs/guide/api/node/enumerations/compressionlevel.md +24 -0
- package/assets/docs/guide/api/node/functions/iscmykcolor.md +30 -0
- package/assets/docs/guide/api/node/functions/isrgbacolor.md +30 -0
- package/assets/docs/guide/api/node/functions/isspotcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/addvideooptions.md +31 -0
- package/assets/docs/guide/api/node/interfaces/applyassetoptions.md +31 -0
- package/assets/docs/guide/api/node/interfaces/asset.md +30 -0
- package/assets/docs/guide/api/node/interfaces/assetbooleanproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetcmykcolor.md +26 -0
- package/assets/docs/guide/api/node/interfaces/assetcolorproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetcontentaspectratio.md +23 -0
- package/assets/docs/guide/api/node/interfaces/assetdefinition.md +31 -0
- package/assets/docs/guide/api/node/interfaces/assetenumproperty.md +26 -0
- package/assets/docs/guide/api/node/interfaces/assetfixedaspectratio.md +24 -0
- package/assets/docs/guide/api/node/interfaces/assetfixedsize.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetfreeaspectratio.md +22 -0
- package/assets/docs/guide/api/node/interfaces/assetnumberproperty.md +28 -0
- package/assets/docs/guide/api/node/interfaces/assetpayload.md +27 -0
- package/assets/docs/guide/api/node/interfaces/assetquerydata.md +32 -0
- package/assets/docs/guide/api/node/interfaces/assetresult.md +46 -0
- package/assets/docs/guide/api/node/interfaces/assetrgbcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetsource.md +111 -0
- package/assets/docs/guide/api/node/interfaces/assetspotcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetsqueryresult.md +31 -0
- package/assets/docs/guide/api/node/interfaces/assetstringproperty.md +25 -0
- package/assets/docs/guide/api/node/interfaces/assetstylepreset.md +39 -0
- package/assets/docs/guide/api/node/interfaces/assetstylepresetanimation.md +23 -0
- package/assets/docs/guide/api/node/interfaces/audiotrackinfo.md +32 -0
- package/assets/docs/guide/api/node/interfaces/blockevent.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstateerror.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstatepending.md +26 -0
- package/assets/docs/guide/api/node/interfaces/blockstateready.md +25 -0
- package/assets/docs/guide/api/node/interfaces/buffer.md +26 -0
- package/assets/docs/guide/api/node/interfaces/characterinkbox.md +29 -0
- package/assets/docs/guide/api/node/interfaces/cmykcolor.md +34 -0
- package/assets/docs/guide/api/node/interfaces/completeassetresult.md +46 -0
- package/assets/docs/guide/api/node/interfaces/configuration.md +38 -0
- package/assets/docs/guide/api/node/interfaces/dominantcolor.md +25 -0
- package/assets/docs/guide/api/node/interfaces/dominantcolorsoptions.md +23 -0
- package/assets/docs/guide/api/node/interfaces/engineactioninfo.md +24 -0
- package/assets/docs/guide/api/node/interfaces/engineactionsregistry.md +18 -0
- package/assets/docs/guide/api/node/interfaces/engineplugin.md +30 -0
- package/assets/docs/guide/api/node/interfaces/font.md +27 -0
- package/assets/docs/guide/api/node/interfaces/fontmetrics.md +32 -0
- package/assets/docs/guide/api/node/interfaces/gradientcolorstop.md +28 -0
- package/assets/docs/guide/api/node/interfaces/logger.md +39 -0
- package/assets/docs/guide/api/node/interfaces/pageduration.md +23 -0
- package/assets/docs/guide/api/node/interfaces/range.md +23 -0
- package/assets/docs/guide/api/node/interfaces/rgbacolor.md +32 -0
- package/assets/docs/guide/api/node/interfaces/rgbcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/settings.md +126 -0
- package/assets/docs/guide/api/node/interfaces/size2.md +21 -0
- package/assets/docs/guide/api/node/interfaces/source.md +24 -0
- package/assets/docs/guide/api/node/interfaces/spotcolor.md +30 -0
- package/assets/docs/guide/api/node/interfaces/textdecorationconfig.md +31 -0
- package/assets/docs/guide/api/node/interfaces/textfontsizeoptions.md +24 -0
- package/assets/docs/guide/api/node/interfaces/textruninfo.md +33 -0
- package/assets/docs/guide/api/node/interfaces/transientresource.md +26 -0
- package/assets/docs/guide/api/node/interfaces/typeface.md +23 -0
- package/assets/docs/guide/api/node/interfaces/vec2.md +21 -0
- package/assets/docs/guide/api/node/interfaces/vec3.md +22 -0
- package/assets/docs/guide/api/node/type-aliases/addimageoptions.md +36 -0
- package/assets/docs/guide/api/node/type-aliases/animationbaselinedirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationblockswipetextdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationeasing.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationentry.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/animationgrowdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationjumploopdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationkenburnsdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationmergetextdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationoptions.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/animationspindirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationspinloopdirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationtype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationtypewritertextwritingstyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/animationwipedirection.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/applicationmimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/assetcolor.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/assetfilter.md +47 -0
- package/assets/docs/guide/api/node/type-aliases/assetgroups.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/assetmetadata.md +42 -0
- package/assets/docs/guide/api/node/type-aliases/assetproperty.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/assetpropertyfilter.md +41 -0
- package/assets/docs/guide/api/node/type-aliases/assetpropertypath.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetanimationproperties.md +34 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetproperties.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetpropertyvalue.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/assetstylepresetscalableproperty.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/assettransformpreset.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/asyncuriresolver.md +36 -0
- package/assets/docs/guide/api/node/type-aliases/audioexportoptions.md +43 -0
- package/assets/docs/guide/api/node/type-aliases/audiofromvideooptions.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/audiomimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/blendmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/blockenumtype.md +63 -0
- package/assets/docs/guide/api/node/type-aliases/blockstate.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/blurtype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/blurtypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/blurtypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/booleanoperation.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/boolpropertyname.md +79 -0
- package/assets/docs/guide/api/node/type-aliases/cameraclampingovershootmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/captionhorizontalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/captionverticalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/cmyk.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/color.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/colorpickercolormode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/colorpropertyname.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/colorspace.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/contentfillmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmomovehandlevisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmoresizehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmorotatehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/controlgizmoscalehandlesvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/createsceneoptions.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/cutoutoperation.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/cutouttype.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/defaultassetsourceid.md +37 -0
- package/assets/docs/guide/api/node/type-aliases/demoassetsourceid.md +33 -0
- package/assets/docs/guide/api/node/type-aliases/designblockid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/designblocktypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/designunit.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/doubleclickselectionmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/doublepropertyname.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/dropshadowoptions.md +32 -0
- package/assets/docs/guide/api/node/type-aliases/editmode.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/effecttype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/effecttypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/effecttypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/engineactionid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/enginecustomactionfunction.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/engineplugincontext.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/enumpropertyname.md +59 -0
- package/assets/docs/guide/api/node/type-aliases/enumvalues.md +59 -0
- package/assets/docs/guide/api/node/type-aliases/exportoptions.md +57 -0
- package/assets/docs/guide/api/node/type-aliases/fillpixelstreamorientation.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/filltype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/filltypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/filltypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/floatpropertyname.md +184 -0
- package/assets/docs/guide/api/node/type-aliases/fontsizeunit.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/fontstyle.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/fontweight.md +30 -0
- package/assets/docs/guide/api/node/type-aliases/gradientstoprgba.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/heightmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/hexcolorstring.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/historyid.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/historyupdate.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/horizontalblockalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/horizontalcontentfillalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/horizontaltextalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/imagemimetype.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/intpropertyname.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/liststyle.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/locale.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/loglevel.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/mimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/objecttype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/objecttypelonghand.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/objecttypeshorthand.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/optionalprefix.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/pageguidessource.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/palettecolor.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/positionmode.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/positionxmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/positionymode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/propertytype.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/rgba.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/rolestring.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/scenefontsizeunit.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scenelayout.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scenemode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/scope.md +50 -0
- package/assets/docs/guide/api/node/type-aliases/settingboolpropertyname.md +62 -0
- package/assets/docs/guide/api/node/type-aliases/settingcolorpropertyname.md +38 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumpropertyname.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumtype.md +33 -0
- package/assets/docs/guide/api/node/type-aliases/settingenumvalues.md +29 -0
- package/assets/docs/guide/api/node/type-aliases/settingfloatpropertyname.md +25 -0
- package/assets/docs/guide/api/node/type-aliases/settingintpropertyname.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingkey.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingsbool.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingscolor.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingscolorrgba.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/settingsenum.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsfloat.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsint.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingsstring.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/settingstringpropertyname.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/settingtype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/settingvaluetype.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/shapetype.md +24 -0
- package/assets/docs/guide/api/node/type-aliases/shapetypelonghand.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/shapetypeshorthand.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/shapevectorpathfillrule.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/sizemode.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/sortingorder.md +21 -0
- package/assets/docs/guide/api/node/type-aliases/sourcesetpropertyname.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/splitoptions.md +28 -0
- package/assets/docs/guide/api/node/type-aliases/stringpropertyname.md +43 -0
- package/assets/docs/guide/api/node/type-aliases/strokecap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokecornergeometry.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokedashendcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokedashstartcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokeendcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokeposition.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokestartcap.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/strokestyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/syncuriresolver.md +31 -0
- package/assets/docs/guide/api/node/type-aliases/textanimationwritingstyle.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/textcase.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/textdecorationline.md +27 -0
- package/assets/docs/guide/api/node/type-aliases/textdecorationstyle.md +26 -0
- package/assets/docs/guide/api/node/type-aliases/textverticalalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/timelinetrackvisibility.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/touchpinchaction.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/touchrotateaction.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/typefacedefinition.md +41 -0
- package/assets/docs/guide/api/node/type-aliases/verticalblockalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/verticalcontentfillalignment.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/videoexportoptions.md +54 -0
- package/assets/docs/guide/api/node/type-aliases/videomimetype.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/widthmode.md +18 -0
- package/assets/docs/guide/api/node/type-aliases/xywh.md +23 -0
- package/assets/docs/guide/api/node/type-aliases/zoomautofitaxis.md +20 -0
- package/assets/docs/guide/api/node/type-aliases/zoomoptions.md +27 -0
- package/assets/docs/guide/api/node/variables/animation_types.md +21 -0
- package/assets/docs/guide/api/node/variables/animationbaselinedirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationblockswipetextdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationeasingvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationgrowdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationjumploopdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationkenburnsdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationmergetextdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationspindirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationspinloopdirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationtypewritertextwritingstylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/animationwipedirectionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/blendmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/blur_types.md +21 -0
- package/assets/docs/guide/api/node/variables/cameraclampingovershootmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/captionhorizontalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/captionverticalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/colorpickercolormodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/contentfillmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmomovehandlevisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmoresizehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmorotatehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/controlgizmoscalehandlesvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/cutouttypevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/design_block_types.md +21 -0
- package/assets/docs/guide/api/node/variables/doubleclickselectionmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/effect_types.md +21 -0
- package/assets/docs/guide/api/node/variables/fill_types.md +21 -0
- package/assets/docs/guide/api/node/variables/fillpixelstreamorientationvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/heightmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/horizontalcontentfillalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/loglevel.md +37 -0
- package/assets/docs/guide/api/node/variables/mimetype.md +41 -0
- package/assets/docs/guide/api/node/variables/pageguidessourcevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/positionxmodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/positionymodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenedesignunitvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenefontsizeunitvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenelayoutvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/scenemodevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/shape_types.md +21 -0
- package/assets/docs/guide/api/node/variables/shapevectorpathfillrulevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokecapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokecornergeometryvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokedashendcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokedashstartcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokeendcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokepositionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokestartcapvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/strokestylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/textanimationwritingstylevalues.md +18 -0
- package/assets/docs/guide/api/node/variables/texthorizontalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/textverticalalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/timelinetrackvisibilityvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/touchpinchactionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/touchrotateactionvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/verticalcontentfillalignmentvalues.md +18 -0
- package/assets/docs/guide/api/node/variables/widthmodevalues.md +18 -0
- package/assets/docs/guide/api/types.md +5 -9
- package/assets/docs/guide/api-reference/overview.md +7 -7
- package/assets/docs/guide/automation/auto-resize.md +263 -300
- package/assets/docs/guide/automation/data-merge.md +246 -275
- package/assets/docs/guide/automation/design-generation.md +102 -31
- package/assets/docs/guide/automation/multi-image-generation.md +758 -0
- package/assets/docs/guide/automation/overview.md +21 -4
- package/assets/docs/guide/automation.md +10 -5
- package/assets/docs/guide/capabilities.md +6 -4
- package/assets/docs/guide/colors/adjust.md +247 -249
- package/assets/docs/guide/colors/apply.md +127 -138
- package/assets/docs/guide/colors/basics.md +126 -150
- package/assets/docs/guide/colors/conversion.md +171 -177
- package/assets/docs/guide/colors/create-color-palette.md +244 -245
- package/assets/docs/guide/colors/extract-colors.md +144 -0
- package/assets/docs/guide/colors/for-print/cmyk.md +292 -352
- package/assets/docs/guide/colors/for-print/spot.md +521 -578
- package/assets/docs/guide/colors/for-print.md +9 -4
- package/assets/docs/guide/colors/for-screen/p3.md +12 -10
- package/assets/docs/guide/colors/for-screen/srgb.md +107 -133
- package/assets/docs/guide/colors/for-screen.md +9 -4
- package/assets/docs/guide/colors/overview.md +6 -4
- package/assets/docs/guide/colors/replace.md +381 -419
- package/assets/docs/guide/colors.md +9 -4
- package/assets/docs/guide/compatibility.md +7 -5
- package/assets/docs/guide/concepts/architecture.md +17 -15
- package/assets/docs/guide/concepts/assets.md +152 -140
- package/assets/docs/guide/concepts/blocks.md +227 -323
- package/assets/docs/guide/concepts/buffers.md +147 -276
- package/assets/docs/guide/concepts/design-units.md +95 -145
- package/assets/docs/guide/concepts/editing-workflow.md +69 -183
- package/assets/docs/guide/concepts/events.md +80 -122
- package/assets/docs/guide/concepts/headless-mode.md +237 -0
- package/assets/docs/guide/concepts/pages.md +137 -127
- package/assets/docs/guide/concepts/resources.md +156 -217
- package/assets/docs/guide/concepts/scenes.md +191 -210
- package/assets/docs/guide/concepts/templating.md +118 -74
- package/assets/docs/guide/concepts/terminology.md +49 -47
- package/assets/docs/guide/concepts/undo-and-history.md +229 -303
- package/assets/docs/guide/concepts.md +9 -7
- package/assets/docs/guide/configuration.md +252 -380
- package/assets/docs/guide/conversion/overview.md +33 -4
- package/assets/docs/guide/conversion/to-base64.md +127 -167
- package/assets/docs/guide/conversion/to-pdf.md +24 -474
- package/assets/docs/guide/conversion/to-png.md +168 -211
- package/assets/docs/guide/conversion.md +9 -4
- package/assets/docs/guide/create-audio/audio/add-music.md +301 -327
- package/assets/docs/guide/create-audio/audio/add-sound-effects.md +475 -359
- package/assets/docs/guide/create-audio/audio/loop.md +232 -272
- package/assets/docs/guide/create-composition/add-background.md +237 -239
- package/assets/docs/guide/create-composition/blend-modes.md +118 -209
- package/assets/docs/guide/create-composition/collage.md +538 -320
- package/assets/docs/guide/create-composition/group-and-ungroup.md +216 -261
- package/assets/docs/guide/create-composition/layer-management.md +219 -257
- package/assets/docs/guide/create-composition/layout.md +513 -315
- package/assets/docs/guide/create-composition/lock-design.md +90 -109
- package/assets/docs/guide/create-composition/multi-page.md +133 -113
- package/assets/docs/guide/create-composition/overview.md +16 -4
- package/assets/docs/guide/create-composition/programmatic.md +288 -344
- package/assets/docs/guide/create-composition.md +10 -5
- package/assets/docs/guide/create-templates/add-dynamic-content/placeholders.md +443 -569
- package/assets/docs/guide/create-templates/add-dynamic-content/set-editing-constraints.md +567 -470
- package/assets/docs/guide/create-templates/add-dynamic-content/text-variables.md +179 -516
- package/assets/docs/guide/create-templates/add-dynamic-content.md +226 -224
- package/assets/docs/guide/create-templates/add-to-template-library.md +183 -193
- package/assets/docs/guide/create-templates/edit-or-remove.md +297 -303
- package/assets/docs/guide/create-templates/from-scratch.md +207 -268
- package/assets/docs/guide/create-templates/import/from-scene-file.md +158 -236
- package/assets/docs/guide/create-templates/import.md +145 -161
- package/assets/docs/guide/create-templates/lock.md +42 -295
- package/assets/docs/guide/create-templates/overview.md +33 -4
- package/assets/docs/guide/create-templates.md +9 -5
- package/assets/docs/guide/create-video/audio/adjust-speed.md +157 -207
- package/assets/docs/guide/create-video/audio/adjust-volume.md +116 -227
- package/assets/docs/guide/create-video/control.md +352 -193
- package/assets/docs/guide/create-video/limitations.md +175 -280
- package/assets/docs/guide/create-video.md +11 -10
- package/assets/docs/guide/edit-image/add-watermark.md +283 -330
- package/assets/docs/guide/edit-image/overview.md +29 -4
- package/assets/docs/guide/edit-image/remove-bg.md +283 -337
- package/assets/docs/guide/edit-image/replace-colors.md +424 -502
- package/assets/docs/guide/edit-image/transform/crop.md +463 -402
- package/assets/docs/guide/edit-image/transform/flip.md +353 -0
- package/assets/docs/guide/edit-image/transform/move.md +143 -100
- package/assets/docs/guide/edit-image/transform/resize.md +118 -88
- package/assets/docs/guide/edit-image/transform/rotate.md +132 -165
- package/assets/docs/guide/edit-image/transform/scale.md +230 -228
- package/assets/docs/guide/edit-image/transform.md +10 -5
- package/assets/docs/guide/edit-image.md +11 -7
- package/assets/docs/guide/edit-video/add-captions.md +344 -421
- package/assets/docs/guide/edit-video/add-watermark.md +312 -258
- package/assets/docs/guide/edit-video/join-and-arrange.md +237 -371
- package/assets/docs/guide/edit-video/redaction.md +419 -385
- package/assets/docs/guide/edit-video/split.md +243 -493
- package/assets/docs/guide/edit-video/transform/crop.md +21 -352
- package/assets/docs/guide/edit-video/transform/flip.md +102 -76
- package/assets/docs/guide/edit-video/transform/move.md +258 -310
- package/assets/docs/guide/edit-video/transform/resize.md +264 -428
- package/assets/docs/guide/edit-video/transform/rotate.md +265 -228
- package/assets/docs/guide/edit-video/transform/scale.md +320 -417
- package/assets/docs/guide/edit-video/transform.md +10 -6
- package/assets/docs/guide/edit-video/trim.md +448 -494
- package/assets/docs/guide/engine-interface.md +51 -62
- package/assets/docs/guide/export-save-publish/create-thumbnail.md +148 -184
- package/assets/docs/guide/export-save-publish/export/compress.md +161 -559
- package/assets/docs/guide/export-save-publish/export/overview.md +224 -373
- package/assets/docs/guide/export-save-publish/export/partial-export.md +386 -577
- package/assets/docs/guide/export-save-publish/export/size-limits.md +215 -310
- package/assets/docs/guide/export-save-publish/export/to-jpeg.md +132 -213
- package/assets/docs/guide/export-save-publish/export/to-pdf.md +139 -267
- package/assets/docs/guide/export-save-publish/export/to-png.md +121 -165
- package/assets/docs/guide/export-save-publish/export/to-raw-data.md +187 -234
- package/assets/docs/guide/export-save-publish/export/to-webp.md +160 -190
- package/assets/docs/guide/export-save-publish/export/with-color-mask.md +359 -203
- package/assets/docs/guide/export-save-publish/export.md +14 -11
- package/assets/docs/guide/export-save-publish/for-printing.md +141 -237
- package/assets/docs/guide/export-save-publish/for-social-media.md +124 -261
- package/assets/docs/guide/export-save-publish/pre-export-validation.md +436 -522
- package/assets/docs/guide/export-save-publish/save.md +167 -226
- package/assets/docs/guide/export-save-publish/store-custom-metadata.md +97 -162
- package/assets/docs/guide/file-format-support.md +9 -9
- package/assets/docs/guide/fills/color.md +370 -347
- package/assets/docs/guide/fills/image.md +167 -196
- package/assets/docs/guide/fills/overview.md +6 -4
- package/assets/docs/guide/fills/video.md +286 -438
- package/assets/docs/guide/fills.md +12 -8
- package/assets/docs/guide/filters-and-effects/apply.md +598 -664
- package/assets/docs/guide/filters-and-effects/blur.md +261 -159
- package/assets/docs/guide/filters-and-effects/chroma-key-green-screen.md +194 -293
- package/assets/docs/guide/filters-and-effects/create-custom-filters.md +548 -466
- package/assets/docs/guide/filters-and-effects/create-custom-lut-filter.md +176 -244
- package/assets/docs/guide/filters-and-effects/distortion.md +317 -384
- package/assets/docs/guide/filters-and-effects/duotone.md +221 -217
- package/assets/docs/guide/filters-and-effects/gradients.md +670 -813
- package/assets/docs/guide/filters-and-effects/overview.md +7 -7
- package/assets/docs/guide/filters-and-effects/support.md +97 -132
- package/assets/docs/guide/filters-and-effects.md +11 -6
- package/assets/docs/guide/get-started/agent-skills.md +20 -18
- package/assets/docs/guide/get-started/build-with-ai.md +7 -4
- package/assets/docs/guide/get-started/bun.md +219 -0
- package/assets/docs/guide/get-started/deno.md +161 -0
- package/assets/docs/guide/get-started/mcp-server.md +6 -4
- package/assets/docs/guide/get-started/overview.md +11 -6
- package/assets/docs/guide/get-started/vanilla-aws-lambda.md +506 -0
- package/assets/docs/guide/get-started/vanilla-clone-github-project.md +124 -0
- package/assets/docs/guide/get-started/vanilla.md +235 -0
- package/assets/docs/guide/guides/export-save-publish/export/audio.md +80 -66
- package/assets/docs/guide/guides.md +10 -9
- package/assets/docs/guide/import-media/asset-panel/refresh-assets.md +259 -288
- package/assets/docs/guide/import-media/concepts.md +20 -38
- package/assets/docs/guide/import-media/content-json-schema.md +145 -125
- package/assets/docs/guide/import-media/default-assets.md +113 -161
- package/assets/docs/guide/import-media/edit-or-remove-assets.md +391 -395
- package/assets/docs/guide/import-media/file-format-support.md +78 -61
- package/assets/docs/guide/import-media/from-remote-source/asset-versioning.md +273 -244
- package/assets/docs/guide/import-media/from-remote-source/remote-asset.md +152 -222
- package/assets/docs/guide/import-media/from-remote-source.md +9 -11
- package/assets/docs/guide/import-media/overview.md +5 -5
- package/assets/docs/guide/import-media/retrieve-mimetype.md +216 -108
- package/assets/docs/guide/import-media/size-limits.md +6 -4
- package/assets/docs/guide/import-media/source-sets.md +190 -251
- package/assets/docs/guide/import-media.md +10 -8
- package/assets/docs/guide/insert-media/audio.md +202 -195
- package/assets/docs/guide/insert-media/images.md +190 -188
- package/assets/docs/guide/insert-media/position-and-align.md +284 -551
- package/assets/docs/guide/insert-media/shapes-or-stickers.md +402 -418
- package/assets/docs/guide/insert-media/videos.md +236 -203
- package/assets/docs/guide/insert-media.md +10 -5
- package/assets/docs/guide/key-capabilities.md +36 -4
- package/assets/docs/guide/key-concepts.md +6 -4
- package/assets/docs/guide/licensing.md +6 -4
- package/assets/docs/guide/llms-txt.md +11 -7
- package/assets/docs/guide/open-the-editor/blank-canvas.md +102 -63
- package/assets/docs/guide/open-the-editor/from-image.md +157 -127
- package/assets/docs/guide/open-the-editor/from-template.md +131 -92
- package/assets/docs/guide/open-the-editor/from-video.md +204 -212
- package/assets/docs/guide/open-the-editor/import-design/from-archive.md +310 -360
- package/assets/docs/guide/open-the-editor/import-design/from-indesign.md +716 -513
- package/assets/docs/guide/open-the-editor/import-design/from-photoshop.md +667 -695
- package/assets/docs/guide/open-the-editor/import-design.md +228 -266
- package/assets/docs/guide/open-the-editor/load-scene.md +72 -68
- package/assets/docs/guide/open-the-editor/overview.md +6 -4
- package/assets/docs/guide/open-the-editor/uri-resolver.md +160 -251
- package/assets/docs/guide/open-the-editor.md +11 -9
- package/assets/docs/guide/outlines/overview.md +12 -4
- package/assets/docs/guide/outlines/shadows-and-glows.md +105 -410
- package/assets/docs/guide/outlines/strokes.md +218 -166
- package/assets/docs/guide/outlines.md +9 -4
- package/assets/docs/guide/overview.md +14 -6
- package/assets/docs/guide/performance.md +220 -113
- package/assets/docs/guide/plugins/print-ready-pdf.md +273 -368
- package/assets/docs/guide/plugins.md +10 -16
- package/assets/docs/guide/rules/asset-handling.md +7 -18
- package/assets/docs/guide/rules/common-pitfalls.md +25 -42
- package/assets/docs/guide/rules/content-fill-mode.md +4 -4
- package/assets/docs/guide/rules/enforce-brand-guidelines.md +398 -567
- package/assets/docs/guide/rules/lock-content.md +188 -231
- package/assets/docs/guide/rules/moderate-content.md +580 -571
- package/assets/docs/guide/rules/overview.md +345 -380
- package/assets/docs/guide/rules/silent-init-errors.md +4 -1
- package/assets/docs/guide/rules/verify-properties-before-use.md +2 -11
- package/assets/docs/guide/rules.md +10 -5
- package/assets/docs/guide/security.md +7 -5
- package/assets/docs/guide/serve-assets.md +57 -284
- package/assets/docs/guide/settings.md +96 -74
- package/assets/docs/guide/shapes.md +10 -5
- package/assets/docs/guide/stickers-and-shapes/combine.md +397 -583
- package/assets/docs/guide/stickers-and-shapes/create-cutout.md +181 -268
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-shapes.md +418 -431
- package/assets/docs/guide/stickers-and-shapes/create-edit/create-stickers.md +147 -226
- package/assets/docs/guide/stickers-and-shapes/create-edit/edit-shapes.md +138 -123
- package/assets/docs/guide/stickers-and-shapes/insert-qr-code.md +151 -149
- package/assets/docs/guide/stickers.md +9 -4
- package/assets/docs/guide/text/add.md +470 -482
- package/assets/docs/guide/text/adjust-spacing.md +179 -214
- package/assets/docs/guide/text/auto-size.md +210 -271
- package/assets/docs/guide/text/edit.md +294 -309
- package/assets/docs/guide/text/effects.md +154 -190
- package/assets/docs/guide/text/emojis.md +199 -232
- package/assets/docs/guide/text/language-support.md +369 -382
- package/assets/docs/guide/text/overview.md +41 -4
- package/assets/docs/guide/text/styling.md +239 -273
- package/assets/docs/guide/text/text-designs.md +405 -544
- package/assets/docs/guide/text.md +10 -9
- package/assets/docs/guide/to-v1-19.md +12 -10
- package/assets/docs/guide/upgrade.md +8 -9
- package/assets/docs/guide/use-templates/apply-template.md +174 -163
- package/assets/docs/guide/use-templates/generate.md +171 -152
- package/assets/docs/guide/use-templates/overview.md +32 -4
- package/assets/docs/guide/use-templates/programmatic.md +266 -301
- package/assets/docs/guide/use-templates/replace-content.md +181 -171
- package/assets/docs/guide/what-is-cesdk.md +71 -282
- package/assets/docs/handbook/SKILL.md +24 -0
- package/dist/assets/inline.generated.d.ts.map +1 -1
- package/dist/assets/inline.generated.js +544 -406
- package/dist/assets/inline.generated.js.map +1 -1
- package/dist/assets/load-browser.d.ts +1 -1
- package/dist/assets/load-browser.js +1 -1
- package/dist/assets/load-browser.js.map +1 -1
- package/dist/assets/load-node.d.ts +1 -1
- package/dist/assets/load-node.js +1 -1
- package/dist/assets/load-node.js.map +1 -1
- package/dist/cli/http.d.ts.map +1 -1
- package/dist/cli/http.js +4 -28
- package/dist/cli/http.js.map +1 -1
- package/dist/cli/redirect-console.d.ts +1 -1
- package/dist/cli/redirect-console.d.ts.map +1 -1
- package/dist/cli/redirect-console.js +12 -3
- package/dist/cli/redirect-console.js.map +1 -1
- package/dist/cli/resolve-license.d.ts.map +1 -1
- package/dist/cli/resolve-license.js +8 -6
- package/dist/cli/resolve-license.js.map +1 -1
- package/dist/cli/stdio.d.ts +9 -0
- package/dist/cli/stdio.d.ts.map +1 -1
- package/dist/cli/stdio.js +48 -4
- package/dist/cli/stdio.js.map +1 -1
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +11 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -1
- package/dist/config.js.map +1 -1
- package/dist/diagnostics/bundle.d.ts +10 -0
- package/dist/diagnostics/bundle.d.ts.map +1 -0
- package/dist/diagnostics/bundle.js +148 -0
- package/dist/diagnostics/bundle.js.map +1 -0
- package/dist/diagnostics/compose.d.ts +3 -0
- package/dist/diagnostics/compose.d.ts.map +1 -0
- package/dist/diagnostics/compose.js +15 -0
- package/dist/diagnostics/compose.js.map +1 -0
- package/dist/diagnostics/events.d.ts +34 -0
- package/dist/diagnostics/events.d.ts.map +1 -0
- package/dist/diagnostics/events.js +3 -0
- package/dist/diagnostics/events.js.map +1 -0
- package/dist/diagnostics/file-sink.d.ts +38 -0
- package/dist/diagnostics/file-sink.d.ts.map +1 -0
- package/dist/diagnostics/file-sink.js +157 -0
- package/dist/diagnostics/file-sink.js.map +1 -0
- package/dist/diagnostics/redact.d.ts +7 -0
- package/dist/diagnostics/redact.d.ts.map +1 -0
- package/dist/diagnostics/redact.js +43 -0
- package/dist/diagnostics/redact.js.map +1 -0
- package/dist/diagnostics/tool-call-adapter.d.ts +4 -0
- package/dist/diagnostics/tool-call-adapter.d.ts.map +1 -0
- package/dist/diagnostics/tool-call-adapter.js +21 -0
- package/dist/diagnostics/tool-call-adapter.js.map +1 -0
- package/dist/engine/cesdk-adapter.d.ts +5 -1
- package/dist/engine/cesdk-adapter.d.ts.map +1 -1
- package/dist/engine/cesdk-adapter.js +9 -2
- package/dist/engine/cesdk-adapter.js.map +1 -1
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +4 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/scene-resource-schemes.d.ts +2 -0
- package/dist/engine/scene-resource-schemes.d.ts.map +1 -0
- package/dist/engine/scene-resource-schemes.js +20 -0
- package/dist/engine/scene-resource-schemes.js.map +1 -0
- package/dist/http/server.d.ts +0 -6
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +1 -2
- package/dist/http/server.js.map +1 -1
- package/dist/server.d.ts +0 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -60
- package/dist/server.js.map +1 -1
- package/dist/test/scripts/changelog-add.d.ts +8 -0
- package/dist/test/scripts/changelog-add.d.ts.map +1 -0
- package/dist/test/scripts/changelog-add.js +50 -0
- package/dist/test/scripts/changelog-add.js.map +1 -0
- package/dist/test/scripts/changelog-collate.d.ts +38 -0
- package/dist/test/scripts/changelog-collate.d.ts.map +1 -0
- package/dist/test/scripts/changelog-collate.js +171 -0
- package/dist/test/scripts/changelog-collate.js.map +1 -0
- package/dist/test/test/changelog.test.d.ts +2 -0
- package/dist/test/test/changelog.test.d.ts.map +1 -0
- package/dist/test/test/changelog.test.js +293 -0
- package/dist/test/test/changelog.test.js.map +1 -0
- package/dist/test/test/cli/dispatcher.test.js +10 -3
- package/dist/test/test/cli/dispatcher.test.js.map +1 -1
- package/dist/test/test/cli/redirect-console.test.js +31 -0
- package/dist/test/test/cli/redirect-console.test.js.map +1 -1
- package/dist/test/test/cli/resolve-license.test.js +10 -1
- package/dist/test/test/cli/resolve-license.test.js.map +1 -1
- package/dist/test/test/cli/stdio-diagnostics.test.d.ts +2 -0
- package/dist/test/test/cli/stdio-diagnostics.test.d.ts.map +1 -0
- package/dist/test/test/cli/stdio-diagnostics.test.js +31 -0
- package/dist/test/test/cli/stdio-diagnostics.test.js.map +1 -0
- package/dist/test/test/config.test.js +17 -13
- package/dist/test/test/config.test.js.map +1 -1
- package/dist/test/test/diagnostics/bundle.test.d.ts +2 -0
- package/dist/test/test/diagnostics/bundle.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/bundle.test.js +53 -0
- package/dist/test/test/diagnostics/bundle.test.js.map +1 -0
- package/dist/test/test/diagnostics/compose.test.d.ts +2 -0
- package/dist/test/test/diagnostics/compose.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/compose.test.js +31 -0
- package/dist/test/test/diagnostics/compose.test.js.map +1 -0
- package/dist/test/test/diagnostics/file-sink.test.d.ts +2 -0
- package/dist/test/test/diagnostics/file-sink.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/file-sink.test.js +113 -0
- package/dist/test/test/diagnostics/file-sink.test.js.map +1 -0
- package/dist/test/test/diagnostics/redact.test.d.ts +2 -0
- package/dist/test/test/diagnostics/redact.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/redact.test.js +59 -0
- package/dist/test/test/diagnostics/redact.test.js.map +1 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts +2 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.d.ts.map +1 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.js +34 -0
- package/dist/test/test/diagnostics/tool-call-adapter.test.js.map +1 -0
- package/dist/test/test/engine/cesdk-adapter.test.d.ts +2 -0
- package/dist/test/test/engine/cesdk-adapter.test.d.ts.map +1 -0
- package/dist/test/test/engine/cesdk-adapter.test.js +32 -0
- package/dist/test/test/engine/cesdk-adapter.test.js.map +1 -0
- package/dist/test/test/handbook-contract.test.js +6 -2
- package/dist/test/test/handbook-contract.test.js.map +1 -1
- package/dist/test/test/http/server.test.js +0 -36
- package/dist/test/test/http/server.test.js.map +1 -1
- package/dist/test/test/http/workspace-auth.test.js +0 -1
- package/dist/test/test/http/workspace-auth.test.js.map +1 -1
- package/dist/test/test/server.test.js +0 -40
- package/dist/test/test/server.test.js.map +1 -1
- package/dist/test/test/tools/edit-harness.d.ts +14 -0
- package/dist/test/test/tools/edit-harness.d.ts.map +1 -0
- package/dist/test/test/tools/edit-harness.js +30 -0
- package/dist/test/test/tools/edit-harness.js.map +1 -0
- package/dist/test/test/tools/edit.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/edit.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/edit.telemetry.test.js +46 -0
- package/dist/test/test/tools/edit.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/export-harness.d.ts +13 -0
- package/dist/test/test/tools/export-harness.d.ts.map +1 -0
- package/dist/test/test/tools/export-harness.js +27 -0
- package/dist/test/test/tools/export-harness.js.map +1 -0
- package/dist/test/test/tools/export.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/export.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/export.telemetry.test.js +65 -0
- package/dist/test/test/tools/export.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/import.test.d.ts +2 -0
- package/dist/test/test/tools/import.test.d.ts.map +1 -0
- package/dist/test/test/tools/import.test.js +122 -0
- package/dist/test/test/tools/import.test.js.map +1 -0
- package/dist/test/test/tools/index.test.js +78 -16
- package/dist/test/test/tools/index.test.js.map +1 -1
- package/dist/test/test/tools/load.integration.test.d.ts +2 -0
- package/dist/test/test/tools/load.integration.test.d.ts.map +1 -0
- package/dist/test/test/tools/load.integration.test.js +165 -0
- package/dist/test/test/tools/load.integration.test.js.map +1 -0
- package/dist/test/test/tools/load.test.d.ts +2 -0
- package/dist/test/test/tools/load.test.d.ts.map +1 -0
- package/dist/test/test/tools/load.test.js +387 -0
- package/dist/test/test/tools/load.test.js.map +1 -0
- package/dist/test/test/tools/preview-harness.d.ts +9 -0
- package/dist/test/test/tools/preview-harness.d.ts.map +1 -0
- package/dist/test/test/tools/preview-harness.js +23 -0
- package/dist/test/test/tools/preview-harness.js.map +1 -0
- package/dist/test/test/tools/preview.telemetry.test.d.ts +2 -0
- package/dist/test/test/tools/preview.telemetry.test.d.ts.map +1 -0
- package/dist/test/test/tools/preview.telemetry.test.js +36 -0
- package/dist/test/test/tools/preview.telemetry.test.js.map +1 -0
- package/dist/test/test/tools/schema-best-practices.d.ts +13 -0
- package/dist/test/test/tools/schema-best-practices.d.ts.map +1 -0
- package/dist/test/test/tools/schema-best-practices.js +169 -0
- package/dist/test/test/tools/schema-best-practices.js.map +1 -0
- package/dist/test/test/tools/schema-best-practices.test.d.ts +3 -0
- package/dist/test/test/tools/schema-best-practices.test.d.ts.map +1 -0
- package/dist/test/test/tools/schema-best-practices.test.js +194 -0
- package/dist/test/test/tools/schema-best-practices.test.js.map +1 -0
- package/dist/test/test/tools/spans.test.d.ts +2 -0
- package/dist/test/test/tools/spans.test.d.ts.map +1 -0
- package/dist/test/test/tools/spans.test.js +84 -0
- package/dist/test/test/tools/spans.test.js.map +1 -0
- package/dist/test/test/viewer/cesdk-cdn.test.d.ts +2 -0
- package/dist/test/test/viewer/cesdk-cdn.test.d.ts.map +1 -0
- package/dist/test/test/viewer/cesdk-cdn.test.js +19 -0
- package/dist/test/test/viewer/cesdk-cdn.test.js.map +1 -0
- package/dist/test/test/viewer/config-route.test.d.ts +2 -0
- package/dist/test/test/viewer/config-route.test.d.ts.map +1 -0
- package/dist/test/test/viewer/config-route.test.js +28 -0
- package/dist/test/test/viewer/config-route.test.js.map +1 -0
- package/dist/test/test/viewer/spa-version.test.d.ts +2 -0
- package/dist/test/test/viewer/spa-version.test.d.ts.map +1 -0
- package/dist/test/test/viewer/spa-version.test.js +14 -0
- package/dist/test/test/viewer/spa-version.test.js.map +1 -0
- package/dist/test/test/workspace/content-hash.test.d.ts +2 -0
- package/dist/test/test/workspace/content-hash.test.d.ts.map +1 -0
- package/dist/test/test/workspace/content-hash.test.js +17 -0
- package/dist/test/test/workspace/content-hash.test.js.map +1 -0
- package/dist/test/tsconfig.test.tsbuildinfo +1 -1
- package/dist/test/vitest.config.js +1 -1
- package/dist/test/vitest.config.js.map +1 -1
- package/dist/tools/asset-generate.d.ts.map +1 -1
- package/dist/tools/asset-generate.js +1 -8
- package/dist/tools/asset-generate.js.map +1 -1
- package/dist/tools/edit.d.ts +3 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +145 -96
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/export.d.ts +3 -0
- package/dist/tools/export.d.ts.map +1 -1
- package/dist/tools/export.js +146 -108
- package/dist/tools/export.js.map +1 -1
- package/dist/tools/import.d.ts +12 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +144 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +44 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/load.d.ts +26 -0
- package/dist/tools/load.d.ts.map +1 -0
- package/dist/tools/load.js +400 -0
- package/dist/tools/load.js.map +1 -0
- package/dist/tools/preview.d.ts +3 -0
- package/dist/tools/preview.d.ts.map +1 -1
- package/dist/tools/preview.js +79 -44
- package/dist/tools/preview.js.map +1 -1
- package/dist/tools/result.d.ts +1 -1
- package/dist/tools/result.js +2 -2
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/spans.d.ts +45 -0
- package/dist/tools/spans.d.ts.map +1 -0
- package/dist/tools/spans.js +77 -0
- package/dist/tools/spans.js.map +1 -0
- package/dist/tools/telemetry-wrapper.d.ts +4 -0
- package/dist/tools/telemetry-wrapper.d.ts.map +1 -0
- package/dist/tools/telemetry-wrapper.js +43 -0
- package/dist/tools/telemetry-wrapper.js.map +1 -0
- package/dist/viewer/cesdk-cdn.d.ts +16 -0
- package/dist/viewer/cesdk-cdn.d.ts.map +1 -0
- package/dist/viewer/cesdk-cdn.js +30 -0
- package/dist/viewer/cesdk-cdn.js.map +1 -0
- package/dist/viewer/router.d.ts +6 -0
- package/dist/viewer/router.d.ts.map +1 -1
- package/dist/viewer/router.js +4 -1
- package/dist/viewer/router.js.map +1 -1
- package/dist/viewer/spa-assets.generated.d.ts.map +1 -1
- package/dist/viewer/spa-assets.generated.js +2 -3
- package/dist/viewer/spa-assets.generated.js.map +1 -1
- package/dist/workspace/content-hash.d.ts +2 -0
- package/dist/workspace/content-hash.d.ts.map +1 -0
- package/dist/workspace/content-hash.js +15 -0
- package/dist/workspace/content-hash.js.map +1 -0
- package/package.json +18 -9
- package/assets/docs/guide/actions.md +0 -1038
- package/assets/docs/guide/animation/overview.md +0 -22
- package/assets/docs/guide/automation/batch-processing.md +0 -474
- package/assets/docs/guide/browser-support.md +0 -38
- package/assets/docs/guide/concepts/edit-modes.md +0 -431
- package/assets/docs/guide/concepts/headless-mode/browser.md +0 -291
- package/assets/docs/guide/create-audio/audio.md +0 -336
- package/assets/docs/guide/create-video/overview.md +0 -224
- package/assets/docs/guide/create-video/timeline-editor.md +0 -622
- package/assets/docs/guide/create-video/update-caption-presets.md +0 -676
- package/assets/docs/guide/edit-image/vectorize.md +0 -204
- package/assets/docs/guide/export-save-publish/export/to-html5.md +0 -474
- package/assets/docs/guide/export-save-publish/export/to-mp4.md +0 -364
- package/assets/docs/guide/get-started/vanilla-js/quickstart.md +0 -175
- package/assets/docs/guide/grid-and-rulers.md +0 -222
- package/assets/docs/guide/guides/text/rendering-internals.md +0 -796
- package/assets/docs/guide/import-media/asset-library.md +0 -23
- package/assets/docs/guide/import-media/asset-panel/basics.md +0 -324
- package/assets/docs/guide/import-media/asset-panel/customize.md +0 -478
- package/assets/docs/guide/import-media/asset-panel/thumbnails.md +0 -633
- package/assets/docs/guide/import-media/capture-from-camera/record-video.md +0 -137
- package/assets/docs/guide/import-media/capture-from-camera.md +0 -20
- package/assets/docs/guide/import-media/from-local-source/user-upload.md +0 -438
- package/assets/docs/guide/import-media/from-local-source.md +0 -20
- package/assets/docs/guide/import-media/from-remote-source/getty-images.md +0 -627
- package/assets/docs/guide/import-media/from-remote-source/imgly-premium-assets.md +0 -625
- package/assets/docs/guide/import-media/from-remote-source/pexels.md +0 -692
- package/assets/docs/guide/import-media/from-remote-source/soundstripe.md +0 -497
- package/assets/docs/guide/import-media/from-remote-source/third-party.md +0 -51
- package/assets/docs/guide/import-media/from-remote-source/unsplash.md +0 -914
- package/assets/docs/guide/import-media/from-remote-source/your-server.md +0 -764
- package/assets/docs/guide/open-the-editor/from-htmlcanvas.md +0 -228
- package/assets/docs/guide/open-the-editor/set-zoom-level.md +0 -303
- package/assets/docs/guide/plugins/asset-sources.md +0 -553
- package/assets/docs/guide/starterkits/3d-mockup-editor.md +0 -748
- package/assets/docs/guide/starterkits/advanced-editor.md +0 -698
- package/assets/docs/guide/starterkits/advanced-video-editor.md +0 -696
- package/assets/docs/guide/starterkits/ai-editor.md +0 -749
- package/assets/docs/guide/starterkits/airtable-image-editor.md +0 -672
- package/assets/docs/guide/starterkits/apparel-ui.md +0 -188
- package/assets/docs/guide/starterkits/assets.md +0 -27
- package/assets/docs/guide/starterkits/auto-resize.md +0 -586
- package/assets/docs/guide/starterkits/automated-video-generation.md +0 -692
- package/assets/docs/guide/starterkits/background-removal-editor.md +0 -480
- package/assets/docs/guide/starterkits/content-moderation.md +0 -863
- package/assets/docs/guide/starterkits/creative-automation.md +0 -28
- package/assets/docs/guide/starterkits/custom-built-uis.md +0 -26
- package/assets/docs/guide/starterkits/customization.md +0 -29
- package/assets/docs/guide/starterkits/cutout-lines-editor.md +0 -470
- package/assets/docs/guide/starterkits/data-merge.md +0 -850
- package/assets/docs/guide/starterkits/design-editor.md +0 -698
- package/assets/docs/guide/starterkits/design-generation.md +0 -719
- package/assets/docs/guide/starterkits/design-validation.md +0 -808
- package/assets/docs/guide/starterkits/editor-ui-configurations.md +0 -14
- package/assets/docs/guide/starterkits/export-options.md +0 -724
- package/assets/docs/guide/starterkits/export-using-renderer.md +0 -708
- package/assets/docs/guide/starterkits/extensibility.md +0 -28
- package/assets/docs/guide/starterkits/force-crop-editor.md +0 -675
- package/assets/docs/guide/starterkits/form-based-template-adoption.md +0 -522
- package/assets/docs/guide/starterkits/getty-images-editor.md +0 -700
- package/assets/docs/guide/starterkits/html5-ads-exporter.md +0 -719
- package/assets/docs/guide/starterkits/indesign-template-import.md +0 -580
- package/assets/docs/guide/starterkits/layouts-editor.md +0 -724
- package/assets/docs/guide/starterkits/mobile-ui.md +0 -185
- package/assets/docs/guide/starterkits/mockup-editor.md +0 -745
- package/assets/docs/guide/starterkits/multi-image-generation.md +0 -542
- package/assets/docs/guide/starterkits/page-sizes-editor.md +0 -657
- package/assets/docs/guide/starterkits/pexels-image-editor.md +0 -665
- package/assets/docs/guide/starterkits/photo-editor.md +0 -755
- package/assets/docs/guide/starterkits/photo-ui.md +0 -186
- package/assets/docs/guide/starterkits/photobook-ui.md +0 -188
- package/assets/docs/guide/starterkits/placeholders.md +0 -678
- package/assets/docs/guide/starterkits/player.md +0 -405
- package/assets/docs/guide/starterkits/plugins.md +0 -25
- package/assets/docs/guide/starterkits/postcard-editor.md +0 -202
- package/assets/docs/guide/starterkits/pptx-template-import.md +0 -581
- package/assets/docs/guide/starterkits/print-ready-pdf-editor.md +0 -746
- package/assets/docs/guide/starterkits/product-editor.md +0 -773
- package/assets/docs/guide/starterkits/psd-template-import.md +0 -580
- package/assets/docs/guide/starterkits/qr-code-editor.md +0 -470
- package/assets/docs/guide/starterkits/single-page-editor.md +0 -661
- package/assets/docs/guide/starterkits/start-with-image.md +0 -684
- package/assets/docs/guide/starterkits/start-with-video.md +0 -651
- package/assets/docs/guide/starterkits/t-shirt-designer.md +0 -742
- package/assets/docs/guide/starterkits/templating.md +0 -23
- package/assets/docs/guide/starterkits/theming.md +0 -662
- package/assets/docs/guide/starterkits/translation-internationalization.md +0 -662
- package/assets/docs/guide/starterkits/unsplash-editor.md +0 -839
- package/assets/docs/guide/starterkits/vectorizer-editor.md +0 -466
- package/assets/docs/guide/starterkits/version-history.md +0 -745
- package/assets/docs/guide/starterkits/video-animations.md +0 -853
- package/assets/docs/guide/starterkits/video-captions.md +0 -884
- package/assets/docs/guide/starterkits/video-editing.md +0 -25
- package/assets/docs/guide/starterkits/video-editor.md +0 -696
- package/assets/docs/guide/starterkits/video-export-options.md +0 -676
- package/assets/docs/guide/starterkits/viewer.md +0 -400
- package/assets/docs/guide/starterkits.md +0 -41
- package/assets/docs/guide/stickers-and-shapes/create-edit/vector-edit.md +0 -362
- package/assets/docs/guide/text/custom-fonts.md +0 -401
- package/assets/docs/guide/text/decorations.md +0 -330
- package/assets/docs/guide/text/enumerations.md +0 -258
- package/assets/docs/guide/to-v1-10.md +0 -131
- package/assets/docs/guide/to-v1-13.md +0 -165
- package/assets/docs/guide/to-v1-32.md +0 -110
- package/assets/docs/guide/to-v1-69.md +0 -468
- package/assets/docs/guide/to-v1-72.md +0 -193
- package/assets/docs/guide/use-templates/library.md +0 -450
- package/assets/docs/guide/user-interface/ai-integration/audio-generation.md +0 -428
- package/assets/docs/guide/user-interface/ai-integration/auto-captions.md +0 -337
- package/assets/docs/guide/user-interface/ai-integration/custom-provider.md +0 -853
- package/assets/docs/guide/user-interface/ai-integration/gateway-provider.md +0 -1045
- package/assets/docs/guide/user-interface/ai-integration/image-generation.md +0 -641
- package/assets/docs/guide/user-interface/ai-integration/integrate.md +0 -966
- package/assets/docs/guide/user-interface/ai-integration/proxy-server.md +0 -99
- package/assets/docs/guide/user-interface/ai-integration/text-generation.md +0 -498
- package/assets/docs/guide/user-interface/ai-integration/video-generation.md +0 -493
- package/assets/docs/guide/user-interface/ai-integration.md +0 -30
- package/assets/docs/guide/user-interface/appearance/change-ui-font.md +0 -316
- package/assets/docs/guide/user-interface/appearance/custom-labels.md +0 -509
- package/assets/docs/guide/user-interface/appearance/icons.md +0 -373
- package/assets/docs/guide/user-interface/appearance/theming.md +0 -665
- package/assets/docs/guide/user-interface/appearance.md +0 -23
- package/assets/docs/guide/user-interface/build-your-own-ui.md +0 -620
- package/assets/docs/guide/user-interface/customization/canvas-menu.md +0 -412
- package/assets/docs/guide/user-interface/customization/canvas.md +0 -281
- package/assets/docs/guide/user-interface/customization/color-palette.md +0 -413
- package/assets/docs/guide/user-interface/customization/crop-presets.md +0 -384
- package/assets/docs/guide/user-interface/customization/disable-or-enable.md +0 -676
- package/assets/docs/guide/user-interface/customization/dock.md +0 -399
- package/assets/docs/guide/user-interface/customization/force-crop.md +0 -289
- package/assets/docs/guide/user-interface/customization/inspector-bar.md +0 -371
- package/assets/docs/guide/user-interface/customization/navigation-bar.md +0 -516
- package/assets/docs/guide/user-interface/customization/page-format.md +0 -436
- package/assets/docs/guide/user-interface/customization/panel.md +0 -605
- package/assets/docs/guide/user-interface/customization/quick-start/add-action-buttons.md +0 -531
- package/assets/docs/guide/user-interface/customization/quick-start/add-dock-buttons.md +0 -358
- package/assets/docs/guide/user-interface/customization/quick-start/create-custom-components.md +0 -374
- package/assets/docs/guide/user-interface/customization/quick-start/reorder-components.md +0 -323
- package/assets/docs/guide/user-interface/customization/quick-start/show-hide-components.md +0 -294
- package/assets/docs/guide/user-interface/customization/quick-start.md +0 -12
- package/assets/docs/guide/user-interface/customization/reference/component-order-api.md +0 -519
- package/assets/docs/guide/user-interface/customization/reference/component-reference.md +0 -333
- package/assets/docs/guide/user-interface/customization/reference.md +0 -12
- package/assets/docs/guide/user-interface/customization.md +0 -39
- package/assets/docs/guide/user-interface/localization.md +0 -633
- package/assets/docs/guide/user-interface/overview.md +0 -167
- package/assets/docs/guide/user-interface/ui-extensions/add-custom-feature.md +0 -411
- package/assets/docs/guide/user-interface/ui-extensions/asset-library.md +0 -721
- package/assets/docs/guide/user-interface/ui-extensions/create-custom-panel.md +0 -331
- package/assets/docs/guide/user-interface/ui-extensions/customize-behaviour.md +0 -553
- package/assets/docs/guide/user-interface/ui-extensions/notifications-and-dialogs.md +0 -672
- package/assets/docs/guide/user-interface/ui-extensions/quick-actions.md +0 -415
- package/assets/docs/guide/user-interface/ui-extensions/register-new-component.md +0 -521
- package/assets/docs/guide/user-interface/ui-extensions.md +0 -26
- package/assets/docs/guide/user-interface.md +0 -25
- package/assets/prompts/evals-assetGenerate.md +0 -12
- package/assets/prompts/evals-brutalistCore.md +0 -34
- package/assets/prompts/evals-danskCatalogue.md +0 -31
- package/assets/prompts/evals-exportRoundTrip.md +0 -12
- package/assets/prompts/evals-inspectPriorCode.md +0 -16
- package/assets/prompts/evals-listProjectFiles.md +0 -6
- package/assets/prompts/evals-readAndExplainScript.md +0 -6
- package/assets/prompts/evals-resumeAcrossRestart.md +0 -15
- package/assets/prompts/evals-rewindRecovery.md +0 -10
- package/assets/prompts/evals-searchAcrossFiles.md +0 -6
- package/assets/prompts/evals-weddingCard.md +0 -20
- package/assets/prompts/explain.md +0 -6
- package/assets/prompts/review.md +0 -6
- package/dist/frontmatter.d.ts +0 -15
- package/dist/frontmatter.d.ts.map +0 -1
- package/dist/frontmatter.js +0 -46
- package/dist/frontmatter.js.map +0 -1
- package/dist/test/test/frontmatter.test.d.ts +0 -2
- package/dist/test/test/frontmatter.test.d.ts.map +0 -1
- package/dist/test/test/frontmatter.test.js +0 -55
- package/dist/test/test/frontmatter.test.js.map +0 -1
|
@@ -1,432 +1,650 @@
|
|
|
1
|
-
> This is one page of the CE.SDK
|
|
1
|
+
> This is one page of the CE.SDK Node.js documentation. For a complete overview, see the [Node.js Documentation Index](https://img.ly/docs/cesdk/node.md). For all docs in one file, see [llms-full.txt](./llms-full.txt.md).
|
|
2
2
|
|
|
3
3
|
**Navigation:** [Guides](./guides.md) > [Create and Edit Compositions](./create-composition.md) > [Create a Collage](./create-composition/collage.md)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Create collages in a headless Node.js environment by loading layout templates and transferring image content between scenes.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
> **Reading time:** 15 minutes
|
|
9
|
+
> **Reading time:** 10 minutes
|
|
12
10
|
>
|
|
13
11
|
> **Resources:**
|
|
14
12
|
>
|
|
15
13
|
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
16
|
-
>
|
|
17
|
-
> - [
|
|
18
|
-
>
|
|
14
|
+
>
|
|
15
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-create-composition-collage-server-js)
|
|
16
|
+
>
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-create-composition-collage-server-js)
|
|
18
|
+
|
|
19
|
+
In server-side workflows, collages are created by loading a layout scene file that defines the visual structure, then transferring content from an existing scene into those positions. This approach enables batch processing of images into various collage formats.
|
|
20
|
+
|
|
21
|
+
```typescript file=@cesdk_web_examples/guides-create-composition-collage-server-js/server-js.ts reference-only
|
|
22
|
+
import CreativeEngine, { DesignBlockId } from '@cesdk/node';
|
|
23
|
+
import { writeFileSync } from 'fs';
|
|
24
|
+
import { config as loadEnv } from 'dotenv';
|
|
25
|
+
|
|
26
|
+
// Load environment variables
|
|
27
|
+
loadEnv();
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Create a Collage (Server/Node.js)
|
|
31
|
+
*
|
|
32
|
+
* This example demonstrates how to create collages programmatically:
|
|
33
|
+
* 1. Creating a scene with images
|
|
34
|
+
* 2. Loading a layout scene file
|
|
35
|
+
* 3. Transferring content from the original scene to the layout
|
|
36
|
+
* 4. Exporting the final collage
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
// Sort blocks by visual position (top-to-bottom, left-to-right)
|
|
40
|
+
// This ensures consistent content mapping between layouts
|
|
41
|
+
function visuallySortBlocks(
|
|
42
|
+
engine: CreativeEngine,
|
|
43
|
+
blocks: DesignBlockId[]
|
|
44
|
+
): DesignBlockId[] {
|
|
45
|
+
return blocks
|
|
46
|
+
.map((block) => ({
|
|
47
|
+
block,
|
|
48
|
+
x: Math.round(engine.block.getPositionX(block)),
|
|
49
|
+
y: Math.round(engine.block.getPositionY(block))
|
|
50
|
+
}))
|
|
51
|
+
.sort((a, b) => {
|
|
52
|
+
if (a.y === b.y) return a.x - b.x;
|
|
53
|
+
return a.y - b.y;
|
|
54
|
+
})
|
|
55
|
+
.map((item) => item.block);
|
|
56
|
+
}
|
|
19
57
|
|
|
20
|
-
|
|
58
|
+
// Recursively collect all descendant blocks
|
|
59
|
+
function getChildrenTree(
|
|
60
|
+
engine: CreativeEngine,
|
|
61
|
+
blockId: DesignBlockId
|
|
62
|
+
): DesignBlockId[] {
|
|
63
|
+
const children = engine.block.getChildren(blockId);
|
|
64
|
+
const result: DesignBlockId[] = [];
|
|
65
|
+
for (const child of children) {
|
|
66
|
+
result.push(child);
|
|
67
|
+
result.push(...getChildrenTree(engine, child));
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
21
71
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
72
|
+
async function run() {
|
|
73
|
+
let engine: CreativeEngine | undefined;
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const config = {
|
|
77
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL,
|
|
78
|
+
// license: process.env.CESDK_LICENSE,
|
|
79
|
+
logger: (message: string, logLevel?: string) => {
|
|
80
|
+
if (logLevel === 'ERROR' || logLevel === 'WARN') {
|
|
81
|
+
console.log(`[${logLevel}]`, message);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
25
85
|
|
|
26
|
-
|
|
86
|
+
engine = await CreativeEngine.init(config);
|
|
87
|
+
console.log('✓ Engine initialized');
|
|
88
|
+
|
|
89
|
+
// Create a scene with images to arrange in a collage
|
|
90
|
+
const scene = engine.scene.create();
|
|
91
|
+
const page = engine.block.create('page');
|
|
92
|
+
engine.block.appendChild(scene, page);
|
|
93
|
+
|
|
94
|
+
// Set page dimensions for the collage
|
|
95
|
+
engine.block.setWidth(page, 1080);
|
|
96
|
+
engine.block.setHeight(page, 1080);
|
|
97
|
+
|
|
98
|
+
// Add sample images to the page
|
|
99
|
+
const imageUrls = [
|
|
100
|
+
'https://img.ly/static/ubq_samples/imgly_logo.jpg',
|
|
101
|
+
'https://img.ly/static/ubq_samples/sample_1.jpg',
|
|
102
|
+
'https://img.ly/static/ubq_samples/sample_2.jpg',
|
|
103
|
+
'https://img.ly/static/ubq_samples/sample_3.jpg'
|
|
104
|
+
];
|
|
105
|
+
|
|
106
|
+
for (let i = 0; i < imageUrls.length; i++) {
|
|
107
|
+
const graphic = engine.block.create('graphic');
|
|
108
|
+
const imageFill = engine.block.createFill('image');
|
|
109
|
+
engine.block.setString(
|
|
110
|
+
imageFill,
|
|
111
|
+
'fill/image/imageFileURI',
|
|
112
|
+
imageUrls[i]
|
|
113
|
+
);
|
|
114
|
+
engine.block.setFill(graphic, imageFill);
|
|
27
115
|
|
|
28
|
-
|
|
116
|
+
// Position images in a simple grid (will be rearranged by layout)
|
|
117
|
+
engine.block.setPositionX(graphic, (i % 2) * 540);
|
|
118
|
+
engine.block.setPositionY(graphic, Math.floor(i / 2) * 540);
|
|
119
|
+
engine.block.setWidth(graphic, 540);
|
|
120
|
+
engine.block.setHeight(graphic, 540);
|
|
29
121
|
|
|
30
|
-
|
|
122
|
+
engine.block.appendChild(page, graphic);
|
|
123
|
+
}
|
|
31
124
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
125
|
+
console.log(`✓ Scene created with ${imageUrls.length} images`);
|
|
126
|
+
|
|
127
|
+
// Load a layout template that defines the collage structure
|
|
128
|
+
// The layout contains positioned placeholder blocks
|
|
129
|
+
const layoutUrl =
|
|
130
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.template/templates/cesdk_collage_1.scene';
|
|
131
|
+
|
|
132
|
+
const layoutSceneString = await fetch(layoutUrl).then((res) => res.text());
|
|
133
|
+
const layoutBlocks = await engine.block.loadFromString(layoutSceneString);
|
|
134
|
+
const layoutPage = layoutBlocks[0];
|
|
135
|
+
|
|
136
|
+
console.log('✓ Layout template loaded');
|
|
137
|
+
|
|
138
|
+
// Collect image blocks from both pages
|
|
139
|
+
const sourceBlocks = getChildrenTree(engine, page);
|
|
140
|
+
const sourceImages = sourceBlocks.filter(
|
|
141
|
+
(id) => engine!.block.getKind(id) === 'image'
|
|
142
|
+
);
|
|
143
|
+
const sortedSourceImages = visuallySortBlocks(engine, sourceImages);
|
|
144
|
+
|
|
145
|
+
const layoutChildren = getChildrenTree(engine, layoutPage);
|
|
146
|
+
const layoutImages = layoutChildren.filter(
|
|
147
|
+
(id) => engine!.block.getKind(id) === 'image'
|
|
148
|
+
);
|
|
149
|
+
const sortedLayoutImages = visuallySortBlocks(engine, layoutImages);
|
|
150
|
+
|
|
151
|
+
console.log(
|
|
152
|
+
`✓ Found ${sortedSourceImages.length} source images, ${sortedLayoutImages.length} layout slots`
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
// Transfer image content from source to layout positions
|
|
156
|
+
const transferCount = Math.min(
|
|
157
|
+
sortedSourceImages.length,
|
|
158
|
+
sortedLayoutImages.length
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
for (let i = 0; i < transferCount; i++) {
|
|
162
|
+
const sourceBlock = sortedSourceImages[i];
|
|
163
|
+
const targetBlock = sortedLayoutImages[i];
|
|
164
|
+
|
|
165
|
+
// Get the source image fill
|
|
166
|
+
const sourceFill = engine.block.getFill(sourceBlock);
|
|
167
|
+
const targetFill = engine.block.getFill(targetBlock);
|
|
168
|
+
|
|
169
|
+
// Transfer the image URI
|
|
170
|
+
const imageUri = engine.block.getString(
|
|
171
|
+
sourceFill,
|
|
172
|
+
'fill/image/imageFileURI'
|
|
173
|
+
);
|
|
174
|
+
engine.block.setString(targetFill, 'fill/image/imageFileURI', imageUri);
|
|
175
|
+
|
|
176
|
+
// Transfer source sets if present
|
|
177
|
+
try {
|
|
178
|
+
const sourceSet = engine.block.getSourceSet(
|
|
179
|
+
sourceFill,
|
|
180
|
+
'fill/image/sourceSet'
|
|
181
|
+
);
|
|
182
|
+
if (sourceSet.length > 0) {
|
|
183
|
+
engine.block.setSourceSet(
|
|
184
|
+
targetFill,
|
|
185
|
+
'fill/image/sourceSet',
|
|
186
|
+
sourceSet
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
} catch {
|
|
190
|
+
// Source set not available, skip
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Reset crop to fill the new frame dimensions
|
|
194
|
+
engine.block.resetCrop(targetBlock);
|
|
195
|
+
|
|
196
|
+
// Transfer placeholder behavior if supported
|
|
197
|
+
if (engine.block.supportsPlaceholderBehavior(sourceBlock)) {
|
|
198
|
+
engine.block.setPlaceholderBehaviorEnabled(
|
|
199
|
+
targetBlock,
|
|
200
|
+
engine.block.isPlaceholderBehaviorEnabled(sourceBlock)
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
35
204
|
|
|
36
|
-
|
|
205
|
+
console.log(`✓ Transferred ${transferCount} images to layout`);
|
|
37
206
|
|
|
38
|
-
|
|
207
|
+
// Transfer text content (if both scenes have text blocks)
|
|
208
|
+
const sourceTexts = sourceBlocks.filter(
|
|
209
|
+
(id) => engine!.block.getType(id) === '//ly.img.ubq/text'
|
|
210
|
+
);
|
|
211
|
+
const layoutTexts = layoutChildren.filter(
|
|
212
|
+
(id) => engine!.block.getType(id) === '//ly.img.ubq/text'
|
|
213
|
+
);
|
|
39
214
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
- Magazine spreads
|
|
43
|
-
- Social media posts
|
|
215
|
+
const sortedSourceTexts = visuallySortBlocks(engine, sourceTexts);
|
|
216
|
+
const sortedLayoutTexts = visuallySortBlocks(engine, layoutTexts);
|
|
44
217
|
|
|
45
|
-
|
|
218
|
+
const textTransferCount = Math.min(
|
|
219
|
+
sortedSourceTexts.length,
|
|
220
|
+
sortedLayoutTexts.length
|
|
221
|
+
);
|
|
46
222
|
|
|
47
|
-
|
|
223
|
+
for (let i = 0; i < textTransferCount; i++) {
|
|
224
|
+
const sourceText = sortedSourceTexts[i];
|
|
225
|
+
const targetText = sortedLayoutTexts[i];
|
|
48
226
|
|
|
49
|
-
|
|
50
|
-
|
|
227
|
+
// Transfer text content
|
|
228
|
+
const text = engine.block.getString(sourceText, 'text/text');
|
|
229
|
+
engine.block.setString(targetText, 'text/text', text);
|
|
51
230
|
|
|
52
|
-
|
|
231
|
+
// Transfer font
|
|
232
|
+
const fontUri = engine.block.getString(sourceText, 'text/fontFileUri');
|
|
233
|
+
const typeface = engine.block.getTypeface(sourceText);
|
|
234
|
+
engine.block.setFont(targetText, fontUri, typeface);
|
|
53
235
|
|
|
54
|
-
|
|
236
|
+
// Transfer text color
|
|
237
|
+
const textColor = engine.block.getColor(sourceText, 'fill/solid/color');
|
|
238
|
+
engine.block.setColor(targetText, 'fill/solid/color', textColor);
|
|
239
|
+
}
|
|
55
240
|
|
|
56
|
-
|
|
241
|
+
if (textTransferCount > 0) {
|
|
242
|
+
console.log(`✓ Transferred ${textTransferCount} text blocks`);
|
|
243
|
+
}
|
|
57
244
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
245
|
+
// Export the final collage
|
|
246
|
+
// Use the layout page dimensions for the export
|
|
247
|
+
const layoutWidth = engine.block.getWidth(layoutPage);
|
|
248
|
+
const layoutHeight = engine.block.getHeight(layoutPage);
|
|
249
|
+
|
|
250
|
+
const blob = await engine.block.export(layoutPage, {
|
|
251
|
+
mimeType: 'image/png',
|
|
252
|
+
targetWidth: layoutWidth,
|
|
253
|
+
targetHeight: layoutHeight
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
257
|
+
writeFileSync('collage-output.png', buffer);
|
|
258
|
+
console.log(
|
|
259
|
+
`✓ Exported collage to collage-output.png (${layoutWidth}x${layoutHeight})`
|
|
260
|
+
);
|
|
261
|
+
|
|
262
|
+
// Clean up temporary blocks
|
|
263
|
+
engine.block.destroy(page);
|
|
264
|
+
console.log('✓ Cleanup completed');
|
|
265
|
+
|
|
266
|
+
console.log('\n✓ Collage created successfully!');
|
|
267
|
+
} catch (error) {
|
|
268
|
+
console.error('Error:', error);
|
|
269
|
+
process.exit(1);
|
|
270
|
+
} finally {
|
|
271
|
+
// Always dispose the engine
|
|
272
|
+
engine?.dispose();
|
|
273
|
+
console.log('\n✓ Engine disposed');
|
|
274
|
+
}
|
|
275
|
+
}
|
|
62
276
|
|
|
63
|
-
|
|
277
|
+
// Run the example
|
|
278
|
+
run();
|
|
279
|
+
```
|
|
64
280
|
|
|
65
|
-
|
|
281
|
+
This guide covers how to load layout templates, implement visual sorting to map content between layouts, transfer images and text while preserving properties, and export the final collage.
|
|
66
282
|
|
|
67
|
-
|
|
283
|
+
## How Server-Side Collages Work
|
|
68
284
|
|
|
69
|
-
|
|
285
|
+
Server-side collage creation follows this workflow:
|
|
70
286
|
|
|
71
|
-
1.
|
|
72
|
-
2.
|
|
287
|
+
1. **Create a scene with images** — Load or create blocks containing your source images
|
|
288
|
+
2. **Load a layout template** — Fetch a scene file that defines the collage structure
|
|
289
|
+
3. **Sort blocks visually** — Order blocks by position for consistent mapping
|
|
290
|
+
4. **Transfer content** — Copy image URIs and text from source to layout positions
|
|
291
|
+
5. **Export the result** — Generate the final collage image
|
|
73
292
|
|
|
74
|
-
|
|
293
|
+
The layout template defines where images appear in the final output. By sorting blocks visually (top-to-bottom, left-to-right), content maps predictably between different layouts.
|
|
75
294
|
|
|
76
|
-
|
|
295
|
+
## Initialize the Engine
|
|
77
296
|
|
|
78
|
-
|
|
79
|
-
- `key`
|
|
80
|
-
- `label`
|
|
81
|
-
- `icon`
|
|
82
|
-
- `entries`
|
|
297
|
+
Start by initializing the headless engine.
|
|
83
298
|
|
|
84
|
-
|
|
299
|
+
```typescript highlight=highlight-setup
|
|
300
|
+
const config = {
|
|
301
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL,
|
|
302
|
+
// license: process.env.CESDK_LICENSE,
|
|
303
|
+
logger: (message: string, logLevel?: string) => {
|
|
304
|
+
if (logLevel === 'ERROR' || logLevel === 'WARN') {
|
|
305
|
+
console.log(`[${logLevel}]`, message);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
};
|
|
85
309
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
{
|
|
89
|
-
id: 'ly.img.assetLibrary.dock',
|
|
90
|
-
key: 'layouts-dock-entry',
|
|
91
|
-
label: 'Layouts',
|
|
92
|
-
icon: '@imgly/Layout',
|
|
93
|
-
entries: ['layouts']
|
|
94
|
-
}
|
|
95
|
-
]);
|
|
310
|
+
engine = await CreativeEngine.init(config);
|
|
311
|
+
console.log('✓ Engine initialized');
|
|
96
312
|
```
|
|
97
313
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
314
|
+
## Create a Scene with Images
|
|
315
|
+
|
|
316
|
+
Create a scene containing the images you want to arrange in the collage. In production, you might load these from a database or API.
|
|
317
|
+
|
|
318
|
+
```typescript highlight=highlight-create-scene
|
|
319
|
+
// Create a scene with images to arrange in a collage
|
|
320
|
+
const scene = engine.scene.create();
|
|
321
|
+
const page = engine.block.create('page');
|
|
322
|
+
engine.block.appendChild(scene, page);
|
|
323
|
+
|
|
324
|
+
// Set page dimensions for the collage
|
|
325
|
+
engine.block.setWidth(page, 1080);
|
|
326
|
+
engine.block.setHeight(page, 1080);
|
|
327
|
+
|
|
328
|
+
// Add sample images to the page
|
|
329
|
+
const imageUrls = [
|
|
330
|
+
'https://img.ly/static/ubq_samples/imgly_logo.jpg',
|
|
331
|
+
'https://img.ly/static/ubq_samples/sample_1.jpg',
|
|
332
|
+
'https://img.ly/static/ubq_samples/sample_2.jpg',
|
|
333
|
+
'https://img.ly/static/ubq_samples/sample_3.jpg'
|
|
334
|
+
];
|
|
335
|
+
|
|
336
|
+
for (let i = 0; i < imageUrls.length; i++) {
|
|
337
|
+
const graphic = engine.block.create('graphic');
|
|
338
|
+
const imageFill = engine.block.createFill('image');
|
|
339
|
+
engine.block.setString(
|
|
340
|
+
imageFill,
|
|
341
|
+
'fill/image/imageFileURI',
|
|
342
|
+
imageUrls[i]
|
|
343
|
+
);
|
|
344
|
+
engine.block.setFill(graphic, imageFill);
|
|
103
345
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
- `previewBackgroundType`: How to fit the previews inside their tiles (cover/contain).
|
|
110
|
-
- `gridBackgroundType`: How to display the panel background (cover/contain).
|
|
346
|
+
// Position images in a simple grid (will be rearranged by layout)
|
|
347
|
+
engine.block.setPositionX(graphic, (i % 2) * 540);
|
|
348
|
+
engine.block.setPositionY(graphic, Math.floor(i / 2) * 540);
|
|
349
|
+
engine.block.setWidth(graphic, 540);
|
|
350
|
+
engine.block.setHeight(graphic, 540);
|
|
111
351
|
|
|
112
|
-
|
|
352
|
+
engine.block.appendChild(page, graphic);
|
|
353
|
+
}
|
|
113
354
|
|
|
114
|
-
|
|
115
|
-
instance.ui.addAssetLibraryEntry({
|
|
116
|
-
id: 'ly.img.layouts', // Referenced in the dock entry in Step 1
|
|
117
|
-
sourceIds: ['ly.img.layouts'], // Points to our custom layout asset source
|
|
118
|
-
previewLength: 2, // Number of preview items int the compact panel
|
|
119
|
-
gridColumns: 2, // Organize tiles in 2 columns
|
|
120
|
-
gridItemHeight: 'square', // Square tiles
|
|
121
|
-
previewBackgroundType: 'contain', // Fit compact panel background
|
|
122
|
-
gridBackgroundType: 'contain' // Fit panel background
|
|
123
|
-
});
|
|
355
|
+
console.log(`✓ Scene created with ${imageUrls.length} images`);
|
|
124
356
|
```
|
|
125
357
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
To learn more about panel customization, check the [Panel Customization guide](./user-interface/customization/panel.md).
|
|
358
|
+
## Load a Layout Template
|
|
129
359
|
|
|
130
|
-
|
|
360
|
+
Load a layout scene file that defines the collage structure. Layout templates contain positioned image blocks that serve as placeholders.
|
|
131
361
|
|
|
132
|
-
|
|
362
|
+
```typescript highlight=highlight-load-layout
|
|
363
|
+
// Load a layout template that defines the collage structure
|
|
364
|
+
// The layout contains positioned placeholder blocks
|
|
365
|
+
const layoutUrl =
|
|
366
|
+
'https://cdn.img.ly/assets/demo/v3/ly.img.template/templates/cesdk_collage_1.scene';
|
|
133
367
|
|
|
134
|
-
|
|
135
|
-
|
|
368
|
+
const layoutSceneString = await fetch(layoutUrl).then((res) => res.text());
|
|
369
|
+
const layoutBlocks = await engine.block.loadFromString(layoutSceneString);
|
|
370
|
+
const layoutPage = layoutBlocks[0];
|
|
136
371
|
|
|
137
|
-
|
|
138
|
-
import { createApplyLayoutAsset } from './lib/createApplyLayoutAsset';
|
|
139
|
-
import loadAssetSourceFromContentJSON from './lib/loadAssetSourceFromContentJSON';
|
|
140
|
-
|
|
141
|
-
// ...
|
|
142
|
-
const caseAssetPath = (path, caseId = 'layouts') =>
|
|
143
|
-
`${process.env.NEXT_PUBLIC_URL_HOSTNAME}${process.env.NEXT_PUBLIC_URL}/cases/${caseId}${path}`;
|
|
144
|
-
|
|
145
|
-
// Call the helper to load the layout assets
|
|
146
|
-
loadAssetSourceFromContentJSON(
|
|
147
|
-
instance.engine, // Pss the CE.SDK engine to load assets into
|
|
148
|
-
LAYOUT_ASSETS, // Pass the JSON bundle
|
|
149
|
-
caseAssetPath(''), // Base URL for assets
|
|
150
|
-
createApplyLayoutAsset(instance.engine) // Callback to createApplyLayoutAsset.js helper
|
|
151
|
-
);
|
|
152
|
-
await instance.loadFromURL(caseAssetPath('/custom-layouts.scene')); // Load the scene
|
|
153
|
-
// ...
|
|
372
|
+
console.log('✓ Layout template loaded');
|
|
154
373
|
```
|
|
155
374
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
```js title="createApplyLayoutAsset.js"
|
|
180
|
-
const scopeBefore = engine.editor.getGlobalScope('lifecycle/destroy');
|
|
181
|
-
engine.editor.setGlobalScope('lifecycle/destroy', 'Allow');
|
|
182
|
-
const page = engine.scene.getCurrentPage();
|
|
183
|
-
engine.block
|
|
184
|
-
.findAllSelected()
|
|
185
|
-
.forEach((block) => engine.block.setSelected(block, false));
|
|
375
|
+
## Sort Blocks by Visual Position
|
|
376
|
+
|
|
377
|
+
Visual sorting ensures consistent content mapping regardless of the order blocks were created. Blocks are sorted top-to-bottom, then left-to-right.
|
|
378
|
+
|
|
379
|
+
```typescript highlight=highlight-visual-sort
|
|
380
|
+
// Sort blocks by visual position (top-to-bottom, left-to-right)
|
|
381
|
+
// This ensures consistent content mapping between layouts
|
|
382
|
+
function visuallySortBlocks(
|
|
383
|
+
engine: CreativeEngine,
|
|
384
|
+
blocks: DesignBlockId[]
|
|
385
|
+
): DesignBlockId[] {
|
|
386
|
+
return blocks
|
|
387
|
+
.map((block) => ({
|
|
388
|
+
block,
|
|
389
|
+
x: Math.round(engine.block.getPositionX(block)),
|
|
390
|
+
y: Math.round(engine.block.getPositionY(block))
|
|
391
|
+
}))
|
|
392
|
+
.sort((a, b) => {
|
|
393
|
+
if (a.y === b.y) return a.x - b.x;
|
|
394
|
+
return a.y - b.y;
|
|
395
|
+
})
|
|
396
|
+
.map((item) => item.block);
|
|
397
|
+
}
|
|
186
398
|
```
|
|
187
399
|
|
|
188
|
-
|
|
400
|
+
## Collect Blocks from Both Scenes
|
|
189
401
|
|
|
190
|
-
|
|
191
|
-
- Return the first page from the loaded blocks as the layout page.
|
|
402
|
+
Recursively collect all descendant blocks, then filter by type to separate images from other content.
|
|
192
403
|
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
404
|
+
```typescript highlight=highlight-collect-blocks
|
|
405
|
+
// Collect image blocks from both pages
|
|
406
|
+
const sourceBlocks = getChildrenTree(engine, page);
|
|
407
|
+
const sourceImages = sourceBlocks.filter(
|
|
408
|
+
(id) => engine!.block.getKind(id) === 'image'
|
|
409
|
+
);
|
|
410
|
+
const sortedSourceImages = visuallySortBlocks(engine, sourceImages);
|
|
200
411
|
|
|
201
|
-
|
|
412
|
+
const layoutChildren = getChildrenTree(engine, layoutPage);
|
|
413
|
+
const layoutImages = layoutChildren.filter(
|
|
414
|
+
(id) => engine!.block.getKind(id) === 'image'
|
|
415
|
+
);
|
|
416
|
+
const sortedLayoutImages = visuallySortBlocks(engine, layoutImages);
|
|
202
417
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
```js title="createApplyLayoutAsset.js"
|
|
208
|
-
const oldPage = engine.block.duplicate(page);
|
|
209
|
-
engine.block.getChildren(page).forEach((child) => {
|
|
210
|
-
engine.block.destroy(child);
|
|
211
|
-
});
|
|
212
|
-
engine.block.getChildren(layoutPage).forEach((child) => {
|
|
213
|
-
engine.block.insertChild(page, child, engine.block.getChildren(page).length);
|
|
214
|
-
});
|
|
418
|
+
console.log(
|
|
419
|
+
`✓ Found ${sortedSourceImages.length} source images, ${sortedLayoutImages.length} layout slots`
|
|
420
|
+
);
|
|
215
421
|
```
|
|
216
422
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
Copy user text and images onto the new layout:
|
|
423
|
+
## Transfer Image Content
|
|
220
424
|
|
|
221
|
-
|
|
222
|
-
copyAssets(engine, oldPage, page);
|
|
223
|
-
```
|
|
425
|
+
Copy image URIs and source sets from source blocks to layout positions. Reset the crop on each target block so images fill their new frames.
|
|
224
426
|
|
|
225
|
-
|
|
427
|
+
```typescript highlight=highlight-transfer-images
|
|
428
|
+
// Transfer image content from source to layout positions
|
|
429
|
+
const transferCount = Math.min(
|
|
430
|
+
sortedSourceImages.length,
|
|
431
|
+
sortedLayoutImages.length
|
|
432
|
+
);
|
|
226
433
|
|
|
227
|
-
|
|
434
|
+
for (let i = 0; i < transferCount; i++) {
|
|
435
|
+
const sourceBlock = sortedSourceImages[i];
|
|
436
|
+
const targetBlock = sortedLayoutImages[i];
|
|
228
437
|
|
|
229
|
-
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
getChildrenTree(engine, fromPageId).flat()
|
|
233
|
-
);
|
|
234
|
-
const textsOnFromPage = fromChildren.filter((childId) =>
|
|
235
|
-
engine.block.getType(childId).includes('text')
|
|
236
|
-
);
|
|
237
|
-
const imagesOnFromPage = fromChildren.filter(
|
|
238
|
-
(childId) => engine.block.getKind(childId) === 'image'
|
|
239
|
-
);
|
|
240
|
-
// same for toPageId -> textsOnToPage, imagesOnToPage
|
|
241
|
-
```
|
|
438
|
+
// Get the source image fill
|
|
439
|
+
const sourceFill = engine.block.getFill(sourceBlock);
|
|
440
|
+
const targetFill = engine.block.getFill(targetBlock);
|
|
242
441
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
```js title="createApplyLayoutAsset.js"
|
|
248
|
-
|
|
249
|
-
const fromText = engine.block.getString(fromBlock, 'text/text');
|
|
250
|
-
const fromFontFileUri = engine.block.getString(fromBlock, 'text/fontFileUri');
|
|
251
|
-
const fromTypeface = engine.block.getTypeface(fromBlock);
|
|
252
|
-
engine.block.setFont(toBlock, fromFontFileUri, fromTypeface);
|
|
253
|
-
const fromTextFillColor = engine.block.getColor(fromBlock, 'fill/solid/color');
|
|
254
|
-
engine.block.setString(toBlock, 'text/text', fromText);
|
|
255
|
-
engine.block.setColor(toBlock, 'fill/solid/color', fromTextFillColor);
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
</TabItem>
|
|
260
|
-
|
|
261
|
-
<TabItem label="Step 2: Copy images and placeholder behavior">
|
|
262
|
-
```js title="createApplyLayoutAsset.js"
|
|
263
|
-
|
|
264
|
-
const fromImageFill = engine.block.getFill(fromBlock);
|
|
265
|
-
const toImageFill = engine.block.getFill(toBlock);
|
|
266
|
-
const fromImageFileUri = engine.block.getString(fromImageFill, 'fill/image/imageFileURI');
|
|
267
|
-
engine.block.setString(toImageFill, 'fill/image/imageFileURI', fromImageFileUri);
|
|
268
|
-
const fromImageSourceSets = engine.block.getSourceSet(fromImageFill, 'fill/image/sourceSet');
|
|
269
|
-
engine.block.setSourceSet(toImageFill, 'fill/image/sourceSet', fromImageSourceSets);
|
|
270
|
-
if (engine.block.supportsPlaceholderBehavior(fromBlock)) {
|
|
271
|
-
engine.block.setPlaceholderBehaviorEnabled(
|
|
272
|
-
toBlock,
|
|
273
|
-
engine.block.isPlaceholderBehaviorEnabled(fromBlock)
|
|
442
|
+
// Transfer the image URI
|
|
443
|
+
const imageUri = engine.block.getString(
|
|
444
|
+
sourceFill,
|
|
445
|
+
'fill/image/imageFileURI'
|
|
274
446
|
);
|
|
447
|
+
engine.block.setString(targetFill, 'fill/image/imageFileURI', imageUri);
|
|
448
|
+
|
|
449
|
+
// Transfer source sets if present
|
|
450
|
+
try {
|
|
451
|
+
const sourceSet = engine.block.getSourceSet(
|
|
452
|
+
sourceFill,
|
|
453
|
+
'fill/image/sourceSet'
|
|
454
|
+
);
|
|
455
|
+
if (sourceSet.length > 0) {
|
|
456
|
+
engine.block.setSourceSet(
|
|
457
|
+
targetFill,
|
|
458
|
+
'fill/image/sourceSet',
|
|
459
|
+
sourceSet
|
|
460
|
+
);
|
|
461
|
+
}
|
|
462
|
+
} catch {
|
|
463
|
+
// Source set not available, skip
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// Reset crop to fill the new frame dimensions
|
|
467
|
+
engine.block.resetCrop(targetBlock);
|
|
468
|
+
|
|
469
|
+
// Transfer placeholder behavior if supported
|
|
470
|
+
if (engine.block.supportsPlaceholderBehavior(sourceBlock)) {
|
|
471
|
+
engine.block.setPlaceholderBehaviorEnabled(
|
|
472
|
+
targetBlock,
|
|
473
|
+
engine.block.isPlaceholderBehaviorEnabled(sourceBlock)
|
|
474
|
+
);
|
|
475
|
+
}
|
|
275
476
|
}
|
|
276
|
-
engine.block.resetCrop(toBlock);
|
|
277
477
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
</TabItem>
|
|
281
|
-
</Tabs>
|
|
478
|
+
console.log(`✓ Transferred ${transferCount} images to layout`);
|
|
479
|
+
```
|
|
282
480
|
|
|
283
|
-
|
|
481
|
+
**Key methods:**
|
|
284
482
|
|
|
285
|
-
|
|
483
|
+
- `getFill()` and `setString()` — Transfer the image URI between fills
|
|
484
|
+
- `getSourceSet()` and `setSourceSet()` — Preserve responsive image variants
|
|
485
|
+
- `resetCrop()` — Adjust the image crop to fill the new frame dimensions
|
|
486
|
+
- `supportsPlaceholderBehavior()` — Check and transfer placeholder settings
|
|
286
487
|
|
|
287
|
-
|
|
288
|
-
engine.block.destroy(oldPage);
|
|
289
|
-
engine.block.destroy(layoutPage);
|
|
290
|
-
engine.editor.setGlobalScope('lifecycle/destroy', scopeBefore);
|
|
291
|
-
if (config.addUndoStep) {
|
|
292
|
-
engine.editor.addUndoStep();
|
|
293
|
-
}
|
|
294
|
-
return page;
|
|
295
|
-
```
|
|
488
|
+
## Transfer Text Content
|
|
296
489
|
|
|
297
|
-
|
|
490
|
+
If both scenes contain text blocks, transfer text content, fonts, and colors in visual order.
|
|
298
491
|
|
|
299
|
-
-
|
|
300
|
-
|
|
301
|
-
|
|
492
|
+
```typescript highlight=highlight-transfer-text
|
|
493
|
+
// Transfer text content (if both scenes have text blocks)
|
|
494
|
+
const sourceTexts = sourceBlocks.filter(
|
|
495
|
+
(id) => engine!.block.getType(id) === '//ly.img.ubq/text'
|
|
496
|
+
);
|
|
497
|
+
const layoutTexts = layoutChildren.filter(
|
|
498
|
+
(id) => engine!.block.getType(id) === '//ly.img.ubq/text'
|
|
499
|
+
);
|
|
302
500
|
|
|
303
|
-
|
|
501
|
+
const sortedSourceTexts = visuallySortBlocks(engine, sourceTexts);
|
|
502
|
+
const sortedLayoutTexts = visuallySortBlocks(engine, layoutTexts);
|
|
304
503
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
504
|
+
const textTransferCount = Math.min(
|
|
505
|
+
sortedSourceTexts.length,
|
|
506
|
+
sortedLayoutTexts.length
|
|
507
|
+
);
|
|
308
508
|
|
|
309
|
-
|
|
310
|
-
|
|
509
|
+
for (let i = 0; i < textTransferCount; i++) {
|
|
510
|
+
const sourceText = sortedSourceTexts[i];
|
|
511
|
+
const targetText = sortedLayoutTexts[i];
|
|
311
512
|
|
|
312
|
-
|
|
313
|
-
|
|
513
|
+
// Transfer text content
|
|
514
|
+
const text = engine.block.getString(sourceText, 'text/text');
|
|
515
|
+
engine.block.setString(targetText, 'text/text', text);
|
|
314
516
|
|
|
315
|
-
|
|
517
|
+
// Transfer font
|
|
518
|
+
const fontUri = engine.block.getString(sourceText, 'text/fontFileUri');
|
|
519
|
+
const typeface = engine.block.getTypeface(sourceText);
|
|
520
|
+
engine.block.setFont(targetText, fontUri, typeface);
|
|
316
521
|
|
|
317
|
-
|
|
318
|
-
engine.block.
|
|
319
|
-
|
|
320
|
-
engine.block.isPlaceholderBehaviorEnabled(fromBlock),
|
|
321
|
-
);
|
|
522
|
+
// Transfer text color
|
|
523
|
+
const textColor = engine.block.getColor(sourceText, 'fill/solid/color');
|
|
524
|
+
engine.block.setColor(targetText, 'fill/solid/color', textColor);
|
|
322
525
|
}
|
|
323
|
-
```
|
|
324
526
|
|
|
325
|
-
|
|
527
|
+
if (textTransferCount > 0) {
|
|
528
|
+
console.log(`✓ Transferred ${textTransferCount} text blocks`);
|
|
529
|
+
}
|
|
530
|
+
```
|
|
326
531
|
|
|
327
|
-
|
|
532
|
+
## Export the Collage
|
|
328
533
|
|
|
329
|
-
|
|
330
|
-
To ensure the CE.SDK uses all the existing images when applying a layout, you can:
|
|
534
|
+
Export the layout page with the transferred content. The output dimensions match the layout template.
|
|
331
535
|
|
|
332
|
-
|
|
536
|
+
```typescript highlight=highlight-export
|
|
537
|
+
// Export the final collage
|
|
538
|
+
// Use the layout page dimensions for the export
|
|
539
|
+
const layoutWidth = engine.block.getWidth(layoutPage);
|
|
540
|
+
const layoutHeight = engine.block.getHeight(layoutPage);
|
|
333
541
|
|
|
334
|
-
|
|
542
|
+
const blob = await engine.block.export(layoutPage, {
|
|
543
|
+
mimeType: 'image/png',
|
|
544
|
+
targetWidth: layoutWidth,
|
|
545
|
+
targetHeight: layoutHeight
|
|
546
|
+
});
|
|
335
547
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
)
|
|
548
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
549
|
+
writeFileSync('collage-output.png', buffer);
|
|
550
|
+
console.log(
|
|
551
|
+
`✓ Exported collage to collage-output.png (${layoutWidth}x${layoutHeight})`
|
|
552
|
+
);
|
|
553
|
+
```
|
|
341
554
|
|
|
342
|
-
|
|
555
|
+
## Clean Up
|
|
343
556
|
|
|
344
|
-
|
|
557
|
+
Destroy temporary blocks and dispose of the engine when finished.
|
|
345
558
|
|
|
346
|
-
|
|
559
|
+
```typescript highlight=highlight-cleanup
|
|
560
|
+
// Clean up temporary blocks
|
|
561
|
+
engine.block.destroy(page);
|
|
562
|
+
console.log('✓ Cleanup completed');
|
|
563
|
+
```
|
|
347
564
|
|
|
348
|
-
|
|
349
|
-
index < imagesOnToPage.length && index < imagesOnFromPage.length;
|
|
565
|
+
## Handling Mismatched Slot Counts
|
|
350
566
|
|
|
351
|
-
|
|
567
|
+
When the source has more images than the layout has slots, extra images are ignored. When the layout has more slots, some remain empty or keep their placeholder content.
|
|
352
568
|
|
|
353
|
-
|
|
569
|
+
```typescript
|
|
570
|
+
// Transfer only as many images as both sides support
|
|
571
|
+
const transferCount = Math.min(
|
|
572
|
+
sortedSourceImages.length,
|
|
573
|
+
sortedLayoutImages.length
|
|
574
|
+
);
|
|
575
|
+
```
|
|
354
576
|
|
|
355
|
-
|
|
577
|
+
For production use, consider:
|
|
356
578
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
block,
|
|
361
|
-
coordinates: [
|
|
362
|
-
Math.round(engine.block.getPositionX(block)),
|
|
363
|
-
Math.round(engine.block.getPositionY(block))
|
|
364
|
-
]
|
|
365
|
-
}))
|
|
366
|
-
.sort(({ coordinates: [X1, Y1] }, { coordinates: [X2, Y2] }) => {
|
|
367
|
-
if (Y1 === Y2) return X1 - X2;
|
|
368
|
-
return Y1 - Y2;
|
|
369
|
-
});
|
|
370
|
-
return blocksWithCoordinates.map(({ block }) => block);
|
|
371
|
-
};
|
|
579
|
+
- Selecting layouts based on image count
|
|
580
|
+
- Filling empty slots with placeholder images
|
|
581
|
+
- Prioritizing images by metadata or user selection
|
|
372
582
|
|
|
373
|
-
|
|
583
|
+
## Troubleshooting
|
|
374
584
|
|
|
375
|
-
|
|
585
|
+
### Images Not Appearing in Layout
|
|
376
586
|
|
|
377
|
-
|
|
378
|
-
For a better user experience, consider adding animations when applying layouts:
|
|
587
|
+
Verify the layout template contains image blocks with the correct kind. Check that `engine.block.getKind(id)` returns `'image'` for your target blocks.
|
|
379
588
|
|
|
380
|
-
|
|
381
|
-
const LoadingSpinner = () => {
|
|
382
|
-
return <div className={styles.spinner} data-cy={'loading-spinner'}></div>;
|
|
383
|
-
};
|
|
384
|
-
```
|
|
589
|
+
### Content in Wrong Positions
|
|
385
590
|
|
|
386
|
-
|
|
591
|
+
Visual sorting depends on block coordinates. If blocks have identical Y positions, they sort by X. Ensure layout templates have distinct positions for each slot.
|
|
387
592
|
|
|
388
|
-
|
|
389
|
-
- Sliding
|
|
390
|
-
- Morphing
|
|
593
|
+
### Source Sets Not Transferring
|
|
391
594
|
|
|
392
|
-
|
|
393
|
-
</Tabs>
|
|
595
|
+
Not all image fills have source sets. Wrap the transfer in a try-catch to handle blocks without this property.
|
|
394
596
|
|
|
395
|
-
|
|
597
|
+
### Layout Template Not Loading
|
|
396
598
|
|
|
397
|
-
|
|
599
|
+
Check that the layout URL is accessible from your server environment. In production, host layout templates on your own infrastructure or use a CDN.
|
|
398
600
|
|
|
399
|
-
|
|
400
|
-
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
401
|
-
| **Asset Loading** | ・ Lazy load thumbnails and cache scene files<br />・ Preload common layouts and minimize file sizes<br />・ Use CDN for efficient asset delivery |
|
|
402
|
-
| **Content Transfer** | ・ Batch block operations to reduce engine calls<br />・ Optimize sorting algorithms and memory usage<br />・ Handle large page structures efficiently |
|
|
403
|
-
| **Visual Cues** | ・ Show loading states and support undo/redo<br />・ Add error recovery and prevent accidental changes |
|
|
601
|
+
## API Reference
|
|
404
602
|
|
|
405
|
-
|
|
603
|
+
| Method | Category | Purpose |
|
|
604
|
+
|--------|----------|---------|
|
|
605
|
+
| `engine.scene.create()` | Scene | Create an empty scene |
|
|
606
|
+
| `engine.block.create()` | Block | Create blocks of various types |
|
|
607
|
+
| `engine.block.createFill()` | Fill | Create fill objects for blocks |
|
|
608
|
+
| `engine.block.setFill()` | Fill | Assign a fill to a block |
|
|
609
|
+
| `engine.block.getFill()` | Fill | Get the fill assigned to a block |
|
|
610
|
+
| `engine.block.loadFromString()` | Import | Load blocks from a scene string |
|
|
611
|
+
| `engine.block.getChildren()` | Hierarchy | Get direct children of a block |
|
|
612
|
+
| `engine.block.appendChild()` | Hierarchy | Add a child to a block |
|
|
613
|
+
| `engine.block.getKind()` | Property | Get the semantic kind of a block |
|
|
614
|
+
| `engine.block.getType()` | Property | Get the type of a block |
|
|
615
|
+
| `engine.block.getPositionX()` | Layout | Get X position of a block |
|
|
616
|
+
| `engine.block.getPositionY()` | Layout | Get Y position of a block |
|
|
617
|
+
| `engine.block.getString()` | Property | Get string property value |
|
|
618
|
+
| `engine.block.setString()` | Property | Set string property value |
|
|
619
|
+
| `engine.block.getSourceSet()` | Fill | Get image source set |
|
|
620
|
+
| `engine.block.setSourceSet()` | Fill | Set image source set |
|
|
621
|
+
| `engine.block.resetCrop()` | Crop | Reset crop to fill frame |
|
|
622
|
+
| `engine.block.supportsPlaceholderBehavior()` | Placeholder | Check placeholder support |
|
|
623
|
+
| `engine.block.isPlaceholderBehaviorEnabled()` | Placeholder | Check if placeholder is enabled |
|
|
624
|
+
| `engine.block.setPlaceholderBehaviorEnabled()` | Placeholder | Enable/disable placeholder |
|
|
625
|
+
| `engine.block.getTypeface()` | Text | Get typeface of a text block |
|
|
626
|
+
| `engine.block.setFont()` | Text | Set font for a text block |
|
|
627
|
+
| `engine.block.getColor()` | Property | Get color property value |
|
|
628
|
+
| `engine.block.setColor()` | Property | Set color property value |
|
|
629
|
+
| `engine.block.getWidth()` | Layout | Get width of a block |
|
|
630
|
+
| `engine.block.getHeight()` | Layout | Get height of a block |
|
|
631
|
+
| `engine.block.export()` | Export | Export a block to an image |
|
|
632
|
+
| `engine.block.destroy()` | Lifecycle | Destroy a block |
|
|
633
|
+
| `engine.dispose()` | Lifecycle | Clean up engine resources |
|
|
406
634
|
|
|
407
|
-
|
|
408
|
-
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
409
|
-
| Layout not applying | ・ Verify asset source registration and callback connection<br />・ Check browser console for scene files or CORS errors<br />・ Check the validity of scene file URLs |
|
|
410
|
-
| Content lost during layout change | ・ Debug visual sorting with console logs<br />・ Verify block type filtering is correct<br />・ Test with different content settings |
|
|
411
|
-
| Incorrect visual order | ・ Adjust coordinate rounding tolerance in sorting<br />・ Flatten complex hierarchies before sorting<br />・ Test with well-defined layout structures |
|
|
412
|
-
| Performance degradation | ・ Optimize scene file sizes<br />・ Batch engine operations<br />・ Profile and optimize content transfer |
|
|
413
|
-
| Undo not working | ・ Ensure `addUndoStep()` called after all changes complete<br />・ Verify undo configuration in engine setup |
|
|
635
|
+
## Related Guides
|
|
414
636
|
|
|
415
|
-
|
|
637
|
+
- [Apply Templates](./use-templates/apply-template.md) — Loading complete templates instead of transferring content
|
|
638
|
+
- [Headless Mode](./concepts/headless-mode.md) — Server-side processing fundamentals
|
|
639
|
+
- [Export Overview](./export-save-publish/export/overview.md) — Export options and formats
|
|
416
640
|
|
|
417
|
-
Now that know how to create collages with layouts, explore these related guides to expand your CE.SDK knowledge:
|
|
418
641
|
|
|
419
|
-
- [Apply Templates](./create-templates/overview.md) - Work with templates instead of layouts
|
|
420
|
-
- [Create Custom Asset Sources](./import-media/asset-panel/basics.md) - Import custom assets
|
|
421
|
-
- [Customize UI Panels](./user-interface/customization/panel.md) - Advanced UI customization
|
|
422
|
-
- [Work with Images](./insert-media/images.md) - Manage image blocks and fills
|
|
423
|
-
- [Scene Management](./open-the-editor/load-scene.md) - Load and save scenes
|
|
424
642
|
|
|
425
643
|
---
|
|
426
644
|
|
|
427
645
|
## More Resources
|
|
428
646
|
|
|
429
|
-
- **[
|
|
647
|
+
- **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
|
|
430
648
|
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
431
|
-
- **[Web Documentation](./
|
|
432
|
-
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
649
|
+
- **[Web Documentation](./node.md)** - Interactive documentation with examples
|
|
650
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|