What's New in Figpea v5.2.0: Photoshop Files That Composite Like Photoshop, and Designs Opened Straight from Google Drive

by Figpea Team

Figpea opens design files — Adobe XD, Photoshop (PSD/PSB), SVG, PDF, Figma and more — right in your browser. Nothing installs, nothing uploads, and you don't need an account just to look at a file. Your original file is never changed; Figpea only ever creates new files.

This release is mostly about Photoshop. A PSD is a compositing document, and Figpea had been treating parts of it as a picture: eleven blend modes silently fell back to Normal, four layer effects were read and then not painted, three colour modes decoded to plausible but wrong colours, and every paragraph in a text layer inherited the first paragraph's alignment. All of that is fixed here, measured against a real corpus.

Outside Photoshop, the headline is that you can now open a file straight out of Google Drive without downloading it first. There's no breaking change in this release — nothing you scripted against 5.1 stops working.

Photoshop: all 27 blend modes, and Subtract that actually subtracts

The browser's canvas gives you sixteen blend modes for free. Photoshop defines twenty-seven. The other eleven — Dissolve, Linear Burn, Darker Color, Linear Dodge (Add), Lighter Color, Vivid Light, Linear Light, Pin Light, Hard Mix, Divide and Subtract — had no native equivalent, so they fell through to Normal.

Figpea's blend-mode dropdown open over a selected layer, listing all 27 Photoshop blend modes grouped under Normal, Darken, Lighten, Contrast, Inversion and Component headings, with Normal currently selected

All eleven now run through a real per-pixel compositor, and each one is checked against the mode's own formula rather than eyeballed. Subtract is the one to know about, because it wasn't missing — it was wrong. It had been mapped to Difference, which is |a − b|; subtract is clamp(b − a). A layer set to Subtract rendered a believable, incorrect image with nothing to tell you so. Dissolve, which is stochastic by definition, is seeded per layer, so the same document renders identically twice.

The sixteen modes the browser already has stay on the fast native path — the compositor only runs for a layer that actually uses one of the new ones, which in our corpus is a small handful of layers per file. And where SVG or CSS export has no equivalent operator, the affected layer is rasterised into an image fill so it still looks right, with a warning recorded on the project's diagnostics rather than a silent difference.

Photoshop: four more layer effects, and effects that stop leaking down a group

Gradient overlay, pattern overlay, outer glow and inner glow are decoded out of Photoshop's lfx2 layer-style data and painted on the canvas. In the inspector each one appears as a read-only summary row — its swatch, its key parameters and an enable toggle — rather than a full editor; if you want to change the parameters today, figpea.layer.stylePatch() on the scriptable API takes all of them.

Figpea's inspector Effects section with Outer Glow, Inner Glow, Gradient Overlay and Pattern Overlay each enabled and showing a colour swatch beside a read-only parameter summary, next to a canvas where the glows are visibly painted around two shapes

Two structural defects on the same surface went with them.

A group's effects were being applied to every layer inside it. In Photoshop a group's layer style applies once, to the group's composited result. Figpea resolved a layer's effects by walking up to the nearest ancestor that had any — so a group with a drop shadow gave that same shadow to every child, and then painted it once more on the group itself. A group's effects are now the group's alone.

Photoshop's multi-instance effect lists are read properly. You can stack up to ten drop shadows, inner shadows, colour overlays, gradient overlays or strokes on one layer. Figpea read only the drop-shadow list, and only its first enabled entry — so a second shadow disappeared, and a stroke or inner shadow expressed as a list disappeared entirely. All five lists are now read, and every enabled entry is painted in file order.

Photoshop: colour modes that were quietly wrong

Channel decoding used to branch on how many channels a file had rather than on the colour mode it declares. Three modes came through confidently wrong, with no warning:

  • Lab files were decoded as if they were RGB — L*a*b* values painted straight into red, green and blue. The result looks like a picture. It is not your picture.
  • Indexed files were decoded as greyscale, because the palette lives in a section of the file Figpea never parsed.
  • Duotone files were likewise flattened to a grey ramp, ignoring the ink specification.

All three now read the colour mode, parse the section that carries the palette and ink spec, and convert to sRGB. CMYK files, which previously threw an opaque "couldn't open this file", now open with converted colour — approximate, because Figpea does no ICC colour management yet, and the warning says so rather than implying print accuracy. A mode still outside this list (Multichannel) opens using the embedded composite with a warning naming the mode. RGB and greyscale files decode byte-identically to before.

The rule we applied throughout: a thrown error is honest and a warning is honest; a confidently wrong picture in a tool whose whole value is fidelity is not.

Photoshop: text where every paragraph keeps its own alignment

Three text defects, all common enough to hit ordinary files.

Only the first paragraph's properties were read. A text layer's paragraph properties are a run array, one entry per paragraph, and Figpea took index 0 for the whole layer — so a centred heading followed by left-aligned body text rendered entirely centred. Every paragraph now carries its own properties, including indent and space-before/space-after.

Justified text rendered ragged-left. Only "right" and "centre" were mapped; the four justify variants all defaulted to left. They're now mapped and rendered.

Point text was forced into a fixed-width box. Photoshop distinguishes point text (auto-sizing, no wrap) from paragraph text (a box that wraps), and Figpea gave every text layer a box the width of its Photoshop-rendered bounds. Since a PSD embeds no fonts, the moment a font was substituted the text re-wrapped where Photoshop hadn't. Point text is now left unboxed; paragraph text still wraps at the file's own box width. Vertical writing, text warp and text-on-path aren't rendered — the file opens and a warning names the construct, instead of the layout quietly going wrong.

Open a file straight from Google Drive

If the file you want to look at is already in Google Drive, you no longer have to download it first.

Figpea's welcome screen: a drag-and-drop zone with a Browse File button, an "Or open from" group whose Google Drive button opens a file directly out of Drive, a New Project button, and beneath them the statement that Figpea views, inspects and exports files and does not save back to your original .psd, .xd or .fig — your original file is never changed

Click Google Drive on the welcome screen, pick a file, and Figpea fetches its bytes directly from Google into your browser and hands them to the same decoder a drag-and-drop open uses. The file still never reaches a Figpea server — this is a browser-to-Google fetch, not an upload.

The permission Figpea asks for is Google's narrowest: drive.file, a per-file grant covering only the files you pick with the picker. There's no Drive-wide read access, no refresh token and no background access — the token is used for the one fetch and nothing else.

Two honest limits. This is the Figpea-side picker only. Figpea does not yet appear in Drive's own right-click "Open with" menu; that needs a Google Workspace Marketplace listing, which is a separate, external review process and isn't part of this release. And OneDrive isn't live — the adapter and button ship inert and don't render, because there's no Figpea-owned Microsoft account to register the app against yet. If you're wondering where the OneDrive button went: it was never switched on.

Repeat can produce linked copies

Repeat lays a shape out along a path, around a ring, or in a grid. Until now every copy was an independent clone, so changing the pattern meant editing each copy by hand.

Figpea's Repeat panel in Radial mode with Count 8, Radius 175, Start angle -90 and Step angle 45, the new Link copies checkbox ticked, and the explanation that your original becomes a component, each copy is a linked instance of it, editing the original updates every copy, and one undo reverts it all

Tick Link copies before you apply, and the source converts into a component master in place while the generated group is filled with linked instances of it. Recolour the original, change its path, and every copy follows. If the source is already a component master — or an instance of one — that master is reused rather than a second one being created.

The toggle is off by default, so the un-ticked behaviour is byte-for-byte what 5.1 shipped, and the copies land at identical transforms either way. One undo removes the whole group and reverts the source from a component back to the plain layer it was, in a single step. The layout itself is still placed once, not live: moving or resizing the master doesn't re-flow the copies — only its content propagates.

Make same width, make same height

The Align section gained two operations that resize instead of reposition.

Three rectangles on a Figpea page selected together after Make same width has run, so all three now share one width while keeping their own differing heights, with the inspector's Align section showing its alignment and distribute buttons above the new Make same width control

Select two or more layers — or a folder with at least two children — and Make same width / Make same height resizes every one of them to match the largest in the selection. Only the targeted axis changes; the other is left exactly as it was, so nothing is quietly stretched. Each layer keeps its top-left corner fixed, so equalising sizes doesn't also move things around. Locked and hidden layers are skipped, and don't count toward the maximum either. It's one undo step however many layers resized, and if everything already matches, clicking does nothing and creates no undo entry.

A group's scale is finally visible — and resettable

Resize a folder or group in the default Content layout mode and the scale factor lands on the group's own matrix, where children inherit it. That's the right rendering strategy, and it used to leave the group carrying an accumulated, unbounded, completely invisible multiplier. After a few drags a group could sit at 173% × 41% with nothing in the interface willing to tell you, and every downstream number — child sizes, stroke widths, rendered font sizes — meaning something different from what the panel said.

Figpea's inspector Position section for a selected group, showing X, Y, W and H alongside new Scale X 150% and Scale Y 80% percentage fields and a reset-scale button, with the group's Layout resize mode set to Content

The Position section now shows Scale X and Scale Y as percentages you can read and type into, plus a Reset Scale button. Reset means revert, not bake: the group snaps back to its natural, unscaled content size and every child's own transform and geometry is left byte-identical. Rotation and position survive — only the scale components change — and each set and each reset is one undo step. The button disables itself at exactly 100% × 100%. For a group in Viewport or Constraints mode the controls appear only when a residual scale is actually there, so an old file's leftover multiplier is still visible and still repairable.

Radial gradients rotate

A radial gradient's field is stretched by the layer's aspect, so on any non-square layer it renders as a visibly elongated ellipse — and until now that ellipse was locked to the horizontal. There was no way to turn it: not on canvas, not in the panel, and the Rotate 90° button was greyed out with "not available for radial".

A wide rectangle in Figpea filled with a red-to-blue radial gradient whose elliptical field has been turned a quarter turn so it stands upright across the rectangle, with the on-canvas overlay's centre anchor, axis line and radius handles drawn along the rotated axis and the Radial Gradient fill panel open beside it

The inner and outer radius handles the tool already draws are now free-direction: their angle about the centre sets the rotation and their distance sets the radius, and the overlay's axis line, hairline and both ellipses redraw at that angle so you can see what you're doing. There's an Angle (Deg) field in the panel's Radial section for an exact value, and Rotate 90° is enabled for radial and advances a quarter turn.

The rotation is rigid — the ellipse turns as a body and keeps its shape, rather than spinning and re-elongating as a naive matrix rotation would. A gradient imported with genuine shear keeps that shear; only its angle moves, and the degrees field reads back the matrix's true rotation instead of pretending it's zero. Each rotation gesture is one undo step, and the angle survives an SVG export round-trip.

No new handle was added for any of this, deliberately. The rule now holds across all three gradient types: rotation is never its own anchor — the handles that already define the gradient's geometry carry it.

One gesture removed: dragging the layer body no longer redefines the gradient

While a gradient is being edited, a drag anywhere over the layer's body used to rewrite the gradient's geometry outright — both linear endpoints replaced, or a radial's centre jumped to where you started with its inner circle collapsed onto it. There was no modifier and no mode: the same pointer-down on the same pixels meant "adjust this" or "start over" depending only on whether it happened to land on a handle. A carefully placed gradient could be discarded by one stray three-pixel drag.

That gesture is gone. The handles are the only thing that authors a gradient. A click or drag on the layer body does nothing at all — and, importantly, still doesn't dismiss the overlay. Escape and a click outside the layer close it exactly as before, and the crosshair cursor that advertised the removed gesture is gone with it. Every handle behaves identically to 5.1.

Adding an asset follows your selection

Clicking Add to canvas on an Assets-panel image used to place it on "the page you're looking at" — the page under your viewport centre, or failing that the most-visible page, which could be off-screen. With a page anywhere on screen you could never get an image onto the root canvas, and panning could land one somewhere you weren't looking.

Figpea's Assets panel open on the left showing one image tile with its Add to canvas control, and on the canvas the image it just placed, selected, with its position and size read back in the inspector

Now your selection decides. A selected page, or a selected layer inside one, puts the image on that page — even when a different page sits under the viewport centre. Nothing selected puts it on the root canvas at your viewport centre. A multi-select that resolves to one page lands there; one spanning pages goes to the root. The camera never moves, and it's one undo step. figpea.layer.placeProjectImage on the scriptable API follows the same rule, so a script places assets exactly where the button does.

One thing the docs are now careful about: the layer is always parented correctly, but it's only guaranteed visible when its placement point is in the viewport. Add to a selected page that's off-screen and it lands correctly on that page — you may have to pan to see it.

Figma cards get their fills back

Opening .fig files, every dashboard card on a real Figma community file rendered with no background fill, no corner radius and no drop shadow — content floating on the page background. The same loss hit buttons, pills, chips and tooltip badges, leaving their labels apparently orphaned in mid-air. On one artboard the missing white card fills alone accounted for roughly half the page.

Container frames now render their fill, corner radius and drop shadow, and the button, pill, chip and badge fills come through with them. The nested fills that already rendered correctly are unchanged.

For scripts and agents

  • figpea.component.removeState and renameState close a one-way door: a script could add a component state and then had no programmatic way to remove or rename it, so every mistake was permanent for the rest of the session. Both reject an instance target with a real error rather than quietly mutating the master and every sibling instance you never named — states are authored on the master by design. Their undo behaviour is documented from a measurement, not an assumption: renameState costs one undo step, removeState costs none.
  • The public agent-API reference caught up with the contract. /docs/agent-api now documents the full figpea.component surface including the six instance-override methods, the complete blend-mode enum with the HSL modes, and the full set of interaction triggers and actions — all of which had shipped in the editor without ever being written down publicly. The figpea-agent skill published on the site is now verified byte-identical to the editor's own canonical copy on every build.
  • The scriptable API is explicit that the UI's trial graces don't apply to it. The editor lets a Free user take a few scaled exports and page through the first few presentation screens before the paywall fires; programmatic export calls enforce entitlements strictly, with no such allowance. Both pages now say the same thing.

Assets panel: the Text styles defect we flagged last release is fixed

Last release's notes admitted, in writing, that the new Text styles section listed many styles twice — one row's caption ending · ls 0 and the other omitting it — because it treated "letter spacing unset" and "letter spacing 0" as two different styles, and that with line height in play one style could square into four rows. That's fixed.

Style identity is now normalised before it's compared, so unset and 0 are one style, and a colour written as #2463d9 and the same colour written as rgba(36,99,217,1) are one style too. Two related defects went with it: a text run that overrides only its size no longer loses the layer's font family and shows up as a blank specimen, and a run that overrides only its colour is no longer dropped from the list entirely.

Site: what Figpea does with your file, said plainly

Word-of-mouth and social listening kept showing people arriving expecting Figpea to edit an .xd or .fig and save back into the original file. It doesn't — there is no .xd encoder, and there never has been. Better that you read that before you invest an afternoon in a document than after.

Figpea's Adobe XD viewer landing page: the hero reads "The highest-fidelity Adobe XD viewer online" with Open Figpea and Try a sample buttons, and beneath them the plain statement that Figpea views, inspects and exports artboards and assets and does not save back to your original .xd file — your original file is never changed

The /xd-viewer, /psd-viewer and /figma-viewer landing pages now state it directly, and so does the editor's own empty state. What Figpea gives you is the file opened faithfully, every layer inspectable, and clean exports — PNG, SVG, PDF, ZIP, JSON — that are new files alongside your original.

Those same three landing pages also gained SoftwareApplication and FAQPage structured data, because a growing share of our visitors now arrive from an AI assistant that read the page rather than from a search result a human clicked.

And a batch of documentation caught up with the product: the 27 blend modes and the four new layer effects are documented with real captures from the running editor; the "Smart Objects" section is rewritten in Figpea's own component-and-instance vocabulary instead of borrowed Photoshop terms; the XD rescue guide finally mentions the health report's Import issues section, which is the part of that report that actually tells you whether your rescue was faithful; and /docs/plans now discloses the Free trial graces — six scaled exports per session, the first few presentation screens — instead of describing a boundary the app doesn't enforce.

Two corrections worth naming, because both were us claiming something untrue. The advanced layer-operations page listed "Blend if conditions" as a shipped capability; Photoshop-style tonal-range sliders have never been implemented in Figpea, and the line is gone. And two blog posts carried hero images that were AI-generated illustrations with visibly garbled, misspelled type — "RESITE", "ROTOTE" — which are now real screenshots of the running editor. Every image in this post, and in our docs, is a capture of the actual product.

Fixes worth naming

  • A .zip containing nothing openable no longer hangs the open. It now fails cleanly and tells you what the archive actually holds.
  • An Adobe XD file missing an expected entry decodes anyway. A single absent zip entry used to abort the whole decode.
  • A Figma boolean-operation folder with no children no longer produces a storm of unhandled errors.
  • The project report shows an error in the error colour. Errors were being painted with the warning styling, which made a genuine failure read as a caution.
  • Snapping no longer clobbers a zero-delta move, and a resize keeps the corner you're dragging from fixed.
  • The canvas coordinates are right when the top banner is showing — everything used to sit at a vertical offset.
  • A conic gradient's overlay no longer draws a duplicate circle, and a fresh radial gradient's overlay ring is drawn at the radius the renderer actually paints.

Reliability

One paragraph, because none of it is visible. The site's sitemap is regenerated and its lastmod values come from a committed source, so two builds of the same content produce byte-identical output and a new page can't silently go missing from it. A guard now fails at development time if a new docs article isn't reflected in the production smoke checks, instead of the rot being found after a deploy. Twenty-two requirements whose smoke specs failed against real production last cycle were worked through one at a time — each classified on the record as a spec bug or a product bug, never batch-greened. And a test-isolation defect that let one test's dev server write into another test's snapshot window is gone.

Try it

Everything above is live now. Open Figpea, drag in an XD, PSD, SVG, PDF or Figma file — or pick one straight out of Google Drive — and have a look. It's free to open, inspect and edit, and a single 1× asset export is free too; when you need batch export, any-scale extraction or presentation playback, Pro covers it.