@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,4 +1,4 @@
|
|
|
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) > [Filters and Effects](./filters-and-effects.md) > [Apply Filter or Effect](./filters-and-effects/apply.md)
|
|
4
4
|
|
|
@@ -7,444 +7,387 @@
|
|
|
7
7
|
Apply professional color grading, blur effects, and artistic treatments to
|
|
8
8
|
design elements using CE.SDK's visual effects system.
|
|
9
9
|
|
|
10
|
-

|
|
11
|
-
|
|
12
10
|
> **Reading time:** 10 minutes
|
|
13
11
|
>
|
|
14
12
|
> **Resources:**
|
|
15
13
|
>
|
|
16
14
|
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
17
|
-
>
|
|
18
|
-
> - [
|
|
19
|
-
>
|
|
15
|
+
>
|
|
16
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-filters-and-effects-apply-server-js)
|
|
17
|
+
>
|
|
18
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-filters-and-effects-apply-server-js)
|
|
20
19
|
|
|
21
20
|
While CE.SDK uses a unified effect API for both filters and effects, they serve different purposes. **Filters** typically apply color transformations like LUT filters and duotone, while **effects** apply visual modifications such as blur, pixelize, vignette, and image adjustments. You can combine multiple effects on a single element, creating complex visual treatments by stacking them in a customizable order.
|
|
22
21
|
|
|
23
|
-
```typescript file=@cesdk_web_examples/guides-filters-and-effects-apply-
|
|
24
|
-
import
|
|
25
|
-
|
|
26
|
-
import {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
DemoAssetSources,
|
|
31
|
-
EffectsAssetSource,
|
|
32
|
-
FiltersAssetSource,
|
|
33
|
-
PagePresetsAssetSource,
|
|
34
|
-
StickerAssetSource,
|
|
35
|
-
TextAssetSource,
|
|
36
|
-
TextComponentAssetSource,
|
|
37
|
-
TypefaceAssetSource,
|
|
38
|
-
UploadAssetSources,
|
|
39
|
-
VectorShapeAssetSource
|
|
40
|
-
} from '@cesdk/cesdk-js/plugins';
|
|
41
|
-
import { DesignEditorConfig } from './design-editor/plugin';
|
|
42
|
-
import packageJson from './package.json';
|
|
43
|
-
import { calculateGridLayout, hexToRgba } from './utils';
|
|
22
|
+
```typescript file=@cesdk_web_examples/guides-filters-and-effects-apply-server-js/server-js.ts reference-only
|
|
23
|
+
import CreativeEngine from '@cesdk/node';
|
|
24
|
+
import { config } from 'dotenv';
|
|
25
|
+
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
26
|
+
|
|
27
|
+
// Load environment variables
|
|
28
|
+
config();
|
|
44
29
|
|
|
45
30
|
/**
|
|
46
|
-
* CE.SDK
|
|
31
|
+
* CE.SDK Server Guide: Apply Filters and Effects
|
|
47
32
|
*
|
|
48
33
|
* Demonstrates applying various filters and effects to image blocks:
|
|
49
34
|
* - Checking effect support
|
|
50
35
|
* - Applying basic effects (blur)
|
|
51
36
|
* - Configuring effect parameters (adjustments)
|
|
52
37
|
* - Applying LUT filters
|
|
38
|
+
* - Applying duotone filters
|
|
53
39
|
* - Combining multiple effects
|
|
54
40
|
* - Managing effect stacks
|
|
41
|
+
* - Batch processing
|
|
42
|
+
* - Exporting results
|
|
55
43
|
*/
|
|
56
|
-
class Example implements EditorPlugin {
|
|
57
|
-
name = packageJson.name;
|
|
58
|
-
|
|
59
|
-
version = packageJson.version;
|
|
60
44
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
'ly.img.templates.print.*',
|
|
81
|
-
'ly.img.templates.social.*',
|
|
82
|
-
'ly.img.image.*'
|
|
83
|
-
]
|
|
84
|
-
})
|
|
85
|
-
);
|
|
86
|
-
await cesdk.addPlugin(new EffectsAssetSource());
|
|
87
|
-
await cesdk.addPlugin(new FiltersAssetSource());
|
|
88
|
-
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
89
|
-
await cesdk.addPlugin(new StickerAssetSource());
|
|
90
|
-
await cesdk.addPlugin(new TextAssetSource());
|
|
91
|
-
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
92
|
-
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
93
|
-
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
94
|
-
|
|
95
|
-
await cesdk.actions.run('scene.create', {
|
|
96
|
-
page: { width: 800, height: 600, unit: 'Pixel' }
|
|
97
|
-
});
|
|
45
|
+
/**
|
|
46
|
+
* Convert hex color string to RGBA values (0-1 range)
|
|
47
|
+
*/
|
|
48
|
+
function hexToRgba(hex: string): {
|
|
49
|
+
r: number;
|
|
50
|
+
g: number;
|
|
51
|
+
b: number;
|
|
52
|
+
a: number;
|
|
53
|
+
} {
|
|
54
|
+
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
55
|
+
return result
|
|
56
|
+
? {
|
|
57
|
+
r: parseInt(result[1], 16) / 255,
|
|
58
|
+
g: parseInt(result[2], 16) / 255,
|
|
59
|
+
b: parseInt(result[3], 16) / 255,
|
|
60
|
+
a: 1.0
|
|
61
|
+
}
|
|
62
|
+
: { r: 0, g: 0, b: 0, a: 1.0 };
|
|
63
|
+
}
|
|
98
64
|
|
|
99
|
-
|
|
100
|
-
|
|
65
|
+
// Initialize CE.SDK engine in headless mode
|
|
66
|
+
const engine = await CreativeEngine.init({
|
|
67
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
|
|
68
|
+
// license: process.env.CESDK_LICENSE, // Optional (trial mode available)
|
|
69
|
+
});
|
|
101
70
|
|
|
102
|
-
|
|
103
|
-
|
|
71
|
+
try {
|
|
72
|
+
// Create a design scene with specific page dimensions
|
|
73
|
+
engine.scene.create('VerticalStack', {
|
|
74
|
+
page: { size: { width: 800, height: 600 } }
|
|
75
|
+
});
|
|
76
|
+
const page = engine.block.findByType('page')[0];
|
|
104
77
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
cesdk.feature.enable('ly.img.filter'); // Enable all filters
|
|
108
|
-
cesdk.feature.enable('ly.img.blur'); // Enable blur effect
|
|
109
|
-
cesdk.feature.enable('ly.img.adjustment'); // Enable adjustments
|
|
78
|
+
// Sample image URL for demonstrations
|
|
79
|
+
const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
|
|
110
80
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const { blockWidth, blockHeight, getPosition } = layout;
|
|
81
|
+
// Block size for grid layout (will be positioned at the end)
|
|
82
|
+
const blockSize = { width: 200, height: 150 };
|
|
114
83
|
|
|
115
|
-
|
|
116
|
-
|
|
84
|
+
// Create an image block to check effect support
|
|
85
|
+
const sampleBlock = await engine.block.addImage(imageUri, {
|
|
86
|
+
size: blockSize
|
|
87
|
+
});
|
|
88
|
+
engine.block.appendChild(page, sampleBlock);
|
|
117
89
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
page: 0,
|
|
122
|
-
perPage: 10
|
|
123
|
-
});
|
|
124
|
-
const duotoneResults = await engine.asset.findAssets('ly.img.filter', {
|
|
125
|
-
page: 0,
|
|
126
|
-
perPage: 10
|
|
127
|
-
});
|
|
90
|
+
// Check if a block supports effects - graphic blocks with image fills support effects
|
|
91
|
+
const supportsEffects = engine.block.supportsEffects(sampleBlock);
|
|
92
|
+
console.log('Block supports effects:', supportsEffects); // true
|
|
128
93
|
|
|
129
|
-
|
|
130
|
-
|
|
94
|
+
// Page blocks support effects when they have fills applied
|
|
95
|
+
const pageSupportsEffects = engine.block.supportsEffects(page);
|
|
96
|
+
console.log('Page supports effects:', pageSupportsEffects);
|
|
131
97
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
});
|
|
138
|
-
engine.block.appendChild(page, sampleBlock);
|
|
98
|
+
// Create a separate image block for blur demonstration
|
|
99
|
+
const blurImageBlock = await engine.block.addImage(imageUri, {
|
|
100
|
+
size: blockSize
|
|
101
|
+
});
|
|
102
|
+
engine.block.appendChild(page, blurImageBlock);
|
|
139
103
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
console.log('Block supports effects:', supportsEffects); // true for graphics
|
|
104
|
+
// Create and apply a blur effect
|
|
105
|
+
const blurEffect = engine.block.createEffect('extrude_blur');
|
|
106
|
+
engine.block.appendEffect(blurImageBlock, blurEffect);
|
|
144
107
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
// eslint-disable-next-line no-console
|
|
148
|
-
console.log('Page supports effects:', pageSupportsEffects); // false
|
|
108
|
+
// Adjust blur intensity (0.0 to 1.0)
|
|
109
|
+
engine.block.setFloat(blurEffect, 'effect/extrude_blur/amount', 0.5);
|
|
149
110
|
|
|
150
|
-
|
|
151
|
-
|
|
111
|
+
// Create a separate image block for adjustments demonstration
|
|
112
|
+
const adjustmentsImageBlock = await engine.block.addImage(imageUri, {
|
|
113
|
+
size: blockSize
|
|
114
|
+
});
|
|
115
|
+
engine.block.appendChild(page, adjustmentsImageBlock);
|
|
152
116
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
size: blockSize
|
|
157
|
-
});
|
|
158
|
-
engine.block.appendChild(page, blurImageBlock);
|
|
117
|
+
// Create adjustments effect for brightness and contrast
|
|
118
|
+
const adjustmentsEffect = engine.block.createEffect('adjustments');
|
|
119
|
+
engine.block.appendEffect(adjustmentsImageBlock, adjustmentsEffect);
|
|
159
120
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
121
|
+
// Set brightness, contrast, and saturation
|
|
122
|
+
engine.block.setFloat(
|
|
123
|
+
adjustmentsEffect,
|
|
124
|
+
'effect/adjustments/brightness',
|
|
125
|
+
0.2
|
|
126
|
+
);
|
|
127
|
+
engine.block.setFloat(adjustmentsEffect, 'effect/adjustments/contrast', 0.15);
|
|
128
|
+
engine.block.setFloat(
|
|
129
|
+
adjustmentsEffect,
|
|
130
|
+
'effect/adjustments/saturation',
|
|
131
|
+
0.1
|
|
132
|
+
);
|
|
163
133
|
|
|
164
|
-
|
|
165
|
-
|
|
134
|
+
// Find all available properties for this effect
|
|
135
|
+
const adjustmentProperties =
|
|
136
|
+
engine.block.findAllProperties(adjustmentsEffect);
|
|
137
|
+
console.log('Available adjustment properties:', adjustmentProperties);
|
|
138
|
+
|
|
139
|
+
// Demonstrate LUT filters by applying 2 different presets (Grid positions 3-4)
|
|
140
|
+
// LUT configurations with different color grading styles
|
|
141
|
+
const lutConfigs = [
|
|
142
|
+
{
|
|
143
|
+
uri: 'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.filters.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
144
|
+
horizontalTileCount: 5,
|
|
145
|
+
verticalTileCount: 5
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
uri: 'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.filters.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
149
|
+
horizontalTileCount: 5,
|
|
150
|
+
verticalTileCount: 5
|
|
151
|
+
}
|
|
152
|
+
];
|
|
166
153
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
154
|
+
const lutImageBlocks = [];
|
|
155
|
+
for (const lutConfig of lutConfigs) {
|
|
156
|
+
const lutImageBlock = await engine.block.addImage(imageUri, {
|
|
157
|
+
size: { width: 200, height: 150 }
|
|
170
158
|
});
|
|
171
|
-
engine.block.appendChild(page,
|
|
172
|
-
|
|
173
|
-
// Create adjustments effect for brightness and contrast
|
|
174
|
-
const adjustmentsEffect = engine.block.createEffect('adjustments');
|
|
175
|
-
engine.block.appendEffect(adjustmentsImageBlock, adjustmentsEffect);
|
|
159
|
+
engine.block.appendChild(page, lutImageBlock);
|
|
160
|
+
lutImageBlocks.push(lutImageBlock);
|
|
176
161
|
|
|
177
|
-
//
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
console.log('Available adjustment properties:', adjustmentProperties);
|
|
162
|
+
// Create LUT filter effect
|
|
163
|
+
const lutEffect = engine.block.createEffect(
|
|
164
|
+
'//ly.img.ubq/effect/lut_filter'
|
|
165
|
+
);
|
|
182
166
|
|
|
183
|
-
//
|
|
184
|
-
engine.block.
|
|
185
|
-
|
|
186
|
-
'effect/
|
|
187
|
-
|
|
167
|
+
// Configure LUT with preset filter settings
|
|
168
|
+
engine.block.setString(
|
|
169
|
+
lutEffect,
|
|
170
|
+
'effect/lut_filter/lutFileURI',
|
|
171
|
+
lutConfig.uri
|
|
188
172
|
);
|
|
189
|
-
engine.block.
|
|
190
|
-
|
|
191
|
-
'effect/
|
|
192
|
-
|
|
173
|
+
engine.block.setInt(
|
|
174
|
+
lutEffect,
|
|
175
|
+
'effect/lut_filter/horizontalTileCount',
|
|
176
|
+
lutConfig.horizontalTileCount
|
|
193
177
|
);
|
|
194
|
-
engine.block.
|
|
195
|
-
|
|
196
|
-
'effect/
|
|
197
|
-
|
|
178
|
+
engine.block.setInt(
|
|
179
|
+
lutEffect,
|
|
180
|
+
'effect/lut_filter/verticalTileCount',
|
|
181
|
+
lutConfig.verticalTileCount
|
|
198
182
|
);
|
|
183
|
+
engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
|
|
199
184
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const lutImageBlocks = [];
|
|
203
|
-
for (let i = 0; i < Math.min(2, lutAssets.length); i++) {
|
|
204
|
-
const lutAsset = lutAssets[i];
|
|
205
|
-
|
|
206
|
-
const lutImageBlock = await engine.block.addImage(imageUri, {
|
|
207
|
-
size: blockSize
|
|
208
|
-
});
|
|
209
|
-
engine.block.appendChild(page, lutImageBlock);
|
|
210
|
-
lutImageBlocks.push(lutImageBlock);
|
|
211
|
-
|
|
212
|
-
// Create LUT filter effect using the full effect type URI
|
|
213
|
-
const lutEffect = engine.block.createEffect(
|
|
214
|
-
'//ly.img.ubq/effect/lut_filter'
|
|
215
|
-
);
|
|
216
|
-
|
|
217
|
-
// Use asset metadata for LUT configuration
|
|
218
|
-
// The asset provides the LUT file URI and grid dimensions
|
|
219
|
-
engine.block.setString(
|
|
220
|
-
lutEffect,
|
|
221
|
-
'effect/lut_filter/lutFileURI',
|
|
222
|
-
lutAsset.meta?.uri as string
|
|
223
|
-
);
|
|
224
|
-
engine.block.setInt(
|
|
225
|
-
lutEffect,
|
|
226
|
-
'effect/lut_filter/horizontalTileCount',
|
|
227
|
-
parseInt(lutAsset.meta?.horizontalTileCount as string, 10)
|
|
228
|
-
);
|
|
229
|
-
engine.block.setInt(
|
|
230
|
-
lutEffect,
|
|
231
|
-
'effect/lut_filter/verticalTileCount',
|
|
232
|
-
parseInt(lutAsset.meta?.verticalTileCount as string, 10)
|
|
233
|
-
);
|
|
234
|
-
engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
|
|
235
|
-
|
|
236
|
-
engine.block.appendEffect(lutImageBlock, lutEffect);
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Demonstrate Duotone filters by applying the first 2 from asset library
|
|
240
|
-
// Duotone filters create artistic two-color treatments (Grid positions 5-6)
|
|
241
|
-
const duotoneImageBlocks = [];
|
|
242
|
-
for (let i = 0; i < Math.min(2, duotoneAssets.length); i++) {
|
|
243
|
-
const duotoneAsset = duotoneAssets[i];
|
|
244
|
-
|
|
245
|
-
const duotoneImageBlock = await engine.block.addImage(imageUri, {
|
|
246
|
-
size: blockSize
|
|
247
|
-
});
|
|
248
|
-
engine.block.appendChild(page, duotoneImageBlock);
|
|
249
|
-
duotoneImageBlocks.push(duotoneImageBlock);
|
|
250
|
-
|
|
251
|
-
// Create Duotone filter effect using the full effect type URI
|
|
252
|
-
const duotoneEffect = engine.block.createEffect(
|
|
253
|
-
'//ly.img.ubq/effect/duotone_filter'
|
|
254
|
-
);
|
|
255
|
-
|
|
256
|
-
// Convert hex colors from asset metadata to RGBA (0-1 range)
|
|
257
|
-
const darkColor = hexToRgba(duotoneAsset.meta?.darkColor as string);
|
|
258
|
-
engine.block.setColor(
|
|
259
|
-
duotoneEffect,
|
|
260
|
-
'effect/duotone_filter/darkColor',
|
|
261
|
-
darkColor
|
|
262
|
-
);
|
|
263
|
-
|
|
264
|
-
const lightColor = hexToRgba(duotoneAsset.meta?.lightColor as string);
|
|
265
|
-
engine.block.setColor(
|
|
266
|
-
duotoneEffect,
|
|
267
|
-
'effect/duotone_filter/lightColor',
|
|
268
|
-
lightColor
|
|
269
|
-
);
|
|
270
|
-
|
|
271
|
-
engine.block.setFloat(
|
|
272
|
-
duotoneEffect,
|
|
273
|
-
'effect/duotone_filter/intensity',
|
|
274
|
-
0.8
|
|
275
|
-
);
|
|
276
|
-
|
|
277
|
-
engine.block.appendEffect(duotoneImageBlock, duotoneEffect);
|
|
278
|
-
}
|
|
185
|
+
engine.block.appendEffect(lutImageBlock, lutEffect);
|
|
186
|
+
}
|
|
279
187
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
188
|
+
// Demonstrate Duotone filters by applying 2 different color combinations (Grid positions 5-6)
|
|
189
|
+
// Duotone configurations with different color schemes
|
|
190
|
+
const duotoneConfigs = [
|
|
191
|
+
{ darkColor: '#0b3d5b', lightColor: '#f8bc60' }, // Blue/Orange
|
|
192
|
+
{ darkColor: '#2d1e3e', lightColor: '#e8d5b7' } // Purple/Cream
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
const duotoneImageBlocks = [];
|
|
196
|
+
for (const duotoneConfig of duotoneConfigs) {
|
|
197
|
+
const duotoneImageBlock = await engine.block.addImage(imageUri, {
|
|
198
|
+
size: { width: 200, height: 150 }
|
|
284
199
|
});
|
|
285
|
-
engine.block.appendChild(page,
|
|
200
|
+
engine.block.appendChild(page, duotoneImageBlock);
|
|
201
|
+
duotoneImageBlocks.push(duotoneImageBlock);
|
|
286
202
|
|
|
287
|
-
//
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
// 4. pixelize - applied last
|
|
203
|
+
// Create duotone filter effect
|
|
204
|
+
const duotoneEffect = engine.block.createEffect(
|
|
205
|
+
'//ly.img.ubq/effect/duotone_filter'
|
|
206
|
+
);
|
|
292
207
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
engine.block.
|
|
296
|
-
|
|
297
|
-
'effect/
|
|
298
|
-
|
|
208
|
+
// Configure duotone colors using hex to RGBA conversion
|
|
209
|
+
const darkColor = hexToRgba(duotoneConfig.darkColor);
|
|
210
|
+
engine.block.setColor(
|
|
211
|
+
duotoneEffect,
|
|
212
|
+
'effect/duotone_filter/darkColor',
|
|
213
|
+
darkColor
|
|
299
214
|
);
|
|
215
|
+
|
|
216
|
+
const lightColor = hexToRgba(duotoneConfig.lightColor);
|
|
217
|
+
engine.block.setColor(
|
|
218
|
+
duotoneEffect,
|
|
219
|
+
'effect/duotone_filter/lightColor',
|
|
220
|
+
lightColor
|
|
221
|
+
);
|
|
222
|
+
|
|
300
223
|
engine.block.setFloat(
|
|
301
|
-
|
|
302
|
-
'effect/
|
|
303
|
-
0.
|
|
224
|
+
duotoneEffect,
|
|
225
|
+
'effect/duotone_filter/intensity',
|
|
226
|
+
0.8
|
|
304
227
|
);
|
|
228
|
+
engine.block.appendEffect(duotoneImageBlock, duotoneEffect);
|
|
229
|
+
}
|
|
305
230
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
// Get all effects applied to the combined block
|
|
332
|
-
const effects = engine.block.getEffects(combinedImageBlock);
|
|
333
|
-
// eslint-disable-next-line no-console
|
|
334
|
-
console.log('Applied effects:', effects);
|
|
335
|
-
|
|
336
|
-
// Access properties of specific effects
|
|
337
|
-
effects.forEach((effect, index) => {
|
|
338
|
-
const effectType = engine.block.getType(effect);
|
|
339
|
-
const isEnabled = engine.block.isEffectEnabled(effect);
|
|
340
|
-
// eslint-disable-next-line no-console
|
|
341
|
-
console.log(`Effect ${index}: ${effectType}, enabled: ${isEnabled}`);
|
|
342
|
-
});
|
|
231
|
+
// Create an image block to demonstrate combining multiple effects (Grid position 7)
|
|
232
|
+
const combinedImageBlock = await engine.block.addImage(imageUri, {
|
|
233
|
+
size: { width: 200, height: 150 }
|
|
234
|
+
});
|
|
235
|
+
engine.block.appendChild(page, combinedImageBlock);
|
|
236
|
+
|
|
237
|
+
// Apply effects in order - the stack will contain:
|
|
238
|
+
// 1. adjustments (brightness/contrast) - applied first
|
|
239
|
+
// 2. blur - applied second
|
|
240
|
+
// 3. duotone (color tinting) - applied third
|
|
241
|
+
// 4. pixelize - applied last
|
|
242
|
+
|
|
243
|
+
const combinedAdjustments = engine.block.createEffect('adjustments');
|
|
244
|
+
engine.block.appendEffect(combinedImageBlock, combinedAdjustments);
|
|
245
|
+
engine.block.setFloat(
|
|
246
|
+
combinedAdjustments,
|
|
247
|
+
'effect/adjustments/brightness',
|
|
248
|
+
0.2
|
|
249
|
+
);
|
|
250
|
+
engine.block.setFloat(
|
|
251
|
+
combinedAdjustments,
|
|
252
|
+
'effect/adjustments/contrast',
|
|
253
|
+
0.15
|
|
254
|
+
);
|
|
343
255
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
256
|
+
const combinedBlur = engine.block.createEffect('extrude_blur');
|
|
257
|
+
engine.block.appendEffect(combinedImageBlock, combinedBlur);
|
|
258
|
+
engine.block.setFloat(combinedBlur, 'effect/extrude_blur/amount', 0.3);
|
|
259
|
+
|
|
260
|
+
const combinedDuotone = engine.block.createEffect('duotone_filter');
|
|
261
|
+
engine.block.appendEffect(combinedImageBlock, combinedDuotone);
|
|
262
|
+
engine.block.setColor(combinedDuotone, 'duotone_filter/darkColor', {
|
|
263
|
+
r: 0.1,
|
|
264
|
+
g: 0.2,
|
|
265
|
+
b: 0.4,
|
|
266
|
+
a: 1.0
|
|
267
|
+
});
|
|
268
|
+
engine.block.setColor(combinedDuotone, 'duotone_filter/lightColor', {
|
|
269
|
+
r: 0.9,
|
|
270
|
+
g: 0.8,
|
|
271
|
+
b: 0.6,
|
|
272
|
+
a: 1.0
|
|
273
|
+
});
|
|
274
|
+
engine.block.setFloat(combinedDuotone, 'duotone_filter/intensity', 0.6);
|
|
275
|
+
|
|
276
|
+
const pixelizeEffect = engine.block.createEffect('pixelize');
|
|
277
|
+
engine.block.appendEffect(combinedImageBlock, pixelizeEffect);
|
|
278
|
+
engine.block.setInt(pixelizeEffect, 'pixelize/horizontalPixelSize', 8);
|
|
279
|
+
engine.block.setInt(pixelizeEffect, 'pixelize/verticalPixelSize', 8);
|
|
280
|
+
|
|
281
|
+
// Get all effects applied to the combined block
|
|
282
|
+
const effects = engine.block.getEffects(combinedImageBlock);
|
|
283
|
+
console.log('Applied effects:', effects);
|
|
284
|
+
|
|
285
|
+
// Access properties of specific effects
|
|
286
|
+
effects.forEach((effect, index) => {
|
|
287
|
+
const effectType = engine.block.getType(effect);
|
|
288
|
+
const isEnabled = engine.block.isEffectEnabled(effect);
|
|
289
|
+
console.log(`Effect ${index}: ${effectType}, enabled: ${isEnabled}`);
|
|
290
|
+
});
|
|
348
291
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
});
|
|
353
|
-
engine.block.appendChild(page, tempBlock);
|
|
292
|
+
// Check if effect is enabled and toggle
|
|
293
|
+
const isBlurEnabled = engine.block.isEffectEnabled(combinedBlur);
|
|
294
|
+
console.log('Blur effect is enabled:', isBlurEnabled);
|
|
354
295
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
296
|
+
// Temporarily disable the blur effect
|
|
297
|
+
engine.block.setEffectEnabled(combinedBlur, false);
|
|
298
|
+
console.log(
|
|
299
|
+
'Blur effect disabled:',
|
|
300
|
+
!engine.block.isEffectEnabled(combinedBlur)
|
|
301
|
+
);
|
|
358
302
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
const effectIndex = tempEffects.indexOf(tempEffect);
|
|
362
|
-
if (effectIndex !== -1) {
|
|
363
|
-
engine.block.removeEffect(tempBlock, effectIndex);
|
|
364
|
-
}
|
|
303
|
+
// Re-enable for final export
|
|
304
|
+
engine.block.setEffectEnabled(combinedBlur, true);
|
|
365
305
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
sampleBlock, // Position 0
|
|
372
|
-
blurImageBlock, // Position 1
|
|
373
|
-
adjustmentsImageBlock, // Position 2
|
|
374
|
-
...lutImageBlocks, // Positions 3-4
|
|
375
|
-
...duotoneImageBlocks, // Positions 5-6
|
|
376
|
-
combinedImageBlock, // Position 7
|
|
377
|
-
tempBlock // Position 8
|
|
378
|
-
];
|
|
379
|
-
|
|
380
|
-
blocks.forEach((block, index) => {
|
|
381
|
-
const pos = getPosition(index);
|
|
382
|
-
engine.block.setPositionX(block, pos.x);
|
|
383
|
-
engine.block.setPositionY(block, pos.y);
|
|
384
|
-
});
|
|
306
|
+
// Create a temporary block to demonstrate effect removal (Grid position 8)
|
|
307
|
+
const tempBlock = await engine.block.addImage(imageUri, {
|
|
308
|
+
size: blockSize
|
|
309
|
+
});
|
|
310
|
+
engine.block.appendChild(page, tempBlock);
|
|
385
311
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
allGraphics.forEach((graphic) => {
|
|
390
|
-
if (engine.block.supportsEffects(graphic)) {
|
|
391
|
-
// Only apply to blocks that don't already have effects
|
|
392
|
-
const existingEffects = engine.block.getEffects(graphic);
|
|
393
|
-
if (existingEffects.length === 0) {
|
|
394
|
-
const effect = engine.block.createEffect('adjustments');
|
|
395
|
-
engine.block.appendEffect(graphic, effect);
|
|
396
|
-
engine.block.setFloat(effect, 'effect/adjustments/brightness', 0.1);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
});
|
|
312
|
+
const tempEffect = engine.block.createEffect('pixelize');
|
|
313
|
+
engine.block.appendEffect(tempBlock, tempEffect);
|
|
314
|
+
engine.block.setInt(tempEffect, 'pixelize/horizontalPixelSize', 12);
|
|
400
315
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
316
|
+
// Remove the effect from the block
|
|
317
|
+
const tempEffects = engine.block.getEffects(tempBlock);
|
|
318
|
+
const effectIndex = tempEffects.indexOf(tempEffect);
|
|
319
|
+
if (effectIndex !== -1) {
|
|
320
|
+
engine.block.removeEffect(tempBlock, effectIndex);
|
|
405
321
|
}
|
|
406
|
-
}
|
|
407
322
|
|
|
408
|
-
|
|
409
|
-
|
|
323
|
+
// Destroy the removed effect to free memory
|
|
324
|
+
engine.block.destroy(tempEffect);
|
|
325
|
+
console.log('Effect removed and destroyed');
|
|
326
|
+
|
|
327
|
+
// ===== Position all blocks in grid layout =====
|
|
328
|
+
// Calculate grid positions for 9 blocks (3x3 grid)
|
|
329
|
+
const spacing = 20;
|
|
330
|
+
const margin = 40;
|
|
331
|
+
const cols = 3;
|
|
332
|
+
const totalGridWidth = cols * blockSize.width + (cols - 1) * spacing;
|
|
333
|
+
const startX = (800 - totalGridWidth) / 2;
|
|
334
|
+
const startY = margin;
|
|
335
|
+
|
|
336
|
+
const getPosition = (index: number) => ({
|
|
337
|
+
x: startX + (index % cols) * (blockSize.width + spacing),
|
|
338
|
+
y: startY + Math.floor(index / cols) * (blockSize.height + spacing)
|
|
339
|
+
});
|
|
410
340
|
|
|
411
|
-
|
|
341
|
+
const blocks = [
|
|
342
|
+
sampleBlock, // Position 0
|
|
343
|
+
blurImageBlock, // Position 1
|
|
344
|
+
adjustmentsImageBlock, // Position 2
|
|
345
|
+
...lutImageBlocks, // Positions 3-4
|
|
346
|
+
...duotoneImageBlocks, // Positions 5-6
|
|
347
|
+
combinedImageBlock, // Position 7
|
|
348
|
+
tempBlock // Position 8
|
|
349
|
+
];
|
|
350
|
+
|
|
351
|
+
blocks.forEach((block, index) => {
|
|
352
|
+
const pos = getPosition(index);
|
|
353
|
+
engine.block.setPositionX(block, pos.x);
|
|
354
|
+
engine.block.setPositionY(block, pos.y);
|
|
355
|
+
});
|
|
412
356
|
|
|
413
|
-
|
|
357
|
+
// Apply same effects to multiple blocks (batch processing)
|
|
358
|
+
const allGraphics = engine.block.findByType('graphic');
|
|
359
|
+
|
|
360
|
+
allGraphics.forEach((graphic) => {
|
|
361
|
+
if (engine.block.supportsEffects(graphic)) {
|
|
362
|
+
// Only apply to blocks that don't already have effects
|
|
363
|
+
const existingEffects = engine.block.getEffects(graphic);
|
|
364
|
+
if (existingEffects.length === 0) {
|
|
365
|
+
const effect = engine.block.createEffect('adjustments');
|
|
366
|
+
engine.block.appendEffect(graphic, effect);
|
|
367
|
+
engine.block.setFloat(effect, 'effect/adjustments/brightness', 0.1);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
console.log('Batch processing complete');
|
|
414
372
|
|
|
415
|
-
|
|
373
|
+
// Export the scene to PNG
|
|
374
|
+
const blob = await engine.block.export(page, { mimeType: 'image/png' });
|
|
375
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
416
376
|
|
|
417
|
-
|
|
377
|
+
// Ensure output directory exists
|
|
378
|
+
if (!existsSync('output')) {
|
|
379
|
+
mkdirSync('output');
|
|
380
|
+
}
|
|
418
381
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
382
|
+
// Save to file
|
|
383
|
+
writeFileSync('output/filters-and-effects.png', buffer);
|
|
384
|
+
console.log('Exported to output/filters-and-effects.png');
|
|
385
|
+
} finally {
|
|
386
|
+
engine.dispose();
|
|
387
|
+
}
|
|
425
388
|
```
|
|
426
389
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
Effects are enabled by default for graphic blocks with image or video fills. The Feature API shown above allows you to control which specific effects appear in the inspector panel UI.
|
|
430
|
-
|
|
431
|
-
### User Workflow
|
|
432
|
-
|
|
433
|
-
With effects features enabled, users can enhance their designs through a visual workflow in the inspector panel:
|
|
434
|
-
|
|
435
|
-
1. **Select an element** - Click on any image or supported graphic block in the canvas
|
|
436
|
-
2. **Access inspector** - The inspector panel shows available options for the selected element
|
|
437
|
-
3. **Find effects section** - Scroll to the effects and filters sections within the inspector
|
|
438
|
-
4. **Browse and apply** - Click through available effects to apply them
|
|
439
|
-
5. **Adjust parameters** - Use sliders and controls to fine-tune intensity and other effect properties
|
|
440
|
-
6. **Manage effects** - Toggle effects on/off, switch between effects, or reset effect parameters
|
|
441
|
-
|
|
442
|
-
> **Note:** Effects are applied immediately when selected. CE.SDK does not currently
|
|
443
|
-
> support live preview mode when browsing effects before application. Effect
|
|
444
|
-
> reordering is not supported—use toggle on/off, switch, or reset operations to
|
|
445
|
-
> manage applied effects.
|
|
446
|
-
|
|
447
|
-
This interactive approach is perfect for creative exploration and allows users to see results immediately without any coding knowledge.
|
|
390
|
+
This guide covers how to apply and manage effects programmatically using the block API.
|
|
448
391
|
|
|
449
392
|
## Programmatic Effect Application
|
|
450
393
|
|
|
@@ -453,73 +396,33 @@ This interactive approach is perfect for creative exploration and allows users t
|
|
|
453
396
|
For applications that need to apply effects programmatically—whether for automation, batch processing, or dynamic user experiences—we start by setting up CE.SDK with the proper configuration.
|
|
454
397
|
|
|
455
398
|
```typescript highlight-setup
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
await cesdk.addPlugin(new ColorPaletteAssetSource());
|
|
461
|
-
await cesdk.addPlugin(new CropPresetsAssetSource());
|
|
462
|
-
await cesdk.addPlugin(
|
|
463
|
-
new UploadAssetSources({ include: ['ly.img.image.upload'] })
|
|
464
|
-
);
|
|
465
|
-
await cesdk.addPlugin(
|
|
466
|
-
new DemoAssetSources({
|
|
467
|
-
include: [
|
|
468
|
-
'ly.img.templates.blank.*',
|
|
469
|
-
'ly.img.templates.presentation.*',
|
|
470
|
-
'ly.img.templates.print.*',
|
|
471
|
-
'ly.img.templates.social.*',
|
|
472
|
-
'ly.img.image.*'
|
|
473
|
-
]
|
|
474
|
-
})
|
|
475
|
-
);
|
|
476
|
-
await cesdk.addPlugin(new EffectsAssetSource());
|
|
477
|
-
await cesdk.addPlugin(new FiltersAssetSource());
|
|
478
|
-
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
479
|
-
await cesdk.addPlugin(new StickerAssetSource());
|
|
480
|
-
await cesdk.addPlugin(new TextAssetSource());
|
|
481
|
-
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
482
|
-
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
483
|
-
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
484
|
-
|
|
485
|
-
await cesdk.actions.run('scene.create', {
|
|
486
|
-
page: { width: 800, height: 600, unit: 'Pixel' }
|
|
399
|
+
// Initialize CE.SDK engine in headless mode
|
|
400
|
+
const engine = await CreativeEngine.init({
|
|
401
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
|
|
402
|
+
// license: process.env.CESDK_LICENSE, // Optional (trial mode available)
|
|
487
403
|
});
|
|
488
|
-
|
|
489
|
-
const engine = cesdk.engine;
|
|
490
|
-
const page = engine.block.findByType('page')[0];
|
|
491
|
-
|
|
492
|
-
const pageWidth = engine.block.getWidth(page);
|
|
493
|
-
const pageHeight = engine.block.getHeight(page);
|
|
494
404
|
```
|
|
495
405
|
|
|
496
|
-
This initializes the
|
|
406
|
+
This initializes the CE.SDK engine in headless mode, giving you full API access to the effects system without UI dependencies.
|
|
497
407
|
|
|
498
408
|
### Check Effect Support
|
|
499
409
|
|
|
500
|
-
Before applying effects to a block, we check whether it supports them. Not all block types can have effects applied—for example,
|
|
501
|
-
|
|
502
|
-
```typescript highlight-check-effect-support
|
|
503
|
-
// Pattern #2: Use Convenience APIs - addImage() simplifies block creation
|
|
504
|
-
// Create a sample block to demonstrate effect support checking
|
|
505
|
-
const blockSize = { width: blockWidth, height: blockHeight };
|
|
506
|
-
const sampleBlock = await engine.block.addImage(imageUri, {
|
|
507
|
-
size: blockSize
|
|
508
|
-
});
|
|
509
|
-
engine.block.appendChild(page, sampleBlock);
|
|
410
|
+
Before applying effects to a block, we check whether it supports them. Not all block types can have effects applied—for example, scene blocks do not support effects.
|
|
510
411
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
412
|
+
```typescript highlight-supportsEffects
|
|
413
|
+
// Create an image block to check effect support
|
|
414
|
+
const sampleBlock = await engine.block.addImage(imageUri, {
|
|
415
|
+
size: blockSize
|
|
416
|
+
});
|
|
417
|
+
engine.block.appendChild(page, sampleBlock);
|
|
515
418
|
|
|
516
|
-
//
|
|
517
|
-
const
|
|
518
|
-
//
|
|
519
|
-
console.log('Page supports effects:', pageSupportsEffects); // false
|
|
419
|
+
// Check if a block supports effects - graphic blocks with image fills support effects
|
|
420
|
+
const supportsEffects = engine.block.supportsEffects(sampleBlock);
|
|
421
|
+
console.log('Block supports effects:', supportsEffects); // true
|
|
520
422
|
|
|
521
|
-
//
|
|
522
|
-
engine.block.
|
|
423
|
+
// Page blocks support effects when they have fills applied
|
|
424
|
+
const pageSupportsEffects = engine.block.supportsEffects(page);
|
|
425
|
+
console.log('Page supports effects:', pageSupportsEffects);
|
|
523
426
|
```
|
|
524
427
|
|
|
525
428
|
Effect support is available for:
|
|
@@ -530,7 +433,7 @@ Effect support is available for:
|
|
|
530
433
|
- **Text blocks** (with limited effect types)
|
|
531
434
|
- **Page blocks** (particularly when they have fills applied, such as background fills)
|
|
532
435
|
|
|
533
|
-
Always verify support before creating and applying effects to avoid errors
|
|
436
|
+
Always verify support before creating and applying effects to avoid errors.
|
|
534
437
|
|
|
535
438
|
### Apply Basic Effects
|
|
536
439
|
|
|
@@ -542,20 +445,19 @@ Once we've confirmed a block supports effects, we can create and apply effects u
|
|
|
542
445
|
> configuration options like positioning, sizing, corner radius, shadows, and
|
|
543
446
|
> time-based properties.
|
|
544
447
|
|
|
545
|
-
```typescript highlight-
|
|
546
|
-
//
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
engine.block.appendChild(page, blurImageBlock);
|
|
448
|
+
```typescript highlight-createEffect
|
|
449
|
+
// Create a separate image block for blur demonstration
|
|
450
|
+
const blurImageBlock = await engine.block.addImage(imageUri, {
|
|
451
|
+
size: blockSize
|
|
452
|
+
});
|
|
453
|
+
engine.block.appendChild(page, blurImageBlock);
|
|
552
454
|
|
|
553
|
-
// Create and apply a blur effect
|
|
554
|
-
const blurEffect = engine.block.createEffect('extrude_blur');
|
|
555
|
-
engine.block.appendEffect(blurImageBlock, blurEffect);
|
|
455
|
+
// Create and apply a blur effect
|
|
456
|
+
const blurEffect = engine.block.createEffect('extrude_blur');
|
|
457
|
+
engine.block.appendEffect(blurImageBlock, blurEffect);
|
|
556
458
|
|
|
557
|
-
// Adjust blur intensity
|
|
558
|
-
engine.block.setFloat(blurEffect, 'effect/extrude_blur/amount', 0.5);
|
|
459
|
+
// Adjust blur intensity (0.0 to 1.0)
|
|
460
|
+
engine.block.setFloat(blurEffect, 'effect/extrude_blur/amount', 0.5);
|
|
559
461
|
```
|
|
560
462
|
|
|
561
463
|
CE.SDK provides several built-in effect types:
|
|
@@ -577,26 +479,29 @@ Each effect type has its own set of configurable properties that control its vis
|
|
|
577
479
|
|
|
578
480
|
After creating an effect, we can customize its appearance by setting properties. Each effect exposes different parameters depending on its type and capabilities.
|
|
579
481
|
|
|
580
|
-
```typescript highlight-
|
|
581
|
-
// Create a separate image block for adjustments demonstration
|
|
582
|
-
const adjustmentsImageBlock = await engine.block.addImage(imageUri, {
|
|
583
|
-
|
|
584
|
-
});
|
|
585
|
-
engine.block.appendChild(page, adjustmentsImageBlock);
|
|
586
|
-
|
|
587
|
-
// Create adjustments effect for brightness and contrast
|
|
588
|
-
const adjustmentsEffect = engine.block.createEffect('adjustments');
|
|
589
|
-
engine.block.appendEffect(adjustmentsImageBlock, adjustmentsEffect);
|
|
482
|
+
```typescript highlight-modifyProperties
|
|
483
|
+
// Create a separate image block for adjustments demonstration
|
|
484
|
+
const adjustmentsImageBlock = await engine.block.addImage(imageUri, {
|
|
485
|
+
size: blockSize
|
|
486
|
+
});
|
|
487
|
+
engine.block.appendChild(page, adjustmentsImageBlock);
|
|
590
488
|
|
|
591
|
-
//
|
|
592
|
-
const
|
|
593
|
-
|
|
594
|
-
console.log('Available adjustment properties:', adjustmentProperties);
|
|
489
|
+
// Create adjustments effect for brightness and contrast
|
|
490
|
+
const adjustmentsEffect = engine.block.createEffect('adjustments');
|
|
491
|
+
engine.block.appendEffect(adjustmentsImageBlock, adjustmentsEffect);
|
|
595
492
|
|
|
596
|
-
// Set brightness, contrast, and saturation
|
|
597
|
-
engine.block.setFloat(
|
|
598
|
-
|
|
599
|
-
|
|
493
|
+
// Set brightness, contrast, and saturation
|
|
494
|
+
engine.block.setFloat(
|
|
495
|
+
adjustmentsEffect,
|
|
496
|
+
'effect/adjustments/brightness',
|
|
497
|
+
0.2
|
|
498
|
+
);
|
|
499
|
+
engine.block.setFloat(adjustmentsEffect, 'effect/adjustments/contrast', 0.15);
|
|
500
|
+
engine.block.setFloat(
|
|
501
|
+
adjustmentsEffect,
|
|
502
|
+
'effect/adjustments/saturation',
|
|
503
|
+
0.1
|
|
504
|
+
);
|
|
600
505
|
```
|
|
601
506
|
|
|
602
507
|
CE.SDK provides typed setter methods for different parameter types:
|
|
@@ -612,45 +517,55 @@ Using the correct setter method ensures type safety and proper value validation.
|
|
|
612
517
|
|
|
613
518
|
LUT (Look-Up Table) filters apply professional color grading by transforming colors through a predefined mapping. These are particularly useful for creating consistent brand aesthetics or applying cinematic color treatments.
|
|
614
519
|
|
|
615
|
-
The example demonstrates querying LUT filters from the asset library using `engine.asset.findAssets('ly.img.filter')`, then applying them using metadata from the asset results. This approach matches how CE.SDK's built-in filter panel works.
|
|
616
|
-
|
|
617
520
|
```typescript highlight-apply-lut-filter
|
|
618
|
-
// Demonstrate LUT filters by applying
|
|
619
|
-
//
|
|
620
|
-
const
|
|
621
|
-
|
|
622
|
-
|
|
521
|
+
// Demonstrate LUT filters by applying 2 different presets (Grid positions 3-4)
|
|
522
|
+
// LUT configurations with different color grading styles
|
|
523
|
+
const lutConfigs = [
|
|
524
|
+
{
|
|
525
|
+
uri: 'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.filters.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
526
|
+
horizontalTileCount: 5,
|
|
527
|
+
verticalTileCount: 5
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
uri: 'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.filters.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
531
|
+
horizontalTileCount: 5,
|
|
532
|
+
verticalTileCount: 5
|
|
533
|
+
}
|
|
534
|
+
];
|
|
623
535
|
|
|
624
|
-
const
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
536
|
+
const lutImageBlocks = [];
|
|
537
|
+
for (const lutConfig of lutConfigs) {
|
|
538
|
+
const lutImageBlock = await engine.block.addImage(imageUri, {
|
|
539
|
+
size: { width: 200, height: 150 }
|
|
540
|
+
});
|
|
541
|
+
engine.block.appendChild(page, lutImageBlock);
|
|
542
|
+
lutImageBlocks.push(lutImageBlock);
|
|
629
543
|
|
|
630
|
-
|
|
631
|
-
|
|
544
|
+
// Create LUT filter effect
|
|
545
|
+
const lutEffect = engine.block.createEffect(
|
|
546
|
+
'//ly.img.ubq/effect/lut_filter'
|
|
547
|
+
);
|
|
632
548
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
|
|
549
|
+
// Configure LUT with preset filter settings
|
|
550
|
+
engine.block.setString(
|
|
551
|
+
lutEffect,
|
|
552
|
+
'effect/lut_filter/lutFileURI',
|
|
553
|
+
lutConfig.uri
|
|
554
|
+
);
|
|
555
|
+
engine.block.setInt(
|
|
556
|
+
lutEffect,
|
|
557
|
+
'effect/lut_filter/horizontalTileCount',
|
|
558
|
+
lutConfig.horizontalTileCount
|
|
559
|
+
);
|
|
560
|
+
engine.block.setInt(
|
|
561
|
+
lutEffect,
|
|
562
|
+
'effect/lut_filter/verticalTileCount',
|
|
563
|
+
lutConfig.verticalTileCount
|
|
564
|
+
);
|
|
565
|
+
engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
|
|
651
566
|
|
|
652
|
-
|
|
653
|
-
}
|
|
567
|
+
engine.block.appendEffect(lutImageBlock, lutEffect);
|
|
568
|
+
}
|
|
654
569
|
```
|
|
655
570
|
|
|
656
571
|
LUT filters are ideal for:
|
|
@@ -660,51 +575,57 @@ LUT filters are ideal for:
|
|
|
660
575
|
- Matching reference images or maintaining color continuity
|
|
661
576
|
- Building curated filter collections for users
|
|
662
577
|
|
|
663
|
-
**
|
|
578
|
+
**LUT configuration**: Each LUT file requires specifying the `lutFileURI` pointing to the LUT image, along with `horizontalTileCount` and `verticalTileCount` describing the grid layout of color transformation cubes.
|
|
664
579
|
|
|
665
580
|
### Apply Duotone Filters
|
|
666
581
|
|
|
667
582
|
Duotone filters create artistic two-color effects by mapping image tones to two colors (dark and light). This effect is popular for creating stylized visuals, vintage aesthetics, or brand-specific color treatments.
|
|
668
583
|
|
|
669
|
-
The example
|
|
584
|
+
The example applies duotone filters using direct color configuration. The `hexToRgba` utility converts hex color values to RGBA format required by the `setColor` API.
|
|
670
585
|
|
|
671
586
|
```typescript highlight-apply-duotone-filter
|
|
672
|
-
// Demonstrate Duotone filters by applying
|
|
673
|
-
// Duotone
|
|
674
|
-
const
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
'//ly.img.ubq/effect/duotone_filter'
|
|
687
|
-
);
|
|
587
|
+
// Demonstrate Duotone filters by applying 2 different color combinations (Grid positions 5-6)
|
|
588
|
+
// Duotone configurations with different color schemes
|
|
589
|
+
const duotoneConfigs = [
|
|
590
|
+
{ darkColor: '#0b3d5b', lightColor: '#f8bc60' }, // Blue/Orange
|
|
591
|
+
{ darkColor: '#2d1e3e', lightColor: '#e8d5b7' } // Purple/Cream
|
|
592
|
+
];
|
|
593
|
+
|
|
594
|
+
const duotoneImageBlocks = [];
|
|
595
|
+
for (const duotoneConfig of duotoneConfigs) {
|
|
596
|
+
const duotoneImageBlock = await engine.block.addImage(imageUri, {
|
|
597
|
+
size: { width: 200, height: 150 }
|
|
598
|
+
});
|
|
599
|
+
engine.block.appendChild(page, duotoneImageBlock);
|
|
600
|
+
duotoneImageBlocks.push(duotoneImageBlock);
|
|
688
601
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
'effect/duotone_filter/darkColor',
|
|
694
|
-
darkColor
|
|
695
|
-
);
|
|
602
|
+
// Create duotone filter effect
|
|
603
|
+
const duotoneEffect = engine.block.createEffect(
|
|
604
|
+
'//ly.img.ubq/effect/duotone_filter'
|
|
605
|
+
);
|
|
696
606
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
607
|
+
// Configure duotone colors using hex to RGBA conversion
|
|
608
|
+
const darkColor = hexToRgba(duotoneConfig.darkColor);
|
|
609
|
+
engine.block.setColor(
|
|
610
|
+
duotoneEffect,
|
|
611
|
+
'effect/duotone_filter/darkColor',
|
|
612
|
+
darkColor
|
|
613
|
+
);
|
|
703
614
|
|
|
704
|
-
|
|
615
|
+
const lightColor = hexToRgba(duotoneConfig.lightColor);
|
|
616
|
+
engine.block.setColor(
|
|
617
|
+
duotoneEffect,
|
|
618
|
+
'effect/duotone_filter/lightColor',
|
|
619
|
+
lightColor
|
|
620
|
+
);
|
|
705
621
|
|
|
706
|
-
|
|
707
|
-
|
|
622
|
+
engine.block.setFloat(
|
|
623
|
+
duotoneEffect,
|
|
624
|
+
'effect/duotone_filter/intensity',
|
|
625
|
+
0.8
|
|
626
|
+
);
|
|
627
|
+
engine.block.appendEffect(duotoneImageBlock, duotoneEffect);
|
|
628
|
+
}
|
|
708
629
|
```
|
|
709
630
|
|
|
710
631
|
Duotone filters work by:
|
|
@@ -714,7 +635,7 @@ Duotone filters work by:
|
|
|
714
635
|
- Blending between the two colors based on pixel brightness
|
|
715
636
|
- Adjusting intensity to control the effect strength (0.0 to 1.0)
|
|
716
637
|
|
|
717
|
-
**
|
|
638
|
+
**Color format**: Duotone colors use RGBA values in the 0.0 to 1.0 range. Convert hex colors using a helper function as shown in the example.
|
|
718
639
|
|
|
719
640
|
### Combine Multiple Effects
|
|
720
641
|
|
|
@@ -726,60 +647,63 @@ One of the most powerful features of CE.SDK's effect system is the ability to st
|
|
|
726
647
|
> production code, you can apply multiple effects directly to the same block
|
|
727
648
|
> without this separation.
|
|
728
649
|
|
|
729
|
-
```typescript highlight-
|
|
730
|
-
//
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
//
|
|
738
|
-
//
|
|
739
|
-
//
|
|
740
|
-
//
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
engine.block.
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
engine.block.setFloat(combinedBlur, 'effect/extrude_blur/amount', 0.3);
|
|
755
|
-
|
|
756
|
-
const combinedDuotone = engine.block.createEffect('duotone_filter');
|
|
757
|
-
engine.block.appendEffect(combinedImageBlock, combinedDuotone);
|
|
758
|
-
engine.block.setColor(combinedDuotone, 'duotone_filter/darkColor', {
|
|
759
|
-
r: 0.1,
|
|
760
|
-
g: 0.2,
|
|
761
|
-
b: 0.4,
|
|
762
|
-
a: 1.0
|
|
763
|
-
});
|
|
764
|
-
engine.block.setColor(combinedDuotone, 'duotone_filter/lightColor', {
|
|
765
|
-
r: 0.9,
|
|
766
|
-
g: 0.8,
|
|
767
|
-
b: 0.6,
|
|
768
|
-
a: 1.0
|
|
769
|
-
});
|
|
770
|
-
engine.block.setFloat(combinedDuotone, 'duotone_filter/intensity', 0.6);
|
|
650
|
+
```typescript highlight-addEffect
|
|
651
|
+
// Create an image block to demonstrate combining multiple effects (Grid position 7)
|
|
652
|
+
const combinedImageBlock = await engine.block.addImage(imageUri, {
|
|
653
|
+
size: { width: 200, height: 150 }
|
|
654
|
+
});
|
|
655
|
+
engine.block.appendChild(page, combinedImageBlock);
|
|
656
|
+
|
|
657
|
+
// Apply effects in order - the stack will contain:
|
|
658
|
+
// 1. adjustments (brightness/contrast) - applied first
|
|
659
|
+
// 2. blur - applied second
|
|
660
|
+
// 3. duotone (color tinting) - applied third
|
|
661
|
+
// 4. pixelize - applied last
|
|
662
|
+
|
|
663
|
+
const combinedAdjustments = engine.block.createEffect('adjustments');
|
|
664
|
+
engine.block.appendEffect(combinedImageBlock, combinedAdjustments);
|
|
665
|
+
engine.block.setFloat(
|
|
666
|
+
combinedAdjustments,
|
|
667
|
+
'effect/adjustments/brightness',
|
|
668
|
+
0.2
|
|
669
|
+
);
|
|
670
|
+
engine.block.setFloat(
|
|
671
|
+
combinedAdjustments,
|
|
672
|
+
'effect/adjustments/contrast',
|
|
673
|
+
0.15
|
|
674
|
+
);
|
|
771
675
|
|
|
772
|
-
const
|
|
773
|
-
engine.block.appendEffect(combinedImageBlock,
|
|
774
|
-
engine.block.
|
|
775
|
-
|
|
676
|
+
const combinedBlur = engine.block.createEffect('extrude_blur');
|
|
677
|
+
engine.block.appendEffect(combinedImageBlock, combinedBlur);
|
|
678
|
+
engine.block.setFloat(combinedBlur, 'effect/extrude_blur/amount', 0.3);
|
|
679
|
+
|
|
680
|
+
const combinedDuotone = engine.block.createEffect('duotone_filter');
|
|
681
|
+
engine.block.appendEffect(combinedImageBlock, combinedDuotone);
|
|
682
|
+
engine.block.setColor(combinedDuotone, 'duotone_filter/darkColor', {
|
|
683
|
+
r: 0.1,
|
|
684
|
+
g: 0.2,
|
|
685
|
+
b: 0.4,
|
|
686
|
+
a: 1.0
|
|
687
|
+
});
|
|
688
|
+
engine.block.setColor(combinedDuotone, 'duotone_filter/lightColor', {
|
|
689
|
+
r: 0.9,
|
|
690
|
+
g: 0.8,
|
|
691
|
+
b: 0.6,
|
|
692
|
+
a: 1.0
|
|
693
|
+
});
|
|
694
|
+
engine.block.setFloat(combinedDuotone, 'duotone_filter/intensity', 0.6);
|
|
695
|
+
|
|
696
|
+
const pixelizeEffect = engine.block.createEffect('pixelize');
|
|
697
|
+
engine.block.appendEffect(combinedImageBlock, pixelizeEffect);
|
|
698
|
+
engine.block.setInt(pixelizeEffect, 'pixelize/horizontalPixelSize', 8);
|
|
699
|
+
engine.block.setInt(pixelizeEffect, 'pixelize/verticalPixelSize', 8);
|
|
776
700
|
```
|
|
777
701
|
|
|
778
702
|
**Effect ordering matters**: Effects are applied from the bottom of the stack to the top. In this example:
|
|
779
703
|
|
|
780
704
|
1. First, we adjust brightness and contrast
|
|
781
705
|
2. Then, we apply blur
|
|
782
|
-
3. Then, we apply color grading with
|
|
706
|
+
3. Then, we apply color grading with duotone
|
|
783
707
|
4. Finally, we add stylization with pixelization
|
|
784
708
|
|
|
785
709
|
Experiment with different orderings to achieve the desired visual result—changing the order can significantly impact the final appearance.
|
|
@@ -788,64 +712,72 @@ Experiment with different orderings to achieve the desired visual result—chang
|
|
|
788
712
|
|
|
789
713
|
### List and Access Effects
|
|
790
714
|
|
|
791
|
-
We can retrieve all effects applied to a block and inspect their properties. This is useful for building effect management
|
|
715
|
+
We can retrieve all effects applied to a block and inspect their properties. This is useful for building effect management logic or debugging effect configurations.
|
|
792
716
|
|
|
793
|
-
```typescript highlight-
|
|
794
|
-
// Get all effects applied to the combined block
|
|
795
|
-
const effects = engine.block.getEffects(combinedImageBlock);
|
|
796
|
-
|
|
797
|
-
console.log('Applied effects:', effects);
|
|
717
|
+
```typescript highlight-getEffects
|
|
718
|
+
// Get all effects applied to the combined block
|
|
719
|
+
const effects = engine.block.getEffects(combinedImageBlock);
|
|
720
|
+
console.log('Applied effects:', effects);
|
|
798
721
|
|
|
799
|
-
// Access properties of specific effects
|
|
800
|
-
effects.forEach((effect, index) => {
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
});
|
|
722
|
+
// Access properties of specific effects
|
|
723
|
+
effects.forEach((effect, index) => {
|
|
724
|
+
const effectType = engine.block.getType(effect);
|
|
725
|
+
const isEnabled = engine.block.isEffectEnabled(effect);
|
|
726
|
+
console.log(`Effect ${index}: ${effectType}, enabled: ${isEnabled}`);
|
|
727
|
+
});
|
|
806
728
|
```
|
|
807
729
|
|
|
808
730
|
This allows you to iterate through all applied effects, read their properties, and make modifications as needed.
|
|
809
731
|
|
|
810
732
|
### Enable/Disable Effects
|
|
811
733
|
|
|
812
|
-
CE.SDK allows you to temporarily toggle effects on and off without removing them from the block. This is particularly useful for before/after comparisons or
|
|
734
|
+
CE.SDK allows you to temporarily toggle effects on and off without removing them from the block. This is particularly useful for before/after comparisons or conditional rendering in processing pipelines.
|
|
813
735
|
|
|
814
|
-
```typescript highlight-
|
|
815
|
-
// Check if effect is enabled
|
|
816
|
-
const isBlurEnabled = engine.block.isEffectEnabled(combinedBlur);
|
|
817
|
-
|
|
818
|
-
|
|
736
|
+
```typescript highlight-disableEffect
|
|
737
|
+
// Check if effect is enabled and toggle
|
|
738
|
+
const isBlurEnabled = engine.block.isEffectEnabled(combinedBlur);
|
|
739
|
+
console.log('Blur effect is enabled:', isBlurEnabled);
|
|
740
|
+
|
|
741
|
+
// Temporarily disable the blur effect
|
|
742
|
+
engine.block.setEffectEnabled(combinedBlur, false);
|
|
743
|
+
console.log(
|
|
744
|
+
'Blur effect disabled:',
|
|
745
|
+
!engine.block.isEffectEnabled(combinedBlur)
|
|
746
|
+
);
|
|
747
|
+
|
|
748
|
+
// Re-enable for final export
|
|
749
|
+
engine.block.setEffectEnabled(combinedBlur, true);
|
|
819
750
|
```
|
|
820
751
|
|
|
821
752
|
When you disable an effect, it remains attached to the block but won't be rendered until you enable it again. This preserves all effect parameters while giving you full control over when the effect is applied.
|
|
822
753
|
|
|
823
|
-
You can use this feature to create
|
|
754
|
+
You can use this feature to create comparison outputs, implement conditional processing, or optimize rendering based on output requirements.
|
|
824
755
|
|
|
825
756
|
### Remove Effects
|
|
826
757
|
|
|
827
758
|
When you no longer need an effect, you can remove it from the effect stack and free its resources. Always destroy effects that are no longer in use to prevent memory leaks.
|
|
828
759
|
|
|
829
|
-
```typescript highlight-
|
|
830
|
-
// Create a temporary block to demonstrate effect removal
|
|
831
|
-
const tempBlock = await engine.block.addImage(imageUri, {
|
|
832
|
-
|
|
833
|
-
});
|
|
834
|
-
engine.block.appendChild(page, tempBlock);
|
|
760
|
+
```typescript highlight-destroyEffect
|
|
761
|
+
// Create a temporary block to demonstrate effect removal (Grid position 8)
|
|
762
|
+
const tempBlock = await engine.block.addImage(imageUri, {
|
|
763
|
+
size: blockSize
|
|
764
|
+
});
|
|
765
|
+
engine.block.appendChild(page, tempBlock);
|
|
835
766
|
|
|
836
|
-
const tempEffect = engine.block.createEffect('pixelize');
|
|
837
|
-
engine.block.appendEffect(tempBlock, tempEffect);
|
|
838
|
-
engine.block.setInt(tempEffect, 'pixelize/horizontalPixelSize', 12);
|
|
767
|
+
const tempEffect = engine.block.createEffect('pixelize');
|
|
768
|
+
engine.block.appendEffect(tempBlock, tempEffect);
|
|
769
|
+
engine.block.setInt(tempEffect, 'pixelize/horizontalPixelSize', 12);
|
|
839
770
|
|
|
840
|
-
// Remove the effect
|
|
841
|
-
const tempEffects = engine.block.getEffects(tempBlock);
|
|
842
|
-
const effectIndex = tempEffects.indexOf(tempEffect);
|
|
843
|
-
if (effectIndex !== -1) {
|
|
844
|
-
|
|
845
|
-
}
|
|
771
|
+
// Remove the effect from the block
|
|
772
|
+
const tempEffects = engine.block.getEffects(tempBlock);
|
|
773
|
+
const effectIndex = tempEffects.indexOf(tempEffect);
|
|
774
|
+
if (effectIndex !== -1) {
|
|
775
|
+
engine.block.removeEffect(tempBlock, effectIndex);
|
|
776
|
+
}
|
|
846
777
|
|
|
847
|
-
// Destroy the removed effect to free memory
|
|
848
|
-
engine.block.destroy(tempEffect);
|
|
778
|
+
// Destroy the removed effect to free memory
|
|
779
|
+
engine.block.destroy(tempEffect);
|
|
780
|
+
console.log('Effect removed and destroyed');
|
|
849
781
|
```
|
|
850
782
|
|
|
851
783
|
The `removeEffect()` method takes an index position, so you can remove effects selectively from any position in the stack. After removal, destroy the effect instance to ensure proper cleanup.
|
|
@@ -857,35 +789,25 @@ The `removeEffect()` method takes an index position, so you can remove effects s
|
|
|
857
789
|
For applications that need to apply the same effects to multiple elements, we can iterate through a collection of blocks and apply effects efficiently.
|
|
858
790
|
|
|
859
791
|
```typescript highlight-batch-processing
|
|
860
|
-
// Apply same effects to multiple blocks
|
|
861
|
-
const allGraphics = engine.block.findByType('graphic');
|
|
862
|
-
|
|
863
|
-
allGraphics.forEach((graphic) => {
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
792
|
+
// Apply same effects to multiple blocks (batch processing)
|
|
793
|
+
const allGraphics = engine.block.findByType('graphic');
|
|
794
|
+
|
|
795
|
+
allGraphics.forEach((graphic) => {
|
|
796
|
+
if (engine.block.supportsEffects(graphic)) {
|
|
797
|
+
// Only apply to blocks that don't already have effects
|
|
798
|
+
const existingEffects = engine.block.getEffects(graphic);
|
|
799
|
+
if (existingEffects.length === 0) {
|
|
800
|
+
const effect = engine.block.createEffect('adjustments');
|
|
801
|
+
engine.block.appendEffect(graphic, effect);
|
|
802
|
+
engine.block.setFloat(effect, 'effect/adjustments/brightness', 0.1);
|
|
803
|
+
}
|
|
871
804
|
}
|
|
872
|
-
}
|
|
873
|
-
|
|
805
|
+
});
|
|
806
|
+
console.log('Batch processing complete');
|
|
874
807
|
```
|
|
875
808
|
|
|
876
809
|
When batch processing, check effect support before creating effects to avoid unnecessary work. You can also reuse effect instances when applying the same configuration to multiple blocks, though be careful to destroy them properly when done.
|
|
877
810
|
|
|
878
|
-
### Dynamic Effects with Animations
|
|
879
|
-
|
|
880
|
-
You can combine effects with CE.SDK's built-in animation system to create dynamic visual treatments that change over time.
|
|
881
|
-
|
|
882
|
-
> **Caution:** Effect parameters are static properties and cannot be animated using
|
|
883
|
-
> JavaScript timers like `setInterval` or `requestAnimationFrame`. For animated
|
|
884
|
-
> content, use CE.SDK's built-in animation blocks (`createAnimation()`,
|
|
885
|
-
> `setInAnimation()`, etc.) or refer to the animation guides.
|
|
886
|
-
|
|
887
|
-
For dynamic visual effects in video projects, explore CE.SDK's animation system which provides professionally designed transitions and effects that integrate seamlessly with the rendering pipeline.
|
|
888
|
-
|
|
889
811
|
### Custom Effect Combinations
|
|
890
812
|
|
|
891
813
|
Creating reusable effect presets allows you to maintain consistent styling across your application and speed up common effect applications. Here's a pattern for building reusable effect configurations:
|
|
@@ -898,7 +820,7 @@ async function applyVintagePreset(engine: CreativeEngine, imageBlock: number) {
|
|
|
898
820
|
engine.block.setString(
|
|
899
821
|
lutEffect,
|
|
900
822
|
'lut_filter/lutFileURI',
|
|
901
|
-
'https://img.ly/
|
|
823
|
+
'https://cdn.img.ly/packages/imgly/cesdk-js/latest/assets/extensions/ly.img.cesdk.filters.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
902
824
|
);
|
|
903
825
|
engine.block.appendEffect(imageBlock, lutEffect);
|
|
904
826
|
|
|
@@ -918,19 +840,39 @@ Preset strategies include:
|
|
|
918
840
|
|
|
919
841
|
- **Brand filters** - Maintain a consistent look across campaigns
|
|
920
842
|
- **Style templates** - Provide quick application of complex multi-effect treatments
|
|
921
|
-
- **
|
|
843
|
+
- **Processing pipelines** - Apply standardized effects across batch operations
|
|
844
|
+
|
|
845
|
+
### Export Results
|
|
846
|
+
|
|
847
|
+
After applying effects, export the processed content to a file. CE.SDK supports various export formats including PNG, JPEG, and PDF.
|
|
848
|
+
|
|
849
|
+
```typescript highlight-export
|
|
850
|
+
// Export the scene to PNG
|
|
851
|
+
const blob = await engine.block.export(page, { mimeType: 'image/png' });
|
|
852
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
853
|
+
|
|
854
|
+
// Ensure output directory exists
|
|
855
|
+
if (!existsSync('output')) {
|
|
856
|
+
mkdirSync('output');
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Save to file
|
|
860
|
+
writeFileSync('output/filters-and-effects.png', buffer);
|
|
861
|
+
console.log('Exported to output/filters-and-effects.png');
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
The export operation renders all effects and saves the result to the file system. Always dispose of the engine instance when processing is complete to free resources.
|
|
922
865
|
|
|
923
866
|
## Performance Considerations
|
|
924
867
|
|
|
925
|
-
CE.SDK's effect system is optimized for
|
|
868
|
+
CE.SDK's effect system is optimized for performance, but understanding these considerations helps you build efficient processing pipelines:
|
|
926
869
|
|
|
927
|
-
- **GPU acceleration**: Effects leverage GPU rendering for smooth performance on modern
|
|
928
|
-
- **Mobile optimization**: Limit effects to 2-3 per element on mobile devices to maintain responsiveness
|
|
870
|
+
- **GPU acceleration**: Effects leverage GPU rendering for smooth performance on modern systems
|
|
929
871
|
- **Effect complexity**: Blur and LUT filters are computationally expensive compared to simple adjustments
|
|
930
|
-
- **Video effects**: Apply effects sparingly to video blocks to maintain smooth
|
|
931
|
-
- **
|
|
872
|
+
- **Video effects**: Apply effects sparingly to video blocks to maintain smooth processing
|
|
873
|
+
- **Batch optimization**: When processing many images, consider reusing engine instances rather than reinitializing
|
|
932
874
|
|
|
933
|
-
Test your effect combinations
|
|
875
|
+
Test your effect combinations with representative workloads early in development to ensure acceptable performance.
|
|
934
876
|
|
|
935
877
|
## Troubleshooting
|
|
936
878
|
|
|
@@ -945,12 +887,12 @@ If an effect doesn't appear after applying it, check these common issues:
|
|
|
945
887
|
|
|
946
888
|
### Performance Degradation
|
|
947
889
|
|
|
948
|
-
If you experience slow
|
|
890
|
+
If you experience slow processing:
|
|
949
891
|
|
|
950
|
-
- Reduce the number of effects per element
|
|
892
|
+
- Reduce the number of effects per element
|
|
951
893
|
- Lower blur radius values or use smaller LUT files
|
|
952
|
-
- Temporarily disable effects during
|
|
953
|
-
-
|
|
894
|
+
- Temporarily disable effects during intermediate operations with `setEffectEnabled()`
|
|
895
|
+
- Profile your processing pipeline to identify bottlenecks
|
|
954
896
|
|
|
955
897
|
### Effects Not Persisting
|
|
956
898
|
|
|
@@ -965,7 +907,7 @@ Effects should save automatically with the scene, but verify:
|
|
|
965
907
|
If you can't apply an effect:
|
|
966
908
|
|
|
967
909
|
- Remember that graphic blocks (with image or video fills), shape blocks, and text blocks support effects
|
|
968
|
-
- Page blocks
|
|
910
|
+
- Page blocks support effects when they have fills applied (such as background fills)
|
|
969
911
|
- Scene blocks cannot have effects applied
|
|
970
912
|
- Check the block type with `block.getType()` and use `block.supportsEffects()` before attempting to apply effects
|
|
971
913
|
|
|
@@ -994,26 +936,18 @@ The example code accompanying this guide follows educational design patterns to
|
|
|
994
936
|
|
|
995
937
|
- **Individual demonstrations**: Each effect type is demonstrated on its own image block before showing combinations, making it easier to understand what each effect does
|
|
996
938
|
- **Convenience API usage**: The code uses `engine.block.addImage()` instead of manual block construction—this is the recommended approach for simplicity and maintainability
|
|
997
|
-
- **Spatial layout**: Image blocks are positioned in a grid layout (x/y coordinates) so you can
|
|
939
|
+
- **Spatial layout**: Image blocks are positioned in a grid layout (x/y coordinates) so you can see the results of each effect in the exported output
|
|
998
940
|
- **Progressive complexity**: The example starts with simple single effects and gradually builds to complex multi-effect combinations
|
|
999
941
|
|
|
1000
942
|
In your production code, you can apply multiple effects directly to the same block without creating separate demonstration blocks. The example structure is optimized for learning, not production usage.
|
|
1001
943
|
|
|
1002
|
-
## Next Steps
|
|
1003
|
-
|
|
1004
|
-
Now that you understand how to apply and manage filters and effects, explore specific effect types and advanced techniques:
|
|
1005
944
|
|
|
1006
|
-
- **LUT Filters** - Create custom color grading filters for cinematic looks
|
|
1007
|
-
- **Blur Effects** - Apply depth of field and motion blur techniques
|
|
1008
|
-
- **Duotone Effects** - Create striking two-color artistic treatments
|
|
1009
|
-
- **Adjustments** - Fine-tune brightness, contrast, and saturation
|
|
1010
|
-
- **Effect Combinations** - Build sophisticated multi-effect visual treatments
|
|
1011
945
|
|
|
1012
946
|
---
|
|
1013
947
|
|
|
1014
948
|
## More Resources
|
|
1015
949
|
|
|
1016
|
-
- **[
|
|
950
|
+
- **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
|
|
1017
951
|
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
1018
|
-
- **[Web Documentation](./
|
|
1019
|
-
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
952
|
+
- **[Web Documentation](./node.md)** - Interactive documentation with examples
|
|
953
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|