@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
|
@@ -0,0 +1,758 @@
|
|
|
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
|
+
|
|
3
|
+
**Navigation:** [Guides](./guides.md) > [Automate Workflows](./automation.md) > [Multiple Image Generation](./automation/multi-image-generation.md)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Generate multiple image variants from a single data record using CE.SDK's headless Node.js API to create format variations for different platforms.
|
|
8
|
+
|
|
9
|
+
> **Reading time:** 15 minutes
|
|
10
|
+
>
|
|
11
|
+
> **Resources:**
|
|
12
|
+
>
|
|
13
|
+
> - [Download examples](https://github.com/imgly/cesdk-web-examples/archive/refs/tags/release-$UBQ_VERSION$.zip)
|
|
14
|
+
>
|
|
15
|
+
> - [View source on GitHub](https://github.com/imgly/cesdk-web-examples/tree/release-$UBQ_VERSION$/guides-automation-multi-image-generation-server-js)
|
|
16
|
+
>
|
|
17
|
+
> - [Open in StackBlitz](https://stackblitz.com/github/imgly/cesdk-web-examples/tree/v$UBQ_VERSION$/guides-automation-multi-image-generation-server-js)
|
|
18
|
+
|
|
19
|
+
Multi-image generation produces multiple design variants from a single data source. This pattern creates format variations (square, portrait, landscape) from one input to serve multiple channels like Instagram posts, stories, and Facebook posts.
|
|
20
|
+
|
|
21
|
+
```typescript file=@cesdk_web_examples/guides-automation-multi-image-generation-server-js/server-js.ts reference-only
|
|
22
|
+
import CreativeEngine, { isRGBAColor, type RGBAColor } from '@cesdk/node';
|
|
23
|
+
import { config } from 'dotenv';
|
|
24
|
+
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
25
|
+
|
|
26
|
+
// Load environment variables
|
|
27
|
+
config();
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* CE.SDK Server Guide: Multi-Image Generation
|
|
31
|
+
*
|
|
32
|
+
* Demonstrates generating multiple image variants from a single data record:
|
|
33
|
+
* - Processing multiple templates sequentially (square, portrait, landscape)
|
|
34
|
+
* - Setting text variables from structured data
|
|
35
|
+
* - Replacing images dynamically by block name
|
|
36
|
+
* - Applying brand colors across template elements
|
|
37
|
+
* - Exporting variants to different formats
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
// Define the data structure for a restaurant review card
|
|
41
|
+
// In production, this would come from an API, database, or JSON file
|
|
42
|
+
interface RestaurantData {
|
|
43
|
+
name: string;
|
|
44
|
+
price: string;
|
|
45
|
+
reviewCount: number;
|
|
46
|
+
rating: number;
|
|
47
|
+
imageUrl: string;
|
|
48
|
+
primaryColor: string;
|
|
49
|
+
secondaryColor: string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Define template configurations for different formats
|
|
53
|
+
// Each template targets a different aspect ratio for various platforms
|
|
54
|
+
interface TemplateConfig {
|
|
55
|
+
label: string;
|
|
56
|
+
width: number;
|
|
57
|
+
height: number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Helper function to convert hex color to RGBA (0-1 range)
|
|
61
|
+
function hexToRgba01(hex: string): RGBAColor {
|
|
62
|
+
const m = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex.trim());
|
|
63
|
+
if (!m) throw new Error(`Invalid hex color: ${hex}`);
|
|
64
|
+
return {
|
|
65
|
+
r: parseInt(m[1], 16) / 255,
|
|
66
|
+
g: parseInt(m[2], 16) / 255,
|
|
67
|
+
b: parseInt(m[3], 16) / 255,
|
|
68
|
+
a: 1
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Helper to check if color is black (r=0, g=0, b=0)
|
|
73
|
+
function isBlackColor(color: unknown): boolean {
|
|
74
|
+
if (!isRGBAColor(color as RGBAColor)) return false;
|
|
75
|
+
const c = color as RGBAColor;
|
|
76
|
+
return c.r === 0 && c.g === 0 && c.b === 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Helper to check if color is white (r=1, g=1, b=1)
|
|
80
|
+
function isWhiteColor(color: unknown): boolean {
|
|
81
|
+
if (!isRGBAColor(color as RGBAColor)) return false;
|
|
82
|
+
const c = color as RGBAColor;
|
|
83
|
+
return c.r === 1 && c.g === 1 && c.b === 1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Initialize CE.SDK engine in headless mode
|
|
87
|
+
const engine = await CreativeEngine.init({
|
|
88
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
|
|
89
|
+
// license: process.env.CESDK_LICENSE, // Optional (trial mode available)
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Helper function to apply text variables from data
|
|
93
|
+
function applyVariables(data: RestaurantData): void {
|
|
94
|
+
const safeName = data.name?.trim() || 'Restaurant';
|
|
95
|
+
const safePrice = data.price?.trim() || '$';
|
|
96
|
+
const safeCount =
|
|
97
|
+
data.reviewCount !== undefined && data.reviewCount !== null
|
|
98
|
+
? data.reviewCount.toString()
|
|
99
|
+
: '0';
|
|
100
|
+
|
|
101
|
+
engine.variable.setString('Name', safeName);
|
|
102
|
+
engine.variable.setString('Price', safePrice);
|
|
103
|
+
engine.variable.setString('Count', safeCount);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Helper function to replace an image by block name
|
|
107
|
+
function replaceImageByName(
|
|
108
|
+
blockName: string,
|
|
109
|
+
newUrl: string,
|
|
110
|
+
mode: 'Cover' | 'Contain' = 'Cover'
|
|
111
|
+
): void {
|
|
112
|
+
const blocks = engine.block.findByName(blockName);
|
|
113
|
+
if (blocks.length === 0) {
|
|
114
|
+
// eslint-disable-next-line no-console
|
|
115
|
+
console.warn(`Block "${blockName}" not found`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const imageBlock = blocks[0];
|
|
120
|
+
let fill = engine.block.getFill(imageBlock);
|
|
121
|
+
|
|
122
|
+
if (!fill) {
|
|
123
|
+
fill = engine.block.createFill('image');
|
|
124
|
+
engine.block.setFill(imageBlock, fill);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
engine.block.setString(fill, 'fill/image/imageFileURI', newUrl);
|
|
128
|
+
engine.block.resetCrop(imageBlock);
|
|
129
|
+
engine.block.setContentFillMode(imageBlock, mode);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Helper function to apply brand colors to template elements
|
|
133
|
+
function applyBrandColors(primaryHex: string, secondaryHex: string): void {
|
|
134
|
+
const primary = hexToRgba01(primaryHex);
|
|
135
|
+
const secondary = hexToRgba01(secondaryHex);
|
|
136
|
+
const blocks = engine.block.findAll();
|
|
137
|
+
|
|
138
|
+
for (const id of blocks) {
|
|
139
|
+
const type = engine.block.getType(id);
|
|
140
|
+
|
|
141
|
+
// Text blocks: swap black/white text colors
|
|
142
|
+
if (type === '//ly.img.ubq/text') {
|
|
143
|
+
const colors = engine.block.getTextColors(id) || [];
|
|
144
|
+
colors.forEach((c, i) => {
|
|
145
|
+
if (isBlackColor(c)) {
|
|
146
|
+
engine.block.setTextColor(id, primary, i, colors.length);
|
|
147
|
+
} else if (isWhiteColor(c)) {
|
|
148
|
+
engine.block.setTextColor(id, secondary, i, colors.length);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Shapes: swap black/white fills
|
|
155
|
+
if (engine.block.supportsFill(id)) {
|
|
156
|
+
const fill = engine.block.getFill(id);
|
|
157
|
+
if (fill && engine.block.getType(fill) === '//ly.img.ubq/fill/color') {
|
|
158
|
+
const fillColor = engine.block.getColor(fill, 'fill/color/value');
|
|
159
|
+
if (isBlackColor(fillColor)) {
|
|
160
|
+
engine.block.setColor(fill, 'fill/color/value', primary);
|
|
161
|
+
} else if (isWhiteColor(fillColor)) {
|
|
162
|
+
engine.block.setColor(fill, 'fill/color/value', secondary);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Helper function to visualize rating with colored indicators
|
|
170
|
+
function applyRating(rating: number, maxRating: number = 5): void {
|
|
171
|
+
const onColor = hexToRgba01('#FFD700'); // Gold for active
|
|
172
|
+
const offColor = hexToRgba01('#E0E0E0'); // Gray for inactive
|
|
173
|
+
|
|
174
|
+
for (let i = 1; i <= maxRating; i++) {
|
|
175
|
+
const blocks = engine.block.findByName(`Rating${i}`);
|
|
176
|
+
if (blocks.length === 0) continue;
|
|
177
|
+
|
|
178
|
+
const ratingBlock = blocks[0];
|
|
179
|
+
if (engine.block.supportsFill(ratingBlock)) {
|
|
180
|
+
const fill = engine.block.getFill(ratingBlock);
|
|
181
|
+
if (fill) {
|
|
182
|
+
const color = i <= rating ? onColor : offColor;
|
|
183
|
+
engine.block.setColor(fill, 'fill/color/value', color);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
try {
|
|
190
|
+
const restaurantData: RestaurantData = {
|
|
191
|
+
name: 'The Golden Fork',
|
|
192
|
+
price: '$$$',
|
|
193
|
+
reviewCount: 127,
|
|
194
|
+
rating: 4,
|
|
195
|
+
imageUrl: 'https://img.ly/static/ubq_samples/sample_4.jpg',
|
|
196
|
+
primaryColor: '#2D5A27',
|
|
197
|
+
secondaryColor: '#F5E6D3'
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
const templates: TemplateConfig[] = [
|
|
201
|
+
{ label: 'square', width: 1080, height: 1080 }, // Instagram post (1:1)
|
|
202
|
+
{ label: 'portrait', width: 1080, height: 1920 }, // Instagram story (9:16)
|
|
203
|
+
{ label: 'landscape', width: 1200, height: 630 } // Facebook/X post (1.91:1)
|
|
204
|
+
];
|
|
205
|
+
|
|
206
|
+
// Prepare output directory
|
|
207
|
+
const outputDir = './output';
|
|
208
|
+
if (!existsSync(outputDir)) {
|
|
209
|
+
mkdirSync(outputDir, { recursive: true });
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Store results for summary
|
|
213
|
+
const results: { label: string; filename: string }[] = [];
|
|
214
|
+
|
|
215
|
+
// Process each template format sequentially
|
|
216
|
+
for (const template of templates) {
|
|
217
|
+
// Create a fresh scene for each template variant
|
|
218
|
+
engine.scene.create('Free', {
|
|
219
|
+
page: { size: { width: template.width, height: template.height } }
|
|
220
|
+
});
|
|
221
|
+
const page = engine.block.findByType('page')[0];
|
|
222
|
+
|
|
223
|
+
// Create template content with text variables
|
|
224
|
+
// In production, you would load a pre-designed template instead
|
|
225
|
+
|
|
226
|
+
// Create background
|
|
227
|
+
const bgRect = engine.block.create('graphic');
|
|
228
|
+
engine.block.setShape(bgRect, engine.block.createShape('rect'));
|
|
229
|
+
const bgFill = engine.block.createFill('color');
|
|
230
|
+
engine.block.setColor(bgFill, 'fill/color/value', {
|
|
231
|
+
r: 1,
|
|
232
|
+
g: 1,
|
|
233
|
+
b: 1,
|
|
234
|
+
a: 1
|
|
235
|
+
});
|
|
236
|
+
engine.block.setFill(bgRect, bgFill);
|
|
237
|
+
engine.block.setWidth(bgRect, template.width);
|
|
238
|
+
engine.block.setHeight(bgRect, template.height);
|
|
239
|
+
engine.block.setPositionX(bgRect, 0);
|
|
240
|
+
engine.block.setPositionY(bgRect, 0);
|
|
241
|
+
engine.block.appendChild(page, bgRect);
|
|
242
|
+
|
|
243
|
+
// Create hero image block
|
|
244
|
+
const heroBlock = engine.block.create('graphic');
|
|
245
|
+
engine.block.setShape(heroBlock, engine.block.createShape('rect'));
|
|
246
|
+
const heroFill = engine.block.createFill('image');
|
|
247
|
+
engine.block.setString(
|
|
248
|
+
heroFill,
|
|
249
|
+
'fill/image/imageFileURI',
|
|
250
|
+
restaurantData.imageUrl
|
|
251
|
+
);
|
|
252
|
+
engine.block.setFill(heroBlock, heroFill);
|
|
253
|
+
engine.block.setName(heroBlock, 'HeroImage');
|
|
254
|
+
|
|
255
|
+
// Adjust hero image size based on format
|
|
256
|
+
const heroHeight = template.height * 0.5;
|
|
257
|
+
engine.block.setWidth(heroBlock, template.width);
|
|
258
|
+
engine.block.setHeight(heroBlock, heroHeight);
|
|
259
|
+
engine.block.setPositionX(heroBlock, 0);
|
|
260
|
+
engine.block.setPositionY(heroBlock, 0);
|
|
261
|
+
engine.block.appendChild(page, heroBlock);
|
|
262
|
+
|
|
263
|
+
// Create title text with variable binding
|
|
264
|
+
const titleBlock = engine.block.create('text');
|
|
265
|
+
engine.block.replaceText(titleBlock, '{{Name}}');
|
|
266
|
+
engine.block.setWidthMode(titleBlock, 'Auto');
|
|
267
|
+
engine.block.setHeightMode(titleBlock, 'Auto');
|
|
268
|
+
engine.block.setFloat(titleBlock, 'text/fontSize', 48);
|
|
269
|
+
engine.block.setPositionX(titleBlock, 40);
|
|
270
|
+
engine.block.setPositionY(titleBlock, heroHeight + 30);
|
|
271
|
+
engine.block.appendChild(page, titleBlock);
|
|
272
|
+
|
|
273
|
+
// Create price and review count text
|
|
274
|
+
const detailsBlock = engine.block.create('text');
|
|
275
|
+
engine.block.replaceText(detailsBlock, '{{Price}} · {{Count}} reviews');
|
|
276
|
+
engine.block.setWidthMode(detailsBlock, 'Auto');
|
|
277
|
+
engine.block.setHeightMode(detailsBlock, 'Auto');
|
|
278
|
+
engine.block.setFloat(detailsBlock, 'text/fontSize', 24);
|
|
279
|
+
engine.block.setPositionX(detailsBlock, 40);
|
|
280
|
+
engine.block.setPositionY(detailsBlock, heroHeight + 100);
|
|
281
|
+
engine.block.appendChild(page, detailsBlock);
|
|
282
|
+
|
|
283
|
+
// Create rating stars
|
|
284
|
+
const starSize = 30;
|
|
285
|
+
const starSpacing = 35;
|
|
286
|
+
const starY = heroHeight + 150;
|
|
287
|
+
for (let i = 1; i <= 5; i++) {
|
|
288
|
+
const star = engine.block.create('graphic');
|
|
289
|
+
engine.block.setShape(star, engine.block.createShape('rect'));
|
|
290
|
+
const starFill = engine.block.createFill('color');
|
|
291
|
+
engine.block.setColor(starFill, 'fill/color/value', {
|
|
292
|
+
r: 0.88,
|
|
293
|
+
g: 0.88,
|
|
294
|
+
b: 0.88,
|
|
295
|
+
a: 1
|
|
296
|
+
});
|
|
297
|
+
engine.block.setFill(star, starFill);
|
|
298
|
+
engine.block.setWidth(star, starSize);
|
|
299
|
+
engine.block.setHeight(star, starSize);
|
|
300
|
+
engine.block.setPositionX(star, 40 + (i - 1) * starSpacing);
|
|
301
|
+
engine.block.setPositionY(star, starY);
|
|
302
|
+
engine.block.setName(star, `Rating${i}`);
|
|
303
|
+
engine.block.appendChild(page, star);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Apply data to the template
|
|
307
|
+
applyVariables(restaurantData);
|
|
308
|
+
replaceImageByName('HeroImage', restaurantData.imageUrl, 'Cover');
|
|
309
|
+
applyBrandColors(
|
|
310
|
+
restaurantData.primaryColor,
|
|
311
|
+
restaurantData.secondaryColor
|
|
312
|
+
);
|
|
313
|
+
applyRating(restaurantData.rating);
|
|
314
|
+
|
|
315
|
+
// Export the populated template
|
|
316
|
+
const blob = await engine.block.export(page, {
|
|
317
|
+
mimeType: 'image/png'
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
// Save to file system
|
|
321
|
+
const filename = `restaurant-${template.label}.png`;
|
|
322
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
323
|
+
writeFileSync(`${outputDir}/${filename}`, buffer);
|
|
324
|
+
|
|
325
|
+
results.push({ label: template.label, filename });
|
|
326
|
+
// eslint-disable-next-line no-console
|
|
327
|
+
console.log(
|
|
328
|
+
`✓ Exported ${filename} (${template.width}x${template.height})`
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// eslint-disable-next-line no-console
|
|
333
|
+
console.log(
|
|
334
|
+
`\n✓ Multi-image generation complete: ${results.length} variants exported to ${outputDir}/`
|
|
335
|
+
);
|
|
336
|
+
// eslint-disable-next-line no-console
|
|
337
|
+
console.log(' Variants:', results.map((r) => r.label).join(', '));
|
|
338
|
+
} finally {
|
|
339
|
+
// Always dispose the engine to free resources
|
|
340
|
+
engine.dispose();
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
This guide covers defining data structures, configuring templates for different formats, populating templates with variables and images, applying brand colors, and exporting variants.
|
|
345
|
+
|
|
346
|
+
## Define the Data Structure
|
|
347
|
+
|
|
348
|
+
Start by defining the structure for your input data. Type-safe interfaces clarify requirements and prevent runtime errors.
|
|
349
|
+
|
|
350
|
+
```typescript highlight=highlight-data-structure
|
|
351
|
+
// Define the data structure for a restaurant review card
|
|
352
|
+
// In production, this would come from an API, database, or JSON file
|
|
353
|
+
interface RestaurantData {
|
|
354
|
+
name: string;
|
|
355
|
+
price: string;
|
|
356
|
+
reviewCount: number;
|
|
357
|
+
rating: number;
|
|
358
|
+
imageUrl: string;
|
|
359
|
+
primaryColor: string;
|
|
360
|
+
secondaryColor: string;
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
The restaurant review example includes text fields (name, price, review count), image URLs, rating, and brand colors. In production, this data comes from an API, database, or JSON file.
|
|
365
|
+
|
|
366
|
+
## Configure Template Formats
|
|
367
|
+
|
|
368
|
+
Define template configurations for each output format. Different aspect ratios serve different platforms and use cases.
|
|
369
|
+
|
|
370
|
+
```typescript highlight=highlight-template-config
|
|
371
|
+
// Define template configurations for different formats
|
|
372
|
+
// Each template targets a different aspect ratio for various platforms
|
|
373
|
+
interface TemplateConfig {
|
|
374
|
+
label: string;
|
|
375
|
+
width: number;
|
|
376
|
+
height: number;
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Common format targets include:
|
|
381
|
+
|
|
382
|
+
- **Square (1:1)**: Instagram posts, profile images
|
|
383
|
+
- **Portrait (9:16)**: Instagram stories, TikTok, mobile displays
|
|
384
|
+
- **Landscape (1.91:1)**: Facebook posts, Twitter/X cards, web banners
|
|
385
|
+
|
|
386
|
+
## Initialize the Engine
|
|
387
|
+
|
|
388
|
+
Initialize the headless Creative Engine for server-side processing.
|
|
389
|
+
|
|
390
|
+
```typescript highlight=highlight-setup
|
|
391
|
+
// Initialize CE.SDK engine in headless mode
|
|
392
|
+
const engine = await CreativeEngine.init({
|
|
393
|
+
baseURL: process.env.IMGLY_LOCAL_ASSETS_URL
|
|
394
|
+
// license: process.env.CESDK_LICENSE, // Optional (trial mode available)
|
|
395
|
+
});
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
The engine runs without a browser context, making it suitable for batch processing and API integrations.
|
|
399
|
+
|
|
400
|
+
## Create Helper Functions
|
|
401
|
+
|
|
402
|
+
Build reusable functions for common template operations to keep the main generation loop clean.
|
|
403
|
+
|
|
404
|
+
### Text Variable Substitution
|
|
405
|
+
|
|
406
|
+
Use `engine.variable.setString()` to populate text placeholders. Include null checks for robust data handling.
|
|
407
|
+
|
|
408
|
+
```typescript highlight=highlight-helper-variables
|
|
409
|
+
// Helper function to apply text variables from data
|
|
410
|
+
function applyVariables(data: RestaurantData): void {
|
|
411
|
+
const safeName = data.name?.trim() || 'Restaurant';
|
|
412
|
+
const safePrice = data.price?.trim() || '$';
|
|
413
|
+
const safeCount =
|
|
414
|
+
data.reviewCount !== undefined && data.reviewCount !== null
|
|
415
|
+
? data.reviewCount.toString()
|
|
416
|
+
: '0';
|
|
417
|
+
|
|
418
|
+
engine.variable.setString('Name', safeName);
|
|
419
|
+
engine.variable.setString('Price', safePrice);
|
|
420
|
+
engine.variable.setString('Count', safeCount);
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Variables update all text blocks that reference them using the `{{variableName}}` syntax.
|
|
425
|
+
|
|
426
|
+
### Dynamic Image Replacement
|
|
427
|
+
|
|
428
|
+
Replace images by finding blocks with semantic names and updating their fill URI.
|
|
429
|
+
|
|
430
|
+
```typescript highlight=highlight-helper-image
|
|
431
|
+
// Helper function to replace an image by block name
|
|
432
|
+
function replaceImageByName(
|
|
433
|
+
blockName: string,
|
|
434
|
+
newUrl: string,
|
|
435
|
+
mode: 'Cover' | 'Contain' = 'Cover'
|
|
436
|
+
): void {
|
|
437
|
+
const blocks = engine.block.findByName(blockName);
|
|
438
|
+
if (blocks.length === 0) {
|
|
439
|
+
// eslint-disable-next-line no-console
|
|
440
|
+
console.warn(`Block "${blockName}" not found`);
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
const imageBlock = blocks[0];
|
|
445
|
+
let fill = engine.block.getFill(imageBlock);
|
|
446
|
+
|
|
447
|
+
if (!fill) {
|
|
448
|
+
fill = engine.block.createFill('image');
|
|
449
|
+
engine.block.setFill(imageBlock, fill);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
engine.block.setString(fill, 'fill/image/imageFileURI', newUrl);
|
|
453
|
+
engine.block.resetCrop(imageBlock);
|
|
454
|
+
engine.block.setContentFillMode(imageBlock, mode);
|
|
455
|
+
}
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Using `findByName()` instead of `findByType()` targets specific blocks without affecting other images in the template.
|
|
459
|
+
|
|
460
|
+
### Brand Color Theming
|
|
461
|
+
|
|
462
|
+
Apply consistent brand colors across template elements by replacing standard black/white values with brand primary/secondary colors.
|
|
463
|
+
|
|
464
|
+
```typescript highlight=highlight-helper-colors
|
|
465
|
+
// Helper function to convert hex color to RGBA (0-1 range)
|
|
466
|
+
function hexToRgba01(hex: string): RGBAColor {
|
|
467
|
+
const m = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex.trim());
|
|
468
|
+
if (!m) throw new Error(`Invalid hex color: ${hex}`);
|
|
469
|
+
return {
|
|
470
|
+
r: parseInt(m[1], 16) / 255,
|
|
471
|
+
g: parseInt(m[2], 16) / 255,
|
|
472
|
+
b: parseInt(m[3], 16) / 255,
|
|
473
|
+
a: 1
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// Helper to check if color is black (r=0, g=0, b=0)
|
|
478
|
+
function isBlackColor(color: unknown): boolean {
|
|
479
|
+
if (!isRGBAColor(color as RGBAColor)) return false;
|
|
480
|
+
const c = color as RGBAColor;
|
|
481
|
+
return c.r === 0 && c.g === 0 && c.b === 0;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Helper to check if color is white (r=1, g=1, b=1)
|
|
485
|
+
function isWhiteColor(color: unknown): boolean {
|
|
486
|
+
if (!isRGBAColor(color as RGBAColor)) return false;
|
|
487
|
+
const c = color as RGBAColor;
|
|
488
|
+
return c.r === 1 && c.g === 1 && c.b === 1;
|
|
489
|
+
}
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
This approach preserves other colors while systematically applying brand theming to text and shapes.
|
|
493
|
+
|
|
494
|
+
### Rating Visualization
|
|
495
|
+
|
|
496
|
+
Display ratings visually using conditional coloring of indicator blocks.
|
|
497
|
+
|
|
498
|
+
```typescript highlight=highlight-helper-rating
|
|
499
|
+
// Helper function to visualize rating with colored indicators
|
|
500
|
+
function applyRating(rating: number, maxRating: number = 5): void {
|
|
501
|
+
const onColor = hexToRgba01('#FFD700'); // Gold for active
|
|
502
|
+
const offColor = hexToRgba01('#E0E0E0'); // Gray for inactive
|
|
503
|
+
|
|
504
|
+
for (let i = 1; i <= maxRating; i++) {
|
|
505
|
+
const blocks = engine.block.findByName(`Rating${i}`);
|
|
506
|
+
if (blocks.length === 0) continue;
|
|
507
|
+
|
|
508
|
+
const ratingBlock = blocks[0];
|
|
509
|
+
if (engine.block.supportsFill(ratingBlock)) {
|
|
510
|
+
const fill = engine.block.getFill(ratingBlock);
|
|
511
|
+
if (fill) {
|
|
512
|
+
const color = i <= rating ? onColor : offColor;
|
|
513
|
+
engine.block.setColor(fill, 'fill/color/value', color);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
Rating blocks use a naming convention (`Rating1`, `Rating2`, etc.) to identify and color them based on the rating value.
|
|
521
|
+
|
|
522
|
+
## Process Templates Sequentially
|
|
523
|
+
|
|
524
|
+
Iterate through each template format, creating a fresh scene for each variant. Sequential processing keeps memory usage predictable.
|
|
525
|
+
|
|
526
|
+
```typescript highlight=highlight-generation-loop
|
|
527
|
+
// Process each template format sequentially
|
|
528
|
+
for (const template of templates) {
|
|
529
|
+
// Create a fresh scene for each template variant
|
|
530
|
+
engine.scene.create('Free', {
|
|
531
|
+
page: { size: { width: template.width, height: template.height } }
|
|
532
|
+
});
|
|
533
|
+
const page = engine.block.findByType('page')[0];
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
Creating a new scene for each template ensures variable values and block states don't carry over between variants.
|
|
537
|
+
|
|
538
|
+
## Build Template Content
|
|
539
|
+
|
|
540
|
+
For each format, build the template layout with properly sized and positioned blocks. In production, you would load pre-designed templates instead of creating them programmatically.
|
|
541
|
+
|
|
542
|
+
```typescript highlight=highlight-create-content
|
|
543
|
+
// Create template content with text variables
|
|
544
|
+
// In production, you would load a pre-designed template instead
|
|
545
|
+
|
|
546
|
+
// Create background
|
|
547
|
+
const bgRect = engine.block.create('graphic');
|
|
548
|
+
engine.block.setShape(bgRect, engine.block.createShape('rect'));
|
|
549
|
+
const bgFill = engine.block.createFill('color');
|
|
550
|
+
engine.block.setColor(bgFill, 'fill/color/value', {
|
|
551
|
+
r: 1,
|
|
552
|
+
g: 1,
|
|
553
|
+
b: 1,
|
|
554
|
+
a: 1
|
|
555
|
+
});
|
|
556
|
+
engine.block.setFill(bgRect, bgFill);
|
|
557
|
+
engine.block.setWidth(bgRect, template.width);
|
|
558
|
+
engine.block.setHeight(bgRect, template.height);
|
|
559
|
+
engine.block.setPositionX(bgRect, 0);
|
|
560
|
+
engine.block.setPositionY(bgRect, 0);
|
|
561
|
+
engine.block.appendChild(page, bgRect);
|
|
562
|
+
|
|
563
|
+
// Create hero image block
|
|
564
|
+
const heroBlock = engine.block.create('graphic');
|
|
565
|
+
engine.block.setShape(heroBlock, engine.block.createShape('rect'));
|
|
566
|
+
const heroFill = engine.block.createFill('image');
|
|
567
|
+
engine.block.setString(
|
|
568
|
+
heroFill,
|
|
569
|
+
'fill/image/imageFileURI',
|
|
570
|
+
restaurantData.imageUrl
|
|
571
|
+
);
|
|
572
|
+
engine.block.setFill(heroBlock, heroFill);
|
|
573
|
+
engine.block.setName(heroBlock, 'HeroImage');
|
|
574
|
+
|
|
575
|
+
// Adjust hero image size based on format
|
|
576
|
+
const heroHeight = template.height * 0.5;
|
|
577
|
+
engine.block.setWidth(heroBlock, template.width);
|
|
578
|
+
engine.block.setHeight(heroBlock, heroHeight);
|
|
579
|
+
engine.block.setPositionX(heroBlock, 0);
|
|
580
|
+
engine.block.setPositionY(heroBlock, 0);
|
|
581
|
+
engine.block.appendChild(page, heroBlock);
|
|
582
|
+
|
|
583
|
+
// Create title text with variable binding
|
|
584
|
+
const titleBlock = engine.block.create('text');
|
|
585
|
+
engine.block.replaceText(titleBlock, '{{Name}}');
|
|
586
|
+
engine.block.setWidthMode(titleBlock, 'Auto');
|
|
587
|
+
engine.block.setHeightMode(titleBlock, 'Auto');
|
|
588
|
+
engine.block.setFloat(titleBlock, 'text/fontSize', 48);
|
|
589
|
+
engine.block.setPositionX(titleBlock, 40);
|
|
590
|
+
engine.block.setPositionY(titleBlock, heroHeight + 30);
|
|
591
|
+
engine.block.appendChild(page, titleBlock);
|
|
592
|
+
|
|
593
|
+
// Create price and review count text
|
|
594
|
+
const detailsBlock = engine.block.create('text');
|
|
595
|
+
engine.block.replaceText(detailsBlock, '{{Price}} · {{Count}} reviews');
|
|
596
|
+
engine.block.setWidthMode(detailsBlock, 'Auto');
|
|
597
|
+
engine.block.setHeightMode(detailsBlock, 'Auto');
|
|
598
|
+
engine.block.setFloat(detailsBlock, 'text/fontSize', 24);
|
|
599
|
+
engine.block.setPositionX(detailsBlock, 40);
|
|
600
|
+
engine.block.setPositionY(detailsBlock, heroHeight + 100);
|
|
601
|
+
engine.block.appendChild(page, detailsBlock);
|
|
602
|
+
|
|
603
|
+
// Create rating stars
|
|
604
|
+
const starSize = 30;
|
|
605
|
+
const starSpacing = 35;
|
|
606
|
+
const starY = heroHeight + 150;
|
|
607
|
+
for (let i = 1; i <= 5; i++) {
|
|
608
|
+
const star = engine.block.create('graphic');
|
|
609
|
+
engine.block.setShape(star, engine.block.createShape('rect'));
|
|
610
|
+
const starFill = engine.block.createFill('color');
|
|
611
|
+
engine.block.setColor(starFill, 'fill/color/value', {
|
|
612
|
+
r: 0.88,
|
|
613
|
+
g: 0.88,
|
|
614
|
+
b: 0.88,
|
|
615
|
+
a: 1
|
|
616
|
+
});
|
|
617
|
+
engine.block.setFill(star, starFill);
|
|
618
|
+
engine.block.setWidth(star, starSize);
|
|
619
|
+
engine.block.setHeight(star, starSize);
|
|
620
|
+
engine.block.setPositionX(star, 40 + (i - 1) * starSpacing);
|
|
621
|
+
engine.block.setPositionY(star, starY);
|
|
622
|
+
engine.block.setName(star, `Rating${i}`);
|
|
623
|
+
engine.block.appendChild(page, star);
|
|
624
|
+
}
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
The template includes:
|
|
628
|
+
|
|
629
|
+
- Background fill
|
|
630
|
+
- Hero image with semantic name for replacement
|
|
631
|
+
- Text blocks with variable bindings
|
|
632
|
+
- Rating indicator blocks with naming convention
|
|
633
|
+
|
|
634
|
+
## Populate and Export
|
|
635
|
+
|
|
636
|
+
After building the template structure, apply the data and export the result.
|
|
637
|
+
|
|
638
|
+
```typescript highlight=highlight-populate-template
|
|
639
|
+
// Apply data to the template
|
|
640
|
+
applyVariables(restaurantData);
|
|
641
|
+
replaceImageByName('HeroImage', restaurantData.imageUrl, 'Cover');
|
|
642
|
+
applyBrandColors(
|
|
643
|
+
restaurantData.primaryColor,
|
|
644
|
+
restaurantData.secondaryColor
|
|
645
|
+
);
|
|
646
|
+
applyRating(restaurantData.rating);
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
The population step:
|
|
650
|
+
|
|
651
|
+
1. Sets text variables from the data record
|
|
652
|
+
2. Updates the hero image URL
|
|
653
|
+
3. Applies brand colors to text and shapes
|
|
654
|
+
4. Colors rating indicators based on the rating value
|
|
655
|
+
|
|
656
|
+
Then export to the file system:
|
|
657
|
+
|
|
658
|
+
```typescript highlight=highlight-export
|
|
659
|
+
// Export the populated template
|
|
660
|
+
const blob = await engine.block.export(page, {
|
|
661
|
+
mimeType: 'image/png'
|
|
662
|
+
});
|
|
663
|
+
|
|
664
|
+
// Save to file system
|
|
665
|
+
const filename = `restaurant-${template.label}.png`;
|
|
666
|
+
const buffer = Buffer.from(await blob.arrayBuffer());
|
|
667
|
+
writeFileSync(`${outputDir}/${filename}`, buffer);
|
|
668
|
+
|
|
669
|
+
results.push({ label: template.label, filename });
|
|
670
|
+
// eslint-disable-next-line no-console
|
|
671
|
+
console.log(
|
|
672
|
+
`✓ Exported ${filename} (${template.width}x${template.height})`
|
|
673
|
+
);
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
For production deployments, write to cloud storage or return blobs for API responses instead of the local file system.
|
|
677
|
+
|
|
678
|
+
## Cleanup Resources
|
|
679
|
+
|
|
680
|
+
Always dispose the engine when processing completes. The `finally` block ensures cleanup happens even if errors occur.
|
|
681
|
+
|
|
682
|
+
```typescript highlight=highlight-cleanup
|
|
683
|
+
// Always dispose the engine to free resources
|
|
684
|
+
engine.dispose();
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
## Troubleshooting
|
|
688
|
+
|
|
689
|
+
### Variables Not Updating
|
|
690
|
+
|
|
691
|
+
If text shows `{{variableName}}` instead of the actual value:
|
|
692
|
+
|
|
693
|
+
- Variable names are case-sensitive—verify exact match
|
|
694
|
+
- Ensure `setString()` is called before export
|
|
695
|
+
- Use `engine.variable.findAll()` to check defined variables
|
|
696
|
+
- Create a new scene for each variant to clear previous state
|
|
697
|
+
|
|
698
|
+
### Images Not Appearing
|
|
699
|
+
|
|
700
|
+
If images fail to load in exported designs:
|
|
701
|
+
|
|
702
|
+
- Verify image URLs are accessible from the server
|
|
703
|
+
- Check CORS headers if loading from external domains
|
|
704
|
+
- Ensure the fill type is `image` before setting `fill/image/imageFileURI`
|
|
705
|
+
- Call `resetCrop()` after changing the image URI
|
|
706
|
+
|
|
707
|
+
### Colors Not Applying
|
|
708
|
+
|
|
709
|
+
If brand colors don't appear correctly:
|
|
710
|
+
|
|
711
|
+
- The color comparison checks for exact black (0,0,0) and white (1,1,1)
|
|
712
|
+
- Use `isRGBAColor()` type guard for safe color property access
|
|
713
|
+
- Check block type before applying text vs fill color updates
|
|
714
|
+
- Verify fill type is `//ly.img.ubq/fill/color` for shape fills
|
|
715
|
+
|
|
716
|
+
### Memory Issues
|
|
717
|
+
|
|
718
|
+
For high-volume processing:
|
|
719
|
+
|
|
720
|
+
- Process formats sequentially (not in parallel) to limit memory
|
|
721
|
+
- Dispose and recreate the engine for very large batches
|
|
722
|
+
- Monitor memory usage in production environments
|
|
723
|
+
- Consider worker processes for parallel format generation
|
|
724
|
+
|
|
725
|
+
## API Reference
|
|
726
|
+
|
|
727
|
+
| Method | Description |
|
|
728
|
+
|--------|-------------|
|
|
729
|
+
| `engine.variable.setString(name, value)` | Set a text variable's value |
|
|
730
|
+
| `engine.variable.findAll()` | List all variable names in the scene |
|
|
731
|
+
| `engine.block.findByName(name)` | Find blocks by semantic name |
|
|
732
|
+
| `engine.block.findByType(type)` | Find blocks by type |
|
|
733
|
+
| `engine.block.setName(block, name)` | Set a block's semantic name |
|
|
734
|
+
| `engine.block.getFill(block)` | Get the fill block ID |
|
|
735
|
+
| `engine.block.setFill(block, fill)` | Set a block's fill |
|
|
736
|
+
| `engine.block.createFill(type)` | Create a new fill of specified type |
|
|
737
|
+
| `engine.block.setString(block, property, value)` | Set a string property |
|
|
738
|
+
| `engine.block.setColor(block, property, color)` | Set a color property (RGBA, 0-1 range) |
|
|
739
|
+
| `engine.block.getColor(block, property)` | Get a color property |
|
|
740
|
+
| `engine.block.setTextColor(block, color, start, length)` | Set text color for a range |
|
|
741
|
+
| `engine.block.getTextColors(block)` | Get all text colors in a block |
|
|
742
|
+
| `engine.block.supportsFill(block)` | Check if block supports fill |
|
|
743
|
+
| `engine.block.setContentFillMode(block, mode)` | Set image fill mode (Cover, Contain, Crop) |
|
|
744
|
+
| `engine.block.resetCrop(block)` | Reset image crop to default |
|
|
745
|
+
| `engine.block.export(block, options)` | Export block to image format |
|
|
746
|
+
| `engine.scene.create(layout, options)` | Create a new scene |
|
|
747
|
+
| `engine.dispose()` | Dispose engine and free resources |
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
---
|
|
752
|
+
|
|
753
|
+
## More Resources
|
|
754
|
+
|
|
755
|
+
- **[Node.js Documentation Index](https://img.ly/docs/cesdk/node.md)** - Browse all Node.js documentation
|
|
756
|
+
- **[Complete Documentation](./llms-full.txt.md)** - Full documentation in one file (for LLMs)
|
|
757
|
+
- **[Web Documentation](./node.md)** - Interactive documentation with examples
|
|
758
|
+
- **[Support](mailto:support@img.ly)** - Contact IMG.LY support
|