<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>IMG.LY: Blog</title><description>Stay up-to-date with the latest company news, releases, step-by-step tutorials, and market insights.</description><link>https://img.ly/blog/</link><language>en-us</language><image><url>https://img.ly/apple-touch-icon.png</url><title>IMG.LY: Blog</title><link>https://img.ly/blog/</link></image><atom:link href="https://img.ly/blog/rss.xml" rel="self" type="application/rss+xml"/><generator>Astro</generator><lastBuildDate>Tue, 09 Jun 2026 06:41:12 GMT</lastBuildDate><ttl>60</ttl><item><title>CE.SDK v1.76 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-76-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-76-0-release-notes/</guid><description>Multi-clip timelines on iOS and Android, background removal for Android, and font-size unit control across all platforms.</description><pubDate>Fri, 05 Jun 2026 15:17:25 GMT</pubDate><content:encoded>&lt;p&gt;With this release, the mobile video timeline gets a meaningful upgrade, background removal comes to Android, and a set of engine improvements tighten text, shape, and font-size handling across platforms.&lt;/p&gt;
&lt;p&gt;Let’s jump in!&lt;/p&gt;
&lt;h2 id=&quot;edit-multi-clip-timelines-on-ios-and-android&quot;&gt;Edit Multi-Clip Timelines on iOS and Android&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/06/multi-clips-mobile-imgly.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The mobile video timeline now supports multiple clips per foreground track. Long-press any clip to drag it within a track, across tracks, or into a gap to create a new track. Split, trim, and move are all gap-aware and respect locked clips.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; users can manage their video edit the way they’d expect — organizing clips in a single track instead of working around single-clip limitations.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/ios/starterkits/video-editor-e1nlor/&quot;&gt;Video Editor Starter Kit&lt;/a&gt; – iOS&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/ios/create-video/timeline-editor-912252/&quot;&gt;Video Timeline Docs&lt;/a&gt; – iOS&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/android/starterkits/video-editor-e1nlor/&quot;&gt;Video Editor Starter Kit&lt;/a&gt; – Android&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/android/create-video/timeline-editor-912252/&quot;&gt;Video Timeline Docs&lt;/a&gt; – Android&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;remove-backgrounds-on-android&quot;&gt;Remove Backgrounds on Android&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/background-removal-android-by-imgly_ZES6LH.webp&quot; srcset=&quot;/_astro/background-removal-android-by-imgly_Z1gS015.webp 640w, /_astro/background-removal-android-by-imgly_Z2wJGue.webp 750w, /_astro/background-removal-android-by-imgly_1VNoN9.webp 828w, /_astro/background-removal-android-by-imgly_UrxrV.webp 1080w, /_astro/background-removal-android-by-imgly_Z2pjlyQ.webp 1280w, /_astro/background-removal-android-by-imgly_ZES6LH.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;The Background Removal plugin is now available for Android. Users can remove backgrounds from images directly in the editor, without leaving the app or sending images to an external server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; Android users get the same background removal capability that was already available on web, closing a gap for teams building cross-platform photo editing experiences. Users stay in your app for design tasks.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/android/edit-image/remove-bg-9dfcf7/&quot;&gt;Android Background Removal Docs&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;new-plugin-turn-pdfs-into-editable-designs&quot;&gt;New Plugin: Turn PDFs into Editable Designs&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/06/import-pdf.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;A new plugin and demo lets you import PDF documents directly into CE.SDK and turn them into fully editable designs.&lt;/p&gt;
&lt;p&gt;With that, users can bring existing PDF assets into your editor without rebuilding them from scratch, opening up workflows around template reuse, document personalization, and print editing.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;demos/pdf-template-import/web/&quot;&gt;Try the Demo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Set Font Sizes in Pixels or Points&lt;/strong&gt;&lt;br&gt;
v1.76 adds per-scene font-size unit control. Choose pixels or points for a scene, and CE.SDK font-size APIs and editor UI follow that unit across all platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set Different Line Spacing Per Paragraph&lt;/strong&gt;&lt;br&gt;
Each paragraph in a text block can now have its own line spacing, instead of every paragraph sharing the same setting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Add Precise Strokes to Texts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Add more text effects.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1771px) 1771px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1771&quot; height=&quot;1055&quot; src=&quot;https://img.ly/_astro/text-radius-1_10IvPw.webp&quot; srcset=&quot;/_astro/text-radius-1_JmxWw.webp 640w, /_astro/text-radius-1_13vCLJ.webp 750w, /_astro/text-radius-1_Z1Lsivf.webp 828w, /_astro/text-radius-1_1OS7Y.webp 1080w, /_astro/text-radius-1_1lfEBB.webp 1280w, /_astro/text-radius-1_UesP8.webp 1668w, /_astro/text-radius-1_10IvPw.webp 1771w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Style text outlines down to the last detail! The same controls you’d expect on any shape, now on text and captions too.&lt;/p&gt;
&lt;p&gt;Tweak stroke position (inner, outer, center), dash patterns, cap styles, and corner joins directly on text and caption blocks.&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/node/text/effects-2dc9fc/&quot;&gt;Text Effects Docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Draw Better Lines&lt;/strong&gt;&lt;br&gt;
Lines are now true line shapes. You can control how the ends of lines and dashes are styled (round, flat, or square), instead of working around lines behaving like thin rectangles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Control Where Images Sit Inside a Block&lt;/strong&gt;&lt;br&gt;
New APIs let you control how image fills align inside a block when using &lt;code&gt;Contain&lt;/code&gt; or &lt;code&gt;Cover&lt;/code&gt; fill modes. Useful for templates where the inserted image’s aspect ratio is unknown. Also available for cropping in the web editor.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;p&gt;v1.76 includes a significant number of improvements across platforms. See the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-76-0/&quot;&gt;full changelog&lt;/a&gt; for the complete list.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thank you for building with IMG.LY.&lt;/em&gt;&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/06/imgly-creative-sdk-whitelabel-mobile-web-1-76.jpg" medium="image"/><category>Release Notes</category></item><item><title>CE.SDK v1.75 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-75-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-75-0-release-notes/</guid><description>Four engine updates. More media support, new color and movement APIs for better workflows.</description><pubDate>Fri, 22 May 2026 12:18:08 GMT</pubDate><content:encoded>&lt;p&gt;v1.75 is an engine release. Four new capabilities across media support, color workflows and smarter canvas and selection behaviors.&lt;/p&gt;
&lt;p&gt;Let’s dive in!&lt;/p&gt;
&lt;h2 id=&quot;import-animated-pngs&quot;&gt;Import Animated PNGs&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/apng-support-creative-sdk-imgly_ZOUNQq.webp&quot; srcset=&quot;/_astro/apng-support-creative-sdk-imgly_2ryoKJ.webp 640w, /_astro/apng-support-creative-sdk-imgly_Zgvc6d.webp 750w, /_astro/apng-support-creative-sdk-imgly_7OMon.webp 828w, /_astro/apng-support-creative-sdk-imgly_Z2o21Xj.webp 1080w, /_astro/apng-support-creative-sdk-imgly_Z1BtpTR.webp 1280w, /_astro/apng-support-creative-sdk-imgly_ZOUNQq.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;CE.SDK now supports &lt;strong&gt;APNG&lt;/strong&gt; import. Animated PNG files load and behave in line with GIF import, giving you a second animated format to work with in your editor.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/file-format-support-3c4b2a/&quot;&gt;Supported File Formats Docs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;pull-dominant-colors-from-images-on-the-canvas&quot;&gt;Pull Dominant Colors from Images on the Canvas&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/05/colors-from-images.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The engine can now extract the most prominent colors from an image already placed on the canvas. The data is available programmatically, ready to feed into palette suggestions.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/colors/overview-16a177/&quot;&gt;Colors in CE.SDK Docs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;control-how-far-elements-can-move&quot;&gt;Control How Far Elements Can Move&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/05/movement-constraints.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Define how far elements can be dragged beyond a page or parent boundary. This is now fairly simple with new movement constraint APIs.&lt;/p&gt;
&lt;p&gt;Allow partial overflow where it makes sense while keeping content inside the intended editable area everywhere else.&lt;/p&gt;
&lt;p&gt;This means more precise control over template behavior. Useful for any use case where content boundaries need to be enforced.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/user-interface/customization/movement-constraints-8f3a2c/&quot;&gt;Movement Constraints API Docs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;
&lt;h3 id=&quot;reach-elements-hidden-behind-transparent-images&quot;&gt;Reach Elements Hidden Behind Transparent Images&lt;/h3&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/05/select-elements-under-transparents.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Clicks now pass through transparent image areas to the element underneath. Selecting stacked elements just got easier.&lt;/p&gt;
&lt;p&gt;Instead of selecting the top image, the click passes through to the element below. Now, users can reach and select elements from overlapping images without trouble.&lt;/p&gt;
&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;p&gt;v1.75 includes bug fixes across the engine, web, iOS, and Android. See the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-75-0/&quot;&gt;full changelog&lt;/a&gt; for the complete list.&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/05/creative-sdk-imgly-CESDK-whitelabel-design-video-editor-mobile-web-2.jpg" medium="image"/><category>Release Notes</category></item><item><title>CE.SDK Release Notes v1.74</title><link>https://img.ly/blog/creative-editor-sdk-v-1-74-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-74-0-release-notes/</guid><description>Beautiful gradient editing for the web editor, better PDF export for print workflows, and web demos you can clone and ship.</description><pubDate>Fri, 08 May 2026 08:53:50 GMT</pubDate><content:encoded>&lt;p&gt;v1.74 is a web-focused release. Color and Gradient editing gets a full rebuild, closing gaps with popular editors. And PDF export takes a meaningful step forward for professional print workflows.&lt;/p&gt;
&lt;h2 id=&quot;edit-gradients-with-full-control&quot;&gt;Edit Gradients with Full Control&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/05/gradients-creative-sdk-imgly.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The color input system in the web editor has been rebuilt. The user-facing result: gradient editing now works the way you’d expect it to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create and edit linear, radial, and conical gradients&lt;/strong&gt;&lt;br&gt;
Add and remove gradient colors, and switch between gradient types without losing the colors. Color picking now works consistently across all contexts: fill, stroke, shadow, and text.&lt;/p&gt;
&lt;p&gt;Build and refine complex gradients entirely within your editor, without relying on external tools.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/filters-and-effects/gradients-0ff079/#using-the-built-in-gradient-ui&quot;&gt;Explore Gradients Documentation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;export-print-ready-pdfs-without-extra-steps&quot;&gt;Export Print-Ready PDFs Without Extra Steps&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1920px) 1920px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;https://img.ly/_astro/pdf-export_Zx5b6u.webp&quot; srcset=&quot;/_astro/pdf-export_ZRS0UI.webp 640w, /_astro/pdf-export_Z24hTQU.webp 750w, /_astro/pdf-export_pB9iN.webp 828w, /_astro/pdf-export_SBDcB.webp 1080w, /_astro/pdf-export_1GVEpn.webp 1280w, /_astro/pdf-export_s1jC5.webp 1668w, /_astro/pdf-export_Zx5b6u.webp 1920w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Professional print workflows have a high bar for color fidelity. v1.74 raises CE.SDK’s output to meet it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spot colors are written as device CMYK in the exported file, matching what professional print pipelines expect.&lt;/li&gt;
&lt;li&gt;Overprint on text is preserved correctly.&lt;/li&gt;
&lt;li&gt;You can now opt out of ICC profile embedding in the print-ready PDF plugin when your workflow doesn’t need it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Take exported PDFs directly into production with less manual intervention, making CE.SDK a stronger fit for workflows where color fidelity is a real purchasing factor.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/plugins/print-ready-pdf-iroalu/&quot;&gt;Print-Ready PDF Plugin Documentation&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/export-save-publish/export/to-pdf-95e04b/&quot;&gt;Export to PDF Documentation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;
&lt;h3 id=&quot;edit-vectors-with-precision&quot;&gt;Edit Vectors with Precision&lt;/h3&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/05/vector-editing-design-editor-sdk-imgly.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Vector editing now feels more precise and easier to control, with better bend handles, live corner rounding, mirrored handles for new points on curved paths, new anchor snapping, and clearer tooltips throughout the editing flow.&lt;/p&gt;
&lt;h3 id=&quot;align-elements-with-snapping-guides&quot;&gt;Align Elements with Snapping Guides&lt;/h3&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/05/creative-sdk-snapping.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Snapping guides have been refined to better show what is being aligned, using bounded guide segments, clearer visual distinctions, and new anchor-to-anchor feedback, making object placement and path editing more predictable and easier to understand.&lt;/p&gt;
&lt;h2 id=&quot;developer-experience&quot;&gt;Developer Experience&lt;/h2&gt;
&lt;h3 id=&quot;web-demos-are-now-starter-kits&quot;&gt;Web Demos Are Now Starter Kits&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;See it. Clone it. Ship it.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1920px) 1920px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1920&quot; height=&quot;1080&quot; src=&quot;https://img.ly/_astro/Starter-Kits-Web-imgly_11jn8N.webp&quot; srcset=&quot;/_astro/Starter-Kits-Web-imgly_1UwRwF.webp 640w, /_astro/Starter-Kits-Web-imgly_Z1dwrtm.webp 750w, /_astro/Starter-Kits-Web-imgly_Z7N86e.webp 828w, /_astro/Starter-Kits-Web-imgly_Z2pS6ok.webp 1080w, /_astro/Starter-Kits-Web-imgly_ZwJ0Nc.webp 1280w, /_astro/Starter-Kits-Web-imgly_Z17hCjd.webp 1668w, /_astro/Starter-Kits-Web-imgly_11jn8N.webp 1920w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Every web demo is now a Starter Kit. That means 46 fully-fledged, clonable app templates. Starter Kits are production-ready configurations complete with the toolbars, behaviors, and workflows a real product needs.&lt;/p&gt;
&lt;p&gt;Clone it, run it, build from there.&lt;/p&gt;
&lt;p&gt;Whether you need the core Design, Photo, and Video Editors (and their powerhouse Advanced variants), specialized industry kits for Apparel, or AI-optimized workflows for generative assets, there is now a clonable app for every use case.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/showcases/cesdk/?tags=web&quot;&gt;Explore Web Editor Demos&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/get-started/vanilla-js/quickstart-yef23s/?ref=img.ly&quot;&gt;Starter Kit Documentation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;p&gt;v1.74 includes fixes across the engine and web editor. See the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-74-0/&quot;&gt;full changelog&lt;/a&gt; for the complete list.&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/05/creative-editor-sdk-starter-kit-design-editor-web-mobile-react-vue-js-1.jpg" medium="image"/><category>Release Notes</category></item><item><title>How 600+ Teams Shipped Creative Editing in 14 Days</title><link>https://img.ly/blog/imgly-impact-report/</link><guid isPermaLink="true">https://img.ly/blog/imgly-impact-report/</guid><description>A data report based on 600+ customers, 28 structured customer interviews, and a self-reported customer survey.</description><pubDate>Tue, 28 Apr 2026 21:15:17 GMT</pubDate><content:encoded>&lt;h2 id=&quot;the-imgly-impact-report&quot;&gt;The IMG.LY Impact Report&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Based on a self-reported customer survey, 28 structured customer interviews, and IMG.LY’s published customer case studies. External benchmarks cited in context.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;600+ companies&lt;/strong&gt; from startups, over Fortune 500s to government organizations run creative editing on IMG.LY, collectively producing &lt;strong&gt;500 million creations every month&lt;/strong&gt;. The median customer goes from first SDK access to a &lt;strong&gt;working prototype in 2 days&lt;/strong&gt; and a &lt;strong&gt;production-ready feature shipped inside a single 14-day sprint&lt;/strong&gt;. Those self-reported medians run roughly &lt;strong&gt;13× faster&lt;/strong&gt; than the 6-month industry baseline for building an equivalent editor in-house, and around 6× faster than stitching together an open-source toolkit.&lt;/p&gt;
&lt;p&gt;The time-to-market number is the entry ticket. What those 600+ customers do &lt;em&gt;after&lt;/em&gt; shipping, how the editor changes their pricing, funnel, team velocity, and competitive position is what this report is about.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Methodology note.&lt;/strong&gt; Time-to-prototype and time-to-MVP figures are &lt;strong&gt;self-reported by IMG.LY customers&lt;/strong&gt; in a recent customer survey. All named customer outcomes are drawn from &lt;a href=&quot;https://img.ly/case-studies&quot;&gt;IMG.LY’s published case studies&lt;/a&gt;, where the customer has reviewed and approved the specific figures cited. Quantitative ranges and anonymous quotes come from 30 structured customer interviews (2024–2026); individual customers are not identified.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;what-customers-unlock&quot;&gt;What Customers Unlock&lt;/h2&gt;
&lt;h3 id=&quot;1-ship-in-days-not-quarters&quot;&gt;1. Ship in days, not quarters&lt;/h3&gt;
&lt;p&gt;A working prototype takes an average of two days, a production feature often just a single sprint. Customer interviews put the alternative, an in-house build, at &lt;strong&gt;6–12 months with 2–3 senior developers&lt;/strong&gt;, consistent with the cost bands documented in IMG.LY’s &lt;a href=&quot;https://img.ly/blog/strategic-guide-to-creative-editing-when-to-build-when-to-buy/&quot;&gt;Build vs. Buy guide&lt;/a&gt; and independently with the &lt;a href=&quot;https://thestory.is/en/journal/chaos-report/&quot;&gt;Standish Group CHAOS Report&lt;/a&gt;, which finds only &lt;strong&gt;31% of software projects succeed&lt;/strong&gt; on time, on budget, and with full scope… and under &lt;strong&gt;10%&lt;/strong&gt; for large projects.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://img.ly/case-studies/plai&quot;&gt;Plai&lt;/a&gt; went live in about a month where their founder had estimated “months and months” for an in-house build. &lt;a href=&quot;https://img.ly/case-studies/optimizely&quot;&gt;Optimizely&lt;/a&gt;, serving 1,000+ enterprise customers, described the integration as &lt;em&gt;“one of the quickest projects we’ve worked on.”&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;imgly-chart imgly-chart--time&quot;&gt;&lt;p class=&quot;imgly-eyebrow&quot;&gt;Time to a production-ready MVP&lt;/p&gt;&lt;h3 class=&quot;imgly-title&quot;&gt;14 days vs. 6 months: how long it takes to ship creative editing&lt;/h3&gt;&lt;p class=&quot;imgly-subtitle&quot;&gt;Median time from project start to a production-ready creative editor, by integration path.&lt;/p&gt;&lt;div class=&quot;imgly-canvas-wrap&quot;&gt;&lt;canvas id=&quot;imgly-chart-time-canvas&quot;&gt;&lt;/canvas&gt;&lt;/div&gt;&lt;p class=&quot;imgly-footnote&quot;&gt;&lt;strong&gt;Sources.&lt;/strong&gt; CE.SDK figure (14 days) is the self-reported median from an IMG.LY customer survey; individual results vary with scope and team. In-house (180 days) and open-source (90 days) figures are midpoints of the ranges documented in IMG.LY&apos;s &lt;em&gt;Build vs. Buy guide&lt;/em&gt;, cross-referenced with customer interviews (N=28).&lt;/p&gt;&lt;/div&gt;
&lt;h3 id=&quot;2-open-new-pricing-and-market-tiers&quot;&gt;2. Open new pricing and market tiers&lt;/h3&gt;
&lt;p&gt;Embedding an editor changes the customer’s &lt;em&gt;own&lt;/em&gt; unit economics. It unlocks a self-serve tier where users previously needed a designer in the loop, lowers the price floor, and opens markets where manual production was the binding constraint.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://img.ly/case-studies/plai&quot;&gt;Plai&lt;/a&gt; doubled annual revenue and now generates &lt;strong&gt;30,000+ ad creatives monthly&lt;/strong&gt; on the platform. &lt;a href=&quot;https://img.ly/case-studies/postbuddy&quot;&gt;Postbuddy&lt;/a&gt; measured a &lt;strong&gt;4× A/B-test improvement&lt;/strong&gt; after moving direct-mail creation in-app, a lift that funded expansion into Sweden and Norway. In an anonymized interview, one customer described the change plainly: &lt;em&gt;“We can lower our prices for the base product, it’s cheaper for clients who can use self-service.”&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-lift-your-own-conversion-and-engagement&quot;&gt;3. Lift your own conversion and engagement&lt;/h3&gt;
&lt;p&gt;In-context editing keeps users inside the product, shortens time-to-value, and removes the “export to Photoshop” detour that quietly leaks trials. The effect shows up directly in sign-up and trial-to-paid numbers.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://img.ly/case-studies/omneky&quot;&gt;Omneky&lt;/a&gt; recorded a &lt;strong&gt;10× month-over-month increase in new sign-ups&lt;/strong&gt; after embedding CE.SDK. In a separate interview, one customer described &lt;strong&gt;400–500 organic trials per month with roughly $65–70K of opportunity evaporating&lt;/strong&gt; at an 8% trial-to-paid rate tied largely to editor friction, the number that made their own build-vs-buy case close itself.&lt;/p&gt;
&lt;h3 id=&quot;4-free-your-design-marketing-and-support-teams&quot;&gt;4. Free your design, marketing, and support teams&lt;/h3&gt;
&lt;p&gt;The cost saved by an editor isn’t only on the engineering line. It shows up in designer queues that disappear, support tickets that drop, and marketing teams that stop waiting on the bottleneck.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://img.ly/case-studies/imagebank&quot;&gt;ImageBank X&lt;/a&gt; compressed a recurring asset-prep task from &lt;strong&gt;15 minutes to 2 minutes — an 87% reduction per task&lt;/strong&gt;. &lt;a href=&quot;https://img.ly/case-studies/halio&quot;&gt;Halio.ai&lt;/a&gt; enables financial advisors to produce &lt;strong&gt;30 days of branded content in 30 minutes&lt;/strong&gt;. Interview customers describe the same pattern in plainer language: &lt;em&gt;“happier marketing teams,”&lt;/em&gt; and, of the post-launch support burden, &lt;em&gt;“the things the sales team had to deal with all day are just gone.”&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;5-compound-instead-of-freeze&quot;&gt;5. Compound instead of freeze&lt;/h3&gt;
&lt;p&gt;This is where the engineering-economics story earns its keep. An in-house editor is a snapshot: the team ships what’s feasible in the window, then expends time and money just to keep it alive. Atlassian’s &lt;a href=&quot;https://www.atlassian.com/software/compass/resources/state-of-developer-2024&quot;&gt;2024 State of Developer Experience Report&lt;/a&gt; (N=2,100+) found &lt;strong&gt;69% of developers lose eight or more hours per week to inefficiencies — about 20% of their time — with technical debt as the primary cause&lt;/strong&gt;. Stack Overflow’s &lt;a href=&quot;https://survey.stackoverflow.co/2024/&quot;&gt;2024 Developer Survey&lt;/a&gt; (N=65,437) independently found &lt;strong&gt;62% of developers rank technical debt as their single biggest frustration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;CE.SDK customers don’t pay that tax. New capabilities such as AI background removal, text-to-image, object add/remove, style transfer arrive as modular plugins, not re-architectures. One interviewed customer, who had spent a year building their own editor before switching, described maintaining it as &lt;em&gt;“a full-time job and our main product isn’t editing.”&lt;/em&gt; Every month an in-house team spends on maintenance is a month IMG.LY customers get new capabilities shipped &lt;em&gt;to&lt;/em&gt; them. The feature gap widens, not narrows.&lt;/p&gt;
&lt;div class=&quot;imgly-chart imgly-chart--compound&quot;&gt;&lt;p class=&quot;imgly-eyebrow&quot;&gt;Editor capability over 24 months&lt;/p&gt;&lt;h3 class=&quot;imgly-title&quot;&gt;In-house builds freeze. CE.SDK customers compound.&lt;/h3&gt;&lt;p class=&quot;imgly-subtitle&quot;&gt;An in-house editor ships at the snapshot the team can afford and then plateaus under the weight of maintenance. CE.SDK customers absorb new capabilities — AI background removal, text-to-image, object remove, automatic subtitles — as modular plugins each quarter.&lt;/p&gt;&lt;div class=&quot;imgly-legend&quot;&gt;&lt;div class=&quot;imgly-legend-item&quot;&gt;&lt;span class=&quot;imgly-legend-line&quot;&gt;&lt;/span&gt;Build in-house&lt;/div&gt;&lt;div class=&quot;imgly-legend-item&quot;&gt;&lt;span class=&quot;imgly-legend-line&quot;&gt;&lt;/span&gt;CE.SDK customer&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;imgly-canvas-wrap&quot;&gt;&lt;canvas id=&quot;imgly-chart-compound-canvas&quot;&gt;&lt;/canvas&gt;&lt;/div&gt;&lt;p class=&quot;imgly-footnote&quot;&gt;&lt;strong&gt;Illustrative.&lt;/strong&gt; The CE.SDK trajectory reflects the cadence of major capability releases shipped to customers without re-architecture. The in-house trajectory reflects the typical build-then-maintain pattern documented in customer interviews and corroborated by the &lt;a href=&quot;https://www.atlassian.com/software/compass/resources/state-of-developer-2024&quot;&gt;Atlassian 2024 State of Developer Experience Report&lt;/a&gt; (69% of developers lose 8+ hours per week to inefficiencies, primarily technical debt).&lt;/p&gt;&lt;/div&gt;
&lt;h3 id=&quot;6-become-deal-eligible-and-privacy-credible&quot;&gt;6. Become deal-eligible and privacy-credible&lt;/h3&gt;
&lt;p&gt;Some categories require an editor to win the deal at all. One interviewed customer received a written RFP rejection that read: &lt;em&gt;“the other provider has an editor, you don’t.”&lt;/em&gt; That single moment approved their budget to buy.&lt;/p&gt;
&lt;p&gt;For regulated buyers, fintech, healthcare, government, enterprise, client-side processing is a procurement requirement, not a feature. CE.SDK’s default client-side execution means customer data never leaves the browser, which makes the editor defensible in categories where server-side alternatives are blocked.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Swiss Post&lt;/strong&gt; producing &lt;strong&gt;1 million+ personalized postcards annually&lt;/strong&gt; on the platform described CE.SDK as &lt;em&gt;“the only solution allowing a specialized, on-brand UI.”&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-economics-in-one-table&quot;&gt;The economics, in one table&lt;/h2&gt;
&lt;p&gt;The cost gap between building and buying isn’t just wider on day one, it widens over time. Every month an in-house team spends maintaining the editor is a month IMG.LY customers compound new capability on top of what’s already shipped. The table below summarizes the 3-year picture. For the full cost methodology, including the open-source path and the senior-developer rate assumptions, see IMG.LY’s &lt;a href=&quot;https://img.ly/blog/strategic-guide-to-creative-editing-when-to-build-when-to-buy/&quot;&gt;Build vs. Buy guide&lt;/a&gt;.&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Build In-House&lt;/th&gt;&lt;th&gt;Open Source + Glue&lt;/th&gt;&lt;th&gt;CE.SDK&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Working prototype&lt;/td&gt;&lt;td&gt;2–6 months&lt;/td&gt;&lt;td&gt;1–2 months&lt;/td&gt;&lt;td&gt;&lt;strong&gt;2 days&lt;/strong&gt; (self-reported median)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Production MVP&lt;/td&gt;&lt;td&gt;6–12+ months&lt;/td&gt;&lt;td&gt;3–6 months&lt;/td&gt;&lt;td&gt;&lt;strong&gt;14 days&lt;/strong&gt; (self-reported median)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Team required&lt;/td&gt;&lt;td&gt;3–5 senior developers&lt;/td&gt;&lt;td&gt;1–2 senior developers&lt;/td&gt;&lt;td&gt;1 developer for integration&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Year-1 development cost&lt;/td&gt;&lt;td&gt;$100K–$500K+&lt;/td&gt;&lt;td&gt;$150K–$400K&lt;/td&gt;&lt;td&gt;License + integration&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Annual maintenance&lt;/td&gt;&lt;td&gt;$75K–$125K (15–25%)&lt;/td&gt;&lt;td&gt;$50K–$100K&lt;/td&gt;&lt;td&gt;Included&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3-year TCO&lt;/td&gt;&lt;td&gt;$525K–$1.4M+&lt;/td&gt;&lt;td&gt;$300K–$700K+&lt;/td&gt;&lt;td&gt;Fraction of build cost&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cross-platform parity&lt;/td&gt;&lt;td&gt;Build per platform&lt;/td&gt;&lt;td&gt;Typically web-only&lt;/td&gt;&lt;td&gt;Web, iOS, Android, Desktop, Server&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Source for build and open-source cost bands: IMG.LY’s&lt;/em&gt; &lt;a href=&quot;https://img.ly/blog/strategic-guide-to-creative-editing-when-to-build-when-to-buy/&quot;&gt;&lt;em&gt;Strategic Guide to Creative Editing: When to Build, When to Buy&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Cross-referenced against&lt;/em&gt; &lt;a href=&quot;https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm&quot;&gt;&lt;em&gt;BLS May 2024 wage data&lt;/em&gt;&lt;/a&gt; &lt;em&gt;- median software-developer wage $133,080, 90th percentile $211,450 - and&lt;/em&gt; &lt;a href=&quot;https://pegotec.net/software-maintenance-cost-percentage-2026-industry-benchmarks/&quot;&gt;&lt;em&gt;aggregated maintenance benchmarks (Pegotec, 2026)&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. Time-to-prototype and time-to-MVP for CE.SDK are &lt;strong&gt;self-reported medians from an IMG.LY customer survey&lt;/strong&gt;; individual results vary with scope, team, and platform target.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;when-building-in-house-still-makes-sense&quot;&gt;When building in-house still makes sense&lt;/h2&gt;
&lt;p&gt;This report defends one conclusion, so here is the honest counterweight.&lt;br&gt;
Build your own creative editor if &lt;strong&gt;all&lt;/strong&gt; of the following are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creative editing is your core product, and your unique IP lives inside the editing experience itself.&lt;/li&gt;
&lt;li&gt;Your requirements are genuinely non-standard, i.e. no off-the-shelf SDK supports your rendering or interaction model.&lt;/li&gt;
&lt;li&gt;You have surplus senior engineering capacity that isn’t needed on differentiated work elsewhere.&lt;/li&gt;
&lt;li&gt;Time-to-market is not competitive in your category, nobody else is shipping similar capability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If any one of these is false, the economics above generally make buying both cheaper and faster.&lt;/p&gt;
&lt;h2 id=&quot;methodology&quot;&gt;Methodology&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Time-to-prototype and time-to-MVP&lt;/strong&gt; (2 days, 14 days) are self-reported medians from an IMG.LY customer survey. Individual results vary with team experience, integration scope, and platform target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In-house and open-source timeline ranges&lt;/strong&gt; are drawn from 28 structured customer interviews conducted between 2024 and 2026, cross-referenced against IMG.LY’s &lt;a href=&quot;https://img.ly/blog/strategic-guide-to-creative-editing-when-to-build-when-to-buy/&quot;&gt;Build vs. Buy guide&lt;/a&gt;. Interview customers are not identified; quantitative ranges reflect the distribution of answers across the set.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Named customer outcomes&lt;/strong&gt; (Plai, Omneky, Optimizely, Swiss Post, ImageBank X, Halio.ai, Postbuddy) come from &lt;a href=&quot;https://img.ly/case-studies&quot;&gt;IMG.LY’s published case studies&lt;/a&gt;, where the customer has reviewed and approved each cited figure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;External benchmarks&lt;/strong&gt; are drawn from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm&quot;&gt;U.S. Bureau of Labor Statistics, Occupational Outlook Handbook, Software Developers (May 2024)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.atlassian.com/software/compass/resources/state-of-developer-2024&quot;&gt;Atlassian State of Developer Experience Report (2024)&lt;/a&gt; (N = 2,100+ developers and engineering leaders, in partnership with DX and Wakefield Research)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://survey.stackoverflow.co/2024/&quot;&gt;Stack Overflow 2024 Developer Survey&lt;/a&gt; (N = 65,437 developers across 185 countries)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thestory.is/en/journal/chaos-report/&quot;&gt;Standish Group CHAOS Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Aggregated software-maintenance benchmarks from Gartner, IEEE, and industry practitioners, summarized in &lt;a href=&quot;https://pegotec.net/software-maintenance-cost-percentage-2026-industry-benchmarks/&quot;&gt;Pegotec (2026)&lt;/a&gt; and &lt;a href=&quot;https://ventionteams.com/enterprise/software-maintenance-costs&quot;&gt;Vention Teams&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;frequently-asked-questions&quot;&gt;Frequently asked questions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;How long does it take to integrate CE.SDK?&lt;/strong&gt;&lt;br&gt;
The median customer in our survey reports a working prototype within &lt;strong&gt;2 days&lt;/strong&gt; and a production-ready MVP within a single &lt;strong&gt;14-day sprint&lt;/strong&gt;. Self-reported; varies with scope and team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What do IMG.LY customers unlock beyond faster shipping?&lt;/strong&gt;&lt;br&gt;
Five additional outcomes: new pricing and market tiers enabled by self-serve editing; lifted trial-to-paid and sign-up conversion; reduced design, marketing, and support load; a roadmap that compounds instead of freezes as AI features ship as plugins; and deal eligibility in procurement categories that require an embedded editor or client-side processing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Can AI coding agents like Claude Code accelerate CE.SDK integration further?&lt;/strong&gt;&lt;br&gt;
Yes. IMG.LY publishes a set of specialized &lt;a href=&quot;https://github.com/imgly/agent-skills&quot;&gt;CE.SDK Agent Skills&lt;/a&gt; portable knowledge packs that give AI coding assistants expert-level understanding of the SDK before they write a line of code. The skills cover framework-specific documentation lookup (React, Vue, Svelte, Angular, Next.js, Nuxt.js, SvelteKit, Electron, Node.js, Vanilla JS), feature implementation (&lt;code&gt;/cesdk:build&lt;/code&gt;), conceptual explanations (&lt;code&gt;/cesdk:explain&lt;/code&gt;), and a builder agent that autonomously scaffolds complete CE.SDK applications from a natural-language description.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How much does it cost to build a creative editor in-house?&lt;/strong&gt;&lt;br&gt;
Published industry benchmarks and customer-reported estimates converge on &lt;strong&gt;$100K–$500K+ initial development&lt;/strong&gt; over &lt;strong&gt;6–12 months&lt;/strong&gt; with &lt;strong&gt;3–5 senior developers&lt;/strong&gt;, plus &lt;strong&gt;15–25% of that cost annually in maintenance&lt;/strong&gt;. 3-year TCO typically lands between &lt;strong&gt;$525K and $1.4M&lt;/strong&gt;. See our &lt;a href=&quot;https://img.ly/blog/strategic-guide-to-creative-editing-when-to-build-when-to-buy/&quot;&gt;Build vs. Buy guide&lt;/a&gt; for full methodology.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What percentage of developer time is spent on maintenance?&lt;/strong&gt;&lt;br&gt;
Atlassian’s 2024 &lt;em&gt;State of Developer Experience Report&lt;/em&gt; found &lt;strong&gt;69% of developers lose 8+ hours per week to inefficiencies, about 20% of their time, primarily to technical debt&lt;/strong&gt;. Gartner reports that &lt;strong&gt;55–80% of corporate IT budgets&lt;/strong&gt; go to maintaining existing systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is the failure rate of custom software projects?&lt;/strong&gt;&lt;br&gt;
The Standish Group CHAOS research finds only &lt;strong&gt;31% of software projects succeed&lt;/strong&gt; (on time, on budget, full scope); &lt;strong&gt;50% are challenged&lt;/strong&gt;, &lt;strong&gt;19% cancelled outright&lt;/strong&gt;. For large projects specifically, success rates fall &lt;strong&gt;below 10%&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&quot;imgly-chart imgly-chart--success&quot;&gt;&lt;p class=&quot;imgly-eyebrow&quot;&gt;Custom software project outcomes&lt;/p&gt;&lt;h3 class=&quot;imgly-title&quot;&gt;Only 31% of custom software projects succeed&lt;/h3&gt;&lt;p class=&quot;imgly-subtitle&quot;&gt;Across tens of thousands of tracked projects, the Standish Group CHAOS research finds the majority of custom software is late, over budget, reduced in scope, or cancelled outright.&lt;/p&gt;&lt;div class=&quot;imgly-grid&quot;&gt;&lt;div class=&quot;imgly-canvas-wrap&quot;&gt;&lt;canvas id=&quot;imgly-chart-success-canvas&quot;&gt;&lt;/canvas&gt;&lt;/div&gt;&lt;div class=&quot;imgly-legend&quot;&gt;&lt;div class=&quot;imgly-legend-row&quot;&gt;&lt;span class=&quot;imgly-legend-swatch&quot;&gt;&lt;/span&gt;&lt;div&gt;&lt;div class=&quot;imgly-legend-pct&quot;&gt;31%&lt;/div&gt;&lt;div class=&quot;imgly-legend-label&quot;&gt;Successful&lt;/div&gt;&lt;div class=&quot;imgly-legend-detail&quot;&gt;On time, on budget, with full scope.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;imgly-legend-row&quot;&gt;&lt;span class=&quot;imgly-legend-swatch&quot;&gt;&lt;/span&gt;&lt;div&gt;&lt;div class=&quot;imgly-legend-pct&quot;&gt;50%&lt;/div&gt;&lt;div class=&quot;imgly-legend-label&quot;&gt;Challenged&lt;/div&gt;&lt;div class=&quot;imgly-legend-detail&quot;&gt;Delivered late, over budget, or with reduced features.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;imgly-legend-row&quot;&gt;&lt;span class=&quot;imgly-legend-swatch&quot;&gt;&lt;/span&gt;&lt;div&gt;&lt;div class=&quot;imgly-legend-pct&quot;&gt;19%&lt;/div&gt;&lt;div class=&quot;imgly-legend-label&quot;&gt;Failed&lt;/div&gt;&lt;div class=&quot;imgly-legend-detail&quot;&gt;Cancelled before delivery.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;imgly-callout&quot;&gt;&lt;p class=&quot;imgly-callout-headline&quot;&gt;~25% of IMG.LY customers failed at building a creative editor in-house&lt;/p&gt;&lt;p class=&quot;imgly-callout-body&quot;&gt;In our customer interviews (N=28), roughly one in four customers had attempted to build a creative editor in-house — or stitch one together from open-source — and abandoned the attempt before adopting CE.SDK.&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;imgly-footnote&quot;&gt;&lt;strong&gt;Source.&lt;/strong&gt; Standish Group CHAOS Report. For large projects specifically — the size band most in-house creative-editor builds fall into — success rates drop below &lt;strong&gt;10%&lt;/strong&gt;. IMG.LY customer figure is drawn from 28 structured customer interviews conducted between 2024 and 2026.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;How many companies use IMG.LY CE.SDK?&lt;br&gt;
600+ customers&lt;/strong&gt; including startups, Fortune 500 companies, and government organizations collectively produce &lt;strong&gt;500 million creations per month&lt;/strong&gt; on the platform.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What platforms does CE.SDK support?&lt;/strong&gt;&lt;br&gt;
Web (React, Angular, Vue, Svelte, Next.js, Nuxt.js, SvelteKit, Vanilla JavaScript, Electron), Mobile (iOS/Swift, Android/Kotlin, React Native, Flutter, Ionic, Cordova), and Server (Node.js headless mode for batch automation).&lt;/p&gt;</content:encoded><dc:creator>Jan</dc:creator><media:content url="https://blog.img.ly/2026/04/imgly-data-report.jpg" medium="image"/><category>Creative Editing</category></item><item><title>Starter Kits: A New Way to Use and Configure Our Editor</title><link>https://img.ly/blog/starter-kits-mobile/</link><guid isPermaLink="true">https://img.ly/blog/starter-kits-mobile/</guid><description>This release replaces CE.SDK&apos;s prebuilt mobile editors with Starter Kits: complete, ownable editor projects for iOS and Android. Full config control, no surprise UI changes.</description><pubDate>Wed, 22 Apr 2026 17:14:54 GMT</pubDate><content:encoded>&lt;p&gt;When we built the first version of CE.SDK’s mobile editors, we optimized for speed and ease of integration. We designed a set of ready-made solution editors: &lt;strong&gt;Photo&lt;/strong&gt;, &lt;strong&gt;Design&lt;/strong&gt;, &lt;strong&gt;Video&lt;/strong&gt;, &lt;strong&gt;Postcard&lt;/strong&gt;, and &lt;strong&gt;Apparel Editor.&lt;/strong&gt; Each is built around the use cases we believed would meet the needs of most of our customers. With one component and a license key, you had a full creative editor running in your app. That approach got products to market fast, and for many teams it was exactly the right starting point.&lt;/p&gt;
&lt;p&gt;But products evolve, and so do the needs around it.&lt;/p&gt;
&lt;p&gt;As integrations matured, teams needed deeper configuration, more granular control, and the ability to shape the editor into something uniquely theirs. What starts as “give us a &lt;em&gt;working&lt;/em&gt; photo editor” becomes “give us &lt;em&gt;our&lt;/em&gt; photo editor.”&lt;/p&gt;
&lt;p&gt;That’s why, starting with CE.SDK &lt;code&gt;v1.73&lt;/code&gt; on iOS and Android, CE.SDK evolves from a set of preconfigured solution editors into a single, flexible &lt;code&gt;Editor&lt;/code&gt; foundation paired with &lt;strong&gt;Starter Kits:&lt;/strong&gt; complete, working editor projects that you own, customize, and control entirely.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Starter Kits for Mobile: Fast set-up, full ownership and customization.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2000px) 2000px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2000&quot; height=&quot;857&quot; src=&quot;https://img.ly/_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_Z1LXJD2.webp&quot; srcset=&quot;/_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_ZKfHLV.webp 640w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_1YNKAb.webp 750w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_iHUF2.webp 828w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_k5jwR.webp 1080w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_2v66l9.webp 1280w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_17m3jv.webp 1668w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android-1_Z1LXJD2.webp 2000w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Here’s what that means and why it’s worth it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-changed&quot;&gt;What changed&lt;/h2&gt;
&lt;p&gt;Previously, you integrated CE.SDK by dropping in a solution-specific component: &lt;strong&gt;PhotoEditor, DesignEditor, VideoEditor&lt;/strong&gt;, &lt;strong&gt;ApparelEditor and PostacardEditor&lt;/strong&gt;. Each came with built-in UI, default behaviors, and preconfigured toolbars. You could adjust &lt;em&gt;some&lt;/em&gt; of it through configuration APIs, but the foundation was managed internally by our SDK.&lt;/p&gt;
&lt;p&gt;With &lt;code&gt;v1.73&lt;/code&gt;, those components are replaced by a single &lt;strong&gt;Editor&lt;/strong&gt; entry point that starts minimal without any configuration and a set of &lt;strong&gt;Starter Kits&lt;/strong&gt; that provide the full experience you’re used to.&lt;/p&gt;
&lt;p&gt;Each Starter Kit matches a previous solution: Photo, Design, Video, Postcard, and Apparel. You download it, drop it into your project, and you have the same editor as before.&lt;/p&gt;
&lt;p&gt;With Starter Kits, the setup becomes explicit and lives in &lt;strong&gt;your&lt;/strong&gt; &lt;strong&gt;own codebase&lt;/strong&gt;. Instead of relying on built-in defaults inside a prebuilt solution, you &lt;strong&gt;start from a ready-made configuration&lt;/strong&gt; structure that you can inspect, own, and change directly.&lt;/p&gt;
&lt;p&gt;And if none of the starter kits match your needs, you can build your own editor from scratch using our configuration directly.&lt;/p&gt;
&lt;p&gt;Before, you were always starting from one of the predefined solutions and trying to bend it to fit your use case, which was limited and often frustrating. Now, the building blocks are there for you to assemble however you want.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-are-the-benefits&quot;&gt;&lt;strong&gt;What are the benefits?&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id=&quot;the-full-picture-in-one-place&quot;&gt;The full picture in one place&lt;/h3&gt;
&lt;p&gt;Configuration used to be spread across multiple APIs and documentation pages. It wasn’t always clear what you could customize, where to find the right setting, or whether a particular behavior was even exposed for modification.&lt;/p&gt;
&lt;p&gt;With a starter kit, the configuration &lt;em&gt;is&lt;/em&gt; the documentation. Open the configuration file, and you see every callback, every toolbar item, every setting, the complete scope of what the editor does.&lt;/p&gt;
&lt;p&gt;This also makes production behavior safer. Critical parts of the editor setup are now explicit in your code rather than implied by SDK defaults. Your team can see exactly what is configured, why, and review changes through your normal development process.&lt;/p&gt;
&lt;h3 id=&quot;more-control-and-capability-over-your-editor&quot;&gt;More control and capability over your editor&lt;/h3&gt;
&lt;p&gt;Starter kits unlock customizations that were simply not possible before: restructure how the editor initializes; inject custom logic between loading phases; defines layouts from the ground up; build workflows that are unique to your product; and more.&lt;/p&gt;
&lt;p&gt;The old configuration APIs drew a line between “customizable” and “not customizable.” Starter kits erase that line. &lt;strong&gt;If you can see it in the code, you can change it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In simple terms, you can now adapt the editor to your product, instead of adapting your product to the editor, and this was one of our main drivers.&lt;/p&gt;
&lt;h3 id=&quot;opt-in-never-opt-out&quot;&gt;Opt in, never opt out&lt;/h3&gt;
&lt;p&gt;Until now, an SDK update could introduce visible changes to your editor, like a new toolbar button, a different menu option, a changed default, without you asking for it. Your release process had to account for UI changes that came from a dependency, not from your team.&lt;/p&gt;
&lt;p&gt;With CE.SDK &lt;code&gt;v1.73&lt;/code&gt;, that dynamic is reversed. SDK updates bring new features, engine improvements, performance gains, and bug fixes. But your editor UI stays exactly as you left it. New features and components become building blocks you adopt on your own schedule, documented, with examples, and ready when your implicit decide to add them. Nothing shows up in your product unless you put it there.&lt;/p&gt;
&lt;h3 id=&quot;two-paths-your-choice&quot;&gt;Two paths, your choice&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Start from a Starter Kit&lt;/strong&gt;&lt;br&gt;
Download the one that matches your use case, run it, and customize from there. Each kit is a proven, production-ready structure that handles the complexity of editor setup so you don’t have to figure it out from scratch. Most teams will take this path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build from scratch&lt;/strong&gt;&lt;br&gt;
If you have very specific requirements or prefer to architect everything yourself, the Editor view accepts raw configuration directly. The starter kits serve as comprehensive, living reference implementations. Even if you never use them directly, they show you exactly how every piece fits together.&lt;/p&gt;
&lt;h3 id=&quot;the-engine-you-rely-on-hasnt-changed&quot;&gt;The engine you rely on hasn’t changed&lt;/h3&gt;
&lt;p&gt;It’s worth saying clearly: the core of CE.SDK, the rendering engine, export pipeline, asset handling, performance characteristics, and everything that powers the creative experience is unchanged. We improved how you configure and integrate the editor, not what powers it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-tradeoff&quot;&gt;The Tradeoff&lt;/h2&gt;
&lt;p&gt;The old one-component integration was genuinely convenient for getting started. With starter kits, you have a small module in your project, a handful of well-organized files that you own and maintain.&lt;/p&gt;
&lt;p&gt;We believe this is the right tradeoff for any team building a real product. The moment you need to customize anything you’ll be able to clearly structured and to modify without limits.&lt;/p&gt;
&lt;p&gt;At its core, this change is about moving from implicit behavior to explicit control, and we believe that is the better long-term contract with our customers. Your editor should not change in meaningful ways unless you decide it should. Your upgrade path should be predictable. And your team should be able to understand the integration by reading its own code.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;We’ve written detailed migration guides that walk through every change with before-and-after examples. Each guide also links to the starter kit repositories for your platform:&lt;/p&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;iOS&lt;/th&gt;&lt;th&gt;Android&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Migration Guide&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://img.ly/docs/cesdk/ios/to-v1-73-ab14fb/&quot;&gt;Upgrading to v1.73&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://img.ly/docs/cesdk/android/to-v1-73-ab14fb/&quot;&gt;Upgrading to v1.73&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Photo Editor&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-photo-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-photo-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design Editor&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-design-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-design-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Video Editor&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-video-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-video-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Postcard Editor&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-postcard-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-postcard-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apparel Editor&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-apparel-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-apparel-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;We’re here to help with the transition. If you have questions, reach out to our support team or open an issue on the starter kit repositories.&lt;/p&gt;</content:encoded><dc:creator>João</dc:creator><media:content url="https://blog.img.ly/2026/04/starter-kits-mobile.jpg" medium="image"/><category>Starter Kits</category><category>CE.SDK</category></item><item><title>CE.SDK v1.73 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-73-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-73-0-release-notes/</guid><description>v1.73 brings Starter Kits to iOS &amp; Android, giving you full ownership of your mobile editor config. Plus SVG export across platforms.</description><pubDate>Tue, 21 Apr 2026 13:29:35 GMT</pubDate><content:encoded>&lt;p&gt;v1.73 is a mobile-focused release. The main act is our new architectural foundation for iOS and Android: Starter Kits give you full ownership of your editor configuration. On the engine side, CE.SDK now supports SVG export across all platforms.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;own-your-mobile-editor--not-just-the-config&quot;&gt;Own Your Mobile Editor — Not Just the Config&lt;/h2&gt;
&lt;p&gt;The old model was simple: drop in a solution component (PhotoEditor, VideoEditor, DesignEditor), pass a license key, ship. For most teams, that was exactly the right starting point. Fast to integrate, zero configuration overhead, a full editor running in your app within hours.&lt;/p&gt;
&lt;p&gt;As products matured, though, teams needed more. Deeper customization. Granular control over behaviors. An editor that felt like theirs.&lt;/p&gt;
&lt;p&gt;That’s what &lt;strong&gt;Starter Kits for Mobile&lt;/strong&gt; addresses.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Set up fast, customize, and own your code - now for iOS &amp;amp;#x26; Android&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2000px) 2000px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2000&quot; height=&quot;857&quot; src=&quot;https://img.ly/_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_Zuekpc.webp&quot; srcset=&quot;/_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_hid7x.webp 640w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_1fMlOs.webp 750w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_14DV9O.webp 828w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_Z2opymo.webp 1080w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_ZEa6Mt.webp 1280w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_Z2tuMOW.webp 1668w, /_astro/starter-kits-design-editor-video-apparel-mobile-ios-android_Zuekpc.webp 2000w&quot;&gt;&lt;/p&gt;
&lt;p&gt;The prebuilt solution components are replaced by a single &lt;code&gt;Editor&lt;/code&gt; entry point and a set of Starter Kits: complete, working editor projects for each use case that live in your codebase, not ours. Set it up in minutes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; you can adapt the editor to fit your product, not the other way around.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Everything Is In Your Code Now&lt;/strong&gt;&lt;br&gt;
Each Starter Kit is a real editor project — not a thin config wrapper. Every toolbar item, every callback, every loading phase is written out explicitly in files you own.&lt;/p&gt;
&lt;p&gt;That means your team can read the integration, review changes to it, and understand exactly what the editor does and why. No more hunting through SDK internals to figure out why something behaves the way it does.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SDK Updates Stop Touching Your UI&lt;/strong&gt;&lt;br&gt;
Previously, updating CE.SDK could introduce new buttons, changed defaults, or different menus without you asking for them. Your QA had to catch it.&lt;/p&gt;
&lt;p&gt;That dynamic is reversed now. Engine improvements, bug fixes, and performance gains come through updates as before. But your editor UI stays exactly where you left it. New features arrive as optional building blocks, documented and ready when you want them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No More Customization Ceiling&lt;/strong&gt;&lt;br&gt;
The old configuration APIs had a line between what you could change and what you couldn’t. Starter Kits remove that line entirely. You can restructure initialization, inject custom logic between loading phases, and build workflows specific to your product.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you can see it in the code, you can change it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If none of the five kits match your needs, the &lt;code&gt;Editor&lt;/code&gt; view accepts raw configuration directly.&lt;/p&gt;
&lt;h3 id=&quot;migration&quot;&gt;Migration&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;This is a breaking change on both iOS and Android. Migration guides cover every change with before-and-after examples.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/android/to-v1-73-ab14fb/&quot;&gt;Android Migration Guide&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/ios/to-v1-73-ab14fb/&quot;&gt;iOS Migration Guide&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;starter-kit-repositories&quot;&gt;Starter Kit Repositories&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Editor&lt;/th&gt;&lt;th&gt;iOS (Swift)&lt;/th&gt;&lt;th&gt;Android (Kotlin)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Photo&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-photo-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-photo-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Design&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-design-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-design-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Video&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-video-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-video-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Postcard&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-postcard-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-postcard-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Apparel&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-apparel-editor-ios&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/imgly/starterkit-apparel-editor-android&quot;&gt;GitHub&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&quot;export-vector-designs-as-svg&quot;&gt;Export Vector Designs as SVG&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/svg-export_sXlp.webp&quot; srcset=&quot;/_astro/svg-export_Z1Gawc7.webp 640w, /_astro/svg-export_2kYdnC.webp 750w, /_astro/svg-export_ZcTYTA.webp 828w, /_astro/svg-export_1pb2OK.webp 1080w, /_astro/svg-export_Hk0A5.webp 1280w, /_astro/svg-export_sXlp.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Until now, users working with vector content in CE.SDK had no path to get that content out as a vector file. CE.SDK v1.73 adds SVG export via the &lt;code&gt;image/svg+xml&lt;/code&gt; MIME type.&lt;/p&gt;
&lt;p&gt;Text is exported as vector paths for consistent rendering across environments regardless of font availability. Drop shadows, blur, effects, and embedded raster images are rasterized and included as embedded images within the SVG output.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/engine/guides/export-blocks/&quot;&gt;Exporting Blocks Engine Guide&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-73-0/&quot;&gt;full changelog&lt;/a&gt; for the complete list.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thanks for building with IMG.LY.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Join 3,000+ creative professionals who get early access to new features and updates—&lt;a href=&quot;https://share.hsforms.com/1IgAOV1wASXGPnFG4ZPLejg1hk3i?ref=img.ly&quot;&gt;subscribe&lt;/a&gt;.&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/04/creative-sdk-imgly-173-release-notes-android-ios-design-video-photo-editor-integrate.jpg" medium="image"/><category>Release Notes</category><category>Android App Development</category><category>iOS App Development</category></item><item><title>PowerPoint Online: Native PPTX Editing in the Browser with CreativeEditor SDK</title><link>https://img.ly/blog/powerpoint-online-native-pptx-editing-in-the-browser-with-creativeeditor-sdk/</link><guid isPermaLink="true">https://img.ly/blog/powerpoint-online-native-pptx-editing-in-the-browser-with-creativeeditor-sdk/</guid><description>The CreativeEditor SDK adds full support for editing PowerPoint (PPTX) files directly in the browser. This makes it possible to integrate presentation editing into any web application, so users can update and manage slides without relying on Microsoft Office or switching to separate desktop tools.</description><pubDate>Fri, 17 Apr 2026 11:21:14 GMT</pubDate><content:encoded>&lt;p&gt;Organizations can now create workflows where presentations stay editable inside their own platforms: content management systems, collaboration tools, educational platforms, and SaaS applications, without switching to external editing software each time.&lt;/p&gt;
&lt;h2 id=&quot;powerpoint-import-capabilities&quot;&gt;PowerPoint Import Capabilities&lt;/h2&gt;
&lt;p&gt;IMG.LY SDK enables &lt;a href=&quot;https://img.ly/showcases/cesdk/pptx-template-import/web&quot;&gt;importing PPTX files directly into browser-based workflows&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Import functionality&lt;/strong&gt;&lt;br&gt;
Existing PowerPoint files can be loaded directly into CE.SDK. The importer interprets the PPTX structure — text, images, shapes, and formatting — and converts each slide into an editable CE.SDK scene. Files can come from uploads or your own storage systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Editing interface&lt;/strong&gt;&lt;br&gt;
Once imported, slides become CE.SDK design scenes. Users can change content freely using CE.SDK’s editor, which keeps the structure intact, including text hierarchies and slide ordering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What gets preserved:&lt;/strong&gt; Text formatting (font families, sizes, colors, bold, italic), shapes (rectangles, ellipses, custom vector shapes), images, gradient fills, shadow effects, gradient backgrounds, groups, z-order, and theme colors are all carried over from the original PowerPoint file.&lt;/p&gt;
&lt;h2 id=&quot;editing-capabilities-for-presentation-workflows&quot;&gt;Editing Capabilities for Presentation Workflows&lt;/h2&gt;
&lt;p&gt;The browser-based editor includes the essential features needed for everyday presentation updates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Text editing:&lt;/strong&gt; Change text and adjust typography — fonts, colors, alignment, sizes, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual element manipulation:&lt;/strong&gt; Move, resize, rotate, and reorder shapes, images, and text boxes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer management:&lt;/strong&gt; Adjust stacking order to control which content appears on top&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slide navigation:&lt;/strong&gt; Rearrange slide order and quickly move between slides&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content addition:&lt;/strong&gt; Add new images, shapes, or text elements when needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Styling options:&lt;/strong&gt; Edit fills, borders, and other visual properties&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This helps teams refresh outdated content, localize presentations, update brand assets, or adapt a single deck to many different use cases — all without leaving the platform.&lt;/p&gt;
&lt;h2 id=&quot;whats-not-supported&quot;&gt;What’s Not Supported&lt;/h2&gt;
&lt;p&gt;The importer focuses on the most common presentation elements. Some PowerPoint features don’t carry over:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tables&lt;/strong&gt; — Table content is skipped on import; a workaround is to ungroup tables in PowerPoint before importing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Charts&lt;/strong&gt; — Chart visualizations are not imported&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SmartArt&lt;/strong&gt; — Diagram graphics are not imported&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Animations and transitions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slide masters and layouts&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio and video&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comments and notes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Background images&lt;/strong&gt; — solid colors and gradients are supported, but image backgrounds are not&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For presentations that rely heavily on these elements, it’s worth reviewing the output after import and making adjustments in CE.SDK.&lt;/p&gt;
&lt;h2 id=&quot;workflow-improvements-with-powerpoint-on-the-web&quot;&gt;Workflow Improvements with PowerPoint on the Web&lt;/h2&gt;
&lt;p&gt;Why this matters for real workflows:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Less switching between tools:&lt;/strong&gt; Users can make changes right inside the system where the presentation is stored. It’s faster and reduces confusing file versions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Accessible anywhere:&lt;/strong&gt; Works on any modern browser, making editing possible on devices without native PowerPoint support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lower dependency on desktop software:&lt;/strong&gt; Teams don’t always need Microsoft PowerPoint licenses just to update a slide or fix small mistakes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Faster corrections:&lt;/strong&gt; Updates become quick tasks — improving slides doesn’t need to slow things down, especially for marketing or sales content.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aligned with existing processes:&lt;/strong&gt; Versioning, commenting, and permissions stay right where the content lives, which really simplifies collaboration.&lt;/p&gt;
&lt;h2 id=&quot;browser-based-editing-vs-desktop-powerpoint&quot;&gt;Browser-Based Editing vs. Desktop PowerPoint&lt;/h2&gt;
&lt;p&gt;The browser-based editor covers the most common editing needs. PowerPoint on desktop still handles specialized features the importer doesn’t cover.&lt;/p&gt;























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Capability&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Browser-Based Editor&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Desktop PowerPoint&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Installation requirement&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;None — opens in the browser&lt;/td&gt;&lt;td&gt;Requires installation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Platform compatibility&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Works on any device with a modern browser&lt;/td&gt;&lt;td&gt;Windows, macOS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Core content editing&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Yes, for supported elements&lt;/td&gt;&lt;td&gt;Fully supported&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Advanced features&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Tables, charts, SmartArt, animations not supported&lt;/td&gt;&lt;td&gt;Complex animations, transitions, macros, advanced design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Integration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Easy embedding into web apps&lt;/td&gt;&lt;td&gt;Requires file transfer flow&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Access speed&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Instant, no launch time&lt;/td&gt;&lt;td&gt;Depends on local system&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;File compatibility&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Imports PPTX; outputs CE.SDK scenes&lt;/td&gt;&lt;td&gt;Native PPTX with extended features&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Collaboration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Connects with existing web-based systems&lt;/td&gt;&lt;td&gt;Microsoft ecosystem required&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Network requirement&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Can be edited offline&lt;/td&gt;&lt;td&gt;Can be offline&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For straightforward content updates — text changes, image swaps, visual tweaks — the browser-based workflow handles most everyday needs. For presentations that rely on tables, charts, animations, or other advanced PowerPoint features, desktop PowerPoint remains the right tool.&lt;/p&gt;
&lt;h2 id=&quot;technical-implementation-for-developers&quot;&gt;Technical Implementation for Developers&lt;/h2&gt;
&lt;p&gt;The SDK handles PPTX parsing and slide rendering in the browser as CE.SDK scenes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fast integration:&lt;/strong&gt; Setup usually takes hours or days, not months, since all the hard parts are already covered by the SDK.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customizable interface:&lt;/strong&gt; Developers can enable or disable features, apply brand styling, and connect to authentication and storage systems already in use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Platform-agnostic:&lt;/strong&gt; The package works in both browser and Node.js environments with no file system dependencies, using pure ArrayBuffer handling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Controlled infrastructure:&lt;/strong&gt; Everything runs where your platform runs, and you keep full control of data processing and access.&lt;/p&gt;
&lt;h2 id=&quot;use-cases-across-industries&quot;&gt;Use Cases Across Industries&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;EdTech:&lt;/strong&gt; Students edit presentations directly in learning platforms without software installation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CMS platforms:&lt;/strong&gt; Teams update brand assets and sales decks in the same place they manage all other content.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Collaboration tools:&lt;/strong&gt; Everyone works on the same version of a file without downloading and re-uploading.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SaaS products:&lt;/strong&gt; Presentations become part of the workflow, not a separate step.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creative agencies:&lt;/strong&gt; Client slides can be adjusted quickly without leaving project management systems.&lt;/p&gt;
&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Try PowerPoint editing in the browser using our &lt;a href=&quot;https://img.ly/showcases/cesdk/pptx-template-import/web&quot;&gt;demo&lt;/a&gt;, or &lt;a href=&quot;https://img.ly/docs/cesdk/&quot;&gt;get started&lt;/a&gt; with CreativeEditor SDK to explore the full feature set.&lt;/p&gt;</content:encoded><dc:creator>Klaudia</dc:creator><media:content url="https://blog.img.ly/2026/04/pptx-importer-design-imgly.jpg" medium="image"/></item><item><title>CE.SDK v1.72 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-72-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-72-0-release-notes/</guid><description>Edit vector paths on the Web, generate AI images on mobile, record voiceovers on iOS and Android, and format text with lists and decorations across every platform.</description><pubDate>Fri, 03 Apr 2026 10:47:49 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;CE.SDK v1.72 is a massive design and creative capabilities release:&lt;/strong&gt; Edit vector paths in your web editor. Generate AI images on mobile. Record voiceovers on iOS and Android, and format text with lists, underline, and strikethrough across every platform. Design and video scenes unify into a single editing surface on Web.&lt;/p&gt;
&lt;p&gt;Let’s take a look!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;edit-vectors-with-precision-on-the-web&quot;&gt;Edit Vectors with Precision on the Web&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/04/vector-outcome.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;CE.SDK now lets users edit any shape at the path level.&lt;/p&gt;
&lt;p&gt;Select a shape and enter Edit Path mode. Manipulate individual anchor points and curves. Move nodes, bend segments, add or remove points. Lastly, apply fills, gradients, and colors.&lt;/p&gt;
&lt;p&gt;In this example, we build our figure from a simple polygon shape:&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/04/vector-paths-sdk-imgly-engine-whitelabel.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Build custom icons, illustrations and detailed layouts directly in the web editor, without leaving your app.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/stickers-and-shapes/create-edit/vector-edit-f3a7b2/&quot;&gt;Explore Vector Path Editing Documentation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;design-and-video-editing-in-one-editor&quot;&gt;Design and Video Editing In One Editor&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/04/design-video-ui-one.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Web users can now work across design and video in a single scene. Everything you can do in design mode, you can do in video mode too.&lt;/p&gt;
&lt;p&gt;For your product, this means a simpler, more coherent editing experience for users who work across both formats.&lt;/p&gt;
&lt;p&gt;Note: The &lt;em&gt;feature&lt;/em&gt; toggle shown in the video is coming to our demos soon. It is not part of the default CE.SDK setup.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/to-v1-72-b37fa1/&quot;&gt;Visit CE.SDK 1.72 Migration Guide&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;generate-ai-images-on-android-and-ios&quot;&gt;Generate AI Images on Android and iOS&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/04/ai-image-generation.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The AI image generation plugin now ships on iOS and Android.&lt;/p&gt;
&lt;p&gt;This is the first mobile AI plugin for CE.SDK. Users can generate images directly inside the mobile editor through custom plugin panels, without leaving the creative workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; you can now deliver AI-powered creative features on mobile with the same plugin architecture already available on web. One capability, every platform.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/showcases/cesdk/video-ui/android&quot;&gt;Try Android Mobile Demo&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/showcases/cesdk/video-ui/ios&quot;&gt;Try iOS Mobile Demo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;record-voice-overs-on-android--ios&quot;&gt;Record Voice-Overs on Android &amp;#x26; iOS&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/04/voice-over-mobile.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Tell your story by giving your videos a voice. iOS and Android users can now record their voice directly over video clips.&lt;/p&gt;
&lt;p&gt;Layer multiple voiceover tracks on the timeline. Perfect to record engaging videos, like creators work in TikTok and Reels.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/showcases/cesdk/video-ui/android&quot;&gt;Try Android Mobile Demo&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/showcases/cesdk/video-ui/ios&quot;&gt;Try iOS Mobile Demo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;decorate-text-on-all-platforms&quot;&gt;Decorate Text On All Platforms&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/04/text-decoration.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Updates for text editing land simultaneously across platforms:&lt;/p&gt;
&lt;p&gt;Use &lt;strong&gt;Bullet and Numbered Lists&lt;/strong&gt; to structure text with ordered and unordered lists. &lt;strong&gt;Underline and strike&lt;/strong&gt; text, including custom underline colors.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Rename Pages with Double Click&lt;/strong&gt;&lt;br&gt;
Web users can now rename pages directly on the canvas with a double click, without navigating to a separate settings panel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Place Elements Anywhere with Infinite Canvas&lt;/strong&gt;&lt;br&gt;
Web Users can now place elements outside &lt;em&gt;page&lt;/em&gt; boundaries. The canvas extends beyond the page, giving users a flexible workspace to park assets, build off-canvas elements. Work more freely without being constrained to the page frame.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;changelog&quot;&gt;Changelog&lt;/h2&gt;
&lt;p&gt;See the full list of fixes and breaking changes in the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/&quot;&gt;v1.72.0 Changelog&lt;/a&gt; and &lt;a href=&quot;https://img.ly/docs/cesdk/js/to-v1-72-b37fa1/&quot;&gt;1.72.0 Migration Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thank you for building with IMG.LY.&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/04/1-72.jpg" medium="image"/><category>Release Notes</category></item><item><title>AI Design Agents and Creative Automation: How to Ship a Full Campaign Without a Designer</title><link>https://img.ly/blog/ai-design-agents-and-creative-automation-how-to-ship-a-full-campaign-without-a-designer/</link><guid isPermaLink="true">https://img.ly/blog/ai-design-agents-and-creative-automation-how-to-ship-a-full-campaign-without-a-designer/</guid><description>Most marketing workflows are fully automated now - except one. Design is still a handoff, a wait, a revision loop, and another wait. Here&apos;s how AI design agents are closing that gap, and how to run a full campaign production session without leaving a single conversation.</description><pubDate>Wed, 01 Apr 2026 10:14:03 GMT</pubDate><content:encoded>&lt;p&gt;You have your files, hooks, Google Ads data but still can’t actually launch a campaign because you have to go to a designer for the final assets.&lt;/p&gt;
&lt;p&gt;That gap is exactly where campaign momentum dies. Not at the strategy stage or in copy but at the last mile, when everything is ready except the thing people will actually see.&lt;/p&gt;
&lt;p&gt;Luckily, it no longer has to.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://img.ly/blog/content/media/2026/05/AI-first.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-ai-marketing-stack-has-a-design-shaped-hole-in-it&quot;&gt;The AI Marketing Stack Has a Design-Shaped Hole in It&lt;/h2&gt;
&lt;p&gt;Most marketing workflows have been quietly transformed over the last two years. Copy generation, audience segmentation, keyword research, performance analysis - all of it runs faster now, with less manual input. A solo marketer can do what used to require a team. Except for one part.&lt;/p&gt;
&lt;p&gt;Design hasn’t moved. The workflow is still: write a brief, hand it to a designer, wait, review, revise, wait again. Then do the same thing in three more formats because the 1:1 you approved doesn’t fit Stories, Display, or LinkedIn. That loop can take days. And it doesn’t matter how good your AI-generated copy is if it’s sitting in a doc waiting for someone to have bandwidth.&lt;/p&gt;
&lt;p&gt;This isn’t a resourcing problem. Hiring more designers doesn’t fix the structural issue; it just adds capacity to a fundamentally slow process. The problem is that the tools built for design weren’t designed for the workflow a modern marketer actually runs. They expect a designer at the keyboard. They don’t expect a marketer with a campaign brief and a conversation window.&lt;/p&gt;
&lt;p&gt;The result: campaigns that are otherwise fully automated still stall before they ship. The bottleneck moved from copy to creative. And most teams haven’t noticed yet, because design delays feel normal. They’ve always been there.&lt;/p&gt;
&lt;h2 id=&quot;what-an-ai-design-agent-actually-changes&quot;&gt;What an AI Design Agent Actually Changes&lt;/h2&gt;
&lt;p&gt;An AI design agent is an autonomous AI system, not a prompt-response tool. It plans, reasons, and executes design tasks independently. Given a goal, it breaks that goal into steps, uses the tools available to it, retains context across the session, and can self-correct when the output isn’t right. That’s the category: a system that drives the workflow rather than waiting for instruction at each step.&lt;/p&gt;
&lt;p&gt;Most design agents deliver speed. The handoff that used to take days can happen in minutes. But the output is still a deliverable: a file you receive, use as-is, or move somewhere else. Most operate inside existing tools or generate assets you work with elsewhere. The speed is real, the editability usually isn’t. If something needs to change, you’re back to prompting from scratch.&lt;/p&gt;
&lt;p&gt;CoDesign sits differently. It doesn’t hand you a finished asset. It gives you a working starting point on a real canvas. Layers, text boxes, placeholders - real assets you can continue to work with, in the same conversation, without leaving the session.&lt;/p&gt;
&lt;p&gt;Brand consistency gets handled at the foundation. Load your brand kit once, including colors, fonts, logo, and layout rules, and every output that session respects those constraints. You’re not eyeballing hex codes or hoping the font looks right. The rules are applied from the start, not checked at the end.&lt;/p&gt;
&lt;p&gt;Multi-format adaptation is where the time savings become concrete. A campaign that runs across Instagram, Google Display, LinkedIn, and print doesn’t produce four separate briefs and four separate rounds of designer revisions. You describe the formats you need, and the agent adapts the work. The campaign stays consistent across all of them.&lt;/p&gt;
&lt;p&gt;The biggest shift isn’t speed, though that’s real. It’s that you stay in creative control throughout. There’s no handoff moment where you lose the thread and have to re-explain the brief to someone else. The context lives in the conversation.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://img.ly/blog/content/media/2026/05/01-delegate-catalogue-design--1-.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h2 id=&quot;how-to-run-a-campaign-production-session-with-codesign&quot;&gt;How to Run a Campaign Production Session with CoDesign&lt;/h2&gt;
&lt;p&gt;This is the actual sequence. Walk through it once and the workflow becomes repeatable.&lt;/p&gt;
&lt;p&gt;1.&lt;strong&gt;Start with the brief.&lt;/strong&gt; Open CoDesign and describe the campaign in plain language. Audience, objective, platform, tone, any constraints. The more specific you are here, the less iteration you’ll need later. Treat it like briefing a senior designer who hasn’t worked with your brand before.&lt;/p&gt;
&lt;p&gt;2.&lt;strong&gt;Generate copy variations before you open the canvas.&lt;/strong&gt; Use whichever AI writing tool you already work with — ChatGPT, Claude, or whatever is in your stack — to produce multiple copy directions: headline hooks, body copy, CTAs. Get four or five versions per element. Copy and design are separate steps that feed into each other. Having real options ready before you start the design session means CoDesign has something specific to work with, not a blank brief waiting to be interpreted.&lt;/p&gt;
&lt;p&gt;3.&lt;strong&gt;Feed the brief to the AI design companion.&lt;/strong&gt; With copy variations ready, ask CoDesign to generate initial ad designs. Describe the format, the hierarchy you want, any layout preferences. You’ll get structured, editable designs on the canvas. Not a rendered image, but a working starting point with real layers.&lt;/p&gt;
&lt;p&gt;4.&lt;strong&gt;Apply your brand kit.&lt;/strong&gt; If you haven’t already, load your brand assets: logo, color palette, type system, approved imagery. The agent applies these rules to the designs. Every output from this point respects your brand standards automatically.&lt;/p&gt;
&lt;p&gt;5.&lt;strong&gt;Adapt across formats.&lt;/strong&gt; Tell the agent which formats you need. The social variant, the display variant, the vertical for Stories, the square for feed. Watch the layouts adapt to each context, maintaining the campaign idea and brand consistency across dimensions. If the hierarchy needs adjusting for a specific format, describe what’s not working and the agent fixes it in conversation.&lt;/p&gt;
&lt;p&gt;6.&lt;strong&gt;Refine in conversation.&lt;/strong&gt; This is where the canvas-based approach earns its value. You’re not generating new versions from scratch. You’re iterating on what’s already there, in the same session. “Move the logo to the bottom right. Try the headline in the lighter weight. Swap this layout for something with more white space.” Each exchange builds on the last, so the conversation stays grounded in what’s on the canvas rather than starting over from a new prompt.&lt;/p&gt;
&lt;p&gt;7.&lt;strong&gt;Export and ship.&lt;/strong&gt; When the designs are approved, export in the formats your media plan requires. The session context lives with the file, so if something needs to change post-launch, you’re not starting from zero.&lt;/p&gt;
&lt;p&gt;One honest note: the quality of the output is proportional to the quality of the brief. Vague prompts produce generic starting points. Teams that invest two minutes in a specific, structured brief consistently get more usable first outputs than teams that describe the campaign in one sentence and expect the agent to fill in the gaps.&lt;/p&gt;
&lt;h2 id=&quot;this-is-what-closing-the-loop-actually-looks-like&quot;&gt;This Is What Closing the Loop Actually Looks Like&lt;/h2&gt;
&lt;p&gt;Design agents don’t replace designers. They remove the bottleneck that sits between strategy and execution.&lt;/p&gt;
&lt;p&gt;The marketer who used to wait three days for ad assets can now produce a full campaign set in a single session. The designer who spent half their week on format resizes and small-copy tweaks can spend that time on the work that genuinely requires their judgment. That means brand-defining creative, campaign concepts, and anything where taste and experience are the actual input.&lt;/p&gt;
&lt;p&gt;It was never about willingness to collaborate. The tools just didn’t allow for anything else. Every design change, no matter how small, had to go through a handoff. A headline adjustment on a banner resize does not need a creative director. A resize from 1:1 to 9:16 does not need a brief, a Slack message, and a 48-hour turnaround.&lt;/p&gt;
&lt;p&gt;Thanks to design agents conversation shifts. It moves from “can you make this” to “how should this look.” And that’s a way more interesting conversation.&lt;/p&gt;
&lt;p&gt;Interested in trying IMG.LY CoDesign? &lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;Reach out&lt;/a&gt; to our team.&lt;/p&gt;</content:encoded><dc:creator>Klaudia</dc:creator><media:content url="https://blog.img.ly/2026/04/page-1-export.png" medium="image"/><category>AI</category><category>Insights</category><category>Creative Workflows</category><category>Creative Automation</category></item><item><title>What Is an AI Design Agent?</title><link>https://img.ly/blog/what-is-a-design-agent/</link><guid isPermaLink="true">https://img.ly/blog/what-is-a-design-agent/</guid><description>&quot;Design agent&quot; is being used to mean two completely different things right now. Here&apos;s what it actually is - and why the distinction matters for creative teams and non-designers in 2026. </description><pubDate>Mon, 30 Mar 2026 04:52:01 GMT</pubDate><content:encoded>&lt;p&gt;The phrase “design agent” is being used in two completely different ways right now, and the confusion is worth clearing up before either meaning becomes the default. Search for it today and you’ll mostly find AI design agencies - services firms that use AI in their process. That’s a reasonable business, but it has nothing to do with what this article is about.&lt;/p&gt;
&lt;p&gt;The second meaning, a design agent as a category of AI tool, is the one that matters for product builders, developers, and creative teams trying to understand where AI-assisted design is actually going. That’s what we’re defining here: what it is, how it works, how it differs from tools you already know, and why the distinction matters if you’re building or evaluating creative software in 2026.&lt;/p&gt;
&lt;h2 id=&quot;first-what-an-ai-design-agent-is-not&quot;&gt;First, What an AI Design Agent Is Not&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;An AI design agency.&lt;/strong&gt; This is a services firm that uses AI tools in its creative process. It’s a completely different category - a service, not a tool - and it’s the most common result you’ll find when you search “design agent” right now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An AI image generator.&lt;/strong&gt; Midjourney, DALL-E, and similar tools produce images from text prompts. They generate a single output from a single instruction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An AI feature inside a design tool.&lt;/strong&gt; Figma’s AI suggestions, auto-layout assistance, and background removal are AI features. They augment a manual workflow making specific tasks faster.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A design automation pipeline.&lt;/strong&gt; Server-side systems that batch-generate assets from templates are automation, not agency. They’re fast and scalable, but they don’t converse, can’t interpret an ambiguous brief, and don’t refine their output in response to feedback. The confusion here is understandable: modern automation systems use AI models internally and can produce polished, varied-looking results that are easy to mistake for something more intelligent. But give one an ambiguous brief and it either fails or produces something technically correct that misses the point entirely. Give a design agent the same brief and it asks a question. That distinction - executing a fixed process versus reasoning about intent - is what separates the two categories.&lt;/p&gt;
&lt;p&gt;The distinction matters because “design agent” is becoming a meaningful category term, and what it actually describes is different enough from all of the above that collapsing the distinctions creates real confusion, both for people evaluating tools and for people building products.&lt;/p&gt;
&lt;h2 id=&quot;ai-design-agent---a-working-definition&quot;&gt;AI Design Agent - a Working Definition&lt;/h2&gt;
&lt;p&gt;There is no settled definition of an AI design agent yet, the term is still early. Based on what we see in the tools that genuinely deliver on the promise, three properties distinguish a real design agent from something that merely resembles one:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Autonomy.&lt;/strong&gt; The agent takes multi-step actions without requiring a human instruction at each step. Given “create a five-page product catalog in a Scandinavian minimal style,” it works out the layout, typography, and image placement independently and produces the result.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Conversational interface.&lt;/strong&gt; The agent communicates in natural language. It can ask clarifying questions, explain what it’s done, and accept follow-up instructions. The interaction feels like briefing a designer, not operating software.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Refinement loop.&lt;/strong&gt; The agent takes feedback across multiple conversation turns: “make the typography lighter,” “apply the brand’s warm color palette”, and updates the design accordingly. This iterative loop is what separates a design agent from a one-shot generation tool.&lt;/p&gt;
&lt;p&gt;A tool that has all three of these properties is a design agent. A tool that has one or two is something else; probably useful, but in a different category.&lt;/p&gt;
&lt;h2 id=&quot;how-an-ai-design-agent-works-in-practice&quot;&gt;How an AI Design Agent Works in Practice&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://img.ly/blog/content/media/2026/03/01-delegate-catalogue-design--1--1.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;An abstract definition only takes you so far. Here’s what a fully implemented design agent workflow actually looks like, drawn from a real demo of IMG.LY CoDesign.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; The user opens CoDesign. The agent interface - a chat panel - sits alongside the canvas. They’re in the same window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; The user types a brief: &lt;em&gt;“Here’s a CSV of five products from our furniture brand. Generate one landscape catalog page per product — two-column grid, full-bleed photo left, typography-led layout right. Clean, minimal. Think Hay, Muuto, Frama.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; The agent processes the brief, the data, and any brand context it has access to. It generates a five-page catalog in the editor: product names, descriptions, prices, photo placeholders, layout structure consistent across all five pages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; The user reviews the output and follows up in the chat: &lt;em&gt;“Nice. Pre-fill the photo placeholders with black-and-white product photography, soft contrast.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 5.&lt;/strong&gt; The agent updates the design. The user manually adjusts one headline, corrects a price, and exports.&lt;/p&gt;
&lt;p&gt;The full workflow, from brief to print-ready output, took minutes rather than hours. The user never left the tool. The agent handled all structural and stylistic decisions. The human handled final judgment and small corrections.&lt;/p&gt;
&lt;p&gt;But generating layouts from a brief is only part of what a design agent can do. In the same chat interface, the agent can build functional decision-making tools directly inside the editor. Ask it to create a Color Themes panel, and it produces a working component: five named presets, each one applying a complete color theme across the entire design in a single click. The user doesn’t switch to a settings screen or manually update individual elements. The agent has built the control they need, right where they need it, as part of the same conversation. That’s a meaningfully different capability: not just producing a designed output, but constructing the tools that let the user make better decisions about that output as they finalize it.&lt;/p&gt;
&lt;h2 id=&quot;design-agents-vs-related-tools&quot;&gt;Design Agents vs. Related Tools&lt;/h2&gt;
&lt;p&gt;This table is meant as a fair comparison, each column represents how these tool categories actually behave today:&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Capability&lt;/th&gt;&lt;th&gt;AI Image Generator&lt;/th&gt;&lt;th&gt;AI Design Features&lt;/th&gt;&lt;th&gt;Design Agent&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Takes a brief&lt;/td&gt;&lt;td&gt;Prompt only&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Produces editable layouts&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Partial&lt;/td&gt;&lt;td&gt;Depends on a tool&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Multi-step autonomy&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Conversational refinement&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Limited&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Brand / context awareness&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Partial&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Iterative across a session&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The pattern here isn’t that design agents are better at everything - it’s that they operate at a different level of the workflow. Image generators and AI design features are task-level tools. A design agent is a workflow-level tool.&lt;/p&gt;
&lt;h2 id=&quot;the-autonomy-slider-why-human-control-still-matters&quot;&gt;The Autonomy Slider: Why Human Control Still Matters&lt;/h2&gt;
&lt;p&gt;One of the most important design decisions when building or evaluating a design agent is how much autonomy the AI exercises by default.&lt;/p&gt;
&lt;p&gt;Full autonomy is fast. The agent makes all decisions and presents a finished output. But it can produce results that don’t match the user’s actual intent, especially when the brief is ambiguous or the stakes are high.&lt;/p&gt;
&lt;p&gt;Minimal autonomy is safe. The agent only suggests, the human decides everything. But at that point, you’ve lost much of the value of having an agent in the first place.&lt;/p&gt;
&lt;p&gt;The best implementations give users what you might call an &lt;strong&gt;autonomy slider&lt;/strong&gt;: the ability to let the agent run with full independence on some tasks, take targeted direction on others, and step aside entirely when the user wants to edit manually. The right level of autonomy depends on the task and the user’s confidence, not a fixed setting applied uniformly across every interaction.&lt;/p&gt;
&lt;p&gt;For any design agent, this means the interface needs to let the user reach in and adjust manually, mid-workflow, without losing what the agent has already done. The agent and the editor have to exist in the same environment. Separate windows with an export step between them break the loop entirely.&lt;/p&gt;
&lt;h2 id=&quot;where-ai-design-agents-create-the-most-value&quot;&gt;Where AI Design Agents Create the Most Value&lt;/h2&gt;
&lt;p&gt;Not every creative workflow benefits equally from an AI agent. The scenarios where design agents consistently create the most value tend to fall into three categories:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;High-volume, high-variation creative production.&lt;/strong&gt; Marketing teams producing dozens of ad variants, e-commerce teams generating product imagery at scale, publishers creating template-based content in bulk. A team can brief the agent once: brand colors, copy, format specs, and get 40 properly formatted variants back in the time it would have taken to manually produce three, each one consistent with the last.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Non-designer users who need professional results.&lt;/strong&gt; Not everyone who needs to produce a designed output is a designer. Marketers, retailers, operations teams, small business owners - they know what they want but don’t have the tools or time to build it manually. A design agent gives them a way in that doesn’t require either.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expert designers who want to explore faster.&lt;/strong&gt; Experienced designers using the agent to generate starting points, explore multiple directions quickly, or offload the time-consuming production work while retaining full control over the final result. A designer can spend 20 minutes reviewing six distinct layout directions the agent generated from a single brief, rather than a full afternoon building each one from scratch.&lt;/p&gt;
&lt;p&gt;These aren’t exhaustive categories, but they represent the use cases where the workflow-level shift actually changes what’s possible, not just what’s faster.&lt;/p&gt;
&lt;h2 id=&quot;a-different-kind-of-design-tool&quot;&gt;A Different Kind of Design Tool&lt;/h2&gt;
&lt;p&gt;A design agent makes creative work faster and more accessible. For designers who want to explore more directions in less time, and for non-designers who have always known what they wanted but lacked the tools to build it.&lt;/p&gt;
&lt;p&gt;That’s what IMG.LY Codesign is built around. It’s in early access now, inside a fully featured design editor - &lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;get in touch&lt;/a&gt; for early access.&lt;/p&gt;</content:encoded><dc:creator>Klaudia</dc:creator><media:content url="https://blog.img.ly/2026/03/what-s-a-design-agent.png" medium="image"/><category>AI</category><category>Insights</category></item><item><title>Vibe Design Tools Compared</title><link>https://img.ly/blog/vibe-design-tools-compared/</link><guid isPermaLink="true">https://img.ly/blog/vibe-design-tools-compared/</guid><description>Vibe design lets you describe what you want and get a polished result. But not all vibe design tools produce the same kind of output, and that difference shapes everything downstream. Here&apos;s how Stitch, Figma Make, Lovart, Adobe Firefly Boards, Canva Magic Studio and    IMG.LY CoDesign compare. </description><pubDate>Sun, 29 Mar 2026 03:51:56 GMT</pubDate><content:encoded>&lt;p&gt;Vibe coding gave non-technical people the ability to build software by describing what they wanted. The same shift is now happening with &lt;a href=&quot;https://img.ly/blog/what-is-vibe-design/&quot;&gt;vibe design&lt;/a&gt;. For the first time, a marketer, a retailer, or a small business owner can create a professional design exactly to their specification just by explaining it to an AI. No design skills required. No external tool. No waiting for a designer to become available.&lt;/p&gt;
&lt;p&gt;This article compares four tools leading that shift - what they do well, where they differ, and how to choose between them.&lt;/p&gt;
&lt;h2 id=&quot;tools-built-for-creators&quot;&gt;Tools Built for Creators&lt;/h2&gt;
&lt;p&gt;These tools represent the current state of standalone vibe design software. Each is genuinely good at what it does. The differences come down to what kind of work they’re built for.&lt;/p&gt;
&lt;h3 id=&quot;google-stitch&quot;&gt;Google Stitch&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://stitch.withgoogle.com&quot;&gt;Google Stitch&lt;/a&gt; is an AI-native design canvas from Google Labs, launched for public beta in early 2026. It accepts text, voice, images, and code as input and produces high-fidelity UI designs and interactive prototypes on an infinite canvas. Its design agent can reason across an entire project rather than just the current frame - a meaningful step beyond tools that only operate on one screen at a time.&lt;/p&gt;
&lt;p&gt;Stitch introduces a DESIGN.md file format for exporting and importing design rules across tools, and it connects to Cursor, Claude Code, and Gemini CLI via an MCP server. It’s available free during beta with monthly generation limits, and it’s clearly aimed at UI/UX designers and developers building product interfaces - not marketing or graphic design work.&lt;/p&gt;
&lt;h3 id=&quot;figma-make&quot;&gt;Figma Make&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://figma.com/make&quot;&gt;Figma Make&lt;/a&gt; takes natural language prompts or existing Figma designs and produces working prototypes and web apps - functional code, not just mockups, with optional Supabase backend integration. Because it lives inside Figma, it has access to your existing design libraries, component systems, and tokens from the start.&lt;/p&gt;
&lt;p&gt;It’s best understood as a rapid ideation and prototyping tool. It generates interactive, working outputs fast, but the code benefits from developer review before going to production. It’s distinct from Figma Sites, which handles actual publishing. AI credits are required for usage.&lt;/p&gt;
&lt;h3 id=&quot;lovart&quot;&gt;Lovart&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://lovart.ai&quot;&gt;Lovart&lt;/a&gt; is a standalone AI design agent founded by a former ByteDance senior product director. Its scope goes well beyond graphic asset creation: from a single prompt, it can generate brand identity systems, UI mockups, video content, packaging designs, and full marketing campaigns. It uses a proprietary MCoT (Mind Chain of Thought) reasoning engine designed to mimic how a creative director thinks - analyzing business context, target audience, and brand requirements, not just aesthetic style.&lt;/p&gt;
&lt;p&gt;Its infinite canvas continuously analyzes all assets present to maintain visual consistency across an entire project, and outputs are compatible with Figma, Photoshop, and After Effects. Lovart is positioned for marketing creatives, solo designers, and small creative teams who need to produce full campaigns without a large agency.&lt;/p&gt;
&lt;h3 id=&quot;adobe-firefly-boards&quot;&gt;Adobe Firefly Boards&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://firefly.adobe.com&quot;&gt;Adobe Firefly Boards&lt;/a&gt; is Adobe’s AI-first collaborative ideation canvas, built for creative professionals who need to move quickly from inspiration to concept. It lives inside the Adobe Firefly web app and mobile apps (iOS and Android), and syncs with Creative Cloud so work can move from moodboard to production without switching platforms.&lt;/p&gt;
&lt;p&gt;The core of Boards is an infinite multimedia canvas where you bring in text prompts, reference images, video clips, and Adobe Stock assets, then generate across all of them at once. What makes it unusual is the model breadth: Boards gives you access to Adobe’s own Firefly models alongside partner models from Runway, Pika, Luma AI, Google Veo, Black Forest Labs, and others—all inside the same workspace. Outputs are images, video clips, text overlays, and assembled mood boards or storyboards, and every generated asset carries Content Credentials that automatically record which AI model produced it.&lt;/p&gt;
&lt;h3 id=&quot;canva-magic-studio&quot;&gt;Canva Magic Studio&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.canva.com/magic/&quot;&gt;Canva Magic Studio&lt;/a&gt; is a suite of more than 15 AI-powered tools embedded directly into the Canva editor on web, mobile, and desktop. It’s not a separate app—if you’re already a Canva user, you’re already inside Magic Studio.&lt;/p&gt;
&lt;p&gt;The suite covers writing, image generation, video creation, format switching, and multi-language translation, all accepting text prompts, uploaded media, documents, and existing canvas elements as input. Brand Kit integration is what distinguishes it from more isolated AI generation tools: when you generate a design through Magic Design, it pulls from your saved Brand Kit—logo, colors, fonts—rather than producing something generically styled. That keeps AI-generated output on-brand without manual cleanup.&lt;/p&gt;
&lt;p&gt;The trade-off is structural. Canva outputs are flat exports within a consumer-grade editor, not structured design objects you can manipulate at the element level. Generations are fast and on-brand, but the editing ceiling is Canva’s editor—for users who need granular creative control or complex asset structures, that’s a real constraint, not just a preference.&lt;/p&gt;
&lt;h3 id=&quot;imgly-codesign&quot;&gt;IMG.LY CoDesign&lt;/h3&gt;
&lt;p&gt;IMG.LY CoDesign is AI-powered design companion built for creators and teams producing marketing materials, branded content, social assets, and multi-format campaigns. What sets it apart from other standalone tools is how it treats AI output: every element CoDesign generates is a structured, editable design object on the canvas - not a flat image to export and rebuild elsewhere. Move a headline, swap a font, resize a block, change a color - directly in the same tool that generated it.&lt;/p&gt;
&lt;p&gt;The agent and the editor aren’t two modes. They’re the same tool. You can prompt a direction, refine it in conversation, and take over the canvas directly at any point - without switching tools, exporting, or starting over. CoDesign also goes beyond the canvas: ask it to build a brand panel, a form-based template, or a custom configurator, and it builds that too - directly inside the editor, from the same prompt interface.&lt;/p&gt;
&lt;p&gt;Here is a quick demo to showcase what IMG.LY CoDesign can do.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://img.ly/blog/content/media/2026/03/AI-first.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h2 id=&quot;vibe-design-tools-at-a-glance&quot;&gt;Vibe Design Tools at a Glance&lt;/h2&gt;































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Google Stitch&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Figma Make&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Lovart&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Adobe Firefly Boards&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Canva Magic Studio&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;IMG.LY CoDesign&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Primary use&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;UI/UX design from prompts&lt;/td&gt;&lt;td&gt;Prompt-to-prototype / app&lt;/td&gt;&lt;td&gt;Full campaign and brand creation&lt;/td&gt;&lt;td&gt;AI-first concepting and moodboarding&lt;/td&gt;&lt;td&gt;AI design generation inside Canva editor&lt;/td&gt;&lt;td&gt;AI-assisted design for creators and teams&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Where it lives&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Google (standalone web app)&lt;/td&gt;&lt;td&gt;Inside Figma&lt;/td&gt;&lt;td&gt;Lovart (standalone)&lt;/td&gt;&lt;td&gt;Adobe Firefly web + mobile; syncs with Creative Cloud&lt;/td&gt;&lt;td&gt;Inside Canva (web, mobile, desktop)&lt;/td&gt;&lt;td&gt;IMG.LY&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Input types&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Text, voice, images, code&lt;/td&gt;&lt;td&gt;Text, existing Figma designs&lt;/td&gt;&lt;td&gt;Text, images, brand briefs&lt;/td&gt;&lt;td&gt;Text, images, video, Adobe Stock assets&lt;/td&gt;&lt;td&gt;Text, images, video, documents, existing design elements&lt;/td&gt;&lt;td&gt;Text, images, CSV, brand kits&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Output type&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;UI designs and prototypes&lt;/td&gt;&lt;td&gt;Interactive prototypes and web apps&lt;/td&gt;&lt;td&gt;Brand assets, campaigns, video, packaging&lt;/td&gt;&lt;td&gt;Images, video, text overlays, mood boards, storyboards&lt;/td&gt;&lt;td&gt;Images, video, presentations, styled text, format-converted designs&lt;/td&gt;&lt;td&gt;Editable multi-page designs, videos, animations&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Output format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Flat / exportable&lt;/td&gt;&lt;td&gt;Code / exportable&lt;/td&gt;&lt;td&gt;Flat / exportable&lt;/td&gt;&lt;td&gt;Flat / exportable; Content Credentials attached&lt;/td&gt;&lt;td&gt;Flat / exportable within Canva editor&lt;/td&gt;&lt;td&gt;Structured editable objects on canvas&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Brand context&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Manual per session&lt;/td&gt;&lt;td&gt;Via Figma design system&lt;/td&gt;&lt;td&gt;Canvas-aware within session&lt;/td&gt;&lt;td&gt;Enterprise Custom Models; personal library import&lt;/td&gt;&lt;td&gt;Brand Kit applied automatically at generation&lt;/td&gt;&lt;td&gt;Loaded at session start&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;In-chat UI generation&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Multi-model AI&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;td&gt;Yes (Runway, Pika, Luma, Google Veo, BFL, and more)&lt;/td&gt;&lt;td&gt;No (Dream Lab uses Leonardo.ai Phoenix)&lt;/td&gt;&lt;td&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Product designers, developers&lt;/td&gt;&lt;td&gt;Product teams in Figma ecosystem&lt;/td&gt;&lt;td&gt;Marketing creatives, solo designers&lt;/td&gt;&lt;td&gt;Creative professionals doing concepting and ideation&lt;/td&gt;&lt;td&gt;Non-designers and content teams needing fast, on-brand output&lt;/td&gt;&lt;td&gt;Creators and teams needing editable AI-generated design&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For a detailed breakdown of how Canva Magic Studio compares to CoDesign specifically, see &lt;a href=&quot;https://img.ly/imgly-codesign-vs-canva-magic-studio&quot;&gt;Canva Magic Studio vs. CoDesign&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-to-choose&quot;&gt;How to Choose&lt;/h2&gt;
&lt;p&gt;The criteria here aren’t about feature counts. They’re about the kind of work you’re doing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose Google Stitch if&lt;/strong&gt; you’re a product designer or developer building UI and want an AI agent that reasons across your whole project, not just individual screens. It’s the most technically connected of the six—MCP server, code input, DESIGN.md export—and it’s clearly built for product interface work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose Figma Make if&lt;/strong&gt; you’re already in the Figma ecosystem and want to go from prompt to working prototype fast. It inherits your design system automatically, which removes a lot of setup friction, and it outputs functional code rather than static designs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose Lovart if&lt;/strong&gt; you need to produce full creative campaigns—brand identity, packaging, video, marketing assets—from a single prompt. Its MCoT reasoning engine and canvas-level consistency analysis make it particularly strong for high-volume marketing creative work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose Adobe Firefly Boards if&lt;/strong&gt; you’re a creative professional working inside the Adobe ecosystem who needs to generate and align on large volumes of visual concepts before moving them into production. It’s the right call for designers, photographers, and creative directors doing serious concepting work that will ultimately land in Photoshop, Premiere, or Illustrator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose Canva Magic Studio if&lt;/strong&gt; you need fast, on-brand creative output and your users aren’t designers. Magic Studio’s Brand Kit integration means generated designs pull from your saved colors, fonts, and logos automatically—no cleanup, no manual adjustment. It’s not the tool for pixel-level creative control, but for marketing teams and content creators producing high volumes across multiple formats and channels, that’s rarely the priority.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Choose CoDesign if&lt;/strong&gt; you need AI-generated output you can actually edit. Every element lands on the canvas as a structured design object—headline, image block, color field—not a flat export. That matters when the brief changes, the brand needs adjusting, or the output needs to become ten variations rather than one. For creators and teams producing branded content at scale, that editability is the difference between a starting point and a finished asset.&lt;/p&gt;
&lt;p&gt;CoDesign is in early access. Be among the first to prompt a direction and walk away with a design you can actually use. &lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;Talk to our team&lt;/a&gt; to learn more.&lt;/p&gt;</content:encoded><dc:creator>Klaudia</dc:creator><media:content url="https://blog.img.ly/2026/03/vibedesign-tool-comparison-1.png" medium="image"/><category>AI</category><category>Insights</category></item><item><title>CE.SDK v1.71 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-71-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-71-0-release-notes/</guid><description>Animations land on iOS, the web editor gets a more flexible design surface, and variable fonts ship across all platforms.</description><pubDate>Fri, 20 Mar 2026 20:37:43 GMT</pubDate><content:encoded>&lt;p&gt;v1.71 is a design capabilities release. Animations arrive on iOS, completing motion design across every platform. The web editor gets free layout mode. Variable fonts land across all platforms.&lt;/p&gt;
&lt;p&gt;Let’s dive in!&lt;/p&gt;
&lt;h2 id=&quot;add-animations-to-your-ios-video-editor&quot;&gt;Add Animations to Your iOS Video Editor&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/03/ios-animation-design-app-sdk-whitelabel.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Add dynamic motion to your text and design elements with CE.SDK for iOS. Our Animations for design blocks (images, shapes, stickers) come with a comprehensive library. This release also ships with a s&lt;em&gt;leek&lt;/em&gt; UI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comprehensive Animation Library&lt;/strong&gt;&lt;br&gt;
Access a full suite of &lt;strong&gt;in, out, and loop&lt;/strong&gt; animations—mirroring the capabilities of our animation for &lt;a href=&quot;https://img.ly/showcases/cesdk/animations/web?utm_source=imgly&amp;#x26;utm_medium=blog&amp;#x26;utm_campaign=releasenotes&quot;&gt;Web&lt;/a&gt; and Android.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tailored Motion Controls&lt;/strong&gt;&lt;br&gt;
Fine-tune animations like duration, easing, direction, and more.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/ios/animation-ce900c/&quot;&gt;iOS Animation Documentation&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/showcases/cesdk/video-ui/ios&quot;&gt;Try the iOS Video Editor Demo&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://apps.apple.com/us/app/img-ly-design-editor/id1672991141&quot;&gt;Download the iOS Demo App&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;design-multi-format-scenes-with-mixed-page-sizes&quot;&gt;Design Multi-Format Scenes with Mixed Page Sizes&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/multipagesize_Z18Dk8E.webp&quot; srcset=&quot;/_astro/multipagesize_Z1HgCen.webp 640w, /_astro/multipagesize_AgH9J.webp 750w, /_astro/multipagesize_Za7Gvb.webp 828w, /_astro/multipagesize_ZOeSKe.webp 1080w, /_astro/multipagesize_ZXVBrr.webp 1280w, /_astro/multipagesize_Z18Dk8E.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;In your &lt;strong&gt;web&lt;/strong&gt; editor, every page in a scene can now have its own dimensions. If enabled, the &lt;em&gt;resize&lt;/em&gt; panel automatically adapts to your selection. Resize one page or all pages at once.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;The resize panel dynamically adjusts between per-page and all-pages mode based on selection.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1029px) 1029px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1029&quot; height=&quot;785&quot; src=&quot;https://img.ly/_astro/web-multisize_d45tF.webp&quot; srcset=&quot;/_astro/web-multisize_Zsmx7Y.webp 640w, /_astro/web-multisize_Z1xjKvw.webp 750w, /_astro/web-multisize_Z1r5UXl.webp 828w, /_astro/web-multisize_d45tF.webp 1029w&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; users can design across multiple formats in a single session. Social post, banner, side by side.&lt;/p&gt;
&lt;h2 id=&quot;one-font-file-every-weight-variable-font-support&quot;&gt;One Font File, Every Weight: Variable Font Support&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/variable_Z26bORJ.webp&quot; srcset=&quot;/_astro/variable_ZiyGMC.webp 640w, /_astro/variable_Z2nS8Ql.webp 750w, /_astro/variable_Z2h0gKV.webp 828w, /_astro/variable_LXIju.webp 1080w, /_astro/variable_1RYvCl.webp 1280w, /_astro/variable_Z26bORJ.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Our engine now supports variable fonts! A single font file can represent multiple weight and style variants, eliminating the need to load separate files for each.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your app this means:&lt;/strong&gt; leaner asset loading, more typographic flexibility, and better brand consistency for users working with modern type systems.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/api/engine/functions/createvariablefontcombinations/&quot;&gt;Variable Fonts Docs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Stay Focused on a Simplified Video Timeline&lt;/strong&gt;&lt;br&gt;
The web video timeline now focuses on the active track by default, hiding other tracks to reduce visual noise. Users can still access everything, but the default view keeps attention on what they’re actually editing.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1047px) 1047px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1047&quot; height=&quot;658&quot; src=&quot;https://img.ly/_astro/simplified-timeline-web_Z56NHi.webp&quot; srcset=&quot;/_astro/simplified-timeline-web_Z13yuDN.webp 640w, /_astro/simplified-timeline-web_16hbOf.webp 750w, /_astro/simplified-timeline-web_1mgCwc.webp 828w, /_astro/simplified-timeline-web_Z56NHi.webp 1047w&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;full-changelog&quot;&gt;Full Changelog&lt;/h2&gt;
&lt;p&gt;All performance improvements, breaking changes, and fixes are in the &lt;a href=&quot;https://img.ly/blog/creative-editor-sdk-v-1-71-0-release-notes//#&quot;&gt;v1.71.0 Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thank you for building with IMG.LY.&lt;/em&gt;&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/03/creative-editor-sdk-1-71.jpg" medium="image"/><category>Release Notes</category></item><item><title>What Is Vibe Design? The Definitive Guide for Product Builders, Designers, and Creative Teams</title><link>https://img.ly/blog/what-is-vibe-design/</link><guid isPermaLink="true">https://img.ly/blog/what-is-vibe-design/</guid><description>Vibe design just got a name - but the shift it describes has been building for years. Here&apos;s what it actually means, where it came from, and what it means if you&apos;re building a product where users create things.</description><pubDate>Fri, 20 Mar 2026 17:23:51 GMT</pubDate><content:encoded>&lt;h2 id=&quot;vibe-design---a-concept-that-just-got-a-name&quot;&gt;Vibe Design - A Concept That Just Got a Name&lt;/h2&gt;
&lt;p&gt;Creative work has always involved describing an idea and having someone skilled make it real. Vibe design follows the same principle — except the “someone” is AI, ready whenever you are, no brief needed. You describe what you want through text, images, brand assets, or sketches, and the AI generates the design. You direct the process; the tool handles the making.&lt;/p&gt;
&lt;p&gt;The term itself is not new but was brought into mainstream use in early 2026 by Google via their &lt;a href=&quot;https://blog.google/innovation-and-ai/models-and-research/google-labs/stitch-ai-ui-design/&quot;&gt;Stitch announcement&lt;/a&gt;, and within a day it was appearing across The Register, CNBC, and TechRadar. The practice it describes had been building for well over a year — in Figma’s AI features, in generative design tools, in the growing number of products letting users create from a prompt rather than from a toolbox.&lt;/p&gt;
&lt;p&gt;Today, we’ll define what vibe design actually is, traces where the idea came from, and explains what it means for people building products.&lt;/p&gt;
&lt;h2 id=&quot;where-the-term-comes-from-vibe-codings-design-sibling&quot;&gt;Where the Term Comes From: Vibe Coding’s Design Sibling&lt;/h2&gt;
&lt;p&gt;To understand vibe design, it helps to start with the concept it’s directly descended from: vibe coding.&lt;/p&gt;
&lt;p&gt;Former Director of AI at Tesla and co-founder of OpenAI, &lt;a href=&quot;https://x.com/karpathy/status/1886192184808149383&quot;&gt;Andrej Karpathy coined “vibe coding” in early 2025&lt;/a&gt; to describe a shift in how developers work with AI-generated code. The idea: instead of writing implementation yourself, you describe what you want in natural language and an AI writes the code. The developer’s role shifts from implementation to direction. You stop thinking about &lt;em&gt;how&lt;/em&gt; things are built and focus entirely on &lt;em&gt;what&lt;/em&gt; you want to create.&lt;/p&gt;
&lt;p&gt;Vibe design is the same shift applied to visual creation. Instead of opening a design tool and manually placing elements, adjusting colors, choosing fonts and spacing, you describe what you want — in words, or by uploading a reference image, a photo, a sketch, a brand kit — and the design takes shape. The phrase “vibe coding design” captures this lineage neatly: it’s the same intent-first principle, moved from engineering into the visual layer.&lt;/p&gt;
&lt;p&gt;The underlying movement had been gathering momentum since AI image generators went mainstream, accelerating rapidly as tools like Figma Make, Lovart, and now Google Stitch brought the concept directly into design workflows. The label arrived late to a trend that had already changed how a lot of creative work gets done.&lt;/p&gt;
&lt;h2 id=&quot;what-vibe-design-actually-means-a-working-definition&quot;&gt;What Vibe Design Actually Means: A Working Definition&lt;/h2&gt;
&lt;p&gt;Here is a working definition that holds up across tools and use cases:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vibe design is a creative workflow in which the primary input is intent — described in natural language or visual references — rather than manual manipulation of design tools. The designer’s role becomes one of direction, curation, and refinement rather than construction.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Three things define a genuine vibe design workflow:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Intent-first input.&lt;/strong&gt; The starting point is a brief, a description, a reference image, or a combination — not a blank canvas and a toolbox. You’re communicating what you want, not building it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Generative execution.&lt;/strong&gt; An AI interprets that intent and produces a designed output — a layout, a color scheme, a complete page, a set of variations. The construction step is handled by the system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Human refinement in the loop.&lt;/strong&gt; The human stays involved throughout — approving directions, adjusting outputs, steering away from things that don’t work. The AI handles execution; the human handles judgment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What vibe design is not:&lt;/strong&gt; it’s not simply using an AI image generator to produce pictures. Image generation is one possible input &lt;em&gt;into&lt;/em&gt; a vibe design workflow, not the workflow itself. Vibe design produces editable, structured design outputs — layouts, components, documents, campaigns — not static images. The output is something you can work with, not just something you can look at.&lt;/p&gt;
&lt;h2 id=&quot;how-it-differs-from-ai-assisted-design&quot;&gt;How It Differs from AI-Assisted Design&lt;/h2&gt;
&lt;p&gt;“AI-assisted design” has covered a lot of ground over the past few years: autocomplete for design tokens, background removal, content generation within a layout. These are useful additions to a manual workflow. But in all of them, the designer still drives — AI is a tool called on for specific tasks while the human remains in the seat.&lt;/p&gt;
&lt;p&gt;Vibe design flips the ratio. The AI drives the initial creation; the human steers and refines. It’s a different relationship with the tool, not a faster version of the same one.&lt;/p&gt;
&lt;p&gt;The distinction matters because it changes three things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What skills are most useful.&lt;/strong&gt; Writing clear, directed prompts and making fast curatorial judgments matters more than knowing every keyboard shortcut.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What the workflow looks like.&lt;/strong&gt; You’re reviewing and steering outputs rather than constructing from scratch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What software is relevant.&lt;/strong&gt; Vibe design tools are built around a different interaction model than tools built to accelerate traditional manual design.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;vibe-design-in-practice-three-scenarios&quot;&gt;Vibe Design in Practice: Three Scenarios&lt;/h2&gt;
&lt;p&gt;The best way to make this concrete is to show what an AI design workflow built around vibe design actually looks like. These three scenarios cover the range of contexts where it’s becoming relevant.&lt;/p&gt;
&lt;h3 id=&quot;scenario-1-a-marketing-team-no-designer-available&quot;&gt;Scenario 1: A Marketing Team, No Designer Available&lt;/h3&gt;
&lt;p&gt;A marketing manager at a mid-sized e-commerce brand needs a product launch campaign for social media. There’s no designer available this week — they’re tied up on a bigger project.&lt;/p&gt;
&lt;p&gt;She opens the creative tool embedded in their marketing platform, uploads the product photo and the brand guidelines, and types: &lt;em&gt;“Create a campaign for our summer collection — clean, minimal, white space heavy, headline-driven.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;She receives a set of formatted, brand-consistent assets sized for each social channel. The layouts are on-brand. The typography follows the guidelines she uploaded. She adjusts the headline copy on two of the assets and swaps one background color. The whole thing takes 12 minutes.&lt;/p&gt;
&lt;p&gt;No design skills required. No third-party tool. No waiting for a designer to become available. The campaign goes out on schedule.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://img.ly/blog/content/media/2026/03/4-UI-panel-color-themer.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h3 id=&quot;scenario-2-a-designer-exploring-variations&quot;&gt;Scenario 2: A Designer Exploring Variations&lt;/h3&gt;
&lt;p&gt;A senior designer is working on a brand campaign for a luxury lifestyle client. She’s settled on a layout she likes, but she can’t land on the right color direction — everything she’s tried manually feels either too cold or too safe, and exporting variations to compare them side by side is eating time she doesn’t have.&lt;/p&gt;
&lt;p&gt;Instead, she types a single instruction into the agent chat: &lt;em&gt;“Add a panel on the left with five color theme presets I can click to instantly apply to my design.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The agent builds the panel directly inside the editor. Five named presets — Warm Sand, Midnight, Rose Quartz, Forest, Slate Blue — each applying a complete color theme across the entire design in one click: backgrounds, accents, headings, body text, all updated together. She works through all five in under a minute and finds the direction she was looking for without typing another prompt.&lt;/p&gt;
&lt;p&gt;The variation-exploration workflow, at its most useful, doesn’t just produce more outputs — it builds the tools you need to make the decision faster.&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://img.ly/blog/content/media/2026/03/01-delegate-catalogue-design--1-.mp4&quot; controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h3 id=&quot;scenario-3-a-product-team-embedding-creative-capability&quot;&gt;Scenario 3: A Product Team Embedding Creative Capability&lt;/h3&gt;
&lt;p&gt;A print-on-demand platform serves retailers and small brands who need to produce product catalogues regularly but don’t have in-house design resource. One of their customers — a retailer for a furniture brand — opens the editor, pastes a CSV of five products into the agent chat, and describes the layout style she wants: two-column landscape, typography-led, minimal, referencing the aesthetic of Hay, Muuto, and Frama.&lt;/p&gt;
&lt;p&gt;The agent generates a complete five-page catalogue inside the editor — one page per product, consistent layout throughout, with product names, descriptions, prices, and photo placeholders already in place. She follows up in plain language: &lt;em&gt;“Pre-fill the photo placeholders with elegant product photography, make them black and white, soft contrast.”&lt;/em&gt; The agent updates all five pages. She adjusts one headline manually and exports.&lt;/p&gt;
&lt;h2 id=&quot;the-vibe-design-tools-shaping-the-space-right-now&quot;&gt;The Vibe Design Tools Shaping the Space Right Now&lt;/h2&gt;
&lt;p&gt;Several tools are explicitly built around this workflow.&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tool&lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;th&gt;Where the agent lives&lt;/th&gt;&lt;th&gt;Best for&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Google Stitch&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Voice and text prompts to UI design&lt;/td&gt;&lt;td&gt;Google’s standalone tool&lt;/td&gt;&lt;td&gt;UI/UX designers, developers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Figma Make&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Prompt to prototype inside Figma&lt;/td&gt;&lt;td&gt;Inside Figma (standalone)&lt;/td&gt;&lt;td&gt;Product designers working in Figma&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Lovart&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;AI design agent for graphic creation&lt;/td&gt;&lt;td&gt;Lovart’s standalone platform&lt;/td&gt;&lt;td&gt;Marketing creatives, solo designers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;IMG.LY&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Design companion for all types of design works and tasks&lt;/td&gt;&lt;td&gt;IMG.LY Codesign studio&lt;/td&gt;&lt;td&gt;Designers, marketers, brand owners&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Google Stitch&lt;/strong&gt; is built around the idea that UI design should start with a conversation. You describe a screen — its purpose, the actions it needs to support, the general feel — and Stitch produces an interface design you can refine. It’s aimed at developers and UI/UX designers who want to move faster in the early stages of building a product interface. Where it works well is in getting from a rough idea to a structured screen layout without having to make every decision from scratch.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Figma Make&lt;/strong&gt; extends the environment that product designers already work in. Because it lives inside Figma, it has access to your existing components, tokens, and design system. The prompt-to-prototype workflow is useful for designers who want to explore how a brief might translate into a working layout without manually composing every frame. Its biggest advantage is that the output lands directly in a space where a full design team can take over.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lovart&lt;/strong&gt; is focused on graphic and campaign creation rather than UI or product design. It’s built for the kind of work that marketing creatives and solo designers do a lot of — producing visual assets for social, campaigns, brand activations. The emphasis is on speed and aesthetic quality for graphic outputs rather than on structured, component-based design systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IMG.LY&lt;/strong&gt; brings a design companion together with manual canvas edits - each element created by AI can be manually moved, changed, or adapted. It maintains brand and template context throughout the generation process, redefining the meaning of templates - from simple asset with placeholders, to true brand guideliness. Excels at number of import and export options, making a great options for true graphic and asset designs.&lt;/p&gt;
&lt;h2 id=&quot;where-vibe-design-has-limits&quot;&gt;Where Vibe Design Has Limits&lt;/h2&gt;
&lt;p&gt;Vibe design works well when there’s something to work from — a reference image, a brand kit, an existing visual direction. When there’s genuinely nothing to draw from, outputs tend toward the generic. A completely new brand identity with no existing visual language is a poor fit for a vibe design workflow; that kind of work still benefits from the deliberate, decision-by-decision process of traditional design.&lt;/p&gt;
&lt;p&gt;It’s also less suited to accessibility-critical UI, where precise specification — contrast ratios, touch targets, interaction states — matters more than mood or aesthetic direction. A generated layout might look right without being accessible, and catching that requires careful manual review.&lt;/p&gt;
&lt;p&gt;Finally, the more technically constrained the brief, the more refinement the output will need. Vibe design compresses the path to a starting point; it doesn’t always compress the path to a final, production-ready output. Teams that go in expecting to iterate will get more out of it than teams that expect to export and ship.&lt;/p&gt;
&lt;h2 id=&quot;the-human-element-vibe-design-is-not-autonomous-design&quot;&gt;The Human Element: Vibe Design Is Not Autonomous Design&lt;/h2&gt;
&lt;p&gt;A common concern about vibe design workflows is that they reduce the role of skill and judgment in creative work. The evidence so far points the other way.&lt;/p&gt;
&lt;p&gt;The most effective workflows keep the human firmly in control of direction, curation, and final judgment. The AI generates; the human decides what’s good, what fits the brief, what needs to change. Removing that layer doesn’t improve outcomes — it just produces more output with no quality filter.&lt;/p&gt;
&lt;p&gt;What changes is not &lt;em&gt;whether&lt;/em&gt; human judgment matters, but &lt;em&gt;at which stage&lt;/em&gt; it matters most. In a traditional design workflow, judgment is exercised continuously — at every click, every color choice, every alignment decision. In a vibe design workflow, judgment operates at a higher level: Is this the right direction? Does this match the intent? What needs to change?&lt;/p&gt;
&lt;p&gt;The craft is still there. The instruments are different.&lt;/p&gt;
&lt;h2 id=&quot;a-shift-thats-already-underway&quot;&gt;A Shift That’s Already Underway&lt;/h2&gt;
&lt;p&gt;Vibe design isn’t a trend arriving from the future. It’s a name for a shift that’s been building for several years and just became visible enough to label properly.&lt;/p&gt;
&lt;p&gt;The creative AI tools exist. The workflows are being adopted. The user expectation is forming. Naming the practice in 2026 didn’t create the movement — it just gave it a shared vocabulary that makes it easier to talk about and build toward.&lt;/p&gt;
&lt;p&gt;If what you’re looking for is a balance between manual control of the output and power of AI generation, IMG.LY Codesign might be the right fit for you. &lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;Talk to our team&lt;/a&gt; to see how it can fit inside your stack.&lt;/p&gt;</content:encoded><dc:creator>Klaudia</dc:creator><media:content url="https://blog.img.ly/2026/03/vibedesign-tools-ai.jpg" medium="image"/><category>AI</category><category>Agent Skills</category><category>Insights</category></item><item><title>Make Your Docs Agent-Ready: Compiling MDX into Markdown</title><link>https://img.ly/blog/making-docs-machine-readable-why-we-native-compile-markdown-for-ai-agents/</link><guid isPermaLink="true">https://img.ly/blog/making-docs-machine-readable-why-we-native-compile-markdown-for-ai-agents/</guid><description>We rebuilt our docs pipeline to serve both HTML for humans and fully resolved Markdown for AI agents: 7× lighter and easier for tools to ingest.</description><pubDate>Wed, 11 Mar 2026 14:38:44 GMT</pubDate><content:encoded>&lt;h2 id=&quot;tldr-the-7x-efficiency-gain&quot;&gt;TL;DR: The 7x Efficiency Gain&lt;/h2&gt;
&lt;p&gt;We rebuilt our documentation pipeline to treat AI agents as a first-class audience. By natively compiling MDX into clean, fully-resolved Markdown—rather than heavy HTML or unresolved source code—agents and LLMs can now ingest our docs &lt;strong&gt;7x faster&lt;/strong&gt; and with far higher accuracy.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Test it yourself:&lt;/strong&gt;&lt;br&gt;
Request our docs with the &lt;code&gt;Markdown&lt;/code&gt; accept header to see the agent-optimized view:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; -s&lt;/span&gt;&lt;span&gt; -H&lt;/span&gt;&lt;span&gt; &quot;Accept: text/markdown&quot;&lt;/span&gt;&lt;span&gt; https://img.ly/docs/cesdk/js/settings-970c98/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;the-documentation-mismatch-humans-vs-agents&quot;&gt;The Documentation Mismatch: Humans vs. Agents&lt;/h2&gt;
&lt;p&gt;If you build developer tools today, you have two distinct audiences: human engineers and the AI agents they use to write code. Recently, we realized we were treating them exactly the same.&lt;/p&gt;
&lt;p&gt;Our docs pipeline is built on MDX and optimized for the browser. But when an LLM tries to ingest a page, it has to wade through navigation chrome, layout wrappers, and raw JSX. We didn’t just need a “clean text” mode; we needed a fundamentally different architecture.&lt;/p&gt;
&lt;h3 id=&quot;humans-vs-agents-a-comparative-overview&quot;&gt;Humans vs. Agents: A Comparative Overview&lt;/h3&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;th&gt;Humans (Browser)&lt;/th&gt;&lt;th&gt;Agents (Context Window)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Primary Format&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;HTML + CSS + JS&lt;/td&gt;&lt;td&gt;Clean Markdown&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Visual UI (Sidebar/Tabs)&lt;/td&gt;&lt;td&gt;Explicit links + hierarchy&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Implicit (Site layout)&lt;/td&gt;&lt;td&gt;Explicit (Frontmatter + headers)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Constraints&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Performance / Core Web Vitals&lt;/td&gt;&lt;td&gt;Token / Context Window budgets&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Payload Size&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;~222 KB&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~31 KB (7x smaller)&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;the-problem-why-html-and-raw-mdx-fail-agents&quot;&gt;The Problem: Why HTML and Raw MDX Fail Agents&lt;/h2&gt;
&lt;h3 id=&quot;1-html-is-expensive-chrome&quot;&gt;1. HTML is expensive “Chrome”&lt;/h3&gt;
&lt;p&gt;A documentation site is an application. Even static sites ship navigation chrome, scripts, and styling hooks. For AI, this is “token noise.” You are paying for bytes that provide zero value to the LLM and forcing the agent to reconstruct a hierarchy that you already had at authoring time.&lt;/p&gt;
&lt;h3 id=&quot;2-raw-mdx-is-unresolved-source-code&quot;&gt;2. Raw MDX is unresolved source code&lt;/h3&gt;
&lt;p&gt;Serving raw MDX files doesn’t solve the problem either. MDX is for maintainers—it is full of imports and unresolved dependencies. Our documentation often pulls code from external, tested repositories:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## Initialize the Engine&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;CodeBlock file=&quot;examples/getting-started/src/index.ts&quot; lines=&quot;12-24&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the browser, this renders beautifully. In raw MDX, it’s a pointer to a file the agent cannot see. The actual code isn’t there.&lt;/p&gt;
&lt;h2 id=&quot;the-solution-treat-markdown-as-a-compilation-target&quot;&gt;The Solution: Treat Markdown as a Compilation Target&lt;/h2&gt;
&lt;p&gt;We stopped thinking about this as “exporting text” and started treating it as what it really is: a &lt;strong&gt;second build target&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Old Pipeline:&lt;/strong&gt; &lt;code&gt;MDX (Source) → HTML (Browser View)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New Pipeline:&lt;/strong&gt; &lt;code&gt;MDX (Source) → HTML&lt;/code&gt; &lt;strong&gt;AND&lt;/strong&gt; &lt;code&gt;MDX (Source) → Markdown (Agent View)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-we-didnt-just-convert-html&quot;&gt;Why we didn’t just “convert” HTML&lt;/h3&gt;
&lt;p&gt;We tried rendering to HTML and then running a converter. It failed at &lt;strong&gt;code blocks&lt;/strong&gt;. Syntax highlighting adds spans and wrappers around tokens; reversing that into clean, trustworthy code is nearly impossible.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;language-js&quot;&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;token keyword&quot;&lt;/span&gt;&lt;span&gt;&gt;const&amp;#x3C;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &amp;#x3C;&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt; class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;token variable&quot;&lt;/span&gt;&lt;span&gt;&gt;engine&amp;#x3C;/&lt;/span&gt;&lt;span&gt;span&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By working at the AST (Abstract Syntax Tree) level &lt;em&gt;before&lt;/em&gt; rendering, we avoid this entirely.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;implementation-transforming-mdx-at-the-ast-level&quot;&gt;Implementation: Transforming MDX at the AST Level&lt;/h2&gt;
&lt;p&gt;Rather than trying to reconstruct meaning from rendered markup, we preserve it directly. We built a &lt;code&gt;remark&lt;/code&gt; plugin that transforms MDX at the MDAST level.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { remark } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;remark&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; remarkMdx &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;remark-mdx&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; remarkStringify &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;remark-stringify&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { remarkTransformForExport } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;./remarkTransformForExport&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; processor&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; remark&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  .&lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt;(remarkMdx) &lt;/span&gt;&lt;span&gt;// Parse MDX/JSX nodes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  .&lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt;(remarkTransformForExport, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    baseUrl: &lt;/span&gt;&lt;span&gt;&apos;[https://img.ly/docs/cesdk/](https://img.ly/docs/cesdk/)&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    paths: resolvedPathMap,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  .&lt;/span&gt;&lt;span&gt;use&lt;/span&gt;&lt;span&gt;(remarkStringify); &lt;/span&gt;&lt;span&gt;// Back to markdown&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; markdown&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; processor.&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;(mdxContent);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;the-component-contract&quot;&gt;The Component Contract&lt;/h3&gt;
&lt;p&gt;Every MDX component must define how it exports to the agent view. We colocate the transform directly with the component: &lt;code&gt;Aside.astro&lt;/code&gt; (Human UI) ↔ &lt;code&gt;Aside.toMarkdown.ts&lt;/code&gt; (Agent logic).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example: Aside Component → Blockquote&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Input:&lt;/strong&gt; &lt;code&gt;&amp;#x3C;Aside title=&quot;Pro Tip&quot;&gt;Use the basePath...&amp;#x3C;/Aside&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Output:&lt;/strong&gt; &lt;code&gt;&gt; **Pro Tip:** Use the basePath...&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example: Resolving Code References&lt;/strong&gt; This is the most critical transform. Instead of a file pointer, the agent gets the actual, inlined code block fetched during the build process.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;translating-navigation-ui-into-text&quot;&gt;Translating Navigation UI into Text&lt;/h2&gt;
&lt;p&gt;When you strip the sidebar and footer, you lose context. We reintroduce “navigational chrome” as text-native primitives at the top and bottom of every Markdown file:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;Working with Filters&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;platform&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;react&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&apos;[https://docs.example.com/react/guides/filters/](https://docs.example.com/react/guides/filters/)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&gt; You’re reading the React docs. For the full corpus, see llms-full.txt.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## &lt;/span&gt;&lt;span&gt;**Path:**&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;Home&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;https://docs.example.com/&lt;/span&gt;&lt;span&gt;) &gt; [&lt;/span&gt;&lt;span&gt;Guides&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;https://docs.example.com/guides/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;[Self-contained Page Content]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;## Continue Reading&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;Color Adjustments&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;https://docs.example.com/react/guides/color-adjustments/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;API Reference&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;https://docs.example.com/api/&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;lessons-for-scaling-agentic-dx&quot;&gt;Lessons for Scaling Agentic DX&lt;/h2&gt;
&lt;p&gt;If you maintain docs at scale, “optimizing for bots” is no longer optional—it is the new standard for Developer Experience (DX).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Don’t serve HTML and hope:&lt;/strong&gt; Reverse-engineering structure is hard for AI. Give it the structure directly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Every component needs an identity:&lt;/strong&gt; If a component carries meaning, it needs a Markdown equivalent. If it’s just layout, unwrap it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resolve everything:&lt;/strong&gt; Assume zero ambient context. Links must be absolute, and code must be inlined.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Negotiation:&lt;/strong&gt; Use the &lt;code&gt;Accept: text/markdown&lt;/code&gt; header. It is becoming the industry standard for tools like Claude Code and OpenCode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Single-File Corpus:&lt;/strong&gt; In addition to per-page files, generate a &lt;code&gt;llms-full.txt&lt;/code&gt; that concatenates everything. Some agents prefer one large fetch over a crawl.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By acknowledging that AI agents are a primary consumer of our documentation, we’ve made our SDK significantly easier to integrate. The future of docs isn’t just “readable”. It’s “storable and traversable.”&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Note: We built this for CE.SDK. The implementation uses Astro and Vercel, but the approach is framework-agnostic.&lt;/em&gt;&lt;/p&gt;</content:encoded><dc:creator>Mirko</dc:creator><media:content url="https://blog.img.ly/2026/03/optimize-docs-for-agents-ai-llm-1.jpg" medium="image"/></item><item><title>CE.SDK v1.70 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-70-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-70-0-release-notes/</guid><description>A sharper Android timeline, video duration controls on mobile, and a color editing workflow that finally keeps up with modern design tools.</description><pubDate>Tue, 10 Mar 2026 16:08:17 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://img.ly/blog/creative-editor-sdk-v-1-69-0-release-notes/&quot;&gt;Fresh off v1.69&lt;/a&gt; (our biggest developer experience release yet), v1.70 now strengthens what’s already there. The Android video timeline gets a professional-grade overhaul, iOS and Android gain video duration controls. Under the hood, significant stability improvements across every platform.&lt;/p&gt;
&lt;p&gt;Let’s dive in!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;edit-videos-with-clarity-on-android&quot;&gt;Edit Videos with Clarity on Android&lt;/h2&gt;
&lt;p&gt;These updates to the Android video timeline improve how editing looks and feels for your mobile users.&lt;/p&gt;
&lt;h3 id=&quot;use-real-audio-waveforms-for-accurate-video-editing&quot;&gt;Use Real Audio Waveforms for Accurate Video Editing&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/waveform_1nnKQN.webp&quot; srcset=&quot;/_astro/waveform_sjaFV.webp 640w, /_astro/waveform_Z1C0gmM.webp 750w, /_astro/waveform_Z1v7ohn.webp 828w, /_astro/waveform_ZNCNJT.webp 1080w, /_astro/waveform_hmXxW.webp 1280w, /_astro/waveform_1nnKQN.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Audio clips now display actual waveform visualization, replacing the previous placeholder. Users can see exactly where audio peaks and drops — making precise edits faster and more intuitive.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/android/create-video/timeline-editor-912252/#audio-waveforms&quot;&gt;Explore Audio Waveform Docs&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;keep-your-timeline-clutter-free&quot;&gt;Keep Your Timeline Clutter-Free&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/timeline-android_Zukrgr.webp&quot; srcset=&quot;/_astro/timeline-android_2sonoo.webp 640w, /_astro/timeline-android_3uqC8.webp 750w, /_astro/timeline-android_Z2h6iMm.webp 828w, /_astro/timeline-android_r4uHi.webp 1080w, /_astro/timeline-android_Z1CsLz.webp 1280w, /_astro/timeline-android_Zukrgr.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Images, stickers, and shapes now display &lt;em&gt;one&lt;/em&gt; thumbnail per clip, instead of repeating across the track. The timeline is cleaner and easier to read, keeping complex video compositions tidy on mobile screens.&lt;/p&gt;
&lt;h3 id=&quot;keep-text-visible-throughout-your-timeline&quot;&gt;Keep Text Visible Throughout Your Timeline&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;Keep your text clips apart: full text now visible in text clips.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/timeline-android-ii_Z1Ofpkc.webp&quot; srcset=&quot;/_astro/timeline-android-ii_Z1atdup.webp 640w, /_astro/timeline-android-ii_1KhoOm.webp 750w, /_astro/timeline-android-ii_Z17x5Ka.webp 828w, /_astro/timeline-android-ii_uqgs3.webp 1080w, /_astro/timeline-android-ii_ZEp4qz.webp 1280w, /_astro/timeline-android-ii_Z1Ofpkc.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Text clips now show their actual text content alongside the clip label, so users can identify and navigate text layers without opening each one.&lt;/p&gt;
&lt;h3 id=&quot;improvements&quot;&gt;Improvements&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Set Video Duration Limits on iOS and Android&lt;/strong&gt;&lt;br&gt;
You can now &lt;strong&gt;define minimum and maximum video duration&lt;/strong&gt; constraints directly in CE.SDK on both iOS and Android.&lt;/p&gt;
&lt;p&gt;Timeline markers make the boundaries visible to users while they edit, and export validation ensures clips meet the defined limits before rendering.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;edit-colors-like-a-pro--in-one-panel&quot;&gt;Edit Colors like a Pro – in One Panel&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/03/CYMK-Color-picker-set.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;color panel for web&lt;/strong&gt; is now unified: preview, saved colors, and custom editing controls all live in one place. Users can pick, adjust, and reuse colors in a single continuous workflow, without a separate modal or extra clicks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CMYK Color Mode for Web&lt;/strong&gt;&lt;br&gt;
Additionally, the web editor supports restricting the color picker to a specific color mode: RGB, CMYK. When CMYK is enforced, elements using a different color mode show a clear convert option rather than broken inputs.&lt;br&gt;
New pages, asset library blocks, and fill type switches automatically convert colors to match the configured mode.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;full-changelog&quot;&gt;Full Changelog&lt;/h2&gt;
&lt;p&gt;All technical details, breaking changes, and migration notes are in the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-70-0/&quot;&gt;v1.70.0 Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thank you for building with IMG.LY.&lt;/em&gt;&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/03/creative-sdk-imgly-170-release-notes-android-ios-design-video-photo-editor-integrate.jpg" medium="image"/><category>Release Notes</category><category>Mobile App Development</category></item><item><title>CE.SDK v1.69 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-69-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-69-0-release-notes/</guid><description>Agent Skills turns your AI coding assistant into a CE.SDK expert. Ship editors in minutes, not days — plus Starter Kits, PPTX import, and video editor updates.</description><pubDate>Fri, 27 Feb 2026 18:29:53 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;v1.69 is the biggest developer experience release we’ve shipped.&lt;/strong&gt; &lt;em&gt;Agent Skills&lt;/em&gt; collapse the time from idea to working editor from days to under a minute. Production-ready &lt;em&gt;Starter Kits&lt;/em&gt; eliminate days of boilerplate setup. &lt;em&gt;PPTX and Canva Importer&lt;/em&gt; lets users bring their existing designs directly into your editor. And a comprehensive video overhaul across Web, iOS, and Android closes the gap between CE.SDK and native professional editing apps.&lt;/p&gt;
&lt;p&gt;Let’s dive in!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;introducing-imgly-agent-skills-for-cesdk&quot;&gt;Introducing IMG.LY Agent Skills for CE.SDK&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/agent-skill-design-editor-photo-editor-video-whitelabel-sdk.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The biggest change to CE.SDK’s developer experience since launch.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AI agents have changed how developers build. With Agent &lt;em&gt;Skills&lt;/em&gt;, CE.SDK works natively with your AI agent.&lt;/p&gt;
&lt;p&gt;Install the plugin for Claude Code or Cursor and your AI coding agent becomes a CE.SDK expert with bundled access to guides, API references, and starter kits across 10 web frameworks. No external services, no MCP servers, no context-switching.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What your developers can now do:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/cesdk:build&lt;/code&gt;&lt;/strong&gt; — Describe a use case in plain language. The agent detects the framework, pulls the right starter kit, and scaffolds a working project autonomously.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/cesdk:explain&lt;/code&gt;&lt;/strong&gt; — Ask any CE.SDK implementation question and get answers adapted to the specific framework and experience level.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/cesdk:docs-[framework]&lt;/code&gt;&lt;/strong&gt; — Retrieve guides and API references directly from the IDE, without leaving the editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1776px) 1776px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1776&quot; height=&quot;1073&quot; src=&quot;https://img.ly/_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_12CM98.webp&quot; srcset=&quot;/_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_cxfWW.webp 640w, /_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_Z2mwpJi.webp 750w, /_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_ZsXQRr.webp 828w, /_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_Z1sPy8p.webp 1080w, /_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_Z1B7SY3.webp 1280w, /_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_2wKax1.webp 1668w, /_astro/build-photo-editor-video-editor-with-claude-codex-ai-chatgpt-1_12CM98.webp 1776w&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; developers prototype in minutes, not days. Non-technical team members can now build and extend functional editors independently. And onboarding new engineers to CE.SDK shrinks from a multi-day ramp to a single session.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/blog/img-ly-agent-skills-web/&quot;&gt;Quick Start &amp;#x26; Full Announcement&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/get-started/agent-skills-f7g8h9/?ref=img.ly&quot;&gt;Explore Agent Skills Documentation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;launch-in-minutes-with-production-ready-starter-kits-for-web&quot;&gt;Launch in Minutes with Production-Ready Starter Kits for Web&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/starterkits-web-photo-editor-video-editor-design-sdk.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Previously, getting CE.SDK running in a real product meant adapting complex demo projects: stripping features, adjusting architecture, and undoing assumptions baked into example code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Starter Kits replace all of that with pre-configured, production-ready editor UIs.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Specialized kits for Photo, Video, and Design editors are scoped, clean, and immediately deployable. Each kit starts with a focused feature set. You explicitly opt in to what you need, so your UI stays performant and your users don’t see capabilities they can’t use.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For your product, this means:&lt;/strong&gt; a functional, shippable editor in minutes rather than days of setup. Clean architecture from day one, without accumulating technical debt.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/get-started/vanilla-js/quickstart-yef23s/&quot;&gt;Explore Starter Kit Documentation&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;let-users-bring-their-pptx--canva-designs-to-cesdk&quot;&gt;Let Users Bring Their PPTX &amp;#x26; Canva Designs to CE.SDK&lt;/h2&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/pptx-canva-importer-import-canva-designs.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Some customers don’t start from scratch. They have existing creative assets locked inside PowerPoint and Canva — and until now, bringing those into CE.SDK required manual recreation.&lt;/p&gt;
&lt;p&gt;The new PPTX Importer removes that barrier.&lt;/p&gt;
&lt;p&gt;Users can import native PowerPoint files or export &lt;strong&gt;Canva designs&lt;/strong&gt; as PPTX and bring them directly into your CE.SDK-powered editor, with layouts, elements, and structure intact.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/showcases/cesdk/pptx-template-import/web&quot;&gt;Try the PPTX Import Demo&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://www.npmjs.com/package/@imgly/pptx-importer&quot;&gt;View PPTX npm&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;professional-grade-video-editing-across-platforms&quot;&gt;Professional-Grade Video Editing Across Platforms&lt;/h2&gt;
&lt;p&gt;This release expands CE.SDK’s video features across web &amp;#x26; mobile platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Control Video Speed (iOS &amp;#x26; Android)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/slow-speed-on-reel-tiktok-videos-sdk.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Users can now adjust the playback speed of video and audio clips via a dedicated Speed UI. This has been one of the most-requested mobile features and is now available on both platforms.&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/ios/create-video/control-daba54/#playback-speed&quot;&gt;View Video Speed Documentation iOS&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://img.ly/docs/cesdk/android/create-video/control-daba54/#playback-speed&quot;&gt;View Video Speed Documentation Android&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create Video Groups in the Timeline (Web)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/group-timeline-tracks.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Multiple clips can now be combined into a single manageable unit with synchronized timing, trimming, and a unified timeline representation.&lt;/p&gt;
&lt;p&gt;This enables complex, multi-layer content production and speeds up the design process.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Video Timeline Now Grows Automatically (Web)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/growing-timeline.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;The timeline now automatically adjusts its height based on content. Manual track configuration is gone, and complex projects are easier to pick up for your new users.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use a Clutter-Free iOS Timeline (iOS)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/cleaner-timeline-ios_Z2dSo4V.webp&quot; srcset=&quot;/_astro/cleaner-timeline-ios_Z1WUXrE.webp 640w, /_astro/cleaner-timeline-ios_oyW7s.webp 750w, /_astro/cleaner-timeline-ios_ZIo5JJ.webp 828w, /_astro/cleaner-timeline-ios_Z2rAzq6.webp 1080w, /_astro/cleaner-timeline-ios_clzDW.webp 1280w, /_astro/cleaner-timeline-ios_Z2dSo4V.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Non-video tracks now show a single thumbnail per clip, reducing clutter in multi-layer timelines on your iOS app.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;full-changelog&quot;&gt;Full Changelog&lt;/h2&gt;
&lt;p&gt;See all technical details, breaking changes, and performance improvements in the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-69-0/&quot;&gt;v1.69.0 Changelog.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thank you for building with IMG.LY.&lt;/em&gt;&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/02/creative-editor-sdk-v169-imgly-whitelabel-design-editor-video-editor-react.jpg" medium="image"/><category>Release Notes</category><category>CE.SDK</category><category>Agent Skills</category><category>Agentic Development</category><category>AI</category><category>Starter Kits</category></item><item><title>Building a CapCut-Like Video Editor with CE.SDK and AI</title><link>https://img.ly/blog/capcut-like-video-editor-web-react/</link><guid isPermaLink="true">https://img.ly/blog/capcut-like-video-editor-web-react/</guid><description>How to built a browser-based video editor with a dark CapCut-inspired UI, multi-track timeline, and AI-powered content generation... in under 200 lines of code.</description><pubDate>Thu, 26 Feb 2026 22:50:34 GMT</pubDate><content:encoded>&lt;h3 id=&quot;build-this-with-ai-in-minutes&quot;&gt;&lt;strong&gt;Build this with AI in minutes&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This tutorial is a great way to understand how CE.SDK works under the hood. But if you just want to get to the result, you can build this entire editor using &lt;a href=&quot;https://img.ly/docs/cesdk/react/get-started/agent-skills-f7g8h9/&quot;&gt;IMG.LY Agent Skills&lt;/a&gt;, no manual setup required.&lt;/p&gt;
&lt;p&gt;Install the skills, then run:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/cesdk:build Build a CapCut-like video editor with a dark theme, multi-track timeline, AI video/image/audio generation, background removal, and MP4 export.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Want to understand a specific concept in depth? Use &lt;code&gt;/cesdk:explain&lt;/code&gt; — for example:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;/cesdk:explain How does the video timeline and block hierarchy work?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;CapCut has set the standard for accessible video editing. Its dark UI, intuitive timeline, and AI-powered features make it feel like a professional tool that anyone can use. But what if you could build something similar embedded directly in your own web application in minutes? Yes, minutes!&lt;/p&gt;
&lt;p&gt;In this tutorial, we’ll walk through how we built a CapCut-like video editor using &lt;a href=&quot;https://img.ly&quot;&gt;IMG.LY’s CreativeEditor SDK (CE.SDK)&lt;/a&gt; for React. The finished editor includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;multi-track timeline&lt;/strong&gt; for video, audio, text, and captions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trim, split, and join&lt;/strong&gt; operations on video clips&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;CapCut-inspired dark theme&lt;/strong&gt; built with CSS custom properties&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI video generation&lt;/strong&gt; (text-to-video, image-to-video) via Minimax, Kling, and Pixverse&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI image generation&lt;/strong&gt; (text-to-image, image editing) via RecraftV3, IdeogramV3, and GPT Image&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI audio generation&lt;/strong&gt; (text-to-speech, sound effects) via ElevenLabs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI text generation&lt;/strong&gt; (copywriting, translation) via Anthropic Claude&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Background removal&lt;/strong&gt; — client-side, powered by WebAssembly/WebGPU&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MP4 export&lt;/strong&gt; directly from the browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The entire editor is a single React component with roughly 180 lines of JavaScript and 100 lines of CSS.&lt;/p&gt;
&lt;h2 id=&quot;architecture-overview&quot;&gt;Architecture Overview&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;App architecture&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 2000px) 2000px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;2000&quot; height=&quot;1969&quot; src=&quot;https://img.ly/_astro/Gemini_Generated_Image_6celpb6celpb6cel_1EicqM.webp&quot; srcset=&quot;/_astro/Gemini_Generated_Image_6celpb6celpb6cel_15nkQs.webp 640w, /_astro/Gemini_Generated_Image_6celpb6celpb6cel_Z1oAwlQ.webp 750w, /_astro/Gemini_Generated_Image_6celpb6celpb6cel_ZxUCR2.webp 828w, /_astro/Gemini_Generated_Image_6celpb6celpb6cel_Z1W608K.webp 1080w, /_astro/Gemini_Generated_Image_6celpb6celpb6cel_s3NdH.webp 1280w, /_astro/Gemini_Generated_Image_6celpb6celpb6cel_2u4DRy.webp 1668w, /_astro/Gemini_Generated_Image_6celpb6celpb6cel_1EicqM.webp 2000w&quot;&gt;&lt;/p&gt;
&lt;p&gt;CE.SDK has two main layers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CreativeEngine:&lt;/strong&gt; The headless core that manages scenes, blocks, assets, and rendering. It handles the video timeline, playback, and export entirely client-side.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CreativeEditor UI:&lt;/strong&gt; A pre-built, customizable UI layer that wraps the engine with a dock, inspector, timeline, canvas, and navigation bar.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Plugins extend both layers. The &lt;code&gt;AiApps&lt;/code&gt; plugin, for example, registers AI providers with the engine and injects UI components (dock buttons, canvas menu items, generation panels) into the editor.&lt;/p&gt;
&lt;h2 id=&quot;step-1-project-setup&quot;&gt;Step 1: Project Setup&lt;/h2&gt;
&lt;p&gt;We scaffolded a React project with Vite and installed CE.SDK alongside the AI plugin packages:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; create&lt;/span&gt;&lt;span&gt; vite@latest&lt;/span&gt;&lt;span&gt; capcut-like-editor&lt;/span&gt;&lt;span&gt; --&lt;/span&gt;&lt;span&gt; --template&lt;/span&gt;&lt;span&gt; react&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; capcut-like-editor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Core SDK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @cesdk/cesdk-js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# AI plugins&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @imgly/plugin-ai-apps-web&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @imgly/plugin-ai-video-generation-web&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @imgly/plugin-ai-image-generation-web&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @imgly/plugin-ai-audio-generation-web&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @imgly/plugin-ai-text-generation-web&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Background removal (runs locally via WASM/WebGPU)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; @imgly/plugin-background-removal-web&lt;/span&gt;&lt;span&gt; onnxruntime-web@1.21.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;why-so-many-packages&quot;&gt;Why so many packages?&lt;/h3&gt;
&lt;p&gt;CE.SDK follows a modular plugin architecture. Each AI capability is a separate package with its own provider modules. This means you only bundle what you use if you don’t need audio generation, don’t install &lt;code&gt;@imgly/plugin-ai-audio-generation-web&lt;/code&gt;. The &lt;code&gt;@imgly/plugin-ai-apps-web&lt;/code&gt; package is the unifying layer that brings them all together into a single dock panel.&lt;/p&gt;
&lt;h2 id=&quot;step-2-the-react-component&quot;&gt;Step 2: The React Component&lt;/h2&gt;
&lt;p&gt;CE.SDK provides a first-class React wrapper via &lt;code&gt;@cesdk/cesdk-js/react&lt;/code&gt;. The &lt;code&gt;&amp;#x3C;CreativeEditor&gt;&lt;/code&gt; component handles mounting, initialization, and cleanup:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CreativeEditor &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@cesdk/cesdk-js/react&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; config&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // license: &apos;YOUR_CESDK_LICENSE_KEY&apos;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; init&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; async&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;cesdk&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // All setup happens here — theme, assets, plugins, UI customization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; default&lt;/span&gt;&lt;span&gt; function&lt;/span&gt;&lt;span&gt; VideoEditor&lt;/span&gt;&lt;span&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &amp;#x3C;&lt;/span&gt;&lt;span&gt;CreativeEditor&lt;/span&gt;&lt;span&gt; config&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{config} &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;{init} &lt;/span&gt;&lt;span&gt;width&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;100vw&quot;&lt;/span&gt;&lt;span&gt; height&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;100vh&quot;&lt;/span&gt;&lt;span&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;config&lt;/code&gt; object is passed to the engine at creation time. The &lt;code&gt;init&lt;/code&gt; callback fires once the &lt;code&gt;cesdk&lt;/code&gt; instance is ready — this is where all our customization lives.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pitfall: Silent init errors.&lt;/strong&gt; The &lt;code&gt;&amp;#x3C;CreativeEditor&gt;&lt;/code&gt; component swallows errors thrown inside &lt;code&gt;init&lt;/code&gt;. If something fails, the editor loads but appears broken with no console output. Always wrap &lt;code&gt;init&lt;/code&gt; in a &lt;code&gt;try/catch&lt;/code&gt;:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;step-3-creating-the-video-scene&quot;&gt;Step 3: Creating the Video Scene&lt;/h2&gt;
&lt;p&gt;A video editor needs three things at startup: asset sources, a video scene, and a timeline.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Load built-in asset libraries (stickers, shapes, filters, typefaces, etc.)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.&lt;/span&gt;&lt;span&gt;addDefaultAssetSources&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Load demo content (sample videos, images, audio) + enable upload slots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.&lt;/span&gt;&lt;span&gt;addDemoAssetSources&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  sceneMode: &lt;/span&gt;&lt;span&gt;&apos;Video&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  withUploadAssetSources: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Create a video scene with timeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.&lt;/span&gt;&lt;span&gt;createVideoScene&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;createVideoScene()&lt;/code&gt; sets up the scene hierarchy that powers the timeline:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Scene&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt; └── Page (represents the video canvas — 1920x1080 by default)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ├── Track (video track — holds video clips in sequence)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ├── Track (overlay track — text, stickers, images)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ├── CaptionTrack (subtitles synced to playback)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └── Audio (background music, voiceover, sound effects)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each element on the timeline is a &lt;strong&gt;block&lt;/strong&gt; with timing properties: &lt;code&gt;timeOffset&lt;/code&gt; (when it appears) and &lt;code&gt;duration&lt;/code&gt; (how long it plays). The engine handles rendering each frame, compositing layers, and synchronizing audio.&lt;/p&gt;
&lt;h3 id=&quot;browser-support&quot;&gt;Browser support&lt;/h3&gt;
&lt;p&gt;Video editing relies on modern web codecs (WebCodecs API), which are available in Chromium-based browsers (Chrome, Edge, Brave). Safari and Firefox support is limited.&lt;/p&gt;
&lt;h2 id=&quot;step-4-the-capcut-dark-theme&quot;&gt;Step 4: The CapCut Dark Theme&lt;/h2&gt;
&lt;p&gt;CapCut’s visual identity is defined by its deep charcoal backgrounds, teal accent colors, and subtle elevation layers. CE.SDK’s theming system maps perfectly to this through CSS custom properties.&lt;/p&gt;
&lt;h3 id=&quot;setting-the-base-theme&quot;&gt;Setting the base theme&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;setTheme&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;dark&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This activates CE.SDK’s built-in dark theme. But we want to go further — we need CapCut’s specific color palette.&lt;/p&gt;
&lt;h3 id=&quot;custom-css-overrides&quot;&gt;Custom CSS overrides&lt;/h3&gt;
&lt;p&gt;CE.SDK scopes all its UI under &lt;code&gt;.ubq-public&lt;/code&gt; with &lt;code&gt;data-ubq-theme&lt;/code&gt; and &lt;code&gt;data-ubq-scale&lt;/code&gt; attributes. We override the CSS custom properties to inject our palette:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.ubq-public&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;data-ubq-theme&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;dark&apos;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;data-ubq-scale&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;normal&apos;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.ubq-public&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;data-ubq-theme&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;dark&apos;&lt;/span&gt;&lt;span&gt;][&lt;/span&gt;&lt;span&gt;data-ubq-scale&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&apos;modern&apos;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /* Deep charcoal backgrounds — darker than CE.SDK&apos;s default dark */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-canvas&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;220&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-elevation-1&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;220&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;13&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-elevation-2&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;220&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;12&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-elevation-3&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;220&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;18&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /* High-contrast white text */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-foreground-default&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsla&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0.92&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-foreground-light&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsla&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0.55&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /* CapCut&apos;s signature teal/cyan accent */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-interactive-accent-default&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;190&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;85&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;48&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-interactive-accent-hover&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;190&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;85&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;42&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-interactive-accent-pressed&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;190&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;85&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;36&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  /* Subtle borders — barely visible, like CapCut */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  --ubq-border-default&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;hsla&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0.08&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;!important&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key design decisions:&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;th&gt;Why&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ubq-canvas&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hsl(220, 15%, 8%)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Near-black with a slight blue tint — matches CapCut’s canvas area&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ubq-elevation-1/2/3&lt;/code&gt;&lt;/td&gt;&lt;td&gt;12% → 15% → 18% lightness&lt;/td&gt;&lt;td&gt;Subtle elevation steps create depth without harsh contrast&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ubq-interactive-accent-*&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hsl(190, 85%, 48%)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;CapCut’s teal — used for buttons, selections, and progress bars&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--ubq-border-default&lt;/code&gt;&lt;/td&gt;&lt;td&gt;8% opacity white&lt;/td&gt;&lt;td&gt;Nearly invisible borders that only appear on close inspection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;responsive-scale&quot;&gt;Responsive scale&lt;/h3&gt;
&lt;p&gt;We also configure responsive scaling so the editor adapts to touch devices:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;setScale&lt;/span&gt;&lt;span&gt;(({ &lt;/span&gt;&lt;span&gt;containerWidth&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;isTouch&lt;/span&gt;&lt;span&gt; }) &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  if&lt;/span&gt;&lt;span&gt; ((containerWidth &lt;/span&gt;&lt;span&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span&gt; containerWidth &lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt; 768&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; isTouch) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    return&lt;/span&gt;&lt;span&gt; &apos;large&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Bigger touch targets on small/touch screens&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  return&lt;/span&gt;&lt;span&gt; &apos;normal&apos;&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;// Standard desktop sizing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-5-ai-plugin-integration&quot;&gt;Step 5: AI Plugin Integration&lt;/h2&gt;
&lt;p&gt;This is where the editor transforms from a basic video tool into something that feels like CapCut’s AI-powered experience. CE.SDK’s plugin system lets us add all AI capabilities through a single unified &lt;code&gt;AiApps&lt;/code&gt; plugin.&lt;/p&gt;
&lt;h3 id=&quot;the-unified-aiapps-approach&quot;&gt;The unified AiApps approach&lt;/h3&gt;
&lt;p&gt;Instead of registering each AI plugin separately, &lt;code&gt;@imgly/plugin-ai-apps-web&lt;/code&gt; provides a single entry point:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; AiApps &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-ai-apps-web&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; FalAiVideo &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-ai-video-generation-web/fal-ai&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; FalAiImage &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-ai-image-generation-web/fal-ai&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; OpenAiImage &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-ai-image-generation-web/open-ai&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Elevenlabs &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-ai-audio-generation-web/elevenlabs&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Anthropic &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-ai-text-generation-web/anthropic&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.&lt;/span&gt;&lt;span&gt;addPlugin&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  AiApps&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    dryRun: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;// Simulate for development — no API calls&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    providers: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      text2text: Anthropic.&lt;/span&gt;&lt;span&gt;AnthropicProvider&lt;/span&gt;&lt;span&gt;({ proxyUrl: &lt;/span&gt;&lt;span&gt;PROXY_URL&lt;/span&gt;&lt;span&gt; }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      text2image: [FalAiImage.&lt;/span&gt;&lt;span&gt;RecraftV3&lt;/span&gt;&lt;span&gt;({ proxyUrl }) &lt;/span&gt;&lt;span&gt;/* ... */&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      image2image: [FalAiImage.&lt;/span&gt;&lt;span&gt;GeminiFlashEdit&lt;/span&gt;&lt;span&gt;({ proxyUrl }) &lt;/span&gt;&lt;span&gt;/* ... */&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      text2video: [FalAiVideo.&lt;/span&gt;&lt;span&gt;MinimaxVideo01Live&lt;/span&gt;&lt;span&gt;({ proxyUrl }) &lt;/span&gt;&lt;span&gt;/* ... */&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      image2video: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        FalAiVideo.&lt;/span&gt;&lt;span&gt;MinimaxVideo01LiveImageToVideo&lt;/span&gt;&lt;span&gt;({ proxyUrl }) &lt;/span&gt;&lt;span&gt;/* ... */&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      text2speech: Elevenlabs.&lt;/span&gt;&lt;span&gt;ElevenMultilingualV2&lt;/span&gt;&lt;span&gt;({ proxyUrl }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      text2sound: Elevenlabs.&lt;/span&gt;&lt;span&gt;ElevenSoundEffects&lt;/span&gt;&lt;span&gt;({ proxyUrl }),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;provider-categories-explained&quot;&gt;Provider categories explained&lt;/h3&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Category&lt;/th&gt;&lt;th&gt;What it does&lt;/th&gt;&lt;th&gt;Models we configured&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;text2text&lt;/code&gt;&lt;/td&gt;&lt;td&gt;AI copywriting — improve text, translate, change tone&lt;/td&gt;&lt;td&gt;Anthropic Claude&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;text2image&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Generate images from text prompts&lt;/td&gt;&lt;td&gt;RecraftV3, IdeogramV3, GPT Image&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;image2image&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Transform existing images with AI&lt;/td&gt;&lt;td&gt;Gemini Flash Edit, GPT Image&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;text2video&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Generate video clips from text descriptions&lt;/td&gt;&lt;td&gt;Minimax Video, Kling Video, Pixverse&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;image2video&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Animate a static image into video&lt;/td&gt;&lt;td&gt;Minimax Video, Kling Video&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;text2speech&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Convert text to spoken audio with voice selection&lt;/td&gt;&lt;td&gt;ElevenLabs Multilingual V2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;text2sound&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Generate sound effects from text&lt;/td&gt;&lt;td&gt;ElevenLabs Sound Effects&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;When multiple providers are configured in an array (like &lt;code&gt;text2image&lt;/code&gt;), the UI automatically shows a provider/model selection dropdown so users can choose which AI model to use.&lt;/p&gt;
&lt;h3 id=&quot;the-proxy-server-requirement&quot;&gt;The proxy server requirement&lt;/h3&gt;
&lt;p&gt;Every provider takes a &lt;code&gt;proxyUrl&lt;/code&gt; parameter. This is critical for production:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Browser  →  Your Proxy Server  →  AI Provider (fal.ai, ElevenLabs, etc.)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                ↑&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          Injects API keys&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          server-side&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Your API keys should never be in client-side code. The proxy server receives requests from CE.SDK, attaches your API key, and forwards to the AI provider. During development, &lt;code&gt;dryRun: true&lt;/code&gt; simulates generation without any API calls.&lt;/p&gt;
&lt;h3 id=&quot;background-removal&quot;&gt;Background removal&lt;/h3&gt;
&lt;p&gt;Background removal is a separate plugin because it runs entirely client-side — no proxy needed:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; BackgroundRemovalPlugin &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@imgly/plugin-background-removal-web&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.&lt;/span&gt;&lt;span&gt;addPlugin&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  BackgroundRemovalPlugin&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ui: { locations: [&lt;/span&gt;&lt;span&gt;&apos;canvasMenu&apos;&lt;/span&gt;&lt;span&gt;] },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This uses ONNX Runtime (WebAssembly + WebGPU) to run an AI segmentation model directly in the browser. The first run downloads ~40MB of model weights, which are then cached. Select any image on the canvas and click “Remove Background” in the context menu.&lt;/p&gt;
&lt;h2 id=&quot;step-6-ui-customization-with-the-component-order-api&quot;&gt;Step 6: UI Customization with the Component Order API&lt;/h2&gt;
&lt;p&gt;CE.SDK’s UI is built from five customizable areas: &lt;strong&gt;Dock&lt;/strong&gt;, &lt;strong&gt;Inspector Bar&lt;/strong&gt;, &lt;strong&gt;Canvas Menu&lt;/strong&gt;, &lt;strong&gt;Navigation Bar&lt;/strong&gt;, and &lt;strong&gt;Canvas Bar&lt;/strong&gt;. The Component Order API lets us insert, remove, and reorder components in each area.&lt;/p&gt;
&lt;h3 id=&quot;adding-the-ai-button-to-the-dock&quot;&gt;Adding the AI button to the dock&lt;/h3&gt;
&lt;p&gt;We want the AI Apps button to be the first thing users see in the dock:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;insertOrderComponent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  { in: &lt;/span&gt;&lt;span&gt;&apos;ly.img.dock&apos;&lt;/span&gt;&lt;span&gt;, position: &lt;/span&gt;&lt;span&gt;&apos;start&apos;&lt;/span&gt;&lt;span&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.ai.apps.dock&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;insertOrderComponent&lt;/code&gt; takes a location specifier and the component(s) to insert. &lt;code&gt;position: &apos;start&apos;&lt;/code&gt; puts it at the top of the dock. Alternative positions include &lt;code&gt;&apos;end&apos;&lt;/code&gt;, a numeric index, or relative placement with &lt;code&gt;before&lt;/code&gt;/&lt;code&gt;after&lt;/code&gt; matchers.&lt;/p&gt;
&lt;h3 id=&quot;ai-options-in-the-canvas-context-menu&quot;&gt;AI options in the canvas context menu&lt;/h3&gt;
&lt;p&gt;When a user selects a text or image block and right-clicks, we want AI options available:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;insertOrderComponent&lt;/span&gt;&lt;span&gt;({ in: &lt;/span&gt;&lt;span&gt;&apos;ly.img.canvas.menu&apos;&lt;/span&gt;&lt;span&gt;, position: &lt;/span&gt;&lt;span&gt;&apos;start&apos;&lt;/span&gt;&lt;span&gt; }, [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.ai.text.canvasMenu&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.ai.image.canvasMenu&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Passing an array inserts multiple components at once.&lt;/p&gt;
&lt;h3 id=&quot;custom-export-button-in-the-navigation-bar&quot;&gt;Custom export button in the navigation bar&lt;/h3&gt;
&lt;p&gt;We add an Export button with a real click handler that triggers MP4 export:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;insertOrderComponent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  { in: &lt;/span&gt;&lt;span&gt;&apos;ly.img.navigation.bar&apos;&lt;/span&gt;&lt;span&gt;, position: &lt;/span&gt;&lt;span&gt;&apos;end&apos;&lt;/span&gt;&lt;span&gt; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    id: &lt;/span&gt;&lt;span&gt;&apos;ly.img.action.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    key: &lt;/span&gt;&lt;span&gt;&apos;export&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    label: &lt;/span&gt;&lt;span&gt;&apos;Export&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    icon: &lt;/span&gt;&lt;span&gt;&apos;@imgly/Download&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    onClick&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      const&lt;/span&gt;&lt;span&gt; engine&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; cesdk.engine;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      const&lt;/span&gt;&lt;span&gt; page&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;findByType&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;page&apos;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      if&lt;/span&gt;&lt;span&gt; (page) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        const&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;exportVideo&lt;/span&gt;&lt;span&gt;(page, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;          mimeType: &lt;/span&gt;&lt;span&gt;&apos;video/mp4&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        const&lt;/span&gt;&lt;span&gt; url&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; URL&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createObjectURL&lt;/span&gt;&lt;span&gt;(blob);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        const&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; document.&lt;/span&gt;&lt;span&gt;createElement&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;a&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        a.href &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; url;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        a.download &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &apos;video.mp4&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        a.&lt;/span&gt;&lt;span&gt;click&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        URL&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;revokeObjectURL&lt;/span&gt;&lt;span&gt;(url);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;exportVideo&lt;/code&gt; method renders every frame of the timeline — compositing video tracks, overlays, text, captions, and audio — into an MP4 blob entirely in the browser.&lt;/p&gt;
&lt;h2 id=&quot;step-7-wiring-generated-audio-into-the-asset-library&quot;&gt;Step 7: Wiring Generated Audio into the Asset Library&lt;/h2&gt;
&lt;p&gt;AI-generated audio (speech and sound effects) is stored in provider-specific history sources. To make this audio browsable alongside regular audio assets, we inject the history source into the audio asset library entry:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; audioEntry&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; cesdk.ui.&lt;/span&gt;&lt;span&gt;getAssetLibraryEntry&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ly.img.audio&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (audioEntry &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; null&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; existingSourceIds&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; Array.&lt;/span&gt;&lt;span&gt;isArray&lt;/span&gt;&lt;span&gt;(audioEntry.sourceIds)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ?&lt;/span&gt;&lt;span&gt; audioEntry.sourceIds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    :&lt;/span&gt;&lt;span&gt; audioEntry.&lt;/span&gt;&lt;span&gt;sourceIds&lt;/span&gt;&lt;span&gt;({});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  cesdk.ui.&lt;/span&gt;&lt;span&gt;updateAssetLibraryEntry&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ly.img.audio&apos;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    sourceIds: [&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;existingSourceIds, &lt;/span&gt;&lt;span&gt;&apos;ly.img.ai.audio-generation.history&apos;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now when users open the Audio panel in the dock, they’ll see their AI-generated audio alongside the sample library.&lt;/p&gt;
&lt;h2 id=&quot;step-8-custom-labels-with-i18n&quot;&gt;Step 8: Custom Labels with i18n&lt;/h2&gt;
&lt;p&gt;CE.SDK’s i18n system lets us customize any UI string. We used it to make the AI prompt fields more inviting:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.i18n.&lt;/span&gt;&lt;span&gt;setTranslations&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  en: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &apos;ly.img.plugin-ai-video-generation-web.fal-ai/minimax/video-01-live.property.prompt&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      &apos;Describe your video...&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    &apos;ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.prompt&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      &apos;Describe your image...&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Translation keys follow the pattern &lt;code&gt;{plugin-id}.{provider-id}.property.{field}&lt;/code&gt;. You can also add multi-language support by including keys for &lt;code&gt;de&lt;/code&gt;, &lt;code&gt;fr&lt;/code&gt;, &lt;code&gt;es&lt;/code&gt;, etc.&lt;/p&gt;
&lt;h2 id=&quot;the-complete-file-structure&quot;&gt;The Complete File Structure&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;capcut-like-editor/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── src/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── App.jsx              # Root — imports VideoEditor + theme CSS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── VideoEditor.jsx      # The entire editor (single component, ~180 lines)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── capcut-theme.css     # CapCut dark theme overrides (~100 lines)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   ├── index.css            # Global reset (margin/padding/overflow)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│   └── main.jsx             # React entry point&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── index.html&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── package.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vite.config.js&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’s it. The entire CapCut-like editor is three files: one React component, one CSS file, and a thin App wrapper.&lt;/p&gt;
&lt;h2 id=&quot;what-we-get-out-of-the-box&quot;&gt;What We Get Out of the Box&lt;/h2&gt;
&lt;p&gt;Because CE.SDK’s video UI is pre-built, we didn’t write any code for these features — they come from &lt;code&gt;createVideoScene()&lt;/code&gt; and the default UI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-track timeline&lt;/strong&gt; with drag-to-reorder, drag-to-resize&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trim and split&lt;/strong&gt; — drag clip edges or use the split tool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Join and arrange&lt;/strong&gt; — drag clips between tracks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transform&lt;/strong&gt; — crop, flip, rotate via the inspector&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Playback controls&lt;/strong&gt; — play, pause, seek, scrub&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text overlays&lt;/strong&gt; — add styled text with the text tool&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stickers and graphics&lt;/strong&gt; — from the asset library&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filters and effects&lt;/strong&gt; — LUT-based color grading&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Undo/redo&lt;/strong&gt; — full history stack&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zoom and pan&lt;/strong&gt; — standard canvas navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The AI plugins add their own UI components (dock buttons, generation panels, context menu items) through the plugin system. We just positioned them where we wanted.&lt;/p&gt;
&lt;h2 id=&quot;going-to-production&quot;&gt;Going to Production&lt;/h2&gt;
&lt;p&gt;To take this from a prototype to production, you need three things:&lt;/p&gt;
&lt;h3 id=&quot;1-license-key&quot;&gt;1. License key&lt;/h3&gt;
&lt;p&gt;Get a free trial key at &lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;https://img.ly/forms/contact-sales&lt;/a&gt; and set it in the config (yes, if you want to ship to production you’ll have to talk to our lovely colleagues in sales):&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; config&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  license: &lt;/span&gt;&lt;span&gt;&apos;YOUR_CESDK_LICENSE_KEY&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-proxy-server&quot;&gt;2. Proxy server&lt;/h3&gt;
&lt;p&gt;Set up a server that forwards AI requests with your API keys:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; PROXY_URL&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; &apos;https://your-server.com/api/ai-proxy&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See the &lt;a href=&quot;https://img.ly/docs/cesdk/react/user-interface/ai-integration/proxy-server-61f901/&quot;&gt;CE.SDK Proxy Server guide&lt;/a&gt; for Express.js and other server examples.&lt;/p&gt;
&lt;h3 id=&quot;3-disable-dry-run&quot;&gt;3. Disable dry run&lt;/h3&gt;
&lt;p&gt;Remove &lt;code&gt;dryRun: true&lt;/code&gt; from the AiApps configuration to enable real AI generation.&lt;/p&gt;
&lt;h2 id=&quot;key-takeaways&quot;&gt;Key Takeaways&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CE.SDK does the heavy lifting.&lt;/strong&gt; The timeline, playback, rendering, and export are all handled by the engine. We wrote zero video processing code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The plugin system is powerful.&lt;/strong&gt; Six AI capabilities were added with a single &lt;code&gt;addPlugin(AiApps({ ... }))&lt;/code&gt; call. Background removal was one more call.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS custom properties make theming painless.&lt;/strong&gt; We matched CapCut’s aesthetic by overriding ~25 CSS variables. No forking, no patching.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Component Order API is the customization backbone.&lt;/strong&gt; &lt;code&gt;insertOrderComponent&lt;/code&gt; with position-based placement is the cleanest pattern for adding UI elements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrap &lt;code&gt;init&lt;/code&gt; in try/catch.&lt;/strong&gt; CE.SDK’s &lt;code&gt;&amp;#x3C;CreativeEditor&gt;&lt;/code&gt; swallows errors silently. This is the single most important debugging tip.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pin your package versions.&lt;/strong&gt; All &lt;code&gt;@imgly/*&lt;/code&gt; plugins must match the &lt;code&gt;@cesdk/cesdk-js&lt;/code&gt; version exactly. A version mismatch (like 1.68 vs 1.69) will cause peer dependency conflicts.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/docs/cesdk/react/prebuilt-solutions/video-editor-9e533a/&quot;&gt;CE.SDK Video Editor Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/docs/cesdk/react/user-interface/ai-integration/integrate-8e906c/&quot;&gt;AI Integration Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/docs/cesdk/react/user-interface/appearance/theming-4b0938/&quot;&gt;Theming Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/docs/cesdk/react/user-interface/customization/quick-start/reorder-components-f6g7h8/&quot;&gt;Rearrange Buttons (Component Order API)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/showcases/cesdk/video-ui/web&quot;&gt;Video Editor Web Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/imgly/cesdk-web-examples&quot;&gt;GitHub Examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><dc:creator>Jan</dc:creator><media:content url="https://blog.img.ly/2026/02/blogcover.png" medium="image"/><category>React</category><category>Video Editor</category><category>CE.SDK</category></item><item><title>Introducing IMG.LY Agent Skills</title><link>https://img.ly/blog/img-ly-agent-skills-web/</link><guid isPermaLink="true">https://img.ly/blog/img-ly-agent-skills-web/</guid><description>Inject CE.SDK expertise into your IDE with Agent Skills—turning AI assistants into autonomous implementation partners, building editors in minutes.</description><pubDate>Mon, 16 Feb 2026 18:54:06 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;
We are moving beyond static documentation. &lt;em&gt;IMG.LY Agent Skills&lt;/em&gt; is a specialized intelligence layer that transforms AI coding assistants (Claude Code, Cursor, Windsurf) into CE.SDK implementation experts. Instead of mapping APIs manually, you now inject our full SDK expertise directly into your IDE and coding agent.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/get-started/agent-skills-f7g8h9/&quot;&gt;Explore Agent Skill Documentation&lt;/a&gt;&lt;br&gt;
→ &lt;a href=&quot;https://github.com/imgly/agent-skills&quot;&gt;Access Agent Skills GitHub Repository&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-quick-start-paradox&quot;&gt;The “Quick Start” Paradox&lt;/h2&gt;
&lt;p&gt;In our recent analysis of client integrations, a consistent pattern emerged: even with a high-performance SDK, the “Time to First Edit” is often delayed by research. Developers spend a significant portion of their initial integration time context-switching between their IDE and documentation, manually mapping complex API hierarchies to their specific framework.&lt;/p&gt;
&lt;p&gt;We figured: You don’t just need better documentation; you need an &lt;strong&gt;expert partner&lt;/strong&gt; who is already inside your codebase.&lt;/p&gt;
&lt;h2 id=&quot;the-solution-imgly-agent-skills-for-web&quot;&gt;The Solution: IMG.LY Agent Skills for Web&lt;/h2&gt;
&lt;p&gt;We are moving beyond static documentation. Today, we are launching &lt;strong&gt;IMG.LY Agent Skills&lt;/strong&gt;, a specialized intelligence layer that transforms AI coding assistants like Claude Code, Cursor, and Gemini into CE.SDK implementation experts.&lt;/p&gt;
&lt;p&gt;Instead of searching for answers, you now give your agent our complete SDK knowledge with a single command.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works-your-autonomous-implementation-partner&quot;&gt;How It Works: Your Autonomous Implementation Partner&lt;/h2&gt;
&lt;p&gt;By injecting versioned, live documentation and framework-specific starter kits directly into your agent’s context window, we’ve created three adaptive paths to launch:&lt;/p&gt;
&lt;h3 id=&quot;1-the-explain-path&quot;&gt;1. The Explain Path&lt;/h3&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/0-explain-skill.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Architecture is complex. The Explain Skill acts as a digital implementation partner that adapts to you. It can provide a technical deep-dive on the export pipeline for a Senior Dev or a high-level summary for a Product Manager—in any language and at any level of detail.&lt;/p&gt;
&lt;h3 id=&quot;2-the-build-path&quot;&gt;&lt;strong&gt;2. The Build Path&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/1-build-skill.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Command your agent to “Add a photo editor to my React app.” The agent autonomously detects your environment, pulls the correct starter kit, and handles the boilerplate. It doesn’t just show you code; it builds the foundation for you.&lt;/p&gt;
&lt;h3 id=&quot;3-the-docs-path&quot;&gt;&lt;strong&gt;3. The Docs Path&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Stop the tab-switching. Your agent retrieves versioned API references offline, keeping your focus entirely within the terminal or IDE.&lt;/p&gt;
&lt;h2 id=&quot;the-shift-to-autonomous-engineering&quot;&gt;The Shift to Autonomous Engineering&lt;/h2&gt;
&lt;p&gt;This release marks a strategic shift for IMG.LY. We believe the next era of software development isn’t about “better documentation,” but about &lt;strong&gt;Portable Expertise&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;By providing that AI with a “skill” rather than a manual, we are empowering teams to move from a multi-month build cycle to a 30-second scaffold.&lt;/p&gt;
&lt;h2 id=&quot;supported-frameworks&quot;&gt;Supported Frameworks&lt;/h2&gt;
&lt;p&gt;The initial Web release supports 10 frameworks out of the box:&lt;br&gt;
&lt;strong&gt;React · Vue.js · Svelte · Angular · Next.js · Nuxt.js · SvelteKit · Electron · Node.js · Vanilla JS&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;get-started&quot;&gt;Get Started&lt;/h2&gt;
&lt;p&gt;Run the command:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; skills&lt;/span&gt;&lt;span&gt; add&lt;/span&gt;&lt;span&gt; imgly/agent-skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;For example&lt;/em&gt;, &lt;strong&gt;Claude Code&lt;/strong&gt; users, can run:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;claude&lt;/span&gt;&lt;span&gt; plugin&lt;/span&gt;&lt;span&gt; marketplace&lt;/span&gt;&lt;span&gt; add&lt;/span&gt;&lt;span&gt; imgly/agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;claude&lt;/span&gt;&lt;span&gt; plugin&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; cesdk@imgly&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/get-started/agent-skills-f7g8h9/&quot;&gt;Explore the full Agent Skill Documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The “editor of your dreams” is now a conversation away.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Join 3,000+ creative professionals who get early access to new features and updates—&lt;/strong&gt;&lt;a href=&quot;https://share.hsforms.com/1IgAOV1wASXGPnFG4ZPLejg1hk3i?ref=img.ly&quot;&gt;&lt;strong&gt;subscribe&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/02/Build-Design-Video-Photo-Editor-With-AI-Agent-sdk-imgly-2.jpg" medium="image"/><category>AI</category><category>CE.SDK</category></item><item><title>Migrating from Canva Connect API to IMG.LY SDK: A Practical Implementation Guide</title><link>https://img.ly/blog/migrating-from-canva-connect-api-to-img-ly-sdk-a-practical-implementation-guide/</link><guid isPermaLink="true">https://img.ly/blog/migrating-from-canva-connect-api-to-img-ly-sdk-a-practical-implementation-guide/</guid><description>A practical step-by-step guide for teams migrating from Canva Connect API to IMG.LY’s CreativeEditor SDK. Learn how to plan your migration, map features, rebuild templates, and transition users with minimal disruption while gaining full control over UI, branding, and infrastructure.</description><pubDate>Wed, 11 Feb 2026 12:13:28 GMT</pubDate><content:encoded>&lt;p&gt;If you’re reading this, you’ve probably hit Canva Connect API’s walls.&lt;/p&gt;
&lt;p&gt;Maybe you need deeper UI customization than Canva allows. Maybe you’re tired of Canva branding in your product. Maybe you need offline editing, server-side automation, or deployment flexibility that Canva’s cloud-only model can’t provide.&lt;/p&gt;
&lt;p&gt;This guide is for teams currently using Canva Connect API who need a clear path to migrate to IMG.LY’s CreativeEditor SDK (CE.SDK). We’ll walk through the decision framework, feature mapping, step-by-step migration process, code comparisons, timeline estimates, and risk mitigation strategies. This isn’t about whether you should migrate—it’s about how to execute the migration with minimal disruption to your product and users. Need more reasons to switch to IMG.LY? Check out our &lt;a href=&quot;https://img.ly/blog/imgly-impact-report/&quot;&gt;customer report with real numbers and feedback about implementation and working with IMG.LY&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We’ve worked with teams who’ve made this transition. Some ran both systems in parallel during cutover. Others migrated user segments gradually. All of them needed a clear implementation plan that addressed technical migration, user experience continuity, and rollback options. That’s what this guide provides.&lt;/p&gt;
&lt;p&gt;If you’re only looking for a &lt;a href=&quot;https://img.ly/blog/img-ly-a-canva-connect-api-alternative-for-white-label-scalable-editing/&quot;&gt;Canva Connect alternative, check out this guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;executive-summary-what-this-migration-involves&quot;&gt;Executive Summary: What This Migration Involves&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Who this guide is for:&lt;/strong&gt; Development teams, product managers, and technical decision-makers currently using Canva Connect API who need more control, customization, or deployment flexibility than Canva provides.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why teams migrate:&lt;/strong&gt; Canva Connect API works well for basic embedded editing with Canva’s branded experience. Teams migrate when they need white-label customization, offline support, server-side rendering, headless automation, or infrastructure control that Canva’s SaaS model doesn’t offer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What changes:&lt;/strong&gt; You’re moving from a cloud-dependent embedded Canva editor to an SDK that runs on your infrastructure. This shift gives you complete control over UI, branding, deployment, and data—but requires more technical integration upfront.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Migration complexity:&lt;/strong&gt; Moderate to significant, depending on how deeply Canva Connect API is integrated into your product. Expect 2-6 weeks for basic implementations, 2-4 months for complex integrations with extensive customization and user migration planning. Many teams start with CE.SDK using the default UI and only customize as needs evolve—you don’t need to build everything from scratch on day one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key benefit:&lt;/strong&gt; Complete control over editing experience, UI customization, branding, deployment options (client-side or server-side), offline capabilities, and data ownership—without vendor lock-in to Canva’s roadmap or infrastructure.&lt;/p&gt;
&lt;h2 id=&quot;when-migration-makes-sense-canva-specific-pain-points&quot;&gt;When Migration Makes Sense (Canva-Specific Pain Points)&lt;/h2&gt;
&lt;p&gt;Not every Canva Connect API user needs to migrate. Here are the specific limitations that typically trigger the decision:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You’ve hit Canva’s customization ceiling.&lt;/strong&gt; Canva Connect API gives you access to Canva’s editor, but you can’t modify the core interface, remove Canva branding completely, or build custom editing workflows. If your product needs deep UI customization or a fully white-labeled experience, Canva’s constraints become blockers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Canva branding conflicts with your brand identity.&lt;/strong&gt; While Canva offers some branding customization, users still know they’re using Canva. If you’re building a product where editing needs to feel native—not like an embedded third-party tool—the Canva branding creates friction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You need offline editing capabilities.&lt;/strong&gt; Canva Connect API requires internet connectivity. If your users need to work offline (on planes, in areas with unreliable connectivity, or in secure environments without external network access), Canva’s cloud-dependent architecture won’t work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server-side automation is critical.&lt;/strong&gt; Canva Connect API focuses on user-driven editing through their interface. If you need headless automation, batch processing, or programmatic generation on your servers without user interaction, you’ll struggle with Canva’s SaaS model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data ownership and infrastructure control matter.&lt;/strong&gt; Canva Connect API runs on Canva’s infrastructure, which means your creative data flows through their systems. If data sovereignty, compliance requirements, or complete infrastructure control are important, Canva’s model introduces dependencies you can’t eliminate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You need deployment flexibility across platforms.&lt;/strong&gt; Canva Connect API is web-focused. If you need native mobile SDKs, desktop applications, or server-side rendering with the same editing engine and consistent output, Canva’s platform coverage has gaps.&lt;/p&gt;
&lt;p&gt;If two or more of these pain points resonate, migration probably makes sense. If Canva Connect API meets your needs and you don’t face these limitations, there’s no compelling reason to migrate.&lt;/p&gt;
&lt;h2 id=&quot;what-youll-gain-from-migration&quot;&gt;What You’ll Gain from Migration&lt;/h2&gt;
&lt;p&gt;Moving from Canva Connect API to IMG.LY CE.SDK unlocks capabilities that Canva’s architecture doesn’t support. Here’s what changes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Complete white-label control.&lt;/strong&gt; Remove all vendor branding, customize every UI component, match your design system precisely, or build entirely custom interfaces using the headless API. Your editing experience looks and feels like a native part of your product, not an embedded third-party tool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Offline editing support.&lt;/strong&gt; After initial SDK load, users can edit, export, and work with templates completely offline. No internet dependency for core editing functionality, which matters for mobile apps, travel scenarios, or secure environments.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server-side rendering and automation.&lt;/strong&gt; Run the same rendering engine on your Node.js servers for programmatic asset generation. Create thousands of personalized variants from templates, integrate with marketing automation platforms, or build batch processing workflows—all without user interaction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full infrastructure control.&lt;/strong&gt; The SDK runs entirely on your infrastructure (client-side in browsers/mobile apps or server-side in your Node.js environment). You control data flow, storage, processing, and compliance. No creative assets or user data flows through IMG.LY’s servers unless you explicitly choose external integrations like Getty Images or Unsplash.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cross-platform consistency.&lt;/strong&gt; Deploy the same editing capabilities across web (JavaScript, React, Vue, Angular, Svelte), native mobile (iOS, Android, React Native, Flutter), desktop (Electron), and server (Node.js). The underlying C++ rendering engine ensures identical output across all platforms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Headless architecture flexibility.&lt;/strong&gt; Use the SDK three ways: full pre-built UI for out-of-the-box editing, custom UI built on the engine APIs, or pure headless mode for programmatic generation without any UI. Mix approaches as needed—visual editor for template creation, headless API for automated generation.&lt;/p&gt;
&lt;h3 id=&quot;success-story-halios-migration&quot;&gt;Success Story: Halio’s Migration&lt;/h3&gt;
&lt;p&gt;Halio, a UK-based SaaS platform helping financial advisors create and manage social media content, faced challenges manually creating customized assets using tools like Canva. The process couldn’t scale to meet growing client demand for consistent, branded content.&lt;/p&gt;
&lt;p&gt;After migrating to IMG.LY CE.SDK, Halio unlocked scalable, automated content generation integrated directly into their platform. Mark Lamb, Co-founder of Halio, explained the impact:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Our users love the fact that they can either just edit an existing template…or go in and build it themselves. It’s super easy.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The flexibility to support both template-driven workflows and custom creation—combined with complete white-label control—gave Halio the editing experience they needed without Canva’s limitations. Read the &lt;a href=&quot;https://img.ly/case-studies/halio&quot;&gt;full Halio case study&lt;/a&gt; to see how they implemented CE.SDK across their platform.&lt;/p&gt;
&lt;h2 id=&quot;pre-migration-checklist&quot;&gt;Pre-Migration Checklist&lt;/h2&gt;
&lt;p&gt;Before starting technical migration work, document your current implementation and plan your approach:&lt;/p&gt;
&lt;h3 id=&quot;audit-current-canva-integration&quot;&gt;Audit Current Canva Integration&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Map all Canva Connect API touchpoints.&lt;/strong&gt; Identify every place in your codebase where you initialize Canva’s editor, load designs, handle exports, or interact with Canva’s API. Document initialization parameters, custom configurations, and integration points.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Document current user workflows.&lt;/strong&gt; How do users currently interact with Canva’s editor? What editing features do they use most? Which capabilities are business-critical vs. nice-to-have? Understanding actual usage patterns helps prioritize migration work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Catalog existing designs and templates.&lt;/strong&gt; How many templates do users have? Are they stored in Canva’s system or yours? Do you programmatically generate designs, or is everything user-created? You’ll need a strategy for migrating or recreating these assets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identify customization gaps.&lt;/strong&gt; What do you wish you could customize in Canva but can’t? What UI elements feel out of place? What features do users request that Canva doesn’t support? These become your migration opportunity list.&lt;/p&gt;
&lt;h3 id=&quot;assess-technical-dependencies&quot;&gt;Assess Technical Dependencies&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Review authentication integration.&lt;/strong&gt; How does your authentication system work with Canva? Do you pass user tokens? How are permissions managed? IMG.LY’s SDK authentication model differs from Canva’s, so you’ll need to adapt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Map asset storage and delivery.&lt;/strong&gt; Where do images, fonts, and media assets currently live? How does Canva access them? CE.SDK can integrate with cloud storage, CDNs, or local asset libraries, but you’ll need to configure these connections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Document export workflows.&lt;/strong&gt; What happens after users finish editing? Where do exported assets go? How are they processed, stored, or delivered? Ensure your export pipeline can handle CE.SDK’s output formats and data structures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evaluate infrastructure requirements.&lt;/strong&gt; If you plan to use server-side rendering for automation, do you have Node.js infrastructure? For GPU-accelerated video rendering, do you have access to Linux servers with GPU support? For mobile apps, do you have native development capabilities?&lt;/p&gt;
&lt;h2 id=&quot;conceptual-model-shift-canva-vs-imgly&quot;&gt;Conceptual Model Shift: Canva vs IMG.LY&lt;/h2&gt;
&lt;p&gt;Understanding the architectural difference between Canva Connect API and CE.SDK helps clarify why certain migration steps are necessary and what new capabilities become possible.&lt;/p&gt;
&lt;h3 id=&quot;canva-connect-api-saas-embedded-editor&quot;&gt;Canva Connect API: SaaS Embedded Editor&lt;/h3&gt;
&lt;p&gt;Canva Connect API gives you an iframe or embed that loads Canva’s editor from their infrastructure. Your application integrates by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Initialization:&lt;/strong&gt; You embed Canva’s interface using their JavaScript SDK&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication:&lt;/strong&gt; Users authenticate through your system, but editing happens in Canva’s environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Editing:&lt;/strong&gt; All editing occurs in Canva’s cloud-hosted editor with their UI and branding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage:&lt;/strong&gt; Designs and assets live in Canva’s infrastructure (with API access)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Export:&lt;/strong&gt; Canva generates exports on their servers and delivers results to you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates:&lt;/strong&gt; Canva controls feature rollout, UI changes, and API evolution&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This model works well for teams who want a production-ready editor without building infrastructure. The tradeoff is limited customization, Canva branding, cloud dependency, and reliance on Canva’s roadmap.&lt;/p&gt;
&lt;h3 id=&quot;imgly-cesdk-client-controlled-sdk&quot;&gt;IMG.LY CE.SDK: Client-Controlled SDK&lt;/h3&gt;
&lt;p&gt;CE.SDK is a software library you integrate directly into your application that runs on your infrastructure. Your application works by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Initialization:&lt;/strong&gt; You instantiate the SDK in your codebase (client-side JavaScript or server-side Node.js)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendering:&lt;/strong&gt; A C++ engine bundled with the SDK handles all rendering locally on user devices or your servers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Editing:&lt;/strong&gt; Users interact with UI you control (pre-built components you customize or fully custom interfaces you build)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Storage:&lt;/strong&gt; All data and assets remain on your infrastructure unless you choose external integrations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Export:&lt;/strong&gt; Rendering happens client-side (in browsers/mobile apps) or server-side (in your Node.js environment)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates:&lt;/strong&gt; You control when to upgrade SDK versions and roll out new features&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This model gives you complete control over experience, branding, infrastructure, and data flow. The tradeoff is more technical integration work upfront and ongoing maintenance responsibility.&lt;/p&gt;
&lt;h3 id=&quot;the-control-spectrum&quot;&gt;The Control Spectrum&lt;/h3&gt;
&lt;p&gt;Here’s what shifts from Canva’s control to your control:&lt;/p&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Aspect&lt;/th&gt;&lt;th&gt;Canva Connect API&lt;/th&gt;&lt;th&gt;IMG.LY CE.SDK&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;UI Customization&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Limited to Canva’s configuration options&lt;/td&gt;&lt;td&gt;Full control—customize everything or build from scratch&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Branding&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Canva branding present (limited white-labeling)&lt;/td&gt;&lt;td&gt;Complete white-label—no IMG.LY branding&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Canva’s cloud infrastructure&lt;/td&gt;&lt;td&gt;Your infrastructure (client or server)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Data Flow&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Through Canva’s systems&lt;/td&gt;&lt;td&gt;Entirely within your systems&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Offline Capability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Requires internet connection&lt;/td&gt;&lt;td&gt;Full offline support after initial load&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Platform Support&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Web-focused&lt;/td&gt;&lt;td&gt;Web, native mobile, desktop, server&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Automation&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;User-driven editing primarily&lt;/td&gt;&lt;td&gt;Equal-weight headless automation&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Feature Updates&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Canva’s timeline&lt;/td&gt;&lt;td&gt;Your upgrade schedule&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;deployment-model-differences&quot;&gt;Deployment Model Differences&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Canva’s deployment:&lt;/strong&gt; Your app → Canva’s editor (cloud) → Canva’s rendering servers → Export delivered to you&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CE.SDK’s deployment (client-side):&lt;/strong&gt; Your app → SDK embedded in your app → Rendering on user’s device → Export in your app&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CE.SDK’s deployment (server-side):&lt;/strong&gt; Your server → SDK running in Node.js → Rendering on your server → Export stored/delivered by you&lt;/p&gt;
&lt;p&gt;This architectural shift is why migration requires more than swapping API endpoints—you’re fundamentally changing where editing and rendering happen.&lt;/p&gt;
&lt;h2 id=&quot;mapping-core-features-migration-cheat-sheet&quot;&gt;Mapping Core Features: Migration Cheat Sheet&lt;/h2&gt;
&lt;p&gt;This table maps common Canva Connect API capabilities to CE.SDK equivalents. Use this as a reference when translating your Canva integration to CE.SDK.&lt;/p&gt;
















































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Canva Connect API Feature&lt;/th&gt;&lt;th&gt;IMG.LY CE.SDK Equivalent&lt;/th&gt;&lt;th&gt;Implementation Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Initialize editor&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;CreativeEditorSDK.create()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Replace Canva’s SDK initialization with CE.SDK setup. Configuration includes license, UI options, and feature flags.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Load design/template&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;engine.scene.loadFromURL()&lt;/code&gt; or &lt;code&gt;cesdk.createDesignScene()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;You can recreate templates in CE.SDK format or import Canva templates directly to CE.SDK.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;User authentication&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Your own auth system + license management&lt;/td&gt;&lt;td&gt;CE.SDK doesn’t handle user auth—implement using your existing authentication. License management happens separately.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Asset library integration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Asset API + custom asset sources&lt;/td&gt;&lt;td&gt;CE.SDK connects to Getty Images, Unsplash, or your own asset storage. Configure asset sources via plugin system.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Custom fonts&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Font API + custom font loading&lt;/td&gt;&lt;td&gt;Upload custom fonts to your CDN/storage and configure CE.SDK to load them. Supports WOFF, WOFF2, TTF formats.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Export to PNG/JPG&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;engine.block.export(blockId, { mimeType: &apos;image/png&apos; }&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Similar export API. You control export quality, resolution, format. Export happens client-side or server-side.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Export to PDF&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;engine.block.export(blockId, { mimeType: &apos;application/pdf&apos; })&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Full PDF support including print-ready PDF/X with CMYK and Pantone color spaces.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Export to video&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;engine.block.exportVideo(pageId, options)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Timeline-based video editing with MP4 export. Supports custom bitrates, framerates, resolution.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Template variables&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Variable API: &lt;code&gt;engine.variable.setString()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Define variables in templates, populate programmatically or through UI. Same template works for UI editing and automation.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Programmatic design creation&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Block API + Scene API&lt;/td&gt;&lt;td&gt;Create designs entirely through code. Full control over elements, layers, composition, properties.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Batch generation/automation&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Server-side Node.js SDK + rendering pipeline&lt;/td&gt;&lt;td&gt;Run CE.SDK in Node.js for headless generation. GPU-accelerated Docker containers available for high-volume rendering.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Real-time collaboration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Not built-in (implement using your own infrastructure)&lt;/td&gt;&lt;td&gt;CE.SDK doesn’t include built-in collaboration. Implement using operational transforms, WebRTC, or your preferred real-time architecture.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Design history/versioning&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Not built-in (implement using your own storage)&lt;/td&gt;&lt;td&gt;CE.SDK doesn’t include versioning. Save scene files at checkpoints using your storage and version control systems.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cloud storage integration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Your own storage + Asset API&lt;/td&gt;&lt;td&gt;CE.SDK doesn’t provide storage—integrate with S3, Azure Blob, Google Cloud Storage, or your existing systems.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;key-api-comparison-common-operations&quot;&gt;Key API Comparison: Common Operations&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Creating a design scene:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Canva Connect API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; canva&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CanvaAPI.&lt;/span&gt;&lt;span&gt;createEditor&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  apiKey: &lt;/span&gt;&lt;span&gt;&apos;YOUR_API_KEY&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  container: &lt;/span&gt;&lt;span&gt;&apos;#editor&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// IMG.LY CE.SDK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; cesdk&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CreativeEditorSDK.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#cesdk-container&apos;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  license: &lt;/span&gt;&lt;span&gt;&apos;YOUR_LICENSE&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  userId: &lt;/span&gt;&lt;span&gt;&apos;user-123&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.&lt;/span&gt;&lt;span&gt;createDesignScene&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Loading a template:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Canva Connect API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;loadDesign&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;canva-design-id&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// IMG.LY CE.SDK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; scene&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; cesdk.engine.scene.&lt;/span&gt;&lt;span&gt;loadFromURL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;https://your-cdn.com/template.scene&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Exporting a design:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// IMG.LY CE.SDK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; page&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; cesdk.engine.scene.&lt;/span&gt;&lt;span&gt;getCurrentPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; cesdk.engine.block.&lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt;(page, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  mimeType: &lt;/span&gt;&lt;span&gt;&apos;image/png&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  targetWidth: &lt;/span&gt;&lt;span&gt;1920&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  targetHeight: &lt;/span&gt;&lt;span&gt;1080&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Setting dynamic content:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Canva Connect API (varies by implementation)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;updateText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;text-element-id&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;New Text Content&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// IMG.LY CE.SDK&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; textBlock&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; cesdk.engine.block.&lt;/span&gt;&lt;span&gt;findByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;headline&apos;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(textBlock, &lt;/span&gt;&lt;span&gt;&apos;text/text&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;New Text Content&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;what-doesnt-directly-translate&quot;&gt;What Doesn’t Directly Translate&lt;/h3&gt;
&lt;p&gt;Some Canva features don’t have direct CE.SDK equivalents. Here’s what requires custom implementation:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real-time collaboration:&lt;/strong&gt; Canva handles multi-user editing natively. CE.SDK doesn’t include collaboration infrastructure—you’ll implement using WebRTC, operational transforms, or your preferred real-time sync approach.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cloud design storage:&lt;/strong&gt; Canva stores designs in their cloud. CE.SDK doesn’t provide storage—integrate with your existing storage systems (database, S3, etc.) to save and load scene files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Version history:&lt;/strong&gt; Canva tracks design versions automatically. CE.SDK doesn’t include versioning—implement by saving scene snapshots at intervals and storing them with your version control approach.&lt;/p&gt;
&lt;h2 id=&quot;migration-path-step-by-step&quot;&gt;Migration Path: Step-by-Step&lt;/h2&gt;
&lt;p&gt;This section provides a phased approach to migration that minimizes risk and maintains product stability.&lt;/p&gt;
&lt;h3 id=&quot;phase-1-setup-and-proof-of-concept&quot;&gt;Phase 1: Setup and Proof of Concept&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Get CE.SDK running in a test environment and validate it meets your technical requirements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Get access and license&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sign up for a &lt;a href=&quot;https://img.ly/forms/free-trial&quot;&gt;free 30-day trial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Receive license key for development environment&lt;/li&gt;
&lt;li&gt;Review licensing model and plan for production deployment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Setup development environment&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install CE.SDK via npm: &lt;code&gt;npm install @cesdk/cesdk-js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Follow &lt;a href=&quot;https://img.ly/docs/cesdk/&quot;&gt;quickstart documentation&lt;/a&gt; for your platform (React, Vue, vanilla JS, etc.)&lt;/li&gt;
&lt;li&gt;Initialize basic editor instance in test environment&lt;/li&gt;
&lt;li&gt;Confirm SDK loads and renders correctly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Test core capabilities&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a simple design using the visual editor&lt;/li&gt;
&lt;li&gt;Export to PNG/JPG/PDF&lt;/li&gt;
&lt;li&gt;Load a template and modify elements programmatically&lt;/li&gt;
&lt;li&gt;Validate output quality matches requirements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Evaluate gaps&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Compare Canva features your product uses vs. CE.SDK capabilities&lt;/li&gt;
&lt;li&gt;Identify features requiring custom implementation&lt;/li&gt;
&lt;li&gt;Document technical blockers or concerns&lt;/li&gt;
&lt;li&gt;Confirm CE.SDK meets your use case before deeper investment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Deliverable:&lt;/strong&gt; Working proof-of-concept demonstrating CE.SDK handles your core editing workflows.&lt;/p&gt;
&lt;h3 id=&quot;phase-2-template-recreation&quot;&gt;Phase 2: Template Recreation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Recreate your most critical Canva templates in CE.SDK format.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Prioritize templates&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List all Canva templates by usage frequency&lt;/li&gt;
&lt;li&gt;Identify top 5-10 templates accounting for 80% of usage&lt;/li&gt;
&lt;li&gt;Start with highest-value templates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Recreate or import templates in CE.SDK&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use CE.SDK’s visual editor to rebuild templates or plugin to import&lt;/li&gt;
&lt;li&gt;Define variables for dynamic content (text placeholders, image slots)&lt;/li&gt;
&lt;li&gt;Set role-based permissions (what’s editable, what’s locked)&lt;/li&gt;
&lt;li&gt;Test template behavior with sample data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Validate template outputs&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Export samples using CE.SDK&lt;/li&gt;
&lt;li&gt;Compare visually to Canva exports&lt;/li&gt;
&lt;li&gt;Verify templates work with real content variations&lt;/li&gt;
&lt;li&gt;Document any visual differences or limitations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Setup template storage&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Save templates as &lt;code&gt;.scene&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;Store in version-controlled repository or CDN&lt;/li&gt;
&lt;li&gt;Setup template loading infrastructure in your application&lt;/li&gt;
&lt;li&gt;Create template management system (if needed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Deliverable:&lt;/strong&gt; Core templates recreated in CE.SDK format and accessible in your test environment.&lt;/p&gt;
&lt;h3 id=&quot;phase-3-integration-development&quot;&gt;Phase 3: Integration Development&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Build CE.SDK integration into your application with feature parity to current Canva implementation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Replace editor initialization&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Swap Canva SDK initialization with CE.SDK setup&lt;/li&gt;
&lt;li&gt;Configure CE.SDK with your license, user data, and settings&lt;/li&gt;
&lt;li&gt;Adapt authentication flow to work with CE.SDK&lt;/li&gt;
&lt;li&gt;Ensure editor loads in your application context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Migrate asset integrations&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connect CE.SDK to your asset storage (images, fonts, media)&lt;/li&gt;
&lt;li&gt;Configure asset libraries using Asset API&lt;/li&gt;
&lt;li&gt;Setup custom asset sources if needed&lt;/li&gt;
&lt;li&gt;Test asset loading and performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Rebuild export workflows&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replace Canva export calls with CE.SDK export API&lt;/li&gt;
&lt;li&gt;Adapt export format handling (PNG, PDF, video)&lt;/li&gt;
&lt;li&gt;Update downstream systems that consume exported assets&lt;/li&gt;
&lt;li&gt;Test export quality, performance, file sizes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Implement UI customization&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Customize CE.SDK’s default UI to match your design system&lt;/li&gt;
&lt;li&gt;Apply white-label theming (colors, typography, icons)&lt;/li&gt;
&lt;li&gt;Remove any IMG.LY branding&lt;/li&gt;
&lt;li&gt;Test UI responsiveness and accessibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 5: Add server-side automation (if needed)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setup Node.js environment for headless rendering&lt;/li&gt;
&lt;li&gt;Implement batch generation workflows&lt;/li&gt;
&lt;li&gt;Configure GPU acceleration for video (if applicable)&lt;/li&gt;
&lt;li&gt;Test automation pipeline performance and reliability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 6: Build migration tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create utilities to help users transition from Canva designs&lt;/li&gt;
&lt;li&gt;Build import tools if you can extract data from Canva exports&lt;/li&gt;
&lt;li&gt;Develop user communication and guidance materials&lt;/li&gt;
&lt;li&gt;Prepare support documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Deliverable:&lt;/strong&gt; Fully functional CE.SDK integration running in staging environment with feature parity to Canva implementation.&lt;/p&gt;
&lt;h2 id=&quot;handling-common-migration-concerns&quot;&gt;Handling Common Migration Concerns&lt;/h2&gt;
&lt;p&gt;Teams migrating from Canva Connect API often face similar challenges. Here’s how to address the most common concerns:&lt;/p&gt;
&lt;h3 id=&quot;can-we-migrate-existing-canva-designs&quot;&gt;“Can we migrate existing Canva designs?”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Yes, through a designated upcoming plugin.&lt;/p&gt;
&lt;h3 id=&quot;what-if-users-prefer-canvas-interface&quot;&gt;”What if users prefer Canva’s interface?”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; CE.SDK’s UI is highly customizable—you can replicate Canva’s UX patterns if desired.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Practical approach:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Customize CE.SDK’s interface to match familiar patterns&lt;/li&gt;
&lt;li&gt;If specific Canva features drove user preference, implement equivalents&lt;/li&gt;
&lt;li&gt;Gather user feedback early (during beta testing) to identify friction points&lt;/li&gt;
&lt;li&gt;Focus messaging on control and ownership benefits rather than forcing change&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;how-do-we-minimize-workflow-disruption&quot;&gt;”How do we minimize workflow disruption?”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Phased rollout with parallel systems reduces disruption.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Practical approach:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run Canva and CE.SDK side-by-side during transition&lt;/li&gt;
&lt;li&gt;Let users opt-in to new editor before forcing switch&lt;/li&gt;
&lt;li&gt;Migrate user segments gradually (internal users first, then beta customers, then all users)&lt;/li&gt;
&lt;li&gt;Maintain Canva integration as fallback during initial rollout&lt;/li&gt;
&lt;li&gt;Plan rollout during low-traffic periods&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;what-about-performance-differences&quot;&gt;”What about performance differences?”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; CE.SDK runs locally, so performance characteristics differ from cloud-based Canva.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Practical approach:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Client-side rendering means performance depends on user devices (generally fast on modern hardware)&lt;/li&gt;
&lt;li&gt;Server-side rendering gives you full control over performance (scale infrastructure as needed)&lt;/li&gt;
&lt;li&gt;Test across your actual user device distribution&lt;/li&gt;
&lt;li&gt;Optimize asset delivery (use CDN for fonts, images, templates)&lt;/li&gt;
&lt;li&gt;For complex video editing, consider GPU-accelerated server-side rendering&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;how-do-we-handle-authentication-changes&quot;&gt;”How do we handle authentication changes?”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; CE.SDK doesn’t manage authentication—integrate with your existing auth system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Practical approach:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CE.SDK license validation is separate from user authentication&lt;/li&gt;
&lt;li&gt;Use your existing authentication system (JWT, OAuth, session-based)&lt;/li&gt;
&lt;li&gt;Pass authenticated user context to CE.SDK during initialization&lt;/li&gt;
&lt;li&gt;Implement access control and permissions at application level&lt;/li&gt;
&lt;li&gt;No changes required to your user authentication flow&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;what-if-we-need-features-cesdk-doesnt-have&quot;&gt;”What if we need features CE.SDK doesn’t have?”&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; CE.SDK’s plugin architecture and headless API let you build custom features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Practical approach:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extend functionality using CE.SDK’s plugin system&lt;/li&gt;
&lt;li&gt;Build custom UI components using the headless engine API&lt;/li&gt;
&lt;li&gt;Integrate third-party services via Asset API and custom plugins&lt;/li&gt;
&lt;li&gt;Work with IMG.LY’s team for complex enterprise requirements&lt;/li&gt;
&lt;li&gt;Evaluate whether missing features are actually used—often they’re not critical&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;unlocked-capabilities-whats-now-possible&quot;&gt;Unlocked Capabilities: What’s Now Possible&lt;/h2&gt;
&lt;p&gt;Once you’ve migrated from Canva Connect API to CE.SDK, you gain capabilities that Canva’s architecture couldn’t support. Here’s what becomes possible:&lt;/p&gt;
&lt;h3 id=&quot;complete-ui-control&quot;&gt;Complete UI Control&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Build editing experiences that feel native to your product.&lt;/strong&gt; Customize every component, button, panel, and interaction to match your design system. Or go further—use CE.SDK’s headless API to build entirely custom interfaces that don’t look anything like a traditional editor.&lt;/p&gt;
&lt;p&gt;Example: An e-commerce platform replaces Canva’s generic editor with a product customization flow integrated directly into the product page. Users configure product options (colors, sizes, personalization) using custom UI components, while CE.SDK handles rendering and export behind the scenes.&lt;/p&gt;
&lt;h3 id=&quot;server-side-automation&quot;&gt;Server-Side Automation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Generate creative assets programmatically without user interaction.&lt;/strong&gt; Run CE.SDK in Node.js on your servers to automate design production at scale. Create thousands of personalized banners from product data, generate dynamic video campaigns, or build batch processing pipelines.&lt;/p&gt;
&lt;p&gt;Example: A marketing platform automatically generates A/B testing variants for ad creatives by running CE.SDK server-side. When a marketer creates a campaign, the system instantly produces 50 design variations (different headlines, images, CTAs) for testing—no manual design work required.&lt;/p&gt;
&lt;h3 id=&quot;offline-editing&quot;&gt;Offline Editing&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Let users work without internet connectivity.&lt;/strong&gt; After initial SDK load, all editing, template manipulation, and export functionality works offline. Critical for mobile apps, travel scenarios, or environments with restricted network access.&lt;/p&gt;
&lt;p&gt;Example: A field service application lets technicians create incident reports with photos and annotations while working in areas without cell coverage. CE.SDK handles all editing and export offline, syncing when connectivity returns.&lt;/p&gt;
&lt;h3 id=&quot;cross-platform-deployment&quot;&gt;Cross-Platform Deployment&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Deploy identical editing capabilities across web, native mobile, and desktop.&lt;/strong&gt; Use the same templates, same rendering engine, and same output quality across all platforms. No need to build separate editing tools for each platform.&lt;/p&gt;
&lt;p&gt;Example: A social media management tool provides consistent editing across their web dashboard (React), iOS app (native Swift), and desktop application (Electron). Templates created in the web version work identically in mobile and desktop, and exports look the same everywhere.&lt;/p&gt;
&lt;h3 id=&quot;infrastructure-and-data-control&quot;&gt;Infrastructure and Data Control&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Keep all creative data on your infrastructure.&lt;/strong&gt; No external dependencies, no data flowing through third-party systems (unless you choose external integrations like stock image libraries). Full control for compliance, security, and data sovereignty requirements.&lt;/p&gt;
&lt;p&gt;Example: A healthcare company builds patient education materials with custom templates. All patient data and generated documents stay within their HIPAA-compliant infrastructure—nothing touches external systems.&lt;/p&gt;
&lt;h3 id=&quot;flexible-deployment-models&quot;&gt;Flexible Deployment Models&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Choose where rendering happens based on your needs.&lt;/strong&gt; Render client-side for user-driven editing (no server costs, scales infinitely with users). Render server-side for automation and batch processing (control quality, performance, and infrastructure).&lt;/p&gt;
&lt;p&gt;Example: A web-to-print company uses client-side rendering when customers design products interactively, then uses server-side rendering to generate high-resolution print-ready PDFs for production—different rendering strategies for different workflows, same SDK.&lt;/p&gt;
&lt;p&gt;For architectural patterns and infrastructure design when implementing these capabilities, see our guide on &lt;a href=&quot;https://img.ly/blog/editor-or-api-why-modern-creative-automation-needs-both/&quot;&gt;creative automation infrastructure&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;realistic-migration-examples&quot;&gt;Realistic Migration Examples&lt;/h2&gt;
&lt;p&gt;Here are concrete code comparisons showing how common Canva Connect API patterns translate to CE.SDK.&lt;/p&gt;
&lt;h3 id=&quot;example-1-simple-design-creation&quot;&gt;Example 1: Simple Design Creation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Canva Connect API approach:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; { CanvaAPI } &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@canva/connect-api&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; editor&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CanvaAPI.&lt;/span&gt;&lt;span&gt;createEditor&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  apiKey: process.env.&lt;/span&gt;&lt;span&gt;CANVA_API_KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  container: &lt;/span&gt;&lt;span&gt;&apos;#editor-container&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  publishLabel: &lt;/span&gt;&lt;span&gt;&apos;Export&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; editor.&lt;/span&gt;&lt;span&gt;ready&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Load a template&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; editor.&lt;/span&gt;&lt;span&gt;loadDesign&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;AAF_template_id&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// User edits in Canva&apos;s interface...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Handle export&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;editor.&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;publish&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;opts&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; exported&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; editor.&lt;/span&gt;&lt;span&gt;exportDesign&lt;/span&gt;&lt;span&gt;({ format: &lt;/span&gt;&lt;span&gt;&apos;png&apos;&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Handle exported.url&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;CE.SDK equivalent:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CreativeEditorSDK &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@cesdk/cesdk-js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; cesdk&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CreativeEditorSDK.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#cesdk-container&apos;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  license: process.env.&lt;/span&gt;&lt;span&gt;CESDK_LICENSE&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  userId: &lt;/span&gt;&lt;span&gt;&apos;user-123&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Register export action&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.actions.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;exportDesign&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;blobs&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Handle exported blobs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  await&lt;/span&gt;&lt;span&gt; uploadToStorage&lt;/span&gt;&lt;span&gt;(blobs[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&apos;exported-design.png&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Load a template&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; cesdk.engine.scene.&lt;/span&gt;&lt;span&gt;loadFromURL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;https://cdn.example.com/templates/banner.scene&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// User edits in customized interface...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Or handle export programmatically&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; page&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; cesdk.engine.scene.&lt;/span&gt;&lt;span&gt;getCurrentPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; cesdk.engine.block.&lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt;(page, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  mimeType: &lt;/span&gt;&lt;span&gt;&apos;image/png&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  targetWidth: &lt;/span&gt;&lt;span&gt;1920&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  targetHeight: &lt;/span&gt;&lt;span&gt;1080&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  jpegQuality: &lt;/span&gt;&lt;span&gt;0.9&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Upload or save blob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; uploadToStorage&lt;/span&gt;&lt;span&gt;(blob, &lt;/span&gt;&lt;span&gt;&apos;exported-design.png&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Key differences:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CE.SDK requires explicit scene loading (from URL or creation)&lt;/li&gt;
&lt;li&gt;Export is manual (you control where files go)&lt;/li&gt;
&lt;li&gt;More configuration options for export quality and resolution&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;example-2-template-based-generation-with-dynamic-content&quot;&gt;Example 2: Template-Based Generation with Dynamic Content&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Canva Connect API approach:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Canva&apos;s template autofill (if available in your plan)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;autofill&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  templateId: &lt;/span&gt;&lt;span&gt;&apos;template_id&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  data: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    headline: &lt;/span&gt;&lt;span&gt;&apos;Summer Sale&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    description: &lt;/span&gt;&lt;span&gt;&apos;Save up to 50% on selected items&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    image_url: &lt;/span&gt;&lt;span&gt;&apos;https://example.com/image.jpg&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; exported&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;exportDesign&lt;/span&gt;&lt;span&gt;({ format: &lt;/span&gt;&lt;span&gt;&apos;png&apos;&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;CE.SDK equivalent:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Set dynamic text content&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(headlineBlock, &lt;/span&gt;&lt;span&gt;&apos;text/text&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;Summer Sale&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  descriptionBlock,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;text/text&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;Save up to 50% on selected items&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Replace image by updating the fill&apos;s image URI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; imageFill&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;getFill&lt;/span&gt;&lt;span&gt;(imageBlock);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  imageFill,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;fill/image/imageFileURI&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;https://example.com/image.jpg&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Export&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; pageId&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.scene.&lt;/span&gt;&lt;span&gt;getCurrentPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt;(pageId, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  mimeType: &lt;/span&gt;&lt;span&gt;&apos;image/png&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  targetWidth: &lt;/span&gt;&lt;span&gt;1200&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  targetHeight: &lt;/span&gt;&lt;span&gt;628&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Key differences:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CE.SDK runs headlessly on your servers (no user interface)&lt;/li&gt;
&lt;li&gt;More granular control over element manipulation&lt;/li&gt;
&lt;li&gt;You manage storage and delivery of exported assets&lt;/li&gt;
&lt;li&gt;Can batch-process hundreds/thousands of variants in loops&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;example-3-custom-ui-integration&quot;&gt;Example 3: Custom UI Integration&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Canva Connect API approach:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Limited UI customization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; editor&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CanvaAPI.&lt;/span&gt;&lt;span&gt;createEditor&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  apiKey: process.env.&lt;/span&gt;&lt;span&gt;CANVA_API_KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  container: &lt;/span&gt;&lt;span&gt;&apos;#editor&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  brandingTheme: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    primaryColor: &lt;/span&gt;&lt;span&gt;&apos;#4A90E2&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    logo: &lt;/span&gt;&lt;span&gt;&apos;https://example.com/logo.png&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Canva&apos;s UI with minimal theming applied&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;CE.SDK equivalent (full control):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CreativeEditorSDK &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@cesdk/cesdk-js&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; cesdk&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CreativeEditorSDK.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#cesdk-container&apos;&lt;/span&gt;&lt;span&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  license: process.env.&lt;/span&gt;&lt;span&gt;CESDK_LICENSE&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  userId: &lt;/span&gt;&lt;span&gt;&apos;user-123&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Configure theme (light or dark mode)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;setTheme&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;dark&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Configure UI features using the Feature API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.feature.&lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ly.img.library.panel&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.feature.&lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ly.img.settings&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.feature.&lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ly.img.navigation.bar&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.feature.&lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ly.img.navigation.actions&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Configure navigation bar using the Order API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;setNavigationBarOrder&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.back.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.undoRedo.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.spacer&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.title.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.spacer&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.zoom.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.preview.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  &apos;ly.img.exportImage.navigationBar&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;]);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Configure panel positioning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.ui.&lt;/span&gt;&lt;span&gt;setPanelPosition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;//ly.img.panel/assetLibrary&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;left&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Register custom export action&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cesdk.actions.&lt;/span&gt;&lt;span&gt;register&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;exportDesign&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;blobs&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Custom export handling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  await&lt;/span&gt;&lt;span&gt; uploadToStorage&lt;/span&gt;&lt;span&gt;(blobs[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;&apos;design.png&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Or build completely custom UI using headless API&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; engine&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; cesdk.engine;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Custom toolbar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;document.&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#custom-text-btn&apos;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;click&apos;&lt;/span&gt;&lt;span&gt;, () &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; page&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.scene.&lt;/span&gt;&lt;span&gt;getCurrentPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; textBlock&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;text&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(textBlock, &lt;/span&gt;&lt;span&gt;&apos;text/text&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;New Text&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  engine.block.&lt;/span&gt;&lt;span&gt;appendChild&lt;/span&gt;&lt;span&gt;(page, textBlock);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;document&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  .&lt;/span&gt;&lt;span&gt;querySelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;#custom-export-btn&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  .&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;click&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; () &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    const&lt;/span&gt;&lt;span&gt; page&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.scene.&lt;/span&gt;&lt;span&gt;getCurrentPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    const&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt;(page, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      mimeType: &lt;/span&gt;&lt;span&gt;&apos;image/png&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    // Custom export handling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  });&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Key differences:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CE.SDK offers deep UI customization through configuration&lt;/li&gt;
&lt;li&gt;Can build entirely custom interfaces using headless engine API&lt;/li&gt;
&lt;li&gt;Complete control over branding, layout, and interactions&lt;/li&gt;
&lt;li&gt;No external branding or forced UI patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;example-4-batch-asset-generation&quot;&gt;Example 4: Batch Asset Generation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Canva Connect API approach:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Would require multiple API calls and user interaction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; product&lt;/span&gt;&lt;span&gt; of&lt;/span&gt;&lt;span&gt; products) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;loadDesign&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;template_id&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;autofill&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    product_name: product.name,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    price: product.price,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    image: product.imageUrl,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; exported&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; canva.&lt;/span&gt;&lt;span&gt;exportDesign&lt;/span&gt;&lt;span&gt;({ format: &lt;/span&gt;&lt;span&gt;&apos;png&apos;&lt;/span&gt;&lt;span&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Handle exported design&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;CE.SDK equivalent (optimized for batch):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; CreativeEngine &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &apos;@cesdk/node&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; engine&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; CreativeEngine.&lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  license: process.env.&lt;/span&gt;&lt;span&gt;CESDK_LICENSE&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Load template once&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; templateURL&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; &apos;https://cdn.example.com/templates/product-card.scene&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;// Process batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; product&lt;/span&gt;&lt;span&gt; of&lt;/span&gt;&lt;span&gt; products) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Fresh scene for each product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  await&lt;/span&gt;&lt;span&gt; engine.scene.&lt;/span&gt;&lt;span&gt;loadFromURL&lt;/span&gt;&lt;span&gt;(templateURL);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Find and populate blocks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; nameBlock&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;findByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;product_name&apos;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; priceBlock&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;findByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;price&apos;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; imageBlock&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;findByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;product_image&apos;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(nameBlock, &lt;/span&gt;&lt;span&gt;&apos;text/text&apos;&lt;/span&gt;&lt;span&gt;, product.name);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(priceBlock, &lt;/span&gt;&lt;span&gt;&apos;text/text&apos;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;`$${&lt;/span&gt;&lt;span&gt;product&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;price&lt;/span&gt;&lt;span&gt;}`&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Replace image by updating the fill&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; imageFill&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;getFill&lt;/span&gt;&lt;span&gt;(imageBlock);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  engine.block.&lt;/span&gt;&lt;span&gt;setString&lt;/span&gt;&lt;span&gt;(imageFill, &lt;/span&gt;&lt;span&gt;&apos;fill/image/imageFileURI&apos;&lt;/span&gt;&lt;span&gt;, product.imageUrl);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  // Export&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; page&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; engine.scene.&lt;/span&gt;&lt;span&gt;getCurrentPage&lt;/span&gt;&lt;span&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  const&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt; =&lt;/span&gt;&lt;span&gt; await&lt;/span&gt;&lt;span&gt; engine.block.&lt;/span&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt;(page, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    mimeType: &lt;/span&gt;&lt;span&gt;&apos;image/png&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  });&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Key differences:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CE.SDK runs efficiently on servers for batch workloads&lt;/li&gt;
&lt;li&gt;No user interaction required—fully automated&lt;/li&gt;
&lt;li&gt;Can scale horizontally (multiple rendering nodes)&lt;/li&gt;
&lt;li&gt;GPU acceleration available for video and complex renders&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;final-recommendation-and-next-steps&quot;&gt;Final Recommendation and Next Steps&lt;/h2&gt;
&lt;p&gt;Migrating from Canva Connect API to CE.SDK requires upfront effort, but unlocks capabilities Canva’s architecture can’t provide: complete white-label control, offline editing, server-side automation, cross-platform consistency, and infrastructure ownership. For teams hitting Canva’s customization limits, needing deeper product integration, or requiring deployment flexibility, migration makes strategic sense.&lt;/p&gt;
&lt;p&gt;The technical migration is straightforward—CE.SDK’s APIs are well-documented, the SDK is production-proven (powering 500M+ creations monthly), and our team provides migration support. The real effort is template recreation and user transition planning. Teams succeed when they approach migration as a phased rollout, maintain Canva as fallback during transition, and communicate changes clearly to users.&lt;/p&gt;
&lt;h3 id=&quot;recommended-migration-approach&quot;&gt;Recommended Migration Approach&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;If you’re ready to start migration:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/forms/free-trial&quot;&gt;&lt;strong&gt;Sign up for a free 30-day trial&lt;/strong&gt;&lt;/a&gt; to access CE.SDK and begin proof-of-concept work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review&lt;/strong&gt; &lt;a href=&quot;https://img.ly/docs/cesdk&quot;&gt;&lt;strong&gt;CE.SDK documentation&lt;/strong&gt;&lt;/a&gt; for your platform (React, Vue, native mobile, Node.js) to understand integration requirements.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;&lt;strong&gt;Contact our team&lt;/strong&gt;&lt;/a&gt; to discuss your specific migration scenario. We’ll help you plan approach, estimate timeline, and address technical questions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Start with highest-value templates&lt;/strong&gt; and validate they work in CE.SDK before committing to full migration.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;If you’re still evaluating whether to migrate:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review &lt;a href=&quot;https://img.ly/blog/strategic-guide-to-creative-editing-when-to-build-when-to-buy/&quot;&gt;Why building with IMG.LY makes sense&lt;/a&gt; for broader context on vendor comparison, cost analysis, and customer outcomes.&lt;/li&gt;
&lt;li&gt;Check out &lt;a href=&quot;https://img.ly/blog/img-ly-a-canva-connect-api-alternative-for-white-label-scalable-editing/&quot;&gt;full comparison between IMG.LY and Canva Connect API&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Questions about your specific migration scenario?&lt;/strong&gt; &lt;a href=&quot;https://img.ly/forms/contact-sales&quot;&gt;Talk to our team&lt;/a&gt;. We’ll help you evaluate whether migration makes sense for your use case, provide timeline estimates, and answer technical questions specific to your integration.&lt;/p&gt;
&lt;p&gt;Hundreds of teams have migrated from various editing solutions to CE.SDK and successfully deployed in production. With proper planning, phased rollout, and clear user communication, migration minimizes disruption while unlocking capabilities that transform what your product can do.&lt;/p&gt;
&lt;h2 id=&quot;frequently-asked-questions-about-migrating-from-canva-to-cesdk&quot;&gt;Frequently Asked Questions About Migrating from Canva to CE.SDK&lt;/h2&gt;
&lt;h3 id=&quot;can-i-import-my-existing-canva-designs-into-cesdk&quot;&gt;&lt;strong&gt;Can I import my existing Canva designs into CE.SDK?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Yes, with an upcoming Canva template importer you will be able to import templates directly into IMG.LY SDK.&lt;/p&gt;
&lt;h3 id=&quot;how-long-does-migration-typically-take&quot;&gt;&lt;strong&gt;How long does migration typically take?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Migration timelines vary by complexity: simple integrations take 2–4 weeks, moderate integrations take 6–10 weeks, and complex enterprise deployments take 3–4 months. The duration depends on factors like template library size, customization requirements, user base size, and whether you need server-side automation. Teams starting with CE.SDK’s default UI and basic customization can migrate faster than those building fully custom interfaces.&lt;/p&gt;
&lt;h3 id=&quot;does-cesdk-cost-more-or-less-than-canva-connect-api&quot;&gt;&lt;strong&gt;Does CE.SDK cost more or less than Canva Connect API?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Pricing models differ significantly. Canva Connect API uses subscription-based pricing, while CE.SDK uses usage-based enterprise licensing that scales with active editors, export volume, and platforms. Total cost depends on your usage patterns, infrastructure costs if using server-side rendering, and development investment. Many teams find CE.SDK more cost-effective at scale due to infrastructure control and no ongoing vendor subscription fees.&lt;/p&gt;
&lt;h3 id=&quot;do-i-need-to-rebuild-my-entire-ui-from-scratch&quot;&gt;&lt;strong&gt;Do I need to rebuild my entire UI from scratch?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;No. CE.SDK provides a production-ready default UI that you can use immediately with minimal customization. Many teams start with the default UI and only customize specific components as needs evolve. You can progressively enhance the interface by applying theming and branding first, then customizing individual panels, and eventually building fully custom UI only if needed. Building from scratch using the headless API is optional and typically reserved for teams with unique workflow requirements.&lt;/p&gt;
&lt;h3 id=&quot;can-cesdk-work-offline-or-does-it-require-internet-like-canva&quot;&gt;&lt;strong&gt;Can CE.SDK work offline, or does it require internet like Canva?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Yes, CE.SDK fully supports offline editing after the initial SDK load. All editing, template manipulation, and export functionality works without internet connectivity. This is critical for mobile apps, travel scenarios, secure environments, or areas with unreliable connectivity. Canva Connect API requires constant internet connection, making offline editing impossible.&lt;/p&gt;
&lt;h3 id=&quot;how-does-server-side-rendering-work-with-cesdk-compared-to-canva&quot;&gt;&lt;strong&gt;How does server-side rendering work with CE.SDK compared to Canva?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;CE.SDK runs natively in Node.js environments for headless, programmatic generation with no user interface required. You control the rendering infrastructure including cloud servers, containers, and GPU acceleration. This enables batch processing, automated variant generation, and high-volume production workflows that Canva’s SaaS model doesn’t support. Server-side rendering uses the same templates as the visual editor, ensuring output consistency.&lt;/p&gt;
&lt;h3 id=&quot;is-there-a-free-trial-to-test-cesdk-before-committing-to-migration&quot;&gt;&lt;strong&gt;Is there a free trial to test CE.SDK before committing to migration?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Yes. IMG.LY offers a free 30-day trial with full access to CE.SDK across web, mobile, and server platforms. Use the trial to validate capabilities, test proof-of-concept integrations, recreate templates, and confirm CE.SDK meets your technical requirements before full migration.&lt;/p&gt;
&lt;h3 id=&quot;what-support-does-imgly-provide-during-migration&quot;&gt;&lt;strong&gt;What support does IMG.LY provide during migration?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;IMG.LY provides migration guidance, technical support, architectural consultation, and code review. Enterprise customers receive dedicated support channels, migration planning sessions, and ongoing technical account management to help ensure a smooth transition.&lt;/p&gt;
</content:encoded><dc:creator>Klaudia</dc:creator><media:content url="https://blog.img.ly/2026/01/migrating-from-canva-api-to-creative-sdk-imgly-1.jpg" medium="image"/><category>Insights</category></item><item><title>CE.SDK v1.68 Release Notes</title><link>https://img.ly/blog/creative-editor-sdk-v-1-68-0-release-notes/</link><guid isPermaLink="true">https://img.ly/blog/creative-editor-sdk-v-1-68-0-release-notes/</guid><description>Speed up development and design: New Docs MCP Server support, intelligent RTL text, and precise animation controls.</description><pubDate>Mon, 09 Feb 2026 16:51:58 GMT</pubDate><content:encoded>&lt;p&gt;This release focuses on engine refinements and developer velocity. We are introducing the CE.SDK Docs MCP Server to bring our documentation directly into your AI coding workflows.&lt;/p&gt;
&lt;p&gt;Let’s dive in!&lt;/p&gt;
&lt;h2 id=&quot;enhanced-developer-experience&quot;&gt;Enhanced Developer Experience&lt;/h2&gt;
&lt;h3 id=&quot;code-faster-with-the-cesdk-docs-mcp-server&quot;&gt;Code Faster with the CE.SDK Docs MCP Server&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1480px) 1480px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1480&quot; height=&quot;643&quot; src=&quot;https://img.ly/_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_1v9CSu.webp&quot; srcset=&quot;/_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_1fCw08.webp 640w, /_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_2q2bSf.webp 750w, /_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_ZmHztb.webp 828w, /_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_lxtG8.webp 1080w, /_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_Z1Bf0BE.webp 1280w, /_astro/mcp-server-sdk-design-editor-whitelable-photo-editor_1v9CSu.webp 1480w&quot;&gt;&lt;/p&gt;
&lt;p&gt;Integrate CE.SDK documentation directly into your development environment. By supporting the &lt;a href=&quot;https://modelcontextprotocol.io/docs/getting-started/intro&quot;&gt;Model Context Protocol&lt;/a&gt; (MCP), we optimize how AI assistants like Claude, Cursor, and VS Code Copilot search and retrieve our latest technical guides and API references in real time.&lt;/p&gt;
&lt;p&gt;For your team, this means more accurate, context-aware code suggestions and a significantly faster integration process without leaving your editor.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/get-started/mcp-server-fde71c/&quot;&gt;Read our Docs MCP Server Guide&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;improvements&quot;&gt;Improvements&lt;/h2&gt;
&lt;h3 id=&quot;perfect-your-global-reach-with-rtl-text&quot;&gt;Perfect Your Global Reach with RTL Text&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1421px) 1421px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1421&quot; height=&quot;809&quot; src=&quot;https://img.ly/_astro/RTL-support-sdk-design-creative-sdk_Z2b4vfV.webp&quot; srcset=&quot;/_astro/RTL-support-sdk-design-creative-sdk_1Qmziq.webp 640w, /_astro/RTL-support-sdk-design-creative-sdk_Z1QpN78.webp 750w, /_astro/RTL-support-sdk-design-creative-sdk_2l2Pkv.webp 828w, /_astro/RTL-support-sdk-design-creative-sdk_URhys.webp 1080w, /_astro/RTL-support-sdk-design-creative-sdk_Z1ogwHu.webp 1280w, /_astro/RTL-support-sdk-design-creative-sdk_Z2b4vfV.webp 1421w&quot;&gt;&lt;/p&gt;
&lt;p&gt;We have refined our native right-to-left support for languages like Arabic, Hebrew, and Persian with a new “Auto” alignment feature.&lt;/p&gt;
&lt;p&gt;The engine now detects script direction on the fly, aligning right for RTL languages like Arabic, and left for LTR languages like English.&lt;br&gt;
For your product, this delivers a truly native feel for your users.&lt;/p&gt;
&lt;p&gt;→ &lt;a href=&quot;https://img.ly/docs/cesdk/js/text/language-support-a0f010/&quot;&gt;Get started with our RTL Guide&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;refine-animations-with-more-control-settings&quot;&gt;Refine Animations with More Control Settings&lt;/h3&gt;
&lt;p&gt;&lt;video src=&quot;https://blog.img.ly/2026/02/web-row-animation-creative-sdk-imgly.mp4&quot; controls autoplay muted loop playsinline&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;We have expanded the “Grow” animation style with new directional controls. Creators can now scale elements from all corners, instead of only the center.&lt;/p&gt;
&lt;p&gt;This allows for more intentional, fun motion design that aligns with high-end standards.&lt;/p&gt;
&lt;h2 id=&quot;full-changelog&quot;&gt;Full Changelog&lt;/h2&gt;
&lt;p&gt;See all technical details and the complete list of fixes in the &lt;a href=&quot;https://img.ly/docs/cesdk/changelog/v1-68-0/&quot;&gt;v1.68.0 Changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thank you for growing with IMG.LY.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Join 3,000+ creative professionals who get early access to new features and updates—&lt;a href=&quot;https://share.hsforms.com/1IgAOV1wASXGPnFG4ZPLejg1hk3i?ref=img.ly&quot;&gt;subscribe&lt;/a&gt;.&lt;/p&gt;</content:encoded><dc:creator>Neslihan</dc:creator><media:content url="https://blog.img.ly/2026/02/creative-editor-sdk-v168-imgly-whitelabel-design-editor-video-editor-react.jpg" medium="image"/><category>Release Notes</category></item></channel></rss>