Skip to main content
Version: Latest

Image Editor

Paid Feature

This feature is only available in paid plans. Learn More

We have a built-in image editor that can be used to resize, crop or apply effects to images. It's enabled by default but you can disable it if you want. You can also access it by double-clicking on any image.

unlayer.init({
features: {
imageEditor: {
enabled: false,
},
},
});
Unlayer's in-house image editor open over a selected image, with a right-docked tool rail (Filter, Crop, Resize, Rotate, Draw, Shapes, Frame) and the Filter properties panel showing one-tap preset thumbnails and adjustment slidersUnlayer's in-house image editor open over a selected image, with a right-docked tool rail (Filter, Crop, Resize, Rotate, Draw, Shapes, Frame) and the Filter properties panel showing one-tap preset thumbnails and adjustment sliders

The editor ships a full tool set: Crop (with rotate in 90° steps, flip, a straighten slider for fine-angle rotation, and a corner-rounding radius slider for rounded corners, all built into the same tool), Resize, Draw (brush color/type/size), Text (one-tap style presets grouped into Basic, Handwriting, and Effects, a bundled font library picked from a dropdown that previews each face, and font, color, background, outline, and shadow controls; double-click the text on the canvas to edit it), Shapes (circles, rectangles, arrows, stars, and more, grouped into Filled, Outline, and Gradient palettes with search, plus drag/resize/rotate, flip, duplicate, and per-shape color, opacity, outline, and shadow controls), Stickers (a bundled sticker library — emoticons, doodles, landmarks, and more — with search and per-category browsing; single-color stickers in the doodles, landmarks, beach, and transportation categories can be recolored and given an outline or shadow after adding), Frame (9 preset frames with an adjustable size and a color picker for the basic frame), and Filters (one-tap presets like Sepia, Vintage, or Polaroid plus adjustment sliders for brightness, contrast, saturation, vibrance, hue, gamma, blur, pixelate, and noise), alongside the AI Assistant. When the AI Assistant is available it leads the tool rail and its chat panel opens automatically when the editor loads.

The tools appear as a vertical tab rail with a properties panel that opens beside it when a tool is selected. Changes persist automatically — closing a tool's panel, switching to another tool, or saving commits its pending edits, and undo/redo reverts or restores them. There is no separate Apply/Cancel step. The AI Assistant behaves like any other tool — its chat opens in the same panel slot. By default the rail docks to the same side as the builder's own tools panel (appearance.panels.tools.dock, which defaults to the right edge), so the image editor stays visually consistent with the rest of the editor; set dock to 'left' or 'right' to override it for the image editor specifically.

Text, shapes, stickers, and drawings are a live, re-editable layer on top of the photo: they stay selectable after you switch tools or close a panel. Click an object on the canvas at any time to re-select it — its tool reopens with the object's current styling so you can move, resize, recolor, reorder (bring to front/forward, send backward/to back), or delete it from the floating toolbar above the selection. The photo underneath is the only raster surface; the layers are flattened onto it when you export or save the image, send it to the AI Assistant, or click the Flatten layers toolbar button (which bakes them in as a single undoable step). Most edits keep the object layer live: resize scales the layers to match, an axis-aligned crop shifts them with the photo, and filters/adjustments apply to the photo only (overlaid objects keep their own colors). A few transforms can't be applied to vector objects exactly, so they bake (rasterize) the object layer into the photo and it becomes part of the image: rotate, flip, and the straighten slider (all inside the Crop tool). Undo restores the live layer in one step.

unlayer.init({
features: {
imageEditor: {
dock: 'left', // 'left' | 'right'; omit to follow appearance.panels.tools.dock
},
},
});

Pinning the image editor version

By default the editor always loads the latest image editor, so improvements and fixes reach your editor automatically. If you need a specific, reproducible build — for example to match a version you tested against or to stage a change — pin it with version. An unknown or unpublished version transparently falls forward to the latest, so a stale pin never breaks image editing.

unlayer.init({
features: {
imageEditor: {
version: '1.500.0', // pin an exact published bundle; omit to always use the latest
},
},
});

Image Editor Tools

You can also choose to disable any of the image editor tools. By default, all of these tools are enabled: Filter, Resize, Crop, Draw, Text, Shapes, Stickers, and Frame. Rotate, flip, and rounded corners all live inside the Crop tool (disabling corners hides the corner-radius section).

Here's an example if you want to disable the Resize tool in the image editor.

unlayer.init({
features: {
imageEditor: {
tools: {
resize: false,
},
},
},
});

Customize Tool Icons

Each tool entry also accepts an object form so you can customize its icon while keeping the tool enabled. The icon field accepts a FontAwesome icon name (with or without the fa- prefix), an image URL (http(s):, data:, or absolute path), or inline SVG markup (must start with <svg). The object form also accepts enabled so you can mix-and-match tool visibility with icon overrides.

unlayer.init({
features: {
imageEditor: {
tools: {
filter: { icon: 'magic-wand-sparkles' },
crop: { icon: 'https://example.com/icons/crop.svg' },
draw: { icon: '<svg viewBox="0 0 24 24">…</svg>' },
resize: { enabled: false },
},
},
},
});

When the icon string cannot be resolved, the editor falls back to the default icon for that tool.

Translations

The image editor ships with built-in translations for the locale you pass to unlayer.init({ locale }) and falls back to English when a locale is not yet available. You can override any string — or supply translations for a brand-new locale — through the same translations config you use for the rest of the editor (see Localization). All image editor keys are grouped under the image_editor.* prefix.

If your project uses @unlayer/types, every translation key (and the rest of the unlayer.init config) is fully typed, so your editor will autocomplete the keys below as you write them.

unlayer.init({
locale: 'fr-FR',
translations: {
'fr-FR': {
'image_editor.toolbar.save': 'Enregistrer',
'image_editor.tools.filter': 'Effets',
'image_editor.ai_assistant.placeholder':
'Décrivez ce que vous souhaitez modifier…',
},
},
});
All image editor translation keys

Toolbar

KeyDefault
image_editor.toolbar.saveSave
image_editor.toolbar.cancelCancel
image_editor.toolbar.undoUndo
image_editor.toolbar.redoRedo
image_editor.toolbar.flattenFlatten layers
image_editor.toolbar.zoom_inZoom in
image_editor.toolbar.zoom_outZoom out
image_editor.toolbar.fit_to_screenFit to screen
image_editor.toolbar.show_chatShow chat
image_editor.toolbar.hide_chatHide chat
image_editor.toolbar.closeClose

Side nav tools

KeyDefault
image_editor.tools.filterFilter
image_editor.tools.cropCrop
image_editor.tools.resizeResize
image_editor.tools.drawDraw
image_editor.tools.textText
image_editor.tools.shapesShapes
image_editor.tools.stickersStickers
image_editor.tools.frameFrame
image_editor.tools.cornersCorners

Inline actions, filters, and object labels

KeyDefault
image_editor.actions.resetReset
image_editor.crop.aspect_freeFree
image_editor.crop.aspect_originalOriginal
image_editor.crop.aspect_squareSquare
image_editor.crop.aspect_ratioAspect ratio
image_editor.crop.rotate_flipRotate & flip
image_editor.crop.straightenStraighten
image_editor.resize.widthWidth
image_editor.resize.heightHeight
image_editor.resize.lock_aspectLock aspect ratio
image_editor.rotate.rotate_leftRotate left
image_editor.rotate.rotate_rightRotate right
image_editor.rotate.flip_horizontalFlip horizontal
image_editor.rotate.flip_verticalFlip vertical
image_editor.arrange.bring_to_frontBring to front
image_editor.arrange.bring_forwardBring forward
image_editor.arrange.send_backwardSend backward
image_editor.arrange.send_to_backSend to back
image_editor.draw.brushBrush
image_editor.draw.colorColor
image_editor.draw.typeType
image_editor.draw.sizeSize
image_editor.draw.brush_pencilPencil
image_editor.draw.brush_eraserEraser
image_editor.draw.brush_circleCircle
image_editor.draw.brush_spraySpray
image_editor.draw.brush_diamondDiamond
image_editor.draw.brush_vlineV Line
image_editor.draw.brush_hlineH Line
image_editor.draw.brush_squareSquare
image_editor.draw.custom_colorCustom color
image_editor.shapes.fillFill
image_editor.shapes.transparentTransparent
image_editor.shapes.colorColor
image_editor.shapes.opacityOpacity
image_editor.shapes.outlineOutline
image_editor.shapes.shadowShadow
image_editor.shapes.outline_widthWidth
image_editor.shapes.shadow_blurBlur
image_editor.shapes.shadow_offset_xOffset X
image_editor.shapes.shadow_offset_yOffset Y
image_editor.shapes.duplicateDuplicate
image_editor.shapes.deleteDelete
image_editor.shapes.circleCircle
image_editor.shapes.rectangleRectangle
image_editor.shapes.triangleTriangle
image_editor.shapes.ellipseEllipse
image_editor.shapes.curved_arrowCurved arrow
image_editor.shapes.arrowArrow
image_editor.shapes.lineLine
image_editor.shapes.starStar
image_editor.shapes.decagonDecagon
image_editor.shapes.shieldShield
image_editor.shapes.filledFilled
image_editor.shapes.gradientGradient
image_editor.shapes.searchSearch ...
image_editor.shapes.moreMore ({count})
image_editor.shapes.lessLess
image_editor.shapes.emptyNo shapes found
image_editor.text.newNew text
image_editor.text.default_textDouble click to edit
image_editor.text.fontFont
image_editor.text.sizeSize
image_editor.text.styleStyle
image_editor.text.alignAlign
image_editor.text.boldBold
image_editor.text.underlineUnderline
image_editor.text.strikethroughStrikethrough
image_editor.text.italicItalic
image_editor.text.align_leftAlign left
image_editor.text.align_centerAlign center
image_editor.text.align_rightAlign right
image_editor.text.backgroundBackground
image_editor.text.moreMore ({count})
image_editor.text.lessLess
image_editor.text.group.basicBasic
image_editor.text.group.handwritingHandwriting
image_editor.text.group.effectsEffects
image_editor.text.preset.headingHeading
image_editor.text.preset.subheadingSubheading
image_editor.text.preset.bodyBody
image_editor.text.preset.markerMarker
image_editor.text.preset.scriptScript
image_editor.text.preset.bubblesBubbles
image_editor.text.preset.sketchSketch
image_editor.text.preset.memeMeme
image_editor.text.preset.outlineOutline
image_editor.text.preset.highlightHighlight
image_editor.text.preset.shadowShadow
image_editor.text.preset.neonNeon
image_editor.text.preset.typewriterTypewriter
image_editor.corners.radiusRadius
image_editor.stickers.searchSearch ...
image_editor.stickers.moreMore ({count})
image_editor.stickers.lessLess
image_editor.stickers.emptyNo stickers found
image_editor.stickers.category.emoticonsEmoticons
image_editor.stickers.category.doodlesDoodles
image_editor.stickers.category.landmarksLandmarks
image_editor.stickers.category.beachBeach
image_editor.stickers.category.bubblesBubbles
image_editor.stickers.category.cloudsClouds
image_editor.stickers.category.starsStars
image_editor.stickers.category.transportationTransportation
image_editor.frame.presetsPresets
image_editor.frame.adjustAdjust
image_editor.frame.sizeSize
image_editor.frame.colorColor
image_editor.frame.basicBasic
image_editor.frame.pinePine
image_editor.frame.oakOak
image_editor.frame.rainbowRainbow
image_editor.frame.grunge1Grunge 1
image_editor.frame.grunge2Grunge 2
image_editor.frame.ebonyEbony
image_editor.frame.art1Art 1
image_editor.frame.art2Art 2
image_editor.filters.presetsPresets
image_editor.filters.adjustAdjust
image_editor.filters.group.lightLight
image_editor.filters.group.colorColor
image_editor.filters.group.effectsEffects
image_editor.filters.brightnessBrightness
image_editor.filters.contrastContrast
image_editor.filters.saturationSaturation
image_editor.filters.vibranceVibrance
image_editor.filters.hueHue
image_editor.filters.gammaGamma
image_editor.filters.blurBlur
image_editor.filters.pixelatePixelate
image_editor.filters.noiseNoise
image_editor.filters.sharpenSharpen
image_editor.filters.grayscaleGrayscale
image_editor.filters.noneNone
image_editor.filters.black_whiteBlack & White
image_editor.filters.sepiaSepia
image_editor.filters.vintageVintage
image_editor.filters.polaroidPolaroid
image_editor.filters.kodachromeKodachrome
image_editor.filters.technicolorTechnicolor
image_editor.filters.brownieBrownie
image_editor.filters.invertInvert
image_editor.filters.embossEmboss
image_editor.labels.textText
image_editor.labels.shapeShape
image_editor.labels.stickerSticker
image_editor.labels.drawingDrawing
image_editor.labels.imageImage

AI Assistant

KeyDefault
image_editor.ai_assistant.nav_labelAI
image_editor.ai_assistant.titleAI Assistant
image_editor.ai_assistant.empty_stateChoose or describe an edit
image_editor.ai_assistant.placeholderDescribe what you want to change…
image_editor.ai_assistant.editingEditing…
image_editor.ai_assistant.progress.analyzingAnalyzing image…
image_editor.ai_assistant.progress.applyingApplying changes…
image_editor.ai_assistant.progress.finalizingFinalizing…
image_editor.ai_assistant.doneThe changes have been applied.
image_editor.ai_assistant.abortedGeneration cancelled.
image_editor.ai_assistant.errorOur AI service is temporarily unavailable. Please try again in a few minutes.
image_editor.ai_assistant.suggestions.remove_backgroundRemove the background
image_editor.ai_assistant.suggestions.vintageMake it look vintage
image_editor.ai_assistant.suggestions.brightnessIncrease brightness
image_editor.ai_assistant.suggestions.black_whiteConvert to black & white
image_editor.ai_assistant.suggestions.blur_backgroundBlur the background
image_editor.ai_assistant.suggestions.warm_toneAdd a warm tone
image_editor.ai_assistant.suggestions.sharpenSharpen the image
image_editor.ai_assistant.suggestions.remove_textRemove text from image