lapstack

Frames

Adding frames

Add frames… opens a file picker. Add folder… takes a whole folder including its subfolders, sorting files by path so a folder's frames stay together. Dragging files or a folder onto the window does the same thing.

Frames are decoded and downscaled in a background worker as soon as they are added, so the filmstrip and the Source view are populated before you run anything. The browser itself cannot decode TIFF, so lapstack decodes every format in WebAssembly rather than handing any of it to the browser.

The order in the filmstrip is the stacking order. Files sort naturally, so f2 comes before f10 rather than after it.

Formats

InputNotes
PNGEight- and sixteen-bit
JPEGEight-bit
TIFFEight- and sixteen-bit
Camera rawNEF, CR2, CR3, ARW, DNG, RAF, ORF, RW2, PEF, IIQ, 3FR and the rest of what rawler decodes

Output keeps the input's bit depth — sixteen-bit needs PNG or TIFF, and a raw counts as sixteen-bit. Formats and metadata has the full picture.

How raws are developed

A raw is developed as shot and nothing more: black and white levels, demosaic, the white balance the camera recorded, the camera's color matrix to sRGB, the sRGB curve. The result is the same sixteen-bit RGB every other input becomes, turned the way the EXIF orientation says. A monochrome sensor gives gray.

There is no exposure or tone adjustment, deliberately. The frames of a stack are shot alike, and what the fusion needs is that they are developed alike. When the look matters, develop the stack in a raw converter first — with identical settings for every frame — and give lapstack the TIFFs.

Developing costs more than decoding: about a second per 24-megapixel frame natively across all cores, and several seconds in the browser, which develops on one thread. In the filmstrip you see the JPEG preview the camera embedded in the file; the run develops the frame properly.

Tip

If you want the stack back as a raw rather than a developed image, tick linear DNG in the Run ▾ menu (or use -o stacked.dng). The raws are then not developed to sRGB at all, and the result is written in the camera's own color space. See saving.

Frames of different sizes

A frame that is not the size of frame 0 — a JPEG among the raws, a different camera mode — is resampled to frame 0's size (each axis independently, with a spline 4×4 kernel) and the run says so. Alignment takes care of what remains. A frame of the wrong aspect will be stretched, and it will be visible; that is a capture problem, not a settings problem.

Editing the frame list

The filmstrip is editable, and every edit is undoable in the sense that nothing is destroyed — excluded frames stay in the list.

ActionHow
Exclude a frameHover, ⊘ — or X on the selected frame
Include it againHover, ↩ — or include all in the filmstrip head
Remove a frameHover, ✕ — or Delete
Move a frameHover, ▲ ▼ — or Alt + ↑ / ↓ — or drag the thumbnail
Exclude or remove a rangeShift-click a frame's ⊘ or ✕ to take everything from the last one marked through that one
Reverse the orderreverse in the filmstrip head

An excluded frame stays at its place in the list, dashed and dimmed. It is left out of the run, out of the batch split, out of the file-name tokens and out of the save, but it is still there to bring back.

Reverse is for a stack shot back to front. It puts frame 0 at the near end again, which matters for the stereo, rocking and 3D outputs. In a batch each stack is reversed on its own, which is what running a rail backward actually means.

Note

Editing the frame list after a run drops the result: the result's frame indices are the list's, so they no longer mean the same thing. The status bar and the log say so when it happens. The aligned proxies stay as the thumbnails.

A stack that is in hand as part of a batch cannot be edited — choose all frames first — and the list is locked while a run or a save is in progress.

Rotate

rotate frames (the command line's --rotate 90 | 180 | 270) turns every frame clockwise as it is decoded, for a camera that was held sideways. The thumbnails turn with the frames.

A raw is already turned by its EXIF orientation, so this is for TIFFs and JPEGs, which are not.

Draft

draft (the command line's --draft N) block-averages every frame by 2^N as it is decoded, so the whole run happens at a fraction of the size — alignment, fusion, the depth pass, every view and every file. The Run button reads draft ÷4 so you cannot forget it is on.

This is the single most useful control for working quickly. Five 45-megapixel raws at --draft 2 align, fuse and run the depth pass in about four seconds, raw development included. Use it to find your settings, then turn it off for the real run.

The crop window and the scale bar's calibration follow the frame's own pixels, so a draft's output is exactly the full run's output, shrunk.

Source: sites/lapstack/content/docs/app/frames.md