🎨 image-editorHomeUser GuidePro GuideInstallArchitectureAnalysisPlanChangelog

image-editor β€” Changelog

Running record of what has actually been built. Newest first. See plan.md for the phase roadmap and analysis.md for the research.


2026-09-17 (later) β€” Styled HTML docs for the site βœ…

GitHub Pages served the raw .md files unformatted. Added docs/build_docs.py (uses the markdown package) which renders every docs/*.md into a standalone, themed *.html (violet site theme, styled tables/code, a top doc-nav) and rewrites intra-doc .md links to .html. The landing page now links to the .html docs; the .md files stay the source (GitHub renders them natively). Regenerate with .venv/bin/python docs/build_docs.py after editing any .md.


2026-09-17 (later) β€” Docs: pro guide + user guide refresh βœ…


2026-09-17 (later) β€” Phase 9 (no-dep pro tools) βœ…

The no-dependency slice of Phase 9 β€” the levers that give a professional look.

Still to do in Phase 9: dodge & burn tool, frequency separation, presets/batch, and the backend tier (RAW, AI denoise, super-resolution, lens correction).


2026-09-17 β€” Pro-editing research β†’ analysis Β§11 + plan Phase 9 βœ…

Researched what makes photos look professional and which tools deliver it; folded the findings into the docs (not yet built β€” planning only).


2026-09-14 (later) β€” Docs + landing page βœ…

Documentation and a landing page, modelled on image_selector / instax-printing.


2026-09-14 β€” Reshape / liquify (body slimming) βœ…

A push-brush warp like phone "Reshape/Slim" tools β€” drag a body edge inward to slim.

Note: this is a manual reshape brush (what the phone apps use). It edits the user's own photos; there's no automatic body detection β€” you drag to shape.


2026-09-13 (later) β€” Camera picture profiles in the filter list βœ…

Added camera-style looks alongside the film sims (same LUT/saturation mechanism), listed first in the Film-look dropdown: standard, vivid, neutral, faithful, flat, landscape, portrait, monochrome, plus high_contrast / low_contrast tone presets. 30 filters total; monochrome is a luminosity-weighted B&W.


2026-09-13 (later) β€” Show/hide selection toggle βœ…

New "Show selection outline" checkbox in the Adjust tab. Turning it off hides the outline so you see the clean result, while keeping the selection β€” no more clearing (which lost it) and re-brushing just to preview. Toggle it back on to keep refining the same selection.


2026-09-13 β€” Full adjustment set + everything works on a selection βœ…

Every adjustment (including curves) now works both whole-image and on a brushed selection β€” the local editor was missing brightness and curves entirely.


2026-09-12 (later) β€” Phase 5: seamless paste (insert an image) βœ…

Composite an object from another photo so it belongs in the scene.

Status vs. plan

Done: Phases 0–7 + geometry + layers + .iedit + luminance contrast. Remaining (optional): Phase 8 only β€” SD replace/outpaint, ai_edit text-look bridge, RAW/HEIC input, batch. The editor is otherwise feature-complete.


2026-09-12 (later) β€” Luminance-only local contrast + .iedit project files βœ…

Status vs. plan

Done: Phases 0–4, 6, 7 + geometry + layers + .iedit projects + luminance contrast. Remaining (optional): Phase 5 seamless-paste UI (engine exists), Phase 8 (SD replace/outpaint, ai_edit text-look bridge, RAW/HEIC, batch).


2026-09-12 (later) β€” Phase 6: SAM select β†’ remove the person βœ…

Brush roughly over a person and the app cuts them out precisely, then erases them.

Status vs. plan

Done: Phases 0–4, 6, 7 + geometry + layers. Remaining (optional): Phase 5 seamless-paste UI (engine exists), Phase 8 (SD replace/outpaint, ai_edit text-look bridge, RAW/HEIC, batch), and the luminance-only (LAB-L) contrast polish.


2026-09-12 β€” Completing the editor: curves UI, crop, rotate, layers, threaded erase βœ…

Closed the main gaps between the engine and a usable editor. No new dependencies.

Status vs. plan

Done: Phases 0, 1, 2, 3, 4, 7 + geometry + layers. Remaining (optional): - Phase 5 UI β€” seamless-paste tool (engine seamless_paste/match_color exists). - Phase 6 β€” SAM 2 tap-to-select / rembg cutout (needs an ML install; deferred). - Phase 8 β€” Stable-Diffusion replace/outpaint, ai_edit text-look bridge, RAW/HEIC input, batch. Luminance-only (LAB-L) contrast still noted as a polish item.


2026-09-11 (later) β€” UX fix: see the edit while selecting βœ…

The solid red mask overlay hid the image, so you couldn't see how a local edit would look and had to commit blind (then undo + re-brush to retry).


2026-09-11 (later) β€” Fix: empty Open dialog on Linux βœ…

The Open dialog showed no images. Root cause (same as instax-printing): the native OS file dialog matches extension globs case-sensitively, so *.jpg hid .JPG files and folders looked empty. Fix: build a case-inclusive filter listing both cases of every extension (*.jpg *.JPG …) + "All files (*)", used for Open and Save.


2026-09-11 (later) β€” Phase 2: local-adjust panel + border smoothing βœ…

Answers "when I adjust a region, does the border blend so it doesn't look edited?"


2026-09-11 (later) β€” Phase 7: LaMa "erase a person" βœ…

Real AI object/person removal β€” the headline feature β€” now works, CPU-only.

Answering "does erase fill the background like the phone apps?"

Yes β€” now it does, via LaMa, for people/objects (was classical-only before, which only worked for small blemishes).


2026-09-11 β€” Phase 0 + Phase 1 + Phase 2 (partial) + Phase 4 (classical)

First working, end-to-end vertical slice: open β†’ edit (global + local) β†’ erase β†’ full-resolution save. All core logic is Qt-free and unit-tested.

Phase 0 β€” Scaffold βœ…

Phase 1 β€” Document, layers, compositor, masks βœ… (spine)

Phase 2 β€” Local adjustments 🟑 (partial)

Phase 3 β€” Curves βœ… (engine) / ⏳ (UI)

Phase 4 β€” Classical heal / erase βœ…

Tests

Notes / next