After creating a circle, rectangle, or finishing a bezier path, switch
the active tool to Select/Move so the new shape can be adjusted right
away instead of stamping another shape on the next click.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Shape sizes (radius/width/height) were stored as absolute editor pixels
while positions were normalized, so masks rendered at a resolution other
than the editor's video came out the wrong size. Store sizes normalized
(0-1 fraction of the frame) and scale by the output dims at render time,
with backward compatibility for existing absolute-pixel data.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Persistence (shapes survive ComfyUI restart, per-node, travel with workflow):
- Store shapes/keyframes in a hidden serialized mask_data widget on the node
- Per-node disk backup in roto_data/ (not temp dir); resolution order:
widget JSON -> disk backup -> empty
- Key all video state + HTTP routes per-node via UNIQUE_ID / ?node=
- BroadcastChannel bridge + /stash route between popup editor and graph
Editor:
- Opacity slider now applies live to selected shapes (keyframes at current frame)
- Removed "Import from Nuke" button and orphaned paste-to-import handler
- Refreshed UI to a modern dark theme (CSS variables, accent gradients,
custom sliders, restyled panels/scrollbars/badges)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>