Releases: nextcloud-libraries/nextcloud-image-editor
Releases · nextcloud-libraries/nextcloud-image-editor
Release list
v1.0.0-beta.3
1.0.0-beta.3 – 2026-09-11
Added
- Text styling. A caption can carry a contrasting edge, derived from
the text colour rather than picked (#23), a plate that takes the photo
out from behind it (#24), one of three system font families (#25),
an alignment for its lines (#29) and bold, italic, underline and
strikethrough in any combination (#34). Each applies to the next
caption and to a selected one alike - The text controls and the colour picker float next to what they
change: the overlay while a caption is typed, the selection
otherwise. The bottom panel keeps the tool picker, the colour default
and the size slider (#37) - Lines and arrows snap to 45° steps while Shift or Ctrl is held, and
the key can be pressed or released mid-drag (#38) - Oval redactions, inscribed in the same drag as the rectangle (#31)
- Highlights, shadows and a vignette in the adjust panel (#21)
- The saved JPEG carries the source's Exif, XMP, ICC and IPTC blocks,
with the orientation reset, the size corrected and the embedded
thumbnail removed. Only when the editor was handed bytes: a URL gives
it no source to copy from (#22) - Before opening an image larger than the browser will paint, the
editor says what it would shrink it to and asks.ExportResult
gainsdownscaledfor hosts that want to warn again before
overwriting (#20) - The edit history opens from the back arrow, its entries are radios
that announce the step they land on, and a long list scrolls (#15,
#16)
Fixed
- A redaction hid the source pixels, not what was under it: annotations
drawn below it and the adjustments applied to the image stayed
readable in the export. It now samples the layer as drawn (#30) - The embedded camera thumbnail was unlinked but its pixels stayed in
the file and could be carved back out, the uncropped, unredacted
frame included. Every strip of it is zeroed before the link is cut
(#35) - A state stored by an older release, missing the adjustments added
since, rendered black: an undefined value ran the filter and left NaN
in the node.resetandinitialStatenow fill in what is missing
(#36) - A picture shown smaller than half its size is drawn from a halved
pyramid instead of being sampled in one pass, so fine grain and thin
lines match what an<img>shows. Export and thumbnails still scale
in one pass (#33) - The text overlay opened 16px left and 56px above the click, and the
selection toolbar sat off-centre by the same amount: both were placed
in stage coordinates but positioned inside the padded viewport (#37)
Changed
- Saving defaults to the format the image arrived in rather than PNG,
so a photo is saved as a photo. Hosts asking for a format still get
it (#22) - The text controls read like the rest of the panel and share one row
(#26, #32)
Still missing
- No translations yet: the Transifex resource behind
l10n/is not set
up, so every string falls back to English - Annotations cannot be created from the keyboard alone, and the
editor's shortcuts are bound to the window rather than to itself - Export and preset thumbnails still downscale in one pass, so a saved
copy bound bymaxSizeis coarser than the same picture on screen - The eraser, multi-select, per-annotation opacity, freehand redaction
and exact-pixel crop are not here yet (#2)
v1.0.0-beta.2
1.0.0-beta.2 – 2026-09-02
Added
- Exposure, temperature, tint and sharpen adjustments, bringing the
panel to seven controls in photographic order. Exposure is
multiplicative in stops, so its two halves are symmetrical in a way
brightness cannot be; temperature and tint are the two axes a white
balance is expressed in; sharpen is an unsharp mask that lifts edges
and leaves flat areas alone (#7) - Straight line tool, the arrow without the head: it records the two
ends of the drag and nothing in between (#8) - Progress on the save button, covering both the editor's own export
and the host's upload afterwards, through a newsavingprop. The
editor only knows when it handed the blob over, not when it landed
(#10)
Fixed
- Every control rendered ten pixels larger than the interface around it
inside Nextcloud. The editor declared--default-clickable-areaon
its own root, which overrode the server's 34px; it now registers a
fallback instead, so the host's value always wins (#9)
Changed
- The adjust panel opens on exposure rather than brightness
- The playground and the published demo render against a copy of the
variables a Nextcloud server serves, rather than hand-written
stand-ins that were wrong about the clickable area. A weekly workflow
keeps that copy current (#9)
Documented
- The package has to be bundled: its entries import their own
stylesheet, so a plain Node process cannot load them and
server-side rendering is out (#6)
v1.0.0-beta.1
1.0.0-beta.1 – 2026-09-02
First release. A Vue 3 image editor component for Nextcloud apps,
replacing the unmaintained Filerobot editor. It takes an image and
emits an edited one; storing the result is the consuming app's job.
The public API is what 1.0.0 will freeze, so this beta is the moment to
say so if something in it is wrong for you.
Transform and crop
- Crop with rule-of-thirds guides and aspect presets: free, original,
1:1, 4:3, 16:9 - Rotation in quarter turns, horizontal and vertical flips
- Fine rotation between -45 and 45 degrees, and a scale up to 3x, both
cover-scaled so the frame never shows a corner of empty space
Colour
- Brightness, contrast and saturation
- Sixteen filter presets with live preview chips, from photographic
grades (pop, golden, coast, cinema, berry, mist, warm, cool, fade)
through monochromes (grayscale, noir, luna, sepia) to effects
(invert, solarize, posterize)
Annotations
- Freehand drawing, rectangles, ellipses, arrows, text, and emoji
stickers drawn from the user's frequently used Nextcloud emojis or
the full picker - Select to move, resize, rotate, recolour, duplicate or delete, with
arrow-key nudging and a floating toolbar on the selection - Colour, stroke width and font size controls, the latter two showing
the mark at the size it will actually be drawn
Redaction
- Pixelation or a strong blur, both destroying the pixels in the export
rather than covering them - Where the browser cannot blur on a canvas, as WebKit could not before
Safari 18, the style degrades to pixelation rather than silently
leaving the region readable
History
- Undo and redo, with Ctrl+Z and Ctrl+Y or Ctrl+Shift+Z
- A named history list to jump straight back to any recorded step
- Revert everything, behind a confirmation, as one undoable step
View
- Wheel zoom anchored on the cursor, with the step following the wheel's
travel so a mouse and a trackpad both feel right - Panning on the middle button, a held space bar, a two-finger drag, or
a plain drag in the modes where no tool owns one - Pinch zoom on touch, and a zoom readout that resets the view
Export and session
- Exports a
Blobat natural resolution as PNG, JPEG or WebP, with
optional quality and a bound on the longest edge - An image that was not edited is handed back untouched, keeping its
quality and metadata instead of being re-encoded changereports every committed edit,initialStatetakes one back,
so an interrupted session can be resumedisPristine()andcreateInitialState()are exported for dirty
checks, anduseHistory()for standalone use
Interface
- Ambient glass chrome tinted by the image itself, with a blurred copy
of it as the backdrop - Responsive through container queries rather than viewport media
queries, so it adapts to the space the host gives it, down to
phone-sized - Every control at or above the minimum pointer target, screen-reader
announcements for changes with no visible text, and
prefers-reduced-motionrespected
Under the hood
- Konva is the only canvas dependency. No wrapped third-party editor.
- One declarative
EditorState; the scene is a render of it, and the
export runs through the same code path as the interactive view, so
what you save is what you saw - 212 unit tests over the state, geometry, filter and interaction
math, and 86 browser scenarios run in Chromium and Firefox that
assert exported pixels rather than DOM state - Typechecked in CI
Known limitations
- No translations yet: the Transifex resource behind
l10n/is not set
up, so every string falls back to English - Images beyond roughly 16 megapixels can exceed the browser's canvas
limits and export blank, on iOS in particular (#1) - Annotations cannot be created from the keyboard alone, and the
editor's shortcuts are bound to the window rather than to itself - The editing tools an image editor is eventually expected to have are
not all here yet: no line tool, eraser, multi-select or per-annotation
opacity, and no exposure or temperature adjustment (#2)