- Header: view toggles (Assets/Preview/Properties/Auto-hide) move to the top bar; progress, the prompt warning and scene actions (rate, upscale, interpolate) move to the row under the toolbar; the timeline head never wraps from 1000px up and never clips its controls. The top bar grows a line instead of spilling when it wraps.
- Kit: every literal pixel size in element CSS is a token (the ratchet test is now zero); Composer's text box follows the viewport; the catalogue shows the component sizes.
- test:viewport adds a fake ComfyUI queue and socket for the render-running state and asserts the header is one row.
- Auto Montage removed (button, window, code, README/docs, tests). Saved projects holding pieces it made still load: the reused flag is kept.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Lane sizes and the window margin become tokens; toolbars wrap by default; windows are capped to the viewport; a ratchet test stops element CSS gaining literal pixel sizes. app/e2e runs the real app in Chromium and Firefox at eight screen sizes (npm run test:viewport). docs/ui-design-guidelines.md gains "Responsive by construction".
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
At 1280x720 the 302px timeline cut the second lane; its floor is now 340px. In narrow columns (Assets at 720px wide) the last segments (Images, 3x, 4x) were clipped out of reach; they now wrap to a second line.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Below 1250px the timeline header and toolbar wrap onto more rows and cut the lanes off at the fixed 340px; give it 360-400px there. Settings rows in a popover (the Sampler) had the stack's 20px gap on top of their own padding.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The ::after spacer plus the body gap added 24px under the last row of every non-flush panel on top of the 16px padding. Padding already clears the end of a scroll; removing it makes bottom clearance 16px everywhere.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The head's second row held only that label. It now reads "N clips · M active" (singular fixed); the selection and total time were already in the tools row.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The panel-body ::after spacer plus the body gap sat under a body that is a single filler; hide the spacer there so the controls sit 16px above the panel edge.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A redrawn page emptied the row and filled it again when the server answered. It now paints the
last answer at once and only changes what changed. With one file installed only the missing
one is offered, still under the predictor selector; with both, no download block at all.
It was drawn at the bottom of the model page, far from the field it fills, and the
selector's hint pointed at 'the row below'. The row now follows the selector directly and
the hint no longer points anywhere.
The row used to vanish as soon as one predictor was in models/veda, so the other could
not be fetched from the app. Now each file shows its own state, the licence notice stays
while a download button is shown, and a finished download refreshes the predictor list.
Learned tile-sparse attention (Veda, arXiv 2605.30325): tiles, tile plans, predictor
scoring and selection in plain torch (tested on CPU, including a real tiny H3 with a
stand-in kernel), an INT8 Triton kernel derived from SageAttention (untested on a GPU),
installed through the same override and per-step wrapper as SLA. Runs at the predictor's
trained budget; LoRA, MXFP8, Two stages, dense steps and the attention backend compose.
Settings > Models offers the official Hugging Face download of the predictor on a click,
with its licence beside it; taggers and this share one downloader (core/fetch.py).
Final render, selected export and media-bin saves no longer carry the project's name: the server names them with the same hash rule as saved scene clips. Render used the project's static FPS even when clips were interpolated; it now probes the files and uses the fastest real rate.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjVnGVrbKC3XMjBh7Te
The picture (aspect source) no longer wins over or blocks the reference-derived start on video-in pipelines; a test pins that
adding the picture changes nothing about the references.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjYBYFyV8YG5YDfYPRb
Shared video stream and NVIDIA helpers move to core (video_pipe, nvidia); the add-on needs nvidia-vfx 0.2+, moves an older one up and never moves a newer one back; Upscale and Interpolate cannot feed each other in Always mode.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tw9fjW75aYB8UyVRZo6fCr