Version v1.69.0 Changelog February 23, 2026
Breaking Changes
-
Editor/Web: BREAKING: Updated asset source IDs to align with v5 naming conventions. The following asset source IDs have been renamed:
ly.img.captionPresets→ly.img.caption.presetsly.img.colors.defaultPalette→ly.img.color.palettely.img.vectorpath→ly.img.vector.shapely.img.textComponents→ly.img.text.components
The following asset sources have been merged:
ly.img.filter.lut+ly.img.filter.duotone→ly.img.filterly.img.page.presets+ly.img.page.presets.video→ly.img.page.presetsly.img.template+ly.img.video.template→ly.img.templates(note: plural)
Migration Guide: If you are using custom asset configurations or referencing these asset source IDs in your code, you will need to update them to use the new IDs. Translation keys in i18n files have also been updated to match the new asset source naming. CDN URLs have been updated from v4/demo-v2 to v5/demo-v3.
-
Editor/Web: BREAKING Removed
config.ui.elements.libraries.insert.entriesconfiguration option. All default asset libraries (Templates, Uploads, Images, Videos, Audio, Text, Shapes, Stickers) are now automatically available. If you were customizing asset library entries through configuration, use thecesdk.ui.addAssetLibraryEntry()andcesdk.ui.updateAssetLibraryEntry()APIs after SDK initialization instead. -
Editor/Web: BREAKING Removed
config.ui.elements.libraries.replace.entriesconfiguration option. The replace panel continues to work as before, showing relevant asset libraries based on the selected content. If you need to customize which libraries appear in the replace panel, use thecesdk.ui.setReplaceAssetLibraryEntries()API after SDK initialization. -
Editor/Web: BREAKING Removed
config.ui.elements.dock.groupsandconfig.ui.elements.dock.defaultGroupIdconfiguration options. The dock must now be configured programmatically using thecesdk.ui.setDockOrder()API after SDK initialization. If you were using the default dock configuration, you’ll need to explicitly configure it in your code. -
Editor/Web: See our migration guide for step-by-step instructions and code examples.
-
Editor/Web: BREAKING: Introduced Starterkits - pre-configured editor templates that replace the previous built-in editor configuration. The editor now initializes with a blank canvas by default.
Key changes:
- The editor initializes a blank canvas with minimal configuration. Use one of our Starterkits to get started quickly based on your use case.
- Asset sources can now be loaded using built-in plugins. See the Asset Source Plugins guide for details.
Migration: See the Starterkits Migration Guide for step-by-step instructions.
-
Editor/Web: BREAKING: Removed
ly.img.filter.lutandly.img.filter.duotonefrom the Feature API. Usely.img.filterinstead, which controls all filter types. -
Editor/Web: Moved the placeholder settings panel from the canvas menu into the advanced inspector. The placeholder settings are now accessed via a “Design” / “Placeholder” toggle in the inspector panel when a block is selected, instead of a dedicated canvas action button. The
canvas-action-placeholder-settingsbutton has been removed.
Non Breaking Changes
-
Editor/Web: Deprecated
cesdk.addDefaultAssetSources()andcesdk.addDemoAssetSources()methods. These methods will continue to load v4 assets but will be removed in a future version.Migration options:
- Use the new Asset Source Plugins (recommended)
- Use
engine.asset.addLocalAssetSourceFromJSONURI()orengine.asset.addLocalAssetSourceFromJSONString()for custom asset sources
-
Editor/Android: Allow adjusting speed for audio clips (up to 3x).
-
Editor/Android: Add a clip speed inspector for video clips.
-
Engine: The
basePathsetting now also controls where the engine loads font fallback files and the emoji font from. Previously, these were always loaded fromhttps://cdn.img.ly/assets/v4, making it impossible to fully self-host all CE.SDK assets. WhenbasePathis not set, the engine continues to load these assets from the default CDN URL. If self-hosting, setbasePathviaeditor.setSettingString()to point to your server where you’ve extracted thefonts/andemoji/directories fromimgly-assets.zip. See the Serve Assets guide for details. -
Editor/Web: Added
truncateLabeloption to the Checkbox builder component, allowing long labels to be truncated with an ellipsis. -
Editor/iOS: Add Clip Speed inspector sheet with speed and duration controls for video and audio clips (audio max 3x).
-
Editor/iOS: Improved timeline thumbnails for still content (images, stickers, shapes) by displaying a single representative thumbnail instead of repeating images.
-
Editor/iOS: Added text content display for text clips in the timeline, showing the actual text alongside the clip label.
-
Editor/iOS: Added pinning behavior for clip labels, thumbnails, and text content - elements now stay visible when clips are scrolled off-screen.
-
Editor/iOS: Fixed audio waveform stability during timeline trimming operations.
-
Engine: Added
Autooption totouch/pinchActionsetting. When enabled, pinch gestures will scale the selected element if the center point between the two fingers is inside the element’s bounding box, otherwise the camera zooms. Supports rotation during scaling whentouch/rotateActionis set toRotate. -
Editor/Web: Added ability to replace the shape of graphic blocks via a new “Change Shape” option in the shape inspector controls.
-
Engine: Added support for SVG files containing embedded images.
-
Editor/Web: The video timeline now automatically expands when foreground tracks are added and collapses when they are removed. Manual height adjustment via drag is supported and users can double-click the resize handle to return to automatic height mode.
-
Editor/Web: Added unified component order APIs (
setComponentOrder,getComponentOrder,insertOrderComponent,updateOrderComponent,removeOrderComponent) providing a cleaner, type-safe interface for customizing UI component ordering across all areas. The 30 area-specific methods (e.g.,setDockOrder,insertInspectorBarOrderComponent) are now deprecated in favor of the new unified API. -
Editor/Web: Improved video compatibility UX on unsupported browsers. Added warning dialogs that automatically appear when users attempt to use video features on browsers lacking required codec support. Added
video.decode.checkSupportandvideo.encode.checkSupportactions to trigger these dialogs programmatically, and silent utilitiescesdk.utils.supportsVideoDecode()andcesdk.utils.supportsVideoEncode()for detection without UI. Affected platforms include Linux browsers and Firefox, which lack H.264/AAC encoder support. -
Plugins/Web: Fixed
uploadMiddlewareURLs being ignored in image quick actions, causingFILE_FETCH_FAILEDerrors during export when using custom storage backends. -
Plugins/Web: Image quick actions no longer automatically re-upload generated images. Users who need to persist AI-generated images should configure
uploadMiddlewareto handle storage. This aligns quick action behavior with the panel flow. -
Editor/Android: Updated Coil to 2.6.0, fixing a crash in Lazy Lists when pausable composition during prefetch is enabled.
-
Engine: Fixed a use-after-free in async resource callbacks when loading an archive from an invalid URL.
-
Engine/Web: Fixed static noise when playing audio files with low sample rates (e.g., 16kHz AAC audio).
-
Engine: Prevent audio from other pages mixing into export when exporting from a specific page in a multi-page scene.
-
Engine: Allow export duration to exceed page duration, producing silence after page content ends instead of truncating or repeating audio.
-
Editor/Web: Fixed dock buttons not showing tooltips when
dock/hideLabelsis enabled. Labels now appear as tooltips when hidden. -
Editor/Flutter: Fixed an issue where effects applied to paused videos were not immediately visible when using TextureView.
-
Engine: Fixed incorrect rotation of grouped page children when flipping via crop changes with
page.moveChildrenWhenCroppingFillenabled (Photo Editor UI). -
Editor/Web: Improved group behavior in video mode - children now preserve their original durations and time offsets when grouped, and groups can no longer be trimmed
-
Editor/Web: Enabled groups by default in video mode
-
Engine/Web: Fixed archival in NodeJS environments.
-
Editor/Web: Removed the old drop layer overlay that displayed “Drag File Here” text with an icon when dragging files onto the canvas.
-
Engine: Fixed an issue where calling
setTypefacemultiple times would accumulate fonts in the document typefaces instead of replacing them. This caused text blocks to become unusable (displaying ‘x’ characters) after several archive save/load cycles with font changes. -
Editor/Web: Fixed the timeline drop zone indicator moving out of view when scrolling the timeline.
-
Engine: Fixed an issue where unused document typefaces were incorrectly included in saved archives, causing missing font file references when the archive was loaded.
-
Engine: Fixed video export getting stuck at 99% when
PendingStatewas not properly cleared for video fills after the resource finished loading. -
Editor/Web: Added a unified
scene.createaction (cesdk.actions.run('scene.create', options?)) that replaces the deprecatedcesdk.createDesignScene()andcesdk.createVideoScene()methods. The new action provides a single entry point for scene creation across all modes with flexible page configuration.Key features:
- Supports both Design and Video modes via the
modeoption (defaults to'Design'). - Pages can be configured with inline dimensions (
{ width, height, unit }), asset source references ({ sourceId, assetId }), or full asset objects. - Multiple pages can be created at once via the
pagesarray or viapage+pageCount. - Automatically configures scene DPI (72 for Pixel, 300 for print units) and design units.
Migration:
// Beforeawait cesdk.createDesignScene();await cesdk.createVideoScene();// Afterawait cesdk.actions.run('scene.create');await cesdk.actions.run('scene.create', { mode: 'Video' });// With page dimensionsawait cesdk.actions.run('scene.create', {page: { width: 1080, height: 1920, unit: 'Pixel' }});// With page presets from an asset sourceawait cesdk.actions.run('scene.create', {page: {sourceId: 'ly.img.page.presets',assetId: 'ly.img.page.presets.instagram.story'}}); - Supports both Design and Video modes via the
-
Editor/Web: Deprecated
cesdk.createDesignScene()andcesdk.createVideoScene(). Both methods continue to work but log a deprecation warning. Usecesdk.actions.run('scene.create', ...)instead. -
Editor/Android: Fixed a crash when launching a media picker on devices without an app to handle the intent.
-
Editor/Android: Fixed an
IllegalStateExceptioncrash that could occur after process restoration when an activity result contract was pending. -
Docs: Remove React Native platform flag from guide pages that have no React Native content, preventing empty pages from being rendered
-
Engine: Fixed
basePathsetting not being serialized. -
Editor/Web: Fixed dropdown menu items not filling width and having broken spacing between icons, labels, and keyboard shortcuts.
-
Engine: Added
clampTextBlockWidthToPageDimensionsDuringEditingfeature flag that wraps auto-sized text at page edges instead of overflowing during editing.