mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-31 15:48:33 +00:00
The tracked frames lived only in memory, so a saved project lost them: a render in another process (effectcraft-cli render-frame) segmented the frames again with the classic engine. A propagate with a tracker now saves the frames it followed with the instance, in a hidden parameter beside Freeze's (TrackCache: each frame's matte, Refine Edge band, colour models and confidence, keyed by the inputs it was tracked from). - They apply while the strokes and span they came from are unchanged, whichever model Settings choose, so a project renders the same when it reopens, without the model loaded or chosen. - A stroke or span change makes them stale until the next Propagate. A Propagate replaces them; with the classic engine it leaves none. - roto.status reports tracker.saved (the model they came from) and a notice when Settings choose another model. - The save at job completion is not an undo step (the frames are a cache of the strokes) and is skipped if the strokes changed while tracking. Decoding checks the saved size, so a corrupt project is ignored rather than overflowing. Object Matte saves nothing. Projects saved before this change open unchanged (the parameter is filled in on open). Tests: a saved project reopens with the model unloaded and renders the saved frames through Chain::ensure; choosing the classic engine keeps them until a classic Propagate replaces them; a stroke change makes them stale. The SAM 2 tests and the failing-tracker test take the Roto test lock. Claude-Session: https://claude.ai/code/session_0136kZtXrYo5VUWEFxWduwUD