Commit Graph

  • efa1edd079 algo: gate the recorded-hash test's helpers with the test (#7053) main Hamza Naveed 2026-10-17 19:39:15 +05:00
  • 351149f0df Fix the build: restore export_presets in load_presets_json (#5344 x #5616) (#6906) Josephand00xJ0 2026-10-17 07:32:54 -07:00
  • 5f65579ecb perf(panorama): Photomerge 4× faster, bit for bit the same (#6489) Nicolas FalesyandClaude Opus 5.5 2026-10-16 22:20:22 -04:00
  • bd3b5d9192 fix(automation): refuse a group/world-readable control-token file (#4966) (#5459) wwew 2026-10-17 06:20:03 +04:00
  • fbcb70b317 Save: ask before overwriting a file another app changed (#6596) (#6652) ZuujisandClaude Opus 5.5 2026-10-16 21:19:32 -05:00
  • 4c881326ea fix(windows): keep crash-recovery autosaves out of the roaming profile (#5648) (#6412) Korg1ch 2026-10-17 05:19:06 +03:00
  • fbfc72ceb5 Close All, Close Others and Quit ask again about documents dirtied during the prompt (#4954) (#5079) MarekSpodBiedry 2026-10-17 04:18:47 +02:00
  • 20013ef9bd Linked smart objects: don't refresh a document while a background job runs on it (#4973) (#5074) MarekSpodBiedry 2026-10-17 04:18:17 +02:00
  • 3d2914368d PSD type: clamp warp bend and distortion before the f32 cast (#6856) (#6857) David MannandClaude Opus 5.5 2026-10-17 04:17:27 +02:00
  • 5bd428a239 perf(stack): Stack Mode 11× faster (#6462) Nicolas FalesyandClaude Opus 5.5 2026-10-16 22:16:45 -04:00
  • 75978a72f0 Targa: RLE packets end with their scanline (#6382) (#6386) F4LCON 2026-10-17 04:15:32 +02:00
  • c61cf9f0bd fix(engine): load each persisted preset set independently (#5616) nrq6993-a11yandCursor 2026-10-17 04:20:06 +03:00
  • a1e19a0b87 fix(text): break paragraph lines at the horizontally scaled width (#5611) nrq6993-a11yandCursor 2026-10-17 04:19:59 +03:00
  • d213273c74 GPU composite: lower-stack cache chunks have no texture view (#5423) Matthew SantiagoandClaude Opus 5.5 2026-10-16 20:19:53 -05:00
  • 4e5c6a018a fix(io): SVG text placed by a transform keeps it on import (#4806) (#5334) Ahmed MagdyandClaude Opus 5.5 2026-10-17 04:19:47 +03:00
  • a05daee325 Filters: the live preview is never coarser than the screen (#6326) (#6351) F4LCON 2026-10-17 03:14:50 +02:00
  • 132257912a README: put Community packages after the Get started status note (follow-up to #1149) (#6886) Tanish Manku 2026-10-16 17:52:24 -07:00
  • 10fdcbbefc chore: fix workspace Clippy collapsible_match warnings (#5190) Ivan · VanTan 2026-10-17 02:42:36 +02:00
  • d900daa0ba fix(web): File › Place Embedded is enabled in the browser and places the picked file's bytes (#1209, #5749) (#5585) Gustavo Ziger 2026-10-16 21:38:56 -03:00
  • 3722dfbc63 fix(ui): Arabic and Hebrew layer names and the title read right to left (#5159) (#5385) Michael Higginsandahmedhosnypro 2026-10-16 20:36:06 -04:00
  • 5a33441af3 fix(engine): an unknown layer id or name lists the document's layers, and a name matches regardless of case as a fallback (#5058) (#5133) Gert Pellin - GPE 2026-10-17 02:34:40 +02:00
  • a6a1d2ed22 feat(algo): face detection with libfacedetection's CNN in pure Rust, and image.detectFaces (part of #3603) (#4513) Gert Pellin - GPE 2026-10-17 02:31:02 +02:00
  • 1b3bc48267 docs(readme): Community packages section with the Gentoo ::snakebyte overlay (#1149) Gert Pellin - GPE 2026-10-17 02:28:51 +02:00
  • 8a4ed48354 fix(ui): numeric fields drop oversized text, paste and IME events before layout (part of #2150) (#2258) Harrison O'Connor-Hoover 2026-10-16 20:25:50 -04:00
  • dd69f0797d fix(engine): reserve the define-brush tip and selection-mask buffers fallibly (#212) (#5469) wwew 2026-10-17 04:23:08 +04:00
  • aecac608b4 fix(ui): Type tool caret stays solid after typing, navigation or a click, then resumes blinking (#5511) (#5512) safvanedge 2026-10-17 05:50:53 +05:30
  • c7d2c85faf fix(ui): Color Picker's Only Web Colors snaps every edit and is remembered across pickers (#4995) (#5442) Vikram Bhaskaran 2026-10-17 11:19:03 +11:00
  • 9628290b36 fix(ui): Layer › New Fill Layer › Solid Color opens the Color Picker, creating the layer on OK (#5144) (#5166) Nigel Ihza Firdausy 2026-10-17 07:13:51 +07:00
  • db46713c2c Unsaved-changes prompt: the default answer takes keyboard focus, so arrows and Enter work (part of #6441) (#6466) Marco Arnulfo 2026-10-17 01:03:15 +02:00
  • 06ad07ab9b fix(io): color-manage grayscale WebP exports (#5875) Jason Xiang 2026-10-16 16:02:54 -07:00
  • f61ed26e14 fix(io): honor version-aware OpenRaster group isolation (#5872) Jason Xiang 2026-10-16 16:02:23 -07:00
  • 840edc311c fix(io): preserve linear grayscale profiles for selected EXR parts (#5867) Jason Xiang 2026-10-16 16:01:52 -07:00
  • 462adeadd2 test(io): cover mixed-region CMYK TIFF composites (#5588) Jason Xiang 2026-10-16 16:01:10 -07:00
  • 8fe2c74f58 perf(testkit): sample RSS from /proc/self/statm, not smaps, on Linux (#5399) xsvm 2026-10-17 07:00:43 +08:00
  • 93f6376c5e docs: write product name as PhotoCraft in package descriptions and comments (#5615) wwew 2026-10-17 02:59:41 +04:00
  • e33384c9ba docs: write product name as PhotoCraft in crate module docs (#5455) wwew 2026-10-17 02:58:50 +04:00
  • f360cb0b4a fix(engine): give artboard exports unique indexed filenames (#6655) PerchenkoAnton 2026-10-17 01:57:33 +03:00
  • 651647fdf6 docs(cli): write product name as PhotoCraft in USAGE and description (#5449) wwew 2026-10-17 02:56:48 +04:00
  • f1c45b887e fix(codecs): respect PAM ENDHDR line boundaries (#5874) Jason Xiang 2026-10-16 15:38:54 -07:00
  • 6a7fc88c79 Crop tool: custom ratios keep three decimals, 1.414 : 1 no longer becomes 1.4 : 1 (fixes #6487) (#6503) Marco Arnulfo 2026-10-17 00:38:35 +02:00
  • 97f50b4714 Pen: the path in progress stays visible while panning with Space (fixes #6592) (#6625) Marco Arnulfo 2026-10-17 00:38:11 +02:00
  • ad6463b50f Paragraph text: a word wider than the box breaks at the box edge (#6694) (#6696) Diego Chagas 2026-10-16 19:37:45 -03:00
  • 3c75db7a80 fix(linux): avoid duplicate AppImage desktop launcher when managed by AM / AppMan (#6392) (#6394) Korg1ch 2026-10-17 01:37:17 +03:00
  • 19227022ca Histogram: scale bar heights linearly to the tallest bin, not sorted.get(250) (#6638) midasmatterhorn 2026-10-17 01:36:58 +03:00
  • 54a4782849 perf(camera-raw): Shadows/Highlights 1.9× faster, bit for bit the same (#5964) (#6247) Nicolas Falesy 2026-10-16 18:26:19 -04:00
  • 2a952f164c Windows/Linux: open files in the running PhotoCraft instead of a second instance (#3708) (#3755) JGF 2026-10-16 01:48:30 -04:00
  • d12be8ecd0 test(ui-egui): canvas_16f and rotation preview tests run on the app's wgpu device (#6454) Tanish Manku 2026-10-15 22:33:14 -07:00
  • 58f855a40f Save As on Linux: the file type picked sets the extension (#6121, #4328, #4394) (#6151) 2026-10-15 23:47:17 -05:00
  • 6368e6a851 GPU memory follow-ups (#5973 review): fit cleared on device loss and on the CPU canvas; measured when switching to a document whose canvas is current; notice names the 3/8 card cap; VRAM override documented; perf rows count memory like the app (#6458) Tanish Manku 2026-10-15 21:37:05 -07:00
  • 478214f60b GPU memory follow-ups (#5973 review): fit cleared on device loss and on the CPU canvas; measured when switching to a document whose canvas is current; notice names the 3/8 card cap; VRAM override documented; perf rows count memory like the app fix/gpu-memory-nits Tanish Manku 2026-10-15 21:36:41 -07:00
  • 6d3443c098 GPU memory: discrete cards aren't charged for the document; GPU Memory preference; GPU Memory Full status (#5973) Tanish Manku 2026-10-15 21:22:46 -07:00
  • e7b5b14898 GPU memory on top of #5234: memory_budget takes the card's memory (vram) and the GPU Memory value; the document's pixels are charged unless the card's own memory is known; a set GPU Memory is capped at the card's share; benches use video_memory feat/gpu-memory-budget Tanish Manku 2026-10-15 21:18:28 -07:00
  • ea8f55f8f9 GPU memory: typed discrete check; the status and budget follow a GPU Memory change at once (measure_fit); perf rows P60/P61 for whole-document edits among 150 full-canvas layers under the app's budget Tanish Manku 2026-10-15 13:55:07 -07:00
  • 93c8e49954 GPU memory: a graphics card's own memory isn't charged for the document; GPU Memory preference; GPU Memory Full in the status bar Tanish Manku 2026-10-14 22:01:17 -07:00
  • 297520b9c8 perf(gpu): cap the GPU memory budgets by a discrete GPU's own memory (#5234) FinnNkandClaude Opus 5.5 2026-10-16 05:05:51 +01:00
  • 57437ea1a9 fix(ui-egui): canvas textures fit the device's texture limit; GPU tests hold the GPU lock on the app's device (#5954) Tanish Manku 2026-10-15 21:05:39 -07:00
  • 7053f703a5 Merge pull request #2933 from 1Git2Clone/ci-wallclock skylar taylor-barrick 2026-10-15 21:38:18 -06:00
  • fd1faf4e13 Merge pull request #6381 from dylanmtaylor/ci/shared-freebsd-workflow skylar taylor-barrick 2026-10-15 21:34:22 -06:00
  • 8f58ea4629 ci: integrate current main while retaining strict test gates skylartaylor 2026-10-16 05:25:24 +02:00
  • 0cc161e2a8 ci: delegate FreeBSD workflow to craft-common-actions and add nix check Dylan M. Taylor 2026-10-15 19:53:32 -04:00
  • 3cb3580a46 fix(psd): recover layered imports with damaged merged data (#6170) PerchenkoAnton 2026-10-16 04:14:05 +03:00
  • b630d7cb9a Security: enforce the automation read boundary on stored smart-filter params (#5684) skylar taylor-barrick 2026-10-15 18:19:26 -06:00
  • 93837ee578 wasm size: compose and algo join cms at opt-level "z" to clear the 24 MiB gate codex/smart-filter-read-boundary skylar taylor-barrick 2026-10-14 23:04:13 -06:00
  • b3e6de91f5 ui_set description: name the layerFilter field main added skylar taylor-barrick 2026-10-14 17:57:33 -06:00
  • 7cd3fac330 Review: carry render authority through Session::edit and surface denials skylar taylor-barrick 2026-10-14 16:20:20 -06:00
  • dda6ba10a2 Security: enforce the automation read boundary on stored smart-filter params skylar taylor-barrick 2026-10-14 12:12:08 -06:00
  • 2b3d05636f Follow-ups to #5801/#5859: precheck docs name the group nesting limit; precheck test covers valid ids and null; Free Transform refusals translated; stranded-backup error tested (#6365) Tanish Manku 2026-10-15 15:32:08 -07:00
  • 94b2f291a7 Follow-ups to #5801/#5859: precheck docs name the group nesting limit; precheck test covers valid ids and null; Free Transform refusals translated; stranded-backup error tested fix/precheck-followups Tanish Manku 2026-10-15 15:31:49 -07:00
  • fdaa9b8316 Free Transform: New Layer applies the transform first; tests for switching tool, layer or New Layer (#5665, #5667) (#5859) Tanish Manku 2026-10-15 15:26:13 -07:00
  • 8376363d8c Shortcuts without the UI: shell commands and tools in the engine, reserved keys, set files (#5801) Tanish Manku 2026-10-15 15:26:09 -07:00
  • b09aeae2e2 Low-Latency Drawing preference (vsync off, opt-in), plus present-mode overrides for testers (#1343) (#5274) Tanish Manku 2026-10-15 15:23:47 -07:00
  • d9e1c10c30 Free Transform + New Layer: precheck resolves a layer given by name as the command does; Layer via Copy/Cut leave PRECHECKED (their failures show only when they run); rebased (lib.rs mod lines) fix/transform-commit-on-switch Tanish Manku 2026-10-15 15:22:09 -07:00
  • 4a1acca879 Free Transform + New Layer: commit-first only for PRECHECKED commands; precheck shares dispatch's admission checks (named-layer precondition, jobs, hidden target) and checks a named layer exists; Group from Layers documents its layer param; test: precheck agrees with execute Tanish Manku 2026-10-15 15:01:23 -07:00
  • a95b3f0a85 Free Transform + New Layer: Session::precheck validates the call (params shape, New Layer's values, precondition) before the box is applied Tanish Manku 2026-10-15 14:24:58 -07:00
  • b7eab1a377 Free Transform + New Layer: check the command can run before applying the transform; a refused transform keeps the box and the placed layer and returns the refusal Tanish Manku 2026-10-15 13:23:27 -07:00
  • 25a8200110 New Layer while Free Transform is open applies the transform first (History: the transform, then New Layer; a placed layer's step no longer swallows New Layer); tests: a real placed fixture, the New Layer button, History order Tanish Manku 2026-10-15 13:03:55 -07:00
  • 6443f5fb4c Tests: Free Transform applies when another tool, layer or New Layer is picked (#5665, #5667) Tanish Manku 2026-10-14 15:58:55 -07:00
  • f35509c194 Shortcut exports: a failed backup move removes its placeholder; undo restores backups without deleting first and names any it couldn't; read-only targets refused up front feat/shortcuts-headless Tanish Manku 2026-10-15 15:14:51 -07:00
  • 6f61806048 docs: present mode default is vsync (Low-Latency Drawing ships off) feat/present-mode-override Tanish Manku 2026-10-15 15:07:54 -07:00
  • af54f4aed1 ci: limit the font pass to font-consuming crates (#6127) skylar taylor-barrick 2026-10-15 16:03:39 -06:00
  • 1a4167936e ci: run tests with cargo nextest (#6118) skylar taylor-barrick 2026-10-15 16:02:57 -06:00
  • 0c96a57bf7 Keyboard shortcut exports all or nothing: unique create_new staging and backups beside each target, restored on any failure; the same target twice refused; docs: Ctrl+Shift+Esc Tanish Manku 2026-10-15 14:52:02 -07:00
  • b8c5503985 Low-Latency Drawing ships off (opt-in), per the owner's decision Tanish Manku 2026-10-15 14:45:51 -07:00
  • d06c3168cc stroke_trace: from_value doc says ui.set passes only on or off Tanish Manku 2026-10-15 14:30:25 -07:00
  • 2a69d49f67 Low-Latency Drawing: frames capped at 240 fps without vsync (after #4472); ui.set strokeTrace takes on/off only (a CSV path is launch-only); tearing documented as usual (Immediate); pref hidden on web; doc comment order Tanish Manku 2026-10-15 13:40:50 -07:00
  • 5c874b79dc docs: regenerate the scorecard after rebasing onto main Tanish Manku 2026-10-15 12:28:51 -07:00
  • ba91c9fe05 docs: strokeTrace beside the other ui.set fields Tanish Manku 2026-10-14 14:15:34 -07:00
  • 3c888969fe Runtime and launch controls: ui.set strokeTrace, --stroke-trace, --present-mode, --frame-latency Tanish Manku 2026-10-14 14:14:30 -07:00
  • dc5aedd175 Preferences › Performance › Low-Latency Drawing, on by default: no vsync wait while drawing (#1343) Tanish Manku 2026-10-14 13:25:45 -07:00
  • 763e348442 Present mode overrides never request a mode the driver may lack (Mailbox crashed on X11/NVIDIA) Tanish Manku 2026-10-14 13:00:22 -07:00
  • 028c40d694 docs: present mode and frame latency overrides Tanish Manku 2026-10-13 14:06:56 -07:00
  • 6af6481df4 PHOTOCRAFT_PRESENT_MODE / PHOTOCRAFT_FRAME_LATENCY launch overrides for latency A/B tests (#1343) Tanish Manku 2026-10-13 14:06:38 -07:00
  • 54f4baf6f9 Layers panel: blend mode, Opacity, Fill and locks change every selected layer; Photoshop's History names (#5856) Tanish Manku 2026-10-15 14:33:51 -07:00
  • 0a8f32a280 Keyboard shortcuts export: files are staged next to their targets and moved into place only when all are written; a failure leaves the user's files untouched Tanish Manku 2026-10-15 14:29:59 -07:00
  • 95789b7c4d docs: reserved keys per platform Tanish Manku 2026-10-15 13:34:35 -07:00
  • ed2cdbc5f9 Keyboard shortcuts: both export targets are resolved and checked before either file is written; a failed later write removes the earlier one Tanish Manku 2026-10-15 13:15:30 -07:00
  • 84e4d0ad80 Keyboard shortcuts: bindings commit only after their exports are written (a bad target changes nothing); docs: the command knows the tools Tanish Manku 2026-10-15 12:42:26 -07:00
  • 061ae5c92b Shortcuts without the UI: shell commands and tools in the engine, reserved keys, set files Tanish Manku 2026-10-14 14:08:25 -07:00
  • 3cd0f6c954 Keyboard Shortcuts: Accept and Go to Conflict / Undo Changes, and reserved keys (K4a) (#5349) Tanish Manku 2026-10-15 14:18:14 -07:00
  • 04db697b5d Paste Layer Style: a group's Pass Through pastes onto other layers as Normal; style clipboard comment (#6310) Tanish Manku 2026-10-15 14:17:22 -07:00