Remove dead "Seed" field from Easy Gen settings; bump to 3.4.0
The Generation panel's Seed field was bound to Project.seed, a legacy field (movie_editor/backend/timeline.py:562) that nothing in generation reads — the real seed resolution (server.py's _resolve_run_seed) only ever reads sampler_inputs.seed, which already defaults to random when unset. The field always showed "1" and editing it had zero effect, reading as "seed is stuck, not randomized" when generation was in fact already randomizing correctly via the real (and already-present) Seed control under Engine ▸ Timing & Seed. Removed the dead field; the settings hint now points there. Also bumps pyproject.toml to 3.4.0 and adds the CHANGELOG entry for this session's Easy Gen work (shortcut/transition import, Engine settings, Save/ Gallery/Export buttons, continuity pin, and the bypass/state-sync/ autoplay/filename fixes), ahead of tagging the release on main.
This commit is contained in:
@@ -2,6 +2,23 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [3.4.0] - 2026-07-24
|
||||
|
||||
### Added
|
||||
- **Easy Gen** (the simplified single-scene UI) reaches near feature-parity with the Cutting
|
||||
Room for the workflows it's meant for:
|
||||
- Shortcut/transition JSON library **import & export** in Settings ▸ Shortcuts (merge or
|
||||
replace) — Easy Gen previously had no way to load a shortcut/transition library at all.
|
||||
- The full **Engine settings** panel (Studio refinement/adjustments/sampler algorithm,
|
||||
Chain Sampler continuity/timing/guidance/decode/experimental, Best-FaceID identity
|
||||
transfer) — restored via the same shared frontend module the Cutting Room uses.
|
||||
- A **Log** button (ComfyUI backend log, same as the Cutting Room's).
|
||||
- An explicit **Save** button, and a **Gallery** picker to reuse already-uploaded media as
|
||||
the i2v anchor without re-uploading — with a one-click **continuity identity pin**
|
||||
button right on each thumbnail, mirroring the Cutting Room's Media Bin.
|
||||
- An **Export…** button to download the project as a `.funpack_project.json` file (e.g. to
|
||||
move a project off a rental GPU box) — the backend route already existed but had no UI.
|
||||
|
||||
### Changed
|
||||
- **Loop temporal style now works alongside guides.** Scenes carrying appended guide frames
|
||||
(carry-i2v-guides, mid-scene guide, JoyAI memory, custom guide stacks) no longer disable
|
||||
@@ -9,6 +26,43 @@
|
||||
memory tail) stays canonical, so guides keep informing every position of the cycle without
|
||||
ever being rendered into it. The i2v anchor was always supported - it rides the denoise
|
||||
mask, which rolls in step with the latent.
|
||||
- **Easy Gen's Studio always runs in Prompt-only mode.** Easy Gen has no rating UI, so every
|
||||
Engine setting that's a no-op without a trained refinement key/rated history (refinement
|
||||
key, value guidance, steer mode, reference injection, embed/score/output guidance, taste
|
||||
retrieval, DynaShift, sampler-panel velocity bias/rescue) is hidden there and enforced at
|
||||
the pipeline level, not just the UI — every Easy Gen generate call forces Studio's `mode`
|
||||
to "Prompt only" and the rating-gated Chain Sampler knobs off via node overrides, so a
|
||||
project configured with these on in the Cutting Room still generates plainly from Easy
|
||||
Gen. A note points to the Cutting Room or the ComfyUI graph for the full learned refiner.
|
||||
- The "expose to editor" eye buttons in Models & Pipeline are hidden under Easy Gen — there's
|
||||
no per-scene inspector for an exposed control to ever surface in, so they were inert
|
||||
clutter that could look actionable and silently do nothing.
|
||||
|
||||
### Fixed
|
||||
- The shortcut autocomplete menu could open off-screen below the prompt field (Easy Gen's
|
||||
prompt box sits in a footer bar at the bottom of the viewport) with no way to see or click
|
||||
a suggestion. Now flips above the field when there isn't room below.
|
||||
- A node's **bypass** toggle could silently do nothing: when the pass-through mapping was
|
||||
ambiguous, or the bypassed node's own matching input wasn't wired to anything, the failure
|
||||
was only ever recorded in a report field no frontend code read or displayed — the node
|
||||
stayed fully active with no visible error. Generation now blocks with a clear reason
|
||||
instead of a silent no-op.
|
||||
- Easy Gen could silently revert Models & Pipeline edits (bypass, exposed widgets, LoRA
|
||||
settings): any later project save sent a stale in-memory copy of the models config back to
|
||||
the server, clobbering whatever was just changed there independently.
|
||||
- Easy Gen's preview restarted playback (ignoring a pause) on every background health poll
|
||||
or prompt keystroke, since each one rebuilt the video element from scratch.
|
||||
- A "fetching process...aborted by the user agent" unhandled-rejection error banner could
|
||||
appear when switching between Gallery/generated media in Easy Gen.
|
||||
- Downloaded generation results always suggested "result.mp4" as the filename regardless of
|
||||
the actual render (no `Content-Disposition` on the `/result` route) — the underlying file
|
||||
was already uniquely named per run and already lived in ComfyUI's temp dir, just wasn't
|
||||
surfaced to the browser's save dialog.
|
||||
- Easy Gen's Generation settings showed a "Seed" field always reading "1" and looking fixed.
|
||||
It was bound to the Project's legacy `seed` field, which nothing in generation has ever
|
||||
read (the real seed resolution only reads `sampler_inputs.seed`, already correctly random
|
||||
when unset) — removed the dead field in favor of the working one under Engine ▸ Timing &
|
||||
Seed, which already says so.
|
||||
|
||||
## [3.3.0] - 2026-07-15
|
||||
|
||||
|
||||
@@ -67,15 +67,11 @@
|
||||
"Passed to the negative conditioning for every run."));
|
||||
wrap.append(pr);
|
||||
|
||||
wrap.append(el("div", "sw-rows-label", "Seed"));
|
||||
const sd = el("div", "sw-rows");
|
||||
sd.append(field("Seed", numberInput(p.seed, (v) => commit((proj) => proj.seed = v), { min: 0 }),
|
||||
"Fixed seed for this project's runs."));
|
||||
wrap.append(sd);
|
||||
wrap.append(el("div", "sw-hint",
|
||||
"Studio/Chain Sampler/continuity controls live under Engine. Studio always runs in "
|
||||
+ "Prompt-only mode here — no refinement key, since Easy Gen has no rating UI to train "
|
||||
+ "one. For the full learned refiner, use the Cutting Room or the ComfyUI node graph."));
|
||||
"Studio/Chain Sampler/continuity controls, including Seed, live under Engine ▸ Timing "
|
||||
+ "& Seed (empty = a new random seed every Generate). Studio always runs in Prompt-only "
|
||||
+ "mode here — no refinement key, since Easy Gen has no rating UI to train one. For the "
|
||||
+ "full learned refiner, use the Cutting Room or the ComfyUI node graph."));
|
||||
}
|
||||
|
||||
const unsub = S.subscribe(render);
|
||||
@@ -85,8 +81,8 @@
|
||||
|
||||
window.SettingsWindow.register({
|
||||
id: "generation", group: "Generation", order: 1, title: "Generation",
|
||||
subtitle: "Output size, length, seed, and refinement key for this project.",
|
||||
keywords: "width height frames frame rate seed negative prompt refinement key generation",
|
||||
subtitle: "Output size, length, and negative prompt for this project.",
|
||||
keywords: "width height frames frame rate negative prompt generation seed engine",
|
||||
iconBg: "linear-gradient(180deg,#ffb64d,#e07f1f)",
|
||||
icon: '<svg viewBox="0 0 16 16" width="13" height="13"><path d="M9.2 1.3 3 9h4.1l-1 5.7L12.9 7H8.5l.7-5.7z" fill="#fff"/></svg>',
|
||||
mount,
|
||||
|
||||
+1
-1
@@ -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.3.0" # Custom Node version. Must be semantically versioned.
|
||||
version = "3.4.0" # Custom Node version. Must be semantically versioned.
|
||||
license = { text = "GNU GPL v3" }
|
||||
dependencies = [] # Filled in from requirements.txt
|
||||
|
||||
|
||||
Reference in New Issue
Block a user