Skip to content

v0.5.1: M6.1 export pause/resume

Choose a tag to compare

@froggeric froggeric released this 09 Aug 16:12
· 131 commits to main since this release

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.