Skip to main content
CESDK/CE.SDK

Changelog

Explore the recent changes made to CreativeEditor SDK.

Our release notes contain more details on features and changes.

Breaking Changes

  • Engine: To keep text visually the same size when the DPI setting is changed in scenes with pixel design-unit, the font sizes are now automatically scaled. Before text would appear smaller/larger when the DPI decreases/increases. This should usually be the desired behavior. If the old behavior should be kept, the font sizes can be scaled with newDPI/previousDPI when the dpi in pixel scenes is changed.

Non Breaking Changes

  • Engine: Added a new boolean engine setting page/moveChildrenWhenCroppingFill for keeping the position, rotation and size of children of a page in sync with crop edits to the page's fill.
  • Editor/Web: Fix correct asset being applied to canvas if confirmation dialog is being configured
  • Editor/Web: Fix asset library flickering in certain occasions when using custom panels
  • Editor/Web: Deprecate the AssetLibraryEntry[] type in favor of string[] for the Panel Builder Library entries property
  • Editor/Web: Fix hover state on canvas getting stuck on certain occasions
  • Engine: Fixed the relocateResource editor API to also update typeface URIs.
  • Editor/Web: Replace UI font Inter Bold with Inter SemiBold
  • Engine: fix rendering of pages with a dimension with a fractional pixel.
  • Editor/Web: Fixed that changing the width or height with the input values in the inspector did not update the crop values correctly and result in wrong aspect-ratio of the image fill.
  • Engine: Allow to automatically maintain the crop when using the block API setWidth/Height.
  • Engine: Updated the setWidth and setHeigth block APIs with an optional flag for maintaining the crop. If set, the crop values of, e.g., image fills are automatically updated so that the image is not stretched or squashed, see documentation.
  • Engine: Fixed fillParent block API to resize cropped elements without distorting their fill.
  • Editor/Web: Fix an issue where calling engine APIs inside the asset library entries style callback would not trigger reactivity.

Breaking Changes

Non Breaking Changes

  • Engine/Android: Fix a video encoder crash if export is cancelled

Breaking Changes

  • Engine: Updated the setTypeface block API to allow change of the typeface also for text runs. This enables to use different typefaces in one text block. Setting a typeface witout specifying a range while text is selected by the user or with the SetSelectionRange command now changes the typeface only for the selection. This is usually the desired behavior. To retain the old behavior of changing the typeface of the whole block, specify the range to cover the whole text, i.e., from = 0, to = textLength. See set typeface documentation and text properties documentation for more details.
  • Engine: Updated the setTypeface block API to no longer need a fallback font file URI as parameter. The font fallback will be handled automatically. See set typeface documentation for more details.
  • Engine: Added the getTypefaces block API to allow querying of all typefaces of a text run. It is recommended to switch out getTypeface with the new API as getTypeface only returns the default typeface, i.e., the property 'text/typeface' set on the text block. See get typefaces documentation, get typeface documentation,and text properties documentation for more details.
  • Engine: Updated the setTypeface block API to no longer need a fallback font file URI as parameter. The font fallback will be handled automatically. See block docs for more details.

Non Breaking Changes

  • Engine/Swift: Added a feature flag engine setting "features/exportP3Images". When enabled, the editor displays P3 colors correctly and image exports result in 16 bit images in the P3 color space as opposed to the default 8 bit sRGB exports. This setting is currently only supported on iOS and is ignored on other platforms. Targa image exports and exports with a color mask continue to produce 8 bit results.
  • Editor/Web: Builder components like inputs and buttons within the builder panel now support an suffix property. This suffix appears on the right side of the component and can be used to add an extra button, icon with a tooltip to provide additional information.
  • Camera/React-Native: Added @imgly/camera-react-native module.
  • Engine/Android: Added binding EditorApi.getActiveLicense.
  • Editor/Android: Added a new configuration property dock of type Dock to EditorConfiguration that allows customizing the dock (a list of buttons that appears at the bottom of the editor).
  • Editor/Android: Deprecated EngineConfiguration constructor in favor of EngineConfiguration.Companion.remember composable function.
  • Editor/Android: Deprecated EngineConfiguration.getForDesign method in favor of EngineConfiguration.Companion.rememberForDesign composable function.
  • Editor/Android: Deprecated EngineConfiguration.getForPhoto method in favor of EngineConfiguration.Companion.rememberForPhoto composable function.
  • Editor/Android: Deprecated EngineConfiguration.getForApparel method in favor of EngineConfiguration.Companion.rememberForApparel composable function.
  • Editor/Android: Deprecated EngineConfiguration.getForPostcard method in favor of EngineConfiguration.Companion.rememberForPostcard composable function.
  • Editor/Android: Deprecated EngineConfiguration.getForVideo method in favor of EngineConfiguration.Companion.rememberForVideo composable function.
  • Editor/Android: Deprecated EditorConfiguration constructor in favor of EditorConfiguration.Companion.remember composable function.
  • Editor/Android: Deprecated EditorConfiguration.getDefault method in favor of EditorConfiguration.Companion.rememberForDesign, EditorConfiguration.Companion.rememberForPhoto, EditorConfiguration.Companion.rememberForApparel, EditorConfiguration.Companion.rememberForPostcard and EditorConfiguration.Companion.rememberForVideo solution specific composable functions.
  • Editor/Android: Deprecated EditorEventHandler.sendCloseEditorEvent(throwable) in favor of EditorEventHandler.send(EditorEvent.CloseEditor(throwable)).
  • Editor/Android: Deprecated EditorEventHandler.sendCancelExportEvent(throwable) in favor of EditorEventHandler.send(EditorEvent.CancelExport()).
  • Editor/Android: Deprecated IconPack.Libraryelements in favor of IconPack.LibraryElements.
  • Editor/Android: Deprecated IconPack.Arrowback in favor of IconPack.ArrowBack.
  • Editor/Android: Deprecated IconPack.Imageoutline in favor of IconPack.ImageOutline.
  • Editor/Android: Deprecated IconPack.Libraryelementsoutline in favor of IconPack.LibraryElementsOutline.
  • Editor/Android: Deprecated IconPack.Playbox in favor of IconPack.PlayBox.
  • Editor/Android: Deprecated IconPack.Playboxoutline in favor of IconPack.PlayBoxOutline.
  • Editor/Android: Deprecated IconPack.Reorderhorizontally in favor of IconPack.ReorderHorizontally.
  • Editor/Android: Deprecated IconPack.Shapesoutline in favor of IconPack.ShapesOutline.
  • Editor/Android: Deprecated IconPack.Stickeremoji in favor of IconPack.StickerEmoji.
  • Editor/Android: Deprecated IconPack.Stickeremojioutline in favor of IconPack.StickerEmojiOutline.
  • Editor/Android: Deprecated IconPack.Textfields in favor of IconPack.TextFields.
  • Camera/Android: Added long press/release to toggle recording.
  • Camera/Android: Added CameraConfiguration for configurability.
  • Editor/Web: Removed the automatic percentage conversion for slider inputs in builders when the value is between -1 and 1.
  • Editor/Web: Fix an issue where the action button in the dialog are rendered without a gap between them when using the dialog API.
  • Editor/Web: Fixed an issue where the effect library thumbnails were not derived from the effect assets correctly.
  • Editor/Web: Fixed an issue where the blur library thumbnails were not derived from the blur assets correctly.
  • Editor/iOS: Playback now pauses when app enters background if currently playing.
  • Engine: fix pre-export memory usage estimate when exporting with option exportWithMaskColor is set to true.
  • Editor/Web: UI for setting font size now supports text runs.
  • Editor/Web: UI for font selection and styling now supports text runs.
  • Editor/Web: The entire set of IMG.LY icons is now available for use in custom/builder components. See our updated documentation on how to use them.
  • Editor/Web: Remove old icons, use new spritesheets, to reduce bundle size.
  • Editor/Web: Fix: 'Video unsupported' warning dialogue shows warning icon.
  • Editor/Web: Fixed a bug where the custom URI resolver was not called for images and videos shown in the Fill Inspector Panel.
  • Editor/Web: Fixed a crash when changing the fill of a page to video, and then attempting to trim or crop it.
  • Editor/Web: Removed deprecated query of property 'fill/image/imageFileURI' in Fill Inspector Panel.

Breaking Changes

Non Breaking Changes

  • Engine/Android: Introduce new Engine methods:
    • Engine::pause() for pausing the engine.
    • Engine::resume() for unpausing the engine.
    • Engine::isBound() for checking if the engine is bound.
  • Camera/Android: Added Camera for Android.
  • Camera/Android: Engine.setCameraPreview() now accepts a new lambda parameter onFirstFrameAvailable. It is called when the first frame of the camera preview is available.
  • Camera/Android: Added an overloaded method for Engine.setCameraPreview() that accepts mirroredState, a StateFlow as a parameter. This allows to update the camera preview orientation dynamically.
  • Engine/Swift: Added support for text animations on iOS. (AnimationType.typewriterText, AnimationType.blockSwipeText, AnimationType.spreadText, AnimationType.mergeText)
  • Engine/Swift: fixed saving scenes generated by psd-importer
  • Editor/Web: Changed the order of animations in the library from "In", "Out", Loop" to "In", "Loop", "Out"
  • Editor/Web: When a text element is set to auto size by double-clicking the resize handles, the automatic font size now gets disabled.
  • Engine/Android: When creating a scene, it is now possible to choose it's desired layout, see documentation.
  • Engine/Swift: When creating a scene, it is now possible to choose it's desired layout, see documentation.
  • Engine: Fixed missing scaling of the font size in text runs when the text properties are scaled.
  • Editor/iOS: Fixed tiny canvas that could have been appeared after using the search in the asset library or after device orientation changes with an open sheet.
  • Engine: Fixed a memory leak in the minimp4 library.
  • Editor/iOS: Fix ClipTrimmingView not updating with undo/redo event.
  • Engine/Android: Exporting to image a previously archived scene or a scene generated from psd-tool should not result in an error.
  • Engine/Swift: Exporting to image a previously archived scene or a scene generated from psd-tool should not result in an error.
  • Editor/Flutter: Fixed scene would be exported as String instead of Uri on Android.
  • Editor/Web: Added UI to edit the Text Background.
  • Engine: Updated the canToggleBold and canToggleItalic block APIs to query the result also for text runs. This enables to use different typefaces in one text block. See set typeface documentation and text properties documentation .

Breaking Changes

  • Engine: Scopes are no longer enforced by default in the engine. The checkScopesInAPIs setting is now deprecated and set to false by default. A new setting boolean debug/enforceScopesInAPIs replaces it and is also set to false by default.

Non Breaking Changes

  • Engine: Added the setTextFontSize block API to change the font size also for text runs and not only for the whole text block, see docs).
  • Engine: Added the getTextFontSizes block API to query the set font sizes on runs, selections, or the whole text, see docs).
  • Engine: Added the setTextFontWeight block API to change the font weight also for text runs and not only for the whole text block, see docs).
  • Engine: Added the setTextFontStyle block API to change the font style (normal and italic) directly instead of using toggleItalicFont, see docs).
  • Engine: Added four new text-specific In and Out animations: typewriter_text, block_swipe_text, spread_text, merge_text.
  • Engine: Added textAnimationWritingStyle and textAnimationOverlap properties to most In and Out animations in order to be able to apply an animation to a text block piece by piece.
  • Editor/Web: Fixed an issue that prevented audio files from being removed using shortcuts.
  • Editor/Web: Fix an issue where in some cases, clips added to the background track are automatically trimmed.
  • Editor/iOS: Canvas menu is now hidden during timeline show/hide animation.
  • Camera/iOS: Fixed an issue where the "Off" item would incorrectly be displayed in the Reactions menu.
  • Engine/Swift: Fixed block.toggleBoldFont() and block.toggleItalicFont() to take the given range into account instead of applying the edit to the whole text.
  • Editor/Web: Fixed an issue causing video timeline control elements to overlap in smaller viewports.
  • Editor/Web: Fixed an issue that caused video timeline elements to move unintentionally when clicked.
  • Engine/Web: Fixed video export on empty scene on Windows 11.
  • Engine: Added the flag useExistingShapeInformation to the createCutoutFromBlocks API that allows using the existing vector paths of the provided blocks to create a cutout or to generate new shape information for the cutout.
  • Editor/iOS: Fixed importing videos from photo roll to use most compatible encoding.
  • Editor/Web: Fix icon in timeline play/pause button not centered in Chrome/Edge v130+
  • Editor/Web: Fix "unknown block" errors when window/tab switching after deleting a block via keyboard shortcut
  • Editor/Web: Fix editor crash when trying to add a video while trimming another video
  • Editor/Web: Fixed crash when replacing the videos in the editor via canvas action.

Breaking Changes

Non Breaking Changes

  • Editor/Web: Fixed bug where adding a page to a scene created by SceneAPI.createFromImage broke the Editor.
  • Editor/Web: Controls for adding, moving, or duplicating Pages are removed when editing scenes that use the 'Free' layout.
  • Editor/Web: Added Feature API key 'ly.img.page.add', which controls the 'Add Page' button in the Canvas Bar.
  • Editor/Web: Feature API for 'ly.img.duplicate' will now return false when a Page is selected and the Scene layout is set to 'Free' or 'DepthStack'.
  • Editor/Web: Copy/Paste using keyboard shortcuts now checks the Feature API for 'ly.img.duplicate'.
  • Engine/Swift: Added binding for forceLoadResources.
  • Engine/Android: Added binding for forceLoadResources.
  • Editor/Web: Enable page clipping by default
  • Editor/Web: Adds findAllPanels method to UserInterfaceAPI to get all panels in the web editor.
  • Engine/Android: Added 16 KB page sizes support for Android 15 devices
  • Editor/Web: Add tooltip options for builder components Button, Select and Dropdown
  • Editor/Web: Add ButtonGroup as builder component in the Customization APIs.
  • Camera/iOS: Added video reactions.
  • Editor/Web: Add registerPanel method to UserInterfaceAPI to allow registering custom panels in the editor.
  • Editor/Web: Show an export progress dialog when exporting a video from the editor.
  • Editor/Android: Fix "Add Audio" button in Video timeline always opening the default Audio library category.
  • Editor/Web: Fix wrong sizing of custom icons in the Dock
  • Editor/Web: Fixed custom icons in navigation and inspector bar not being displayed correctly.
  • Engine/Web: Exposed missing settings for 'page/allowCropInteraction', 'page/allowResizeInteraction', 'page/restrictResizeInteractionToFixedAspectRatio', 'page/allowRotateInteraction','page/allowMoveInteraction', 'defaultFontFileUri', and 'ruleOfThirdsLineColor'.
  • Engine/Web: Fixed type for setting 'controlGizmo/blockScaleDownLimit' to be float.
  • Editor/Web: Fixed a bug causing crop controls to not work properly with undo/redo.
  • Editor/Web: Fixed an issue where the "shape/change" scope could not be applied to rectangular shapes, images and videos.
  • Editor: Fixed the parent of a multi-selection to be udpated if the multi-selection is moved to another page. Caused the multi-selection frame to be stuck on the original page.
  • Editor/Web: Prevent the crop panel from automatically opening when the fill panel is active.
  • Editor/iOS: Reset trim offset to zero when replacing a block.
  • Editor/Web: Fixed an issue where some components did not update properly to external changes.
  • Engine: Fixed block.setTextCase, block.toggleBoldFont, and block.toggleItalicFont to determine the current style correctly and to not cause a potential index out-of-bounds memory access.
  • Editor/Web: Fix an issue where the clip is not visible in the timeline after clicking on the "Set as Clip" button.
  • Editor/Web: Fixed a bug where page duration in video editor would not update correctly after undo/redo.
  • Editor/Web: Fixed a translation issue with the zoom option label for 'Auto'.
  • Engine: Added the setTypeface block API to change the typeface of a text block while retaining the current formatting, e.g., bold or italic, if possible. See block docs and text properties docs for more details.
  • Engine: fix ordering of audio vs non-audio blocks. Moving an audio or non-audio block forward or backward shouldn't be hindered by non-audio or audio blocks.
  • Editor/Web: enable in the Feature API now accepts multiple IDs.
  • Editor/Web: Fix an issue where imported archive video scenes were throwing an error when exporting the video.
  • Editor/Web: Fixed a bug where the 'Change Animations' scope was shown outside of 'Video' mode.
  • Editor/Web: Fixed a bug where 'centered' sliders could no longer be adjusted using arrow keys, after setting their value to 0.
  • Editor/Web: Fixed a bug where the 'Change Shape' placeholder toggle was shown for stickers.
  • Editor/Web: Select components show the correct selection state, e.g. in the style selection of a font
  • Editor/Web: Add local state to registerComponent

Breaking Changes

Non Breaking Changes

  • Editor/Android: Fix "Add Audio" button in Video timeline always opening the default Audio library category.
  • Engine/Web: Exposed missing settings for 'page/allowCropInteraction', 'page/allowResizeInteraction', 'page/restrictResizeInteractionToFixedAspectRatio', 'page/allowRotateInteraction','page/allowMoveInteraction', 'defaultFontFileUri', and 'ruleOfThirdsLineColor'.
  • Engine/Web: Fixed type for setting 'controlGizmo/blockScaleDownLimit' to be float.

Breaking Changes

Non Breaking Changes

  • Editor: An outline highlight has been added to the outer image boundaries when cropping an image.
  • Editor/Web: Introduced support for block animations in the video Editor. Users now can add in, out, and loop animations to the clips in the video timeline.
  • Editor/Android: Added VideoEditor.
  • Engine/Swift: Added resource related bindings: EditorAPI.getResourceData, EditorAPI.relocateResource, EditorAPI.findAllTransientResources.
  • Engine/Swift: Added asset related bindings: AssetAPI.onAssetSourceUpdated, AssetAPI.assetSourceContentsChanged.
  • Editor/Web: Fixed several issues where components of the Advanced UI did not react to Feature API settings correctly.
  • Editor/Web: Fix an issue where the asset library would not load all items in some cases.
  • Editor/Web: Fix for the not closing confirmation dialog after an asset got deleted.
  • Editor/Web: Fix an issue where the fill inspector is shown even when the block does not have a fill
  • Engine: Fixed a bug in the dot pattern effect that was causing flickering when changing dot size while blur was set to zero.
  • Editor/Web: Fixed a bug with i18n/localization where nested keys would be resolved in the fallback language (instead of the current language).
  • Editor/Web: Fixed a bug with translation generation that would generate broken translation files.
  • Editor/Web: Fixes wrong icon sizes in Select dropdowns.
  • Engine: All fonts of typefaces that are used in a scene are now embedded in archives.
  • Engine: Added the editor API unstable_isInteractionHappening() to query if a user interaction is happening, which is useful, e.g., to not change the camera during the interaction.
  • Engine/Web, Editor/Web: Fixed an issue that prevented the keyboard from displaying on mobile devices when entering text edit mode.
  • Engine: Added option to control export audio and video bitrate via VideoExportOptions.audioBitrate, VideoExportOptions.videoBitrate.
  • Editor/Web: Fix: Crashing editor if theme variables used by engine are invalid
  • Editor/Android: Fix settings/scopes set in onCreate getting overriden.
  • Editor/iOS: Fix crash when a block have a small size
  • Editor: Fixed the aspect ratio lock for page, setting 'ubq://page/restrictResizeInteractionToFixedAspectRatio' (disabled by default), to not exceed inital frame.
  • Engine: Fixed audio playback for unarchived audio buffers.

Breaking Changes

Non Breaking Changes

  • Engine: Added option to control export audio and video bitrate via VideoExportOptions.audioBitrate, VideoExportOptions.videoBitrate.

Breaking Changes

  • Editor/Web: The @cesdk/cesdk-js used to bundle the @cesdk/engine project internally. Now, the two packages are separate and the CESDK has the engine package as a dependency. Normally, nothing should change for implementers when updating their @cesdk/cesdk-js version, but it is possible that under certain circumstances you might need to adapt your bundler configuration.

Non Breaking Changes

  • Editor/Web: Fix bug where entry.title was not used in the asset library sections (if no translation was found)
  • Engine: Fixed content-aware resize to not change the selection or edit mode.
  • Engine: Introduced new page setting to restrict the resize interaction to fixed-aspect ratio: 'ubq://page/restrictResizeInteractionToFixedAspectRatio', which is disabled by default.
  • Engine/Android: Added resource related bindings: EditorApi.getResourceData, EditorApi.relocateResource, EditorApi.findAllTransientResources.
  • Engine/Android: Added asset related bindings: AssetApi.onAssetSourceUpdated, AssetApi.assetSourceContentsChanged.
  • Editor/Web: Support uploading TIFF files via the UI
  • Engine: fix cutout contours of images containing no pure transparency to be the exact rectangular frame of the image.
  • Editor/Web: Restore functionality to move elements using the arrow keys.
  • Engine/Web: With this release we are publishing our Reactor API for reactive integrations between the Creative Engine and your app's user interface. See https://img.ly/docs/cesdk/engine/guides/reactor/ for more information
  • Engine: Added forceLoadResources to manually trigger the fetching or loading of resources associated with the given block and its children.
  • Engine/Web: Added binding for forceLoadResources.

Breaking Changes

  • Editor/Web, Engine/Web: Configuration options, APIs and types that have been deprecated in Version 1.13 have been removed.

    The ConfigTypes namespace has been removed and the following type definitions in it have been removed without replacement since they are not used anymore:

    • ConfigTypes.Scene
    • ConfigTypes.Page
    • ConfigTypes.ColorDefinition
    • Configtypes.ColorPaletteDefinition
    • ConfigTypes.Variables
    • ConfigTypes.VariableDefinition
    • ConfigTypes.Callbacks
    • ConfigTypes.TemplateDefinition
    • ConfigTypes.Preset
    • ConfigTypes.Presets
    • ConfigTypes.AssetSources

    Other types in the ConfigTypes namespace might still be used and can be imported directly from @cesdk/engine or @cesdk/cesdk-js:

    • ConfigTypes.Color as PaletteColor
    • Asset source related types
      • ConfigTypes.QueryData as AssetQueryData
      • ConfigTypes.AssetResult as AssetResult
      • ConfigTypes.AssetsQueryResult as AssetsQueryResult
      • ConfigTypes.AssetSource as AssetSource when working with the Asset API
    • ConfigTypes.HexColorString as HexColorString
    • ConfigTypes.PageFormatDefinition as PageFormatDefinition from @cesdk/cesdk-js
    • ConfigTypes.TypefaceDefinition as TypefaceDefinition (deprecated, use the Asset API to define custom typefaces instead)

    The following Settings have been removed. For detailed instructions on how to migrate away from them, consult the Migrating to v1.13 guide

    • config.scene
    • config.page
    • config.assetSources
    • config.presets.colors
    • config.presets.colorPalettes
    • config.presets.pageFormats
    • config.variables
    • config.callbacks.logger
    • config.initialImageURL
    • config.initalSceneMode
    • config.initialSceneString
    • config.initialSceneURL
    • config.presets.templates: Since version 1.12 this setting has been deprecated. See the Adding Templates guide for instructions on how to use the AssetAPI to add templates.
    • config.defaultFont: Since version 1.13 it has been deprecated in the Engine, but not in the Editor. In the Editor this setting has been ignored since version 1.26. There is no replacement for this setting.

    Additionally the following types and APIs have changed and might require adjustments:

    • The CreativeEditorSDK.init method has been removed. Use CreativeEditorSDK.create instead
    • The CreateConfiguration type exported from @cesdk/cesdk-js has been removed. Use Configuration instead.
    • CreativeEditorSDK.setVariableDefinitions has been removed. Use the Variable API instead.
  • Editor/Android: onClose callback now contains an optional Throwable parameter in the composable functions of all the solutions. If the value of this parameter is not null, it means that the editor is closed due to an error. The value is propagated from EditorEventHandler.sendCloseEditorEvent. Unless custom types are sent to this function, throwable is always going to be either an EditorException or EngineException.

Non Breaking Changes

  • Engine: Fixed content-aware resize to not result in a distorted image if a page with an image fill is resized.
  • Editor: Added drag selection for easy selection of multiple elements.
  • Engine/Swift: New functions to load a scene from an archive, and to save and load block to an archive.
  • Engine/Swift: Add getState and setState to manually set the state of a block to .pending, .error or .ready. Add onStateChanged to be notified of a block's change of state.
  • Engine/Android: Add getState and setState to manually set the state of a block to Pending, Error or Ready. Add onStateChanged to be notified of a block's change of state.
  • Editor/iOS: Fixed some videos that played back audio slower than expected.
  • Engine: Use a more common time scale for the audio track of exported videos.
  • Editor/Web: Fixed an issue where some built-in Inspector Bar Components did not react immediately to Feature API calls.
  • Editor/Web: Fix fill panel overlapping other panels
  • Editor/Web: Preview mode is being exited on applying new template
  • Editor/Web: Fixed that multi-selecting several pages causes the editor to automatically scroll and wrong pages being selected.
  • Editor/Web: Fix elements being selected during gesture based scrolling via touch input
  • Editor/Web: Undo/redo does not change zoom level anymore
  • Editor/Web: Pasting elements now adds an undo/redo history step
  • Editor: Introduced new control gizmo settings blockScaleDownLimit to control how small a block can be resized with the gizmos or with touch gestures.
  • Editor: Fixed the dimming overlay when editing the crop of an page with an image fill to only dim the part out of the page.
  • Editor/Web: Select all elements after duplicating multiple elements
  • Editor: Multi-selection of elements across different pages is disabled to prevent unexpected editing behavior.
  • Editor: The clampCameraCommand skips clamping while the page size or position is being edited with user interaction. This prevents that the camera is changed, while editing the page with drag handles or gestures.
  • Editor/Web: Fix canvas menu position on multiselection
  • Engine: Fixed the onClick subscription to send notifications for clicks or taps that select elements that were previously not selected. In some cases, these events were not sent.
  • Engine: Fix a false positive video encoding time out error that can be encountered due to slow resource fetching.

Breaking Changes

  • Engine: Improved getCurrentPage() to prioritize the selected page over the nearest page to the viewport center if the selected page is visible for more than 25%. The previous behavior can be retained by swapping out getCurrentPage() with, e.g., findNearestToViewPortCenterByType(scene, "page").unwrap()[0].

Non Breaking Changes

  • Editor/Android: Added polygon shape corner radius
  • Editor/Android: Added rect corner radius
  • Editor/Web: Update german translations for advance text UI
  • Editor/iOS: Fixed potential crash when exiting editor from text edit mode.
  • Editor/iOS: Fixed loading scenes that contained a preselected placeholder were showing an invalid image replace sheet at startup.
  • Editor: Made the move handle gizmo configurable via controlGizmo/showMoveHandles
  • Editor/Web: UI added for applying rounded corners to rectangle and polygon shapes

Breaking Changes

  • Editor/Web: The configuration config.ui.elements.libraries.insert.entries, config.ui.elements.dock.groups and config.ui.elements.dock.defaultGroupId is now deprecated in favor of the new Asset Library Entry and Dock APIs. During this deprecation phase config.ui.elements.libraries.insert.entries is still called but with a slightly different behavior. Instead of being called repeatedly with the current context (like the selected block), it is now called only once while the editor initializes. Most use-cases should not be affected by this breaking change, but if you rely on this behavior you need to migrate to the use of the Asset Library Entry and Dock APIs and change the dock in a selection subscription.
  • Editor/Web: The configuration config.ui.elements.libraries.replace.entries is now deprecated in favor of the new Asset Library Entry API and cesdk.ui.setReplaceAssetLibraryEntries. Until it is removed, config.ui.elements.libraries.replace.entries will still be called and migrated to return IDs of entries that should be available via the Asset Library Entry API. If an entry is returned with an ID that is not present in the store, it will be added. If the returned entry differs from the store, a warning will be printed.

Non Breaking Changes

  • Engine: Added fade properties to the slide, blur and crop_zoom animations.
  • Engine: Reduced the fade duration of the pop animation to half of the total animation duration.
  • Editor/Web: Introduces addPlugin method to add a plugin to the editor
  • Engine: Introduces addPlugin method to add a plugin to the engine
  • Engine: Added a "Trim" default edit mode.
  • Engine: The setPlaying API now only changes the current edit mode if it is being called on a page block.
  • Editor/iOS: Added voiceover.
  • Editor/iOS: Audio thumbnails now display the correct waveform from the audio.
  • Editor: Fixed resizing of multiple selected elements in scenes that have pixel as design unit. Pixel snapping is disabled in that case to not resize the individal elements differently.
  • Engine: Fixed that the enabled option was not being serialized for effects and therefore disabled effects were enabled after loading.
  • Engine: Fixed that text lines or words could be accidentally clipped off if in a tight frame due to floating point precision limitations.
  • Editor/Web: Multiple APIs to customize the web editor are now public (see customization documentation for further details): registerComponent, setDockOrder, getDockOrder, setInspectorBarOrder, getInspectorBarOrder, setCanvasMenuOrder, getCanvasMenuOrder, setNavigationBarOrder, getNavigationBarOrder, setCanvasBarOrder, getCanvasBarOrder, addAssetLibraryEntry, updateAssetLibraryEntry, removeAssetLibraryEntry, getAssetLibraryEntry, findAllAssetLibraryEntries, setBackgroundTrackAssetLibraryEntries, getBackgroundTrackAssetLibraryEntries, setReplaceAssetLibraryEntries and addIconSet.
  • Editor/iOS: Disabled auto-correct on text blocks to prevent rare crashes

Breaking Changes

  • Editor/Web: The minimum required web browser versions have been updated to Firefox 115, Safari 15.6, Chrome 114, Edge 114.
  • Engine/Web: The minimum required web browser versions have been updated to Firefox 115, Safari 15.6, Chrome 114, Edge 114.
  • Engine/Swift: Packages for Apple platforms are now built with Xcode 15.4 and Swift 5.10, which is the new minimum requirement for using them.
  • Editor/Swift: Packages for Apple platforms are now built with Xcode 15.4 and Swift 5.10, which is the new minimum requirement for using them.

Non Breaking Changes

  • Engine: Local asset sources and scene asset sources support allow sorting of the result, see docs).
  • Engine: When duplicating a block, the duplicate's name will be unique. (i.e. "block-name (2)", "block-name (3)", etc.)
  • Engine: Deprecated the hasFill, hasContentFillMode, hasShape, hasCrop, hasOpacity, hasBlendMode, hasEffects, hasBlur, hasBackgroundColor, hasStroke, hasDropShadow, hasPlaceholderBehavior, hasPlaceholderControls, hasDuration, hasTimeOffset, hasTrim, hasPlaybackTime, hasPlaybackControl APIs and replaced them with equivalent APIs with a supports prefix instead of has for better readability and clarity of functionality. These APIs return whether a specific functionality is generally supported by a given block.
  • Engine: Deprecated the hasEffectEnabled API. All effects can be enabled and disabled.
  • Engine: Clipping is temporarily disabled when editing crop to give more context to the user.
  • Editor/Web: Add auto size and layout updates to advance text updates
  • Editor/iOS: Added advanced text options.
  • Editor/Android: Advanced text format options are now directly accessible at the first level.
  • Editor/Android: Added text frame behaviour "Auto Size" to text format options, allowing text frames to automatically adjust their size based on the content.
  • Editor/Android: Added text format options for font family weight/style, text casing, and paragraph spacing
  • Editor/Android: Added audio preview in asset library.
  • Engine: Added createAnimation API for creating new animation objects.
  • Engine: Added supportsAnimation API for checking whether a block supports animations.
  • Engine: Added setInAnimation, setLoopAnimation, and setOutAnimation APIs for assigning animation objects to a design block.
  • Engine: Added getInAnimation, getLoopAnimation, and getOutAnimation APIs for querying the currently assigned animation objects of a design block.
  • Engine: Added Slide, Pan, Fade, Blur, Grow, Zoom, Pop, Wipe, Baseline, Crop Zoom and Spin In / Out animations.
  • Engine: Added Spin, Fade, Blur, Pulsating, Breathing, Jump, Squeeze, Sway Loop animations.
  • Editor/Web: Introduced a new User Interface API to register and control custom dialogs.
  • Editor/iOS: Fixed the initial the text cursor position after entering text editing mode.
  • Editor: Content fill mode 'Contain' is now maintained when changing the frame with the edge handles. Before it was changed to 'Crop'.
  • Engine: Setting a crop rotation with setCropRotation on elements with content fill modes 'Contain' and 'Cover' is now possible. Before, the fill mode was automatically changed to 'Crop'. For fill mode 'Contain', the output changes accordingly, for 'Cover' and 'Crop' it stays the same.
  • Engine: Setting a crop flip with flipCropHorizontal or flipCropVertical on elements with content fill mode 'Cover' is now possible. Before, the fill mode was automatically changed to 'Crop'. The output stays the same.
  • Engine: The property image/fill/sourceSet now keeps its sources sorted by width.
  • Engine: A new function addImageFileURIToSourceSet allows adding a new source to a source set property.
  • Engine: The property image/fill/imageFileURI is deprecated. Use getSourceSet(block, "fill/image/sourceSet", sourceSet) instead.
  • Editor/Web: fix an issue where an error is thrown when switching between different video scenes.
  • Editor/Web: Asset library animates only its opacity and removes the subtle shift animation.

Breaking Changes

Non Breaking Changes

  • Editor/Android: Added PhotoEditor.
  • Editor/iOS: Added corner radius for rect and polygon shapes, images and videos.
  • Engine: Added an asset source with id 'ly.img.scene.colorss' that automatically provides all used colors in the current scene.
  • Editor/Web: When setting the ui.elements.libraries.insert.backgroundTrackLibraryEntries is set to an empty array, the add clip button will not be shown in the video UI
  • Editor/iOS: Added audio preview in asset library.
  • Editor/Web: Fix generated CSS theme tokens popover overflowing on small viewports
  • Engine: Fixed that changed scopes could get reset on undo/redo
  • Editor/Web, Engine/Web: Video export in a web worker supports custom URL resolvers now. This requires that the custom resolver does not reference any variables outside of its scope. The resolver function will receive the default resolver as its second argument.

Breaking Changes

  • Engine: Always allow camera movement for adopters in existing scenes and make that the default for newly created scenes. If you rely on the layer/move scope of the camera block, this version will force that scope to be set to be enabled.
  • Engine/Android: BlockApi.export now returns ByteBuffer instead of ByteArray.
  • Engine/Android: BlockApi.exportWithColorMask now returns ByteBuffer instead of ByteArray.
  • Engine/Android: BlockApi.exportVideo now returns ByteBuffer instead of File.
  • Engine/Android: SceneApi.saveToArchive now returns ByteBuffer instead of ByteArray.
  • Engine/Android: EditorApi.getBufferData now returns ByteBuffer instead of ByteArray.
  • Engine/Android: EditorApi.setBufferData now accepts ByteBuffer instead of ByteArray.

Non Breaking Changes

  • Editor: Pages can now optionally be cropped, resized, moved, and rotated with editor handles or gestures if allowed by scope, the scene layout, and the newly introduced page settings.
  • Engine: Introduced new page settings to control if pages can be transformed with handles (if allowed by scope and the scene layout): 'ubq://page/allowCropInteraction', which is enabled by default and 'ubq://page/allowRotateInteraction', , 'ubq://page/allowResizeInteraction', and 'ubq://page/allowMoveInteraction', which are disabled by default.
  • Engine: Fixed scale touch/pinchAction in crop mode to not require layer/resize but layer/crop scope.
  • Editor/Android: LibraryCategory now accepts an optional parameter isHalfExpandedInitially that configures whether the bottom sheet of assets should be displayed half-expanded or fully expanded initially. Default value is false.
  • Editor/iOS: Added PhotoEditor.
  • Editor/Web: Update icons to updated 24px version
  • Editor/Web: Improve the titles on the audio clips in the video timeline.
  • Editor/Android+iOS: Fixed that a touch pinch crop gesture on an image with a non-zero straighten value could lead to an invalid crop.
  • Editor/Web: Fix an issue where if a video or an audio is replaced with a shorter one, the duration of the clip is not updated.
  • Engine: New functions to load a scene from an archive, and to save and load block to an archive.
  • Engine: PDF exports can now make use of the GPU to accelerate image filter processing.
  • Editor: Fixed a snapping issue on mobile devices where the snapping while changing the size of an element could sometimes be slightly off making it hard to achieve the desired size.
  • Editor/Web: Fix some icons in timeline and dashboard being rendered too large

Breaking Changes

  • Editor/iOS: AssetLibrary protocol requires an elementsTab property.
  • Editor/Web, Engine/Web, Editor/Node: Removes default asset sources from the release folder.

If you have served our assets with your own server and use the default asset sources, you need to download the default asset source zip (https://cdn.img.ly/assets/v3/IMGLY-Assets.zip)

Non Breaking Changes

  • Engine: Added corner rounding to the rectangle and polygon shapes, see cornerRadius properties here.
  • Editor/iOS: Fixed VideoEditor was uploading images to video upload asset source instead of image upload asset source.
  • Editor/iOS: Fixed zoomed image in crop mode was accidentally reset when using the straighten slider.
  • Editor/Web: Fix an issue where the context.group passed to the onUpload callback doesn't reflect the actual group ID where the file is being uploaded.
  • Engine/Swift: Fixed potential data race for applyAsset and applyAssetToBlock closures of AssetAPI.addLocalSource.
  • Editor/Web: Fix a performance issue when page titles are enabled in the video editor.
  • Engine: Add support for more WAV files.
  • Engine: Fix a transformation issue with some videos sent via WhatsApp.
  • Editor/Web: Fix an issue where clicking reset duration in the trim inspector throws an error
  • Editor/Web: Display a blue overlay in the trim inspector if the clip exceeds the full video duration
  • Editor/Web: Fixed a bug where panels cannot be fully used on small viewports.

Breaking Changes

Non Breaking Changes

  • Editor/Web: Fix an issue where the context.group passed to the onUpload callback doesn't reflect the actual group ID where the file is being uploaded.
  • Editor/Web: Fix a performance issue when page titles are enabled in the video editor.

Breaking Changes

  • Engine/Android: Bump minSdk support from 23 (Android 6) to 24 (Android 7)

Non Breaking Changes

  • Engine: Support playback of WAV audio files.
  • Editor: Fix an issue where the uploaded audio files don't have a thumbnail when using localUpload
  • Editor: Fix missing german translation in our demo audio asset source
  • Engine: Fixed the issue of text blocks using the fallback font for a moment whenever a new font is selected that is not yet loaded.
  • Engine: Fixed the previously inverted png compression level in the export options. 0 = no compression, 9 = max compression.
  • Engine: Fixed the resizeContentAware API to not change the child order of any of the blocks in the scene.
  • Engine: Process thumbnail rendering in request order and limit processing time per engine update to avoid UI freezes.
  • Editor/Web: Show milliseconds in the time stamps across our video Editor
  • Editor/Web: Render the video timeline below the panels as opposed to beside them to prevent layout break on smaller viewports..

Breaking Changes

Non Breaking Changes

  • Editor/Web: Fix an issue where the context.group passed to the onUpload callback doesn't reflect the actual group ID where the file is being uploaded.

Breaking Changes

  • Engine: APIs that perform edits now throw errors if the corresponding scopes are not available (either globally or on the block). In order to disable these checks in all APIs, call setSettingBool('checkScopesInAPIs', false). Otherwise, you must use the isAllowedByScope API to check whether all required scopes are available before calling APIs.

Non Breaking Changes

  • Editor: Text elements with auto-height or auto-width can now be changed in height and width with the resize handles. The mode will switch to fixed-width.
  • Editor/Web: Add document colors library to color panel
  • Engine: Add buffer API:
    • EditorAPI.createBuffer
    • EditorAPI.destroyBuffer
    • EditorAPI.setBufferData
    • EditorAPI.getBufferData
    • EditorAPI.setBufferLength
    • EditorAPI.getBufferLength
  • Engine: Audio blocks can now play raw audio data from referenced buffers
  • Editor: Fix an issue where the canvas action menu is shown on the canvas when an audio element is selected
  • Engine: Fix an issue where audio from videos that were excluded from the export was still included in the export.
  • Engine: Fix an issue where video thumbnails would not show up after switching graphics contexts.
  • Editor/Swift: Resolved an issue that made scenes appear small before being adapted to the proper device size.
  • Editor/Swift: Fix potentially corrupted history that might have erased scene changes done in onCreate.
  • Editor/Swift: Enhanced the video editor timeline with smooth animations for showing or hiding elements.
  • Editor: Fix an issue where the close button of the trim inspector doesn't work
  • Editor: Fix an issue where the editor stays in crop-mode after closing the crop inspector
  • Editor: Improved the design and interaction areas of resize, rotation, move, and crop handles.
  • Editor/Swift: Add support for Recolor and Green Screen effects
  • Engine/Swift: Change default assets' CDN path from https://cdn.img.ly/assets/v2 to https://cdn.img.ly/assets/v3
  • Engine/Swift: Added PrivacyInfo.xcprivacy containing information on the data collected by the SDK.
  • Engine/Web: Add getState and setState to manually set the state of a block to Pending, Error or Ready. Add subscribeToBlockState to be notified of a block's change of state.
  • Editor/Web: Fixed moving and resizing of elements to be not in sync with the mouse when more than one page is shown and the zoom level is below 100%.
  • Editor: Improve the way the seconds and ticks are calculated and displayed on the video timeline
  • Editor: Increase the zoom range of the video timeline
  • Editor: Update the initial scale of the clips in the video timeline
  • Editor: Clips in the video timeline will now adjust to different scaling configurations
  • Editor: Fix Add Clip button is not adjusting to its label length
  • Editor: Introduce a Fit View zoom control into the video timeline that will automatically adjust the zoom level to fit the view when pressed

Fonts

  • Engine: Added BlockAPI.canToggleBoldFont and BlockAPI.canToggleItalicFont that return whether the specified range of a given text block can be toggled between a bold and normal weight or a normal and italic style, based on whether the corresponding font is part of the typeface that is currently used by the text block.
  • Engine: Added BlockAPI.toggleBoldFont to toggle a text block between the normal and bold fonts of its current typeface.
  • Engine: Added BlockAPI.toggleItalicFont to toggle a text block between the non-italic and italic fonts of its current typeface.
  • Engine: Added BlockAPI.setFont to allow the font of a text block to be changed.
  • Engine: Added BlockAPI.getTypeface for querying the typeface that is currently used by a text block.
  • Engine/Android: Added a new default asset source: DefaultAssetSource.TYPEFACE.
  • Engine/Swift: Added a new default asset source: DefaultAssetSource.typeface.
  • Engine: Changed the FontWeight string Light to light to be consistent with the other enum cases.
  • Engine: Moved the definition of font assets from extension packs to asset sources.
  • Editor: Deprecated the registration of custom fonts via the editor configuration. Create a custom asset source instead and define the meta.typeface object of each typeface asset. A typeface consists of a name (the font family name) and a list of all fonts that belong to this typeface.
  • Engine: Replaced extension packs used by the Java bindings with asset sources. You now have to provide JSON strings containing the asset source definitions when initializing the CESDK Java instance. See the updated Java binding example app README for more details.
  • Engine: The text/fontFileUri property is now read-only. In oder to change the font of a text block, the new setFont API must be used.
  • Editor/Android: Class TextAssetSource now also requires a new parameter typeface: Typeface.
  • Editor/Swift: Class TextAssetSource now also requires a new parameter typeface: Typeface or needs to be initialized async.

Breaking Changes

Non Breaking Changes

  • Editor/Android: Add support for Recolor and Green Screen effects
  • Editor/Android: Change assets' cdn path from https://cdn.img.ly/assets/v2 to https://cdn.img.ly/assets/v3
  • Engine: Fixed generating cutouts from flipped blocks not taking flip into account
  • Engine: Allow alignment of elements within a track.
  • Editor/Web: Fix asset library card labels all referencing to first item in collection
  • Camera/Swift: Fixed a flash problem when the app transitions to the background and then returns to the foreground.
  • Camera/Swift: Fixed a flash problem that occurred when switching the camera mode from dual to single.
  • Editor/Web: Fix canvas menu layout bugs
  • Editor/Swift: Adjust UI behavior for reordering elements in Z position.
  • Editor/Swift: Hide reorder buttons for fixed elements such as audio tracks.
  • Editor: Fix an issue where the trim inspector stays open after replacing a video
  • Editor/Swift: Resolved an issue preventing users from trimming the same track after undoing a trim operation.
  • Editor/Web: Fix ungrouping elements always focusing the first page
  • Engine: Fixed SceneAPI.getCurrentPage() to also return pages that have an image fill.
  • Editor/Web: Add audio preview player to audio assets
  • Engine: Fix a PDF export issue where images would have a low resolution or wouldn't be included when using more than one page.
  • Editor: Pause the video playback when adding a new block from the asset library
  • Editor: Pause the video playback when editing
  • Engine: Removed the role enum setting and replaced it with dedicated setRole/getRole commands. Add subscribeToRoleChange method to register callbacks that are notified when the role changes. This can be used to configure the engine differently for individual editor roles.
  • Engine: Fixed colored shapes with transparency not rendered with transparency when exporting to PDF format.
  • Editor: Fix an issue where the video seeker stays at it's position when zooming and then jumps when interacting

Breaking Changes

  • Editor: When adding a video or an image to an empty scene through the asset library, they will now be added as background clip

Non Breaking Changes

  • Editor: Updated the icon of the Set as Background action in the context menu and changed the label to Set as Clip
  • Editor: Updated the icon of the Detach from Background action in the context menu and changed the label to Set as Overlay
  • Editor: Added a new Mute/Unmute Volume action for audio and video clips in the context menu
  • Editor: Added a new Trim action for audio and video clips in the context menu
  • Editor: Fix an issue where the context menu appears at the top corner of the window when scrolling the timeline while the context menu of a clip is open
  • Editor: Change the label of the add button in the timeline to Add Clip
  • Editor: Make the Add Clip button in the video timeline more prominent
  • Engine: Improved resizing of groups and video tracks when applying content aware resizing.
  • Editor: Separators are not rendered between every menu item but only between certain "groups"
  • Engine: Add EditorAPI.findAllScopes API to retrieve a list of all available scopes.
  • Editor: Undoing other image adjustments does not revert previously activated blur in certain situations
  • Editor: Update the Clips in video timeline to use the MM:SS format as a time stamp
  • Editor: Fix some incorrect color tokens in the video timeline
  • Editor: Video playback now stops automatically when entering crop mode or text editing.
  • Editor: To make it more obvious, which handle is interacted with, resize, rotation, move, and crop handles are now highlighted when hovered and dragged and other handles handles are hidden.
  • Editor: Added the setting handleFillColor for changing the fill color of handles, see editor settings.
  • Editor/Web: Add Recolor & Greenscreen effects
  • Editor: Fix an issue where the canvas jumps when trying to replace an image placeholder in adopter mode

Breaking Changes

  • Editor: When adding a video or an image to an empty scene through the asset library, they will now be added as background clip
  • Editor: By default, all panels now open on the left hand side and are fixed
  • Engine/Swift: Packages for Apple platforms are now built with Xcode 15.1 and Swift 5.9, which is the new minimum requirement for using them.
  • Editor/Swift: Packages for Apple platforms are now built with Xcode 15.1 and Swift 5.9, which is the new minimum requirement for using them.

Non Breaking Changes

  • Engine: Add BlockAPI.generateAudioThumbnailSequence API to generate data for drawing audio wave patterns.
  • Editor: Improved the idle performance.
  • Editor: Improved resizing, elements can be resized by dragging the edge instead of only the resize handle.
  • Editor: UI can now show editable color properties in the 'Effects' panel.
  • Editor: Fixed the selection of elements with touch input not being possible for elements that have another element under it that was selected before.
  • Editor: Improved double-tap detection on touch devices.
  • Editor: Fix dropped canvas menu items for entering/selecting a group
  • Engine/Swift: Fixed cursor and selection interaction during on-canvas text editing in iOS 17
  • Engine: BlockAPI.fillParent now uses the parent's parent if the parent is a //ly.img.ubq/track or //ly.img.ubq/group.

Breaking Changes

  • Engine: When applying boolean 'intersection' on elements, the order of operation is reversed to have the fill of the bottom-most instead of the top-most element in the result.
  • Editor: New color design tokens and button active state refactor

Non Breaking Changes

  • Editor: The default position of the video timeline scroll is now at the bottom for foreground tracks
  • Editor: The video timeline will automatically scroll into an element when added to the timeline if it's out of view
  • Editor: Ungrouping a group keeps its childre selected
  • Engine: Fixed strokes on sharp edges beeing cut off too early, e.g., on very pointy star shapes.
  • Engine: Addressed an issue where using the video export web-worker in certain scenarios could lead to CSP issues.
  • Engine: Fix an issue where elements detached from background were ordered behind the background when using SceneAPI.createFromVideo.
  • Editor: Fix an issue where the time ticks from the video timeline ruler were not showing on initial load

Breaking Changes

Non Breaking Changes

  • Engine: fixed horizontally flipped blocks incorrectly showing up rotated by 180º in thumbnails
  • Engine: Fixed cases where the export may not wait for all fonts included in a text.
  • Engine: resize, rotate, scale now handle //ly.img.ubq/track blocks.

Breaking Changes

  • Engine: Fixed depiction of SVG images with content exceeding the SVG viewport/viewbox. The outside content is now properly clipped.
  • Engine: Scenes in video mode are now structured differently. Instead of the scene forming a single timeline which plays each page in order, now every page has its own independent timeline. The APIs for querying and adjusting the playback time and for exporting videos have to be called on the page blocks. Audio blocks have to be parented to the page in which they should play, as opposed to being parented to the scene like they were before.
  • Engine: BlockAPI.exportVideo now requires a page block instead of a scene.
  • Engine: Remove scene/defaultPageDuration property.
  • Editor: Introduce a new and more advanced video timeline.

Non Breaking Changes

  • Editor: Asset Library Cards configured with cardLabelPosition = 'below' are rendered correctly.
  • Editor: Additional UI configuration option cardLabelTruncateLines on type AssetLibraryEntryView.
  • Editor: Add shadow controls to inspector bar
  • Editor: Uploading an asset during replacement auto-applies it and auto-closes panel per default
  • Editor: Library sections are now scrollable
  • Editor: Added setting camera/clamping/overshootMode: 'Center' | 'Reverse' to control the camera clamping behavior for the `ClampCameraPosition`` API.
  • Engine: Cutout blocks no longer have a blend mode.
  • Engine: Added an editor API for querying the export size limit on the current device: getMaxExportSize().
  • Engine: Added export options to generate an underlayer when exporting to a PDF file.
  • Engine: Fixed a bug that could lead to infinitely delayed exports when trying to export a block hierarchy containing a non-exportable block.
  • Editor: Fixed sporadic scene loading error introduced in version v1.19.0.
  • Engine: Ensure block destroyed events are sent to subscribers after loadScene to prevent invalid access to deleted elements from the previous scene.
  • Editor: Fix range inputs (aka slider) not working properly if inline text editing is active
  • Engine: (Web/video) Fix a leak where we wouldn't free unused video textures.
  • Engine: generateVideoThumbnailSequence now also accepts arbitrary design blocks that are children of pages.
  • Engine: Deprecated the getTotalSceneDuration API. Instead, the getDuration API should be called and passed a page block.
  • Engine: Update the supported Unicode version from 14.0 to 15.1
  • Editor: Fixed on-canvas text input composition for Korean text in the Web editor
  • Editor: Adds an API to add, update and dismiss notifications
  • Editor: Canvas menu items "Delete" and "Duplicate" have icons only now
  • Engine/Swift: Fixed BlockAPI.scale(_:,to:,anchorX:,anchorY:) would ignore anchorX and anchorY.
  • Engine/Android: Added onPreExport callback to all BlockApi.export* functions.
  • Engine/Swift: Added onPreExport closure to all BlockAPI.export* functions.
  • Engine/Swift: Fixed memory leak for video exports.
  • Engine/Swift: Fixed URL resolver for video exports.
  • Engine: Added a //ly.img.ubq/track design block whose purpose it is to automatically adjust the time offsets of its children based on their duration so that they play one after another without gaps in the timeline.
  • Engine: Add BlockAPI.isVisibleAtCurrentPlaybackTime.
  • Editor: A new ui.elements.libraries.backgroundTrackLibraryEntries configuration option which allows to configure which library entries should be shown when opening and insert library panel for background clips in video mode.
  • Engine: Improve audio support for QuickTime video files.

Breaking Changes

  • Editor: The distributed file for the CE.SDK (@cesdk/cesdk-js package on npm) has changed from the CommonJS to the ECMAScript Module format. This means:

    • If you've been using the CE.SDK from your own node_modules folder in combination with a bundler, nothing should change for you. The bundler will process the module as before.

    • If you were loading our CDN version directly into your web page, and then accessing the CreativeEditorSDK global variable, we instead recommend to either change your script to ECMAScript module, or use the import() function to load the CreativeEditorSDK:

      <script type="module">
      import CreativeEditorSDK from 'https://cdn.img.ly/packages/imgly/cesdk-js/1.19.0/index.js';
      await CreativeEditorSDK.create('#container');
      // ...your code
      </script>
      <script>
      import('https://cdn.img.ly/packages/imgly/cesdk-js/1.19.0/index.js').then(
      async ({ default: CreativeEditorSDK }) => {
      await CreativeEditorSDK.create('#container');
      // ...your code
      }
      );
      </script>
  • Engine: Fixed visual glitches in the following effects: "Pixelize", "Radial Pixel", and "Dot Pattern"

  • Engine: We've added a new feature called sourceSet to image fills. This lets you use a group of images, each with different sizes, to draw the image. The engine will pick the best size and load it as needed. You can learn more about this in the guide. Remember, if you have a fileImageURI, the sourceSet will take precedence. If your code changes the imageFileURI, you need to update it to work with the sourceSet as well.

  • Editor: We've updated our Unsplash and Demo sources. They now come with a full set of images in different sizes. This means that any block you create using an image from these sources will automatically have its sourceSet property populated.

Non Breaking Changes

  • Engine: Exported TGA images now include an alpha channel.
  • Editor: Assets from the asset library can now be dragged on the canvas to apply the asset
  • Editor/Web: Fix potentially corrupted video export.
  • Editor: Added new settings to configure how the page title is displayed, see documentation.
  • Editor: Adds setPanelPosition to the UserInterface API
  • Editor: Adds setPanelFloating to the UserInterface API
  • Editor: Adds options to openPanel to override position and floating settings
  • Editor: CanvasMenu component border color uses token --ubq-border-default and has box shadow added.
  • Editor/Engine: Using a web worker for video exports
  • Engine: Added mousewheel support The CreativeEngine canvas now supports mouse wheel events on the canvas to scroll and zoom the scene. The CreativeEngine instance gained a new method, setWheelEventTarget, which can be used to reinstall the event listener on another DOM element. This can be useful for situations where custom DOM elments are positioned on top of the canvas. Two engine settings have been added to enable/disable scrolling and zooming: mouse/enableZoom and mouse/enableScroll, both default to true.
  • Engine: Removed arbitrary strings for engine settings from the TypeScript definitions. Passing arbitrary strings to methods such as setSettingBool or setSettingString was never actually supported. The types have been adjusted to reflect that fact.
  • Editor/Engine: The Typescript types of the getSetting/setSetting methods in the EditorAPI have been made more strict:
    • Previously, Typescript allowed arbitrary strings as keys, which would have led to an error at runtime. These have been removed.
    • Support for prefixing settings keys with ubq:// will be removed in a future version. The function signatures have been updates to provide a deprecation warning.
    • A few boolean settings not meant for public use have been removed.
  • Engine: Add support XAVC videos.
  • Engine/Editor: Add missing settings to the Typescript type definitions in the EditorAPI.

Check our migration guide for more details on the changes.

Breaking Changes

  • The editor now sets all scopes directly for the selected target block. (Previously, the scope content/replace was set for the associated fill block instead.)
  • Use of the following scopes is being deprecated in favor of new, more granular scopes:
    • content/replace - Use a combination of fill/change and text/edit instead.
    • design/arrange - Use a combination of layer/move, layer/resize, layer/flip, and layer/rotate instead.
    • design/arrange/move - Use layer/move instead.
    • design/arrange/resize - Use layer/resize instead.
    • design/arrange/flip - Use layer/flip instead.
    • design/arrange/rotate - Use layer/rotate instead.
    • design/style - Use a combination of layer/opacity, layer/blendMode, appearance/adjustments, appearance/blur, appearance/effect, appearance/filter, appearance/shadow, shape/change, stroke/change, fill/change, and text/character instead.
  • Translations have been updated:
    • Removed the following keys:
      • scope.content.replace
      • scope.design.arrange
      • scope.design.style
    • Renamed the following keys:
      • scope.design.arrange.flip is now scope.layer.flip
      • scope.design.arrange.move is now scope.layer.move
      • scope.design.arrange.resize is now scope.layer.resize
      • scope.design.arrange.rotate is now scope.layer.rotate
    • Added the following keys:
      • component.placeholder.appearance.description
      • component.placeholder.appearance
      • component.placeholder.arrange.description
      • component.placeholder.arrange
      • component.placeholder.disableAll
      • component.placeholder.enableAll
      • component.placeholder.fill.description
      • component.placeholder.fill
      • component.placeholder.general.description
      • component.placeholder.general
      • component.placeholder.shape.description
      • component.placeholder.shape
      • component.placeholder.stroke.description
      • component.placeholder.stroke
      • component.placeholder.text.description
      • component.placeholder.text
      • scope.appearance.adjustments
      • scope.appearance.blur
      • scope.appearance.effect
      • scope.appearance.filter
      • scope.appearance.shadow
      • scope.fill.change
      • scope.layer.blendMode
      • scope.layer.opacity
      • scope.shape.change
      • scope.stroke.change
      • scope.text.character
      • scope.text.edit
  • Editor: Switched to using the new Graphic block for images, videos, shapes, etc… for a more unified experience across different design elements
  • Editor: Introduced a new Content Fill Inspector that allows switching the fill of Graphic blocks between video, image, and color
  • Editor: All of the Graphic blocks (shapes, images, videos, etc…) now support filters, effects, blurs and adjustments
  • Editor: UX/UI Improvements for both the Advanced and Default UI, as well as for the canvas actions
  • Engine: Replaced image, sticker, shapes/rect, shapes/line, shapes/ellipse, shapes/polygon, shapes/star, and vector_path blocks with a new, more composable graphic design block. Old scenes are automatically migrated when they get loaded. For a full list and detailed description of how to adapt to these changes, check out our documentation
  • Engine: Added optional shapeType, fillType and kind keys to our asset definitions. Fill type ids may not be set as the value of the blockType property any more. E.g. in order to create a video asset, blockType should now be set to //ly.img.ubq/graphic and fillType should be set to //ly.img.ubq/fill/video.
  • Engine/Web: Introduced new union types:
    • DesignBlockTypesShorthand, DesignBlockTypesLonghand, DesignBlockTypes for top-level design blocks.
    • ShapeTypesShorthand, ShapeTypesLonghand, ShapeTypes for shape blocks.
    • FillTypesShorthand, FillTypesLonghand, FillTypes for fill blocks.
    • EffectTypesShorthand, EffectTypesLonghand, EffectTypes for effect blocks.
    • BlurTypesShorthand, BlurTypesLonghand, BlurTypes for blur blocks.
    • BlockTypesShorthand, BlockTypesLonghand, BlockTypes for all blocks combined.
  • Engine/Web: The create API now expects an ID of type DesignBlockTypes instead DesignBlockType.
  • Engine/Web: The createFill API now expects an ID of type FillTypes instead of string.
  • Engine/Web: The getType API now returns an ID of type BlockTypesLonghand instead of DesignBlockType.
  • Engine/Web: The findByType API now expects an ID of type BlockTypes instead of DesignBlockType.
  • Engine/Web: The createShape API now expects and ID of type ShapeTypes instead of string.
  • Engine/Web: The createEffect API now expects and ID of type EffectTypes instead of string.
  • Engine/Web: The createBlur API now expects and ID of type BlurTypes instead of string.
  • Engine/Web: The DesignBlockType enum is now removed in favor of introducing a new alternative string-literal types that are more representative of our API signature.

Non Breaking Changes

  • UBQ: Add BlockAPI.isIncludedInExport and BlockAPI.setIncludedInExport to allow blocks to be excluded from the export process without having to rely on the properties API.
  • UBQ: All Cutouts have the always on top attribute by default.
  • Engine: Added createShape, hasShape, getShape, setShape APIs for changing the shape of a design block.
  • Engine: Added the graphic design block with support for the new shape APIs.
  • Engine: Added setKind, getKind and findByKind APIs for categorizing different design blocks of the same type with custom string tags.
  • Engine: Added the fill/changeType scope to prevent unwanted fill type changes.
  • Placeholder Settings now feature more granular options.
  • Editor: Clickable area of a cutout is a stroke 6 pixels wide centered on its offset path.
  • Editor/Web: Fixed double clicks for entering crop mode and text edit mode not recognized on mobile browsers.
  • Editor: DPI input is available for pixel design unit as well
  • Engine: Add BlockAPI.isTransformLocked, BlockAPI.setTransformLocked, and the transformLocked property.
  • Engine: Fixed the image edge handles to scale the image around the center opposite handle instead of the corners.
  • Engine: Prevented crop edits via edge handles if cropping is not allowed for adopters.
  • Engine: Fixed color fill leak when duplicating Text elements resulting in massive scene file sizes.
  • Engine: When DoubleClickSelectionMode is set to Direct, hovering/clicking in the empty space within a group highlights/selects that group.
  • Editor: Fixed performance issue when playing back videos
  • Engine: Fix video support detection on Chrome for Windows.
  • Engine: Legal symbols (©, ®, ™) are no longer rendered as their emoji counterpart.
  • Editor: Pause video playback when selecting an element in the scene.
  • Engine: Lower memory usage when downscaling images to maxImageSize.
  • Engine: Fix MP4 videos that make use of edts and elst atoms.
  • Engine: Added mousewheel support The CreativeEngine canvas now supports mouse wheel events on the canvas to scroll and zoom the scene. The CreativeEngine instance gained a new method, setWheelEventTarget, which can be used to reinstall the event listener on another DOM element. This can be useful for situations where custom DOM elments are positioned on top of the canvas. Two engine settings have been added to enable/disable scrolling and zooming: mouse/enableZoom and mouse/enableScroll, both default to true.
  • Engine: Removed arbitrary strings for engine settings from the TypeScript definitions. Passing arbitrary strings to methods such as setSettingBool or setSettingString was never actually supported. The types have been adjusted to reflect that fact.
  • Editor/Engine: The Typescript types of the getSetting/setSetting methods in the EditorAPI have been made more strict:
    • Previously, Typescript allowed arbitrary strings as keys, which would have led to an error at runtime. These have been removed.
    • Support for prefixing settings keys with ubq:// will be removed in a future version. The function signatures have been updates to provide a deprecation warning.
    • A few boolean settings not meant for public use have been removed.

Breaking Changes

Non Breaking Changes

  • Editor/Web: Fixed double clicks for entering crop mode and text edit mode not recognized on mobile browsers.
  • Engine: Fixed the image edge handles to scale the image around the center opposite handle instead of the corners.
  • Engine: Prevented crop edits via edge handles if cropping is not allowed for adopters.
  • Engine: When DoubleClickSelectionMode is set to Direct, hovering/clicking in the empty space within a group highlights/selects that group.
  • Engine: Lower memory usage when downscaling images to maxImageSize.
  • Engine: Fix video support detection on Chrome for Windows.

:warning: Important Disclaimer: The features listed under "Breaking Changes" were inadvertently included in this release. These changes were originally scheduled for the upcoming 1.19.0 major release. We recommend updating to 1.18.1, which contains the appropriate version without these changes.

Breaking Changes

  • Engine/Web: Introduced new union types:
    • DesignBlockTypesShorthand, DesignBlockTypesLonghand, DesignBlockTypes for top-level design blocks.
    • ShapeTypesShorthand, ShapeTypesLonghand, ShapeTypes for shape blocks.
    • FillTypesShorthand, FillTypesLonghand, FillTypes for fill blocks.
    • EffectTypesShorthand, EffectTypesLonghand, EffectTypes for effect blocks.
    • BlurTypesShorthand, BlurTypesLonghand, BlurTypes for blur blocks.
    • BlockTypesShorthand, BlockTypesLonghand, BlockTypes for all blocks combined.
  • Engine/Web: The create API now expects an ID of type DesignBlockTypes instead DesignBlockType.
  • Engine/Web: The createFill API now expects an ID of type FillTypes instead of string.
  • Engine/Web: The getType API now returns an ID of type BlockTypesLonghand instead of DesignBlockType.
  • Engine/Web: The findByType API now expects an ID of type BlockTypes instead of DesignBlockType.
  • Engine/Web: The createShape API now expects and ID of type ShapeTypes instead of string.
  • Engine/Web: The createEffect API now expects and ID of type EffectTypes instead of string.
  • Engine/Web: The createBlur API now expects and ID of type BlurTypes instead of string.
  • Engine/Web: The DesignBlockType enum is now deprecated and will be removed soon in favor of introducing a new alternative string-literal types that are more representative of our API signature. The usage of DesignBlockType should still be supported for most use cases until removed.

Non Breaking Changes

  • Engine: Add BlockAPI.fillParent to quickly resize and reposition a block to match its parent.
  • Engine: Added setAlwaysOnBottom and isAlwaysOnBottom APIs.
  • Editor: Add contrast shadow to regular button variants
  • Editor: Fix dock audio icon scaling based on icon scale configuration
  • Editor: Fixed selection of inside strokes on shapes without a fill.
  • Editor: Fixed text selection to jump to first character when the mouse is placed on space between lines.
  • Engine: Fixed WOFF font support
  • Assets: The ly.img.image demo source now also defines a previewUri for each entry. Due to this, demo images will have a preview image when being added to the canvas. The entries use the existing thumbnail URIs.
  • Engine: Added SceneAPI.getCurrentPage to the current page, i.e., the nearest page to the center of the viewport.
  • Engine: Added SceneAPI.findNearestToViewPortCenterByType and SceneAPI.findNearestToViewPortCenterByKind to find the nearest block to the center of the viewport by type or kind.
  • Engine: Removed trackActivePage setting, which is now automatically determined.
  • Engine: Removed event of active page tag.
  • Engine: Added an asynchronous supportsVideoExport function, which does not only check for the presence of the required audio/video APIs, but also ensures that the export actually works.
  • Engine: All Cutouts have the always on top attribute by default.
  • Editor: Clickable area of a cutout is a stroke 6 pixels wide centered on its offset path.
  • Editor: Fixed performance issue when playing back videos

Breaking Changes

  • UBQ: Removed deprecated APIs: setFillType, getFillType, setFillGradientType, getFillGradientType, addFillGradientColorStop, removeFillGradientColorStop, getFillGradientColorStops, setFillGradientColorStops, setFillGradientControlPoint, getFillGradientControlPointX, getFillGradientControlPointY, setFillGradientRadius, getFillGradientRadius.
  • UBQ: Removed properties: fill/gradient/type and fill/type.

Non Breaking Changes

  • UBQ: The WebP image format is now supported for import and export.
  • UBQ: Placeholder lines are now rendered in design space and their size has been adjusted for thumbnails.
  • UBQ: Fix adjustments rendering on Android Chrome.
  • UBQ/Swift: Fix malformed frameworks for macOS & Mac Catalyst.
  • CESDK: Fix canvas menu placement not overflowing other inputs anymore
  • CESDK: Change inspector bar input grouping from spacing to separators
  • UBQ: Replace granular color-specific APIs with a more generic approach, that eases interactions with colors. Add get|setColor, get|setSettingColor, get|setDropShadowColor, and get|setStrokeColor in favour of the color-space specific endpoints. Deprecate the following APIs:
    • BlockAPI.getColorRGBA -> Use BlockAPI.getColor instead
    • BlockAPI.setColorRGBA -> Use BlockAPI.setColor instead
    • BlockAPI.setColorSpot -> Use BlockAPI.setColor instead
    • BlockAPI.getColorSpotName -> Use BlockAPI.getColor instead
    • BlockAPI.getColorSpotTint -> Use BlockAPI.getColor instead
    • BlockAPI.getBackgroundColorRGBA -> Use BlockAPI.getColor querying the "backgroundColor/color" property instead
    • BlockAPI.setBackgroundColorRGBA -> Use BlockAPI.setColor modifying the "backgroundColor/color" property instead
    • BlockAPI.setStrokeColorRGBA -> Use BlockAPI.setStrokeColor instead
    • BlockAPI.getStrokeColorRGBA -> Use BlockAPI.getStrokeColor instead
    • BlockAPI.setDropShadowColorRGBA -> Use BlockAPI.setDropShadowColor instead
    • BlockAPI.getDropShadowColorRGBA -> Use BlockAPI.getDropShadowColor instead
    • EditorAPI.setSettingColorRGBA -> Use EditorAPI.setSettingColor instead
    • EditorAPI.getSettingColorRGBA -> Use EditorAPI.getSettingColor instead
  • CE.SDK: Display actual name as title in libraries if a translation is available
  • CESDK: Fix labels in color library not showing up in other languages
  • CESDK: Tooltips are not "dangling" anymore on touch devices
  • UBQ: Fixed the getEnum and setEnum APIs to work with nested properties.
  • CESDK: Fix Gradient button in color picker causes the gradient changes to reset back
  • CESDK: Fix HEX Color input stops reacting to changes when a 3-digit HEX is entered
  • UBQ/Web: fix H.264 videos that need a large frame re-order window. This issue manifested as videos running into timeout during loading.
  • CE.SDK: Panels now have consistend positioning of close and back buttons based on their configured position
  • UBQ: Fixed PDF page order on export when using the headless engine.
  • CE.SDK: Fix labels for entries in text library not shown after language has been switched in settings panel
  • UIKIT: Properly remove old theme and scale classes before adding current selected one
  • UBQ: Fix an issue where on scene load pages other than the first that only contain an image would show up with a loading indicator in their thumbnail.
  • UBQ: Fixed the initial cursor position when entering text mode via API being not always at the end of the text.
  • UBQ: Add PixelStreamFill and BlockAPI.setNativePixelBuffer(id, buffer). Check [https://img.ly/docs/cesdk/engine/guides/using-camera/](our guide) for an introduction.
  • CESDK: Selection frame for placeholder elements only rendered purple for Creator roles
  • CE.SDK and UIKIT: Replace Overpass Mono with Inter Sans Serif for "Input M" design token

Breaking Changes

Non Breaking Changes

  • UBQ/Swift: Fix malformed frameworks for macOS & Mac Catalyst.

Breaking Changes

  • UBQ: Replace granular color-specific APIs with a more generic approach, that eases interactions with colors. Add get|setColor, get|setSettingColor, get|setDropShadowColor, and get|setStrokeColor in favour of the color-space specific endpoints. Deprecate the following APIs:
    • BlockAPI.getColorRGBA -> Use BlockAPI.getColor instead
    • BlockAPI.setColorRGBA -> Use BlockAPI.setColor instead
    • BlockAPI.setColorSpot -> Use BlockAPI.setColor instead
    • BlockAPI.getColorSpotName -> Use BlockAPI.getColor instead
    • BlockAPI.getColorSpotTint -> Use BlockAPI.getColor instead
    • BlockAPI.getBackgroundColorRGBA -> Use BlockAPI.getColor querying the "backgroundColor/color" property instead
    • BlockAPI.setBackgroundColorRGBA -> Use BlockAPI.setColor modifying the "backgroundColor/color" property instead
    • BlockAPI.setStrokeColorRGBA -> Use BlockAPI.setStrokeColor instead
    • BlockAPI.getStrokeColorRGBA -> Use BlockAPI.getStrokeColor instead
    • BlockAPI.setDropShadowColorRGBA -> Use BlockAPI.setDropShadowColor instead
    • BlockAPI.getDropShadowColorRGBA -> Use BlockAPI.getDropShadowColor instead
    • EditorAPI.setSettingColorRGBA -> Use EditorAPI.setSettingColor instead
    • EditorAPI.getSettingColorRGBA -> Use EditorAPI.getSettingColor instead

Non Breaking Changes

  • CESDK: Added unstable clamp camera position and clamp camera zoom APIs.
  • CESDK: Add cardLabelPosition for better easier positioning of the label in a asset library card
  • CESDK: Add cardBorder for enabling a border in a asset library card
  • UBQ/Android: Add baseUri as a parameter with a default value to the Engine.addDemoAssetSources() method.
  • UBQ: Setting the defaultEmojiFontFileURI to an empty string will now disable emoji rendering and force text rendering to use the non-emoji font for all glyphs.
  • CE.SDK: During video export suspend inactivity detection while tab is in the background.
  • UBQ: Fixed the replaceText API when the text contains variables.
  • CESDK: Add support for loading WASM and DATA from HTTP URLs (config.core.baseUrl)
  • CESDK: Remove purple flashing for placeholders
  • CESDK: Added multitouch support on the web for CE.SDK and the CreativeEngine.
  • CESDK: Introduces a new color inspector with support for multiple color palettes.
  • CESDK: Introduced support for CMYK colorSpace and Spot colors in our color pickers.
  • CESDK: It's now possible to add color libraries as asset sources.
  • CESDK: Introduced the new ui.colorLibraries configuration option to configure the asset sources for the color inspector.
  • CESDK: deprecated the ui.colorPalettes configuration option in favor of using asset sources.
  • UBQ/Web: fix H.264 videos that need a large frame re-order window. This issue manifested as videos running into timeout during loading.
  • CE.SDK: Fix labels for entries in text library not shown after language has been switched in settings panel
  • CESDK: Fix labels in color library not showing up in other languages

Breaking Changes

  • UBQ: Split the permission to crop a block from content/replace and design/style into a separate scope: layer/crop.

Non Breaking Changes

  • UBQ: Add getKind, setKind and findByKind block APIs. The "kind" of a block is a custom label that can be assigned to design blocks to give them semantics beyond their immutable type ID.
  • CESDK: Add EditorAPI.findAllSettings, EditorAPI.getSettingType, and EditorAPI.getSettingEnumOptions.
  • UBQ: When querying properties, nested properties like scene/pageDimensions/width and page/margin/bottom are also listed.
  • UBQ: The export function now fails with an error if a relevant asset fails to load.
  • UBQ: Fixed an issue where a video scene would start to flicker if the total scene duration was greater than 30s and the playback time would match the total scene duration.
  • UBQ: Fix orientation of video thumbnails generated by BlockAPI.generateVideoThumbnailSequence.
  • CE.SDK: Improve memory performance on older iOS devices
  • UBQ: Deprecated the design/arrange scope and renamed design/arrange/move, design/arrange/resize, design/arrange/rotate and design/arrange/flip to layer/move, layer/resize, layer/rotate and layer/flip.
  • UBQ: Deprecated the content/replace scope. For //ly.img.ubq/text blocks, it is replaced with the new text/edit scope. For other blocks it is replaced with fill/change.
  • UBQ: Deprecated the design/style scope and replaced it with the following fine-grained scopes: text/character, stroke/change, layer/opacity, layer/blendMode, layer/visibility, layer/clipping, appearance/adjustments, appearance/filter, appearance/effect, appearance/blur, appearance/shadow
  • UBQ: The deprecated scopes are automatically mapped to their new corresponding scopes by the scope APIs for now until they will be removed completely in a future update.
  • UBQ: Introduce fill/change, stroke/change, and shape/change scopes that control whether the fill, stroke or shape of a block may be edited by a user with an "Adopter" role.
  • CESDK: User interface API added to open/close panels
  • CESDK: Add callback as possible value for UI scale configuration
  • CESDK: Move color inputs from popovers to panels
  • CESDK: Relayout user interface based on viewport width
  • CESDK: Hide labels on canvas menu and some topbar inputs if there is no space
  • UBQ: Fix bug where serializing block from a scene with a certain design unit and deserializing them into a scene with a different design unit, the blocks would be rendered incorrectly.
  • CESDK: Asset panel uses full height on small viewports and small embeds
  • CESDK: Fixed highlighting frames occasionaly beeing stuck until mouse move when exiting text mode.
  • CESDK: Fixed touch-rotate gesture not triggering rotation in all cases.
  • UBQ: Fallback to video frame dimensions if video track dimensions are 0.
  • UBQ: Fallback to identity matrix if video transformation matrix is singular.

Breaking Changes

  • UBQ/Android: Deprecated Android block API 'isPropertyWriteable' in favor of 'isPropertyWritable' to be consistent with iOS and web bindings.
  • UBQ/Swift: Moved BlockAPI.getSpotColorForCutoutType and BlockAPI.setSpotColorForCutoutType to EditorAPI
  • UBQ/Swift: Deprecated Swift scene API load(fromString string: String, ...) in favor of load(from string: String, ...).
  • UBQ/Swift: Deprecated Swift scene API load(fromURL url: URL,...) in favor of load(from url: URL, ...).
  • UBQ/Swift: Deprecated Swift scene API applyTemplate(fromString string: String, ...) in favor of applyTemplate(from string: String, ...).
  • UBQ/Swift: Deprecated Swift scene API applyTemplate(fromURL url: URL, ...) in favor of applyTemplate(from url: URL, ...).
  • UBQ/Swift: Deprecated Swift asset API removeAsset(fromSource sourceID, ...) in favor of removeAsset(from sourceID, ...).
  • UBQ/Swift: Deprecated Swift asset API addAsset(toSource sourceID, ...) in favor of addAsset(to sourceID, ...).
  • UBQ: Deprecated BlockAPI.getVideoFillThumbnail, BlockAPI.getVideoFillThumbnailAtlas, and BlockAPI.getPageThumbnailAtlas in favor of BlockAPI.getVideoThumbnailSequence.

Non Breaking Changes

  • UBQ: Add BlockAPI.getVideoWidth and BlockAPI.getVideoHeight.
  • CESDK: Fix issue with exported PDFs as zips
  • CESDK: Fix audio trim seeker mispositioning
  • CESDK: Fix crop area possibly exceeding the content area when editing rotated crops with the edge handles.
  • UBQ: Introduce placeholderBehavior/enabled property, that allows controlling whether a block should behave like a placeholder. For text blocks, the flag triggers selection of the entire text upon first edit.
  • UBQ: Introduce block.onClicked subscription.
  • CESDK: Add a timeout to the video export to detect and handle an unresponsive VideoEncoder.
  • UBQ: Automatically correct some video rotation matrices with a translation
  • CESDK: Fix Asset Library upload not working correctly with groups
  • CESDK: Fix an issue where the selected page was appearing out of focus after undo/redo
  • CESDK/Swift: Add missing public GradientColorStop.init
  • CESDK: Fix an issue where the Windows 11 video encoder would insert duplicated frames, doubling the duration of the exported video.

Breaking Changes

Non Breaking Changes

  • CESDK/Swift: Add missing public GradientColorStop.init

Breaking Changes

  • UBQ: An initial undo step is now always added after scene creation. If you previously manually added the initial undo state, this now no longer necessary.
  • CESDK: Remove configuration options A series of options have been removed from the configuration object that is passed into CreativeEditorSDK.init and CreativeEngine.init. For a full list and detailed description of how to adapt to these changes, check out our documentation
  • UBQ/CESDK: Typescript changes ConfigTypes has been removed from the @cesdk/engine package. For more information check out our documentation

Non Breaking Changes

  • CESDK: Added CreativeEditorSDK.create() method for better customization of the init process. Also added createDesignScene(), createVideoScene(), and createFromImage() methods to the CE.SDK instance for setting up an initial scene after create().
  • UBQ: Add playback/timeOffset and playback/duration properties to the following blocks: shapes/ellipse, image, shapes/line, shapes/polygon, shapes/rect, shapes/star, sticker, vector_path, text
  • CESDK: Fix empty tooltips on Align controls.
  • CESDK: Fix issue where using the @cesdk/cesdk-js module in certain contexts, such as Next.js or Create React App would render a warning about a failed require('@emotion/is-valid-prop').
  • UBQ: Fix exported videos not playing in some video players
  • UBQ: Group children are no longer tied to the groups arrange scopes. For the arrange/move scope, a fallback to the group is made in adopter mode, allowing to move the entire group along with the child. This only applies, if the group has the scope, but the child does not.
  • CESDK: Added path-based selection for precise selection of shapes, vector paths, etc.
  • UBQ: Fix memory leak in Node environments

Breaking Changes

Non Breaking Changes

  • CESDK: Fix Typescript circular dependency error for config types

Breaking Changes

Non Breaking Changes

  • UBQ: Fix exported videos not playing in some video players

Breaking Changes

  • UBQ: Improved the resizing behavior of sceneAPI.applyTemplateFromString and sceneAPI.applyTemplateFromURL. If the target size is different from the template size, the resulting layout might change to better fit the target size.

Non Breaking Changes

  • CESDK: Providing asset sources via config.assetSources has been deprecated and will be removed completely in a future version. Please use the AssetAPI to add asset sources instead.
  • UBQ: Add BlockAPI.isDistributable, BlockAPI.distributeHorizontally, and BlockAPI.distributeVertically.
  • UBQ: Add blockAPI.resizeContentAware to resize blocks and fit their content, the same asapplyTemplate... does for resizing pages.
  • CESDK: Providing variable definitions via config.variables or cesdk.setVariableDefinitions has been deprecated and will be removed completely in a future version. Please use the VariableAPI to configure placeholder variables instead.
  • CESDK: The config.defaultFont key has been moved from the CreativeEngine to the CreativeEditorSDK, since it is not used in the CreativeEngine.
  • CESDK: The config.callbacks.log key has deprecated and will be moved to config.logger in the future. The LogLevel enum has been deprecated and will replaced with a string union.
  • CESDK: Fix a bug in sliders of effects 'Radial Pixel' and 'Tilt Shift'.
  • CESDK: Fix a bug which resulted in the options menu button inside a timeline audio element to overlap the left handle preventing it from being used.
  • CESDK: Add a paragraph spacing option to the text block.
  • CESDK: Fix timeline seeker time label overlapping with seeker head.
  • CESDK: Fix a bug with some sliders not updating on undo/redo.
  • CESDK: Add clipping controls to advanced text subinspector.
  • CESDK: Fix a bug with audio clips moving around when zooming the timeline.
  • UBQ: Fix clipped lines of text to not contribute to the vertical alignment.
  • CESDK: Add 'Distribute' actions to Default UI and Advanced UI.
  • CESDK: 'Move & Align' dropdown in Default UI, and 'Move' dropdown in Advanced UI, have been labeled 'Position' to address new functionality.
  • CESDK: Added translation keys 'action.align.elements', 'action.align.toPage', 'action.position', 'action.distribute', 'action.distribute.horizontally', 'action.distribute.horizontally.description', 'action.distribute.vertically', and 'action.distribute.vertically.description'.
  • CESDK: Update move/arrange action translations
  • CESDK: Fix inspector bar change in height if scrollbar is being displayed.
  • CESDK: Fix sub inspector not having a border based on the panel alignment configuration.
  • UBQ: Set the text fill color to the color of the last remaining text run before the run is deleted.
  • UBQ: Add getTextCursorRange API for querying the cursor position during text editing.
  • CESDK: Prevent style inheritance overwriting internal styling
  • UBQ: Fix cases where changing a text blocks text would cause it to loose its font.

Breaking Changes

Non Breaking Changes

CESDK: Fix crash when adding text block UBQ: Fix design unit conversion for Cutout blocks UBQ: Fix export for selected Cutout blocks UBQ: Fix text variable handling for range-based APIs

See the announcement post for details on features.

Breaking Changes

  • UBQ: Made the timeOffset, duration, and framerate parameters of the BlockAPI#exportVideo function optional.
  • UBQ: Renamed SceneAPI.unstable_getDesignUnit and SceneAPI.unstable_setDesignUnit into SceneAPI.getDesignUnit and SceneAPI.setDesignUnit
  • UBQ: SceneAPI.setDesignUnit now accepts "Pixel", "Millimeter" or "Inch" as arguments instead of "px", "mm" or "in"
  • UBQ: SceneAPI.getDesignUnit now returns "Pixel", "Millimeter" or "Inch" as values instead of "px", "mm" or "in"
  • UBQ/Swift: Renamed first parameter of the SceneAPI.create method from from imageURL: URL to fromImage url: URL to differentiate between the image and the video variant
  • CESDK: Removal of the scene config option. You can set a scene's dpi and pixelScaleFactor via the BlockApi's setInt(sceneId, 'scene/dpi', dpi) and setInt(sceneId, 'scene/pixelScaleFactor', factor).
  • UBQ/Android: Color which used to represent RGB color has now become a sealed interface and has two implementations: RGBAColor and SpotColor

Non Breaking Changes

  • CESDK: Notifications have been redesigned. They always align to the bottom right edge now and are using updated design tokens to increase their visibility
  • CESDK: Fix an issue where dragging from the canvas outside the browser window could put the mouse input system into an undefined state
  • CESDK: Fix inspector headings not being truncated properly if their content is too long to fit the visible space
  • UBQ: Add SceneAPI.createFromVideo method analogous to SceneAPI.createFromImage
  • UBQ: Add BlockAPI.isAlignable, BlockAPI.alignHorizontally, and BlockAPI.alignVertically.
  • CESDK: Fix bleed margin not updating correctly when switching page format or design unit.
  • CESDK: PageFormatDefinition.dpi and PageFormatDefinition.bleedMargin properties have been removed. They were never actually used in the CESDK.
  • CESDK: Stroke properties are now being controlled via select inputs instead of segmented controls, improving their usability
  • CESDK: Fix a bug in the 'Edit' canvas action for text blocks.
  • CESDK: Fix for touch-gestures sometimes triggering accidental selection- CESDK: Stroke properties are now being controlled via select inputs instead of segmented controls, improving their usability
  • CESDK: Fix a bug in the 'Edit' canvas action for text blocks.
  • CESDK: Fix for touch-gestures sometimes triggering accidental selection
  • CESDK: Fix moving groups between pages resulting in groups jumping around.
  • CESDK: Number inputs now default to two fraction digits for number inputs
  • UBQ: Merged CompositedText and Text blocks
  • UBQ: Add TextCase options to the Text block and API
  • CESDK: Add support for file:/path format and special characters in @cesdk/node URL handling.
  • CESDK: Introduce the crop, filters, adjustments, effects, and blur inspector for page blocks.
  • CESDK: Add Alignment UI to Design & Studio UI
  • CESDK: Fix various bugs related to undo/redo in the Video Editor.
  • CESDK: Fix a bug for 'flip' operations not saving undo/redo steps.
  • CESDK: Fix editor crashing when loading scenes with specific combinations of block indices.
  • UBQ: Add text/clipLinesOutsideOfFrame and text/hasClippedLines properties to the Text block.
  • UBQ: Add automatic font size options (text/automaticFontSizeEnabled, text/minAutomaticFontSize, text/maxAutomaticFontSize) to the Text block.
  • UBQ: Fix occasions where the scene export failed with an error stating "Block to export has size 0".

Breaking Changes

Non Breaking Changes#

Breaking Changes

Non Breaking Changes

  • CESDK: Unsupported filetypes are handled during upload

Breaking Changes

Non Breaking Changes

  • Backport of an emoji handling bugfix

Breaking Changes

Non Breaking Changes

  • Backport of an effect status propagation bugfix

Non Breaking Changes

  • UBQ/Android: Fix android keyboard not opening on some devices
  • UBQ: Fix for touch-gestures sometimes triggering accidental selection

See the announcement post for details on features.

Breaking Changes

⚠️ Starting with v1.10.0 we no longer ship our default assets within the assets/extensions folder. Instead, both engine and UIs now offer convenience addDefaultAssetSources endpoints, that selectively register asset sources, that serve our default assets. If you're actively using the example assets we shipped before v1.10.0, check the Serving Assets Guide for your target platform.

⚠️ Image uploads are no longer stored in the scene and will not reappear upon scene load. To offer specific assets in your editor, configure and add an asset source containing the desired assets.

Asset Management

  • CESDK: Removed presets configuration for images (presets.images). Please use the local asset sources to add single images, e.g. with AssetAPI#addAssetToSource.
  • UBQ: The applyAsset callbacks and defaultApplyAsset API now return an optional design block id in their callback if they created a new block
  • UBQ: Removed the required thumbUri and size properties from AssetDefinition and AssetResult. They are now stored under the thumbUri, width and height keys in the meta property dictionary
  • UBQ: Values of the blockType asset meta property must now be design block type ids (e.g. //ly.img.ubq/image)
  • CESDK: Removed the AssetElement, ImageElement, VideoElement and AudioElement types and replaced them with AssetDefinition
  • CESDK: The onUpload callback must now return an instance of AssetDefinition
  • UBQ: Renamed default upload source for images (ly.img.upload) to ly.img.image.upload to match naming of video and audio upload sources.
  • UBQ: Upload asset sources and library entries for video and audio were added to the default configuration from addDefaultAssetSources. If you have added these sources manually (like mentioned in our docs) you can remove it now.

General

  • CESDK: Fix text-alignment center and bottom not working properly since v1.5.0 for the case when a fixed frame size was used and the text exceeded the frame. This can cause text elements with a fixed frame and center or bottom text alignment, where the text exceeds the frame, to render differently than before.

APIs & Properties

  • UBQ: Renamed Audio's and VideoFill's specific looping, volume, and muted properties to share a common playback prefix:
    • 'fill/video/looping' and 'audio/looping' are now 'playback/looping'
    • 'fill/video/volume' and 'audio/volume' are now 'playback/volume'
    • 'fill/video/muted' and 'audio/muted' are now 'playback/muted'
  • UBQ: Deprecated the camera/clearColor property and replaced it with a global clearColor setting.
  • UBQ: Deprecated fill color related APIs in favor of a 'Fill' based approach
    • Deprecated hasFillColor, use hasFill and query block.getEnum(id, 'fill/type') for Solid type instead.
    • Deprecated get/setFillColorRGBA, use setFillSolidColorinstead..
    • Deprecated isFillColorEnabled, use isFillEnabled instead.
    • Deprecated setFillType and setFillGradientType, use createFill, e.g., with type 'color' and then apply the fill block with setFill to the block instead. If the block has a fill, it should be removed with getFill and destroy.
    • Deprecated getFillType and getFillGradientType, query block.getEnum(id, 'fill/type') and block.getEnum(id, 'fill/gradient/type') instead instead
    • Deprecated add/removeFillGradientColorStop and get/setFillGradientColorStops.
    • Deprecated get/setFillGradientControlPointX/Y, use block.getFloat(fill, keypath) and block.setFloat(fill, keypath, value) with key paths 'fill/gradient/linear/startPointX/Y', 'fill/gradient/radial/centerPointX/Y', and 'fill/gradient/conical/centerPointX/Y' instead.
    • Deprecated get/setFillGradientRadius, use block.getFloat(fill, 'fill/gradient/radial/radius') and block.setFloat(fill, 'fill/gradient/radial/radius', value) instead."

Non Breaking Changes

  • CESDK: Fix issue with asset replacement panel hiding when selecting new audio.
  • CESDK: Add callback and utility method for checking against unsupported browsers
  • CESDK: Audio clip is deleted automatically if being out of bounds after page deletion
  • UBQ: Fix potential out of memory issue when loading lots of scenes with a single engine instance
  • UBQ: Fix event subscription for common props, i.e., name, exportable, and always-on-top properties.
  • CESDK: Removed the emoji default font from the bundle and exposed the URI setting (setting ubq://defaultEmojiFontFileUri)
  • CESDK: Fix for text variables not showing when editing text resulting in wrong cursor positions since v1.7.0.
  • CESDK: Fix audio element clamping and stale timeline scale label value
  • CESDK: Remove re-uploading of Unsplash images and hotlink them directly into the scene
  • CESDK: Fix empty page inspector in default UI on certain constraints settings
  • UBQ: Introduce PlaceholderControls which allow controlling the placeholder appearance on each block. Replaces image/showsPlaceholderButton and image/showsPlaceholderOverlay properties, which are now deprecated.
  • CESDK: Fix blend mode UI not being reflecting state properly for shapes, text and stickers
  • CESDK: Add --ubq-border_radius-xs token
  • CESDK: Allow bitmaps to be uploaded
  • CESDK: Remove official image/x-tga support from documentation
  • UBQ: Add subscribeToAssetSourceAdded and subscribeToAssetSourceRemoved methods to subscribe to additions to and removals from the list of asset sources
  • CESDK: Deprecate canManageAssets in favor of canAdd and canRemove in the asset library entries
  • CESDK: --ubq-stroke-contrast-3 token has been added
  • CESDK: Copy/Paste now respects scopes and configuration for page management
  • UBQ: Introduce block.getUUID
  • CESDK: Fix an issue where the search query was kept across dock entries
  • CESDK: Add support for Allow to Replace Content placeholder option for blocks that have a video Fill

Breaking Changes

Non Breaking Changes

  • CESDK: Added a missing type export for Typescript

Breaking Changes

Non Breaking Changes

  • UBQ: Fix invalid audio sample rate in the header of exported video files.
  • UBQ: Expose video export API
  • CESDK: Fix issue where replacing a video didn't work once it was in an error state
  • CESDK: Optimize page thumbnail generation

See the announcement post for details on features.

Breaking Changes

  • CESDK: --ubq-border-outline, --ubq-border-divider and --ubq-border-contrast have been renamed to --ubq-border-default, --ubq-stroke-contrast-1 and --ubq-stroke-contrast-2
  • UBQ: Splitted showsPlaceholderOverlay into two settings: showsPlaceholderOverlay and showsPlaceholderButton to control the placeholder overlay and button separately.
  • CESDK: Remove the second canvas argument from CreativeEngine.init. Using a custom canvas is strongly discouraged in favor of using our managed canvas instead. If using a custom canvas can't be avoided, it can be provided via config.canvas.
  • CESDK: Setting touchScrollingEnabled changed to touch/singlePointPanning
  • CESDK: Setting touchDragRequiresSelectionEnabled changed to touch/dragStartCanSelect (inverted truth value)
  • CESDK: Configuration ui.elements.libraries.replace.entries determines if a replace button will be shown for any block. If you have customized this configuration for images, you have to make this a function, check the argument for the selected block type, and only return your customization if an image is selected. Otherwise, you will see the replace button for non-image blocks as well. If you haven't customized this configuration you do not have to do anything. See documentation for further information.

Non Breaking Changes

  • UBQ: Fix text-editing cursor movement changes via touch not working while auto-completion is active in mobile Chrome
  • CESDK: Extended the placeholder arrange scopes to support individual control over move, scale, rotate and flip
  • CESDK: Add meta+. shortcut to show/hide UI
  • CESDK: Fix HEX color value differs for color preview input field and HEX input field
  • CESDK: InspectorBar SubInspector toggle buttons now have same special highlight styling as inside the sidebar Inspector
  • UBQ: Fix mime type detection not working when saving to an archive
  • UBQ: Fix text variables containing emojis not rendering the emojis
  • CESDK: Add video export with audio
  • UBQ: Fix mime type detection not working when saving to an archive
  • CESDK: Fix wrong fallback for baseURL if set explicitly to null or undefined
  • UBQ: Fix export to only contain elements that are part of the specified hierarchy
  • UBQ: Add an automatic block layouting when needed in API calls. Can be turned off with the feature flag implicitUpdatesEnabled.
  • UBQ: Add placeholder line rendering to empty image and video fills
  • CESDK: Change background color of the subinspector
  • CESDK: change sorting of duplicated elements; on top of existing element, instead of at the very front
  • CESDK: Fixing shape translations in the asset library
  • CESDK: Fix problem where mouse handlers were not correctly installed when the custom element or canvas were detached.
  • UBQ: SceneAPI.create now accepts sceneLayout as an optional parameter defaulting to Free
  • UBQ: SceneAPI.createFromImage now accepts three additional optional parameter: sceneLayout defaulting to Free, spacing defaulting to 0, and spacingInScreenSpace defaulting to false
  • CESDK: improve texture sampling in the Web version when WebGL2 contexts are available
  • UBQ: Add isPropertyWritable/isPropertyReadable api methods
  • UBQ: Add subscribeToZoomLevel method to subscribe to changes in the zoom level
  • UBQ: Removed the fixed export size limit of 4096 px and used the device limit instead.
  • CESDK: Add SceneAPI.onZoomLevelChanged method to subscribe to change in the zoom level
  • UBQ: Add support for spot colors. Spot colors can be applied to the properties fill/solid/color, stroke/color and backgroundColor/color.
  • CESDK: Prevent painting past the boundaries of the <cesdk-canvas> element in certain situations.
  • UBQ: Introduce features/highQualityMipmaps flag to enable improved image sampling
  • CESDK: Show replace asset library even if asset library is hidden
  • CESDK: Improve texture sampling in the Web version when WebGL2 contexts are available
  • UBQ: Add subscribeToSelectionChange method to subscribe to changes to the current selection
  • UBQ: Add subscribeToHistory method to subscribe to changes in the undo/redo history
  • CESDK: Add BlockAPI.onSelectionChanged method to subscribe to changes in the current selection
  • CESDK: Add EditorAPI.onHistoryUpdated method to subscribe to changes in the undo/redo history
  • UBQ: Improve startup time by caching WASM compilation
  • CESDK: Add video not supported error dialog
  • UBQ: Add subscribeToActiveSceneChange method to subscribe to changes of the active scene
  • CESDK: Add SceneAPI.onActiveChanged method to subscribe to changes of the active scene
  • CESDK: Introduced settings touch related settings touch/* including pinchCanScale,pinchCanZoom and turnCanRotate
  • CESDK: Made some control Gizmos configurable via controlGizmo/*, including showCropHandles, showResizeHandles, showScaleHandles and showRotateHandles
  • UBQ: Improve BlockAPI.export to handle exporting of arbitrary blocks
  • CESDK: Add support for filters, adjustments, effects and blurs to all supported elements
  • UBQ: Transform and crop handles have a wider area of interaction when on mobile
  • UBQ: When the size of the slected element is too small, rotation and move handles are displayed together at the bottom center of the selection
  • CESDK: Introduce history management via the EditorAPI
  • CESDK: Introduce config.initialSceneMode option
  • UBQ: Add scene/defaultPageDuration property

See the announcement post for details on features.

Breaking Changes

  • CESDK: I18n keys related to shadows have changed:
    • 'action.shadow.direction.change' is now 'action.shadow.angle.change'
    • 'action.shadow.direction.rotate' is now 'action.shadow.angle.rotate'
    • 'action.shadow.size.change' is now 'action.shadow.distance.change'
    • 'input.shadow.direction' is now 'input.shadow.angle'
    • 'input.shadow.direction.description' is now 'input.shadow.angle.description'
    • 'input.shadow.size' is now 'input.shadow.distance'
    • 'input.shadow.size.description' is now 'input.shadow.angle.distance'
  • UBQ: Highlight placeholder button on hover
  • CESDK: Initializing the engine no longer requires a <canvas>. Instead, the instance will instantiate its own canvas that can then be inserted into the DOM
  • CESDK: Fix snapping guides aren't cleared on mouse/touch up
  • CESDK: Fix modals and dialogs not being positioned properly
  • UBQ: the design/arrange scope provides more fine-grained with design/arrange/move, design/arrange/resize, design/arrange/rotate, design/arrange/scale and design/arrange/flip. It is still possible to read or write all at once using design/arrange.
  • CESDK: Fix i18n issues with multiple CE.SDK instances
  • CESDK: Fix edge handle snapping on rotated elements

Non Breaking Changes

  • CESDK: Fix broken typography on inspector panel welcome text for adopter role
  • CESDK: Insert and replace panels now have the same default settings
  • CESDK: Add Image Straighten UI
  • UBQ: Add drop shadow support to the sticker block
  • CESDK: Update how the replace button is drawn on small frames
  • CESDK: Fixed hover highlight outline when changing selection via the API
  • CESDK: Add content-hashes to the core (WASM) asset filenames. Verify CESDK Version during WASM instantiation
  • CESDK: Add configuration options to show/hide UI to manage/format pages
  • CESDK: A multi-selection can be rotated
  • UBQ: Fixed the selection behavior of rectangle elements with outside or center strokes
  • CESDK: Add optional fixedOrientation flag to page format preset type.
  • UBQ: Added a high compatibility mode for PDF exports to the export settings and enabled it by default
  • UBQ: Add ubq://maxImageSize to control the engine's memory footprint. The default value is 4096 pixels. Images with a higher resolution get downscaled automatically.
  • UBQ: Improved memory handling.
  • CESDK: Fix settings panel CSS theme generator not including all necessary CSS custom properties
  • CESDK: Fix drag handle snapping accuracy sporadically slightly off
  • UBQ: Add iOS inline text editing
  • UBQ: Added exportWithColorMask to the API and bindings
  • UBQ: Fix property modification for duotone_filter, lut_filter, adjustments & hsp_selective_adjustments
  • UBQ: findAllProperties now returns correctly prefixed keys for blurs, effects and fills
  • UBQ: Add flipCropHorizontal and flipCropVertical APIs
  • UBQ: Fixed page dimensions and font sizes in the PDF export of pixel-unit scenes
  • UBQ: Fixed issue when adding another block after an selected image in the default UI
  • UBQ: Expose cropOverlayColor setting
  • UBQ: Add findAllMetadata endpoint
  • UBQ: Fix console error when touch dragging on the web
  • UBQ: Fix null values for getGroups callback in AssetSources
  • UBQ: Add helper functions to determine the support for WASM and Video (supportsWasm & supportsVideo)
  • UBQ: Added support for emojis, rendered with NotoColorEmoji.ttf
  • CESDK: Added touchScrollingEnabled and touchDragRequiresSelectionEnabled settings to configure the touch behavior.
  • CreativeEngine: Add Node.JS package @cesdk/node
  • UBQ: Fix crashes during event delivery
  • UBQ: Fix dragging through UI elements
  • UBQ: Fix crashes when duplicating fill, effects and blurs

See the announcement post for details on features.

Breaking Changes

  • CESDK: Change export options provided to the onExport callback
    • options['image/jpeg'].quality -> options.jpegQuality
    • options['image/png'].compressionLevel -> options.pngCompressionLevel
  • UBQ: Update zoom APIs to be more user-friendly
    • editor.getZoomLevel -> scene.getZoomLevel
    • editor.setZoomLevel -> scene.setZoomLevel
    • get/setZoomLevel is in relation to pixel dimensions instead of design units of the scene, which requires an update of the values if the scene is in design unit inch or millimeter
  • CESDK: Changed translation keys in the settings panel
  • UBQ: Replace backgroundColor properties (backgroundColor/color, backgroundColor/enabled) of the page block with fill properties (fill/enabled, fill/gradient/type, fill/solid/color, fill/type).
  • CESDK: UI (Default or Advanced) is now independent of Role (Creator or Adopter).
    • Configuration key ui.elements.view.adopter.style has been removed.
    • Configuration key ui.elements.view.style is used to configure the view for all roles.
  • UBQ: Asset Source findAssets does not have a 'type' argument anymore. All user-configured asset source have to remove the type as well
  • CESDK: Removed the following configuration entries. It is replaced by configuration of ui.elements.libraries.insert.entries and ui.elements.libraries.replace.entries
    • ui.elements.libraries.upload has been removed.
    • ui.elements.libraries.template has been removed.
    • ui.elements.libraries.image has been removed.
    • ui.elements.libraries.text has been removed.
    • ui.elements.libraries.element has been removed.
  • CESDK: Deprecate libraries.panel.insert and libraries.panel.replace and move their entries to libraries.insert and libraries.replace
  • UBQ: Rename drop shadow related function and properties:
    • [get/set]DropShadow[X/Y]Offset -> [get/set]DropShadowOffset[X/Y]
    • [get/set]DropShadow[X/Y]BlurRadius -> [get/set]DropShadowBlurRadius[X/Y]
    • dropShadow/x/offset -> dropShadow/offset/x
    • dropShadow/y/offset -> dropShadow/offset/y
    • dropShadow/x/blurRadius -> dropShadow/blurRadius/x
    • dropShadow/y/blurRadius -> dropShadow/blurRadius/y
  • UBQ: hasPlaceholderContent has been renamed to showsPlaceholderContent
  • CESDK: Changed i18n key input.document to input.canvas
  • CESDK: default stroke position is centered rather than outside

Non Breaking Changes

  • CESDK: Add option to auto close asset library after insert or replace
  • UBQ: new API functionality to add and edit a block's drop shadow
  • CESDK: Update border radius values
  • UBQ: Add export options to export API
  • UBQ: Introduce asset API
  • CESDK: Add Stroke controls to Default UI for Images
  • UBQ: Add setting to control double-click behavior
  • UBQ: Add gradient option to page fill
  • UBQ: Add block metadata API
  • CESDK: Add labels to Shape Options sliders.
  • CESDK: Improved UI usability on small screens
  • CESDK: Fix Unsplash library displaying the same image multiple times
  • CESDK: Fix filter card labels not readable in dark theme
  • CESDK: Can rotate and flip groups
  • CESDK: Fix template library cards displaying templates wrong
  • CESDK: Add configurable icons for custom libraries
  • UBQ: Add scopes API
  • CESDK: Add Shadows controls to Advanced UI
  • CESDK: Fixed line shape handles not moveable in some conditions
  • CESDK: Add possibility to pass function to dock group configuration
  • CESDK: Add stroke to pages.
  • UBQ: Always clip content to pages on export
  • CESDK: Add effect & blur APIs.
  • CESDK: Fix to properly ignore mouse events over UI elements
  • CESDK: Remove text background color from the UI
  • CESDK: Fix word wrapping of text for keyboard input in Safari
  • CESDK: The entry point for the Creative Engine at @cesdk/cesdk-js/creative-engine.umd.js has been removed. Use the @cesdk/engine package instead.
  • CESDK: Fix translation issues in the asset library
  • CESDK: Change default template card backgroundType to contain
  • CESDK: Added support for changing cursors depending on the action performed in the @cesdk/engine package.
  • CESDK: Fix lost keyboard focus after clicking canvas

Non Breaking Changes

  • CESDK: Fix replace library behavior during template adoption.

Non Breaking Changes

  • CESDK: Fix broken fill color on star, polygon, and vector shapes.

Breaking Changes

  • UBQ: Rename fill & background color related properties:
    • fill_color/value -> fill/solid/color
    • fill_color/enabled -> fill/enabled
    • background_color/value -> backgroundColor/color
    • background_color/enabled -> backgroundColor/enabled

Non Breaking Changes

  • CESDK: Settingspanel library checkboxes working again

See the announcement post for details on features.

Breaking Changes

  • UBQ: Fix "Cross Cut" effect output differences.
  • CESDK: Some of the exported types of the @cesdk/cesdk-js package have changed:
    • The DesignElementId type alias has been renamed to DesignBlockId
    • The PositionMode, SizeMode, and PropertyType enums for use with the BlockAPI are gone. Instead you can use literal string values that map 1:1 to the previous enum value names. PositionMode.Absolute becomes "Absolute", etc.
  • CESDK: Add template library
    • Template configuration now needs to include a label for each template
  • JNI: Use long instead of int for IDs because Java does not offer unsigned ints.
  • CESDK: Deprecate imports of the CreativeEngine module from @cesdk/cesdk-js/cesdk-engine.umd.js. To use the CreativeEngine module, import it as its own package from the @cesdk/engine npm module.

Non Breaking Changes

  • UBQ: Add findAllPlaceholders API
  • CESDK: Fix snapping guides not always covering the entire screen
  • CESDK: Split cesdk_engine from cesdk_web
  • UBQ: Add scale API for proportional scaling of blocks, groups and hierarchies
  • CESDK: Add API options setContentFillMode and getContentFillMode
  • UBQ: Fix blur bleeding with CPU backend
  • UBQ: Fix Tiltshift effect alpha handling
  • CESDK: Improved Stroke options for Shapes and Text
  • CESDK: Add Gradient Fills.
  • CESDK: Fix unselectable elements being selectable by keyboard interaction for Adopter.
  • CESDK: Fix uploaded images being added immediately.
  • CESDK: Add placeholder options for Pages.
  • UBQ: Add applyTemplate APIs
  • UBQ: more properties can be set through the set of set/get functions which take a single parameter.
  • CESDK: Update line and stroke width of handles, selection frames, and gizmos.
  • UBQ: Fix text blocks changing position during design unit changes.

Non Breaking Changes

  • CESDK: Added exports for a few enums that had been forgotten in a previous release:
    • DesignBlockType, which was previously called DesignElementType is required as an argument to many methods in the BlockAPI)
    • MimeType
    • StrokePosition, StrokeCornerGeometry, and StrokeStyle

See the announcement post for details on features.

  • CESDK: Introduce event API and editor API.
  • UBQ: export now always unhides the element that's being exported.
  • UBQ: Selection and placeholder highlighting for children of hidden elements are disabled.
  • CESDK: Fix bug when no sources for a type are configured
  • UBQ: Add Opacity component to CompositedText
  • UBQ: Switch to fixed Stack spacing during export
  • UBQ: Limit image render resolution to 4096x4096
  • CESDK: Disabled color inputs inside colorselection popover can be enabled via click anywhere inside the popover
  • CESDK: Introduce grouping of elements. A group can be moved and has its own opacity.
  • CESDK: Added new vector shapes.
  • UBQ: Add PDF export
  • UBQ: Move pending and error state rendering from the frontend into UBQ
  • CESDK: Update supported browser versions
  • UBQ: Add options for page clipping and out-of-page dimming
  • UBQ: Add showsPlaceholderOverlay property to Image
  • UBQ: Allow exporting scenes as an archive
  • CESDK: Allow usage of inline text editing in cesdk_engine headless mode
  • CESDK: Add dock configuration option to show/hide labels and choose between icon sizes
  • CESDK: 'Replace Asset' library panel now automatically opens for Adopters when selecting a replaceable image, and stays open after selection.

Breaking Changes

  • JNI: Use long instead of int for IDs because Java does not offer unsigned ints.

Non Breaking Changes

  • CESDK: Fixed spinners showing on hidden pages, e.g. in single-page mode.
  • CESDK: Preserve font externalReference in textRuns when loading scenes.

  • Add auto close feature

Non Breaking Changes

  • Fixes Canvas Actions / Actionbar not correctly updating its position when text box height changes during typing
  • Fixes externalReference not being updated when an image was replaced
  • Fixes multiple issues in single page mode
    • Elements created by an adopter are no longer highlighted, which also fixes occasional highlighting of the entire scene
    • Non-visible elements are no longer selectable via tab
  • Loading spinners no longer show for elements on hidden pages
  • Fixes wrong pointer offsets for adopters, noticeable in embedded deployments leading to wild element jumps during drag
  • Fixes empty library for image replacement, if only uploads are in there
  • Allows disabling the image placeholder overlay via a new showsPlaceholderOverlay property
  • Adds an activePageCallback that allows registering for undo/redo induced page change

  • Fixed mouse offsets during dragging

  • CESDK: Fix bug when no sources for a type are configured
  • UBQ: export now always unhides the element that's being exported.
  • UBQ: Selection and placeholder highlighting for children of hidden elements is disabled.

  • Fixes an error in the public TS type declarations.

Fixes

  • Placeholder overlay not getting removed when replacing image as adopter
  • Missing bindings for getGlobalXYZ & referencesAnyVariables endpoints
  • Various guide fixes (broken links, broken buttons & wrong examples)
  • Delay lookup of legacy vector path blocks

Breaking Changes

  • CESDK: Moved property API functions into the block API namespace. .property.findAll and .property.getType have been renamed to .block.findAllProperties and .block.findPropertyType resp.

See the announcement post for details on features.

Breaking Changes

  • CESDK: Add new elevation color theming token
  • CESDK: Add design tokens for danger button variant
  • CESDK: //ly.img.ubq/adjustableImage was renamed to //ly.img.ubq/image (serialized scenes are automatically converted)
  • CESDK: Changes made in preview mode are discarded when leaving the mode
  • CESDK: Shapes may now be resized non aspect-aware via the edge handles
  • CESDK: presets.variables was moved to the top level of the Configuration object
  • CESDK: Renamed configuration key for the view style from classic to advanced and from minimal to default
  • CESDK: Changed default image fill mode from none to cover
  • CESDK: I18n files have been restructured (flat keys).
  • CESDK: Extended layout functions of the block API for more control
  • CESDK: Introduce --ubq-margin-xl theming api token
  • CESDK: Introduce --ubq-interactive-selected theming api token

Non Breaking Changes

  • CESDK: Changes made in 'Preview' mode don't affect the current scene anymore
  • CreativeEngine: Introduces headless CreativeEngine via cesdk-engine package and makes the editors underlying engine available via cesdk.engine
  • CESDK: Add manual number input for slider elements via Enter key
  • CESDK: Add ability to remove variables
  • UBQ: Store & handle relative paths by resolving them relative to the ubq://basePath setting
  • CESDK: Add "Always on top" toggle for design elements
  • CESDK: Add ability to remove variables
  • CESDK: Remove ubq://waitForAssets setting
  • CESDK: image.uri was replaced with image.imageFileURI. The property now holds a file URI, the previously stored asset ID is now stored in image.externalReference. Same applies to image.lutFilter/uri and sticker.uri.
  • CESDK: Add block-based saveToString & loadFromString to block API
  • CESDK: VectorPath blocks now only receive paths & size instead of an asset key.
  • CESDK: Snapping behaviour extended to multi-selected elements
  • CESDK: Add getGlobalBoundingBox… & referencesAnyVariables to block API
  • CESDK: Replace image.duotoneFilter/assetUri with individual colors and introduce image.duotoneFilter/externalReference
  • CESDK: Hide inspector bar inputs without necessary placeholder settings in classic UI

See the announcement post for details on features.

Breaking Changes

  • CESDK: Theming API endpoints for typographic settings has changed

Non Breaking Changes

  • CESDK: Fix scrollbar pixel scaling
  • CESDK: Add initialImageURL configuration option
  • CESDK: Make Editor unloading clean up more resources
  • CESDK: Add Page related configuration options (title.show & title.font)
  • CESDK: Add Multi Selection capabilities

Breaking Changes

  • CESDK: Deprecated load method of CreativeEditorSDK in favour of loadFromString and loadFromURL
  • CESDK: Rename config.initialScene to config.initialSceneString

Non Breaking Changes

  • CESDK: Fix SVG without height and width attribute not being displayed
  • CESDK: Add Layout switch to Canvas Inspector
  • CESDK: Add initialSceneURL configuration option
  • CESDK: Add saner default for constraints in templates

Non Breaking Changes

  • CESDK: Replace Storybook with hand-rolled styleguide
  • UBQ: Add support for POST requests, HTTP body & headers
  • CESDK: Add UI for renaming design elements
  • CESDK: Replace constraints section with placeholder UI
  • CESDK: New content library
  • CESDK: Inspector Panel content is reduced or hidden entirely for Adopter Role.

Non Breaking Changes

  • CESDK: Fix vanilla js integration example not working

Breaking Changes

  • CESDK: Fix line-breaking of words in text variables only having 1 character per-line for all but the last word
  • CESDK: Decrease default PNG compression level from 9 to 5.
  • CESDK: Alter export return from Promise<Blob[]> to Promise<{ blobs: Blob[], options: EncodeOptions }>.
  • CESDK: Shadow DOM UI encapsulation to prevent style bleeding

Non Breaking Changes

  • CESDK: Display style of first character in selection when text is selected (instead of always style of the character before the cursor)
  • UBQ: Fix line resize handles being rendered wrong occasionally
  • UBQ: Add default Description component to all design blocks
  • CESDK/UBQ: Expose image encoding parameters for JPEG quality & PNG compression level
  • CESDK: Enable Doodle, Hands and Emoji sticker packs by default
  • CESDK: Update CanvasActions misaligned paddings
  • CESDK: Wire config.assets & config.presets.images
  • CESDK: Refactor initialization to untangle dependencies
  • CESDK: Add improved LineRenderer (better angled lines, no disappearing sub-pixel lines)
  • CESDK: Decrease minimal line-width
  • CESDK: Introduce RasterizedDesignBlocksRenderer and refactor CESDKImage to use it
  • CESDK: Add Copy/Paste functionality
  • CESDK: Add Stack design block
  • CESDK: Move from manual to automatic page layouting
  • CESDK: Wire config.presets.typefaces
  • CESDK: Add design token CSS custom property for disabled opacity value
  • CESDK: Remove unused design tokens regarding disabled input state
  • CESDK: Page Dimension Aspect Ratio Lock is now saved in Scene.
  • CESDK/UBQ: Implement frame flipping for all elements
  • UBQ: Add basic SVG support to the image element

Breaking Changes

  • UBQ: Migrate to flexbox-based layouting
    • designElements are now serialized with base_props_version 6
    • block_position is now a struct with four values: json "block_position": { "version": 1, "left": { "version": 1, "unit": 1, "value": 18.0 }, "top": { "version": 1, "unit": 1, "value": 16.5 }, "right": { "version": 1, "unit": 0, "value": 0.0 }, "bottom": { "version": 1, "unit": 0, "value": 0.0 } }
      • Each value is a LayoutValue, where unit encodes whether it is an undefined, design unit, percent or auto
      • The example is therefore positioned 18 design units from the left & 16.5 design units from the top, right and bottom are undefined and therefore ignored
    • block_dimensions is now block_size: json "block_size": { "version": 1, "width": { "version": 1, "unit": 1, "value": 43.08553695678711 }, "height": { "version": 1, "unit": 1, "value": 64.61538696289063 } }
      • Consists of two LayoutValues encoding this elements size in either absolute design units, percent values relative to its parent or auto for auto sizing
    • The third dimensions, z-index & depth have moved into their own attributes block_z_index & block_depth along with has_block_z_index & has_block_depth. They just consist of float values.
  • CESDK: Made the initialization process more robust when dealing with large scenes. CESDK::load is now an async endpoint returning a Promise<void> that fulfills when the scene was loaded.
  • CESDK: Remove styled-components dependency
  • CESDK: Changed location of .wasm, .data, *.js files as well as the fonts and extension packs
  • CESDK: Added default font configuration (set defaultFont: '//ly.img.cesdk.fonts/roboto_regular' for the previous default. This needs the font extension pack installed)
  • CESDK: If fontPath is not specified it defaults to assetPath + 'fonts/' instead of just 'fonts/'
  • CESDK: Changed package name to @cesdk/cesdk-js
  • CESDK: Scale the text font proportionally when resizing a text element via its corner handles
  • CESDK: Create Text elements with auto height mode enabled
  • CESDK: Change 'Editor' role to 'Adopter'
  • CESDK: Element scopes are now false by default. Adopters therefore won't be able to interact with any element added by a 'Creator' user, unless the creator has manually enabled the corresponding scopes in the inspector.
  • CESDK: CESDK::save is now asynchronous.
  • CESDK/UBQ: CESDKScene is now part of UBQ, but old //ly.img.cesdk/scene IDs are mapped to //ly.img.ubq/scene block.
  • CESDK/UBQ: Changes scene format to //ly.img.ubq/scene, but still allows old format. Saving will create a scene file with the new format.
  • CESDK: Change token styling system and default themes
  • CESDK: Remove all old and unused CSS custom properties
  • CESDK: Add Text element option to hide lines outside of the frame
  • CESDK: Add Text layouting option for long word per-character line-break option
  • UBQ: Serializations are now base64 encoded
  • CESDK: Renamed effects and switched to only showing effects which were registered as an asset
  • CESDK: replace scene format selector
  • CESDK: Remove react as peer depedency for @cesdk/cesdk-js
  • CESDK: Changed public API surface
  • CESDK: draw fallback glyphs in text for codepoints that are not present in the font
  • CESDK: Removed the ly.img.cesdk.stickers.shapes extension pack
  • UBQ: Cleared default paths of CESDKVectorPath & VectorPath blocks
  • CESDK: Move Molle, Codystar & Lobster fonts into ly.img.cesdk.legacy-fonts pack

Non Breaking Changes

  • CESDK/UBQ: Do not show element handles while dragging
  • CESDK: Made the initialization process more robust when dealing with large scenes
  • UBQ: Fix positioning of circular progress bar
  • CESDK: Add LayerList feature simple implementation with sorting and layer hide
  • CESDK: Add auto-sized text elements
  • CESDK: Fix bleed margin popover selected option styling
  • UIKIT: Add ListBox component entirley based on existing Select component with only the list and options encapsulated
  • UBQ: Fix localized punctuation in number inputs
  • UBQ: Fix number input up/down stepping
  • UBQ: Fix movement of text input cursor
  • UBQ: Fix stop propagation of Popover scroll events
  • CESDK: Use regular cursor when move is not permitted on element
  • UIKIT: Use ListBox inside LayerList
  • CESDK: Don't render text variable select if there are no placeholers
  • CESDK: Fix ghost image drag in elements library for emoticons
  • CESDK: Bump to react@17.02 and react-dom@17.0.2
  • CESDK: Move 'Add Page' button to the bottom of the canvas
  • CESDK: Support multiple file upload
  • UBQ: Add settings registry that allows registration per scheme & corresponding commands
  • CESDK: Fix active inspector library selection
  • CESDK: Added transform and text subinspectors
  • CESDK: Update Library style
  • CESDK: Move Effect- and Filter-Sliders into collapsible cards
  • CESDK: Group 'Load', 'Save', 'Export' and 'Download' buttons in navigation
  • CESDK: Add proper large ui mode
  • CESDK: Fix margins on Buttons in ButtonGroup / SegmentedGroup
  • CESDK: Add crop UI controls
  • UBQ: Add crop commands to control crop from UI
  • UBQ/CESDK: Add support for copy & paste of design elements
  • CESDK: Add value labels to image sub inspectors
  • CESDK: Add theme color CSS configurator to settings panel
  • CESDK: fix bug where moving page up/down required two clicks
  • CESDK: Fix Backend useScene hook not initializing properly
  • CESDK: Add Zoom levels dropdown
  • CESDK: Fix ListBox active selection state
  • CESDK: Add template presets
  • UBQ: Introduce various xyzEnabled props on designblocks to control properties without losing their state
  • CESDK: Add UI for xyzEnabled from sub inspector and a separate component
  • CESDK: Add data-ubq-theme and data-ubq-scale HTML attributes
  • CESDK: Add "Allow to select" scope to shape elments
  • CESDK: Fix for unhelpful error message when measureImage fails du to a large file size
  • CESDK: Fix number input not valid input to show last valid one
  • CESDK: init returns promise which resolved if the engine is ready
  • UBQ: Add TextShapeCacheService to substantially increase performance when there's text in a scene
  • CESDK: Add page move up and down to history
  • CESDK: Move color change event emit to parent component
  • CESDK: Build target is now ES2017 (supports async functions and object spreads natively)
  • CESDK: Add new fonts & styles to ly.img.cesdk.fonts
  • CESDK: Add Outline to active Card item
  • CESDK: Add asset settings
  • CESDK: New default values for blur and shape outlines
  • CESDK: Remvoe listbox overlay scrollbar
  • CESDK: Add public typings to release folder
  • CESDK: Disable crop area transform when arrange is disabled from constraints
  • CESDK: Fix empty snapshot from crop sub inspector
  • CESDK: Fix and adjust canvas scroll bars styles
  • CESDK: Fix to allow transform handles on pages