Enhance no longer fails the studio job when the rewrite refuses or comes back empty; host prompt copies keep the official steps plus the adult appendix after a node re-clone.
Co-authored-by: Cursor <cursoragent@cursor.com>
The PE stage now stays on the same jobId so the header and queue badge agree, and jobs behind it do not promote when enhance finishes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Edit no longer invents strangers when the prompt omits <image1> or PE drops image tokens; Hero stays Klein-only.
Co-authored-by: Cursor <cursoragent@cursor.com>
Force 6/1 when Turbo is on, skip negatives, keep PE in front, and fail closed if the r128 LoRA is missing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire EmptyLatentImage to the official ~1 MP grid so 16:9 lands at 1536×864, keep PE wh_ratio advisory, and leave Edit on the encode latent from image_1.
Co-authored-by: Cursor <cursoragent@cursor.com>
Queue PE first when enabled, fail closed on parse_ok, free VRAM, then run the existing T2I or Edit graph with the rewrite.
Co-authored-by: Cursor <cursoragent@cursor.com>
needsFit only compared aspect ratio, so a same-aspect-but-larger still
(e.g. a 4032x2268 phone photo against a 1344x768 canvas) would skip
fitting and hand MiniMaxH3AddGuide a still that does not match the
job's own latent size. Require an exact width+height match instead;
anything else (including unreadable dimensions) still fits.
Also guard the video save path: an empty Comfy download, an empty
stitched assembly, or a stitched result with no readable duration now
fails the job with a clear error instead of silently saving/attaching
a broken zero-length clip.
Co-authored-by: Cursor <cursoragent@cursor.com>
upload() ran fitStill (ffmpeg scale+pad) on every image except hero,
including the start/handoff still. Four chained extends resampled the
anchor frame four times and destroyed identity even with the hero
reference and lock text intact.
- upload(): only fit when the still's aspect truly differs from the
job canvas (needsFit); never fit hero or start regardless.
- Track handoffSource (anchor|extract) and whether the start frame was
fitted; surface both in job metadata and Details.
- extendSelected(): re-binding an already-selected clip on task switch
must not stomp the user's overridden locks/settings back to the
clip's saved values (regression introduced by the last hotfix push).
- Add tests/studio2-extend-fit.test.mjs: two extends at identical
width/height reach Comfy with the anchor PNG byte-identical, no
ffmpeg fit.
Co-authored-by: Cursor <cursoragent@cursor.com>