Project files
What a project is
Save project… in the toolbar writes one JSON file, <name>.lapstack.json, holding what it
takes to come back to a session:
- The frames — names, paths, sizes, and which are excluded
- Every setting of the parameter panel and the Save step
- The last run's registration — each frame's shift, scale and rotation, as the filmstrip shows them
- The retouch strokes — target, source and dabs, kept in step with undo and redo
The images are not in it. A result is saved as a file, or loaded again as a kept result. A project file is small.
Opening one
Open project… clears the session and puts placeholders in the filmstrip, in the project's order. The frames themselves then have to be found:
- Chrome and Edge remember the folder. Add folder… and a dropped folder go through the File System Access API, and the folder's handle is stored in the browser (in IndexedDB) under an id the project names. The banner over the filmstrip then offers open folder "shoot", and once you allow reading, the frames are read from it.
- Everywhere else, add the frames by hand. They are matched by name and size; files not in the project are left out.
Running a project again
Press Run. Two things then happen that an ordinary run does not do.
The registration is reused. The frames' transforms go straight to the engine, and the alignment search — most of a frame's time — is skipped entirely. reuse the project's registration in the Run ▾ menu turns that off, and a changed frame list turns it off by itself, because the transforms would no longer mean anything.
The retouch strokes are painted again, in order, each from its source brought back: a frame decoded and warped, a slab fused, the other stacked image, or a kept result of the same label if one is loaded. The retouched image comes back pixel for pixel.
A stroke whose source is not on hand is left out, and the log says why.
Saving the project again after the run writes this session's registration and strokes. Saving before running keeps the project's own.
Kept results
The panel's Results section. A result stays on past its own run, the way Helicon Focus keeps every run's output in a list.
When the next run starts — or the frame list changes under the result — that run's LAP and DFR images become kept results: the engine hands the sixteen-bit masters out of the run, the page keeps the display copies, and each is named after its run (run 3 · LAP, with its frames, settings and time in the tooltip).
A kept result is:
- A layer of the Stack group, so two runs with different settings can be compared with vs, the swipe divider, or side by side
- A brush source for retouching, if it is the run's size — the way Zerene retouches from any saved output
- A row of the Save step, cut to its own crop window and carrying its own metadata
Loading a result from a file
Load result… takes a saved image as one more kept result: an earlier session's, the command line's, or another program's. It is decoded in the engine with its EXIF, ICC profile and XMP kept, and no crop applied.
A file of a different size can be viewed and compared but not brushed from.
Memory
The masters are held in WebAssembly memory, so results kept MB in the section bounds them — default 1536 MB, and a 45-megapixel image is 270 MB each. Set it to 0 to keep none.
Over the limit, the oldest go first and the newest always stays. Each row's ✕ lets one go by hand, and Clear drops them all.
Frames aside, kept results are all a session holds. A batch keeps nothing, since its stacks are saved as they finish — though the result that was on screen when the batch started is kept.
With no current run's result on hand, the Stack group and the Save step still open on the kept ones. You can close a run, open a project, load an old result and compare, without re-running anything.