- 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.
veda_timing (loader, method veda) logs the time in gather, score, select, kernel and scatter
for a run; off by default and it changes no number. The run line now names the size and tile
plan of each stage, not only the last. Cheap speed-ups that keep the numbers exactly: the
list width of kept tiles comes from the layout instead of a device read, the head groups and
the per-row pattern stay on the device, and the predictor's projections are copied from pinned
memory.
Each modifier alone, same inputs four times: identical numbers, weights untouched, and feeding
the loader's output back into the loader installs nothing twice. Guards against state left on a
cached model making later generations different (the quality loss once suspected on LTX).
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).