@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,54 +1,38 @@
|
|
|
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) > [Create Custom Filters](./filters-and-effects/create-custom-filters.md)
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Extend CE.SDK with your own LUT filters by creating and registering custom filter asset sources for
|
|
8
|
-
|
|
9
|
-

|
|
7
|
+
Extend CE.SDK with your own LUT filters by creating and registering custom filter asset sources for server-side image processing pipelines.
|
|
10
8
|
|
|
11
9
|
> **Reading time:** 10 minutes
|
|
12
10
|
>
|
|
13
11
|
> **Resources:**
|
|
14
12
|
>
|
|
15
13
|
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
16
|
-
>
|
|
17
|
-
> - [
|
|
18
|
-
>
|
|
14
|
+
>
|
|
15
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-filters-and-effects-add-server-js)
|
|
16
|
+
>
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-filters-and-effects-add-server-js)
|
|
19
18
|
|
|
20
|
-
CE.SDK provides built-in LUT filters, but many applications need brand-specific color grading or custom filter collections. Custom filter asset sources let you register your own LUT filters
|
|
19
|
+
CE.SDK provides built-in LUT filters, but many applications need brand-specific color grading or custom filter collections. Custom filter asset sources let you register your own LUT filters for automated batch processing and server-side image workflows. Once registered, custom filters can be queried and applied programmatically.
|
|
21
20
|
|
|
22
|
-
```typescript file=@cesdk_web_examples/guides-filters-and-effects-add-
|
|
23
|
-
import
|
|
24
|
-
AssetQueryData,
|
|
25
|
-
AssetResult,
|
|
21
|
+
```typescript file=@cesdk_web_examples/guides-filters-and-effects-add-server-js/server-js.ts reference-only
|
|
22
|
+
import CreativeEngine, {
|
|
26
23
|
AssetSource,
|
|
24
|
+
AssetQueryData,
|
|
27
25
|
AssetsQueryResult,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
} from '
|
|
31
|
-
import
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
ColorPaletteAssetSource,
|
|
36
|
-
CropPresetsAssetSource,
|
|
37
|
-
DemoAssetSources,
|
|
38
|
-
EffectsAssetSource,
|
|
39
|
-
FiltersAssetSource,
|
|
40
|
-
PagePresetsAssetSource,
|
|
41
|
-
StickerAssetSource,
|
|
42
|
-
TextAssetSource,
|
|
43
|
-
TextComponentAssetSource,
|
|
44
|
-
TypefaceAssetSource,
|
|
45
|
-
UploadAssetSources,
|
|
46
|
-
VectorShapeAssetSource
|
|
47
|
-
} from '@cesdk/cesdk-js/plugins';
|
|
48
|
-
import { DesignEditorConfig } from './design-editor/plugin';
|
|
26
|
+
AssetResult
|
|
27
|
+
} from '@cesdk/node';
|
|
28
|
+
import { config } from 'dotenv';
|
|
29
|
+
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
30
|
+
|
|
31
|
+
// Load environment variables
|
|
32
|
+
config();
|
|
49
33
|
|
|
50
34
|
/**
|
|
51
|
-
* CE.SDK
|
|
35
|
+
* CE.SDK Server Guide: Create Custom Filters
|
|
52
36
|
*
|
|
53
37
|
* Demonstrates creating and registering custom LUT filter asset sources:
|
|
54
38
|
* - Creating a filter source with addSource()
|
|
@@ -56,63 +40,28 @@ import { DesignEditorConfig } from './design-editor/plugin';
|
|
|
56
40
|
* - Loading filters from JSON configuration
|
|
57
41
|
* - Querying custom filters
|
|
58
42
|
* - Applying filters from custom sources
|
|
43
|
+
* - Exporting the result
|
|
59
44
|
*/
|
|
60
|
-
class Example implements EditorPlugin {
|
|
61
|
-
name = packageJson.name;
|
|
62
|
-
|
|
63
|
-
version = packageJson.version;
|
|
64
45
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
46
|
+
// Initialize CE.SDK engine in headless mode
|
|
47
|
+
const engine = await CreativeEngine.init({
|
|
48
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
|
|
49
|
+
// license: process.env.CESDK_LICENSE, // Optional (trial mode available)
|
|
50
|
+
});
|
|
69
51
|
|
|
70
|
-
|
|
52
|
+
try {
|
|
53
|
+
// Create a design scene with specific page dimensions
|
|
54
|
+
engine.scene.create('VerticalStack', {
|
|
55
|
+
page: { size: { width: 800, height: 600 } }
|
|
56
|
+
});
|
|
57
|
+
const page = engine.block.findByType('page')[0];
|
|
71
58
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
);
|
|
79
|
-
await cesdk.addPlugin(
|
|
80
|
-
new DemoAssetSources({
|
|
81
|
-
include: [
|
|
82
|
-
'ly.img.templates.blank.*',
|
|
83
|
-
'ly.img.templates.presentation.*',
|
|
84
|
-
'ly.img.templates.print.*',
|
|
85
|
-
'ly.img.templates.social.*',
|
|
86
|
-
'ly.img.image.*'
|
|
87
|
-
]
|
|
88
|
-
})
|
|
89
|
-
);
|
|
90
|
-
await cesdk.addPlugin(new EffectsAssetSource());
|
|
91
|
-
await cesdk.addPlugin(new FiltersAssetSource());
|
|
92
|
-
await cesdk.addPlugin(new PagePresetsAssetSource());
|
|
93
|
-
await cesdk.addPlugin(new StickerAssetSource());
|
|
94
|
-
await cesdk.addPlugin(new TextAssetSource());
|
|
95
|
-
await cesdk.addPlugin(new TextComponentAssetSource());
|
|
96
|
-
await cesdk.addPlugin(new TypefaceAssetSource());
|
|
97
|
-
await cesdk.addPlugin(new VectorShapeAssetSource());
|
|
98
|
-
|
|
99
|
-
await cesdk.actions.run('scene.create', {
|
|
100
|
-
page: { width: 800, height: 600, unit: 'Pixel' }
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
const engine = cesdk.engine;
|
|
104
|
-
const page = engine.block.findByType('page')[0];
|
|
105
|
-
|
|
106
|
-
// Enable filters in the inspector panel using the Feature API
|
|
107
|
-
cesdk.feature.enable('ly.img.filter');
|
|
108
|
-
|
|
109
|
-
// Add a custom filter to the built-in LUT filter source
|
|
110
|
-
// The ID must follow the format //ly.img.cesdk.filters.lut/{name}
|
|
111
|
-
// for the UI to display the label correctly
|
|
112
|
-
engine.asset.addAssetToSource('ly.img.filter', {
|
|
113
|
-
id: '//ly.img.cesdk.filters.lut/mycustomfilter',
|
|
114
|
-
label: { en: 'MY CUSTOM FILTER' },
|
|
115
|
-
tags: { en: ['custom', 'brand'] },
|
|
59
|
+
// Define custom LUT filter assets with metadata
|
|
60
|
+
const customFilters: AssetResult[] = [
|
|
61
|
+
{
|
|
62
|
+
id: 'vintage-warm',
|
|
63
|
+
label: 'Vintage Warm',
|
|
64
|
+
tags: ['vintage', 'warm', 'retro'],
|
|
116
65
|
meta: {
|
|
117
66
|
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
118
67
|
thumbUri:
|
|
@@ -121,279 +70,100 @@ class Example implements EditorPlugin {
|
|
|
121
70
|
verticalTileCount: '5',
|
|
122
71
|
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
123
72
|
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'cool-cinema',
|
|
76
|
+
label: 'Cool Cinema',
|
|
77
|
+
tags: ['cinema', 'cool', 'film'],
|
|
78
|
+
meta: {
|
|
79
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
80
|
+
thumbUri:
|
|
81
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
82
|
+
horizontalTileCount: '5',
|
|
83
|
+
verticalTileCount: '5',
|
|
84
|
+
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
130
85
|
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
id: 'vintage-warm',
|
|
144
|
-
label: 'Vintage Warm',
|
|
145
|
-
tags: ['vintage', 'warm', 'retro'],
|
|
146
|
-
meta: {
|
|
147
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
148
|
-
thumbUri:
|
|
149
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
150
|
-
horizontalTileCount: '5',
|
|
151
|
-
verticalTileCount: '5',
|
|
152
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
153
|
-
}
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
id: 'cool-cinema',
|
|
157
|
-
label: 'Cool Cinema',
|
|
158
|
-
tags: ['cinema', 'cool', 'film'],
|
|
159
|
-
meta: {
|
|
160
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
161
|
-
thumbUri:
|
|
162
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
163
|
-
horizontalTileCount: '5',
|
|
164
|
-
verticalTileCount: '5',
|
|
165
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
id: 'bw-classic',
|
|
170
|
-
label: 'B&W Classic',
|
|
171
|
-
tags: ['black and white', 'classic', 'monochrome'],
|
|
172
|
-
meta: {
|
|
173
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
174
|
-
thumbUri:
|
|
175
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
176
|
-
horizontalTileCount: '5',
|
|
177
|
-
verticalTileCount: '5',
|
|
178
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
];
|
|
182
|
-
|
|
183
|
-
// Filter by query if provided
|
|
184
|
-
let filteredAssets = filters;
|
|
185
|
-
if (queryData.query) {
|
|
186
|
-
const searchTerm = queryData.query.toLowerCase();
|
|
187
|
-
filteredAssets = filters.filter(
|
|
188
|
-
(asset) =>
|
|
189
|
-
asset.label?.toLowerCase().includes(searchTerm) ||
|
|
190
|
-
asset.tags?.some((tag) => tag.toLowerCase().includes(searchTerm))
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Filter by groups if provided
|
|
195
|
-
if (queryData.groups && queryData.groups.length > 0) {
|
|
196
|
-
filteredAssets = filteredAssets.filter((asset) =>
|
|
197
|
-
asset.tags?.some((tag) => queryData.groups?.includes(tag))
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Handle pagination
|
|
202
|
-
const page = queryData.page ?? 0;
|
|
203
|
-
const perPage = queryData.perPage ?? 10;
|
|
204
|
-
const startIndex = page * perPage;
|
|
205
|
-
const paginatedAssets = filteredAssets.slice(
|
|
206
|
-
startIndex,
|
|
207
|
-
startIndex + perPage
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
return {
|
|
211
|
-
assets: paginatedAssets,
|
|
212
|
-
total: filteredAssets.length,
|
|
213
|
-
currentPage: page,
|
|
214
|
-
nextPage:
|
|
215
|
-
startIndex + perPage < filteredAssets.length ? page + 1 : undefined
|
|
216
|
-
};
|
|
217
|
-
},
|
|
218
|
-
|
|
219
|
-
// Return available filter categories
|
|
220
|
-
async getGroups(): Promise<string[]> {
|
|
221
|
-
return ['vintage', 'cinema', 'black and white'];
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'bw-classic',
|
|
89
|
+
label: 'B&W Classic',
|
|
90
|
+
tags: ['black and white', 'classic', 'monochrome'],
|
|
91
|
+
meta: {
|
|
92
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
93
|
+
thumbUri:
|
|
94
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
95
|
+
horizontalTileCount: '5',
|
|
96
|
+
verticalTileCount: '5',
|
|
97
|
+
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
222
98
|
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
horizontalTileCount: '5',
|
|
243
|
-
verticalTileCount: '5',
|
|
244
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
245
|
-
}
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
id: 'ocean-breeze',
|
|
249
|
-
label: { en: 'Ocean Breeze' },
|
|
250
|
-
tags: { en: ['cool', 'blue', 'ocean'] },
|
|
251
|
-
groups: ['Cool Tones'],
|
|
252
|
-
meta: {
|
|
253
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
254
|
-
thumbUri:
|
|
255
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
256
|
-
horizontalTileCount: '5',
|
|
257
|
-
verticalTileCount: '5',
|
|
258
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
]
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
// Create asset source from JSON string
|
|
265
|
-
const jsonSourceId =
|
|
266
|
-
await engine.asset.addLocalAssetSourceFromJSONString(filterConfigJSON);
|
|
267
|
-
// eslint-disable-next-line no-console
|
|
268
|
-
console.log('Created JSON-based filter source:', jsonSourceId);
|
|
269
|
-
|
|
270
|
-
// Query filters from our custom source for programmatic use
|
|
271
|
-
const customFilterResults = await engine.asset.findAssets(
|
|
272
|
-
'my-custom-filters',
|
|
273
|
-
{
|
|
274
|
-
page: 0,
|
|
275
|
-
perPage: 10
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
// Create a custom filter asset source
|
|
103
|
+
const customFilterSource: AssetSource = {
|
|
104
|
+
id: 'my-custom-filters',
|
|
105
|
+
|
|
106
|
+
async findAssets(
|
|
107
|
+
queryData: AssetQueryData
|
|
108
|
+
): Promise<AssetsQueryResult | undefined> {
|
|
109
|
+
// Filter by query if provided
|
|
110
|
+
let filteredAssets = customFilters;
|
|
111
|
+
if (queryData.query) {
|
|
112
|
+
const searchTerm = queryData.query.toLowerCase();
|
|
113
|
+
filteredAssets = customFilters.filter(
|
|
114
|
+
(asset) =>
|
|
115
|
+
asset.label?.toLowerCase().includes(searchTerm) ||
|
|
116
|
+
asset.tags?.some((tag) => tag.toLowerCase().includes(searchTerm))
|
|
117
|
+
);
|
|
276
118
|
}
|
|
277
|
-
);
|
|
278
|
-
|
|
279
|
-
// Create an image block to demonstrate applying a custom filter
|
|
280
|
-
const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
|
|
281
|
-
const imageBlock = await engine.block.addImage(imageUri, {
|
|
282
|
-
x: 50,
|
|
283
|
-
y: 150,
|
|
284
|
-
size: { width: 300, height: 200 }
|
|
285
|
-
});
|
|
286
|
-
engine.block.appendChild(page, imageBlock);
|
|
287
|
-
|
|
288
|
-
// Get a filter from our custom source
|
|
289
|
-
const filterAsset = customFilterResults.assets[0];
|
|
290
|
-
if (filterAsset && filterAsset.meta) {
|
|
291
|
-
// Create and configure the LUT filter effect
|
|
292
|
-
const lutEffect = engine.block.createEffect(
|
|
293
|
-
'//ly.img.ubq/effect/lut_filter'
|
|
294
|
-
);
|
|
295
119
|
|
|
296
|
-
//
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
120
|
+
// Filter by groups if provided
|
|
121
|
+
if (queryData.groups && queryData.groups.length > 0) {
|
|
122
|
+
filteredAssets = filteredAssets.filter((asset) =>
|
|
123
|
+
asset.tags?.some((tag) => queryData.groups?.includes(tag))
|
|
124
|
+
);
|
|
125
|
+
}
|
|
302
126
|
|
|
303
|
-
//
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
lutEffect,
|
|
311
|
-
'effect/lut_filter/verticalTileCount',
|
|
312
|
-
parseInt(filterAsset.meta.verticalTileCount as string, 10)
|
|
127
|
+
// Handle pagination
|
|
128
|
+
const currentPage = queryData.page ?? 0;
|
|
129
|
+
const perPage = queryData.perPage ?? 10;
|
|
130
|
+
const startIndex = currentPage * perPage;
|
|
131
|
+
const paginatedAssets = filteredAssets.slice(
|
|
132
|
+
startIndex,
|
|
133
|
+
startIndex + perPage
|
|
313
134
|
);
|
|
314
135
|
|
|
315
|
-
|
|
316
|
-
|
|
136
|
+
return {
|
|
137
|
+
assets: paginatedAssets,
|
|
138
|
+
total: filteredAssets.length,
|
|
139
|
+
currentPage,
|
|
140
|
+
nextPage:
|
|
141
|
+
startIndex + perPage < filteredAssets.length
|
|
142
|
+
? currentPage + 1
|
|
143
|
+
: undefined
|
|
144
|
+
};
|
|
145
|
+
},
|
|
317
146
|
|
|
318
|
-
|
|
319
|
-
|
|
147
|
+
// Return available filter categories
|
|
148
|
+
async getGroups(): Promise<string[]> {
|
|
149
|
+
return ['vintage', 'cinema', 'black and white'];
|
|
320
150
|
}
|
|
151
|
+
};
|
|
321
152
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
y: 150,
|
|
326
|
-
size: { width: 300, height: 200 }
|
|
327
|
-
});
|
|
328
|
-
engine.block.appendChild(page, imageBlock2);
|
|
329
|
-
|
|
330
|
-
// Select the filtered image to show the filter in the inspector
|
|
331
|
-
engine.block.select(imageBlock);
|
|
332
|
-
|
|
333
|
-
// eslint-disable-next-line no-console
|
|
334
|
-
console.log(
|
|
335
|
-
'Custom filters guide initialized. Select an image to see filters in the inspector panel.'
|
|
336
|
-
);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
153
|
+
// Register the custom filter source
|
|
154
|
+
engine.asset.addSource(customFilterSource);
|
|
155
|
+
console.log('Registered custom filter source: my-custom-filters');
|
|
339
156
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
## Filter Asset Metadata
|
|
346
|
-
|
|
347
|
-
LUT filters need these properties in the `meta` object:
|
|
348
|
-
|
|
349
|
-
- **`uri`** - URL to the LUT image file (PNG format)
|
|
350
|
-
- **`thumbUri`** - URL to the thumbnail preview image
|
|
351
|
-
- **`horizontalTileCount`** - Number of horizontal tiles in the LUT grid (typically 5 or 8)
|
|
352
|
-
- **`verticalTileCount`** - Number of vertical tiles in the LUT grid (typically 5 or 8)
|
|
353
|
-
- **`blockType`** - Must be `//ly.img.ubq/effect/lut_filter` for LUT filters
|
|
354
|
-
|
|
355
|
-
## Adding a Custom Filter
|
|
356
|
-
|
|
357
|
-
We register a custom filter source using `engine.asset.addSource()` with a `findAssets` callback. This callback returns filter assets matching the query parameters. After registering the source, we use `cesdk.ui.updateAssetLibraryEntry()` to add our custom source to the filter inspector panel.
|
|
358
|
-
|
|
359
|
-
```typescript highlight-create-custom-source
|
|
360
|
-
// Add a custom filter to the built-in LUT filter source
|
|
361
|
-
// The ID must follow the format //ly.img.cesdk.filters.lut/{name}
|
|
362
|
-
// for the UI to display the label correctly
|
|
363
|
-
engine.asset.addAssetToSource('ly.img.filter', {
|
|
364
|
-
id: '//ly.img.cesdk.filters.lut/mycustomfilter',
|
|
365
|
-
label: { en: 'MY CUSTOM FILTER' },
|
|
366
|
-
tags: { en: ['custom', 'brand'] },
|
|
367
|
-
meta: {
|
|
368
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
369
|
-
thumbUri:
|
|
370
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
371
|
-
horizontalTileCount: '5',
|
|
372
|
-
verticalTileCount: '5',
|
|
373
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
374
|
-
}
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
// Add translation for the custom filter label
|
|
378
|
-
cesdk.i18n.setTranslations({
|
|
379
|
-
en: {
|
|
380
|
-
'property.lutFilter.mycustomfilter': 'MY CUSTOM FILTER'
|
|
381
|
-
}
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
// Create a custom filter asset source for organizing multiple filters
|
|
385
|
-
const customFilterSource: AssetSource = {
|
|
386
|
-
id: 'my-custom-filters',
|
|
387
|
-
|
|
388
|
-
async findAssets(
|
|
389
|
-
queryData: AssetQueryData
|
|
390
|
-
): Promise<AssetsQueryResult | undefined> {
|
|
391
|
-
// Define custom LUT filter assets
|
|
392
|
-
const filters: AssetResult[] = [
|
|
157
|
+
// Load filters from a JSON configuration string
|
|
158
|
+
const filterConfigJSON = JSON.stringify({
|
|
159
|
+
version: '2.0.0',
|
|
160
|
+
id: 'my-json-filters',
|
|
161
|
+
assets: [
|
|
393
162
|
{
|
|
394
|
-
id: '
|
|
395
|
-
label: '
|
|
396
|
-
tags: ['
|
|
163
|
+
id: 'sunset-glow',
|
|
164
|
+
label: { en: 'Sunset Glow' },
|
|
165
|
+
tags: { en: ['warm', 'sunset', 'golden'] },
|
|
166
|
+
groups: ['Warm Tones'],
|
|
397
167
|
meta: {
|
|
398
168
|
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
399
169
|
thumbUri:
|
|
@@ -404,109 +174,168 @@ const customFilterSource: AssetSource = {
|
|
|
404
174
|
}
|
|
405
175
|
},
|
|
406
176
|
{
|
|
407
|
-
id: '
|
|
408
|
-
label: '
|
|
409
|
-
tags: ['
|
|
177
|
+
id: 'ocean-breeze',
|
|
178
|
+
label: { en: 'Ocean Breeze' },
|
|
179
|
+
tags: { en: ['cool', 'blue', 'ocean'] },
|
|
180
|
+
groups: ['Cool Tones'],
|
|
410
181
|
meta: {
|
|
411
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/
|
|
182
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
412
183
|
thumbUri:
|
|
413
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/
|
|
414
|
-
horizontalTileCount: '5',
|
|
415
|
-
verticalTileCount: '5',
|
|
416
|
-
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
417
|
-
}
|
|
418
|
-
},
|
|
419
|
-
{
|
|
420
|
-
id: 'bw-classic',
|
|
421
|
-
label: 'B&W Classic',
|
|
422
|
-
tags: ['black and white', 'classic', 'monochrome'],
|
|
423
|
-
meta: {
|
|
424
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
425
|
-
thumbUri:
|
|
426
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
184
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
427
185
|
horizontalTileCount: '5',
|
|
428
186
|
verticalTileCount: '5',
|
|
429
187
|
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
430
188
|
}
|
|
431
189
|
}
|
|
432
|
-
]
|
|
433
|
-
|
|
434
|
-
// Filter by query if provided
|
|
435
|
-
let filteredAssets = filters;
|
|
436
|
-
if (queryData.query) {
|
|
437
|
-
const searchTerm = queryData.query.toLowerCase();
|
|
438
|
-
filteredAssets = filters.filter(
|
|
439
|
-
(asset) =>
|
|
440
|
-
asset.label?.toLowerCase().includes(searchTerm) ||
|
|
441
|
-
asset.tags?.some((tag) => tag.toLowerCase().includes(searchTerm))
|
|
442
|
-
);
|
|
443
|
-
}
|
|
190
|
+
]
|
|
191
|
+
});
|
|
444
192
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
193
|
+
// Create asset source from JSON string
|
|
194
|
+
const jsonSourceId =
|
|
195
|
+
await engine.asset.addLocalAssetSourceFromJSONString(filterConfigJSON);
|
|
196
|
+
console.log('Created JSON-based filter source:', jsonSourceId);
|
|
197
|
+
|
|
198
|
+
// Query filters from the custom source
|
|
199
|
+
const customFilterResults = await engine.asset.findAssets(
|
|
200
|
+
'my-custom-filters',
|
|
201
|
+
{
|
|
202
|
+
page: 0,
|
|
203
|
+
perPage: 10
|
|
450
204
|
}
|
|
205
|
+
);
|
|
206
|
+
console.log('Found', customFilterResults.total, 'filters in custom source');
|
|
207
|
+
|
|
208
|
+
// Query filters from the JSON source
|
|
209
|
+
const jsonFilterResults = await engine.asset.findAssets('my-json-filters', {
|
|
210
|
+
page: 0,
|
|
211
|
+
perPage: 10
|
|
212
|
+
});
|
|
213
|
+
console.log('Found', jsonFilterResults.total, 'filters in JSON source');
|
|
214
|
+
|
|
215
|
+
// List all registered asset sources
|
|
216
|
+
const allSources = engine.asset.findAllSources();
|
|
217
|
+
console.log('Registered sources:', allSources);
|
|
218
|
+
|
|
219
|
+
// Create an image block
|
|
220
|
+
const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
|
|
221
|
+
const imageBlock = await engine.block.addImage(imageUri, {
|
|
222
|
+
x: 50,
|
|
223
|
+
y: 50,
|
|
224
|
+
size: { width: 300, height: 225 }
|
|
225
|
+
});
|
|
226
|
+
engine.block.appendChild(page, imageBlock);
|
|
227
|
+
|
|
228
|
+
// Get the first filter from our custom source
|
|
229
|
+
const filterAsset = customFilterResults.assets[0];
|
|
230
|
+
if (filterAsset && filterAsset.meta) {
|
|
231
|
+
// Create and configure the LUT filter effect
|
|
232
|
+
const lutEffect = engine.block.createEffect(
|
|
233
|
+
'//ly.img.ubq/effect/lut_filter'
|
|
234
|
+
);
|
|
451
235
|
|
|
452
|
-
//
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
startIndex,
|
|
458
|
-
startIndex + perPage
|
|
236
|
+
// Set LUT file URI from asset metadata
|
|
237
|
+
engine.block.setString(
|
|
238
|
+
lutEffect,
|
|
239
|
+
'effect/lut_filter/lutFileURI',
|
|
240
|
+
filterAsset.meta.uri as string
|
|
459
241
|
);
|
|
460
242
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
243
|
+
// Configure LUT grid dimensions
|
|
244
|
+
engine.block.setInt(
|
|
245
|
+
lutEffect,
|
|
246
|
+
'effect/lut_filter/horizontalTileCount',
|
|
247
|
+
parseInt(filterAsset.meta.horizontalTileCount as string, 10)
|
|
248
|
+
);
|
|
249
|
+
engine.block.setInt(
|
|
250
|
+
lutEffect,
|
|
251
|
+
'effect/lut_filter/verticalTileCount',
|
|
252
|
+
parseInt(filterAsset.meta.verticalTileCount as string, 10)
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
// Set filter intensity (0.0 to 1.0)
|
|
256
|
+
engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
|
|
257
|
+
|
|
258
|
+
// Apply the effect to the image block
|
|
259
|
+
engine.block.appendEffect(imageBlock, lutEffect);
|
|
260
|
+
console.log('Applied filter:', filterAsset.label);
|
|
473
261
|
}
|
|
474
|
-
};
|
|
475
262
|
|
|
476
|
-
//
|
|
477
|
-
engine.
|
|
478
|
-
|
|
263
|
+
// Create a second image block with a filter from JSON source
|
|
264
|
+
const imageBlock2 = await engine.block.addImage(imageUri, {
|
|
265
|
+
x: 450,
|
|
266
|
+
y: 50,
|
|
267
|
+
size: { width: 300, height: 225 }
|
|
268
|
+
});
|
|
269
|
+
engine.block.appendChild(page, imageBlock2);
|
|
270
|
+
|
|
271
|
+
// Get a filter from the JSON source
|
|
272
|
+
const jsonFilterAsset = jsonFilterResults.assets[0];
|
|
273
|
+
if (jsonFilterAsset && jsonFilterAsset.meta) {
|
|
274
|
+
const lutEffect2 = engine.block.createEffect(
|
|
275
|
+
'//ly.img.ubq/effect/lut_filter'
|
|
276
|
+
);
|
|
479
277
|
|
|
480
|
-
|
|
278
|
+
engine.block.setString(
|
|
279
|
+
lutEffect2,
|
|
280
|
+
'effect/lut_filter/lutFileURI',
|
|
281
|
+
jsonFilterAsset.meta.uri as string
|
|
282
|
+
);
|
|
283
|
+
engine.block.setInt(
|
|
284
|
+
lutEffect2,
|
|
285
|
+
'effect/lut_filter/horizontalTileCount',
|
|
286
|
+
parseInt(jsonFilterAsset.meta.horizontalTileCount as string, 10)
|
|
287
|
+
);
|
|
288
|
+
engine.block.setInt(
|
|
289
|
+
lutEffect2,
|
|
290
|
+
'effect/lut_filter/verticalTileCount',
|
|
291
|
+
parseInt(jsonFilterAsset.meta.verticalTileCount as string, 10)
|
|
292
|
+
);
|
|
293
|
+
engine.block.setFloat(lutEffect2, 'effect/lut_filter/intensity', 0.85);
|
|
481
294
|
|
|
482
|
-
|
|
295
|
+
engine.block.appendEffect(imageBlock2, lutEffect2);
|
|
296
|
+
console.log('Applied JSON filter:', jsonFilterAsset.label);
|
|
297
|
+
}
|
|
483
298
|
|
|
484
|
-
|
|
299
|
+
// Export the scene to PNG
|
|
300
|
+
const blob = await engine.block.export(page, { mimeType: 'image/png' });
|
|
301
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
485
302
|
|
|
486
|
-
|
|
303
|
+
// Ensure output directory exists
|
|
304
|
+
if (!existsSync('output')) {
|
|
305
|
+
mkdirSync('output');
|
|
306
|
+
}
|
|
487
307
|
|
|
488
|
-
|
|
489
|
-
-
|
|
490
|
-
|
|
491
|
-
|
|
308
|
+
// Save to file
|
|
309
|
+
writeFileSync('output/custom-filters.png', buffer);
|
|
310
|
+
console.log('Exported to output/custom-filters.png');
|
|
311
|
+
} finally {
|
|
312
|
+
engine.dispose();
|
|
313
|
+
}
|
|
314
|
+
```
|
|
492
315
|
|
|
493
|
-
|
|
316
|
+
This guide covers how to create filter asset sources, define filter metadata, load filters from JSON configuration, query custom sources, and apply filters to images.
|
|
494
317
|
|
|
495
|
-
##
|
|
318
|
+
## Filter Asset Metadata
|
|
496
319
|
|
|
497
|
-
|
|
320
|
+
LUT filters need these properties in the `meta` object:
|
|
498
321
|
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
322
|
+
- **`uri`** - URL to the LUT image file (PNG format)
|
|
323
|
+
- **`thumbUri`** - URL to the thumbnail preview image
|
|
324
|
+
- **`horizontalTileCount`** - Number of horizontal tiles in the LUT grid (typically 5 or 8)
|
|
325
|
+
- **`verticalTileCount`** - Number of vertical tiles in the LUT grid (typically 5 or 8)
|
|
326
|
+
- **`blockType`** - Must be `//ly.img.ubq/effect/lut_filter` for LUT filters
|
|
327
|
+
|
|
328
|
+
## Adding a Custom Filter
|
|
329
|
+
|
|
330
|
+
We register a custom filter source using `engine.asset.addSource()` with a `findAssets` callback. This callback returns filter assets matching the query parameters including pagination, search terms, and category filters.
|
|
331
|
+
|
|
332
|
+
```typescript highlight-create-custom-source
|
|
333
|
+
// Define custom LUT filter assets with metadata
|
|
334
|
+
const customFilters: AssetResult[] = [
|
|
505
335
|
{
|
|
506
|
-
id: '
|
|
507
|
-
label:
|
|
508
|
-
tags:
|
|
509
|
-
groups: ['Warm Tones'],
|
|
336
|
+
id: 'vintage-warm',
|
|
337
|
+
label: 'Vintage Warm',
|
|
338
|
+
tags: ['vintage', 'warm', 'retro'],
|
|
510
339
|
meta: {
|
|
511
340
|
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
512
341
|
thumbUri:
|
|
@@ -517,27 +346,147 @@ const filterConfigJSON = JSON.stringify({
|
|
|
517
346
|
}
|
|
518
347
|
},
|
|
519
348
|
{
|
|
520
|
-
id: '
|
|
521
|
-
label:
|
|
522
|
-
tags:
|
|
523
|
-
groups: ['Cool Tones'],
|
|
349
|
+
id: 'cool-cinema',
|
|
350
|
+
label: 'Cool Cinema',
|
|
351
|
+
tags: ['cinema', 'cool', 'film'],
|
|
524
352
|
meta: {
|
|
525
|
-
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/
|
|
353
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
526
354
|
thumbUri:
|
|
527
|
-
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/
|
|
355
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
356
|
+
horizontalTileCount: '5',
|
|
357
|
+
verticalTileCount: '5',
|
|
358
|
+
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
id: 'bw-classic',
|
|
363
|
+
label: 'B&W Classic',
|
|
364
|
+
tags: ['black and white', 'classic', 'monochrome'],
|
|
365
|
+
meta: {
|
|
366
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
367
|
+
thumbUri:
|
|
368
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
528
369
|
horizontalTileCount: '5',
|
|
529
370
|
verticalTileCount: '5',
|
|
530
371
|
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
531
372
|
}
|
|
532
373
|
}
|
|
533
|
-
]
|
|
534
|
-
|
|
374
|
+
];
|
|
375
|
+
|
|
376
|
+
// Create a custom filter asset source
|
|
377
|
+
const customFilterSource: AssetSource = {
|
|
378
|
+
id: 'my-custom-filters',
|
|
379
|
+
|
|
380
|
+
async findAssets(
|
|
381
|
+
queryData: AssetQueryData
|
|
382
|
+
): Promise<AssetsQueryResult | undefined> {
|
|
383
|
+
// Filter by query if provided
|
|
384
|
+
let filteredAssets = customFilters;
|
|
385
|
+
if (queryData.query) {
|
|
386
|
+
const searchTerm = queryData.query.toLowerCase();
|
|
387
|
+
filteredAssets = customFilters.filter(
|
|
388
|
+
(asset) =>
|
|
389
|
+
asset.label?.toLowerCase().includes(searchTerm) ||
|
|
390
|
+
asset.tags?.some((tag) => tag.toLowerCase().includes(searchTerm))
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Filter by groups if provided
|
|
395
|
+
if (queryData.groups && queryData.groups.length > 0) {
|
|
396
|
+
filteredAssets = filteredAssets.filter((asset) =>
|
|
397
|
+
asset.tags?.some((tag) => queryData.groups?.includes(tag))
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// Handle pagination
|
|
402
|
+
const currentPage = queryData.page ?? 0;
|
|
403
|
+
const perPage = queryData.perPage ?? 10;
|
|
404
|
+
const startIndex = currentPage * perPage;
|
|
405
|
+
const paginatedAssets = filteredAssets.slice(
|
|
406
|
+
startIndex,
|
|
407
|
+
startIndex + perPage
|
|
408
|
+
);
|
|
409
|
+
|
|
410
|
+
return {
|
|
411
|
+
assets: paginatedAssets,
|
|
412
|
+
total: filteredAssets.length,
|
|
413
|
+
currentPage,
|
|
414
|
+
nextPage:
|
|
415
|
+
startIndex + perPage < filteredAssets.length
|
|
416
|
+
? currentPage + 1
|
|
417
|
+
: undefined
|
|
418
|
+
};
|
|
419
|
+
},
|
|
420
|
+
|
|
421
|
+
// Return available filter categories
|
|
422
|
+
async getGroups(): Promise<string[]> {
|
|
423
|
+
return ['vintage', 'cinema', 'black and white'];
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
// Register the custom filter source
|
|
428
|
+
engine.asset.addSource(customFilterSource);
|
|
429
|
+
console.log('Registered custom filter source: my-custom-filters');
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
The `findAssets` callback receives query parameters including pagination (`page`, `perPage`), search terms (`query`), and category filters (`groups`). We filter and paginate the results accordingly.
|
|
433
|
+
|
|
434
|
+
### Filter Asset Structure
|
|
435
|
+
|
|
436
|
+
Each filter asset returned by `findAssets` needs:
|
|
437
|
+
|
|
438
|
+
- **`id`** - Unique identifier for the filter
|
|
439
|
+
- **`label`** - Display name for the filter
|
|
440
|
+
- **`tags`** - Keywords for search filtering
|
|
441
|
+
- **`meta`** - Object containing LUT configuration (uri, thumbUri, tile counts, blockType)
|
|
442
|
+
|
|
443
|
+
The optional `getGroups()` method returns available filter categories for organizing filters.
|
|
444
|
+
|
|
445
|
+
## Loading Filters from JSON Configuration
|
|
446
|
+
|
|
447
|
+
For larger filter collections, we load definitions from JSON using `engine.asset.addLocalAssetSourceFromJSONString()`. This approach simplifies management of filter libraries.
|
|
448
|
+
|
|
449
|
+
```typescript highlight-load-from-json-string
|
|
450
|
+
// Load filters from a JSON configuration string
|
|
451
|
+
const filterConfigJSON = JSON.stringify({
|
|
452
|
+
version: '2.0.0',
|
|
453
|
+
id: 'my-json-filters',
|
|
454
|
+
assets: [
|
|
455
|
+
{
|
|
456
|
+
id: 'sunset-glow',
|
|
457
|
+
label: { en: 'Sunset Glow' },
|
|
458
|
+
tags: { en: ['warm', 'sunset', 'golden'] },
|
|
459
|
+
groups: ['Warm Tones'],
|
|
460
|
+
meta: {
|
|
461
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
462
|
+
thumbUri:
|
|
463
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_ad1920_5_5_128.png',
|
|
464
|
+
horizontalTileCount: '5',
|
|
465
|
+
verticalTileCount: '5',
|
|
466
|
+
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
id: 'ocean-breeze',
|
|
471
|
+
label: { en: 'Ocean Breeze' },
|
|
472
|
+
tags: { en: ['cool', 'blue', 'ocean'] },
|
|
473
|
+
groups: ['Cool Tones'],
|
|
474
|
+
meta: {
|
|
475
|
+
uri: 'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
476
|
+
thumbUri:
|
|
477
|
+
'https://cdn.img.ly/assets/v4/ly.img.filter.lut/LUTs/imgly_lut_bw_5_5_128.png',
|
|
478
|
+
horizontalTileCount: '5',
|
|
479
|
+
verticalTileCount: '5',
|
|
480
|
+
blockType: '//ly.img.ubq/effect/lut_filter'
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
});
|
|
535
485
|
|
|
536
|
-
// Create asset source from JSON string
|
|
537
|
-
const jsonSourceId =
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
console.log('Created JSON-based filter source:', jsonSourceId);
|
|
486
|
+
// Create asset source from JSON string
|
|
487
|
+
const jsonSourceId =
|
|
488
|
+
await engine.asset.addLocalAssetSourceFromJSONString(filterConfigJSON);
|
|
489
|
+
console.log('Created JSON-based filter source:', jsonSourceId);
|
|
541
490
|
```
|
|
542
491
|
|
|
543
492
|
### JSON Structure for Filter Assets
|
|
@@ -553,48 +502,179 @@ Each asset in the array contains:
|
|
|
553
502
|
- **`id`** - Unique filter identifier
|
|
554
503
|
- **`label`** - Localized label object (e.g., `{ "en": "Filter Name" }`)
|
|
555
504
|
- **`tags`** - Localized tags for search
|
|
556
|
-
- **`groups`** - Category assignments for
|
|
505
|
+
- **`groups`** - Category assignments for organization
|
|
557
506
|
- **`meta`** - LUT configuration properties
|
|
558
507
|
|
|
559
508
|
For filters hosted on a CDN, use `engine.asset.addLocalAssetSourceFromJSONURI()` instead, which resolves relative URLs against the JSON file's parent directory.
|
|
560
509
|
|
|
510
|
+
## Querying and Applying Filters
|
|
511
|
+
|
|
512
|
+
We query filters from registered sources using `engine.asset.findAssets()`, then create and configure LUT filter effects from the returned metadata.
|
|
513
|
+
|
|
514
|
+
```typescript highlight-query-custom-filters
|
|
515
|
+
// Query filters from the custom source
|
|
516
|
+
const customFilterResults = await engine.asset.findAssets(
|
|
517
|
+
'my-custom-filters',
|
|
518
|
+
{
|
|
519
|
+
page: 0,
|
|
520
|
+
perPage: 10
|
|
521
|
+
}
|
|
522
|
+
);
|
|
523
|
+
console.log('Found', customFilterResults.total, 'filters in custom source');
|
|
524
|
+
|
|
525
|
+
// Query filters from the JSON source
|
|
526
|
+
const jsonFilterResults = await engine.asset.findAssets('my-json-filters', {
|
|
527
|
+
page: 0,
|
|
528
|
+
perPage: 10
|
|
529
|
+
});
|
|
530
|
+
console.log('Found', jsonFilterResults.total, 'filters in JSON source');
|
|
531
|
+
|
|
532
|
+
// List all registered asset sources
|
|
533
|
+
const allSources = engine.asset.findAllSources();
|
|
534
|
+
console.log('Registered sources:', allSources);
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
We create a `lut_filter` effect using `engine.block.createEffect()` and configure it with metadata from the queried filter asset. The effect is then attached to an image block.
|
|
538
|
+
|
|
539
|
+
```typescript highlight-apply-custom-filter
|
|
540
|
+
// Create an image block
|
|
541
|
+
const imageUri = 'https://img.ly/static/ubq_samples/sample_1.jpg';
|
|
542
|
+
const imageBlock = await engine.block.addImage(imageUri, {
|
|
543
|
+
x: 50,
|
|
544
|
+
y: 50,
|
|
545
|
+
size: { width: 300, height: 225 }
|
|
546
|
+
});
|
|
547
|
+
engine.block.appendChild(page, imageBlock);
|
|
548
|
+
|
|
549
|
+
// Get the first filter from our custom source
|
|
550
|
+
const filterAsset = customFilterResults.assets[0];
|
|
551
|
+
if (filterAsset && filterAsset.meta) {
|
|
552
|
+
// Create and configure the LUT filter effect
|
|
553
|
+
const lutEffect = engine.block.createEffect(
|
|
554
|
+
'//ly.img.ubq/effect/lut_filter'
|
|
555
|
+
);
|
|
556
|
+
|
|
557
|
+
// Set LUT file URI from asset metadata
|
|
558
|
+
engine.block.setString(
|
|
559
|
+
lutEffect,
|
|
560
|
+
'effect/lut_filter/lutFileURI',
|
|
561
|
+
filterAsset.meta.uri as string
|
|
562
|
+
);
|
|
563
|
+
|
|
564
|
+
// Configure LUT grid dimensions
|
|
565
|
+
engine.block.setInt(
|
|
566
|
+
lutEffect,
|
|
567
|
+
'effect/lut_filter/horizontalTileCount',
|
|
568
|
+
parseInt(filterAsset.meta.horizontalTileCount as string, 10)
|
|
569
|
+
);
|
|
570
|
+
engine.block.setInt(
|
|
571
|
+
lutEffect,
|
|
572
|
+
'effect/lut_filter/verticalTileCount',
|
|
573
|
+
parseInt(filterAsset.meta.verticalTileCount as string, 10)
|
|
574
|
+
);
|
|
575
|
+
|
|
576
|
+
// Set filter intensity (0.0 to 1.0)
|
|
577
|
+
engine.block.setFloat(lutEffect, 'effect/lut_filter/intensity', 0.85);
|
|
578
|
+
|
|
579
|
+
// Apply the effect to the image block
|
|
580
|
+
engine.block.appendEffect(imageBlock, lutEffect);
|
|
581
|
+
console.log('Applied filter:', filterAsset.label);
|
|
582
|
+
}
|
|
583
|
+
```
|
|
584
|
+
|
|
585
|
+
We can apply filters from any registered source, including JSON-based sources.
|
|
586
|
+
|
|
587
|
+
```typescript highlight-apply-json-filter
|
|
588
|
+
// Create a second image block with a filter from JSON source
|
|
589
|
+
const imageBlock2 = await engine.block.addImage(imageUri, {
|
|
590
|
+
x: 450,
|
|
591
|
+
y: 50,
|
|
592
|
+
size: { width: 300, height: 225 }
|
|
593
|
+
});
|
|
594
|
+
engine.block.appendChild(page, imageBlock2);
|
|
595
|
+
|
|
596
|
+
// Get a filter from the JSON source
|
|
597
|
+
const jsonFilterAsset = jsonFilterResults.assets[0];
|
|
598
|
+
if (jsonFilterAsset && jsonFilterAsset.meta) {
|
|
599
|
+
const lutEffect2 = engine.block.createEffect(
|
|
600
|
+
'//ly.img.ubq/effect/lut_filter'
|
|
601
|
+
);
|
|
602
|
+
|
|
603
|
+
engine.block.setString(
|
|
604
|
+
lutEffect2,
|
|
605
|
+
'effect/lut_filter/lutFileURI',
|
|
606
|
+
jsonFilterAsset.meta.uri as string
|
|
607
|
+
);
|
|
608
|
+
engine.block.setInt(
|
|
609
|
+
lutEffect2,
|
|
610
|
+
'effect/lut_filter/horizontalTileCount',
|
|
611
|
+
parseInt(jsonFilterAsset.meta.horizontalTileCount as string, 10)
|
|
612
|
+
);
|
|
613
|
+
engine.block.setInt(
|
|
614
|
+
lutEffect2,
|
|
615
|
+
'effect/lut_filter/verticalTileCount',
|
|
616
|
+
parseInt(jsonFilterAsset.meta.verticalTileCount as string, 10)
|
|
617
|
+
);
|
|
618
|
+
engine.block.setFloat(lutEffect2, 'effect/lut_filter/intensity', 0.85);
|
|
619
|
+
|
|
620
|
+
engine.block.appendEffect(imageBlock2, lutEffect2);
|
|
621
|
+
console.log('Applied JSON filter:', jsonFilterAsset.label);
|
|
622
|
+
}
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
After applying filters, we export the scene to PNG.
|
|
626
|
+
|
|
627
|
+
```typescript highlight-export
|
|
628
|
+
// Export the scene to PNG
|
|
629
|
+
const blob = await engine.block.export(page, { mimeType: 'image/png' });
|
|
630
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
631
|
+
|
|
632
|
+
// Ensure output directory exists
|
|
633
|
+
if (!existsSync('output')) {
|
|
634
|
+
mkdirSync('output');
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
// Save to file
|
|
638
|
+
writeFileSync('output/custom-filters.png', buffer);
|
|
639
|
+
console.log('Exported to output/custom-filters.png');
|
|
640
|
+
```
|
|
641
|
+
|
|
561
642
|
## Troubleshooting
|
|
562
643
|
|
|
563
|
-
### Filters Not
|
|
644
|
+
### Filters Not Found in Query
|
|
564
645
|
|
|
565
|
-
- Verify the asset source is registered
|
|
646
|
+
- Verify the asset source is registered with `engine.asset.addSource()` or `addLocalAssetSourceFromJSONString()`
|
|
566
647
|
- Check that filter metadata includes all required fields (`uri`, `thumbUri`, tile counts)
|
|
567
648
|
- Ensure the `blockType` is set to `//ly.img.ubq/effect/lut_filter`
|
|
568
|
-
- Confirm
|
|
649
|
+
- Confirm the source ID matches when calling `findAssets()`
|
|
569
650
|
|
|
570
651
|
### LUT Not Rendering Correctly
|
|
571
652
|
|
|
572
653
|
- Verify tile count values match the actual LUT image grid dimensions
|
|
573
|
-
- Check that the LUT image URL is
|
|
654
|
+
- Check that the LUT image URL is accessible from your server
|
|
574
655
|
- Confirm the LUT image uses PNG format
|
|
575
656
|
|
|
576
|
-
###
|
|
657
|
+
### JSON Source Not Loading
|
|
577
658
|
|
|
578
|
-
- Verify
|
|
579
|
-
-
|
|
580
|
-
-
|
|
659
|
+
- Verify JSON structure matches the required format with `version`, `id`, and `assets`
|
|
660
|
+
- Ensure asset metadata includes required fields
|
|
661
|
+
- Check for JSON syntax errors
|
|
581
662
|
|
|
582
663
|
## API Reference
|
|
583
664
|
|
|
584
|
-
| Method
|
|
585
|
-
|
|
|
586
|
-
| `engine.asset.addSource(source)`
|
|
587
|
-
| `engine.asset.addLocalAssetSourceFromJSONString(json, basePath)` | Create asset source from inline JSON configuration
|
|
588
|
-
| `engine.asset.addLocalAssetSourceFromJSONURI(uri)`
|
|
589
|
-
| `engine.asset.findAssets(sourceId, query)`
|
|
590
|
-
| `engine.asset.findAllSources()`
|
|
591
|
-
| `engine.asset.removeSource(id)`
|
|
592
|
-
| `
|
|
593
|
-
| `engine.block.
|
|
594
|
-
| `engine.block.
|
|
595
|
-
| `engine.block.
|
|
596
|
-
| `engine.block.
|
|
597
|
-
| `engine.block.appendEffect(block, effect)` | Add effect to block's effect stack |
|
|
665
|
+
| Method | Description |
|
|
666
|
+
| --- | --- |
|
|
667
|
+
| `engine.asset.addSource(source)` | Register a custom asset source with findAssets callback |
|
|
668
|
+
| `engine.asset.addLocalAssetSourceFromJSONString(json, basePath)` | Create asset source from inline JSON configuration |
|
|
669
|
+
| `engine.asset.addLocalAssetSourceFromJSONURI(uri)` | Load asset source from remote JSON file |
|
|
670
|
+
| `engine.asset.findAssets(sourceId, query)` | Query assets from a registered source |
|
|
671
|
+
| `engine.asset.findAllSources()` | Get all registered asset source IDs |
|
|
672
|
+
| `engine.asset.removeSource(id)` | Remove a registered asset source |
|
|
673
|
+
| `engine.block.createEffect(type)` | Create effect instance (use `//ly.img.ubq/effect/lut_filter` for LUT filters) |
|
|
674
|
+
| `engine.block.setString(effect, property, value)` | Set string property (LUT file URI) |
|
|
675
|
+
| `engine.block.setInt(effect, property, value)` | Set integer property (tile counts) |
|
|
676
|
+
| `engine.block.setFloat(effect, property, value)` | Set float property (intensity) |
|
|
677
|
+
| `engine.block.appendEffect(block, effect)` | Add effect to block's effect stack |
|
|
598
678
|
|
|
599
679
|
## Next Steps
|
|
600
680
|
|
|
@@ -604,11 +684,13 @@ Now that you understand how to create and register custom filter sources, explor
|
|
|
604
684
|
- [Create a Custom LUT Filter](./filters-and-effects/create-custom-lut-filter.md) - Understand LUT image format and create your own color grading filters
|
|
605
685
|
- [Blur Effects](./filters-and-effects/blur.md) - Add blur effects to images and videos
|
|
606
686
|
|
|
687
|
+
|
|
688
|
+
|
|
607
689
|
---
|
|
608
690
|
|
|
609
691
|
## More Resources
|
|
610
692
|
|
|
611
|
-
- **[
|
|
693
|
+
- **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
|
|
612
694
|
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
613
|
-
- **[Web Documentation](./
|
|
614
|
-
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|
|
695
|
+
- **[Web Documentation](./node.md)** - Interactive documentation with examples
|
|
696
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|