diff --git a/CHANGELOG.md b/CHANGELOG.md index c2f63b07..6fb5096a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,38 @@ ## [Unreleased] +## [3.4.1] - 2026-07-31 + ### Added +- **A second sampling pass on the Chain Sampler.** Give it a schedule and every scene is + sampled twice: pass 1 runs the main sigmas in full, then pass 2 runs its own schedule in + full, starting from pass 1's finished clip. Nothing is cut short and nothing is derived — + total steps are simply the two added up — and pass 2 re-enters through ComfyUI's ordinary + img2img noise scaling, so **its first sigma is a literal strength dial** (0.8 reworks the + shot, 0.4 polishes, 0.2 is detail work). The i2v anchor stays pinned across the split. In + the Cutting Room it is one field, **Second pass schedule**, under FunPack Studio ▸ Sampler + algorithm: typing a schedule enables the pass, clearing it turns the pass off. +- **An optional operation between the two passes** (`none` by default — nothing runs unless + you pick one). `sharpen` runs one forward of Lightricks' trained 2× latent upsampler and + resamples straight back to the original size: no video-model calls, a fraction of a step, + and pass 2 then re-denoises the result, which is what makes it stick. `upscale_2x` keeps + the 2×, so pass 2 runs at four times the pixels and the scene decodes at double resolution + (3–5× the cost of the second half, and the i2v pin is dropped — the scene report says so). + Both use the same upsampler file segmented detailing does, and the model picker now appears + alongside the operation instead of only under segmented detailing. +- **Cut the opening off i2v scenes** (`cut_opening_frames`, Chain Sampler ▸ Timing & Seed). + The anchor is a pinned frame at position 0: it carries identity, style and composition + better than anything that weakens it on the way in — and it is also literally the first + frame you see, so every i2v scene opens on the exact reference still. The scene is + generated exactly as normal, anchor at full strength, **no extra sampling**, and the + opening is then cut off the finished clip: an i2v generation that reads as t2v. Nothing is + regrown, so the scene comes out that much shorter and the audio is cropped to match. +- **Context windows** for scenes longer than the model's comfortable window (ComfyUI core's + own mechanism, audio-aware on LTX — nothing ported). Engages only past the window length, + so shorter scenes pay nothing. +- **The progress readout says what is running**, not just a step count: `sampling 17/26 · + scene 2/3 · pass 2 of 2`. The second pass also announces itself on the ComfyUI console the + moment it starts, rather than only in the run report afterwards. - **Prompt `$name` variables in Easy Gen** — the shorthand-for-a-full-phrase layer the Cutting Room's Composer already had (`$vid = "High quality, high fidelity realistic video, motion blur, cinematic fog"`). A **$ Variables** button in the prompt bar opens its own @@ -19,9 +50,41 @@ indistinguishable from a real crash at the API level), and any partial media it did write is still shown. +- **Easy Gen re-attaches to a running generation after a page reload** — the Cutting Room + already did. + ### Changed - **Variable values are now auto-growing text boxes** (both UIs) instead of one-line inputs — a long phrase was effectively uneditable in a single-line field. +- **Plateau step-cache and context windows are mutually exclusive** — the cache cannot tell + one window from another within a step, so it is skipped with a note in the scene report. + +### Fixed +- **Context windows never worked.** The schedule names were ComfyUI core's spelled backwards + (`uniform_standard` where core says `standard_uniform`), so every choice except `batched` + raised a `ValueError` out of the sampler and **failed the whole render**. Core's names are + the choices now; the old spellings are still accepted and mapped onto them, so a saved + project keeps generating. An unknown name is refused with a reason naming what your + ComfyUI accepts, instead of escaping as an exception. +- The same call also passed a keyword core's window handler does not always take, which was + reported as *"ComfyUI core too old"* — silently switching off a feature that core fully + supports. Unsupported keywords are dropped now, with a note naming the one setting that + degrades. +- **A rejected prompt now says why.** ComfyUI's top-level error for a validation failure is a + fixed blob ("Prompt outputs failed validation", no details); the part naming the node, the + widget and the bad value is in `node_errors`, which the editor never read — so every + rejected prompt reported the same nothing. Both are shown. +- **Bypass no longer refuses a node over an output nothing uses.** A node that emits an extra + output the graph never wires (an IC-LoRA loader's `latent_downscale_factor`, say) could not + be bypassed at all, because a passthrough was demanded for every output rather than for the + ones actually consumed. +- **The progress bar counted only the first pass**, so a second pass overflowed it and then + jumped backwards at the next scene. +- **Identity transfer** follows ComfyUI's new RoPE matrix layout. +- **Models & Pipeline** treats ComfyUI V3 MultiType widgets as widgets rather than required + sockets, so a node using them no longer reads as unsatisfied. +- The latent upsampler loads on ComfyUI v0.29.0, which moved it onto DynamicVram and made + `operations` a required argument. ## [3.4.0] - 2026-07-24 diff --git a/README.md b/README.md index 71fc8afb..0c646b0c 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,14 @@ and several bugfixes (a bypass toggle that could silently do nothing, a state-sy could revert Models & Pipeline edits, and more) — see the [CHANGELOG](CHANGELOG.md) for the full list. +**3.4.1** adds a **second sampling pass** on the Chain Sampler — give it a schedule and every +scene is sampled twice, with an optional latent sharpen/2× upscale between the passes — plus +**cut the opening** for i2v scenes (keep the anchor's identity transfer at full strength, then +cut the reference still out of the finished clip), **context windows** for scenes longer than +the model's comfortable window, and a progress readout that says which scene and which pass is +running. Context windows, which never actually worked before, are fixed — see the +[CHANGELOG](CHANGELOG.md) for the full list. + See [`docs/MovieEditor.md`](docs/MovieEditor.md) for complete Cutting Room documentation. ## Installation diff --git a/pyproject.toml b/pyproject.toml index 24fba925..5d40e6b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ [project] name = "ComfyUI-FunPack" # Unique identifier for your node. Immutable after creation. description = "An AI movie studio inside ComfyUI: the Cutting Room browser-based video editor with timeline, per-scene prompts and one-click montage generation, plus a self-improving engine that learns from your ratings. Includes the full node stack (Studio, Refiner V2, LTXAV Scene Chain Sampler) for classic graph workflows." -version = "3.4.0" # Custom Node version. Must be semantically versioned. +version = "3.4.1" # Custom Node version. Must be semantically versioned. license = { text = "GNU GPL v3" } dependencies = [] # Filled in from requirements.txt