最新资讯
dev.to 我们在 DolphinBench 上测试记忆检索:纯关键词搜索暴露了自身回归 dev.to 别再把 Agent 写成 while 循环,把它建模为状态机 bloomberg.com Rightmove 与 Scout24 借 AI 产品应对低迷房市并上调展望 stackoverflow.blog 欢迎来到芯片时代:半导体制造、AI 数据中心与芯片设计的未来 www.youtube.com AI Agent 总犯同样的错:CentralAgent AI 将记忆重构为经验系统 pub.towardsai.net Netflix 科学家建议重采样 LLM 评判:5 次仅将误差棒缩小 13% pub.towardsai.net Jev 作为 LLM 前的静默层:构建提示感知的模型路由器 reddit.com OpenAI 称 Astra 仅满足 10% 安全任务标准 dev.to FreeToken:在自有 GPU 上运行前沿 MoE 模型及其内存需求 dev.to 当 AI Agent 说“完成”时,究竟完成了什么? dev.to 部署 Underdog Bark 3.0 Pro:逐字转写、自定义后端与分块设置 dev.to 为艰难对话构建 AI:五个 Agent、一条安全正则与一位盲评监督者
多元动态
登录 注册
智能体 github.com · @storytold

storytold/photocraft v0.3.0 发布:新增多语言界面与 Agent 自动化能力

原文 我的收藏

photocraft 发布 v0.3.0,自 0.2.0 以来合并 183 个 PR、182 次提交,关闭 146 个 issue。更新包括:崩溃后恢复未保存文档、深层嵌套 .pcraft 文件可重新打开、CLI batch 拒绝覆盖输入目录、偏好设置并发保存不再丢失;界面新增日语、简体中文、繁体中文、西班牙语、俄语和捷克语,Type 工具支持 CJK 字体与 IME 输入;JPEG 等无 alpha 导出在白底合成透明、无色彩配置文件格式回退 sRGB、截断 JPEG 与多帧文件打开时给出警告、Save As/Export As 支持 TGA;编辑方面支持 Free Transform a Copy、键盘图层导航、数字键调透明度、Alt 点击取色、从剪贴板新建、撤销重做恢复目标图层;自动化方面改进 CLI/MCP/控制通道的参数与 flag 报错和 --help,支持 Agent 等待或轮询的后台任务,录制动作可在 batch 中运行。该版本首次附带 docs/scorecard.md,作为基线:性能 46 个场景中 3 个在预算内、22 个超预算或失败;133 项设置中 60 项无效(目标为 0);626 个菜单项全部可用;26 个 crate 全部通过 never-crash lint。

AI推荐理由 官方 GitHub Release 说明,信息密度高且含可验证的 scorecard 基线数据(如 46 个性能场景中仅 3 个达标、133 项设置中 60 项无效),并明确列出 CLI/MCP/控制通道等 Agent 自动化能力(后台任务可等待或轮询、录制动作可在 batch 中运行)。局限:这是图像编辑工具的功能更新,与 AI 模型、芯片算力等核心议题关联较弱;scorecard 自述为首次基线,不能据此推断整体成熟度。

62

正文

Official release notes (https://github.com/storytold/photocraft/releases/tag/v0.3.0) ## Highlights since 0.2.0 182 commits from 183 merged pull requests, including work from 31 community contributors (thank you!), and 146 issues closed. - **Your work is safer:** - Recovered unsaved documents survive a second crash. - Deeply nested `.pcraft` files reopen. - `photocraft-cli batch` refuses to overwrite its input folder. - Preferences no longer get lost when two windows or tabs save, or when a save fails. - **Languages:** the interface is available in 日本語, 简体中文, 繁體中文, Español, Русский and Čeština (Edit › Preferences › Interface › Language), with CJK fonts and IME input in the Type tool. - **Files:** - JPEG and other no-alpha exports composite transparency over white. - Formats without colour profiles get sRGB. - Truncated JPEGs and multi-frame files open with a warning instead of silently. - TGA is offered in Save As and Export As. - **Editing:** - Free Transform a Copy and Transform Again on a Copy. - Keyboard layer navigation, number keys for opacity, Alt-click colour sampling. - New from Clipboard. - Undo and redo restore the targeted layer. - Shortcuts pressed in quick succession all run, in order. - **Automation (CLI, MCP, control channel):** - Stricter, clearer parameter and flag errors, and ` --help`. - Background jobs that agents can wait for or poll. - Recorded actions run in `batch`. ## Scorecard This is the first release with [`docs/scorecard.md`](https://github.com/storytold/photocraft/blob/v0.3.0/docs/scorecard.md), so these numbers are its baseline. 0.2.0 had no scorecard to compare against. Area counts are done / partial / missing. | Area | Done | Partial | Missing | Measured | |---|---|---|---|---| | Performance | 3 | 22 | 12 | 46 scenarios: 3 within budget, 22 over budget or failing, 13 tracked only, 4 not run, 8 not yet measurable (baseline 2026-10-05) | | File compatibility | 1 | 8 | 18 | io corpus oracle ≥ 146/170, round trip ≥ 169/170; psd-tools oracle ≥ 229/309, round trip ≥ 307/309; Photoshop-authored oracles ≥ 130/256, round trip 258/258 | | Tools | 3 | 14 | 13 | | | Workspace and UI | 0 | 4 | 19 | settings that do nothing: 60 of 133 (target 0) | | Type | 0 | 3 | 6 | | | Automation | 1 | 3 | 7 | 626 of 626 menu items live | | Reliability | 3 | 1 | 3 | never-crash lints on 26 of 26 crates; `panic_hunt` fuzzes every command | | Distribution | 4 | 3 | 4 | | | Open bugs | 0 | 3 | 29 | | ## What's Changed * perf(compose): avoid unnecessary backdrop snapshots by @MikeeI in https://github.com/storytold/photocraft/pull/109 * perf(compose): prepare gradient stops outside pixel loops by @MikeeI in https://github.com/storytold/photocraft/pull/103 * Fix stale effect maps after default-only mask changes by @MikeeI in https://github.com/storytold/photocraft/pull/105 * Preserve HDR samples when importing white-matted PSD composites by @MikeeI in https://github.com/storytold/photocraft/pull/106 * Mix pass-through group coverage in premultiplied space by @MikeeI in https://github.com/storytold/photocraft/pull/108 * perf(compose): avoid redundant effect-halo rendering by @MikeeI in https://github.com/storytold/photocraft/pull/110 * Preserve merged PSD alpha at the exported sample precision by @MikeeI in https://github.com/storytold/photocraft/pull/111 * perf(compose): reuse compiled vector masks within each render by @MikeeI in https://github.com/storytold/photocraft/pull/112 * perf(compose): reuse bounded pattern preparation across render tiles by @MikeeI in https://github.com/storytold/photocraft/pull/104 * fix(ui): pasting an image copied in another app never ran by @tiredIsa in https://github.com/storytold/photocraft/pull/102 * fix(ui): make Move transform controls interactive by @Ni-zav in https://github.com/storytold/photocraft/pull/99 * Menu overlap and overflow #92 by @Ni-zav in https://github.com/storytold/photocraft/pull/98 * PR #96 — Liquify undo by @Ni-zav in https://github.com/storytold/photocraft/pull/97 * fix(ui): shape tools show the shape while dragging by @sommerper in https://github.com/storytold/photocraft/pull/87 * security: bound automation previews and reply resources by @Gh0stlyKn1ght in https://github.com/storytold/photocraft/pull/93 * Japanese support: IME input in the Type tool and CJK glyphs in the UI by @kntrttm in https://github.com/storytold/photocraft/pull/101 * Community batch follow-ups: on-demand OS clipboard paste; fmt + egui 0.36 test port by @echelon in https://github.com/storytold/photocraft/pull/134 * perf(ui): borrow the active layer from its document snapshot by @MikeeI in https://github.com/storytold/photocraft/pull/121 * perf(ui): reuse exact cached content bounds by @MikeeI in https://github.com/storytold/photocraft/pull/116 * perf(ui): skip offscreen layer thumbnail generation by @MikeeI in https://github.com/storytold/photocraft/pull/117 * perf(ui): retain channel thumbnails across view-only revisions by @MikeeI in https://github.com/storytold/photocraft/pull/120 * fix(ui): prune thumbnails for removed layers and documents by @MikeeI in https://github.com/storytold/photocraft/pull/119 * fix(ui): prune closed-document display and preview resources by @MikeeI in https://github.com/storytold/photocraft/pull/118 * Disambiguate colliding document identities at session admission by @MikeeI in https://github.com/storytold/photocraft/pull/114 * Warn when the PSD channel limit drops a Quick Mask by @MikeeI in https://github.com/storytold/photocraft/pull/115 * Preserve compositing properties in single-layer flat export by @MikeeI in https://github.com/storytold/photocraft/pull/122 * Preserve selected real masks during PSD import by @MikeeI in https://github.com/storytold/photocraft/pull/130 * Scale artboard bounds in proxy documents by @MikeeI in https://github.com/storytold/photocraft/pull/131 * Crop tool: move and resize the crop frame, Space repositions while drawing by @echelon in https://github.com/storytold/photocraft/pull/132 * Fix flaky canvas_geom undo test (process-wide text gamma raced by another test) by @echelon in https://github.com/storytold/photocraft/pull/135 * Dock: fixed-height panel groups, splitters, collapse, reorder; panels never vanish by @echelon in https://github.com/storytold/photocraft/pull/139 * Brush Settings panel: Photoshop structure and depth, edits through tools.setBrush by @echelon in https://github.com/storytold/photocraft/pull/136 * Selecting current bit depth must preserve redo by @MikeeI in https://github.com/storytold/photocraft/pull/133 * Detect PhotoCraft archives independent of ZIP entry order by @MikeeI in https://github.com/storytold/photocraft/pull/137 * Type tool: caret/selection land on the glyph under the pointer; font size is live, one undo step, ~60x faster (#123, #124) by @echelon in https://github.com/storytold/photocraft/pull/142 * Layers groups expand/collapse (#126); every displayed shortcut fires (#127) by @echelon in https://github.com/storytold/photocraft/pull/141 * Layers rows: names never run under the indicators; fx triangle; Collapse All Groups; designer PSD for QA by @echelon in https://github.com/storytold/photocraft/pull/167 * fix(geom): saturate Rect::translate and inflate on i32 overflow by @kevin9327 in https://github.com/storytold/photocraft/pull/159 * fix(ui): make tall menus scrollable on short displays by @Ni-zav in https://github.com/storytold/photocraft/pull/160 * PSD type layers: bounds regression tests; #148 is the layer's vector mask, not text bounds by @echelon in https://github.com/storytold/photocraft/pull/165 * Flatpak single-file bundles as release artifacts by @echelon in https://github.com/storytold/photocraft/pull/163 * Roadmap: honest parity assessment (2026-10-05) by @echelon in https://github.com/storytold/photocraft/pull/182 * AGENTS.md: no Tauri, Electron or webview shells by @echelon in https://github.com/storytold/photocraft/pull/184 * Menus scroll and navigate by keyboard on small displays; Color Range dialog on the no-GPU path (#145, #138) by @echelon in https://github.com/storytold/photocraft/pull/168 * Docs: where we stand and where we're going (roadmap, README, AGENTS.md) by @echelon in https://github.com/storytold/photocraft/pull/186 * Brushes: Tilt Scale, Brush Projection, Spacing checkbox, section locks, Mixer Wetness/Mix; Brushes grid + drag and drop; options bar through tools.setBrush by @echelon in https://github.com/storytold/photocraft/pull/174 * fix(ui): refresh Liquify preview after undo by @Ni-zav in https://github.com/storytold/photocraft/pull/175 * fix(ui): sample eyedropper colours while dragging by @Ni-zav in https://github.com/storytold/photocraft/pull/176 * fix(ui): keep Curves endpoint handles inside the graph area by @Ni-zav in https://github.com/storytold/photocraft/pull/177 * fix(ui): avoid duplicate sliders for wide filter ranges by @Ni-zav in https://github.com/storytold/photocraft/pull/179 * Dock polish: Layers gets the height, Character/Paragraph group, eliding tab strips, reveal the active layer (#147, #150, #151, #152) by @echelon in https://github.com/storytold/photocraft/pull/181 * Move/Free Transform modifier keys (#90); sharp full-resolution transform preview (#91) by @echelon in https://github.com/storytold/photocraft/pull/183 * CJK UI font fallback: Simplified/Traditional Chinese and Korean, lazily loaded in locale order (#149) by @echelon in https://github.com/storytold/photocraft/pull/185 * Layers mask thumbnails + chains; Channels/Paths temporary rows and footers (#153, #154) by @echelon in https://github.com/storytold/photocraft/pull/191 * GPU compositor: paged residents and effect maps, so 20k+ documents refresh on the GPU (#49) by @echelon in https://github.com/storytold/photocraft/pull/187 * Properties: uniform sections, per-kind Quick Actions, full-width controls (#155) by @echelon in https://github.com/storytold/photocraft/pull/192 * PSD corpus: psd-tools set (pinned, verified), an oracle for every file, and the fixes it found by @echelon in https://github.com/storytold/photocraft/pull/195 * Tool feedback: selection-mode cursor badges, scrubby zoom, contrasting outlines, Shift lines by @echelon in https://github.com/storytold/photocraft/pull/188 * PSD fidelity: 16/32-bit colour modes, Lab, Levels, Exposure, Dissolve oracle (corpus 133 → 140, psd-tools 212 → 222) by @echelon in https://github.com/storytold/photocraft/pull/202 * Fix tests on FreeBSD with RADV by @mekanix in https://github.com/storytold/photocraft/pull/194 * fix(clipboard): use the wayland clipboard for images by @nuIIpointerexception in https://github.com/storytold/photocraft/pull/222 * FreeBSD: build and test the workspace in a FreeBSD VM by @echelon in https://github.com/storytold/photocraft/pull/223 * Fix automatic UI scaling on 4K monitors by @john8675309 in https://github.com/storytold/photocraft/pull/225 * FreeBSD: serialise canvas GPU tests, CI template, RAM detection, CJK font paths by @echelon in https://github.com/storytold/photocraft/pull/227 * Title bar: never draw the window title over the menus or controls by @echelon in https://github.com/storytold/photocraft/pull/241 * Packaging: Linux runtime deps + start-up library check (#201); wasm 26.3 -> 18.8 MiB (#198) by @echelon in https://github.com/storytold/photocraft/pull/237 * Fix live brush preview drawing a polygon (#189) by @echelon in https://github.com/storytold/photocraft/pull/240 * PSD effects fidelity: spread metric, emboss, gradient geometry, text gamma (113 -> 118 oracle passes) by @echelon in https://github.com/storytold/photocraft/pull/224 * Scorecard: cargo xtask perf + scorecard, budgets, checklists, nightly perf (#221) by @echelon in https://github.com/storytold/photocraft/pull/239 * Layout documents: fix GPU device loss, live Move tool, local damage, no per-frame work (#125, #128) by @echelon in https://github.com/storytold/photocraft/pull/226 * PSD export: write tagged blocks other readers can parse (#200) by @echelon in https://github.com/storytold/photocraft/pull/236 * CR2: measure the colour filter row phase instead of assuming RGGB (#193) by @echelon in https://github.com/storytold/photocraft/pull/244 * Atomic saves: one crash-safe atomic_write for every document write by @echelon in https://github.com/storytold/photocraft/pull/230 * Preferences: wire tooltips, Home screen, recent files; hide what nothing reads by @echelon in https://github.com/storytold/photocraft/pull/245 * Eraser on locked layers: no lock-out from the simple lock button; Stroke Path erases to the background colour (#76) by @echelon in https://github.com/storytold/photocraft/pull/229 * Retouch tools paint the mask/channel target; Sample All Layers for Blur/Sharpen/Smudge; premultiplied Smudge (#207) by @echelon in https://github.com/storytold/photocraft/pull/234 * Free Transform: selection moves only its part of a linked mask; masked preview; target masks and channels (#205) by @echelon in https://github.com/storytold/photocraft/pull/242 * Vertical type (tategaki): lay out, render, edit and round-trip (#199) by @echelon in https://github.com/storytold/photocraft/pull/246 * PSD stroke effects: outlines of filled shapes, vector stroke above interior effects, joined subpaths by @echelon in https://github.com/storytold/photocraft/pull/233 * Live gradients: Gradient tool makes editable Gradient Fill layers (on-canvas handles, stops, midpoints) + Classic mode (#180) by @echelon in https://github.com/storytold/photocraft/pull/197 * Marquee: Shift squares, Alt draws from the centre, live W × H readout (#208) by @echelon in https://github.com/storytold/photocraft/pull/247 * GPU: crash-safe startup and device-loss fallback (#243, #4) by @echelon in https://github.com/storytold/photocraft/pull/252 * Text: deterministic font family order; hide private system families (fixes a flaky test) by @echelon in https://github.com/storytold/photocraft/pull/264 * Photoshop oracles via storytold/photocraft-corpus: pinned corpora, corpus feature, test-corpus, CI job by @echelon in https://github.com/storytold/photocraft/pull/190 * Masks: Alt-click to view mask, Cmd-click vector mask to select, vector-mask target brackets (#196) by @echelon in https://github.com/storytold/photocraft/pull/256 * Stylus pressure, tilt, rotation and eraser on macOS and X11 by @echelon in https://github.com/storytold/photocraft/pull/255 * Fix Windows MSI advertised shortcut icons by @CQMHV in https://github.com/storytold/photocraft/pull/238 * Windows taskbar icon: .exe icon id for the MSI shortcut + icon regression tests (#248) by @echelon in https://github.com/storytold/photocraft/pull/269 * Colours: handle non-hex Unicode values without an internal error by @storybored379 in https://github.com/storytold/photocraft/pull/261 * Align the CJK fallback font's baseline with Latin text by @kntrttm in https://github.com/storytold/photocraft/pull/260 * UI: platform shortcut notation in every label and tooltip (#251) by @tiredIsa in https://github.com/storytold/photocraft/pull/262 * New Document: a typed Width/Height reaches Create (#254) by @echelon in https://github.com/storytold/photocraft/pull/270 * Menus are as tall as their items; scroll only when the window is too short (#235) by @echelon in https://github.com/storytold/photocraft/pull/272 * Portable mode: keep settings beside the exe in the Windows portable zip (#228) by @echelon in https://github.com/storytold/photocraft/pull/267 * Brush Settings for every brush: options-bar toggle and real preset picker (#258) by @echelon in https://github.com/storytold/photocraft/pull/268 * Ctrl+Alt-drag resizes the brush on the canvas (#231) by @echelon in https://github.com/storytold/photocraft/pull/271 * Shift rubber band: preview the straight line before the click (#257) by @echelon in https://github.com/storytold/photocraft/pull/273 * Selection drag previews: regression tests for #253 (visible mid-drag, 1x and 2x) by @echelon in https://github.com/storytold/photocraft/pull/274 * Shortcuts: rebindable fill keys, D/X and held temporary tools (#249) by @echelon in https://github.com/storytold/photocraft/pull/275 * PSD manual and optical kerning: import, export, render, edit (#206) by @echelon in https://github.com/storytold/photocraft/pull/259 * Localise the UI: i18n foundation and a Japanese catalog (menus, dialogs, panels) by @kntrttm in https://github.com/storytold/photocraft/pull/169 * Pencil tool, Edit › Fill… dialog and "Rasterize?" prompt (#213) by @echelon in https://github.com/storytold/photocraft/pull/279 * Fast Select › Modify › Smooth and Feather (part of #211) by @echelon in https://github.com/storytold/photocraft/pull/280 * Compositor: effect maps never block inside parallel tiles (fixes #276 deadlock) by @echelon in https://github.com/storytold/photocraft/pull/281 * FreeBSD release tarball and README platform lines by @echelon in https://github.com/storytold/photocraft/pull/284 * fix: forward document index in bridge inspection by @kuishou68 in https://github.com/storytold/photocraft/pull/287 * Marquee: stop the selection at the canvas edge by @Multipad-cyber in https://github.com/storytold/photocraft/pull/263 * Background layer: double-click, masks and cut behave like Photoshop by @Multipad-cyber in https://github.com/storytold/photocraft/pull/266 * i18n: add Simplified Chinese localization by @CQMHV in https://github.com/storytold/photocraft/pull/282 * Enable dictionary segmentation for Japanese type by @midasdf in https://github.com/storytold/photocraft/pull/250 * Smart Objects and Smart Filters survive PSD save and open by @echelon in https://github.com/storytold/photocraft/pull/288 * Apply EXIF orientation on open, write Orientation = 1 on export (#285) by @echelon in https://github.com/storytold/photocraft/pull/318 * PSD export: 32-bit files open in Photoshop (HDR toning Color Mode Data, #291) by @echelon in https://github.com/storytold/photocraft/pull/327 * Windows on ARM64: release builds, PE header check, install test on ARM64 hardware by @echelon in https://github.com/storytold/photocraft/pull/333 * Fix preference usage scanning on CRLF checkouts by @CQMHV in https://github.com/storytold/photocraft/pull/331 * Windows: Alt-click clone hint and Ctrl+N channel errors (#251 follow-up) by @bommerts in https://github.com/storytold/photocraft/pull/336 * Move tool: Auto-Select on by default; a click picks and drags the layer under the pointer (#296) by @echelon in https://github.com/storytold/photocraft/pull/330 * Cmd+Enter (Ctrl+Enter) loads the path as a selection (#306) by @echelon in https://github.com/storytold/photocraft/pull/329 * Layers panel: rename commits on click elsewhere, Enter or Tab; one at a time (#314) by @echelon in https://github.com/storytold/photocraft/pull/326 * Keyboard Shortcuts: Ctrl+F records as Ctrl+F, not Ctrl+ControlLeft (#292) by @echelon in https://github.com/storytold/photocraft/pull/323 * macOS CLI: verify the shipped CLI is Developer ID signed and notarized in the release workflow (#308) by @echelon in https://github.com/storytold/photocraft/pull/320 * fix(ui): feed every pointer move per frame so fast strokes stay smooth by @leonaci in https://github.com/storytold/photocraft/pull/317 * Fix logic Show the clone crosshair only while Option is held by @juansebsol in https://github.com/storytold/photocraft/pull/301 * i18n: add Traditional Chinese (zh-hant) UI catalog by @WildfootW in https://github.com/storytold/photocraft/pull/302 * Add a Spanish catalog (menus, dialogs, panels) by @Mawfyy in https://github.com/storytold/photocraft/pull/299 * Localise the UI into Russian: a complete catalog and the missed tl! call sites by @tiredIsa in https://github.com/storytold/photocraft/pull/298 * Preferences: add an Apply button by @CQMHV in https://github.com/storytold/photocraft/pull/325 * i18n: add Czech (cs) UI translation by @petrleocompel in https://github.com/storytold/photocraft/pull/328 * Menus: no menu or submenu covers the menu bar (#319) by @echelon in https://github.com/storytold/photocraft/pull/337 * Menus stay above the taskbar; oversized windows open maximized (#315) by @echelon in https://github.com/storytold/photocraft/pull/343 * Background jobs: engine job API, progress and cancel (part of #210) by @echelon in https://github.com/storytold/photocraft/pull/289 * Background jobs in the app: progress, Cancel, open-as-job (part of #210) by @echelon in https://github.com/storytold/photocraft/pull/373 * Harden EXIF orientation: limits after rotation, fallible allocation, strict IFD parsing by @echelon in https://github.com/storytold/photocraft/pull/345 * Fonts: use craft-fonts as an optional build input; move the Japanese fonts out by @echelon in https://github.com/storytold/photocraft/pull/353 * Stamp Visible (Cmd+Alt+Shift+E) and Stamp Down; Alt+Merge keeps the originals (#217) by @echelon in https://github.com/storytold/photocraft/pull/356 * Right-click on the canvas lists the layers under the pointer (#307) by @echelon in https://github.com/storytold/photocraft/pull/360 * Canvas scrollbars, and Preferences > Tools > Overscroll works (#300) by @echelon in https://github.com/storytold/photocraft/pull/367 * Alt+right-drag resizes the brush and changes its hardness (#297) by @echelon in https://github.com/storytold/photocraft/pull/370 * Alt+scroll zooms the canvas in 5% steps around the pointer (#293) by @echelon in https://github.com/storytold/photocraft/pull/371 * ui.set: reject unknown fields; the theme error names all five themes (#412, #413) by @bflatastic in https://github.com/storytold/photocraft/pull/437 * serve: `methods` lists jobs.list and jobs.cancel (#414) by @bflatastic in https://github.com/storytold/photocraft/pull/438 * MCP command_batch and serve batch honour each step's `wait` (#415) by @bflatastic in https://github.com/storytold/photocraft/pull/439 * Headless saves without `path` never flatten over the opened file (#416) by @bflatastic in https://github.com/storytold/photocraft/pull/447 * Alt-click with the Brush, Pencil, Gradient or Paint Bucket samples a colour (#417) by @bflatastic in https://github.com/storytold/photocraft/pull/450 * Layers panel: double-click beside a layer's name opens Layer Style (#350) by @bflatastic in https://github.com/storytold/photocraft/pull/452 * Batch runs report inputs that share an output name instead of overwriting (#420, #422) by @bflatastic in https://github.com/storytold/photocraft/pull/448 * New from Clipboard, and Paste with nothing open makes a document (#368) by @bflatastic in https://github.com/storytold/photocraft/pull/458 * CLI: unknown flags are usage errors, ` --help` prints usage, usage lists --quality (#421, #423) by @bflatastic in https://github.com/storytold/photocraft/pull/460 * Liquify remembers its brush settings between uses and launches (#418) by @bflatastic in https://github.com/storytold/photocraft/pull/461 * The main window opens centred on the screen (#419) by @bflatastic in https://github.com/storytold/photocraft/pull/462 * Keyboard layer navigation: Alt+[ / Alt+] / Alt+, / Alt+. and Shift to add (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/470 * Transform Again on a Copy (Cmd+Alt+Shift+T): step and repeat (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/474 * Number keys set opacity, Shift+[ / Shift+] step hardness, Shift+Cmd+A opens Camera Raw (part of #352) by @bflatastic in https://github.com/storytold/photocraft/pull/473 * Export: TGA in Save As and Export As (#363) by @Pedroj-64 in https://github.com/storytold/photocraft/pull/377 * Docs and MCP schema: use the real Gaussian Blur id (#378) by @floflo777 in https://github.com/storytold/photocraft/pull/390 * Image Size shows the one-pixel minimum it applies (#441) by @HEOJUNFO in https://github.com/storytold/photocraft/pull/468 * prefs.reset resets a single colorSettings key (#445) by @HEOJUNFO in https://github.com/storytold/photocraft/pull/467 * Content-Aware Scale: enlarging a 1 px wide or tall layer no longer panics by @Ar-ma Repository README (current repository documentation, not release changes) PhotoCraft Image editing; an open-source, clean-room reimplementation of Adobe Photoshop, rebuilt in pure Rust. Layers, masks, adjustment layers, layer styles, type, vectors, brushes and real PSD files, in a native app written entirely in Rust. Open source, offline, and yours. PhotoCraft on getartcraft.com · ArtCraft · All Crafting Apps A caption card with a drop shadow, live type, and Vibrance and Curves adjustment layers, with the Curves editor open. The Great Wave off Kanagawa, Katsushika Hokusai, c. 1831 > [!NOTE] > **ArtCraft is a community of artists from all walks of life.** Digital, generative, music, > games — if you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).** Features · Everything in the box · PSD · Agents · Under the hood · Get started · Crafting Apps · Discord 🎛️ Familiar by design The menus, shortcuts, panels and tools are where your hands expect them, from ⌘J to ⇧⌘D. If you know Photoshop, you already know PhotoCraft. ⚡ Native and fast A GPU compositor on wgpu (Metal, Vulkan, DX12, WebGPU), copy-on-write tiles and multithreaded filters. No Electron, no web view, no waiting. 🗂️ Real PSD files Open, edit and save layered Photoshop documents. Re-saving keeps the render of 307 of the 309 psd-tools test files. 🤖 Agent-ready Every action is a command, so you can drive the same engine from the UI, the CLI, a JSON control channel or an MCP server. ## Features Every screenshot here is the real app at work on public-domain art, rendered offscreen through its control channel. Levels and Vibrance adjustment layers, with the live Histogram panel. Impression, Sunrise, Claude Monet, 1872 Edit without regret Adjustment layers keep every edit live. Stack Levels, Curves, Vibrance, Hue/Saturation and a dozen more, mask them to an area, reorder them, or turn them off, and your original pixels never change. 16 adjustment layers that also apply directly to pixels, including Curves with per-channel editing, Levels with a live histogram, Black & White, Channel Mixer, Gradient Map, Photo Filter, Selective Color and Color Lookup (.cube, .3dl, .look). Plus Shadows/Highlights, Replace Color, Match Color, HDR Toning, Desaturate and Equalize. Outer Glow and Stroke on a live type layer, in the Layer Style dialog. Earthrise, William Anders / NASA, 1968 Styles that sell the shot Drop Shadow, Inner Shadow, Outer and Inner Glow, Bevel & Emboss, Satin, Stroke, and Color, Gradient and Pattern Overlay, live on any layer, including type. Patterns come from a library (built-ins, Edit › Define Pattern, .pat import/export) and PSD Patt blocks. Copy and paste styles between layers, hide all effects at once, and open styles straight from your PSDs, rendered to match Photoshop. An elliptical selection becomes the mask of a Hue/Saturation layer, so only the face keeps its color. Girl with a Pearl Earring, Johannes Vermeer, c. 1665 Selections that understand your image Marquees, lassos and the Magic Wand for precision; Quick Selection, Object Selection and Select Subject when you want the computer to do the tracing; Select and Mask to refine hair-fine edges. Feather, expand, contract, smooth, grow, reselect. Turn any selection into a layer mask, a vector path or a shape. Smart selection runs on your machine, with no cloud and no account. A headline edited in place, with a byline and a paragraph of body text. Among the Sierra Nevada, California, Albert Bierstadt, 1868 Type that sets beautifully Point and paragraph text, edited right on the canvas, with full Character and Paragraph controls: font, weight, size, leading, tracking, alignment and colour. Type layers stay editable, take layer styles, and round-trip through PSD. A badge made of shape layers: a gradient-filled lotus, a star and a dotted ring. Water Lilies, Claude Monet, 1906 Pixel-perfect vectors Rectangle, Ellipse, Triangle, Polygon, Line and the Pen tool, with resolution-independent shape layers, gradient fills, and dashed, aligned strokes. Combine shapes (unite, subtract, intersect, exclude), keep paths in the Paths panel, use them as vector masks, or stroke and fill them. 116 of 116 shape layers in our PSD corpus match Photoshop's pixels. Twirl previews live on the canvas, only inside the selection. The Starry Night, Vincent van Gogh, 1889 See it before you commit Every filter dialog previews live on the canvas, through your selection. Blurs (Gaussian, Box, Motion, Radial, Surface, Smart, Lens, Shape, and the Blur Gallery: Tilt-Shift, Iris, Field, Spin, Path), sharpening, Reduce Noise, distortions (Twirl, Wave, Ripple, Displace, Shear, Zig Zag…), Pixelate, Stylize (Oil Paint, Wind, Extrude…), Render (Clouds, Fibers, Lens Flare, Lighting Effects) and more. Run filters on a smart object and they stay editable: change, hide, reorder or mask them at any time. Large-radius blurs use running-sum box passes across all cores: a radius-180 Gaussian on 3.6 MP takes under a second. Free Transform on a rotated print, with every step listed in History. The Tetons and the Snake River, Ansel Adams, 1942 Shape it any way you like Free Transform with scale, rotate, skew, distort and perspective; exact 90° and 180° rotations and flips; Transform Again. Layers, type, shapes, masks and selections all transform together. Full history, Toggle Last State and the History Brush mean every step can be undone, even one brush stroke at a time. Export As in the light theme, with a preview and a file-size estimate. The Kiss, Gustav Klimt, 1907–1908 Ship it anywhere Export As with format, quality, transparency and scale, plus a preview and an instant file-size estimate. Quick Export to PNG in one click. Choose a dark Pro theme, the airy Studio themes, or a Classic look. ## Everything in the box 🧰 34 tools Move · Rectangular and Elliptical Marquee · Lasso · Polygonal Lasso · Magic Wand · Quick Selection · Object Selection · Crop · Eyedropper · Brush · Pencil · Mixer Brush · Color Replacement · Eraser · Clone Stamp · Healing Brush · Spot Healing · History Brush · Gradient · Paint Bucket · Blur · Sharpen · Smudge · Dodge · Burn · Sponge · Pen · Path Selection · Type · five Shape tools · Hand · Zoom 🖌️ A real brush engine Shape Dynamics, Scattering, Texture, Dual Brush, Color Dynamics, Transfer, Brush Pose, Wet Edges, Build-up and Smoothing (including Pulled String), driven by pen pressure, tilt, rotation and direction. Brush presets, Define Brush from Selection, and deterministic, replayable strokes. 🗃️ Layers, done properly Groups, clipping masks, pixel and vector masks, fill layers (solid, gradient and pattern), adjustment layers, live smart objects with smart filters and lossless transforms and warps, multi-layer selection with align, distribute and link, alpha channels and Quick Mask, 27 blend modes, opacity and fill, locks, colour labels, layer filters, merge, flatten, rasterize, Layer via Copy/Cut, Paste Into. 🎨 Any colour, any depth RGB, Grayscale, CMYK and Lab documents at 8, 16 and 32 bits per channel. Bit depth and colour model are runtime data, so every tool works at every depth. Real ICC colour management in pure Rust: embedded profiles, Assign and Convert to Profile with all four rendering intents and black point compensation, soft proofing (⌘Y) and Gamut Warning (⇧⌘Y) on the GPU. 🗂️ Formats PSD and PSB, plus PNG, JPEG, TIFF, WebP, GIF, BMP, TGA, ICO, QOI, PNM, OpenEXR, Radiance HDR and AVIF, with symmetric read and write at 8, 16 and 32 bits, and the native .pcraft format. 🪄 The everyday essentials Auto Tone, Contrast and Color · Equalize · Image and Canvas Size · Crop and Trim · Reveal All · Edit › Fill and Stroke · Copy Merged · Paste in Place · guides, rulers, grid and snapping · Actions record and replay · a command palette (⌘K). ## PSD without compromise PhotoCraft's PSD support is a standalone crate written from Adobe's public specification and tested against a corpus of real-world files. - **Faithful round trips:** opening and re-saving a document renders the same for 307 of the 309 files in the psd-tools test set and 169 of 170 in our mixed ag-psd/psd-tools set (`crates/io/tests/corpus.rs`; fetch the psd-tools set with `cargo xtask corpus --psd-tools`), and anything we don't model yet (raw blocks, descriptors, extras) is carried over instead of being dropped. A re-saved file is not byte-identical to its source: PhotoCraft rewrites image resources, layer records and the composite. Only the standalone `photocraft-psd` crate, parsing and writing a file without the document model, reproduces every parseable corpus file byte for byte (`crates/psd/tests/corpus.rs`). - **Pixels that match:** a composite oracle compares our render with Photoshop's own merged image, covering gradient interpolation (Classic, Perceptual and Linear), layer effects, shape strokes, clipping and fill opacity. - **Large documents:** PSB, 16 and 32-bit files, and CMYK and Lab documents open natively. ## Built for agents Every menu item, tool and dialog runs a command from one registry of 500+ commands. The UI, the CLI, the JSON control channel and the MCP server all call the same commands, so anything you can click, a script or an AI agent can do too. ```sh # Headless: open, edit, save photocraft-cli run wave.psd \ --cmd filter.sharpen.smartSharpen --params '{"amount":80}' \ --cmd layer.newAdjustmentLayer.curves --params '{"points":[[0,0],[64,48],[192,212],[255,255]]}' \ --out wave-final.png # Apply one action list to a folder of images photocraft-cli batch --actions grade.json --in ./raw --out ./graded # Every subcommand explains itself photocraft-cli batch --help # Let an agent drive it over MCP (headless, or bridged to the running app) photocraft-cli mcp ``` The desktop app also offers an authenticated, loopback-only control channel (`photocraft --control`) for inspecting UI state, driving tools with pointer events, and taking offscreen screenshots. Every image in this README was rendered that way. See [`docs/control-protocol.md`](docs/control-protocol.md). ## Under the hood - **Engine first:** a pure-data document model and a command engine, with a thin egui UI on top. Layering is enforced at build time across 24 crates. - **Two compositors:** a CPU compositor serves as the reference oracle, and a wgpu compositor puts the canvas on the GPU. They are tested against each other. - **Copy-on-write tiles:** 256² sparse tiles make undo cheap and huge canvases light, and effect maps are cached per layer state. - **Runs in the browser:** the whole engine and UI compile to WebAssembly. - **Clean-room:** implemented from public specs and observed behaviour only. No proprietary code, shaders or assets. - **Tested:** more than 1,700 tests, including PSD round trips, synthetic generators, compositor oracles and multi-depth checks. ## Get started ```sh git clone https://github.com/storytold/photocraft cd photocraft cargo run --release -p photocraft -- image.psd # the desktop app cargo test --workspace # the test suite ``` Japanese fonts for the UI and Type tool come from [craft-fonts](https://github.com/storytold/craft-fonts), an optional build input (desktop release builds always include it). Without it PhotoCraft uses your system's CJK fonts: ```sh git clone https://github.com/storytold/craft-fonts ../craft-fonts CRAFT_FONTS_DIR="$PWD/../craft-fonts" cargo run --release -p photocraft ``` New contributors and AI agents: start with [`AGENTS.md`](AGENTS.md), then [`docs/`](docs/). Installers for macOS, Windows, Linux, FreeBSD and the web are attached to each [GitHub release](https://github.com/storytold/photocraft/releases). On Linux you can pick an AppImage, a `.deb`, an `.rpm`, a tarball or a Flatpak bundle. The bundle needs the freedesktop runtime from [Flathub](https://flathub.org/setup), which `flatpak` offers to install along with it: ```sh flatpak install --user photocraft--linux-x86_64.flatpak # or -linux-aarch64 flatpak run ai.storyteller.photocraft ``` On macOS, the command-line tool comes as `photocraft-cli--macos-universal.zip`. The binary is signed with the same Developer ID as the app and notarized by Apple. A bare binary can't carry a stapled notarization ticket the way the DMG does, so the first time you run it macOS checks the notarization online. You can confirm it yourself: ```sh ditto -x -k photocraft-cli--macos-universal.zip . spctl --assess --type install -vv photocraft-cli--macos-universal/photocraft-cli # ... accepted, source=Notarized Developer ID ``` On FreeBSD 14 (x86_64), the release has a tarball laid out like `/usr/local`. Install the runtime libraries, then unpack it there: ```sh pkg install libxkbcommon wayland libX11 libXcursor libXrandr libXi libxcb mesa-libs vulkan-loader gtk3 fontconfig freetype2 alsa-lib tar -xzf photocraft--freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local photocraft ``` Maintainers: [`docs/releasing.md`](docs/releasing.md) explains how releases are built, signed and published. > [!IMPORTANT] > **Status:** PhotoCraft is in early alpha, and we want to be straight about where it stands: much of Photoshop's feature surface exists in some form, but **it is not yet a Photoshop replacement for daily professional work**. The biggest gaps are AI/generative features, about twenty missing tools, depth in typography and pro workflows, and plug-in compatibility. Every Photoshop menu item is wired to a command ([`docs/parity.md`](docs/parity.md)), but that measures wiring, not behaviour. The honest, dimension-by-dimension picture and where we're going next are in the [roadmap's parity assessment](docs/roadmap.md#honest-parity-assessment-2026-10-05). Expect rough edges, and please file issues (include your OS, document size, layer count and a screenshot). You can also tell us what broke on [Discord](https://discord.gg/artcraft). ## Documentation Developer, architecture, automation, format, and security documentation is maintained in the [PhotoCraft documentation book](book/). ## Security Security architecture, threat modeling, parser hardening, fuzzing, and vulnerability reporting are covered in the [security documentation](book/src/security/) and the repository [security policy](SECURITY.md). ## Test corpora PhotoCraft is tested against real files: our own Photoshop-authored oracle PSDs in [photocraft-corpus](https://github.com/storytold/photocraft-corpus) plus the psd-tools, ag-psd and PngSuite sets, pinned and sha256-verified. Fetch them with `cargo xtask corpus --all` and run the tests with `cargo xtask test-corpus` (details in [docs/development.md](docs/development.md#test-corpora)). ## The Crafting Apps PhotoCraft is one of the **Crafting Apps**: free, open-source creative tools from the [ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to stand on its own. | | App | What it's for | Code | Learn more | |:-:|---|---|---|---| | | **PhotoCraft** | **Image editing: layers, masks, type and real PSD files · you are here** | [GitHub](https://github.com/storytold/photocraft) | [Website](https://getartcraft.com/apps/photocraft) | | | **VectorCraft** | Vector illustration | [GitHub](https://github.com/storytold/vectorcraft) | [Website](https://getartcraft.com/apps/vectorcraft) | | | **FilmCraft** | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [Website](https://getartcraft.com/apps/filmcraft) | | | **LightCraft** | Photo library and raw development | [GitHub](https://github.com/storytold/lightcraft) | [Website](https://getartcraft.com/apps/lightcraft) | | | **PrintCraft** | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/printcraft) | [Website](https://getartcraft.com/apps/printcraft) | | | **EffectCraft** | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [Website](https://getartcraft.com/apps/effectcraft) | | | **DesignCraft** | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [Website](https://getartcraft.com/apps/designcraft) | And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control. The Crafting Apps share the same conventions: clean-room and pure Rust, native on macOS, Windows and Linux, in the browser via WebAssembly, and fully drivable by agents. Come make things with us Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film, set type, and people still figuring out what they like to make. Share what you're working on, ask for help, tell us what's broken, or tell us what you wish these tools could do. Whatever your medium and however long you've been

来源报道 · 1 篇 · 以下链接均前往原始媒体

← 返回精选动态 原文

更多内容