7.6 KiB
Photo Editor Remaining Scope
Date: 2026-08-29
Current verdict
Odysseus is now a credible layered everyday editor, not an editor mockup. The first nine roadmap phases are implemented: professional transform geometry, shared direct-manipulation sessions, retained placed content, unified selections and masks, a reusable brush/retouch engine, and retained text and shape layers.
Phase 10 is functionally advanced but not closed. First-class adjustment layers now support Levels, Curves, Exposure, White Balance, Brightness/Contrast, Hue/Saturation/Lightness, Color Balance, Selective Color, and Gradient Map. They participate in clipping, groups, masks, visibility, opacity, history, the v14 document format, and flattening. Retained effects have since been added as a separate ordered stack with Gaussian Blur, Color Overlay, Drop Shadow, and Stroke, including editable colors, visibility, opacity, reorder, rasterize, history, persistence, and migration.
Practical readiness estimate:
- Everyday layered photo editing: about 88%
- Dependable professional v1 described by the roadmap: about 62%
- Broad Photoshop/Photopea feature parity: about 50%
The remaining gap is dominated by large-document rendering outside the live composite path, workspace consolidation, interchange/color policy, and release proof rather than basic canvas tools.
Verification snapshot
- The focused editor unit suite currently passes 31 tests in Docker.
- The full photo-editor browser suite currently has 41 passing workflows; the nested-group selection workflow initially exposed a row-hit regression, which now passes on isolated rerun after the slider-selection fix. The new group-effects workflow also passes.
- The new adjustment tests exercise deterministic pixel math, nested parameter normalization, retained metadata, undo/redo, clipping, masks, and draft reopen.
- The latest editor changes have not yet been rebuilt into the live
7011container.
Close Phase 10
This is the immediate release slice.
- Finish the bounded preview path for large documents. Downsampled previews now keep control movement responsive and full resolution is restored for commit/export. Live worker composites now use generation checks, latest-only coalescing, and close/reopen invalidation; extend the same guarantees to remaining preview paths.
- Add flattened-export versus reopened-project pixel comparisons for every adjustment family, including groups, clipping, masks, blend mode, and partial opacity.
- Validate the color algorithms visually. White Balance and Selective Color are currently deterministic approximations, not color-managed photographic transforms.
- Test every adjustment popup on phone and desktop viewports, including tall popups, color inputs, drag, Reset, Apply, Cancel, and Escape.
- Decide the migration path for the older per-raster
adjLayersstack. It can remain readable for compatibility, but new UI should converge on first-class adjustment layers instead of maintaining two competing concepts. - Bump static cache versions, rebuild the live container, and run a short
visual smoke test on
7011.
Phase 11: Retained effects and filters
The retained-effects slice is implemented for raster/placed/text/shape-compatible layer output: Gaussian Blur, Sharpen, Color Overlay, Drop Shadow, and Stroke have editable colors/parameters, visibility, opacity, reorder, rasterize, history, migration, and reopen support. Effect-specific masks, presets, and group-level effects are also implemented and covered by focused browser tests. Remaining work is:
- Extend worker coverage to serialization and remaining preview paths. Thumbnail encoding, retained-effect rasterization, and live composite rendering now use a worker where OffscreenCanvas is available, with synchronous compatibility fallbacks. Generation invalidation, latest-only coalescing, and CPU loop cancellation protect live rendering.
- Add explicit group-effect blend/ordering tests for nested groups and non-default blend modes, plus visual comparisons for effect stacks.
Introduce the renderer/worker cancellation boundary here rather than adding more synchronous full-canvas filters that Phase 14 must immediately replace.
Phase 12: Professional workspace
Consolidate fragmented popups into one contextual properties surface. Persist panel layout by device class, add command search, expose stable document status, and support multiple open documents with independent history, zoom, pan, and selection. Mobile should use canvas-first sheets rather than compressed desktop panels.
Phase 13: Interchange and export
Harden orientation, transparency, metadata, and color behavior for PNG, JPEG, and WebP first. Add copy/paste and drag/drop through placed layers. Treat layered formats as explicit compatibility projects: unsupported PSD/TIFF/HEIC features must be reported, never silently discarded. Odysseus project files remain the lossless source of truth.
Phase 14: Performance and recovery
Move remaining preview/pixel paths into workers. Thumbnail encoding, autosave serialization, adjustment rendering, and retained-effect rendering now have worker-backed paths with compatibility fallbacks. Add dirty-region compositing, reusable render surfaces, cancellation tokens, operation telemetry, a documented surface/history budget, autosave generations, and a checked-in 4K multi-layer benchmark.
This phase is the main architectural risk. Canvas 2D remains a valid compatibility renderer, but full-document synchronous passes will not scale to professional documents.
Phase 15: Assisted editing
Normalize generation, editing, inpainting, segmentation, restoration, and upscaling behind capability-based endpoints. Keep model/provider names out of editor logic. Requests must exclude chat memory, show progress, cancel safely, and return named reversible layers with provenance. Manual tools remain fully usable without an endpoint.
Much of the endpoint plumbing already exists; the remaining work is consistent capability discovery, lifecycle safety, and editor-native result handling.
Phase 16: Release gate
Run complete user journeys on Chromium and Firefox desktop plus representative phone/tablet viewports. Add keyboard-only and accessibility coverage, mixed 20-edit persistence/export tests, failure recovery, and large-document stress tests. No supported operation may silently flatten or discard retained state.
Architecture debt to control
galleryEditor.jsis still a large orchestrator. Continue extracting domain modules as visible features move, without a broad rewrite.- Legacy raster adjustment sublayers and first-class adjustment layers overlap. Converge on the first-class model.
- Pixel effects still rely heavily on synchronous full-canvas work.
static/style.csscarries substantial editor-specific surface area and needs clearer component boundaries before workspace customization expands.- The repository worktree contains many unrelated changes. Editor release and merge decisions require a scoped diff or clean integration branch.
Recommended execution order
- Close and deploy Phase 10.
- Build Phase 11 through a cancellable render boundary.
- Consolidate the workspace in Phase 12.
- Define color/metadata policy and complete Phase 13.
- Finish worker rendering, stress, and recovery in Phase 14.
- Normalize assisted editing in Phase 15.
- Run the cross-browser professional release gate in Phase 16.
Do not expand into full PSD fidelity, CMYK production, RAW development, 3D, or complete Photoshop parity before this critical path passes. Those are separate product decisions, not prerequisites for a strong Odysseus editor.