v0.5.1: M6.1 export pause/resume
M6.1 export pause/resume. Long GUI exports (a multi-day genome-default sequence) are now pausable and resumable without losing rendered work, plus crash recovery. Engine parity is unchanged: no renderer math changed, and the resume pixel-identity pins hold.
Pause/resume and crash recovery
- ExportCoordinator.runResumable chunks the timeline at frame-count edges (default 30), encodes each chunk, and writes a checkpoint after each. Pause keeps completed work. Resume rebuilds the identical plan and re-parses SHA-256-verified source bytes, so resumed frames are byte-identical (determinism, rule #2).
- A checkpoint left by a quit or crash is resumable at the next launch.
- Recoverable failures (disk full) surface as a paused state with a Resume offer, not a terminal failure.
renderFramesInterleaved
- A new per-frame render loop for the resumable path, byte-identical to the existing renderFrames. It decides repeat-count per frame, so frame-count chunks can span a loop to transition boundary. The existing renderFrames is unchanged.
GUI
- The progress banner gains a Pause button and a paused card with Resume and Discard.
CLI
- --checkpoint-frames N: checkpoint every N frames.
- --resume : resume a checkpointed run. The checkpoint recipe is authoritative; conflicting flags error.
- --discard : remove a checkpoint and its chunks.
- Ctrl-C keeps the checkpoint so --resume works as crash recovery.
Install
Download emberweft-v0.5.1-macos-arm64.zip and unzip it. From the unzipped folder, clear quarantine (the build is unsigned):
xattr -dr com.apple.quarantine .
Run the GUI from that folder:
./emberweft-gui
Apple Silicon, macOS 26. The CPU renderer works without the Metal bundle; the GUI and Metal exports need the sibling bundles (included in the zip).
Deferred
- Temporal smoothing (across-frame histogram EMA for low-spp quality) is the next slice, M6.1 slice 2.