# Photo Editor: changes from PhotoCraft

Photo Editor is based on PhotoCraft by the ArtCraft team (https://github.com/storytold/photocraft), commit `2fccdcba8ea273dae3d997569bc888ed1df93470`,
licensed under the MIT License or the Apache License 2.0; Everyapp uses it under the Apache License 2.0.
Upstream LICENSE-APACHE, LICENSE-MIT and NOTICE are included unchanged in this folder.

Everyapp changed the files below. Everything else is unmodified upstream source.

## Text and links (rebranding)

Upstream app and suite names in interface text were replaced with Everyapp names, and links to the upstream
website, community and repository were pointed to everyapp.pro or support@everyapp.pro.

| File | Changes |
|---|---|
| `(dependency a517b38) PATCHES.md` | name: 1 |
| `(dependency a517b38) docs/egui-037-migration-plan.md` | name: 50 |
| `(dependency fonts-build) README.md` | name: 3 |
| `(dependency gdi) README.md` | links: 1, name: 1 |
| `(dependency gdi) src/windows.rs` | name: 1 |
| `(dependency i18n) README.md` | name: 1 |
| `(dependency jpeg) README.md` | name: 2 |
| `(dependency print) README.md` | name: 2 |
| `(dependency ui) README.md` | name: 17 |
| `README.md` | brand: 8, links: 34, name: 29, phrases: 2 |
| `ROADMAP.md` | name: 2 |
| `apps/photocraft-cli/build.rs` | name: 3 |
| `apps/photocraft-cli/src/actions.rs` | name: 1 |
| `apps/photocraft-web-boot/index.html` | name: 3 |
| `apps/photocraft-web-boot/src/main.rs` | name: 4 |
| `apps/photocraft-web/index.html` | name: 3 |
| `apps/photocraft-web/src/web.rs` | name: 1 |
| `apps/photocraft/build.rs` | name: 3 |
| `apps/photocraft/src/app_dirs.rs` | name: 2 |
| `apps/photocraft/src/app_icon.rs` | name: 4 |
| `apps/photocraft/src/crash_guard.rs` | name: 1 |
| `apps/photocraft/src/main.rs` | name: 8 |
| `apps/photocraft/src/screen_color.rs` | name: 2 |
| `apps/photocraft/src/services.rs` | name: 2 |
| `apps/photocraft/src/single_instance.rs` | name: 1 |
| `apps/photocraft/src/updates.rs` | name: 1 |
| `assets/app-icon/README.md` | brand: 1, name: 2 |
| `assets/icons/align-edge-bottom.svg` | name: 1 |
| `assets/icons/align-edge-hcenter.svg` | name: 1 |
| `assets/icons/align-edge-left.svg` | name: 1 |
| `assets/icons/align-edge-right.svg` | name: 1 |
| `assets/icons/align-edge-top.svg` | name: 1 |
| `assets/icons/align-edge-vcenter.svg` | name: 1 |
| `assets/icons/artboard.svg` | name: 1 |
| `assets/icons/clip-below.svg` | name: 1 |
| `assets/icons/clip-release.svg` | name: 1 |
| `assets/icons/convert-point.svg` | name: 1 |
| `assets/icons/distribute-bottom.svg` | name: 1 |
| `assets/icons/distribute-hcenter.svg` | name: 1 |
| `assets/icons/distribute-horizontal.svg` | name: 1 |
| `assets/icons/distribute-left.svg` | name: 1 |
| `assets/icons/distribute-right.svg` | name: 1 |
| `assets/icons/distribute-top.svg` | name: 1 |
| `assets/icons/distribute-vcenter.svg` | name: 1 |
| `assets/icons/distribute-vertical.svg` | name: 1 |
| `assets/icons/frame-placeholder.svg` | name: 1 |
| `assets/icons/marquee-column.svg` | name: 1 |
| `assets/icons/marquee-row.svg` | name: 1 |
| `assets/icons/perspective-crop.svg` | name: 1 |
| `assets/icons/slice-knife.svg` | name: 1 |
| `assets/icons/slice-select.svg` | name: 1 |
| `assets/icons/text-warp.svg` | name: 1 |
| `assets/icons/type-mask-vertical.svg` | name: 1 |
| `assets/icons/type-mask.svg` | name: 1 |
| `book/src/README.md` | links: 2, name: 2 |
| `book/src/SUMMARY.md` | name: 1 |
| `book/src/architecture/automation.md` | name: 1 |
| `book/src/architecture/command-engine.md` | links: 1 |
| `book/src/architecture/crates.md` | links: 1, name: 3 |
| `book/src/architecture/overview.md` | links: 1, name: 1 |
| `book/src/architecture/rendering.md` | links: 1, name: 1 |
| `book/src/automation/cli.md` | name: 2 |
| `book/src/automation/control-protocol.md` | links: 1 |
| `book/src/automation/mcp.md` | brand: 3, name: 3 |
| `book/src/automation/overview.md` | name: 1 |
| `book/src/development/release-security.md` | links: 1, name: 1 |
| `book/src/formats/affinity.md` | links: 1, name: 6 |
| `book/src/formats/overview.md` | name: 1 |
| `book/src/formats/psd-psb.md` | links: 1 |
| `book/src/formats/raster-formats.md` | links: 1, name: 2 |
| `book/src/getting-started/building.md` | links: 2, name: 1 |
| `book/src/getting-started/contributing.md` | links: 2 |
| `book/src/getting-started/installation.md` | links: 1, name: 1 |
| `book/src/project/credits.md` | name: 1 |
| `book/src/project/licenses.md` | brand: 1, links: 5, name: 1 |
| `book/src/project/roadmap.md` | links: 2 |
| `book/src/security/fuzzing.md` | name: 1 |
| `book/src/security/overview.md` | name: 1 |
| `book/src/security/secure-file-handling.md` | name: 1 |
| `book/src/security/threat-model.md` | name: 2 |
| `book/src/security/vulnerability-reporting.md` | links: 1 |
| `crates/affinity/README.md` | name: 3 |
| `crates/automation/src/server/conventions.rs` | name: 1 |
| `crates/automation/src/workspace.rs` | name: 1 |
| `crates/cms/README.md` | name: 3 |
| `crates/cms/src/builtin.rs` | name: 11 |
| `crates/cms/src/synth.rs` | name: 1 |
| `crates/codecs/README.md` | name: 1 |
| `crates/codecs/src/codecs/dpx.rs` | name: 1 |
| `crates/codecs/src/codecs/heif.rs` | name: 1 |
| `crates/engine/src/cmd/atn_cmds.rs` | name: 5 |
| `crates/engine/src/cmd/automate_cmds.rs` | name: 3 |
| `crates/engine/src/cmd/face_cmds.rs` | name: 1 |
| `crates/engine/src/cmd/file_cmds/export.rs` | name: 1 |
| `crates/engine/src/cmd/layer_menu_cmds.rs` | name: 1 |
| `crates/engine/src/cmd/preset_import_cmds.rs` | name: 1 |
| `crates/engine/src/cmd/print_cmds.rs` | name: 1 |
| `crates/engine/src/cmd/smart_cmds/filters.rs` | name: 1 |
| `crates/engine/src/cmd/swatch_cmds.rs` | name: 1 |
| `crates/engine/src/cmd/updates_cmds.rs` | links: 1 |
| `crates/engine/src/prefs/validate.rs` | links: 1 |
| `crates/engine/src/preset_store.rs` | name: 1 |
| `crates/engine/src/shell_commands.rs` | name: 2, phrases: 3 |
| `crates/engine/src/shortcut_sets.rs` | name: 3 |
| `crates/format/src/zip.rs` | name: 2 |
| `crates/heif/README.md` | name: 3 |
| `crates/io/src/abr_map.rs` | name: 1 |
| `crates/io/src/camera_raw_xmp.rs` | name: 5 |
| `crates/io/src/lib.rs` | name: 1 |
| `crates/io/src/psd_export.rs` | name: 1 |
| `crates/io/src/xcf.rs` | name: 2 |
| `crates/ipp/README.md` | name: 2 |
| `crates/raw/README.md` | name: 3 |
| `crates/raw/src/jxl.rs` | name: 1 |
| `crates/text/src/fonts.rs` | name: 1 |
| `crates/ui-egui/src/canvas/start_screen.rs` | name: 1 |
| `crates/ui-egui/src/canvas/tool_cursor.rs` | name: 1 |
| `crates/ui-egui/src/dialogs.rs` | name: 2 |
| `crates/ui-egui/src/dialogs/file_ui/print.rs` | name: 2 |
| `crates/ui-egui/src/dialogs/new_doc_ui.rs` | name: 1 |
| `crates/ui-egui/src/dialogs/rasterize_prompt.rs` | name: 2 |
| `crates/ui-egui/src/dialogs/screen_picker.rs` | name: 1 |
| `crates/ui-egui/src/gpu_status.rs` | name: 3 |
| `crates/ui-egui/src/i18n/cs.tsv` | brand: 4, name: 53, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/de.tsv` | brand: 4, name: 52, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/el.tsv` | brand: 3, name: 56, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/es.tsv` | brand: 4, name: 60, phrases: 5, translations: 4 |
| `crates/ui-egui/src/i18n/fr.tsv` | brand: 4, name: 60, phrases: 5, translations: 4 |
| `crates/ui-egui/src/i18n/hi.tsv` | brand: 1, name: 1 |
| `crates/ui-egui/src/i18n/hu.tsv` | brand: 4, name: 50, phrases: 5, translations: 4 |
| `crates/ui-egui/src/i18n/id.tsv` | brand: 4, name: 51, phrases: 3, translations: 2 |
| `crates/ui-egui/src/i18n/it.tsv` | brand: 4, name: 60, phrases: 5, translations: 4 |
| `crates/ui-egui/src/i18n/ja.tsv` | brand: 4, name: 51, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/ko.tsv` | brand: 3, name: 51, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/nl.tsv` | brand: 4, name: 56, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/pl.tsv` | brand: 4, name: 55, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/pt-br.tsv` | brand: 4, name: 60, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/ru.tsv` | brand: 4, name: 61, phrases: 5, translations: 4 |
| `crates/ui-egui/src/i18n/sr.tsv` | brand: 4, name: 58, phrases: 5, translations: 4 |
| `crates/ui-egui/src/i18n/tr.tsv` | brand: 4, name: 54, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/uk.tsv` | brand: 3, name: 53, phrases: 4, translations: 3 |
| `crates/ui-egui/src/i18n/vi.tsv` | brand: 4, name: 52, phrases: 3, translations: 2 |
| `crates/ui-egui/src/i18n/zh-hans.tsv` | brand: 3, name: 51, phrases: 3, translations: 2 |
| `crates/ui-egui/src/i18n/zh-hant.tsv` | brand: 4, name: 51, phrases: 3, translations: 2 |
| `crates/ui-egui/src/input/single_line_drag.rs` | name: 1 |
| `crates/ui-egui/src/links.rs` | brand: 1, links: 9, name: 1 |
| `crates/ui-egui/src/menus/native_menu.rs` | name: 2 |
| `crates/ui-egui/src/notices.rs` | name: 6 |
| `crates/ui-egui/src/panels.rs` | name: 9 |
| `crates/ui-egui/src/panels/actions.rs` | name: 2 |
| `crates/ui-egui/src/panels/chrome_ui.rs` | name: 3 |
| `crates/ui-egui/src/panels/title_bar.rs` | name: 5 |
| `crates/ui-egui/src/prefs/kys_import.rs` | name: 3 |
| `crates/ui-egui/src/prefs/prefs_ui/fields.rs` | name: 1 |
| `crates/ui-egui/src/prefs/prefs_ui/save.rs` | name: 1 |
| `crates/ui-egui/src/prefs/prefs_ui/shortcuts.rs` | name: 2 |
| `crates/ui-egui/src/prefs/prefs_ui/startup.rs` | name: 1 |
| `crates/ui-egui/src/text/bidi_text.rs` | name: 8 |
| `crates/ui-egui/src/updates_ui.rs` | links: 2, name: 4 |
| `crates/ui-egui/src/widgets/text_field_menu.rs` | name: 1 |
| `docs/architecture.md` | name: 3 |
| `docs/camera-raw-histogram.md` | name: 5 |
| `docs/color-picker.md` | name: 4 |
| `docs/context-menu-inventory.md` | name: 1 |
| `docs/context-menu-parity.md` | name: 13 |
| `docs/contributing.md` | brand: 1 |
| `docs/control-protocol.md` | name: 6 |
| `docs/development.md` | links: 2, name: 14 |
| `docs/egui-037-migration-plan.md` | name: 70 |
| `docs/file-format-parity.md` | name: 8 |
| `docs/gaps.md` | name: 5 |
| `docs/hardware-parity.md` | name: 5 |
| `docs/images/SOURCES.md` | name: 9 |
| `docs/images/cpu-pixel-alignment/README.md` | name: 1 |
| `docs/iris-blur-performance.md` | links: 6, name: 1 |
| `docs/kra.md` | name: 2 |
| `docs/localization-es.md` | name: 1 |
| `docs/localization-it.md` | name: 1 |
| `docs/localization-ko.md` | name: 2 |
| `docs/localization-parity.md` | name: 1 |
| `docs/localization-ru.md` | name: 3 |
| `docs/localization-zh-hans.md` | brand: 1, links: 2, name: 2 |
| `docs/localization.md` | name: 3 |
| `docs/mcp.md` | name: 3 |
| `docs/nikon-nef-development.md` | links: 1, name: 2 |
| `docs/ora.md` | name: 3 |
| `docs/pdn.md` | name: 2 |
| `docs/plugins.md` | name: 2 |
| `docs/release-playbook.md` | name: 2 |
| `docs/releasing.md` | brand: 3, name: 18 |
| `docs/roadmap.md` | name: 2 |
| `docs/scorecard.md` | links: 215, name: 4 |
| `docs/seam-carving-performance.md` | links: 1 |
| `docs/shape-strokes.md` | links: 8, name: 2 |
| `docs/target-app-parity.md` | links: 1, name: 7 |
| `docs/tilt-shift-performance.md` | links: 24, name: 1 |
| `docs/ui-design.md` | name: 3 |
| `docs/ui-dialogs.md` | name: 1 |
| `docs/ui-parity.md` | name: 2 |
| `docs/unsharp-mask-performance.md` | links: 1 |
| `docs/user/faq/index.md` | name: 4 |
| `docs/user/faq/is-photocraft-free.md` | brand: 1, links: 1, name: 5 |
| `docs/user/faq/open-photoshop-files.md` | name: 6 |
| `docs/user/faq/replace-photoshop.md` | links: 1, name: 6 |
| `docs/user/getting-started/index.md` | name: 5 |
| `docs/user/getting-started/install.md` | brand: 2, links: 6, name: 10 |
| `docs/user/guides/add-and-style-text.md` | name: 1 |
| `docs/user/guides/adjust-colors-with-adjustment-layers.md` | name: 1 |
| `docs/user/guides/export-an-image.md` | name: 3 |
| `docs/user/guides/index.md` | name: 1 |
| `docs/user/guides/open-and-save-files.md` | name: 11 |
| `docs/user/guides/select-and-mask.md` | name: 3 |
| `docs/user/index.md` | brand: 1, links: 3, name: 10 |
| `docs/user/troubleshooting/canvas-size-white-border.md` | links: 1, name: 1 |
| `docs/user/troubleshooting/get-help.md` | links: 2, name: 3 |
| `docs/user/troubleshooting/index.md` | name: 3 |
| `docs/user/troubleshooting/photocraft-does-not-start.md` | links: 7, name: 25 |
| `docs/user/troubleshooting/taskbar-turns-black.md` | brand: 1, links: 7, name: 13 |
| `docs/user/troubleshooting/text-moves-when-editing.md` | brand: 1, links: 6, name: 6 |
| `docs/windows-save-durability.md` | links: 4 |
| `docs/xcf.md` | name: 7 |

## Images

Upstream trademarks and app icons were replaced with Everyapp artwork of the same size and format.

- `assets/app-icon/hicolor/128x128/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/16x16/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/24x24/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/256x256/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/32x32/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/48x48/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/512x512/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/64x64/apps/ai.storyteller.photocraft.png`
- `assets/app-icon/hicolor/scalable/apps/ai.storyteller.photocraft.svg`
- `assets/app-icon/photocraft-1024.png`
- `assets/app-icon/photocraft-small.svg`
- `assets/app-icon/photocraft.icns`
- `assets/app-icon/photocraft.ico`
- `assets/app-icon/photocraft.svg`
- `docs/brand/artcraft-logo-white.png`
- `docs/brand/artcraft-logo-white.svg`
- `docs/brand/artcraft-logo.png`
- `docs/brand/artcraft-logo.svg`
- `docs/brand/artcraft-mark-black.png`
- `docs/brand/artcraft-mark-black.svg`
- `docs/brand/artcraft-mark.png`
- `docs/brand/artcraft-mark.svg`

## Web page

`index.html` loads `everyapp-frame.js` first (progress, export rules, links) and sets a Content-Security-Policy
(`connect-src 'self' blob: data:`) so the app makes no requests to other sites.
