NEW

Brushee 1.8 is Here

Three days after 1.7, a fourth-quarter feature drop. Brushee 1.8 is built around Trace Image to Vectors — drop a photo, sketch, or screenshot on the canvas and get an editable vector group back in a second or two. Two smaller features (font picker, font catalog) and two real fixes (compound-path renderer, Layers panel performance) round out the release.

Trace Image to Vectors

Modify ▸ Trace Image to Vectors… (or right-click an image / bitmap layer) opens the trace dialog. Everything runs in the browser — no upload, no server pass.

The pipeline:

  • K-means color quantize the source into N clusters (2–24, default 8), with best-of-3 restarts so similar hues don't collapse into one muddy cluster.
  • Single-pass anti-alias cleanup flips isolated AA pixels into their dominant neighbor. Without it, cartoon sources produce a halo ring around every shape that looks like a stroke the artist didn't draw.
  • Connected-component labeling splits each color into its individual blobs. Three blue shirts on three different characters produce three separate path objects, not one compound path that lights up handles all over the image when you Subselect it.
  • Pixel-edge boundary trace of every component (outer outlines + any holes), with a right-turn rule that handles diagonal-pixel corners consistently.
  • Douglas–Peucker simplification with a Detail slider — Min collapses to a handful of nodes per shape; Max hugs every staircase. Smooth turns pick up auto bezier handles; sharp turns stay as corners.
  • Per-region color sampling instead of cluster centroids. Each path's fill is the mean of its own source pixels, so two reds that k-means averaged into one cluster still come out as the two reds the user drew.

The dialog has a live preview that re-traces (downsampled to 256px on the long side for speed) every time you change an option, with running counts of paths and nodes. Output lands as a group placed beside the source by default (or replacing it), so you keep the original around to compare.

The full feature is in the new Trace Image to Vectors help topic.

Renderer fix — compound paths

Brushee was drawing a stray closing-bezier on any compound path whose endpoints carried handles. The closing segment used pathData[0] as the "first point" instead of the start of the current subpath — fine for a single-subpath path, but for multi-subpath paths it swept a thin curve across the whole image, connecting the last subpath's end back to the very first subpath's start.

Before / after on a synthetic compound path with three disjoint blue squares and a bezier handle on the closing node:

Stray fill pixels in the gaps
Buggy renderer 1,426 / 3,856
Fixed renderer 0 / 0

This wasn't only a trace issue — any compound path with handles drew the artifact, so SVG imports that produced multi-subpath shapes with smooth nodes had the same defect. The fix is one tracked-index change in RenderEngine._tracePath.

Layers panel speedup

scene:objectAdded and scene:objectRemoved used to call _refreshLayers() synchronously, and each refresh re-rendered every thumbnail through the full render path. Operations that add or remove many objects in a tight loop — ungroup a trace result, paste a batch of clipboard objects, import a layered PSD — produced O(N²) thumbnail work that froze the panel for noticeable seconds.

Two changes paired:

  1. Both add/remove events now schedule through _scheduleRefresh() (50 ms debounce), so a burst of N adds collapses into one rebuild.
  2. _populateThumbnails paints 8 thumbs per frame via requestAnimationFrame. Short lists still render synchronously (the rAF round-trip is more expensive than just drawing 3 thumbs); long lists spread across frames so the UI stays responsive.

Measured on a 40-path ungroup:

Synchronous blocking time
Before 470.7 ms
After 100.1 ms

That's a 4.7× speedup on the work you actually feel; the rest of the thumbnail rendering happens off-thread after the operation returns.

Font picker + Manage Fonts

The font family field now opens a custom dropdown instead of the browser's native <select>. Each row shows the family name on the left and a live preview of the selected text object rendered in that face on the right — so you see how the actual words you typed will look before committing, not a generic pangram.

Only fonts in your collection appear in the picker. A new Window ▸ Manage Fonts… dialog browses a curated Google Fonts catalog filterable by category (Sans Serif, Serif, Display, Handwriting, Monospace) and free-text search. Add a family and it's pulled in on demand and persisted across sessions; remove a family and any existing text using it keeps rendering as long as the page references it.

The Weight dropdown in the Properties panel now lists exactly the weights the chosen family ships in — 100 Thin through 900 Black, only the slots that actually exist. The italic toggle is only available on families that include an italic style.

Full breakdown in the new Text & Fonts help topic.

Menu renames

Two Modify-menu entries got renamed for clarity (the old names talked about "bitmap" specifically; the new ones cover both image and bitmap objects):

  • Trace Bitmap to VectorsTrace Image to Vectors
  • Flatten to BitmapFlatten/Collapse to Image

Both new names appear in the top menu and the right-click context menu. The right-click context menu also now displays the keyboard shortcuts for Bring to Front (Ctrl+Shift+Up), Bring Forward (Ctrl+Up), Send Backward (Ctrl+Down), and Send to Back (Ctrl+Shift+Down) — they were in the top menu but not surfaced on right-click.

Help

  • New Trace Image to Vectors topic under Help ▸ I/O.
  • New Text & Fonts topic under Help ▸ Drawing.
  • Filters & Effects topic's Flatten section retitled to match the new menu label and updated to mention both the menu and the right-click path.

← Back to News