Editit is a C++23 desktop photo-editing application and image-processing project built around a non-destructive editing architecture.
At the center of the application is an internal floating-point image representation and processing engine that operate independently of Qt. Editing parameters are stored as develop state rather than being destructively applied to source pixels, allowing the same source image and edit state to be reevaluated for interactive previews, history restoration, and full-resolution export.
Image operations are organized through a processing and render-graph architecture rather than being wired directly into UI callbacks. The application layer updates editing state, submits render work, and receives processed image buffers for presentation through Qt Widgets. This keeps image-processing logic separate from the viewport and creates clearer boundaries between the editor interface and the underlying engine.
The project includes crop and mask tooling, exposure and parameterized adjustments, editing history, thumbnail and preview generation, image ratings and flags, metadata handling, ICC-profile work, JPEG and PNG export with XMP persistence, and a SQLite-backed catalog for image and editing state.
Performance has been a major part of the engineering work. High-resolution RAW photography can require very large working buffers, so the application distinguishes source images, thumbnails, interactive previews, processing buffers, and export renders rather than treating every interaction as a full-resolution operation. I profiled image decoding, buffer allocation and copying, cache behavior, render invalidation, preview generation, and adjustment latency, and moved preview rendering away from the immediate UI interaction path.
Editit also includes partial Vulkan and MoltenVK compute infrastructure, including runtime initialization and GLSL-to-SPIR-V shader tooling. The primary interactive image-processing path remains CPU-based, but that work led to lower-level debugging across CMake toolchain discovery, shader resources, macOS dynamic-library loading, application packaging, and code signing.
The project has increasingly become less about reproducing the surface features of an existing photo editor and more about understanding the systems underneath one: image representation, state ownership, rendering, memory costs, persistence, asynchronous work, and the boundary between an editing engine and the application using it.