NC Picto · Docs

Where Picto falls short of Photoshop

Last reviewed: 2026-10-10 · Last updated: 2026-10-22 · Change: minor (G11: a recorded Save As imports with its format and file (file.saveAs, file.saveACopy for As a Copy) instead of as a plain Save that wrote over the played file, #7102; folder destinations stop playback until #5430; adjustment clipping stays visible in compact Properties, #5231; G9: Color panel modes, ramp and copy commands, the same in every theme, UI-217-17, #6000; G17: Help › Check for Updates and an opt-out check once per launch, DIST-220-1 partial, #5485; G10: .asl style libraries landed, #1051; G8: area type (TYPE-218-10); G1: smart objects keep Photoshop's Cylinder warp, #4112; G8: paragraph direction buttons in the Paragraph panel and options bar, TYPE-218-2 partial; G1: 32-bit Hue/Saturation and Colorize as Photoshop does them, Photoshop-oracle floor 190/258, #5781; G11: compound layer properties export as separate Photoshop Set events, rename last, #8304; G11: Batch and droplets take the result at the action's Save step, so actions ending in Save As and Close work; G11: .atn steps that switch to another open document import, play and save back, #7103; G14: the Nikon D4 white level follows the sample depth, so 12-bit D4 NEFs no longer open 2.6 stops dark, #5978; G14: a Nikon NEF's Adobe RGB preview is read as Adobe RGB (maker-note ColorSpace 0x001E), #5987; Apply Layer Comp action mapping, #7101; G10: JPEG Options dialog landed, FILE-215-19 partial (no Matte, progressive Scans or size preview); G10: Cineon write; G10: DPX read and write, #1049, Cineon and Amiga IFF read; Classical Object Finder improvement; learned segmentation remains open; G4: named, stateful section locks and visible keyboard focus in Brush Settings; G4: independent Brush Pose tilt-axis overrides, #3825 partial; G4: Transfer Mixer-only controls, #3825 partial; G9: Preferences › File Handling › Save in Background takes effect, #6207, 24 of 169 preferences do nothing; G7: Content-Aware Move previews every selection the command takes, coarse then exact, TOOL-213-4 done, #6680; G4: Pattern Stamp and Background Eraser draw live, TOOL-213-7; G9: Animated Zoom pref read: holding the Zoom tool zooms continuously, #6210, prefs that do nothing 25 of 166; G2: a cancelled 24 MP Gaussian Blur job stops in at most 44 ms, P25 under its 200 ms budget in local runs, baseline not re-run, #6205; G1: generated large-file fixtures, a 4.38 GB PSB opens on Windows through io, FILE-216-2 done, #5107; G9: fill and adjustment layers copy and paste whole, #2344; G1: smart filter masks show on PSD open, Photoshop-oracle floor 188/258; G10: DPX read and write, #1049, Cineon read; G1: CMYK Hue/Saturation and Color Balance keep the black ink; G1: CMYK Posterize on the stored values, psd-tools oracle floor 242/309; G1: CMYK adjustment layers composite on the document's inks, Photoshop-oracle floor 165/258; G1: CMYK Brightness/Contrast on the inks, CMYK Threshold's luma; G1: modern Brightness/Contrast's brightness curve matches Photoshop, Photoshop-oracle floor 151/258; G1: Lab documents composite on their stored L, a, b, Photoshop-oracle floor 152/258; G1: Levels on whole levels at every step, Photoshop-oracle floor 146/258, psd-tools 238/309; G1: 32-bit Brightness/Contrast legacy, Channel Mixer, Photo Filter and Black & White tint unclipped as in Photoshop, Photoshop-oracle floor 149/258; G1: mask feathers blur with their exact variance, psd-tools oracle floor 240/309; G1: Threshold splits on Photoshop's luminosity, psd-tools oracle floor 241/309; G1: pass-through clipping base with an adjustment renders isolated, psd-tools oracle floor 240/309; G1: 16-bit Posterize as Photoshop bins it, psd-tools oracle floor 241/309; G1: Gradient Map driven by the W3C luminosity, Photoshop-oracle floor 147/258; G7: Field Blur's on-canvas pins, #3373; G4: Hue Jitter amount track, #3825 partial; G4: minimum field interaction, #3825 partial; G1: CMYK Invert, Posterize and Threshold on the inks, 16-bit Lab Invert; Photoshop-oracle floor 145/258; G11: .atn import maps 112 events: Select and Mask, Filter Gallery Spatter, Ripple, Crystallize, Pattern Fill layers, mask targeting, Step Backward, nudges in points, Bitmap mode; G5: Free Transform H/V skew fields; G9: toolbar tool shortcut editing; refreshed against main: G2, G5, G7, G9, G10, G13, G14, G17 items that landed; G10: DPX read and write, #1049; G4: checkbox-only Brush Settings rows; G11: Load/Save Actions .atn landed, AUTO-219-2 partial; G5: hold-a-key spring-loaded tools landed, #2672; G1: #2465 fixed; stale missing-tool rows corrected: Color Replacement, Red Eye and Add/Delete Anchor Point are live tools, so only Art History Brush is missing; no estimate changed) · Target: Adobe Photoshop 2026

Every known shortfall against Photoshop 2026 (27.11.0), one entry each, ranked by user impact on the way to beta. This is the work list agents pick from: take the highest-ranked entry that nobody is working on, and when you close part of one, update its evidence and estimate here and the matching parity doc. Numbers come from target-app-parity.md; checklist ids (TOOL-…, FILE-…, UI-…) are rows in scorecard.md; #n are GitHub issues.

No gap blocks alpha: the alpha gate passes. "Blocks beta" marks what stands between alpha and beta.

Hours are Opus 5.5 agent-hours, one agent working sequentially, including tests. Human marks what an agent can't finish alone.

Summary

# Gap Kind Impact Estimate Parity doc
G1 PSD fidelity and Photoshop acceptance file format blocks beta 150–250 h file-format-parity
G2 Interactive performance performance blocks beta 200–350 h scorecard
G3 User-reported bug backlog stability, UI blocks beta 250–400 h target-app-parity
G4 Brush feel UI / painting high 100–180 h brush-parity
G5 Transform, handles and modifiers UI high 60–110 h ui-parity
G6 Missing tools (12) features high 60–100 h ui-parity
G7 Workspaces shown as parameter dialogs features high 80–140 h target-app-parity
G8 Type depth features high 120–200 h target-app-parity
G9 Panels, preferences and workspace UI medium-high 150–250 h ui-parity
G10 Missing and partial file formats file format medium 120–220 h file-format-parity
G11 Actions and scripting ecosystem medium 120–200 h target-app-parity
G12 Pen tablets and display hardware hardware medium 80–150 h hardware-parity
G13 Languages: Hindi, Arabic, Vietnamese, RTL, engine messages localization medium 80–140 h + human localization-parity
G14 Camera Raw depth features, formats medium 120–200 h file-format-parity
G15 AI and generative features AI medium (high for some users) 300–600 h + human target-app-parity
G16 Plug-in compatibility (.8BF, UXP) ecosystem medium 250–450 h + human target-app-parity
G17 Platforms and distribution platforms low-medium 30–60 h + human scorecard

Feature gaps

G1. PSD fidelity and Photoshop acceptance

G6. Missing tools

G7. Workspaces shown as parameter dialogs

G8. Type depth

G11. Actions and scripting

G14. Camera Raw depth

G15. AI and generative features

G16. Plug-in compatibility

UI / UX gaps

G3. User-reported bug backlog

G4. Brush feel

G5. Transform, handles and modifiers

G9. Panels, preferences and workspace

G2. Interactive performance

File-format gaps

G10. Missing and partial file formats

Hardware gaps

G12. Pen tablets and display hardware

Localization gaps

G13. Hindi, Arabic, Vietnamese, RTL and engine messages

Platform gaps

G17. Platforms and distribution

Revision history

Date Change Summary
2026-10-22 minor G17: Help › Check for Updates and an opt-out check once per launch (#5485), DIST-220-1 partial; estimate unchanged
2026-10-22 minor G1: 32-bit Hue/Saturation unclipped with Photoshop's saturation factor, bright colours keep their hue, Colorize's saturation scaled by 1 − |Lightness|; photoshop rgb32 hue-saturation and hue-saturation-colorize pass; Photoshop-oracle floor 188 → 190 of 258 (#5781)
2026-10-21 minor G9: adjustment clipping remains visible in compact Properties (#5231); no readiness percentage or estimate changed
2026-10-21 minor #8304: compound layer properties export as separate Set events, rename last; independent Photoshop replay pending; percentages and estimates unchanged
2026-10-21 minor G11: Batch and droplets take the result at the action's recorded Save / Save As step (Photoshop's "Override Action 'Save As' Commands"); estimate unchanged
2026-10-22 minor G8: Auto / Left-to-right / Right-to-left paragraph direction buttons in the Paragraph panel, Properties and the Type options bar (#6793); TYPE-218-2 partial (the visual RTL caret is still missing, and PSD doesn't store the direction yet)
2026-10-19 minor G10: JPEG Options dialog landed (FILE-215-19 partial: no Matte, progressive Scans or size preview); no readiness percentage or estimate changed
2026-10-19 minor G11: .atn steps that select another open document by offset import as document.activate {"offset"}, play and save back (#7103); estimate unchanged
2026-10-19 minor G11: a recorded Save As imports with its format and file (file.saveAs, file.saveACopy for As a Copy) instead of as a plain Save that wrote over the played file, #7102; folder destinations stop playback until #5430
2026-10-18 minor G13: Russian gained the 1,229 dynamic UI labels other catalogs already had (filter and adjustment parameters, Camera Raw, lighting, History/Layers/paths menus, metadata, System Info, status templates, dialogs); engine messages and native review remain open
2026-10-17 minor Classical Object Finder improvement; learned segmentation remains open
2026-10-15 minor G10: Cineon write landed (10-bit log gray/RGB, Save As .cin)
2026-10-14 minor G1: 32-bit Hue/Saturation unclipped (slider on whole levels) and Colorize's saturation scaled by 1 − |Lightness|; photoshop rgb32 hue-saturation and hue-saturation-colorize pass
2026-10-14 minor G1: Lab adjustment layers' results are whole samples (native Lab path); photoshop lab8 curves passes
2026-10-19 minor G9: Color panel modes, ramp and copy commands from its panel menu, the same in every theme (UI-217-17 done, #6000)
2026-10-15 minor G1 / #5972 A1: render only provably constant-RGB GdFl noise fills; variable noise synthesis remains open
2026-10-20 minor G10: .asl layer style library import and export landed (#1051)
2026-10-18 minor G9: with no selection, Copy takes fill and adjustment layers whole and Paste recreates them (#2344); UI-217-23 stays partial (a single pixel layer copies its pixels only); estimate unchanged
2026-10-17 minor G11: .atn Apply Layer Comp imports, plays and exports by comp name (#7101); other reference forms remain unsupported
2026-10-15 minor G2: a cancelled 24 MP Gaussian Blur job stops within 44 ms max (P25, budget 200 ms; was about 400 ms; local runs, baseline not re-run), the uncancelled job on a locked-transparency layer about 40% faster; #6205
2026-10-15 minor G9: Animated Zoom preference takes effect (hold the Zoom tool to zoom continuously, #6210); prefs that do nothing 25 of 166; no estimate changed
2026-10-16 minor G7: Content-Aware Move's live preview covers every selection the command takes (over 256 × 256: a coarse result solved scaled down, then the exact one); TOOL-213-4 done (#6680)
2026-10-15 minor G9: Save in Background off saves in the foreground under a modal progress dialog (#6207); preferences that do nothing 25 → 24 of 169
2026-10-14 minor G1: PSD smart objects keep Transform Warp's Cylinder through Replace Contents, Relink, Edit Contents and re-saves (#4112)
2026-10-15 minor G8: area type: Type tool click inside a closed path or shape wraps text inside it (TYPE-218-10); Type tool click on a path's outline (TYPE-218-1); Type scorecard 5 done, 4 partial, 1 missing
2026-10-14 minor G14: the Nikon D4 profile's white level follows the sample depth, so 12-bit D4 NEFs no longer open 2.6 stops dark (#5978); gap remains open
2026-10-14 minor G4: independent Brush Pose X/Y overrides across UI/import/painting/commands (#3825 partial); legacy combined input retained; no readiness percentage or estimate changed
2026-10-14 minor G4: existing Brush Settings section locks expose accessible names/state and visible keyboard focus (#3477 workflow); no readiness percentage or estimate changed
2026-10-13 minor G4: Transfer Wetness/Mix tool applicability (#3825, partial); no readiness percentage or estimate changed
2026-10-14 minor G1: a PSD smart object's filter mask shows when the file opens (Photoshop stores the filtered pixels unmasked); export stores them that way too; Photoshop-oracle floor 185 → 188 of 258
2026-10-14 minor G14: a Nikon NEF's Adobe RGB preview is read as Adobe RGB (maker-note ColorSpace 0x001E); gap remains open
2026-10-13 minor G14: D90 image area measured (4288 × 2848 at (10, 10)); gap remains open
2026-10-14 minor Corpus floors raised to the measured results of the CMYK, Lab, 32-bit, Levels, Threshold, Posterize, feather and pass-through fixes landed together: Photoshop-authored 165 → 185 of 258, io 146 → 148 of 170, psd-tools 242 → 249 of 309
2026-10-13 minor G1: generated large-file fixtures (20 MP, 150 layers, 2 GB PSD, 4.38 GB PSB) round-trip in io tests/it/large_files.rs; the 4.38 GB PSB opens on Windows through io (#375 evidence); FILE-216-2 done (#5107)
2026-10-13 minor G1: CMYK Hue/Saturation and Color Balance work on C, M and Y as inverted RGB with black kept, as Photoshop does; cmyk hue-saturation 100% → 0.4–0.7% bad pixels, color-balance 74% → 25%; floor unchanged
2026-10-13 minor G1: CMYK Posterize works on the stored values (1 − ink); psd-tools posterize_cmyk passes; psd-tools floor → 242 of 309
2026-10-13 minor G1: CMYK stacks with Invert, Posterize, Threshold, Brightness/Contrast, Levels or Curves layers composite on the document's own inks (14 CMYK oracles pass); Photoshop-oracle floor 151 → 165 of 258
2026-10-13 minor CMYK Threshold compares the Rec. 601 luma of the inks' plain complement, as Photoshop does (every pixel of cmyk8/16 threshold-128.psd); oracle bad pixels 1.6% → 0.2%
2026-10-13 minor G1: CMYK Brightness/Contrast (modern and legacy) curves each ink's stored value as Photoshop does; oracle bad pixels 71% → 48–57%, floor unchanged
2026-10-13 minor G1: modern Brightness/Contrast's brightness curve refit to Photoshop (six oracles pass); Photoshop-oracle floor 145 → 151 of 258
2026-10-13 minor G1: Lab documents composite Invert, Posterize, Threshold, Brightness/Contrast and Lab Levels/Curves on their stored L, a, b (no clipped RGB round trip); seven Lab oracles pass; Photoshop-oracle floor 145 → 152 of 258
2026-10-13 minor G1: Levels round every step to whole levels and use Photoshop's shadow toe (slope 2^gamma); levels_rgb and stack-levels-curves-hue-posterize pass; Photoshop-oracle floor 145 → 146 of 258, psd-tools 236 → 238 of 309
2026-10-13 minor G1: 32-bit legacy Brightness/Contrast (pivot 127), Channel Mixer (1/1024 steps, constant ×255/512), Photo Filter and Black & White tint unclipped as Photoshop computes them, CPU and GPU; Photoshop-oracle floor 145 → 149 of 258
2026-10-13 minor G1: mask feathers blur with exactly the feather's variance; psd-tools mask-parameters-no-real-channel passes, layer_mask_data 27 % → 4 % off; psd-tools floor → 240 of 309
2026-10-13 minor G1: Threshold splits on Photoshop's luminosity of whole samples (8- and 16-bit rules exact on four oracles); psd-tools threshold_rgb and threshold_16bits_rgb pass; psd-tools floor → 241 of 309
2026-10-13 minor G1: a pass-through group that is a clipping base and holds an adjustment layer renders isolated; psd-tools passthrough_clipping_mask_adjustment passes; psd-tools floor → 240 of 309
2026-10-13 minor G1: 16-bit Posterize bins the 16-bit sample, as Photoshop does (exact on two oracles); psd-tools floor → 241 of 309
2026-10-13 minor G1: Gradient Map driven by the W3C luminosity (0.3, 0.59, 0.11), as Photoshop is; rgb8/rgb16 gradient-map pass; Photoshop-oracle floor 145 → 147 of 258
2026-10-14 minor G9: Character/Paragraph defaults before creating text (#5556); no percentage or estimate changed
2026-10-13 minor G6: stale "missing tool" list corrected against main — Color Replacement (paint.colorReplacement), Red Eye (paint.redEye) and Add/Delete Anchor Point (P flyout, #4144) are live tools, so the toolbox is 67 of 68 and Art History Brush is the only one missing; no percentage or estimate changed
2026-10-13 minor G10: Amiga IFF/ILBM read landed (1–8 planes, CMAP, stored and ByteRun1); IFF write remains open
2026-10-13 minor G8: a Type tool click on the work path or the active shape layer's path starts type on it at the point clicked (TYPE-218-1, partial); no readiness percentage or estimate changed
2026-10-13 minor G4: Hue Jitter amount-track appearance (#3825, partial); no readiness percentage or estimate changed
2026-10-13 minor G4: minimum inputs in Shape Dynamics and Transfer follow their Control (#3825, partial); no readiness percentage or estimate changed
2026-10-12 minor G5: Free Transform options bar H/V skew fields done
2026-10-12 minor G11: .atn import maps 112 events (Select and Mask, Spatter, Ripple, Crystallize, Pattern Fill, mask targeting, Step Backward, points, Bitmap)
2026-10-12 minor G9: toolbar tool shortcut editing (#4086); the remaining workspace gaps stay open
2026-10-12 minor G1: #2465 (CS2 PlLd-only smart objects) marked fixed
2026-10-12 minor G1: CMYK Invert, Posterize and Threshold work on the inks, 16-bit Lab Invert keeps greys neutral; Photoshop-oracle floor 133 → 145 of 258 (145 already passed on main)
2026-10-12 minor G5: spring-loaded tool letters done (#2672)
2026-10-13 minor G10: Cineon read landed (10-bit gray/RGB, shares the DPX path); Cineon write remains open
2026-10-12 minor G10: DPX read and write (#1049); Cineon remains open
2026-10-12 minor G4: checkbox-only Brush Settings rows preserve the open controls and Smoothing settings (#4283); no readiness percentage or estimate changed
2026-10-11 minor G8: the live Warp Text preview (TYPE-218-7) moved to done; TYPE-218-9 listed as done; Type evidence recounted to 5/3/1 (TYPE-218-1 type on a path is partial on main)
2026-10-12 minor G11: Load/Save Actions .atn landed (AUTO-219-2 partial); remaining panel work listed
2026-10-12 minor Refreshed against main: G5 items fixed by #2480, #2327, #2609, #2684, #2675, #2556, #2396, #2527, #2625 and TOOL-214-5/#2442; G7 TOOL-214-7 and Transform On Drop done; G2 #2377 fixed (#2417); G9 UI scale (UI-217-9) and Stamp Visible (UI-217-22) done, prefs 27 of 156; G10 #2225 done (#2482); G13 Khmer, Lao, Myanmar fallback (#3259); G14 CR3 line; G17 Windows ARM64 done (DIST-220-2)
2026-10-11 minor G7: Tilt-Shift's band (lines, turn dots) and Spin Blur's pins (outline handles, blur-angle ring) on the image; Path Blur remains a dialog
2026-10-11 minor G7: Iris Blur's pins, outline, roundness and feather handles on the image too; Tilt-Shift, Spin and Path Blur remain dialogs
2026-10-11 minor G7: Field Blur pins are placed, dragged and tuned on the image (#3373); the other Blur Gallery filters remain dialogs
2026-10-11 minor D5100 image area and Camera Raw tuning validation; G14 remains open
2026-10-11 minor G13: Czech dynamic UI text localized; engine messages and native review remain open
2026-10-11 minor G8: triple/quadruple/five-click type selection done (TYPE-218-8, #3493); Type evidence recounted
2026-10-11 minor G4: Pattern Stamp and Background Eraser draw live, Spot Healing shows a dark overlay while dragging (#3754); only the Mixer Brush is left of TOOL-213-7
2026-10-11 minor G8: Character panel OpenType buttons landed (TYPE-218-5, #3752); Numerals and Stylistic Sets submenus still missing
2026-10-11 minor G10: one-page flattened PDF write shipped (io::pdf, #3401); FILE-215-10 now partial
2026-10-10 minor G2: recorded Tilt-Shift computation/filtered-proxy measurements and limits; gap and estimate remain open
2026-10-10 minor Checked against the alpha gate (no alpha blockers); #2374 marked closed
2026-10-10 major First version, from the full re-measure against Photoshop 2026 27.11.0 and the open issues